张延森 4 gadus atpakaļ
vecāks
revīzija
00c49f1402

+ 8
- 0
src/router.js Parādīt failu

@@ -114,6 +114,14 @@ const routes = [
114 114
       title: "实勘上传",
115 115
     },
116 116
   },
117
+  {
118
+    path: "/room-auth",
119
+    name: "room.auth",
120
+    component: () => import("./view/room-auth"),
121
+    meta: {
122
+      title: "委托书新增",
123
+    },
124
+  },
117 125
 ]
118 126
 
119 127
 const router = createRouter({

+ 8
- 6
src/view/followup/index.vue Parādīt failu

@@ -56,7 +56,12 @@
56 56
         ]"
57 57
       />
58 58
       <div style="margin: 1em">
59
-        <van-button block type="warning" native-type="submit">
59
+        <van-button
60
+          block
61
+          type="warning"
62
+          native-type="submit"
63
+          v-shiro="'room:info:addFollow'"
64
+        >
60 65
           提交
61 66
         </van-button>
62 67
       </div>
@@ -71,7 +76,7 @@ import { useRouter } from "vue-router"
71 76
 import { useModel } from "@zjxpcyc/vue-tiny-store"
72 77
 import Picker from "@/components/Picker"
73 78
 import request from "@/utils/request"
74
-import { alert } from "../../utils"
79
+import { alert } from "@/utils"
75 80
 
76 81
 export default {
77 82
   name: "closehouse",
@@ -116,9 +121,7 @@ export default {
116 121
       },
117 122
     ]
118 123
 
119
-    const onSubmit = (values) => {
120
-      console.log("submit", values)
121
-
124
+    const onSubmit = () => {
122 125
       request({
123 126
         url: "/room/follow/save",
124 127
         data: formData,
@@ -127,7 +130,6 @@ export default {
127 130
         alert("添加成功").then(() => {
128 131
           router.go(-1)
129 132
         })
130
-        //
131 133
       })
132 134
     }
133 135
 

+ 94
- 79
src/view/look/index.vue Parādīt failu

@@ -1,81 +1,81 @@
1 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"
2
+  <x-loading x-id="room.view">
3
+    <div class="lookrecord">
4
+      <van-form @submit="handleSubmit">
5
+        <van-field
6
+          :model-value="`${detail.roomInfo?.roomCode}${detail.roomInfo?.id}`"
7
+          name="id"
8
+          label="房源编号"
9
+          readonly
10
+          placeholder="房源编号"
34 11
         />
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"
12
+        <van-field
13
+          :model-value="detail.building?.buildingName"
14
+          name="building"
15
+          label="所属楼盘"
16
+          readonly
17
+          placeholder="所属楼盘"
18
+        />
19
+        <van-field
20
+          v-model="followTimeLook"
21
+          readonly
22
+          clickable
23
+          required
24
+          name="address"
25
+          label="看房时间"
26
+          placeholder=""
27
+          @click="showTimePicker = true"
28
+          :rules="[{ required: true, message: '请选择时间' }]"
29
+        />
30
+        <van-popup v-model:show="showTimePicker" position="bottom">
31
+          <van-datetime-picker
32
+            v-model="formData.followTime"
33
+            type="datetime"
34
+            @confirm="onConfirm"
35
+            @cancel="showTimePicker = false"
65 36
           />
66
-        </template>
67
-      </van-field>
68
-      <div style="margin: 16px">
69
-        <van-button block type="warning" native-type="submit">
70
-          提交
71
-        </van-button>
72
-      </div>
73
-    </van-form>
74
-  </div>
37
+        </van-popup>
38
+        <van-field
39
+          v-model="formData.followDesc"
40
+          required
41
+          name="followDesc"
42
+          label="跟进描述"
43
+          placeholder="跟进描述"
44
+          rows="3"
45
+          autosize
46
+          type="textarea"
47
+          :rules="[
48
+            { required: true, message: '请填写跟进描述' },
49
+            { pattern, message: '记录必须包含汉字' },
50
+          ]"
51
+        />
52
+        <!-- :before-delete="handleDelete" -->
53
+        <van-field name="followImg" label="上传图片">
54
+          <template #input>
55
+            <van-uploader
56
+              v-model="imgUrl"
57
+              :after-read="handleUpload"
58
+              :max-count="1"
59
+            />
60
+          </template>
61
+        </van-field>
62
+        <div style="margin: 1em">
63
+          <van-button
64
+            block
65
+            type="warning"
66
+            native-type="submit"
67
+            v-shiro="'room:info:addLook'"
68
+          >
69
+            提交
70
+          </van-button>
71
+        </div>
72
+      </van-form>
73
+    </div>
74
+  </x-loading>
75 75
 </template>
76 76
 
77 77
 <script>
78
-import { reactive, ref, onMounted } from "vue"
78
+import { reactive, ref, onMounted, computed } from "vue"
79 79
 import {
80 80
   Form,
81 81
   Button,
@@ -85,9 +85,11 @@ import {
85 85
   DatetimePicker,
86 86
   Uploader,
87 87
 } from "vant"
88
-import { useRouter } from "vue-router"
88
+import { useRoute, useRouter } from "vue-router"
89 89
 import { useModel } from "@zjxpcyc/vue-tiny-store"
90 90
 import uploadImage from "@/utils/uploadImage"
91
+import request from "@/utils/request"
92
+import { alert } from "@/utils"
91 93
 
92 94
 export default {
93 95
   name: "lookrecord",
@@ -99,12 +101,11 @@ export default {
99 101
     [Picker.name]: Picker,
100 102
     [DatetimePicker.name]: DatetimePicker,
101 103
     [Uploader.name]: Uploader,
102
-
103
-    // Secondhand:secondhand,
104 104
   },
105 105
   setup() {
106
+    const route = useRoute()
106 107
     const router = useRouter()
107
-    const roomId = router.currentRoute.value.query.roomId
108
+    const roomId = route.query.roomId
108 109
     const showTimePicker = ref(false)
109 110
     const imgUrl = ref([])
110 111
 
@@ -116,10 +117,23 @@ export default {
116 117
       followDesc: undefined, //根进描述
117 118
       followImg: undefined, //图片
118 119
     })
120
+
121
+    const followTimeLook = computed(() => {
122
+      return formData.followTime.toJSON().substring(0, 19).replace(/t/i, " ")
123
+    })
124
+
119 125
     const pattern = /[\u4E00-\u9FA5\uF900-\uFA2D]/
120 126
 
121
-    const onSubmit = () => {
122
-      console.log("submit", formData)
127
+    const handleSubmit = () => {
128
+      request({
129
+        url: "/room/look/save",
130
+        data: formData,
131
+        toast: "请稍候...",
132
+      }).then(() => {
133
+        alert("添加成功").then(() => {
134
+          router.go(-1)
135
+        })
136
+      })
123 137
     }
124 138
 
125 139
     const onConfirm = (value) => {
@@ -146,12 +160,13 @@ export default {
146 160
     return {
147 161
       detail,
148 162
       onConfirm,
149
-      onSubmit,
163
+      handleSubmit,
150 164
       formData,
151 165
       pattern,
152 166
       showTimePicker,
153 167
       handleUpload,
154 168
       imgUrl,
169
+      followTimeLook,
155 170
     }
156 171
   },
157 172
 }

+ 184
- 0
src/view/room-auth/index.vue Parādīt failu

@@ -0,0 +1,184 @@
1
+<template>
2
+  <div class="room-auth">
3
+    <van-form @submit="handleSubmit">
4
+      <van-field
5
+        v-model="formData.serialNum"
6
+        name="serialNum"
7
+        label="委托书编号"
8
+        placeholder="委托书编号"
9
+      />
10
+
11
+      <van-field
12
+        v-model="startTimeLook"
13
+        readonly
14
+        clickable
15
+        required
16
+        name="address"
17
+        label="开始时间"
18
+        @click="showStartTime = true"
19
+        :rules="[{ required: true, message: '请选择时间' }]"
20
+      />
21
+      <van-popup v-model:show="showStartTime" position="bottom">
22
+        <van-datetime-picker
23
+          v-model="formData.startTime"
24
+          type="datetime"
25
+          @confirm="handleStartTime"
26
+          @cancel="showStartTime = false"
27
+        />
28
+      </van-popup>
29
+
30
+      <van-field
31
+        v-model="endTimeLook"
32
+        readonly
33
+        clickable
34
+        required
35
+        name="endTime"
36
+        label="结束时间"
37
+        @click="showEndTime = true"
38
+        :rules="[{ required: true, message: '请选择时间' }]"
39
+      />
40
+      <van-popup v-model:show="showEndTime" position="bottom">
41
+        <van-datetime-picker
42
+          v-model="formData.endTime"
43
+          type="datetime"
44
+          @confirm="handleEndTime"
45
+          @cancel="showEndTime = false"
46
+        />
47
+      </van-popup>
48
+
49
+      <!-- :before-delete="handleDelete" -->
50
+      <van-field name="url" label="上传图片">
51
+        <template #input>
52
+          <van-uploader
53
+            v-model="imgUrl"
54
+            :after-read="handleUpload"
55
+            :max-count="1"
56
+          />
57
+        </template>
58
+      </van-field>
59
+      <div style="margin: 1em">
60
+        <van-button
61
+          block
62
+          type="warning"
63
+          native-type="submit"
64
+          v-shiro="'room:info:addAuth'"
65
+        >
66
+          提交
67
+        </van-button>
68
+      </div>
69
+    </van-form>
70
+  </div>
71
+</template>
72
+
73
+<script>
74
+import { reactive, ref, onMounted, computed } from "vue"
75
+import {
76
+  Form,
77
+  Button,
78
+  Field,
79
+  Picker,
80
+  Popup,
81
+  DatetimePicker,
82
+  Uploader,
83
+} from "vant"
84
+import { useRoute, useRouter } from "vue-router"
85
+import { useModel } from "@zjxpcyc/vue-tiny-store"
86
+import uploadImage from "@/utils/uploadImage"
87
+import request from "@/utils/request"
88
+import { alert } from "@/utils"
89
+
90
+export default {
91
+  name: "lookrecord",
92
+  components: {
93
+    [Form.name]: Form,
94
+    [Button.name]: Button,
95
+    [Field.name]: Field,
96
+    [Popup.name]: Popup,
97
+    [Picker.name]: Picker,
98
+    [DatetimePicker.name]: DatetimePicker,
99
+    [Uploader.name]: Uploader,
100
+  },
101
+  setup() {
102
+    const route = useRoute()
103
+    const router = useRouter()
104
+    const roomId = route.query.roomId
105
+    const showStartTime = ref(false)
106
+    const showEndTime = ref(false)
107
+    const imgUrl = ref([])
108
+
109
+    const { detail, getDetail } = useModel("room")
110
+    const formData = reactive({
111
+      roomId: roomId,
112
+      serialNum: undefined,
113
+      startTime: new Date(), //看房时间
114
+      endTime: new Date(), //根进描述
115
+      url: undefined, //图片
116
+    })
117
+
118
+    const startTimeLook = computed(() => {
119
+      return formData.startTime.toJSON().substring(0, 19).replace(/t/i, " ")
120
+    })
121
+    const endTimeLook = computed(() => {
122
+      return formData.endTime.toJSON().substring(0, 19).replace(/t/i, " ")
123
+    })
124
+
125
+    const handleSubmit = () => {
126
+      request({
127
+        url: "/room/auth/save",
128
+        data: formData,
129
+        toast: "请稍候...",
130
+      }).then(() => {
131
+        alert("添加成功").then(() => {
132
+          router.go(-1)
133
+        })
134
+      })
135
+    }
136
+
137
+    const handleStartTime = (val) => {
138
+      formData.startTime = val
139
+      showStartTime.value = false
140
+    }
141
+
142
+    const handleEndTime = (val) => {
143
+      formData.endTime = val
144
+      showEndTime.value = false
145
+    }
146
+
147
+    const handleUpload = (file) => {
148
+      if (file && file.file) {
149
+        uploadImage(file.file, "", 1).then((url) => {
150
+          formData.url = url
151
+          imgUrl.value = [{ url: url }]
152
+        })
153
+      }
154
+    }
155
+
156
+    onMounted(() => {
157
+      if (!detail.roomInfo) {
158
+        getDetail(roomId)
159
+      }
160
+    })
161
+
162
+    return {
163
+      detail,
164
+      handleStartTime,
165
+      handleEndTime,
166
+      handleSubmit,
167
+      formData,
168
+      showStartTime,
169
+      showEndTime,
170
+      handleUpload,
171
+      imgUrl,
172
+      startTimeLook,
173
+      endTimeLook,
174
+    }
175
+  },
176
+}
177
+</script>
178
+
179
+<!-- Add "scoped" attribute to limit CSS to this component only -->
180
+<style lang="less" scoped>
181
+.room-auth {
182
+  padding-top: 1em;
183
+}
184
+</style>

+ 94
- 10
src/view/secondhand/detail/components/Auth.vue Parādīt failu

@@ -1,15 +1,44 @@
1 1
 <template>
2 2
   <x-loading x-id="room.auth">
3
-    <p v-if="!roomAuth">暂无业主委托书</p>
3
+    <div v-if="!roomAuth">
4
+      <p>暂无业主委托书</p>
5
+      <template v-if="roomInfo.status !== '7'">
6
+        <van-button
7
+          block
8
+          size="small"
9
+          type="warning"
10
+          v-shiro="'room:info:addAuth'"
11
+          @click="
12
+            $router.push({ name: 'room.auth', query: { roomId: roomInfo.id } })
13
+          "
14
+        >
15
+          上传业主委托书
16
+        </van-button>
17
+      </template>
18
+    </div>
4 19
     <p v-else-if="roomAuth.status === '1'">当前委托书正在审核中</p>
5 20
     <div v-else>
6 21
       <shiro name="room:info:auth">
7 22
         <template #callback>
8
-          <van-empty image="error" description="无委托书协议查看权限" />
23
+          <div v-if="!roomAuthBox.isCreate">
24
+            <x-field label="上传人">
25
+              {{ roomAuth.authUserName }} ({{ roomAuth.authUserPhone }})
26
+            </x-field>
27
+
28
+            <x-field label="上传时间">
29
+              {{ roomAuth.updateTime }}
30
+            </x-field>
31
+          </div>
32
+          <p>无委托书协议查看权限</p>
9 33
         </template>
10 34
 
11 35
         <x-field label=" " v-if="roomAuthBox.isCreate">
12
-          <van-button size="small" type="danger">删除委托书</van-button>
36
+          <van-button
37
+            size="small"
38
+            type="danger"
39
+            @click="toggleDialog"
40
+            >删除委托书</van-button
41
+          >
13 42
         </x-field>
14 43
 
15 44
         <x-field label="上传人">
@@ -34,24 +63,38 @@
34 63
 
35 64
         <van-image width="100" height="100" :src="roomAuth.url" />
36 65
       </shiro>
37
-
38
-      <div v-shiro="'room:info:addAuth'" v-if="!roomAuth">
39
-        <van-button size="small" type="warn">上传业主委托书</van-button>
40
-      </div>
41 66
     </div>
67
+
68
+    <!-- 删除委托书 -->
69
+    <van-dialog
70
+      v-model="showDialog"
71
+      title="删除委托书"
72
+    >
73
+      <!-- <van-field
74
+        v-model="message"
75
+        rows="3"
76
+        autosize
77
+        label="留言"
78
+        type="textarea"
79
+        placeholder="请输入留言"
80
+        required
81
+      /> -->
82
+    </van-dialog>
42 83
   </x-loading>
43 84
 </template>
44 85
 
45 86
 <script>
46
-import { Empty, Button, Image } from "vant"
87
+import { computed, onMounted, ref } from "vue"
88
+import { Button, Image, Field } from "vant"
47 89
 import { useModel } from "@zjxpcyc/vue-tiny-store"
48
-import { computed, onMounted } from "vue"
90
+import { showDanger, showSuccess, showWarn } from "@/utils"
91
+import request from "@/utils/request"
49 92
 
50 93
 export default {
51 94
   components: {
52
-    [Empty.name]: Empty,
53 95
     [Button.name]: Button,
54 96
     [Image.name]: Image,
97
+    [Field.name]: Field,
55 98
   },
56 99
   props: {
57 100
     roomId: undefined,
@@ -59,7 +102,43 @@ export default {
59 102
   setup(props) {
60 103
     const { detail, roomAuthBox, getAuth } = useModel("room")
61 104
 
105
+    const delReason = ref()
106
+    const showDialog = ref(false)
107
+
62 108
     const roomAuth = computed(() => roomAuthBox.roomAuth)
109
+    const roomInfo = computed(() => detail.roomInfo)
110
+
111
+    const toggleDialog = () => {
112
+      console.log('-----showDialog.value------>', showDialog.value)
113
+      showDialog.value = !showDialog.value
114
+    }
115
+
116
+    const handleDeleteAuth = () => {
117
+      if (!delReason.value) {
118
+        showWarn("请填写删除原因")
119
+        return
120
+      }
121
+
122
+      showDialog.value = false
123
+
124
+      const params = {
125
+        id: roomAuth.value.id,
126
+        reason: delReason.value,
127
+        roomId: roomInfo.value.id,
128
+      }
129
+
130
+      request({
131
+        url: "/room/auth/delete",
132
+        params,
133
+        toast: "请稍候...",
134
+      })
135
+        .then(() => {
136
+          showSuccess("删除成功")
137
+        })
138
+        .catch((e) => {
139
+          showDanger(e.message)
140
+        })
141
+    }
63 142
 
64 143
     onMounted(() => {
65 144
       if (!roomAuthBox.roomAuth) {
@@ -71,6 +150,11 @@ export default {
71 150
       detail,
72 151
       roomAuthBox,
73 152
       roomAuth,
153
+      roomInfo,
154
+      delReason,
155
+      showDialog,
156
+      handleDeleteAuth,
157
+      toggleDialog,
74 158
     }
75 159
   },
76 160
 }