zlisen пре 4 година
родитељ
комит
a362563a67

+ 3
- 3
src/router.js Прегледај датотеку

@@ -86,9 +86,9 @@ const routes = [
86 86
         }
87 87
     },
88 88
     {
89
-        path: '/lookRecord',
90
-        name: 'lookRecord',
91
-        component: () => import('./view/lookRecord'),
89
+        path: '/look',
90
+        name: 'look',
91
+        component: () => import('./view/look'),
92 92
         meta: {
93 93
             title: '添加空看'
94 94
         }

+ 20
- 0
src/utils/dateFormat.js Прегледај датотеку

@@ -0,0 +1,20 @@
1
+
2
+export default (fmt, date) => {
3
+    let ret;
4
+    const opt = {
5
+        "Y+": date.getFullYear().toString(),        // 年
6
+        "m+": (date.getMonth() + 1).toString(),     // 月
7
+        "d+": date.getDate().toString(),            // 日
8
+        "H+": date.getHours().toString(),           // 时
9
+        "M+": date.getMinutes().toString(),         // 分
10
+        "S+": date.getSeconds().toString()          // 秒
11
+        // 有其他格式化字符需求可以继续添加,必须转化成字符串
12
+    };
13
+    for (let k in opt) {
14
+        ret = new RegExp("(" + k + ")").exec(fmt);
15
+        if (ret) {
16
+            fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
17
+        };
18
+    };
19
+    return fmt;
20
+}

+ 2
- 2
src/utils/uploadImage.js Прегледај датотеку

@@ -1,11 +1,11 @@
1 1
 import { showDanger } from './index'
2 2
 import request from './request'
3 3
 
4
-export default (file, imgType) => {
4
+export default (file, imgType,index) => {
5 5
   const formData = new FormData()
6 6
   formData.append('resourceImg', file)
7 7
   formData.append('imgType', imgType)
8
-
8
+  index&&formData.append('index', index)
9 9
   return request({
10 10
     url: '/upload-img',
11 11
     data: formData,

+ 22
- 28
src/view/followup/index.vue Прегледај датотеку

@@ -17,6 +17,7 @@
17 17
       />
18 18
 
19 19
       <van-field
20
+        :model-value="formData.followType"
20 21
         required
21 22
         :rules="[{ required: true, message: '请选择跟进类型' }]"
22 23
         label="跟进类型"
@@ -29,30 +30,14 @@
29 30
           />
30 31
         </template>
31 32
       </van-field>
32
-      <!-- <van-field
33
-        v-model="pickerState.value"
34
-        readonly
35
-        clickable
36
-        required
37
-        name="followType"
38
-        label="跟进类型"
39
-        placeholder="跟进类型"
40
-        @click="pickerState.showPicker = true"
41
-        :rules="[{ required: true, message: '请选择跟进类型' }]"
42
-      />
43
-      <van-popup v-model:show="pickerState.showPicker" position="bottom">
44
-        <van-picker
45
-          :columns="followTypeOptions"
46
-          @confirm="onConfirm"
47
-          @cancel="pickerState.showPicker = false"
48
-        />
49
-      </van-popup> -->
50 33
 
51 34
       <van-field
52
-        v-show="formData.followType == 4"
35
+        v-if="formData.followType == 4"
53 36
         v-model="formData.newRoomPrice"
54 37
         label="价格调整为"
55 38
         type="number"
39
+        required
40
+        :rules="[{ required: true, message: '请填写金额' }]"
56 41
       >
57 42
         <template #extra>
58 43
           元/月
@@ -67,7 +52,10 @@
67 52
         rows="3"
68 53
         autosize
69 54
         type="textarea"
70
-        :rules="[{ required: true, message: '请填写跟进描述' }]"
55
+        :rules="[
56
+          { required: true, message: '请填写跟进描述' },
57
+          { pattern, message: '记录必须包含汉字' },
58
+        ]"
71 59
       />
72 60
       <div style="margin: 16px;">
73 61
         <van-button round block type="primary" native-type="submit">
@@ -85,6 +73,8 @@ import { useRouter } from "vue-router";
85 73
 import { useModel } from "@zjxpcyc/vue-tiny-store";
86 74
 import Picker from "@/components/Picker";
87 75
 import request from "@/utils/request";
76
+import { alert } from "../../utils";
77
+
88 78
 export default {
89 79
   name: "closehouse",
90 80
   components: {
@@ -99,15 +89,17 @@ export default {
99 89
     return {};
100 90
   },
101 91
   setup() {
102
-     const roomId = router.currentRoute.value.query.roomId;
92
+    const router = useRouter();
93
+    const roomId = router.currentRoute.value.query.roomId;
103 94
     const formData = reactive({
104 95
       roomId: roomId,
105 96
       followType: undefined, //根据类型
106 97
       newRoomPrice: undefined, //新价格
107 98
       followDesc: undefined, //根进描述
108 99
     });
109
-    const router = useRouter();
110
-   
100
+    const pattern = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
101
+    // var reg = ;
102
+    //  const pattern = /\d{6}/;
111 103
     const { detail, getDetail } = useModel("room");
112 104
 
113 105
     const followTypeOptions = [
@@ -134,9 +126,13 @@ export default {
134 126
 
135 127
       request({
136 128
         url: "/room/follow/save",
137
-        params: formData,
129
+        data: formData,
138 130
       }).then(() => {
139
-        // list.value = res.result;
131
+  
132
+        alert("添加成功").then(() => {
133
+          router.go(-1);
134
+        });
135
+        //
140 136
       });
141 137
     };
142 138
 
@@ -147,10 +143,8 @@ export default {
147 143
     });
148 144
 
149 145
     return {
150
-   
151
-
152 146
       formData,
153
-
147
+      pattern,
154 148
       onSubmit,
155 149
       detail,
156 150
       followTypeOptions,

+ 207
- 0
src/view/look/index.vue Прегледај датотеку

@@ -0,0 +1,207 @@
1
+<template>
2
+  <div class="lookrecord">
3
+    <van-form @submit="onSubmit">
4
+      <van-field
5
+        :model-value="`${detail.roomInfo?.roomCode}${detail.roomInfo?.id}`"
6
+        name="id"
7
+        label="房源编号"
8
+        readonly
9
+        placeholder="房源编号"
10
+      />
11
+      <van-field
12
+        :model-value="detail.building?.buildingName"
13
+        name="building"
14
+        label="所属楼盘"
15
+        readonly
16
+        placeholder="所属楼盘"
17
+      />
18
+      <van-field
19
+        v-model="formData.followTime"
20
+        readonly
21
+        clickable
22
+        required
23
+        name="address"
24
+        label="看房时间"
25
+        placeholder=""
26
+        @click="showTimePicker = true"
27
+        :rules="[{ required: true, message: '请选择时间' }]"
28
+      />
29
+      <van-popup v-model:show="showTimePicker" position="bottom">
30
+        <van-datetime-picker
31
+          type="datetime"
32
+          @confirm="onConfirm"
33
+          @cancel="showTimePicker = false"
34
+        />
35
+      </van-popup>
36
+      <!-- <van-field
37
+        v-model="state.building"
38
+        required
39
+        name="type"
40
+        label="关闭类型"
41
+        placeholder="请选择"
42
+        :rules="[{ required: true, message: '请填写密码' }]"
43
+      /> -->
44
+      <van-field
45
+        v-model="formData.followDesc"
46
+        required
47
+        name="followDesc"
48
+        label="跟进描述"
49
+        placeholder="跟进描述"
50
+        rows="3"
51
+        autosize
52
+        type="textarea"
53
+        :rules="[
54
+          { required: true, message: '请填写跟进描述' },
55
+          { pattern, message: '记录必须包含汉字' },
56
+        ]"
57
+      />
58
+ <!-- :before-delete="handleDelete" -->
59
+      <van-field name="followImg" label="上传图片">
60
+        <template #input>
61
+          <van-uploader
62
+            v-model="imgUrl"
63
+            :after-read="handleUpload"
64
+          :max-count="1"
65
+          />
66
+        </template>
67
+      </van-field>
68
+      <div style="margin: 16px;">
69
+        <van-button round block type="primary" native-type="submit">
70
+          提交
71
+        </van-button>
72
+      </div>
73
+    </van-form>
74
+  </div>
75
+</template>
76
+
77
+<script>
78
+import { reactive, ref, onMounted } from "vue";
79
+import {
80
+  Form,
81
+  Button,
82
+  Field,
83
+  Picker,
84
+  Popup,
85
+  DatetimePicker,
86
+  Uploader,
87
+} from "vant";
88
+import { useRouter } from "vue-router";
89
+import { useModel } from "@zjxpcyc/vue-tiny-store";
90
+import uploadImage from '@/utils/uploadImage'
91
+
92
+
93
+export default {
94
+  name: "lookrecord",
95
+  components: {
96
+    [Form.name]: Form,
97
+    [Button.name]: Button,
98
+    [Field.name]: Field,
99
+    [Popup.name]: Popup,
100
+    [Picker.name]: Picker,
101
+    [DatetimePicker.name]: DatetimePicker,
102
+    [Uploader.name]: Uploader,
103
+
104
+    // Secondhand:secondhand,
105
+  },
106
+  data() {
107
+    return {};
108
+  },
109
+  setup() {
110
+    const router = useRouter();
111
+    const roomId = router.currentRoute.value.query.roomId;
112
+    const showTimePicker = ref(false);
113
+    const imgUrl = ref([]);
114
+    
115
+    const { detail, getDetail } = useModel("room");
116
+    const formData = reactive({
117
+      roomId: roomId,
118
+      followType: 0, //根据类型
119
+      followTime: new Date(), //看房时间
120
+      followDesc: undefined, //根进描述
121
+      followImg: undefined, //图片
122
+    });
123
+    const pattern = /[\u4E00-\u9FA5\uF900-\uFA2D]/;
124
+
125
+    const onSubmit = () => {
126
+      console.log("submit", formData);
127
+    };
128
+
129
+    const onConfirm = (value) => {
130
+      console.log(value, "value");
131
+      formData.followTime = value;
132
+      showTimePicker.value = false;
133
+    };
134
+
135
+    const handleUpload = file => {
136
+      if (file && file.file) {
137
+       console.log(file, )
138
+uploadImage(file.file, '', 1).then((url) => {
139
+        // const img = {
140
+        //   roomId,
141
+        //   url,
142
+        //   imgType: type,
143
+        //   sort,
144
+        // };
145
+        
146
+    
147
+        console.log(url,'url')
148
+        formData.followImg=url
149
+        imgUrl.value=[{url:url}]
150
+        // willSave.value.push(img);
151
+        // initData.value = {
152
+        //   ...initData.value,
153
+        //   rescList: {
154
+        //     ...(initData.value.rescList || {}),
155
+        //     [type]: (initData.value.rescList[type] || []).concat(img),
156
+        //   },
157
+        // };
158
+      });
159
+
160
+
161
+      }
162
+      // const sort =
163
+      //   (initData.value.rescList[type] || []).length +
164
+      //   willSave.value.filter((x) => x.imgType === type).length;
165
+
166
+      // uploadImage(file, "1").then((url) => {
167
+      //   // const img = {
168
+      //   //   roomId,
169
+      //   //   url,
170
+      //   //   imgType: type,
171
+      //   //   sort,
172
+      //   // };
173
+      //   url;
174
+      //   type;
175
+      //   // willSave.value.push(img);
176
+      //   // initData.value = {
177
+      //   //   ...initData.value,
178
+      //   //   rescList: {
179
+      //   //     ...(initData.value.rescList || {}),
180
+      //   //     [type]: (initData.value.rescList[type] || []).concat(img),
181
+      //   //   },
182
+      //   // };
183
+      // });
184
+    };
185
+
186
+    onMounted(() => {
187
+      if (!detail.roomInfo) {
188
+        getDetail(roomId);
189
+      }
190
+    });
191
+
192
+    return {
193
+      detail,
194
+      onConfirm,
195
+      onSubmit,
196
+      formData,
197
+      pattern,
198
+      showTimePicker,
199
+      handleUpload,
200
+      imgUrl,
201
+    };
202
+  },
203
+};
204
+</script>
205
+
206
+<!-- Add "scoped" attribute to limit CSS to this component only -->
207
+<style lang="less" scoped></style>

+ 0
- 127
src/view/lookRecord/index.vue Прегледај датотеку

@@ -1,127 +0,0 @@
1
-<template>
2
-  <div class="lookrecord">
3
-    <van-form @submit="onSubmit">
4
-      <van-field
5
-        v-model="state.id"
6
-        name="id"
7
-        label="房源编号"
8
-        readonly
9
-        placeholder="房源编号"
10
-      />
11
-      <van-field
12
-        v-model="state.building"
13
-        name="building"
14
-        label="所属楼盘"
15
-        readonly
16
-        placeholder="所属楼盘"
17
-      />
18
-      <van-field
19
-        v-model="pickerState.value"
20
-        readonly
21
-        clickable
22
-        required
23
-        name="address"
24
-        label="看房时间"
25
-        placeholder=""
26
-        @click="pickerState.showPicker = true"
27
-        :rules="[{ required: true, message: '请选择' }]"
28
-      />
29
-      <van-popup v-model:show="pickerState.showPicker" position="bottom">
30
-        <van-datetime-picker
31
-          type="datetime"
32
-          @confirm="onConfirm"
33
-          @cancel="state.showPicker = false"
34
-        />
35
-      </van-popup>
36
-      <!-- <van-field
37
-        v-model="state.building"
38
-        required
39
-        name="type"
40
-        label="关闭类型"
41
-        placeholder="请选择"
42
-        :rules="[{ required: true, message: '请填写密码' }]"
43
-      /> -->
44
-      <van-field
45
-        v-model="state.explain"
46
-        required
47
-        name="explain"
48
-        label="看房记录"
49
-        placeholder="看房记录"
50
-        rows="3"
51
-        autosize
52
-        type="textarea"
53
-        :rules="[{ required: true, message: '请填写跟进描述' }]"
54
-      />
55
-
56
-      <van-field name="uploader" label="文件上传">
57
-  <template #input>
58
-    <van-uploader v-model="state.image" />
59
-  </template>
60
-</van-field>
61
-      <div style="margin: 16px;">
62
-        <van-button round block type="primary" native-type="submit">
63
-          提交
64
-        </van-button>
65
-      </div>
66
-    </van-form>
67
-  </div>
68
-</template>
69
-
70
-<script>
71
-import { reactive, ref } from "vue";
72
-import { Form, Button, Field, Picker, Popup, DatetimePicker,Uploader } from "vant";
73
-
74
-export default {
75
-  name: "lookrecord",
76
-  components: {
77
-    [Form.name]: Form,
78
-    [Button.name]: Button,
79
-    [Field.name]: Field,
80
-    [Popup.name]: Popup,
81
-    [Picker.name]: Picker,
82
-    [DatetimePicker.name]: DatetimePicker,
83
-    [Uploader.name]: Uploader,
84
-    
85
-    // Secondhand:secondhand,
86
-  },
87
-  data() {
88
-    return {};
89
-  },
90
-  setup() {
91
-    const state = reactive({
92
-      id: "",
93
-      building: "",
94
-      image:[],
95
-    });
96
-
97
-    const currentDate = ref(null);
98
-    const onSubmit = (values) => {
99
-      console.log("submit", values);
100
-    };
101
-
102
-    const pickerState = reactive({
103
-      value: "",
104
-      showPicker: false,
105
-    });
106
-    const columns = ["杭州", "宁波", "温州", "嘉兴", "湖州"];
107
-
108
-    const onConfirm = (value) => {
109
-      console.log(value,'value')
110
-      pickerState.value = value;
111
-      pickerState.showPicker = false;
112
-    };
113
-
114
-    return {
115
-      currentDate,
116
-      state,
117
-      pickerState,
118
-      columns,
119
-      onConfirm,
120
-      onSubmit,
121
-    };
122
-  },
123
-};
124
-</script>
125
-
126
-<!-- Add "scoped" attribute to limit CSS to this component only -->
127
-<style lang="less" scoped></style>

+ 4
- 6
src/view/secondhand/detail/components/Follow.vue Прегледај датотеку

@@ -16,18 +16,17 @@
16 16
     <van-button
17 17
       size="small"
18 18
       type="primary"
19
-     
19
+      v-shiro="'room:info:addFollow'"
20 20
       @click="goToAddFollow"
21 21
       >添加跟进</van-button
22 22
     >
23
-     <!-- v-shiro="'room:info:addFollow'" -->
24 23
   </x-loading>
25 24
 </template>
26 25
 
27 26
 <script>
28 27
 import { onMounted, ref } from "vue";
29
-import { List, Step, Steps, Image,Button } from "vant";
30
-import { useRouter } from 'vue-router'
28
+import { List, Step, Steps, Image, Button } from "vant";
29
+import { useRouter } from "vue-router";
31 30
 import request from "@/utils/request";
32 31
 
33 32
 export default {
@@ -37,14 +36,13 @@ export default {
37 36
     [Step.name]: Step,
38 37
     [Image.name]: Image,
39 38
     [Button.name]: Button,
40
-    
41 39
   },
42 40
   props: {
43 41
     roomId: undefined,
44 42
   },
45 43
   setup(props) {
46 44
     const list = ref([]);
47
-    const router = useRouter()
45
+    const router = useRouter();
48 46
 
49 47
     const handleLoad = () => {
50 48
       request({

+ 19
- 2
src/view/secondhand/detail/components/Look.vue Прегледај датотеку

@@ -15,26 +15,35 @@
15 15
         </p>          
16 16
       </van-step>
17 17
     </van-steps>
18
+        <van-button
19
+      size="small"
20
+      type="primary"
21
+      v-shiro="'room:info:addFollow'"
22
+      @click="goToAddLook"
23
+      >添加空看</van-button
24
+    >
18 25
   </x-loading>
19 26
 </template>
20 27
 
21 28
 <script>
22 29
 import { onMounted, ref } from 'vue'
23
-import { List, Step, Steps, Image } from 'vant'
30
+import { List, Step, Steps, Image,Button } from 'vant'
24 31
 import request from '@/utils/request'
25
-
32
+import {useRouter} from 'vue-router'
26 33
 export default {
27 34
   components: {
28 35
     [List.name]: List,
29 36
     [Steps.name]: Steps,
30 37
     [Step.name]: Step,
31 38
     [Image.name]: Image,
39
+    [Button.name]: Button,
32 40
   },
33 41
   props: {
34 42
     roomId: undefined,
35 43
   },
36 44
   setup(props) {
37 45
     const list = ref([])
46
+    const router = useRouter()
38 47
 
39 48
     const handleLoad = () => {
40 49
       request({
@@ -49,6 +58,13 @@ export default {
49 58
         list.value = res.result
50 59
       })
51 60
     }
61
+    
62
+
63
+        const goToAddLook = () =>
64
+      router.push({
65
+        name: "look",
66
+        query: { roomId: props.roomId },
67
+      });
52 68
 
53 69
     onMounted(() => {
54 70
       handleLoad()
@@ -57,6 +73,7 @@ export default {
57 73
     return {
58 74
       list,
59 75
       handleLoad,
76
+      goToAddLook,
60 77
     }
61 78
   }
62 79
 }