|
@@ -1,17 +1,16 @@
|
1
|
1
|
<template>
|
2
|
2
|
<x-loading x-id="room.resc.list">
|
3
|
|
- <div class="resc-mgtp" v-if="initData.limitFlag === 'rescLimit' && detail.roomInfo?.rescStatus === '9'">
|
4
|
|
- <p>房源录入后4小时内仅允许房源录入人上传图片,目前尚无权限上传实勘图</p>
|
5
|
|
- </div>
|
6
|
|
- <div class="resc-mgtp" v-if="detail.roomInfo?.rescStatus === '1'">
|
7
|
|
- <p>当前实勘图正在审核中</p>
|
8
|
|
- </div>
|
9
|
|
- <div class="resc-mgtp" v-if="detail.roomInfo?.rescStatus === '0'">
|
10
|
|
- <x-field label="实勘人">{{initData.rescUser}}</x-field>
|
11
|
|
- <x-field label="达成时间">{{initData.rescTime}}</x-field>
|
12
|
|
- </div>
|
13
|
|
-
|
14
|
3
|
<div class="resc">
|
|
4
|
+ <div class="resc-tip" v-if="initData.limitFlag === 'rescLimit' && detail.roomInfo?.rescStatus === '9'">
|
|
5
|
+ <p>房源录入后4小时内仅允许房源录入人上传图片,目前尚无权限上传实勘图</p>
|
|
6
|
+ </div>
|
|
7
|
+ <div class="resc-tip" v-if="detail.roomInfo?.rescStatus === '1'">
|
|
8
|
+ <p>当前实勘图正在审核中</p>
|
|
9
|
+ </div>
|
|
10
|
+ <div class="resc-tip" v-if="detail.roomInfo?.rescStatus === '0'">
|
|
11
|
+ <x-field label="实勘人">{{initData.rescUser}}</x-field>
|
|
12
|
+ <x-field label="达成时间">{{initData.rescTime}}</x-field>
|
|
13
|
+ </div>
|
15
|
14
|
<van-row>
|
16
|
15
|
<van-col span="12">
|
17
|
16
|
<g-section title="门牌">
|
|
@@ -92,8 +91,8 @@
|
92
|
91
|
/>
|
93
|
92
|
</g-section>
|
94
|
93
|
|
95
|
|
- <div style="margin-top: 2em">
|
96
|
|
- <van-button block type="warning" v-shiro="'room:info:addResc'">
|
|
94
|
+ <div style="margin-top: 2em" v-if="canSubmit">
|
|
95
|
+ <van-button block type="warning" v-shiro="'room:info:addResc'" @click="handleSubmit">
|
97
|
96
|
保存审核并提交
|
98
|
97
|
</van-button>
|
99
|
98
|
</div>
|
|
@@ -102,8 +101,8 @@
|
102
|
101
|
</template>
|
103
|
102
|
|
104
|
103
|
<script>
|
105
|
|
-import { onMounted, ref } from "vue";
|
106
|
|
-import { useRoute } from 'vue-router'
|
|
104
|
+import { computed, onMounted, ref } from "vue";
|
|
105
|
+import { useRoute, useRouter } from 'vue-router'
|
107
|
106
|
import { useModel } from '@zjxpcyc/vue-tiny-store'
|
108
|
107
|
//
|
109
|
108
|
import {
|
|
@@ -113,7 +112,7 @@ import {
|
113
|
112
|
Button,
|
114
|
113
|
} from "vant"
|
115
|
114
|
import RescItems from './components/Items'
|
116
|
|
-import { showDanger, showSuccess } from '@/utils'
|
|
115
|
+import { showDanger, showSuccess, alert } from '@/utils'
|
117
|
116
|
import uploadImage from '@/utils/uploadImage'
|
118
|
117
|
|
119
|
118
|
export default {
|
|
@@ -128,12 +127,26 @@ export default {
|
128
|
127
|
setup() {
|
129
|
128
|
const initData = ref({})
|
130
|
129
|
const route = useRoute()
|
|
130
|
+ const router = useRouter()
|
131
|
131
|
const willSave = ref([])
|
132
|
132
|
|
133
|
|
- const { detail, getRescList, getDetail, setRescCover } = useModel('room')
|
|
133
|
+ const { detail, getRescList, getDetail, setRescCover, saveResc, deleteResc } = useModel('room')
|
134
|
134
|
|
135
|
135
|
const roomId = route.query.roomId - 0
|
136
|
136
|
|
|
137
|
+ const canSubmit = computed(() => {
|
|
138
|
+ // 报单锁定
|
|
139
|
+ const isLocked = detail.roomInfo?.status === '7'
|
|
140
|
+ // 已实勘
|
|
141
|
+ const rescDone = detail.roomInfo?.rescStatus === '0'
|
|
142
|
+ // 非保护期
|
|
143
|
+ const notProteced = detail.roomInfo?.rescStatus === '9' && initData.value.limitFlag != 'rescLimit'
|
|
144
|
+ // 存在未保存的数据
|
|
145
|
+ const hasNoSaved = willSave.value.length > 0
|
|
146
|
+
|
|
147
|
+ return !isLocked && (rescDone || notProteced) && hasNoSaved
|
|
148
|
+ })
|
|
149
|
+
|
137
|
150
|
// 设置封面
|
138
|
151
|
const handleCover = resc => {
|
139
|
152
|
setRescCover(resc.id).then(() => {
|
|
@@ -151,7 +164,9 @@ export default {
|
151
|
164
|
|
152
|
165
|
// 上传图片
|
153
|
166
|
const handleUpload = ({file, type}) => {
|
154
|
|
- const sort = (initData.value.rescList[type] || []).length + willSave.value.filter(x => x.imgType === type).length
|
|
167
|
+ const rescListData = initData.value.rescList || {}
|
|
168
|
+ const list = rescListData[type] || []
|
|
169
|
+ const sort = list.length + willSave.value.filter(x => x.imgType === type).length
|
155
|
170
|
|
156
|
171
|
uploadImage(file, '1').then(url => {
|
157
|
172
|
const img = {
|
|
@@ -165,8 +180,8 @@ export default {
|
165
|
180
|
initData.value = {
|
166
|
181
|
...initData.value,
|
167
|
182
|
rescList: {
|
168
|
|
- ...initData.value.rescList || {},
|
169
|
|
- [type]: (initData.value.rescList[type] || []).concat(img)
|
|
183
|
+ ...rescListData,
|
|
184
|
+ [type]: list.concat(img)
|
170
|
185
|
}
|
171
|
186
|
}
|
172
|
187
|
})
|
|
@@ -174,9 +189,9 @@ export default {
|
174
|
189
|
|
175
|
190
|
// 删除图片
|
176
|
191
|
const handleDelete = ({resc, index, rescType}) => {
|
177
|
|
- // 尚未保存
|
178
|
|
- if (!resc.id) {
|
179
|
|
- const list = initData.value.rescList[rescType] || []
|
|
192
|
+ const del = () => {
|
|
193
|
+ const rescListData = initData.value.rescList || {}
|
|
194
|
+ const list = rescListData[rescType] || []
|
180
|
195
|
list.splice(index, 1)
|
181
|
196
|
|
182
|
197
|
initData.value = {
|
|
@@ -186,10 +201,38 @@ export default {
|
186
|
201
|
[rescType]: list
|
187
|
202
|
}
|
188
|
203
|
}
|
|
204
|
+
|
|
205
|
+ if (willSave.value.length) {
|
|
206
|
+ willSave.value = willSave.value.filter(x => x.url !== resc.url && x.imgType !== rescType)
|
|
207
|
+ }
|
|
208
|
+ }
|
|
209
|
+
|
|
210
|
+ if (resc.id) {
|
|
211
|
+ deleteResc({
|
|
212
|
+ roomId,
|
|
213
|
+ rescId: resc.id,
|
|
214
|
+ rescType
|
|
215
|
+ }).then(() => {
|
|
216
|
+ del()
|
|
217
|
+ showSuccess('删除成功')
|
|
218
|
+ })
|
189
|
219
|
} else {
|
190
|
|
- //
|
|
220
|
+ // 没有 id 的说明未提交, 可以直接删除
|
|
221
|
+ del()
|
191
|
222
|
}
|
192
|
223
|
}
|
|
224
|
+
|
|
225
|
+ // 保存
|
|
226
|
+ const handleSubmit = () => {
|
|
227
|
+ saveResc(willSave.value, roomId).then(() => {
|
|
228
|
+ alert('成功提交实勘审核').then(() => {
|
|
229
|
+ router.go(-1)
|
|
230
|
+ })
|
|
231
|
+ }).catch(e => {
|
|
232
|
+ console.error(e)
|
|
233
|
+ showDanger(e.message)
|
|
234
|
+ })
|
|
235
|
+ }
|
193
|
236
|
|
194
|
237
|
onMounted(() => {
|
195
|
238
|
getDetail(roomId)
|
|
@@ -203,9 +246,11 @@ export default {
|
203
|
246
|
return {
|
204
|
247
|
initData,
|
205
|
248
|
detail,
|
|
249
|
+ canSubmit,
|
206
|
250
|
handleCover,
|
207
|
251
|
handleUpload,
|
208
|
252
|
handleDelete,
|
|
253
|
+ handleSubmit,
|
209
|
254
|
};
|
210
|
255
|
},
|
211
|
256
|
};
|
|
@@ -215,10 +260,11 @@ export default {
|
215
|
260
|
<style lang="less" scoped>
|
216
|
261
|
.resc {
|
217
|
262
|
padding: 1em;
|
218
|
|
-}
|
219
|
263
|
|
220
|
|
-.resc-mgtp {
|
221
|
|
- margin-top: 1em;
|
|
264
|
+ .resc-tip {
|
|
265
|
+ font-weight: 500;
|
|
266
|
+ color: rgba(0,0,0, .8)
|
|
267
|
+ }
|
222
|
268
|
}
|
223
|
269
|
|
224
|
270
|
</style>
|