Commit 72de60dc82cf3ad4391b93dae5dbb3aadf2b01f4

Authored by wuxw
1 parent 26fd2f03

优化报修完成

src/api/role/roleApi.js
@@ -4,7 +4,7 @@ import request from '@/utils/request' @@ -4,7 +4,7 @@ import request from '@/utils/request'
4 export function savePrivilegeGroup(data) { 4 export function savePrivilegeGroup(data) {
5 return new Promise((resolve, reject) => { 5 return new Promise((resolve, reject) => {
6 request({ 6 request({
7 - url: '/privilegeGroup.savePrivilegeGroup', 7 + url: '/save.privilegeGroup.info',
8 method: 'post', 8 method: 'post',
9 data 9 data
10 }).then(response => { 10 }).then(response => {
@@ -24,7 +24,7 @@ export function savePrivilegeGroup(data) { @@ -24,7 +24,7 @@ export function savePrivilegeGroup(data) {
24 export function updatePrivilegeGroup(data) { 24 export function updatePrivilegeGroup(data) {
25 return new Promise((resolve, reject) => { 25 return new Promise((resolve, reject) => {
26 request({ 26 request({
27 - url: '/privilegeGroup.updatePrivilegeGroup', 27 + url: '/edit.privilegeGroup.info',
28 method: 'post', 28 method: 'post',
29 data 29 data
30 }).then(response => { 30 }).then(response => {
@@ -44,7 +44,7 @@ export function updatePrivilegeGroup(data) { @@ -44,7 +44,7 @@ export function updatePrivilegeGroup(data) {
44 export function deletePrivilegeGroup(data) { 44 export function deletePrivilegeGroup(data) {
45 return new Promise((resolve, reject) => { 45 return new Promise((resolve, reject) => {
46 request({ 46 request({
47 - url: '/privilegeGroup.deletePrivilegeGroup', 47 + url: '/delete.privilegeGroup.info',
48 method: 'post', 48 method: 'post',
49 data 49 data
50 }).then(response => { 50 }).then(response => {
src/api/work/finishRepairApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取资源类型列表
  5 +export function listResourceStoreTypes(params) {
  6 + return new Promise((resolve, reject) => {
  7 + const communityId = getCommunityId()
  8 + request({
  9 + url: '/resourceStoreType.listResourceStoreTypes',
  10 + method: 'get',
  11 + params: {
  12 + ...params,
  13 + communityId
  14 + }
  15 + }).then(response => {
  16 + const res = response.data
  17 + resolve(res)
  18 + }).catch(error => {
  19 + reject(error)
  20 + })
  21 + })
  22 +}
  23 +
  24 +// 获取用户仓库商品列表
  25 +export function listUserStorehouses(params) {
  26 + return new Promise((resolve, reject) => {
  27 + const communityId = getCommunityId()
  28 + request({
  29 + url: '/resourceStore.listUserStorehouses',
  30 + method: 'get',
  31 + params: {
  32 + ...params,
  33 + communityId
  34 + }
  35 + }).then(response => {
  36 + const res = response.data
  37 + resolve(res)
  38 + }).catch(error => {
  39 + reject(error)
  40 + })
  41 + })
  42 +}
  43 +
  44 +// 完成报修
  45 +export function repairFinish(data) {
  46 + return new Promise((resolve, reject) => {
  47 + const communityId = getCommunityId()
  48 + request({
  49 + url: '/ownerRepair.repairFinish',
  50 + method: 'post',
  51 + data: {
  52 + ...data,
  53 + communityId
  54 + }
  55 + }).then(response => {
  56 + const res = response.data
  57 + resolve(res)
  58 + }).catch(error => {
  59 + reject(error)
  60 + })
  61 + })
  62 +}
  63 +
  64 +// 上传文件
  65 +export function uploadFile(data) {
  66 + return new Promise((resolve, reject) => {
  67 + const communityId = getCommunityId()
  68 + const formData = new FormData()
  69 + formData.append('uploadFile', data.file)
  70 + formData.append('communityId', communityId)
  71 +
  72 + request({
  73 + url: '/uploadFile',
  74 + method: 'post',
  75 + data: formData,
  76 + headers: {
  77 + 'Content-Type': 'multipart/form-data'
  78 + }
  79 + }).then(response => {
  80 + const res = response.data
  81 + resolve(res)
  82 + }).catch(error => {
  83 + reject(error)
  84 + })
  85 + })
  86 +}
0 \ No newline at end of file 87 \ No newline at end of file
src/api/work/printRepairDetailApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +import { getCommunityId } from '@/api/community/communityApi'
  3 +
  4 +// 获取报修单详情
  5 +export function listOwnerRepairs(params) {
  6 + return new Promise((resolve, reject) => {
  7 + request({
  8 + url: '/ownerRepair.listOwnerRepairs',
  9 + method: 'get',
  10 + params: {
  11 + ...params,
  12 + communityId: params.communityId || getCommunityId()
  13 + }
  14 + }).then(response => {
  15 + resolve(response.data)
  16 + }).catch(error => {
  17 + reject(error)
  18 + })
  19 + })
  20 +}
  21 +
  22 +// 获取维修人员处理轨迹
  23 +export function listRepairStaffs(params) {
  24 + return new Promise((resolve, reject) => {
  25 + request({
  26 + url: '/ownerRepair.listRepairStaffs',
  27 + method: 'get',
  28 + params: {
  29 + ...params,
  30 + communityId: params.communityId || getCommunityId()
  31 + }
  32 + }).then(response => {
  33 + resolve(response.data)
  34 + }).catch(error => {
  35 + reject(error)
  36 + })
  37 + })
  38 +}
0 \ No newline at end of file 39 \ No newline at end of file
src/api/work/repairPoolManageApi.js
@@ -38,7 +38,7 @@ export function listRepairPools(params) { @@ -38,7 +38,7 @@ export function listRepairPools(params) {
38 export function dispatchRepair(data) { 38 export function dispatchRepair(data) {
39 return new Promise((resolve, reject) => { 39 return new Promise((resolve, reject) => {
40 request({ 40 request({
41 - url: '/ownerRepair.repairDispatch', 41 + url: '/callComponent/ownerRepair.repairDispatch',
42 method: 'post', 42 method: 'post',
43 data: { 43 data: {
44 ...data, 44 ...data,
src/components/staff/SelectStaff.vue
@@ -80,6 +80,7 @@ export default { @@ -80,6 +80,7 @@ export default {
80 this.staffs = staffs 80 this.staffs = staffs
81 if (this.staffs.length > 0) { 81 if (this.staffs.length > 0) {
82 this.curStaffId = this.staffs[0].userId 82 this.curStaffId = this.staffs[0].userId
  83 + this.selectedStaff = this.staffs[0]
83 } 84 }
84 } catch (error) { 85 } catch (error) {
85 console.error('Error loading staff:', error) 86 console.error('Error loading staff:', error)
src/components/work/AddRepairSetting.vue
@@ -33,7 +33,8 @@ @@ -33,7 +33,8 @@
33 <el-col :span="12"> 33 <el-col :span="12">
34 <el-form-item :label="$t('repairSetting.publicArea')" prop="publicArea"> 34 <el-form-item :label="$t('repairSetting.publicArea')" prop="publicArea">
35 <el-select v-model="formData.publicArea" 35 <el-select v-model="formData.publicArea"
36 - :placeholder="$t('repairSetting.required') + $t('repairSetting.publicAreaPlaceholder')" style="width:100%"> 36 + :placeholder="$t('repairSetting.required') + $t('repairSetting.publicAreaPlaceholder')"
  37 + style="width:100%">
37 <el-option :label="$t('repairSetting.nonHouse')" value="T" /> 38 <el-option :label="$t('repairSetting.nonHouse')" value="T" />
38 <el-option :label="$t('repairSetting.house')" value="F" /> 39 <el-option :label="$t('repairSetting.house')" value="F" />
39 </el-select> 40 </el-select>
@@ -203,7 +204,7 @@ export default { @@ -203,7 +204,7 @@ export default {
203 if (valid) { 204 if (valid) {
204 try { 205 try {
205 await saveRepairSetting(this.formData) 206 await saveRepairSetting(this.formData)
206 - this.$message.success(this.$t('repairSetting.addSuccess')) 207 + this.$message.success(this.$t('common.submitSuccess'))
207 this.$emit('success') 208 this.$emit('success')
208 this.closeDialog() 209 this.closeDialog()
209 } catch (error) { 210 } catch (error) {
src/components/work/DeleteRepairSetting.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('repairSetting.confirmDeleteTitle')"  
4 - :visible.sync="visible"  
5 - width="30%"  
6 - center  
7 - > 2 + <el-dialog :title="$t('repairSetting.confirmDeleteTitle')" :visible.sync="visible" width="30%" center>
8 <div style="text-align: center"> 3 <div style="text-align: center">
9 <p>{{ $t('repairSetting.confirmDeleteContent') }} [{{ currentRow.repairTypeName }}]?</p> 4 <p>{{ $t('repairSetting.confirmDeleteContent') }} [{{ currentRow.repairTypeName }}]?</p>
10 </div> 5 </div>
@@ -31,16 +26,16 @@ export default { @@ -31,16 +26,16 @@ export default {
31 this.currentRow = { ...row } 26 this.currentRow = { ...row }
32 this.visible = true 27 this.visible = true
33 }, 28 },
34 - 29 +
35 closeDialog() { 30 closeDialog() {
36 this.visible = false 31 this.visible = false
37 this.currentRow = {} 32 this.currentRow = {}
38 }, 33 },
39 - 34 +
40 async confirmDelete() { 35 async confirmDelete() {
41 try { 36 try {
42 await deleteRepairSetting(this.currentRow.settingId) 37 await deleteRepairSetting(this.currentRow.settingId)
43 - this.$message.success(this.$t('repairSetting.deleteSuccess')) 38 + this.$message.success(this.$t('common.submitSuccess'))
44 this.$emit('success') 39 this.$emit('success')
45 this.closeDialog() 40 this.closeDialog()
46 } catch (error) { 41 } catch (error) {
src/components/work/EditRepairSetting.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('repairSetting.editTitle')"  
4 - :visible.sync="visible"  
5 - width="50%"  
6 - @close="closeDialog"  
7 - > 2 + <el-dialog :title="$t('repairSetting.editTitle')" :visible.sync="visible" width="50%" @close="closeDialog">
8 <el-form ref="form" :model="formData" :rules="rules" label-width="150px"> 3 <el-form ref="form" :model="formData" :rules="rules" label-width="150px">
9 <el-row> 4 <el-row>
10 <el-col :span="12"> 5 <el-col :span="12">
11 <el-form-item :label="$t('repairSetting.typeName')" prop="repairTypeName"> 6 <el-form-item :label="$t('repairSetting.typeName')" prop="repairTypeName">
12 - <el-input  
13 - v-model="formData.repairTypeName"  
14 - :placeholder="$t('repairSetting.repairTypeNamePlaceholder')"  
15 - /> 7 + <el-input v-model="formData.repairTypeName" :placeholder="$t('repairSetting.repairTypeNamePlaceholder')" />
16 </el-form-item> 8 </el-form-item>
17 </el-col> 9 </el-col>
18 <el-col :span="12"> 10 <el-col :span="12">
19 <el-form-item :label="$t('repairSetting.settingType')" prop="repairSettingType"> 11 <el-form-item :label="$t('repairSetting.settingType')" prop="repairSettingType">
20 - <el-select  
21 - v-model="formData.repairSettingType" 12 + <el-select v-model="formData.repairSettingType"
22 :placeholder="$t('repairSetting.required') + $t('repairSetting.repairSettingTypePlaceholder')" 13 :placeholder="$t('repairSetting.required') + $t('repairSetting.repairSettingTypePlaceholder')"
23 - style="width:100%"  
24 - > 14 + style="width:100%">
25 <el-option :label="$t('repairSetting.cleaningOrder')" value="100" /> 15 <el-option :label="$t('repairSetting.cleaningOrder')" value="100" />
26 <el-option :label="$t('repairSetting.repairOrder')" value="200" /> 16 <el-option :label="$t('repairSetting.repairOrder')" value="200" />
27 </el-select> 17 </el-select>
28 </el-form-item> 18 </el-form-item>
29 </el-col> 19 </el-col>
30 </el-row> 20 </el-row>
31 - 21 +
32 <el-row> 22 <el-row>
33 <el-col :span="12"> 23 <el-col :span="12">
34 <el-form-item :label="$t('repairSetting.dispatchMethod')" prop="repairWay"> 24 <el-form-item :label="$t('repairSetting.dispatchMethod')" prop="repairWay">
35 - <el-select  
36 - v-model="formData.repairWay"  
37 - :placeholder="$t('repairSetting.required') + $t('repairSetting.repairWayPlaceholder')"  
38 - style="width:100%"  
39 - > 25 + <el-select v-model="formData.repairWay"
  26 + :placeholder="$t('repairSetting.required') + $t('repairSetting.repairWayPlaceholder')" style="width:100%">
40 <el-option :label="$t('repairSetting.grabOrder')" value="100" /> 27 <el-option :label="$t('repairSetting.grabOrder')" value="100" />
41 <el-option :label="$t('repairSetting.assign')" value="200" /> 28 <el-option :label="$t('repairSetting.assign')" value="200" />
42 <el-option :label="$t('repairSetting.polling')" value="300" /> 29 <el-option :label="$t('repairSetting.polling')" value="300" />
@@ -45,26 +32,21 @@ @@ -45,26 +32,21 @@
45 </el-col> 32 </el-col>
46 <el-col :span="12"> 33 <el-col :span="12">
47 <el-form-item :label="$t('repairSetting.publicArea')" prop="publicArea"> 34 <el-form-item :label="$t('repairSetting.publicArea')" prop="publicArea">
48 - <el-select  
49 - v-model="formData.publicArea" 35 + <el-select v-model="formData.publicArea"
50 :placeholder="$t('repairSetting.required') + $t('repairSetting.publicAreaPlaceholder')" 36 :placeholder="$t('repairSetting.required') + $t('repairSetting.publicAreaPlaceholder')"
51 - style="width:100%"  
52 - > 37 + style="width:100%">
53 <el-option :label="$t('repairSetting.nonHouse')" value="T" /> 38 <el-option :label="$t('repairSetting.nonHouse')" value="T" />
54 <el-option :label="$t('repairSetting.house')" value="F" /> 39 <el-option :label="$t('repairSetting.house')" value="F" />
55 </el-select> 40 </el-select>
56 </el-form-item> 41 </el-form-item>
57 </el-col> 42 </el-col>
58 </el-row> 43 </el-row>
59 - 44 +
60 <el-row> 45 <el-row>
61 <el-col :span="12"> 46 <el-col :span="12">
62 <el-form-item :label="$t('repairSetting.ownerDisplay')" prop="isShow"> 47 <el-form-item :label="$t('repairSetting.ownerDisplay')" prop="isShow">
63 - <el-select  
64 - v-model="formData.isShow"  
65 - :placeholder="$t('repairSetting.ownerDisplayPlaceholder')"  
66 - style="width:100%"  
67 - > 48 + <el-select v-model="formData.isShow" :placeholder="$t('repairSetting.ownerDisplayPlaceholder')"
  49 + style="width:100%">
68 <el-option :label="$t('repairSetting.yes')" value="Y" /> 50 <el-option :label="$t('repairSetting.yes')" value="Y" />
69 <el-option :label="$t('repairSetting.no')" value="N" /> 51 <el-option :label="$t('repairSetting.no')" value="N" />
70 </el-select> 52 </el-select>
@@ -72,11 +54,8 @@ @@ -72,11 +54,8 @@
72 </el-col> 54 </el-col>
73 <el-col :span="12"> 55 <el-col :span="12">
74 <el-form-item :label="$t('repairSetting.notificationMethod')" prop="notifyWay"> 56 <el-form-item :label="$t('repairSetting.notificationMethod')" prop="notifyWay">
75 - <el-select  
76 - v-model="formData.notifyWay"  
77 - :placeholder="$t('repairSetting.notificationMethodPlaceholder')"  
78 - style="width:100%"  
79 - > 57 + <el-select v-model="formData.notifyWay" :placeholder="$t('repairSetting.notificationMethodPlaceholder')"
  58 + style="width:100%">
80 <el-option :label="$t('repairSetting.sms')" value="SMS" /> 59 <el-option :label="$t('repairSetting.sms')" value="SMS" />
81 <el-option :label="$t('repairSetting.wechat')" value="WECHAT" /> 60 <el-option :label="$t('repairSetting.wechat')" value="WECHAT" />
82 <el-option :label="$t('repairSetting.wechatWorkLicense')" value="WORK_LICENSE" /> 61 <el-option :label="$t('repairSetting.wechatWorkLicense')" value="WORK_LICENSE" />
@@ -84,40 +63,32 @@ @@ -84,40 +63,32 @@
84 </el-form-item> 63 </el-form-item>
85 </el-col> 64 </el-col>
86 </el-row> 65 </el-row>
87 - 66 +
88 <el-row> 67 <el-row>
89 <el-col :span="12"> 68 <el-col :span="12">
90 <el-form-item :label="$t('repairSetting.processingTime')" prop="doTime"> 69 <el-form-item :label="$t('repairSetting.processingTime')" prop="doTime">
91 - <el-input  
92 - v-model.number="formData.doTime"  
93 - type="number"  
94 - :placeholder="$t('repairSetting.required') + $t('repairSetting.processingTimePlaceholder')"  
95 - > 70 + <el-input v-model.number="formData.doTime" type="number"
  71 + :placeholder="$t('repairSetting.required') + $t('repairSetting.processingTimePlaceholder')">
96 <template slot="append">{{ $t('repairSetting.processingTimeUnit') }}</template> 72 <template slot="append">{{ $t('repairSetting.processingTimeUnit') }}</template>
97 </el-input> 73 </el-input>
98 </el-form-item> 74 </el-form-item>
99 </el-col> 75 </el-col>
100 <el-col :span="12"> 76 <el-col :span="12">
101 <el-form-item :label="$t('repairSetting.timeoutWarning')" prop="warningTime"> 77 <el-form-item :label="$t('repairSetting.timeoutWarning')" prop="warningTime">
102 - <el-input  
103 - v-model.number="formData.warningTime"  
104 - type="number"  
105 - :placeholder="$t('repairSetting.required') + $t('repairSetting.timeoutWarningPlaceholder')"  
106 - > 78 + <el-input v-model.number="formData.warningTime" type="number"
  79 + :placeholder="$t('repairSetting.required') + $t('repairSetting.timeoutWarningPlaceholder')">
107 <template slot="append">{{ $t('repairSetting.timeoutWarningUnit') }}</template> 80 <template slot="append">{{ $t('repairSetting.timeoutWarningUnit') }}</template>
108 </el-input> 81 </el-input>
109 </el-form-item> 82 </el-form-item>
110 </el-col> 83 </el-col>
111 </el-row> 84 </el-row>
112 - 85 +
113 <el-row> 86 <el-row>
114 <el-col :span="12"> 87 <el-col :span="12">
115 <el-form-item :label="$t('repairSetting.returnVisitSetting')" prop="returnVisitFlag"> 88 <el-form-item :label="$t('repairSetting.returnVisitSetting')" prop="returnVisitFlag">
116 - <el-select  
117 - v-model="formData.returnVisitFlag" 89 + <el-select v-model="formData.returnVisitFlag"
118 :placeholder="$t('repairSetting.required') + $t('repairSetting.returnVisitFlagPlaceholder')" 90 :placeholder="$t('repairSetting.required') + $t('repairSetting.returnVisitFlagPlaceholder')"
119 - style="width:100%"  
120 - > 91 + style="width:100%">
121 <el-option :label="$t('repairSetting.noFollowUp')" value="001" /> 92 <el-option :label="$t('repairSetting.noFollowUp')" value="001" />
122 <el-option :label="$t('repairSetting.followUpAfterEvaluation')" value="002" /> 93 <el-option :label="$t('repairSetting.followUpAfterEvaluation')" value="002" />
123 <el-option :label="$t('repairSetting.followUp')" value="003" /> 94 <el-option :label="$t('repairSetting.followUp')" value="003" />
@@ -125,21 +96,17 @@ @@ -125,21 +96,17 @@
125 </el-form-item> 96 </el-form-item>
126 </el-col> 97 </el-col>
127 </el-row> 98 </el-row>
128 - 99 +
129 <el-row> 100 <el-row>
130 <el-col :span="24"> 101 <el-col :span="24">
131 <el-form-item :label="$t('repairSetting.explanation')" prop="remark"> 102 <el-form-item :label="$t('repairSetting.explanation')" prop="remark">
132 - <el-input  
133 - v-model="formData.remark"  
134 - type="textarea"  
135 - :rows="3"  
136 - :placeholder="$t('repairSetting.remarkPlaceholder')"  
137 - /> 103 + <el-input v-model="formData.remark" type="textarea" :rows="3"
  104 + :placeholder="$t('repairSetting.remarkPlaceholder')" />
138 </el-form-item> 105 </el-form-item>
139 </el-col> 106 </el-col>
140 </el-row> 107 </el-row>
141 </el-form> 108 </el-form>
142 - 109 +
143 <div slot="footer" class="dialog-footer"> 110 <div slot="footer" class="dialog-footer">
144 <el-button @click="closeDialog">{{ $t('repairSetting.cancel') }}</el-button> 111 <el-button @click="closeDialog">{{ $t('repairSetting.cancel') }}</el-button>
145 <el-button type="primary" @click="submitForm">{{ $t('repairSetting.save') }}</el-button> 112 <el-button type="primary" @click="submitForm">{{ $t('repairSetting.save') }}</el-button>
@@ -213,18 +180,18 @@ export default { @@ -213,18 +180,18 @@ export default {
213 this.formData = { ...row } 180 this.formData = { ...row }
214 this.visible = true 181 this.visible = true
215 }, 182 },
216 - 183 +
217 closeDialog() { 184 closeDialog() {
218 this.visible = false 185 this.visible = false
219 this.$refs.form.resetFields() 186 this.$refs.form.resetFields()
220 }, 187 },
221 - 188 +
222 submitForm() { 189 submitForm() {
223 this.$refs.form.validate(async valid => { 190 this.$refs.form.validate(async valid => {
224 if (valid) { 191 if (valid) {
225 try { 192 try {
226 await updateRepairSetting(this.formData) 193 await updateRepairSetting(this.formData)
227 - this.$message.success(this.$t('repairSetting.updateSuccess')) 194 + this.$message.success(this.$t('common.submitSuccess'))
228 this.$emit('success') 195 this.$emit('success')
229 this.closeDialog() 196 this.closeDialog()
230 } catch (error) { 197 } catch (error) {
src/components/work/EditRepairTypeUser.vue
1 <template> 1 <template>
2 - <el-dialog :visible="visible" :title="$t('editRepairTypeUser.title')" width="50%" @close="handleClose"> 2 + <el-dialog :visible="visible" :title="$t('editRepairTypeUser.title')" width="40%" @close="handleClose">
3 <el-form ref="form" :model="form" label-width="120px"> 3 <el-form ref="form" :model="form" label-width="120px">
4 <el-form-item :label="$t('editRepairTypeUser.status')" prop="state" required> 4 <el-form-item :label="$t('editRepairTypeUser.status')" prop="state" required>
5 <el-select v-model="form.state" style="width: 100%"> 5 <el-select v-model="form.state" style="width: 100%">
6 - <el-option :value="9999" :label="$t('editRepairTypeUser.online')"></el-option>  
7 - <el-option :value="8888" :label="$t('editRepairTypeUser.offline')"></el-option> 6 + <el-option value="9999" :label="$t('editRepairTypeUser.online')"></el-option>
  7 + <el-option value="8888" :label="$t('editRepairTypeUser.offline')"></el-option>
8 </el-select> 8 </el-select>
9 </el-form-item> 9 </el-form-item>
10 <el-form-item :label="$t('editRepairTypeUser.description')" prop="remark"> 10 <el-form-item :label="$t('editRepairTypeUser.description')" prop="remark">
src/components/work/StopRepair.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('repairDispatchManage.pauseRepair')"  
4 - :visible.sync="visible"  
5 - width="50%"  
6 - @close="resetForm"  
7 - > 2 + <el-dialog :title="$t('repairDispatchManage.pause')" :visible.sync="visible" width="50%" @close="resetForm">
8 <el-form :model="form" ref="form" label-width="120px"> 3 <el-form :model="form" ref="form" label-width="120px">
9 - <el-form-item  
10 - :label="$t('repairDispatchManage.pauseReason')"  
11 - prop="remark"  
12 - :rules="[{ required: true, message: $t('repairDispatchManage.requiredPauseReason'), trigger: 'blur' }]"  
13 - >  
14 - <el-input  
15 - type="textarea"  
16 - :rows="4"  
17 - v-model="form.remark"  
18 - :placeholder="$t('repairDispatchManage.requiredPauseReason')"  
19 - /> 4 + <el-form-item :label="$t('repairDispatchManage.pauseReason')" prop="remark"
  5 + :rules="[{ required: true, message: $t('repairDispatchManage.requiredPauseReason'), trigger: 'blur' }]">
  6 + <el-input type="textarea" :rows="4" v-model="form.remark"
  7 + :placeholder="$t('repairDispatchManage.requiredPauseReason')" />
20 </el-form-item> 8 </el-form-item>
21 </el-form> 9 </el-form>
22 - 10 +
23 <div slot="footer" class="dialog-footer"> 11 <div slot="footer" class="dialog-footer">
24 <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button> 12 <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
25 <el-button type="primary" @click="submitForm">{{ $t('common.submit') }}</el-button> 13 <el-button type="primary" @click="submitForm">{{ $t('common.submit') }}</el-button>
@@ -55,13 +43,13 @@ export default { @@ -55,13 +43,13 @@ export default {
55 async submitForm() { 43 async submitForm() {
56 this.$refs.form.validate(async valid => { 44 this.$refs.form.validate(async valid => {
57 if (!valid) return 45 if (!valid) return
58 - 46 +
59 try { 47 try {
60 const data = { 48 const data = {
61 ...this.form, 49 ...this.form,
62 communityId: getCommunityId() 50 communityId: getCommunityId()
63 } 51 }
64 - 52 +
65 await repairStop(data) 53 await repairStop(data)
66 this.$emit('success') 54 this.$emit('success')
67 this.visible = false 55 this.visible = false
src/components/work/addOwnerRepair.vue
@@ -63,7 +63,7 @@ @@ -63,7 +63,7 @@
63 import * as ownerRepairManageApi from '@/api/work/ownerRepairManageApi' 63 import * as ownerRepairManageApi from '@/api/work/ownerRepairManageApi'
64 import { getCommunityName } from '@/api/community/communityApi' 64 import { getCommunityName } from '@/api/community/communityApi'
65 import {getFloors, getUnits, queryRooms} from '@/api/room/roomApi' 65 import {getFloors, getUnits, queryRooms} from '@/api/room/roomApi'
66 -import {getDateYYYYMMDD} from '@/utils/dateUtil' 66 +//import {getDateYYYYMMDD} from '@/utils/dateUtil'
67 67
68 export default { 68 export default {
69 name: 'AddOwnerRepair', 69 name: 'AddOwnerRepair',
@@ -100,7 +100,7 @@ export default { @@ -100,7 +100,7 @@ export default {
100 open() { 100 open() {
101 this.visible = true 101 this.visible = true
102 this.resetForm() 102 this.resetForm()
103 - this.formData.appointmentTime =getDateYYYYMMDD() 103 + // this.formData.appointmentTime =getDateYYYYMMDD()
104 this.listRepairSettings('T') 104 this.listRepairSettings('T')
105 }, 105 },
106 closeDialog() { 106 closeDialog() {
src/components/work/chooseSingleResource.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('chooseSingleResource.title')"  
4 - :visible.sync="visible"  
5 - width="60%"  
6 - @close="closeDialog"  
7 - >  
8 - <el-form label-width="120px"> 2 + <el-dialog :title="$t('chooseSingleResource.title')" :visible.sync="dialogVisible" width="60%" @close="handleClose">
  3 +
  4 + <el-form :model="form" label-width="120px">
9 <el-form-item :label="$t('chooseSingleResource.goodsType')"> 5 <el-form-item :label="$t('chooseSingleResource.goodsType')">
10 - <el-select  
11 - v-model="form.rsId"  
12 - placeholder="请选择"  
13 - style="width:100%"  
14 - @change="listSonResourceStoreType"  
15 - >  
16 - <el-option  
17 - v-for="item in resourceStoreTypes"  
18 - :key="item.rstId"  
19 - :label="item.name"  
20 - :value="item.rstId"  
21 - /> 6 + <el-select v-model="form.rsId" :placeholder="$t('chooseSingleResource.selectGoodsType')" style="width:100%"
  7 + @change="handleRsIdChange">
  8 + <el-option v-for="item in resourceStoreTypes" :key="item.rstId" :label="item.name" :value="item.rstId">
  9 + </el-option>
22 </el-select> 10 </el-select>
23 </el-form-item> 11 </el-form-item>
24 12
25 <template v-if="form.isCustom"> 13 <template v-if="form.isCustom">
26 <el-form-item :label="$t('chooseSingleResource.goodsName')"> 14 <el-form-item :label="$t('chooseSingleResource.goodsName')">
27 - <el-input  
28 - v-model="form.customGoodsName"  
29 - :placeholder="$t('chooseSingleResource.goodsNamePlaceholder')"  
30 - /> 15 + <el-input v-model="form.customGoodsName" :placeholder="$t('chooseSingleResource.inputGoodsName')">
  16 + </el-input>
  17 + </el-form-item>
  18 +
  19 + <el-form-item :label="$t('chooseSingleResource.customPrice')" v-if="form.maintenanceType === '1001'">
  20 + <el-input-number v-model="form.price" :placeholder="$t('chooseSingleResource.inputPrice')" :min="0"
  21 + style="width:100%">
  22 + </el-input-number>
31 </el-form-item> 23 </el-form-item>
32 </template> 24 </template>
33 - 25 +
34 <template v-else> 26 <template v-else>
35 - <el-form-item :label="$t('chooseSingleResource.secondaryCategory')">  
36 - <el-select  
37 - v-model="form.rstId"  
38 - placeholder="请选择"  
39 - style="width:100%"  
40 - @change="choseGoods"  
41 - >  
42 - <el-option  
43 - v-for="item in sonResourceStoreTypes"  
44 - :key="item.rstId"  
45 - :label="item.name"  
46 - :value="item.rstId"  
47 - /> 27 + <el-form-item :label="$t('chooseSingleResource.subCategory')">
  28 + <el-select v-model="form.rstId" :placeholder="$t('chooseSingleResource.selectSubCategory')" style="width:100%"
  29 + @change="handleRstIdChange">
  30 + <el-option v-for="item in sonResourceStoreTypes" :key="item.rstId" :label="item.name" :value="item.rstId">
  31 + </el-option>
48 </el-select> 32 </el-select>
49 </el-form-item> 33 </el-form-item>
50 34
51 - <el-form-item v-if="form.rstId" :label="$t('chooseSingleResource.goods')">  
52 - <el-select  
53 - v-model="form.resId"  
54 - placeholder="请选择"  
55 - style="width:100%"  
56 - @change="chosePrice"  
57 - >  
58 - <el-option  
59 - v-for="item in resourceStores"  
60 - :key="item.resId"  
61 - :label="item.resName"  
62 - :value="item.resId"  
63 - /> 35 + <el-form-item :label="$t('chooseSingleResource.goods')" v-if="form.rstId">
  36 + <el-select v-model="form.resId" :placeholder="$t('chooseSingleResource.selectGoods')" style="width:100%"
  37 + @change="handleResIdChange">
  38 + <el-option v-for="item in resourceStores" :key="item.resId" :label="item.resName" :value="item.resId">
  39 + </el-option>
64 </el-select> 40 </el-select>
65 </el-form-item> 41 </el-form-item>
66 - </template>  
67 42
68 - <template v-if="form.resId || form.isCustom">  
69 - <el-form-item :label="$t('chooseSingleResource.quantity')">  
70 - <el-input-number  
71 - v-model="form.useNumber"  
72 - :min="1"  
73 - label="数量"  
74 - />  
75 - </el-form-item> 43 + <template v-if="form.resId">
  44 + <el-form-item :label="$t('chooseSingleResource.goodsPrice')"
  45 + v-if="form.maintenanceType === '1001' && form.outLowPrice === form.outHighPrice">
  46 + <el-input-number v-model="form.price" disabled style="width:100%">
  47 + </el-input-number>
  48 + </el-form-item>
  49 +
  50 + <el-form-item :label="$t('chooseSingleResource.customPrice')"
  51 + v-if="form.maintenanceType === '1001' && form.outLowPrice !== form.outHighPrice">
  52 + <el-input-number v-model="form.price" :min="form.outLowPrice" :max="form.outHighPrice" style="width:100%">
  53 + </el-input-number>
  54 + <span>{{ $t('chooseSingleResource.priceRange') }} {{ form.outLowPrice }}-{{ form.outHighPrice }}</span>
  55 + </el-form-item>
  56 +
  57 + <el-form-item :label="$t('chooseSingleResource.spec')">
  58 + <el-input v-model="form.selectedGoodsInfo.specName" disabled>
  59 + </el-input>
  60 + </el-form-item>
  61 + </template>
76 </template> 62 </template>
  63 +
  64 + <el-form-item :label="$t('chooseSingleResource.quantity')">
  65 + <el-input-number v-model="form.useNumber" :min="1" @change="handleQuantityChange">
  66 + </el-input-number>
  67 + </el-form-item>
77 </el-form> 68 </el-form>
78 69
79 - <div slot="footer" class="dialog-footer">  
80 - <el-button @click="closeDialog">{{ $t('chooseSingleResource.cancel') }}</el-button>  
81 - <el-button type="primary" @click="confirmSelection">{{ $t('chooseSingleResource.confirm') }}</el-button>  
82 - </div> 70 + <span slot="footer" class="dialog-footer">
  71 + <el-button @click="dialogVisible = false">{{ $t('common.cancel') }}</el-button>
  72 + <el-button type="primary" @click="handleConfirm" :loading="loading">
  73 + {{ $t('common.confirm') }}
  74 + </el-button>
  75 + </span>
83 </el-dialog> 76 </el-dialog>
84 </template> 77 </template>
85 78
86 <script> 79 <script>
87 -import { listResourceStoreTypes, listUserStorehouses } from '@/api/work/repairForceFinishManageApi' 80 +//import { getDict } from '@/api/community/communityApi'
  81 +import { getCommunityId } from '@/api/community/communityApi'
  82 +import { listResourceStoreTypes, listUserStorehouses } from '@/api/work/finishRepairApi'
88 83
89 export default { 84 export default {
90 name: 'ChooseSingleResource', 85 name: 'ChooseSingleResource',
91 - props: {  
92 - visible: {  
93 - type: Boolean,  
94 - default: false  
95 - },  
96 - maintenanceType: {  
97 - type: String,  
98 - default: ''  
99 - },  
100 - repairId: {  
101 - type: String,  
102 - default: ''  
103 - }  
104 - },  
105 data() { 86 data() {
106 return { 87 return {
  88 + dialogVisible: false,
  89 + loading: false,
107 form: { 90 form: {
108 maintenanceType: '', 91 maintenanceType: '',
109 resourceStoreTypes: [], 92 resourceStoreTypes: [],
110 sonResourceStoreTypes: [], 93 sonResourceStoreTypes: [],
111 - rstId: '',  
112 rsId: '', 94 rsId: '',
  95 + rstId: '',
113 resId: '', 96 resId: '',
114 repairId: '', 97 repairId: '',
115 selectedGoodsInfo: {}, 98 selectedGoodsInfo: {},
@@ -121,124 +104,191 @@ export default { @@ -121,124 +104,191 @@ export default {
121 outHighPrice: '', 104 outHighPrice: '',
122 useNumber: 1, 105 useNumber: 1,
123 sign: '' 106 sign: ''
124 - }  
125 - }  
126 - },  
127 - watch: {  
128 - maintenanceType(newVal) {  
129 - this.form.maintenanceType = newVal  
130 - },  
131 - repairId(newVal) {  
132 - this.form.repairId = newVal 107 + },
  108 + resourceStoreTypes: [],
  109 + sonResourceStoreTypes: [],
  110 + resourceStores: [],
  111 + communityId: ''
133 } 112 }
134 }, 113 },
135 - mounted() {  
136 - this.listResourceStoreType()  
137 - },  
138 methods: { 114 methods: {
139 - open(param) {  
140 - this.form = {  
141 - ...this.form,  
142 - maintenanceType: param.maintenanceType,  
143 - repairId: param.repairId || '',  
144 - sign: param.sign || '' 115 + open(params) {
  116 + this.resetForm()
  117 + this.communityId = getCommunityId()
  118 + this.form.maintenanceType = params.maintenanceType
  119 + if (params.sign) {
  120 + this.form.sign = params.sign
145 } 121 }
146 - this.listResourceStoreType()  
147 - },  
148 - closeDialog() {  
149 - this.$emit('update:visible', false) 122 + if (params.repairId) {
  123 + this.form.repairId = params.repairId
  124 + }
  125 + this.dialogVisible = true
  126 + this.loadResourceStoreTypes()
150 }, 127 },
151 - async listResourceStoreType() { 128 + async loadResourceStoreTypes() {
152 try { 129 try {
153 - const data = await listResourceStoreTypes('0')  
154 - this.form.resourceStoreTypes = [...data, { rstId: 'custom', name: '自定义' }] 130 + const params = {
  131 + page: 1,
  132 + row: 100,
  133 + communityId: this.communityId,
  134 + parentId: '0',
  135 + giveType: 1
  136 + }
  137 + const { data } = await listResourceStoreTypes(params)
  138 + this.resourceStoreTypes = data
  139 + // 添加自定义选项
  140 + this.resourceStoreTypes.push({
  141 + rstId: 'custom',
  142 + name: this.$t('chooseSingleResource.custom')
  143 + })
155 } catch (error) { 144 } catch (error) {
156 - console.error('获取资源类型失败:', error)  
157 - this.$message.error('获取资源类型失败') 145 + console.error('加载商品类型失败:', error)
158 } 146 }
159 }, 147 },
160 - async listSonResourceStoreType() {  
161 - if (this.form.rsId === 'custom') { 148 + async handleRsIdChange(val) {
  149 + this.form.rstId = ''
  150 + this.sonResourceStoreTypes = []
  151 + this.form.resId = ''
  152 + this.resourceStores = []
  153 +
  154 + if (val === 'custom') {
162 this.form.isCustom = true 155 this.form.isCustom = true
163 return 156 return
164 } 157 }
165 - 158 +
166 this.form.isCustom = false 159 this.form.isCustom = false
167 try { 160 try {
168 - const data = await listResourceStoreTypes(this.form.rsId)  
169 - this.form.sonResourceStoreTypes = data 161 + const params = {
  162 + page: 1,
  163 + row: 100,
  164 + parentId: val,
  165 + communityId: this.communityId
  166 + }
  167 + const { data } = await listResourceStoreTypes(params)
  168 + this.sonResourceStoreTypes = data
170 } catch (error) { 169 } catch (error) {
171 - console.error('获取子资源类型失败:', error)  
172 - this.$message.error('获取子资源类型失败') 170 + console.error('加载二级分类失败:', error)
173 } 171 }
174 }, 172 },
175 - async choseGoods() {  
176 - if (!this.form.rstId) return  
177 - 173 + async handleRstIdChange(val) {
  174 + this.form.resId = ''
  175 + this.resourceStores = []
  176 +
178 try { 177 try {
179 const params = { 178 const params = {
  179 + page: 1,
  180 + row: 100,
180 repairId: this.form.repairId, 181 repairId: this.form.repairId,
181 - rstId: this.form.rstId,  
182 - sign: this.form.sign 182 + rstId: val,
  183 + resId: this.form.resId,
  184 + communityId: this.communityId,
  185 + chooseType: "repair",
  186 + flag: 1,
  187 + sign: this.form.sign,
  188 + giveType: 1
183 } 189 }
184 - const data = await listUserStorehouses(params)  
185 - this.form.resourceStores = data 190 + const { data } = await listUserStorehouses(params)
  191 + this.resourceStores = data
186 } catch (error) { 192 } catch (error) {
187 - console.error('获取商品失败:', error)  
188 - this.$message.error('获取商品失败') 193 + console.error('加载商品失败:', error)
189 } 194 }
190 }, 195 },
191 - chosePrice() {  
192 - const selected = this.form.resourceStores.find(item => item.resId === this.form.resId)  
193 - if (selected) {  
194 - this.form.selectedGoodsInfo = selected  
195 - if (selected.outLowPrice === selected.outHighPrice) {  
196 - this.form.price = selected.outLowPrice  
197 - } else {  
198 - this.form.price = '' 196 + handleResIdChange(val) {
  197 + this.resourceStores.forEach(item => {
  198 + if (item.resId === val) {
  199 + this.form.selectedGoodsInfo = item
  200 + if (item.outLowPrice === item.outHighPrice) {
  201 + this.form.price = item.outLowPrice
  202 + } else {
  203 + this.form.price = ''
  204 + }
  205 + this.form.outLowPrice = item.outLowPrice
  206 + this.form.outHighPrice = item.outHighPrice
199 } 207 }
200 - this.form.outLowPrice = selected.outLowPrice  
201 - this.form.outHighPrice = selected.outHighPrice 208 + })
  209 + },
  210 + handleQuantityChange(val) {
  211 + if (val < 1) {
  212 + this.form.useNumber = 1
202 } 213 }
203 }, 214 },
204 - confirmSelection() {  
205 - if (this.validateForm()) {  
206 - this.$emit('confirm', {  
207 - ...this.form.selectedGoodsInfo,  
208 - price: this.form.price,  
209 - useNumber: this.form.useNumber,  
210 - isCustom: this.form.isCustom,  
211 - customGoodsName: this.form.customGoodsName  
212 - })  
213 - this.closeDialog() 215 + handleClose() {
  216 + this.resetForm()
  217 + },
  218 + resetForm() {
  219 + this.form = {
  220 + maintenanceType: '',
  221 + resourceStoreTypes: [],
  222 + sonResourceStoreTypes: [],
  223 + rsId: '',
  224 + rstId: '',
  225 + resId: '',
  226 + repairId: '',
  227 + selectedGoodsInfo: {},
  228 + resourceStores: [],
  229 + isCustom: false,
  230 + customGoodsName: '',
  231 + price: '',
  232 + outLowPrice: '',
  233 + outHighPrice: '',
  234 + useNumber: 1,
  235 + sign: ''
214 } 236 }
215 }, 237 },
216 validateForm() { 238 validateForm() {
217 if (this.form.isCustom) { 239 if (this.form.isCustom) {
218 if (!this.form.customGoodsName) { 240 if (!this.form.customGoodsName) {
219 - this.$message.warning('请填写商品名') 241 + this.$message.error(this.$t('chooseSingleResource.validate.goodsNameRequired'))
220 return false 242 return false
221 } 243 }
222 if (this.form.maintenanceType === '1001' && !this.form.price) { 244 if (this.form.maintenanceType === '1001' && !this.form.price) {
223 - this.$message.warning('请填写价格') 245 + this.$message.error(this.$t('chooseSingleResource.validate.priceRequired'))
224 return false 246 return false
225 } 247 }
226 } else { 248 } else {
227 if (!this.form.rsId) { 249 if (!this.form.rsId) {
228 - this.$message.warning('请选择商品类型') 250 + this.$message.error(this.$t('chooseSingleResource.validate.goodsTypeRequired'))
229 return false 251 return false
230 } 252 }
231 if (!this.form.rstId) { 253 if (!this.form.rstId) {
232 - this.$message.warning('请选择二级分类') 254 + this.$message.error(this.$t('chooseSingleResource.validate.subCategoryRequired'))
233 return false 255 return false
234 } 256 }
235 if (!this.form.resId) { 257 if (!this.form.resId) {
236 - this.$message.warning('请选择商品') 258 + this.$message.error(this.$t('chooseSingleResource.validate.goodsRequired'))
  259 + return false
  260 + }
  261 + if (this.form.maintenanceType === '1001' && !this.form.price) {
  262 + this.$message.error(this.$t('chooseSingleResource.validate.priceRequired'))
237 return false 263 return false
238 } 264 }
239 } 265 }
240 return true 266 return true
  267 + },
  268 + handleConfirm() {
  269 + if (!this.validateForm()) return
  270 +
  271 + const selectedGoods = {
  272 + ...this.form.selectedGoodsInfo,
  273 + price: this.form.price,
  274 + useNumber: this.form.useNumber,
  275 + isCustom: this.form.isCustom,
  276 + customGoodsName: this.form.customGoodsName
  277 + }
  278 +
  279 + if (this.form.isCustom) {
  280 + selectedGoods.rstName = this.$t('chooseSingleResource.custom')
  281 + }
  282 +
  283 + this.$emit('choose-single-resource', selectedGoods)
  284 + this.dialogVisible = false
241 } 285 }
242 } 286 }
243 } 287 }
244 -</script>  
245 \ No newline at end of file 288 \ No newline at end of file
  289 +</script>
  290 +
  291 +<style scoped>
  292 +.el-input-number {
  293 + width: 100%;
  294 +}
  295 +</style>
246 \ No newline at end of file 296 \ No newline at end of file
src/components/work/deleteOwnerRepair.vue
@@ -22,8 +22,8 @@ export default { @@ -22,8 +22,8 @@ export default {
22 } 22 }
23 }, 23 },
24 methods: { 24 methods: {
25 - open(repairId) {  
26 - this.repairId = repairId 25 + open(_repair) {
  26 + this.repairId = _repair.repairId
27 this.visible = true 27 this.visible = true
28 }, 28 },
29 29
src/components/work/dispatchRepair.vue
@@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
15 <el-form-item :label="$t('repairPoolManage.operationSuggestions')" prop="context" 15 <el-form-item :label="$t('repairPoolManage.operationSuggestions')" prop="context"
16 :rules="[{ required: true, message: $t('repairPoolManage.operationSuggestions'), trigger: 'blur' }]"> 16 :rules="[{ required: true, message: $t('repairPoolManage.operationSuggestions'), trigger: 'blur' }]">
17 <el-input v-model="formData.context" type="textarea" :rows="4" 17 <el-input v-model="formData.context" type="textarea" :rows="4"
18 - :placeholder="$t('repairPoolManage.processingOpinionsPlaceholder')" /> 18 + :placeholder="$t('repairPoolManage.operationSuggestions')" />
19 </el-form-item> 19 </el-form-item>
20 </el-form> 20 </el-form>
21 21
@@ -30,6 +30,7 @@ @@ -30,6 +30,7 @@
30 import { dispatchRepair } from '@/api/work/repairPoolManageApi' 30 import { dispatchRepair } from '@/api/work/repairPoolManageApi'
31 import {listRepairTypeUsers} from '@/api/work/repairTypeUserApi' 31 import {listRepairTypeUsers} from '@/api/work/repairTypeUserApi'
32 import { getCommunityId } from '@/api/community/communityApi' 32 import { getCommunityId } from '@/api/community/communityApi'
  33 +import { getUserId } from '@/api/user/userApi'
33 34
34 export default { 35 export default {
35 name: 'DispatchRepair', 36 name: 'DispatchRepair',
@@ -55,7 +56,8 @@ export default { @@ -55,7 +56,8 @@ export default {
55 ...this.formData, 56 ...this.formData,
56 repairId: repair.repairId, 57 repairId: repair.repairId,
57 repairType: repair.repairType, 58 repairType: repair.repairType,
58 - action: repair.action || 'DISPATCH' 59 + action: repair.action || 'DISPATCH',
  60 + currentUserId: getUserId()
59 } 61 }
60 62
61 if (repair.action === 'BACK') { 63 if (repair.action === 'BACK') {
src/components/work/forceFinishRepair.vue
1 <template> 1 <template>
2 - <el-dialog :title="$t('forceFinishRepair.title')" :visible.sync="visible" width="60%" @close="closeDialog"> 2 + <el-dialog :title="$t('forceFinishRepair.title')" :visible.sync="visible" width="40%" @close="closeDialog">
3 <el-form label-width="120px"> 3 <el-form label-width="120px">
4 <el-form-item v-if="form.repairObjType !== '004'" :label="$t('forceFinishRepair.useMaterial')"> 4 <el-form-item v-if="form.repairObjType !== '004'" :label="$t('forceFinishRepair.useMaterial')">
5 <el-select v-model="form.maintenanceType" placeholder="请选择" style="width:100%"> 5 <el-select v-model="form.maintenanceType" placeholder="请选择" style="width:100%">
@@ -64,7 +64,7 @@ @@ -64,7 +64,7 @@
64 </template> 64 </template>
65 65
66 <el-form-item :label="$t('forceFinishRepair.explanation')"> 66 <el-form-item :label="$t('forceFinishRepair.explanation')">
67 - <el-input v-model="form.context" type="textarea" :placeholder="$t('forceFinishRepair.explanationPlaceholder')" 67 + <el-input v-model="form.context" type="textarea" :placeholder="$t('forceFinishRepair.explanation')"
68 :rows="4" /> 68 :rows="4" />
69 </el-form-item> 69 </el-form-item>
70 </el-form> 70 </el-form>
@@ -80,9 +80,9 @@ @@ -80,9 +80,9 @@
80 import { 80 import {
81 listResourceStoreTypes, 81 listResourceStoreTypes,
82 listUserStorehouses, 82 listUserStorehouses,
83 - repairForceFinish,  
84 - getDict 83 + repairForceFinish
85 } from '@/api/work/repairForceFinishManageApi' 84 } from '@/api/work/repairForceFinishManageApi'
  85 +import { getDict } from '@/api/community/communityApi'
86 86
87 export default { 87 export default {
88 name: 'ForceFinishRepair', 88 name: 'ForceFinishRepair',
src/components/work/repairDetailPhotos.vue
1 <template> 1 <template>
2 - <div class="margin-top"> 2 + <div class="margin-top text-left">
3 <div v-if="photos.length > 0" class="row padding"> 3 <div v-if="photos.length > 0" class="row padding">
4 <div class="text-title">{{ $t('repairDetail.orderPhotos') }}</div> 4 <div class="text-title">{{ $t('repairDetail.orderPhotos') }}</div>
5 <div v-for="(item, index) in photos" :key="index" class="form-group margin-left"> 5 <div v-for="(item, index) in photos" :key="index" class="form-group margin-left">
src/components/work/visitOwnerRepair.vue
1 <template> 1 <template>
2 - <el-dialog  
3 - :title="$t('repairReturnVisit.visitTitle')"  
4 - :visible.sync="visible"  
5 - width="600px"  
6 - @close="resetForm"  
7 - >  
8 - <el-form  
9 - ref="visitForm"  
10 - :model="formData"  
11 - :rules="rules"  
12 - label-width="100px"  
13 - label-position="right"  
14 - >  
15 - <el-form-item  
16 - :label="$t('repairReturnVisit.satisfaction')"  
17 - prop="visitType"  
18 - >  
19 - <el-select  
20 - v-model="formData.visitType"  
21 - :placeholder="$t('repairReturnVisit.satisfactionPlaceholder')"  
22 - style="width:100%"  
23 - >  
24 - <el-option  
25 - :label="$t('repairReturnVisit.satisfied')"  
26 - value="1001"  
27 - />  
28 - <el-option  
29 - :label="$t('repairReturnVisit.unsatisfied')"  
30 - value="2002"  
31 - /> 2 + <el-dialog :title="$t('repairReturnVisit.visitTitle')" :visible.sync="visible" width="600px" @close="resetForm">
  3 + <el-form ref="visitForm" :model="formData" :rules="rules" label-width="100px" label-position="right">
  4 + <el-form-item :label="$t('repairReturnVisit.satisfaction')" prop="visitType">
  5 + <el-select v-model="formData.visitType" :placeholder="$t('repairReturnVisit.satisfaction')"
  6 + style="width:100%">
  7 + <el-option :label="$t('repairReturnVisit.satisfied')" value="1001" />
  8 + <el-option :label="$t('repairReturnVisit.unsatisfied')" value="2002" />
32 </el-select> 9 </el-select>
33 </el-form-item> 10 </el-form-item>
34 -  
35 - <el-form-item  
36 - :label="$t('repairReturnVisit.visitContent')"  
37 - prop="context"  
38 - >  
39 - <el-input  
40 - v-model="formData.context"  
41 - type="textarea"  
42 - :rows="4"  
43 - :placeholder="$t('repairReturnVisit.visitContentPlaceholder')"  
44 - /> 11 +
  12 + <el-form-item :label="$t('repairReturnVisit.visitContent')" prop="context">
  13 + <el-input v-model="formData.context" type="textarea" :rows="4"
  14 + :placeholder="$t('repairReturnVisit.visitContent')" />
45 </el-form-item> 15 </el-form-item>
46 </el-form> 16 </el-form>
47 - 17 +
48 <div slot="footer" class="dialog-footer"> 18 <div slot="footer" class="dialog-footer">
49 <el-button @click="visible = false"> 19 <el-button @click="visible = false">
50 {{ $t('common.cancel') }} 20 {{ $t('common.cancel') }}
src/i18n/workI18n.js
@@ -4,6 +4,8 @@ import { messages as itemReleaseManageMessages } from &#39;../views/work/itemRelease @@ -4,6 +4,8 @@ import { messages as itemReleaseManageMessages } from &#39;../views/work/itemRelease
4 import { messages as addItemReleaseViewMessages } from '../views/work/addItemReleaseViewLang' 4 import { messages as addItemReleaseViewMessages } from '../views/work/addItemReleaseViewLang'
5 import { messages as editItemReleaseViewMessages } from '../views/work/editItemReleaseViewLang' 5 import { messages as editItemReleaseViewMessages } from '../views/work/editItemReleaseViewLang'
6 import { messages as itemReleaseDetailMessages } from '../views/work/itemReleaseDetailLang' 6 import { messages as itemReleaseDetailMessages } from '../views/work/itemReleaseDetailLang'
  7 +import { messages as printRepairDetailMessages } from '../views/work/printRepairDetailLang'
  8 +import { messages as finishRepairMessages } from '../views/work/finishRepairLang'
7 export const messages = { 9 export const messages = {
8 zh: { 10 zh: {
9 ...itemReleaseTypeManageMessages.zh, 11 ...itemReleaseTypeManageMessages.zh,
@@ -11,6 +13,8 @@ export const messages = { @@ -11,6 +13,8 @@ export const messages = {
11 ...addItemReleaseViewMessages.zh, 13 ...addItemReleaseViewMessages.zh,
12 ...editItemReleaseViewMessages.zh, 14 ...editItemReleaseViewMessages.zh,
13 ...itemReleaseDetailMessages.zh, 15 ...itemReleaseDetailMessages.zh,
  16 + ...printRepairDetailMessages.zh,
  17 + ...finishRepairMessages.zh,
14 }, 18 },
15 en: { 19 en: {
16 ...itemReleaseTypeManageMessages.en, 20 ...itemReleaseTypeManageMessages.en,
@@ -18,5 +22,7 @@ export const messages = { @@ -18,5 +22,7 @@ export const messages = {
18 ...addItemReleaseViewMessages.en, 22 ...addItemReleaseViewMessages.en,
19 ...editItemReleaseViewMessages.en, 23 ...editItemReleaseViewMessages.en,
20 ...itemReleaseDetailMessages.en, 24 ...itemReleaseDetailMessages.en,
  25 + ...printRepairDetailMessages.en,
  26 + ...finishRepairMessages.en,
21 } 27 }
22 } 28 }
23 \ No newline at end of file 29 \ No newline at end of file
src/router/index.js
@@ -704,6 +704,11 @@ const routes = [ @@ -704,6 +704,11 @@ const routes = [
704 name:'/pages/property/printSmallAccountReceipt', 704 name:'/pages/property/printSmallAccountReceipt',
705 component: () => import('@/views/account/printSmallAccountReceiptList.vue') 705 component: () => import('@/views/account/printSmallAccountReceiptList.vue')
706 }, 706 },
  707 + {
  708 + path:'/pages/property/printRepairDetail',
  709 + name:'/pages/property/printRepairDetail',
  710 + component: () => import('@/views/work/printRepairDetailList.vue')
  711 + },
707 ] 712 ]
708 713
709 const router = new VueRouter({ 714 const router = new VueRouter({
src/router/workRouter.js
@@ -24,4 +24,9 @@ export default [ @@ -24,4 +24,9 @@ export default [
24 name: '/views/work/itemReleaseDetail', 24 name: '/views/work/itemReleaseDetail',
25 component: () => import('@/views/work/itemReleaseDetailList.vue') 25 component: () => import('@/views/work/itemReleaseDetailList.vue')
26 }, 26 },
  27 + {
  28 + path:'/views/work/finishRepair',
  29 + name:'/views/work/finishRepair',
  30 + component: () => import('@/views/work/finishRepairList.vue')
  31 + },
27 ] 32 ]
28 \ No newline at end of file 33 \ No newline at end of file
src/views/role/roleList.vue
@@ -12,9 +12,9 @@ @@ -12,9 +12,9 @@
12 <el-button :type="activeTab === 'privilege' ? 'primary' : ''" @click="changeTab('privilege')"> 12 <el-button :type="activeTab === 'privilege' ? 'primary' : ''" @click="changeTab('privilege')">
13 {{ $t('role.privilege') }} 13 {{ $t('role.privilege') }}
14 </el-button> 14 </el-button>
15 - <el-button :type="activeTab === 'community' ? 'primary' : ''" @click="changeTab('community')"> 15 + <!-- <el-button :type="activeTab === 'community' ? 'primary' : ''" @click="changeTab('community')">
16 {{ $t('role.community') }} 16 {{ $t('role.community') }}
17 - </el-button> 17 + </el-button> -->
18 <el-button :type="activeTab === 'staff' ? 'primary' : ''" @click="changeTab('staff')"> 18 <el-button :type="activeTab === 'staff' ? 'primary' : ''" @click="changeTab('staff')">
19 {{ $t('role.staff') }} 19 {{ $t('role.staff') }}
20 </el-button> 20 </el-button>
@@ -36,11 +36,11 @@ @@ -36,11 +36,11 @@
36 </el-row> 36 </el-row>
37 </div> 37 </div>
38 </template> 38 </template>
39 - 39 +
40 <script> 40 <script>
41 import RoleDiv from '@/components/role/RoleDiv' 41 import RoleDiv from '@/components/role/RoleDiv'
42 import PrivilegeTree from '@/components/role/PrivilegeTree' 42 import PrivilegeTree from '@/components/role/PrivilegeTree'
43 -import RoleCommunity from '@/components/role/RoleCommunity' 43 +// import RoleCommunity from '@/components/role/RoleCommunity'
44 import RoleStaff from '@/components/role/RoleStaff' 44 import RoleStaff from '@/components/role/RoleStaff'
45 45
46 export default { 46 export default {
@@ -48,7 +48,7 @@ export default { @@ -48,7 +48,7 @@ export default {
48 components: { 48 components: {
49 RoleDiv, 49 RoleDiv,
50 PrivilegeTree, 50 PrivilegeTree,
51 - RoleCommunity, 51 + // RoleCommunity,
52 RoleStaff 52 RoleStaff
53 }, 53 },
54 data() { 54 data() {
@@ -70,7 +70,7 @@ export default { @@ -70,7 +70,7 @@ export default {
70 } 70 }
71 } 71 }
72 </script> 72 </script>
73 - 73 +
74 <style lang="scss" scoped> 74 <style lang="scss" scoped>
75 .role-container { 75 .role-container {
76 76
@@ -113,9 +113,10 @@ export default { @@ -113,9 +113,10 @@ export default {
113 .role-menu { 113 .role-menu {
114 text-align: left; 114 text-align: left;
115 margin-left: 15px; 115 margin-left: 15px;
  116 +
116 .el-button { 117 .el-button {
117 margin-top: 15px; 118 margin-top: 15px;
118 - 119 +
119 } 120 }
120 } 121 }
121 } 122 }
src/views/work/finishRepairLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + finishRepair: {
  4 + title: 'Repair Completion',
  5 + materialUsage: 'Material Usage',
  6 + selectMaterialUsage: 'Please select material usage',
  7 + repairType: 'Repair Type',
  8 + selectRepairType: 'Please select repair type',
  9 + selectGoods: 'Select Goods',
  10 + usedGoods: 'Used Goods',
  11 + category: 'Category',
  12 + goods: 'Goods',
  13 + price: 'Price',
  14 + quantity: 'Quantity',
  15 + unit: 'Unit',
  16 + spec: 'Spec',
  17 + operation: 'Operation',
  18 + totalAmount: 'Total Amount',
  19 + paymentMethod: 'Payment Method',
  20 + selectPaymentMethod: 'Please select payment method',
  21 + suggestion: 'Suggestion',
  22 + inputSuggestion: 'Required, please input suggestion',
  23 + beforeRepairPhoto: 'Before Repair Photo',
  24 + afterRepairPhoto: 'After Repair Photo',
  25 + validate: {
  26 + repairIdRequired: 'Repair ID is required',
  27 + maintenanceTypeRequired: 'Maintenance type is required',
  28 + contextRequired: 'Suggestion is required',
  29 + beforePhotoRequired: 'Before repair photo is required',
  30 + afterPhotoRequired: 'After repair photo is required',
  31 + goodsRequired: 'Please select goods',
  32 + paymentMethodRequired: 'Payment method is required'
  33 + },
  34 + submitSuccess: 'Submit successfully',
  35 + submitError: 'Submit failed'
  36 + },
  37 + chooseSingleResource: {
  38 + title: 'Select Item',
  39 + goodsType: 'Goods Type',
  40 + selectGoodsType: 'Please select goods type',
  41 + goodsName: 'Goods Name',
  42 + inputGoodsName: 'Required, please input goods name',
  43 + subCategory: 'Sub Category',
  44 + selectSubCategory: 'Please select sub category',
  45 + goods: 'Goods',
  46 + selectGoods: 'Please select goods',
  47 + goodsPrice: 'Goods Price',
  48 + customPrice: 'Custom Price',
  49 + inputPrice: 'Required, please input price',
  50 + priceRange: 'Price Range',
  51 + spec: 'Spec',
  52 + quantity: 'Quantity',
  53 + custom: 'Custom',
  54 + validate: {
  55 + goodsTypeRequired: 'Goods type is required',
  56 + subCategoryRequired: 'Sub category is required',
  57 + goodsRequired: 'Goods is required',
  58 + priceRequired: 'Price is required',
  59 + goodsNameRequired: 'Goods name is required'
  60 + }
  61 + }
  62 + },
  63 + zh: {
  64 + finishRepair: {
  65 + title: '报修结单',
  66 + materialUsage: '是否用料',
  67 + selectMaterialUsage: '请选择是否用料',
  68 + repairType: '维修类型',
  69 + selectRepairType: '请选择维修类型',
  70 + selectGoods: '选择商品',
  71 + usedGoods: '使用商品',
  72 + category: '分类',
  73 + goods: '商品',
  74 + price: '价格',
  75 + quantity: '数量',
  76 + unit: '单位',
  77 + spec: '规格',
  78 + operation: '操作',
  79 + totalAmount: '商品总金额',
  80 + paymentMethod: '支付方式',
  81 + selectPaymentMethod: '请选择支付方式',
  82 + suggestion: '处理意见',
  83 + inputSuggestion: '必填,请填写处理意见',
  84 + beforeRepairPhoto: '维修前图片',
  85 + afterRepairPhoto: '维修后图片',
  86 + validate: {
  87 + repairIdRequired: '报修单不能为空',
  88 + maintenanceTypeRequired: '维修类型不能为空',
  89 + contextRequired: '处理意见不能为空',
  90 + beforePhotoRequired: '维修前图片不能为空',
  91 + afterPhotoRequired: '维修后图片不能为空',
  92 + goodsRequired: '请选择商品',
  93 + paymentMethodRequired: '请选择支付方式'
  94 + },
  95 + submitSuccess: '提交成功',
  96 + submitError: '提交失败'
  97 + },
  98 + chooseSingleResource: {
  99 + title: '选择物品',
  100 + goodsType: '商品类型',
  101 + selectGoodsType: '请选择商品类型',
  102 + goodsName: '商品名',
  103 + inputGoodsName: '必填,请填写商品名',
  104 + subCategory: '二级分类',
  105 + selectSubCategory: '请选择二级类型',
  106 + goods: '商品',
  107 + selectGoods: '请选择商品',
  108 + goodsPrice: '商品价格',
  109 + customPrice: '自定义价格',
  110 + inputPrice: '必填,请填写自定义价格',
  111 + priceRange: '价格范围',
  112 + spec: '规格',
  113 + quantity: '商品数量',
  114 + custom: '自定义',
  115 + validate: {
  116 + goodsTypeRequired: '商品类型不能为空',
  117 + subCategoryRequired: '二级分类不能为空',
  118 + goodsRequired: '商品不能为空',
  119 + priceRequired: '商品价格不能为空',
  120 + goodsNameRequired: '商品名不能为空'
  121 + }
  122 + }
  123 + }
  124 +}
0 \ No newline at end of file 125 \ No newline at end of file
src/views/work/finishRepairList.vue 0 → 100644
  1 +<template>
  2 + <div class="finish-repair-container">
  3 + <el-card class="box-card">
  4 + <div slot="header" class="flex justify-between">
  5 + <span>{{ $t('finishRepair.title') }}</span>
  6 + </div>
  7 + <el-row :gutter="20">
  8 + <el-col :span="24">
  9 + <div class="form-wrapper">
  10 + <el-form label-width="120px">
  11 + <el-form-item :label="$t('finishRepair.materialUsage')" v-if="finishRepairInfo.repairObjType != '004'">
  12 + <el-select v-model="finishRepairInfo.maintenanceType"
  13 + :placeholder="$t('finishRepair.selectMaterialUsage')" style="width:100%">
  14 + <template v-for="(item, index) in finishRepairInfo.maintenanceTypes">
  15 + <el-option :key="index" :label="item.name" :value="item.statusCd"
  16 + v-if="item.statusCd != '1001' && item.statusCd != '1002'">
  17 + </el-option>
  18 + </template>
  19 + </el-select>
  20 + </el-form-item>
  21 +
  22 + <el-form-item :label="$t('finishRepair.repairType')" v-if="finishRepairInfo.repairObjType == '004'">
  23 + <el-select v-model="finishRepairInfo.maintenanceType" :placeholder="$t('finishRepair.selectRepairType')"
  24 + style="width:100%">
  25 + <template v-for="(item, index) in finishRepairInfo.maintenanceTypes">
  26 + <el-option :key="index" :label="item.name" :value="item.statusCd"
  27 + v-if="item.statusCd != '1003' && item.statusCd != '1004'">
  28 + </el-option>
  29 + </template>
  30 + </el-select>
  31 + </el-form-item>
  32 +
  33 + <el-form-item
  34 + v-if="finishRepairInfo.maintenanceType == '1001' || finishRepairInfo.maintenanceType == '1003'">
  35 + <el-button type="primary" @click="openChooseSingleResourceModel">
  36 + <i class="el-icon-plus"></i>{{ $t('finishRepair.selectGoods') }}
  37 + </el-button>
  38 + </el-form-item>
  39 +
  40 + <!-- 商品列表展示 -->
  41 + <div
  42 + v-if="(finishRepairInfo.maintenanceType == '1001' || finishRepairInfo.maintenanceType == '1003') && finishRepairInfo.choosedGoodsList.length > 0">
  43 + <el-form-item :label="$t('finishRepair.usedGoods')">
  44 + <el-table :data="finishRepairInfo.choosedGoodsList" border>
  45 + <el-table-column prop="rstName" :label="$t('finishRepair.category')" width="120"></el-table-column>
  46 + <el-table-column prop="resName" :label="$t('finishRepair.goods')" width="120"></el-table-column>
  47 + <el-table-column prop="price" :label="$t('finishRepair.price')" width="120"
  48 + v-if="finishRepairInfo.maintenanceType == '1001'">
  49 + <template slot-scope="scope">
  50 + <el-input-number v-model="scope.row.price"
  51 + :disabled="!scope.row.isCustom && scope.row.outHighPrice == scope.row.outLowPrice"
  52 + @change="updateTotalPrice" :min="scope.row.outLowPrice" :max="scope.row.outHighPrice">
  53 + </el-input-number>
  54 + <span v-if="!scope.row.isCustom && scope.row.outHighPrice != scope.row.outLowPrice">
  55 + ({{ scope.row.outLowPrice }} - {{ scope.row.outHighPrice }})
  56 + </span>
  57 + </template>
  58 + </el-table-column>
  59 + <el-table-column :label="$t('finishRepair.quantity')" width="150">
  60 + <template slot-scope="scope">
  61 + <el-input-number v-model="scope.row.useNumber" @change="updateTotalPrice" :min="1">
  62 + </el-input-number>
  63 + </template>
  64 + </el-table-column>
  65 + <el-table-column prop="miniUnitCodeName" :label="$t('finishRepair.unit')"
  66 + width="80"></el-table-column>
  67 + <el-table-column prop="specName" :label="$t('finishRepair.spec')" width="80"></el-table-column>
  68 + <el-table-column :label="$t('finishRepair.operation')" width="120">
  69 + <template slot-scope="scope">
  70 + <el-button type="danger" size="mini" @click="removeChoosedGoodsItem(scope.$index)">
  71 + <i class="el-icon-delete"></i>{{ $t('common.remove') }}
  72 + </el-button>
  73 + </template>
  74 + </el-table-column>
  75 + </el-table>
  76 + </el-form-item>
  77 + </div>
  78 +
  79 + <el-form-item :label="$t('finishRepair.totalAmount')" v-if="finishRepairInfo.maintenanceType == '1001'">
  80 + <el-input v-model="finishRepairInfo.totalPrice" disabled></el-input>
  81 + </el-form-item>
  82 +
  83 + <el-form-item :label="$t('finishRepair.paymentMethod')" v-if="finishRepairInfo.maintenanceType == '1001'">
  84 + <el-select v-model="finishRepairInfo.payType" :placeholder="$t('finishRepair.selectPaymentMethod')"
  85 + style="width:100%">
  86 + <el-option v-for="(item, index) in finishRepairInfo.payTypes" :key="index" :label="item.name"
  87 + :value="item.statusCd">
  88 + </el-option>
  89 + </el-select>
  90 + </el-form-item>
  91 +
  92 + <el-form-item :label="$t('finishRepair.suggestion')">
  93 + <el-input type="textarea" :rows="4" :placeholder="$t('finishRepair.inputSuggestion')"
  94 + v-model="finishRepairInfo.context">
  95 + </el-input>
  96 + </el-form-item>
  97 +
  98 + <el-form-item :label="$t('finishRepair.beforeRepairPhoto')">
  99 + <upload-image-url ref="beforeRepairUpload" @notifyUploadCoverImage="handleBeforeRepairImage">
  100 + </upload-image-url>
  101 + </el-form-item>
  102 +
  103 + <el-form-item :label="$t('finishRepair.afterRepairPhoto')">
  104 + <upload-image-url ref="afterRepairUpload" @notifyUploadCoverImage="handleAfterRepairImage">
  105 + </upload-image-url>
  106 + </el-form-item>
  107 +
  108 + <el-form-item>
  109 + <el-button type="primary" @click="submitFinishRepair">{{ $t('common.submit') }}</el-button>
  110 + <el-button @click="backToList">{{ $t('common.back') }}</el-button>
  111 + </el-form-item>
  112 + </el-form>
  113 + </div>
  114 + </el-col>
  115 + </el-row>
  116 + </el-card>
  117 +
  118 + <choose-single-resource ref="chooseSingleResource"></choose-single-resource>
  119 + </div>
  120 +</template>
  121 +
  122 +<script>
  123 +import { getDict } from '@/api/community/communityApi'
  124 +import { getCommunityId } from '@/api/community/communityApi'
  125 +import { repairFinish } from '@/api/work/finishRepairApi'
  126 +import UploadImageUrl from '@/components/upload/UploadImageUrl'
  127 +import ChooseSingleResource from '@/components/work/chooseSingleResource'
  128 +
  129 +export default {
  130 + name: 'FinishRepairList',
  131 + components: {
  132 + UploadImageUrl,
  133 + ChooseSingleResource
  134 + },
  135 + data() {
  136 + return {
  137 + finishRepairInfo: {
  138 + repairId: '',
  139 + repairType: '',
  140 + context: '',
  141 + feeFlag: '200',
  142 + repairObjType: '',
  143 + publicArea: '',
  144 + repairChannel: '',
  145 + maintenanceTypes: [],
  146 + maintenanceType: '',
  147 + totalPrice: 0,
  148 + choosedGoodsList: [],
  149 + beforeRepairPhotos: [],
  150 + afterRepairPhotos: [],
  151 + payTypes: [],
  152 + payType: ''
  153 + },
  154 + communityId: ''
  155 + }
  156 + },
  157 + created() {
  158 + this.communityId = getCommunityId()
  159 + this.initData()
  160 + },
  161 + methods: {
  162 + async initData() {
  163 + this.finishRepairInfo.repairType = this.$route.query.repairType
  164 + this.finishRepairInfo.repairId = this.$route.query.repairId
  165 + this.finishRepairInfo.repairObjType = this.$route.query.repairObjType
  166 + this.finishRepairInfo.publicArea = this.$route.query.publicArea
  167 + this.finishRepairInfo.repairChannel = this.$route.query.repairChannel
  168 +
  169 + try {
  170 + const maintenanceTypes = await getDict('r_repair_pool', 'maintenance_type')
  171 + this.finishRepairInfo.maintenanceTypes = maintenanceTypes
  172 +
  173 + const payTypes = await getDict('r_repair_pool', 'pay_type')
  174 + this.finishRepairInfo.payTypes = payTypes
  175 + } catch (error) {
  176 + console.error('获取字典数据失败:', error)
  177 + }
  178 + },
  179 + openChooseSingleResourceModel() {
  180 + this.$refs.chooseSingleResource.open({
  181 + maintenanceType: this.finishRepairInfo.maintenanceType
  182 + })
  183 + },
  184 + handleBeforeRepairImage(photos) {
  185 + this.finishRepairInfo.beforeRepairPhotos = photos.map(item => ({
  186 + photo: item
  187 + }))
  188 + },
  189 + handleAfterRepairImage(photos) {
  190 + this.finishRepairInfo.afterRepairPhotos = photos.map(item => ({
  191 + photo: item
  192 + }))
  193 + },
  194 + removeChoosedGoodsItem(index) {
  195 + this.finishRepairInfo.choosedGoodsList.splice(index, 1)
  196 + this.updateTotalPrice()
  197 + },
  198 + updateTotalPrice() {
  199 + let totalPrice = 0
  200 + this.finishRepairInfo.choosedGoodsList.forEach(item => {
  201 + totalPrice += item.price * item.useNumber
  202 + })
  203 + this.finishRepairInfo.totalPrice = totalPrice.toFixed(2)
  204 + },
  205 + validateForm() {
  206 + if (!this.finishRepairInfo.repairId) {
  207 + this.$message.error(this.$t('finishRepair.validate.repairIdRequired'))
  208 + return false
  209 + }
  210 + if (!this.finishRepairInfo.maintenanceType) {
  211 + this.$message.error(this.$t('finishRepair.validate.maintenanceTypeRequired'))
  212 + return false
  213 + }
  214 + if (!this.finishRepairInfo.context) {
  215 + this.$message.error(this.$t('finishRepair.validate.contextRequired'))
  216 + return false
  217 + }
  218 + if (this.finishRepairInfo.beforeRepairPhotos.length === 0) {
  219 + this.$message.error(this.$t('finishRepair.validate.beforePhotoRequired'))
  220 + return false
  221 + }
  222 + if (this.finishRepairInfo.afterRepairPhotos.length === 0) {
  223 + this.$message.error(this.$t('finishRepair.validate.afterPhotoRequired'))
  224 + return false
  225 + }
  226 + if ((this.finishRepairInfo.maintenanceType === '1001' || this.finishRepairInfo.maintenanceType === '1003') &&
  227 + this.finishRepairInfo.choosedGoodsList.length === 0) {
  228 + this.$message.error(this.$t('finishRepair.validate.goodsRequired'))
  229 + return false
  230 + }
  231 + if (this.finishRepairInfo.maintenanceType === '1001' && !this.finishRepairInfo.payType) {
  232 + this.$message.error(this.$t('finishRepair.validate.paymentMethodRequired'))
  233 + return false
  234 + }
  235 + return true
  236 + },
  237 + async submitFinishRepair() {
  238 + if (!this.validateForm()) return
  239 +
  240 + try {
  241 + const params = {
  242 + ...this.finishRepairInfo,
  243 + communityId: this.communityId
  244 + }
  245 + const res = await repairFinish(params)
  246 + if (res.code === 0) {
  247 + this.$message.success(this.$t('finishRepair.submitSuccess'))
  248 + this.backToList()
  249 + } else {
  250 + this.$message.error(res.msg)
  251 + }
  252 + } catch (error) {
  253 + this.$message.error(this.$t('finishRepair.submitError'))
  254 + }
  255 + },
  256 + backToList() {
  257 + this.$router.go(-1)
  258 + }
  259 + }
  260 +}
  261 +</script>
  262 +
  263 +<style scoped>
  264 +.finish-repair-container {
  265 + padding: 20px;
  266 +}
  267 +
  268 +.box-card {
  269 + margin-bottom: 20px;
  270 +}
  271 +
  272 +.form-wrapper {
  273 + padding: 20px;
  274 +}
  275 +</style>
0 \ No newline at end of file 276 \ No newline at end of file
src/views/work/ownerRepairManageList.vue
@@ -70,7 +70,8 @@ @@ -70,7 +70,8 @@
70 <template slot-scope="scope"> 70 <template slot-scope="scope">
71 <el-button 71 <el-button
72 v-if="hasPrivilege('502021012067300023') && (scope.row.state == '1000' || scope.row.state == '1200')" 72 v-if="hasPrivilege('502021012067300023') && (scope.row.state == '1000' || scope.row.state == '1200')"
73 - size="mini" type="primary" @click="_openEditOwnerRepairModel(scope.row)">{{ $t('common.edit') }}</el-button> 73 + size="mini" type="primary" @click="_openEditOwnerRepairModel(scope.row)">{{ $t('common.edit')
  74 + }}</el-button>
74 <el-button 75 <el-button
75 v-if="hasPrivilege('502021012051410024') && (scope.row.state == '1000' || scope.row.state == '1200')" 76 v-if="hasPrivilege('502021012051410024') && (scope.row.state == '1000' || scope.row.state == '1200')"
76 size="mini" type="danger" @click="_openDeleteOwnerRepairModel(scope.row)">{{ $t('common.delete') 77 size="mini" type="danger" @click="_openDeleteOwnerRepairModel(scope.row)">{{ $t('common.delete')
@@ -81,7 +82,7 @@ @@ -81,7 +82,7 @@
81 <!-- 分页 --> 82 <!-- 分页 -->
82 <div style="margin-top: 20px"> 83 <div style="margin-top: 20px">
83 <el-row> 84 <el-row>
84 - <el-col :span="18" class="text-left"> 85 + <el-col :span="18" class="text-left table-desc">
85 <div> 86 <div>
86 {{ $t('ownerRepairManage.tip1') }} 87 {{ $t('ownerRepairManage.tip1') }}
87 </div> 88 </div>
src/views/work/printRepairDetailLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + printRepairDetail: {
  4 + repairId: 'Repair ID:',
  5 + printTime: 'Print Time:',
  6 + repairInfo: 'Repair Information',
  7 + repairName: 'Repairer:',
  8 + tel: 'Contact Number:',
  9 + location: 'Location:',
  10 + context: 'Repair Content:',
  11 + maintenanceType: 'Repair Type:',
  12 + paidService: 'Paid Service',
  13 + freeService: 'Free Service',
  14 + repairMaterials: 'Repair Materials:',
  15 + repairFee: 'Cost Details:',
  16 + yuan: 'Yuan',
  17 + workflow: 'Work Order Flow',
  18 + serialNumber: 'No.',
  19 + handler: 'Handler',
  20 + status: 'Status',
  21 + processTime: 'Process Time',
  22 + timeConsuming: 'Time Consuming',
  23 + comment: 'Comment',
  24 + remark: 'Remark',
  25 + repairerSign: 'Repairer Signature',
  26 + customerSign: 'Customer Signature',
  27 + time: 'Time'
  28 + }
  29 + },
  30 + zh: {
  31 + printRepairDetail: {
  32 + repairId: '报修单号:',
  33 + printTime: '打印时间:',
  34 + repairInfo: '报修信息',
  35 + repairName: '报修人:',
  36 + tel: '联系电话:',
  37 + location: '位置:',
  38 + context: '报修内容:',
  39 + maintenanceType: '报修类型:',
  40 + paidService: '有偿服务',
  41 + freeService: '无偿服务',
  42 + repairMaterials: '报修用料:',
  43 + repairFee: '费用明细:',
  44 + yuan: '元',
  45 + workflow: '工单流转',
  46 + serialNumber: '序号',
  47 + handler: '处理人',
  48 + status: '状态',
  49 + processTime: '处理时间',
  50 + timeConsuming: '耗时',
  51 + comment: '意见',
  52 + remark: '备注',
  53 + repairerSign: '维修人员签字',
  54 + customerSign: '客户签字',
  55 + time: '时间'
  56 + }
  57 + }
  58 +}
0 \ No newline at end of file 59 \ No newline at end of file
src/views/work/printRepairDetailList.vue 0 → 100644
  1 +<template>
  2 + <div class="print-repair-detail-container">
  3 + <el-row :gutter="20" style="width:100%">
  4 + <el-col :span="8">
  5 + <span>{{ $t('printRepairDetail.repairId') }}</span>{{ printRepairDetailInfo.repairId }}
  6 + </el-col>
  7 + <el-col :span="8">
  8 + <span></span>
  9 + </el-col>
  10 + <el-col :span="8">
  11 + <span>{{ $t('printRepairDetail.printTime') }}</span>{{ nowTime }}
  12 + </el-col>
  13 + </el-row>
  14 +
  15 + <table border="1" class="margin-top" style="margin-bottom: 0;width:100%; border-collapse: collapse;">
  16 + <thead>
  17 + <tr>
  18 + <th colspan="6" style="text-align: center;">{{ $t('printRepairDetail.repairInfo') }}</th>
  19 + </tr>
  20 + <tr>
  21 + <th>{{ $t('printRepairDetail.repairName') }}</th>
  22 + <th>{{ $t('printRepairDetail.tel') }}</th>
  23 + <th>{{ $t('printRepairDetail.location') }}</th>
  24 + <th>{{ $t('printRepairDetail.context') }}</th>
  25 + <th v-if="printRepairDetailInfo.maintenanceType">{{ $t('printRepairDetail.maintenanceType') }}</th>
  26 + <th v-if="printRepairDetailInfo.maintenanceType === '1001'">{{ $t('printRepairDetail.repairMaterials') }}</th>
  27 + <th v-if="printRepairDetailInfo.maintenanceType === '1001'" colspan="3">{{ $t('printRepairDetail.repairFee') }}</th>
  28 + </tr>
  29 + </thead>
  30 + <tbody>
  31 + <tr>
  32 + <td>{{ printRepairDetailInfo.repairName }}</td>
  33 + <td>{{ printRepairDetailInfo.tel }}</td>
  34 + <td>{{ printRepairDetailInfo.location }}</td>
  35 + <td>{{ printRepairDetailInfo.context }}</td>
  36 + <td v-if="printRepairDetailInfo.maintenanceType">{{ printRepairDetailInfo.maintenanceType }}</td>
  37 + <td v-if="printRepairDetailInfo.maintenanceType === '1001'">{{ printRepairDetailInfo.repairMaterials }}</td>
  38 + <td v-if="printRepairDetailInfo.maintenanceType === '1001'" colspan="3">{{ printRepairDetailInfo.repairFee }}</td>
  39 + </tr>
  40 + </tbody>
  41 + </table>
  42 +
  43 + <table border="1" style="width:100%; border-collapse: collapse;">
  44 + <thead>
  45 + <tr>
  46 + <th colspan="6" style="text-align: center;">{{ $t('printRepairDetail.workflow') }}</th>
  47 + </tr>
  48 + <tr>
  49 + <th style="text-align: center;">{{ $t('printRepairDetail.serialNumber') }}</th>
  50 + <th style="text-align: center;">{{ $t('printRepairDetail.handler') }}</th>
  51 + <th style="text-align: center;">{{ $t('printRepairDetail.status') }}</th>
  52 + <th style="text-align: center;">{{ $t('printRepairDetail.processTime') }}</th>
  53 + <th style="text-align: center;">{{ $t('printRepairDetail.timeConsuming') }}</th>
  54 + <th style="text-align: center;">{{ $t('printRepairDetail.comment') }}</th>
  55 + </tr>
  56 + </thead>
  57 + <tbody>
  58 + <tr v-for="(item, index) in printRepairDetailInfo.repairUsers" :key="index">
  59 + <td style="text-align: center;">{{ index + 1 }}</td>
  60 + <td style="text-align: center;">{{ item.staffName }}</td>
  61 + <td style="text-align: center;">{{ item.stateName }}</td>
  62 + <td style="text-align: center;">{{ item.startTime }}</td>
  63 + <td style="text-align: center;">{{ item.duration }}</td>
  64 + <td style="text-align: center;">{{ item.context }}</td>
  65 + </tr>
  66 + <tr>
  67 + <td colspan="6">{{ printRepairDetailInfo.description }}</td>
  68 + </tr>
  69 + <tr>
  70 + <td colspan="2" style="height:60px; text-align: center;">{{ $t('printRepairDetail.repairerSign') }}</td>
  71 + <td colspan="2" style="height:60px; text-align: center;">{{ $t('printRepairDetail.customerSign') }}</td>
  72 + </tr>
  73 + </tbody>
  74 + </table>
  75 +
  76 + <div id="print-btn" style="margin-top:20px">
  77 + <el-button type="primary" class="float-right" @click="_printPurchaseApplyDiv">
  78 + {{ $t('common.print') }}
  79 + </el-button>
  80 + <el-button type="warning" class="float-right" style="margin-right:20px" @click="_closePage">
  81 + {{ $t('common.cancel') }}
  82 + </el-button>
  83 + </div>
  84 + </div>
  85 +</template>
  86 +
  87 +<script>
  88 +import { getCommunityId } from '@/api/community/communityApi'
  89 +import { listOwnerRepairs, listRepairStaffs } from '@/api/work/printRepairDetailApi'
  90 +
  91 +export default {
  92 + name: 'PrintRepairDetailList',
  93 + data() {
  94 + return {
  95 + printRepairDetailInfo: {
  96 + repairId: '',
  97 + repairTypeName: '',
  98 + appointmentTime: '',
  99 + repairName: '',
  100 + tel: '',
  101 + repairObjName: '',
  102 + context: '',
  103 + repairUsers: [],
  104 + maintenanceType: '',
  105 + repairMaterials: '',
  106 + repairFee: '',
  107 + description: ''
  108 + },
  109 + printFlag: '0',
  110 + nowTime: '',
  111 + communityId: ''
  112 + }
  113 + },
  114 + created() {
  115 + this.communityId = getCommunityId()
  116 + this._initPrintRepairDetailDateInfo()
  117 + const myDate = new Date()
  118 + this.nowTime = myDate.toLocaleDateString()
  119 + },
  120 + methods: {
  121 + _initPrintRepairDetailDateInfo() {
  122 + const _repairId = this.$route.query.repairId
  123 + const _repairType = this.$route.query.repairType
  124 + const param = {
  125 + page: 1,
  126 + row: 1,
  127 + repairId: _repairId,
  128 + communityId: this.communityId,
  129 + repairType: _repairType
  130 + }
  131 +
  132 + listOwnerRepairs(param)
  133 + .then(response => {
  134 + const _repairDetailInfo = response.data[0]
  135 + Object.assign(this.printRepairDetailInfo, _repairDetailInfo)
  136 + this._loadRepairUser()
  137 + })
  138 + .catch(error => {
  139 + console.error('请求失败处理:', error)
  140 + })
  141 + },
  142 + _loadRepairUser() {
  143 + const param = {
  144 + page: 1,
  145 + row: 100,
  146 + communityId: this.communityId,
  147 + repairId: this.printRepairDetailInfo.repairId
  148 + }
  149 +
  150 + listRepairStaffs(param)
  151 + .then(response => {
  152 + this.printRepairDetailInfo.repairUsers = response.data
  153 + })
  154 + .catch(error => {
  155 + console.error('请求失败处理:', error)
  156 + })
  157 + },
  158 + _printPurchaseApplyDiv() {
  159 + this.printFlag = '1'
  160 + document.getElementById('print-btn').style.display = 'none'
  161 + window.print()
  162 + window.opener = null
  163 + window.close()
  164 + },
  165 + _closePage() {
  166 + window.opener = null
  167 + window.close()
  168 + }
  169 + }
  170 +}
  171 +</script>
  172 +
  173 +<style lang="scss" scoped>
  174 +.print-repair-detail-container {
  175 + padding: 20px;
  176 +
  177 + .margin-top {
  178 + margin-top: 20px;
  179 + }
  180 +
  181 + .float-right {
  182 + float: right;
  183 + }
  184 +
  185 + table {
  186 + width: 100%;
  187 + border: 1px solid #ebeef5;
  188 + th, td {
  189 + padding: 12px 0;
  190 + border: 1px solid #ebeef5;
  191 + }
  192 + }
  193 +}
  194 +</style>
0 \ No newline at end of file 195 \ No newline at end of file
src/views/work/repairDetailLang.js
@@ -33,7 +33,9 @@ export const messages = { @@ -33,7 +33,9 @@ export const messages = {
33 paidService: 'Paid Service', 33 paidService: 'Paid Service',
34 freeService: 'Free Service', 34 freeService: 'Free Service',
35 needMaterials: 'Need Materials', 35 needMaterials: 'Need Materials',
36 - noMaterials: 'No Materials' 36 + noMaterials: 'No Materials',
  37 + beforeRepairPhotos: 'Before Repair Photos',
  38 + afterRepairPhotos: 'After Repair Photos'
37 }, 39 },
38 repairDetailResource: { 40 repairDetailResource: {
39 itemCode: 'Item Code', 41 itemCode: 'Item Code',
@@ -103,7 +105,9 @@ export const messages = { @@ -103,7 +105,9 @@ export const messages = {
103 paidService: '有偿服务', 105 paidService: '有偿服务',
104 freeService: '无偿服务', 106 freeService: '无偿服务',
105 needMaterials: '需要用料', 107 needMaterials: '需要用料',
106 - noMaterials: '无需用料' 108 + noMaterials: '无需用料',
  109 + beforeRepairPhotos: '维修前照片',
  110 + afterRepairPhotos: '维修后照片'
107 }, 111 },
108 repairDetailResource: { 112 repairDetailResource: {
109 itemCode: '物品资源编号', 113 itemCode: '物品资源编号',
src/views/work/repairDetailList.vue
1 <template> 1 <template>
2 - <el-card class="repair-detail-container"> 2 + <div class="repair-detail-container padding">
  3 + <el-card class="">
3 <div class="flex justify-between"> 4 <div class="flex justify-between">
4 <div class="text-title">{{ $t('repairDetail.title') }}</div> 5 <div class="text-title">{{ $t('repairDetail.title') }}</div>
5 <div> 6 <div>
@@ -182,6 +183,7 @@ @@ -182,6 +183,7 @@
182 <view-image ref="viewImage"></view-image> 183 <view-image ref="viewImage"></view-image>
183 <reply-repair-appraise ref="replyAppraise"></reply-repair-appraise> 184 <reply-repair-appraise ref="replyAppraise"></reply-repair-appraise>
184 </el-card> 185 </el-card>
  186 +</div>
185 </template> 187 </template>
186 188
187 <script> 189 <script>
@@ -256,7 +258,7 @@ export default { @@ -256,7 +258,7 @@ export default {
256 this.$router.go(-1) 258 this.$router.go(-1)
257 }, 259 },
258 printRepairDetail() { 260 printRepairDetail() {
259 - window.open(`/print.html#/pages/property/printRepairDetail?repairId=${this.repairDetailInfo.repairId}&repairType=${this.repairDetailInfo.repairType}`) 261 + window.open(`/pages/property/printRepairDetail?repairId=${this.repairDetailInfo.repairId}&repairType=${this.repairDetailInfo.repairType}`)
260 }, 262 },
261 changeTab(tab) { 263 changeTab(tab) {
262 this.currentTab = tab 264 this.currentTab = tab
src/views/work/repairDispatchManageList.vue
@@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
98 {{ $t('repairDispatchManage.complete') }} 98 {{ $t('repairDispatchManage.complete') }}
99 </el-button> 99 </el-button>
100 <el-button 100 <el-button
101 - v-if="$store.getters.hasPrivilege('502021040151320003') && scope.row.state == '1800' && scope.row.returnVisitFlag == '003' && scope.row.state != '2001'" 101 + v-if="hasPrivilege('502021040151320003') && scope.row.state == '1800' && scope.row.returnVisitFlag == '003' && scope.row.state != '2001'"
102 size="mini" @click="_openAppraiseRepair(scope.row)"> 102 size="mini" @click="_openAppraiseRepair(scope.row)">
103 {{ $t('repairDispatchManage.returnVisit') }} 103 {{ $t('repairDispatchManage.returnVisit') }}
104 </el-button> 104 </el-button>
@@ -245,7 +245,7 @@ export default { @@ -245,7 +245,7 @@ export default {
245 }, 245 },
246 _openFinishRepair(row) { 246 _openFinishRepair(row) {
247 this.$router.push({ 247 this.$router.push({
248 - path: '/property/finishRepair', 248 + path: '/views/work/finishRepair',
249 query: { 249 query: {
250 repairType: row.repairType, 250 repairType: row.repairType,
251 repairId: row.repairId, 251 repairId: row.repairId,
@@ -257,7 +257,7 @@ export default { @@ -257,7 +257,7 @@ export default {
257 }, 257 },
258 _openDispatchRepairDetail(row) { 258 _openDispatchRepairDetail(row) {
259 this.$router.push({ 259 this.$router.push({
260 - path: '/property/ownerRepairDetail', 260 + path: '/views/work/repairDetail',
261 query: { repairId: row.repairId } 261 query: { repairId: row.repairId }
262 }) 262 })
263 }, 263 },
src/views/work/repairPoolManageList.vue
1 <template> 1 <template>
2 - <div class="app-container"> 2 + <div class="app-container padding">
3 <el-row :gutter="20"> 3 <el-row :gutter="20">
4 <!-- 左侧状态栏 --> 4 <!-- 左侧状态栏 -->
5 <el-col :span="3"> 5 <el-col :span="3">
@@ -82,7 +82,7 @@ @@ -82,7 +82,7 @@
82 :placeholder="$t('repairPoolManage.endTime')" value-format="yyyy-MM-dd HH:mm:ss" /> 82 :placeholder="$t('repairPoolManage.endTime')" value-format="yyyy-MM-dd HH:mm:ss" />
83 </el-form-item> 83 </el-form-item>
84 </el-col> 84 </el-col>
85 - <el-col :span="4" > 85 + <el-col :span="4">
86 <el-button type="primary" @click="queryRepairPool">{{ $t('repairPoolManage.search') }}</el-button> 86 <el-button type="primary" @click="queryRepairPool">{{ $t('repairPoolManage.search') }}</el-button>
87 <el-button @click="resetRepairPool">{{ $t('repairPoolManage.reset') }}</el-button> 87 <el-button @click="resetRepairPool">{{ $t('repairPoolManage.reset') }}</el-button>
88 </el-col> 88 </el-col>
@@ -192,7 +192,7 @@ import DispatchRepair from &#39;@/components/work/dispatchRepair&#39; @@ -192,7 +192,7 @@ import DispatchRepair from &#39;@/components/work/dispatchRepair&#39;
192 import EndRepair from '@/components/work/endRepair' 192 import EndRepair from '@/components/work/endRepair'
193 import EditOwnerRepair from '@/components/work/editOwnerRepair' 193 import EditOwnerRepair from '@/components/work/editOwnerRepair'
194 import DeleteOwnerRepair from '@/components/work/deleteOwnerRepair' 194 import DeleteOwnerRepair from '@/components/work/deleteOwnerRepair'
195 -import {listRepairSettings} from '@/api/work/ownerRepairManageApi' 195 +import { listRepairSettings } from '@/api/work/ownerRepairManageApi'
196 196
197 export default { 197 export default {
198 name: 'RepairPoolManage', 198 name: 'RepairPoolManage',
src/views/work/repairReturnVisitLang.js
@@ -18,7 +18,11 @@ export const messages = { @@ -18,7 +18,11 @@ export const messages = {
18 telPlaceholder: 'Please enter repair phone', 18 telPlaceholder: 'Please enter repair phone',
19 statePlaceholder: 'Please select visit status', 19 statePlaceholder: 'Please select visit status',
20 waiting: 'Pending Visit', 20 waiting: 'Pending Visit',
21 - finish: 'Visited' 21 + finish: 'Visited',
  22 + satisfaction: 'Satisfaction',
  23 + visitContent: 'Visit Content',
  24 + satisfied: 'Satisfied',
  25 + unsatisfied: 'Unsatisfied'
22 } 26 }
23 }, 27 },
24 zh: { 28 zh: {
@@ -40,7 +44,11 @@ export const messages = { @@ -40,7 +44,11 @@ export const messages = {
40 telPlaceholder: '请输入报修电话', 44 telPlaceholder: '请输入报修电话',
41 statePlaceholder: '请选择回访状态', 45 statePlaceholder: '请选择回访状态',
42 waiting: '待回访', 46 waiting: '待回访',
43 - finish: '已回访' 47 + finish: '已回访',
  48 + satisfaction: '满意度',
  49 + visitContent: '回访内容',
  50 + satisfied: '满意',
  51 + unsatisfied: '不满意'
44 } 52 }
45 } 53 }
46 } 54 }
47 \ No newline at end of file 55 \ No newline at end of file
src/views/work/repairReturnVisitList.vue
@@ -24,7 +24,8 @@ @@ -24,7 +24,8 @@
24 :placeholder="$t('repairReturnVisit.repairNamePlaceholder')" clearable /> 24 :placeholder="$t('repairReturnVisit.repairNamePlaceholder')" clearable />
25 </el-col> 25 </el-col>
26 <el-col :sm="6" :md="4"> 26 <el-col :sm="6" :md="4">
27 - <el-input v-model.trim="searchForm.tel" :placeholder="$t('repairReturnVisit.telPlaceholder')" clearable /> 27 + <el-input v-model.trim="searchForm.tel" :placeholder="$t('repairReturnVisit.telPlaceholder')"
  28 + clearable />
28 </el-col> 29 </el-col>
29 <el-col :sm="6" :md="4"> 30 <el-col :sm="6" :md="4">
30 <el-select v-model="searchForm.state" :placeholder="$t('repairReturnVisit.statePlaceholder')" clearable 31 <el-select v-model="searchForm.state" :placeholder="$t('repairReturnVisit.statePlaceholder')" clearable
@@ -119,7 +120,7 @@ export default { @@ -119,7 +120,7 @@ export default {
119 this.states = [{ 120 this.states = [{
120 value: 'waiting', 121 value: 'waiting',
121 label: '待回访' 122 label: '待回访'
122 - },{ 123 + }, {
123 value: 'finish', 124 value: 'finish',
124 label: '已回访' 125 label: '已回访'
125 }] 126 }]
@@ -179,7 +180,7 @@ export default { @@ -179,7 +180,7 @@ export default {
179 }, 180 },
180 openRepairDetail(repairPool) { 181 openRepairDetail(repairPool) {
181 this.$router.push({ 182 this.$router.push({
182 - path: '/pages/property/ownerRepairDetail', 183 + path: '/views/work/repairDetail',
183 query: { repairId: repairPool.repairId } 184 query: { repairId: repairPool.repairId }
184 }) 185 })
185 }, 186 },
src/views/work/repairTypeUserList.vue
@@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
14 </el-button> 14 </el-button>
15 </div> 15 </div>
16 </div> 16 </div>
17 - <div class="ibox-content"> 17 + <div >
18 <el-table :data="repairTypeUserManageInfo.repairTypeUsers" style="width: 100%" border stripe> 18 <el-table :data="repairTypeUserManageInfo.repairTypeUsers" style="width: 100%" border stripe>
19 <el-table-column prop="staffId" :label="$t('repairTypeUser.repairMasterId')" align="center" /> 19 <el-table-column prop="staffId" :label="$t('repairTypeUser.repairMasterId')" align="center" />
20 <el-table-column prop="staffName" :label="$t('repairTypeUser.masterName')" align="center" /> 20 <el-table-column prop="staffName" :label="$t('repairTypeUser.masterName')" align="center" />
@@ -43,7 +43,7 @@ @@ -43,7 +43,7 @@
43 </el-col> 43 </el-col>
44 </el-row> 44 </el-row>
45 45
46 - <SelectStaff ref="selectStaff" @selectStaff="handleSelectStaff"/> 46 + <SelectStaff ref="selectStaff" @selectStaff="handleSelectStaff" />
47 <DeleteRepairTypeUser ref="deleteRepairTypeUser" @success="handleDeleteSuccess" /> 47 <DeleteRepairTypeUser ref="deleteRepairTypeUser" @success="handleDeleteSuccess" />
48 <EditRepairTypeUser ref="editRepairTypeUser" @success="handleEditSuccess" /> 48 <EditRepairTypeUser ref="editRepairTypeUser" @success="handleEditSuccess" />
49 </div> 49 </div>