Commit 6f9168702157da397bf7501dc54dba360a403b9c

Authored by wuxw
1 parent 0c52f32a

优化甘肃客户反馈bug

src/api/fee/listApplyRoomDiscountRecordDetailsApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +/**
  4 + * 查询房间折扣记录详情
  5 + * @param {Object} params 查询参数
  6 + * @param {string} params.ardrId 折扣记录ID
  7 + * @param {string} params.roomName 房间名称
  8 + * @param {string} params.state 状态
  9 + * @param {string} params.roomId 房间ID
  10 + * @param {string} params.communityId 小区ID
  11 + * @param {number} params.page 当前页码
  12 + * @param {number} params.row 每页条数
  13 + * @returns {Promise} 返回Promise对象
  14 + */
  15 +export function queryApplyRoomDiscountRecordDetail(params) {
  16 + return new Promise((resolve, reject) => {
  17 + request({
  18 + url: '/applyRoomDiscountRecord/queryApplyRoomDiscountRecordDetail',
  19 + method: 'get',
  20 + params
  21 + }).then(response => {
  22 + const res = response.data
  23 + resolve({
  24 + data: res.data,
  25 + total: res.total
  26 + })
  27 + }).catch(error => {
  28 + reject(error)
  29 + })
  30 + })
  31 +}
0 32 \ No newline at end of file
... ...
src/components/fee/applyRoomDiscountRecord.vue
1 1 <template>
2 2 <el-dialog :title="$t('applyRoomDiscountRecord.title')" :visible.sync="visible" width="60%"
3 3 :before-close="handleClose">
4   - <el-form :model="form" label-width="120px" label-position="left">
  4 + <el-form :model="form" label-width="120px" label-position="left" class="text-left">
5 5 <el-form-item :label="$t('applyRoomDiscountRecord.room')">
6 6 <el-input v-model="form.roomName" disabled></el-input>
7 7 </el-form-item>
... ... @@ -20,7 +20,7 @@
20 20 :placeholder="$t('applyRoomDiscountRecord.remarkPlaceholder')"></el-input>
21 21 </el-form-item>
22 22 <el-form-item :label="$t('applyRoomDiscountRecord.uploadImages')">
23   - <upload-image-url ref="uploadImageUrl" />
  23 + <upload-image-url ref="uploadImageUrl" @notifyUploadCoverImage="handleNotifyUploadCoverImage" />
24 24 </el-form-item>
25 25 <el-form-item :label="$t('applyRoomDiscountRecord.uploadVideo')">
26 26 <upload-vedio ref="uploadVedio" />
... ... @@ -105,10 +105,7 @@ export default {
105 105 this.visible = false
106 106 },
107 107 validateForm() {
108   - if (this.form.isTrue === null) {
109   - this.$message.error(this.$t('applyRoomDiscountRecord.violationRequired'))
110   - return false
111   - }
  108 +
112 109 if (!this.form.remark) {
113 110 this.$message.error(this.$t('applyRoomDiscountRecord.remarkRequired'))
114 111 return false
... ... @@ -119,7 +116,6 @@ export default {
119 116 if (!this.validateForm()) return
120 117  
121 118 try {
122   - this.form.photos = this.$refs.uploadImageUrl.getPhotos()
123 119 this.form.videoName = this.$refs.uploadVedio.getVideoName()
124 120  
125 121 const res = await addApplyRoomDiscountRecord(this.form)
... ... @@ -131,8 +127,12 @@ export default {
131 127 this.$message.error(res.msg)
132 128 }
133 129 } catch (error) {
  130 + console.log(error)
134 131 this.$message.error(this.$t('common.saveFailed'))
135 132 }
  133 + },
  134 + handleNotifyUploadCoverImage(photosUrl) {
  135 + this.form.photos = photosUrl
136 136 }
137 137 }
138 138 }
... ...
src/components/fee/batchFeeCycle.vue
1 1 <template>
2   - <el-dialog
3   - :title="batchFeeCycleInfo.fee.feeName"
4   - :visible.sync="visible"
5   - width="500px"
6   - :before-close="handleClose"
7   - >
  2 + <el-dialog :title="batchFeeCycleInfo.feeName" :visible.sync="visible" width="500px" :before-close="handleClose">
8 3 <el-form label-width="120px">
9 4 <el-form-item :label="$t('batchFeeCycle.paymentCycle')">
10   - <el-select
11   - v-model="batchFeeCycleInfo.tempCycle"
12   - @change="changeTempCycle"
13   - style="width:100%"
14   - :placeholder="$t('batchFeeCycle.selectCycleTip')"
15   - >
16   - <el-option
17   - value="-100"
18   - :label="$t('batchFeeCycle.default')"
19   - ></el-option>
20   - <el-option
21   - value="-102"
22   - :label="$t('batchFeeCycle.customCycle')"
23   - ></el-option>
24   - <el-option
25   - value="-101"
26   - :label="$t('batchFeeCycle.customAmount')"
27   - ></el-option>
28   - <el-option
29   - value="-103"
30   - :label="$t('batchFeeCycle.customEndTime')"
31   - ></el-option>
  5 + <el-select v-model="batchFeeCycleInfo.tempCycle" @change="changeTempCycle" style="width:100%"
  6 + :placeholder="$t('batchFeeCycle.selectCycleTip')">
  7 + <el-option value="-100" :label="$t('batchFeeCycle.default')"></el-option>
  8 + <el-option value="-102" :label="$t('batchFeeCycle.customCycle')"></el-option>
  9 + <el-option value="-101" :label="$t('batchFeeCycle.customAmount')"></el-option>
  10 + <el-option value="-103" :label="$t('batchFeeCycle.customEndTime')"></el-option>
32 11 </el-select>
33 12 </el-form-item>
34 13  
35   - <el-form-item
36   - v-if="batchFeeCycleInfo.tempCycle === '-101'"
37   - :label="$t('batchFeeCycle.customAmount')"
38   - >
39   - <el-input
40   - type="number"
41   - v-model="batchFeeCycleInfo.receivedAmount"
42   - :placeholder="$t('batchFeeCycle.enterCustomAmount')"
43   - ></el-input>
  14 + <el-form-item v-if="batchFeeCycleInfo.tempCycle === '-101'" :label="$t('batchFeeCycle.customAmount')">
  15 + <el-input type="number" v-model="batchFeeCycleInfo.receivedAmount"
  16 + :placeholder="$t('batchFeeCycle.enterCustomAmount')"></el-input>
44 17 </el-form-item>
45 18  
46   - <el-form-item
47   - v-if="batchFeeCycleInfo.tempCycle === '-102'"
48   - :label="$t('batchFeeCycle.actualCycle')"
49   - >
50   - <el-input
51   - type="number"
52   - v-model="batchFeeCycleInfo.cycles"
53   - :placeholder="$t('batchFeeCycle.enterActualCycle')"
54   - ></el-input>
  19 + <el-form-item v-if="batchFeeCycleInfo.tempCycle === '-102'" :label="$t('batchFeeCycle.actualCycle')">
  20 + <el-input type="number" v-model="batchFeeCycleInfo.cycles"
  21 + :placeholder="$t('batchFeeCycle.enterActualCycle')"></el-input>
55 22 </el-form-item>
56 23  
57   - <el-form-item
58   - v-if="batchFeeCycleInfo.tempCycle === '-103'"
59   - :label="$t('batchFeeCycle.endTime')"
60   - >
61   - <el-date-picker
62   - v-model="batchFeeCycleInfo.custEndTime"
63   - type="date"
64   - style="width:100%"
65   - :placeholder="$t('batchFeeCycle.selectEndTime')"
66   - value-format="yyyy-MM-dd"
67   - ></el-date-picker>
  24 + <el-form-item v-if="batchFeeCycleInfo.tempCycle === '-103'" :label="$t('batchFeeCycle.endTime')">
  25 + <el-date-picker v-model="batchFeeCycleInfo.custEndTime" type="date" style="width:100%"
  26 + :placeholder="$t('batchFeeCycle.selectEndTime')" value-format="yyyy-MM-dd"></el-date-picker>
68 27 </el-form-item>
69 28 </el-form>
70 29  
... ... @@ -92,12 +51,7 @@ export default {
92 51 },
93 52 methods: {
94 53 open(fee) {
95   - this.batchFeeCycleInfo = {
96   - cycles: fee.cycles,
97   - tempCycle: fee.tempCycle,
98   - receivedAmount: fee.receivedAmount,
99   - fee: { ...fee }
100   - }
  54 + this.batchFeeCycleInfo = fee
101 55 this.visible = true
102 56 },
103 57  
... ... @@ -113,15 +67,8 @@ export default {
113 67 },
114 68  
115 69 _doSubmitFeeCycle() {
116   - const updatedFee = {
117   - ...this.batchFeeCycleInfo.fee,
118   - tempCycle: this.batchFeeCycleInfo.tempCycle,
119   - cycles: this.batchFeeCycleInfo.cycles,
120   - custEndTime: this.batchFeeCycleInfo.custEndTime,
121   - receivedAmount: this.batchFeeCycleInfo.receivedAmount
122   - }
123 70  
124   - this.$emit('changeMonth', updatedFee)
  71 + this.$emit('changeMonth', this.batchFeeCycleInfo)
125 72 this.handleClose()
126 73 }
127 74 }
... ...
src/components/fee/simplifyFeeReceipt.vue
1 1 <template>
2 2 <div>
3   - <el-row class="margin-top-lg">
4   - <el-col :span="4" class="padding-right-xs padding-left-xl">
5   - <el-select v-model="simplifyFeeReceiptInfo.objType" size="small" @change="_changeSimplifyFeeReceiptFeeTypeCd"
6   - :placeholder="$t('simplifyFeeReceipt.selectFeeType')">
7   - <el-option v-for="(item, index) in simplifyFeeReceiptInfo.objTypes" :key="index" :label="item.name"
8   - :value="item.statusCd"></el-option>
9   - </el-select>
10   - </el-col>
11   - <el-col :span="4" class="padding-right-xs padding-left-xl" v-if="simplifyFeeReceiptInfo.objType == '6666'">
12   - <el-select v-model="simplifyFeeReceiptInfo.carId" size="small" @change="changeSimplifyFeeReceiptCar"
13   - :placeholder="$t('simplifyFeeReceipt.selectCar')">
14   - <el-option v-for="(item, index) in simplifyFeeReceiptInfo.ownerCars" :key="index" :label="item.carNum"
15   - :value="item.carId"></el-option>
16   - </el-select>
17   - </el-col>
18   - <el-col :span="4" class="padding-right-xs padding-left-xl" v-else-if="simplifyFeeReceiptInfo.objType == '7777'">
19   - <el-select v-model="simplifyFeeReceiptInfo.contractId" size="small" @change="changeSimplifyFeeReceiptCar"
20   - :placeholder="$t('simplifyFeeReceipt.selectContract')">
21   - <el-option v-for="(item, index) in simplifyFeeReceiptInfo.ownerContracts" :key="index"
22   - :label="item.contractCode" :value="item.contractId"></el-option>
23   - </el-select>
24   - </el-col>
25   - <el-col :span="4" class="padding-right-xs padding-left-xl" v-if="simplifyFeeReceiptInfo.objType != '7777'">
26   - <el-select v-model="simplifyFeeReceiptInfo.ownerFlag" size="small" @change="_queryFeeReceiptMethod">
27   - <el-option
28   - :label="$t('simplifyFeeReceipt.current') + (simplifyFeeReceiptInfo.objType == '6666' ? $t('simplifyFeeReceipt.car') : $t('simplifyFeeReceipt.room'))"
29   - value="F"></el-option>
30   - <el-option
31   - :label="$t('simplifyFeeReceipt.all') + (simplifyFeeReceiptInfo.objType == '6666' ? $t('simplifyFeeReceipt.car') : $t('simplifyFeeReceipt.room'))"
32   - value="T"></el-option>
33   - </el-select>
34   - </el-col>
35   - <el-col :span="4" class="padding-right-xs padding-left-xl">
36   - <el-input v-model="simplifyFeeReceiptInfo.receiptCode" size="small"
37   - :placeholder="$t('simplifyFeeReceipt.receiptCode')"></el-input>
38   - </el-col>
39   - <el-col :span="4" class="padding-right-xs padding-left-xl">
40   - <el-button type="primary" size="small" @click="_queryFeeReceiptMethod">
41   - {{ $t('simplifyFeeReceipt.query') }}
42   - </el-button>
43   - </el-col>
44   - <el-col :span="8" class="text-right padding-right-lg">
  3 + <div class="margin-top-lg flex justify-between">
  4 + <div class="flex justify-start">
  5 + <div :span="3" class="padding-right-xs padding-left-xl">
  6 + <el-select v-model="simplifyFeeReceiptInfo.objType" size="small" @change="_changeSimplifyFeeReceiptFeeTypeCd"
  7 + :placeholder="$t('simplifyFeeReceipt.selectFeeType')">
  8 + <el-option v-for="(item, index) in simplifyFeeReceiptInfo.objTypes" :key="index" :label="item.name"
  9 + :value="item.statusCd"></el-option>
  10 + </el-select>
  11 + </div>
  12 + <div :span="3" class="padding-right-xs padding-left-xl" v-if="simplifyFeeReceiptInfo.objType == '6666'">
  13 + <el-select v-model="simplifyFeeReceiptInfo.carId" size="small" @change="changeSimplifyFeeReceiptCar"
  14 + :placeholder="$t('simplifyFeeReceipt.selectCar')">
  15 + <el-option v-for="(item, index) in simplifyFeeReceiptInfo.ownerCars" :key="index" :label="item.carNum"
  16 + :value="item.carId"></el-option>
  17 + </el-select>
  18 + </div>
  19 + <div :span="3" class="padding-right-xs padding-left-xl" v-else-if="simplifyFeeReceiptInfo.objType == '7777'">
  20 + <el-select v-model="simplifyFeeReceiptInfo.contractId" size="small" @change="changeSimplifyFeeReceiptCar"
  21 + :placeholder="$t('simplifyFeeReceipt.selectContract')">
  22 + <el-option v-for="(item, index) in simplifyFeeReceiptInfo.ownerContracts" :key="index"
  23 + :label="item.contractCode" :value="item.contractId"></el-option>
  24 + </el-select>
  25 + </div>
  26 + <div :span="3" class="padding-right-xs padding-left-xl" v-if="simplifyFeeReceiptInfo.objType != '7777'">
  27 + <el-select v-model="simplifyFeeReceiptInfo.ownerFlag" size="small" @change="_queryFeeReceiptMethod">
  28 + <el-option
  29 + :label="$t('simplifyFeeReceipt.current') + (simplifyFeeReceiptInfo.objType == '6666' ? $t('simplifyFeeReceipt.car') : $t('simplifyFeeReceipt.room'))"
  30 + value="F"></el-option>
  31 + <el-option
  32 + :label="$t('simplifyFeeReceipt.all') + (simplifyFeeReceiptInfo.objType == '6666' ? $t('simplifyFeeReceipt.car') : $t('simplifyFeeReceipt.room'))"
  33 + value="T"></el-option>
  34 + </el-select>
  35 + </div>
  36 + <div :span="3" class="padding-right-xs padding-left-xl">
  37 + <el-input v-model="simplifyFeeReceiptInfo.receiptCode" size="small"
  38 + :placeholder="$t('simplifyFeeReceipt.receiptCode')"></el-input>
  39 + </div>
  40 + <div :span="2" class="padding-right-xs padding-left-xl">
  41 + <el-button type="primary" size="small" @click="_queryFeeReceiptMethod">
  42 + {{ $t('simplifyFeeReceipt.query') }}
  43 + </el-button>
  44 + </div>
  45 + </div>
  46 + <div :span="8" class="text-right padding-right-lg">
45 47 <el-button type="primary" size="small" @click="_printFeeReceipt('OFF')">
46 48 {{ $t('simplifyFeeReceipt.print') }}
47 49 </el-button>
... ... @@ -54,11 +56,11 @@
54 56 <el-button type="primary" size="small" @click="_printApplyFeeReceipt">
55 57 {{ $t('simplifyFeeReceipt.apply') }}
56 58 </el-button>
57   - </el-col>
58   - </el-row>
  59 + </div>
  60 + </div>
59 61 <div class="margin-top">
60 62 <el-table :data="simplifyFeeReceiptInfo.feeReceipts" @selection-change="handleSelectionChange" border stripe>
61   - <el-table-column type="selection" width="55" align="center" ></el-table-column>
  63 + <el-table-column type="selection" width="55" align="center"></el-table-column>
62 64 <el-table-column prop="receiptCode" :label="$t('simplifyFeeReceipt.receiptCode')"
63 65 align="center"></el-table-column>
64 66 <el-table-column :label="$t('simplifyFeeReceipt.feeType')" align="center">
... ... @@ -143,12 +145,14 @@ export default {
143 145 }
144 146 },
145 147 created() {
146   - this._loadDictData()
147 148 },
148 149 methods: {
149 150 handleSwitch(param) {
150 151 if (param.roomId === '') return
  152 +
151 153 this.clearSimplifyFeeReceiptInfo()
  154 + this._loadDictData()
  155 +
152 156 this._listFeePrintPages()
153 157 Object.assign(this.simplifyFeeReceiptInfo, param)
154 158 this.simplifyFeeReceiptInfo.objId = param.roomId
... ...
src/components/org/ChooseOrgTree.vue
... ... @@ -52,7 +52,7 @@ export default {
52 52 const { data } = await listOrgTree(params)
53 53  
54 54 // 确保数据是数组格式
55   - let treeData = data
  55 + let treeData = [data]
56 56  
57 57 // 如果返回的是对象而不是数组,尝试提取数组
58 58 if (Array.isArray(treeData)) {
... ...
src/components/room/selectRooms.vue
... ... @@ -110,6 +110,10 @@ export default {
110 110 }
111 111 const res = await queryRooms(params)
112 112 this.rooms = res.rooms
  113 + this.rooms.forEach(item => {
  114 + this.roomIds.push(item)
  115 + });
  116 + this.handleRoomSelect()
113 117 } catch (error) {
114 118 this.$message.error(this.$t('selectRoom.loadRoomError'))
115 119 }
... ...
src/components/simplify/simplifyCarFee.vue
1 1 <template>
2 2 <div>
3   - <el-row class="margin-top">
4   - <el-col :span="4">
  3 + <div class="margin-top flex justify-between">
  4 + <div >
5 5 <el-select v-model="simplifyCarFeeInfo.carId" @change="changeSimplifyCar">
6 6 <el-option
7 7 v-for="(item,index) in simplifyCarFeeInfo.ownerCars"
... ... @@ -10,9 +10,8 @@
10 10 :value="item.carId">
11 11 </el-option>
12 12 </el-select>
13   - </el-col>
14   - <el-col :span="16"></el-col>
15   - <el-col :span="4" v-if="simplifyCarFeeInfo.carId">
  13 + </div>
  14 + <div v-if="simplifyCarFeeInfo.carId">
16 15 <el-button type="primary" size="small" @click="_toBuyCarMonthCard">
17 16 {{ $t('simplifyCarFee.buyMonthCard') }}
18 17 </el-button>
... ... @@ -22,8 +21,8 @@
22 21 <el-button type="primary" size="small" @click="_openSimplifyCarCreateFeeAddModal">
23 22 {{ $t('simplifyCarFee.createFee') }}
24 23 </el-button>
25   - </el-col>
26   - </el-row>
  24 + </div>
  25 + </div>
27 26  
28 27 <el-table
29 28 :data="simplifyCarFeeInfo.fees"
... ... @@ -115,12 +114,22 @@
115 114 </el-pagination>
116 115 </el-col>
117 116 </el-row>
  117 + <car-create-fee-add ref="carCreateFeeAdd" @success="handleNotify" />
  118 + <delete-fee ref="deleteFee" @success="handleNotify"></delete-fee>
  119 + <edit-fee ref="editFee" @success="handleNotify"></edit-fee>
  120 + <finish-fee ref="finishFee" @success="handleNotify"></finish-fee>
  121 +
118 122 </div>
119 123 </template>
120 124  
121 125 <script>
122 126 import { getCommunityId } from '@/api/community/communityApi'
123 127 import { listFee, queryOwnerCars } from '@/api/simplify/simplifyCarFeeApi'
  128 +import CarCreateFeeAdd from '@/components/fee/carCreateFeeAdd'
  129 +import DeleteFee from '@/components/fee/deleteFee'
  130 +import EditFee from '@/components/fee/editFee'
  131 +import FinishFee from '@/components/fee/finishFee'
  132 +
124 133  
125 134 export default {
126 135 name: 'SimplifyCarFee',
... ... @@ -145,14 +154,20 @@ export default {
145 154 total: 0
146 155 }
147 156 },
  157 + components: {
  158 + CarCreateFeeAdd,
  159 + DeleteFee,
  160 + EditFee,
  161 + FinishFee
  162 + },
148 163 created() {
149 164 this.communityId = getCommunityId()
150   - this.initEvents()
  165 +
151 166 },
152 167 methods: {
153   - initEvents() {
154   - this.$on('switch', this.handleSwitch)
155   - this.$on('notify', this.handleNotify)
  168 +
  169 + open(param) {
  170 + this.handleSwitch(param)
156 171 },
157 172 handleSwitch(param) {
158 173 if (param.ownerId == '') return
... ... @@ -204,13 +219,14 @@ export default {
204 219 }
205 220  
206 221 queryOwnerCars(params).then(res => {
207   - this.simplifyCarFeeInfo.ownerCars = res.data
208   - if (res.data.length > 0) {
209   - this.simplifyCarFeeInfo.carId = res.data[0].carId
210   - this.simplifyCarFeeInfo.carNum = res.data[0].carNum
211   - this.simplifyCarFeeInfo.num = res.data[0].num
212   - this.simplifyCarFeeInfo.parkingName = `${res.data[0].areaNum}${this.$t('simplifyCarFee.parkingLot')}${res.data[0].num}${this.$t('simplifyCarFee.parkingSpace')}`
213   - resolve(res.data)
  222 + let _json = res.data;
  223 + this.simplifyCarFeeInfo.ownerCars = _json.data
  224 + if (_json.data.length > 0) {
  225 + this.simplifyCarFeeInfo.carId = _json.data[0].carId
  226 + this.simplifyCarFeeInfo.carNum = _json.data[0].carNum
  227 + this.simplifyCarFeeInfo.num = _json.data[0].num
  228 + this.simplifyCarFeeInfo.parkingName = `${_json.data[0].areaNum}${this.$t('simplifyCarFee.parkingLot')}${_json.data[0].num}${this.$t('simplifyCarFee.parkingSpace')}`
  229 + resolve(_json.data)
214 230 } else {
215 231 reject(this.$t('simplifyCarFee.noParkingSpace'))
216 232 }
... ... @@ -262,37 +278,39 @@ export default {
262 278 return `${this.$t('simplifyCarFee.owner')}:${ownerName},${this.$t('simplifyCarFee.phone')}:${ownerLink}`
263 279 },
264 280 _simplifyCarPayFee(fee) {
265   - this.$router.push(`/views/fee/payFeeOrderfeeId=${fee.feeId}`)
  281 + this.$router.push(`/views/fee/payFeeOrder?feeId=${fee.feeId}`)
266 282 },
267 283 _simplifyCarPayFeeHis(fee) {
268   - this.$router.push(`/views/fee/propertyFee?${this.objToGetParam(fee)}`)
  284 +
  285 + this.$router.push({
  286 + path: '/views/fee/propertyFee',
  287 + query: fee
  288 + })
269 289 },
270 290 _simplifyCarEditFee(fee) {
271   - this.$emit('editFee', fee)
  291 + fee.maxEndTime = this._getAttrValue(fee.feeAttrs, '390010')
  292 + this.$refs.editFee.open(fee)
272 293 },
273 294 _simplifyCarDeleteFee(fee) {
274   - this.$emit('deleteFee', {
275   - communityId: this.communityId,
  295 + this.$refs.deleteFee.open({
  296 + communityId: getCommunityId(),
276 297 feeId: fee.feeId
277 298 })
278 299 },
279 300 _openSimplifyCarCreateFeeAddModal() {
280   - this.$emit('carCreateFeeAdd', {
281   - isMore: false,
282   - car: this.simplifyCarFeeInfo
283   - })
  301 + this.$refs.carCreateFeeAdd.open({ isMore: false, car: this.simplifyCarFeeInfo })
284 302 },
285 303 _simplifyCarFinishFee(fee) {
286   - this.$emit('finishFee', {
287   - communityId: this.communityId,
  304 + this.$refs.finishFee.open({
  305 + communityId: getCommunityId(),
288 306 feeId: fee.feeId
289 307 })
290 308 },
291 309 _toBuyCarMonthCard() {
292   - this.$router.push(`/pages/fee/buyCarMonthCard?carNum=${this.simplifyCarFeeInfo.carNum}`)
  310 + this.$router.push(`/views/fee/buyCarMonthCard?carNum=${this.simplifyCarFeeInfo.carNum}`)
293 311 },
294 312 _openBatchPayCarFeeModal() {
295   - this.$router.push(`/pages/property/batchPayFeeOrder?ownerId=${this.simplifyCarFeeInfo.ownerId}&payerObjType=6666`)
  313 + this.$router.push(`/views/fee/batchPayFeeOrder?ownerId=${this.simplifyCarFeeInfo.ownerId}&payerObjType=6666`)
296 314 },
297 315 _viewCarFeeConfig(fee) {
298 316 // Implement view fee config logic
... ...
src/components/staff/selectStaffsDiv.vue
... ... @@ -64,10 +64,10 @@ export default {
64 64 },
65 65  
66 66 async handleNodeClick(node) {
67   - this.currentOrgId = node.id
  67 + this.currentOrgId = node.orgId
68 68 try {
69 69 const { staffs } = await listStaffsByOrgId({
70   - orgId: node.id,
  70 + orgId: node.orgId,
71 71 page: 1,
72 72 row: 100
73 73 })
... ...
src/i18n/commonLang.js
... ... @@ -60,7 +60,9 @@ export const messages = {
60 60 saveSuccess:'successfully',
61 61 noData:'No Data',
62 62 file:'File',
63   - hide:'Hide'
  63 + hide:'Hide',
  64 + viewDetail:'View Detail',
  65 + yuan:'yuan'
64 66 }
65 67 },
66 68 zh: {
... ... @@ -124,7 +126,9 @@ export const messages = {
124 126 saveSuccess:'成功',
125 127 noData:'暂无数据',
126 128 file:'附件',
127   - hide:'隐藏'
  129 + hide:'隐藏',
  130 + viewDetail:'查看详情',
  131 + yuan:'元'
128 132 }
129 133 }
130 134 }
131 135 \ No newline at end of file
... ...
src/i18n/feeI18n.js
... ... @@ -36,6 +36,7 @@ import { messages as feeDetailMessages } from &#39;../views/fee/feeDetailLang&#39;
36 36 import { messages as roomCreatePayFeeMessages } from '../views/fee/roomCreatePayFeeLang'
37 37 import { messages as printAccountReceiptMessages } from '../views/account/printAccountReceiptLang'
38 38 import { messages as printSmallAccountReceiptMessages } from '../views/account/printSmallAccountReceiptLang'
  39 +import { messages as listApplyRoomDiscountRecordDetailsMessages } from '../views/fee/listApplyRoomDiscountRecordDetailsLang'
39 40  
40 41 export const messages = {
41 42 en: {
... ... @@ -77,6 +78,7 @@ export const messages = {
77 78 ...roomCreatePayFeeMessages.en,
78 79 ...printAccountReceiptMessages.en,
79 80 ...printSmallAccountReceiptMessages.en,
  81 + ...listApplyRoomDiscountRecordDetailsMessages.en,
80 82 },
81 83 zh: {
82 84 ...contractCreateFeeMessages.zh,
... ... @@ -117,5 +119,6 @@ export const messages = {
117 119 ...roomCreatePayFeeMessages.zh,
118 120 ...printAccountReceiptMessages.zh,
119 121 ...printSmallAccountReceiptMessages.zh,
  122 + ...listApplyRoomDiscountRecordDetailsMessages.zh,
120 123 }
121 124 }
122 125 \ No newline at end of file
... ...
src/router/feeRouter.js
... ... @@ -164,6 +164,11 @@ export default [
164 164 name: '/pages/fee/roomCreatePayFee',
165 165 component: () => import('@/views/fee/roomCreatePayFeeList.vue')
166 166 },
  167 + {
  168 + path:'/views/fee/listApplyRoomDiscountRecordDetails',
  169 + name:'/views/fee/listApplyRoomDiscountRecordDetails',
  170 + component: () => import('@/views/fee/listApplyRoomDiscountRecordDetailsList.vue')
  171 + },
167 172  
168 173  
169 174 ]
170 175 \ No newline at end of file
... ...
src/views/car/parkingBoxManageList.vue
... ... @@ -93,6 +93,7 @@
93 93  
94 94 <script>
95 95 import { getParkingBoxList } from '@/api/car/parkingBoxManageApi'
  96 +import {jumpToIot} from '@/api/user/menuApi.js'
96 97  
97 98 export default {
98 99 name: 'ParkingBoxManageList',
... ... @@ -182,13 +183,8 @@ export default {
182 183  
183 184 handleOpenConsole(row) {
184 185 // 跳转到控制台页面
185   - this.$router.push({
186   - path: '/car/parkingAreaControl',
187   - query: {
188   - boxId: row.boxId,
189   - paId: row.paId
190   - }
191   - })
  186 + jumpToIot(`/#/pages/car/parkingAreaControl?paId=${row.paId}&boxId=${row.boxId}`)
  187 +
192 188 }
193 189 }
194 190 }
... ...
src/views/car/tempCarPaymentList.vue
... ... @@ -6,7 +6,7 @@
6 6 <div class="treeview">
7 7 <ul class="list-group">
8 8 <li v-for="(item, index) in parkingAreas" :key="index" class="list-group-item"
9   - :class="{ 'vc-node-selected': conditions.paId === item.paId }" @click="handleSwitchParkingArea(item)">
  9 + :class="{ 'vc-node-selected': conditions.paNum === item.num }" @click="handleSwitchParkingArea(item)">
10 10 {{ item.num }}
11 11 </li>
12 12 </ul>
... ... @@ -106,7 +106,7 @@ export default {
106 106 total: 0
107 107 },
108 108 conditions: {
109   - paId: '',
  109 + paNum: '',
110 110 state: null,
111 111 carNum: '',
112 112 startTime: null,
... ... @@ -139,7 +139,7 @@ export default {
139 139 },
140 140  
141 141 handleSwitchParkingArea(parkingArea) {
142   - this.conditions.paId = parkingArea.paId
  142 + this.conditions.paNum = parkingArea.num
143 143 this.queryCarInoutMethod()
144 144 },
145 145  
... ...
src/views/common/commonLang.js deleted
1   -export const messages = {
2   - en: {
3   - common: {
4   - cancel: 'Cancel',
5   - confirm: 'Confirm'
6   - }
7   - },
8   - zh: {
9   - common: {
10   - cancel: '取消',
11   - confirm: '确定'
12   - }
13   - }
14   -}
15 0 \ No newline at end of file
src/views/fee/batchPayFeeOrderList.vue
... ... @@ -106,7 +106,7 @@
106 106 </el-row>
107 107  
108 108 <batch-pay-confirm ref="batchPayConfirm"></batch-pay-confirm>
109   - <batch-fee-cycle ref="batchFeeCycle"></batch-fee-cycle>
  109 + <batch-fee-cycle ref="batchFeeCycle" @changeMonth="batchChangeMonth"></batch-fee-cycle>
110 110 </div>
111 111 </template>
112 112  
... ... @@ -459,6 +459,9 @@ export default {
459 459 })
460 460 }
461 461 this._doComputeTotalFee();
  462 + },
  463 + batchChangeMonth(fee) {
  464 + this._changeMonth(fee.cycle, fee)
462 465 }
463 466 }
464 467 }
... ...
src/views/fee/buyCarMonthCardList.vue
... ... @@ -164,7 +164,7 @@ export default {
164 164 }
165 165  
166 166 const res = await getOpenApi(params)
167   - this.buyCarMonthCardInfo.cards = res.data.data || []
  167 + this.buyCarMonthCardInfo.cards = res.data || []
168 168 } catch (error) {
169 169 console.error('获取月卡列表失败:', error)
170 170 this.$message.error(this.$t('buyCarMonthCard.errors.getCardsFailed'))
... ...
src/views/fee/listApplyRoomDiscountRecordDetailsLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + listApplyRoomDiscountRecordDetails: {
  4 + title: 'Decoration Records',
  5 + back: 'Back',
  6 + room: 'Room',
  7 + image: 'Image/Video',
  8 + createTime: 'Create Time'
  9 + }
  10 + },
  11 + zh: {
  12 + listApplyRoomDiscountRecordDetails: {
  13 + title: '装修记录',
  14 + back: '返回',
  15 + room: '房屋',
  16 + image: '图片/视频',
  17 + createTime: '创建时间'
  18 + }
  19 + }
  20 +}
0 21 \ No newline at end of file
... ...
src/views/fee/listApplyRoomDiscountRecordDetailsList.vue 0 → 100644
  1 +<template>
  2 + <div class="listApplyRoomDiscountRecordDetails-container">
  3 + <el-card class="box-card">
  4 + <div slot="header" class="clearfix">
  5 + <span>{{ applyRoomDiscountRecordDetailsInfo.conditions.roomName }} {{
  6 + $t('listApplyRoomDiscountRecordDetails.title') }}</span>
  7 + <el-button type="primary" size="small" style="float: right;" @click="_goBack">
  8 + <i class="el-icon-close"></i>
  9 + {{ $t('listApplyRoomDiscountRecordDetails.back') }}
  10 + </el-button>
  11 + </div>
  12 +
  13 + <el-table :data="applyRoomDiscountRecordDetailsInfo.applyRoomDiscountRecordDetails" border style="width: 100%">
  14 + <el-table-column prop="roomName" :label="$t('listApplyRoomDiscountRecordDetails.room')" align="center" />
  15 + <el-table-column :label="$t('listApplyRoomDiscountRecordDetails.image')" align="center">
  16 + <template slot-scope="scope">
  17 + <div v-if="scope.row.relTypeCd === '19000'" style="position: relative; display: inline-block;"
  18 + @click="showImg(scope.row.url)">
  19 + <img width="50" height="50" :src="scope.row.url" @error="handleImageError">
  20 + <img src="/img/icon-bigimg.png" style="position: absolute; right: 0; bottom: 0;" width="50" height="50"
  21 + alt="">
  22 + </div>
  23 + <video v-else-if="scope.row.relTypeCd === '21000'" width="200" height="200" controls autoplay>
  24 + <source :src="scope.row.url" type="video/mp4">
  25 + </video>
  26 + </template>
  27 + </el-table-column>
  28 + <el-table-column prop="createTime" :label="$t('listApplyRoomDiscountRecordDetails.createTime')"
  29 + align="center" />
  30 + </el-table>
  31 +
  32 + <el-pagination :current-page.sync="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size"
  33 + :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
  34 + @current-change="handleCurrentChange" />
  35 + </el-card>
  36 +
  37 + <view-image ref="viewImage" />
  38 + </div>
  39 +</template>
  40 +
  41 +<script>
  42 +import { queryApplyRoomDiscountRecordDetail } from '@/api/fee/listApplyRoomDiscountRecordDetailsApi'
  43 +import { getCommunityId } from '@/api/community/communityApi'
  44 +import ViewImage from '@/components/system/viewImage'
  45 +
  46 +export default {
  47 + name: 'ListApplyRoomDiscountRecordDetails',
  48 + components: {
  49 + ViewImage
  50 + },
  51 + data() {
  52 + return {
  53 + applyRoomDiscountRecordDetailsInfo: {
  54 + applyRoomDiscountRecordDetails: [],
  55 + conditions: {
  56 + ardrId: '',
  57 + roomName: '',
  58 + state: '',
  59 + roomId: '',
  60 + communityId: ''
  61 + }
  62 + },
  63 + pagination: {
  64 + current: 1,
  65 + size: 10,
  66 + total: 0
  67 + }
  68 + }
  69 + },
  70 + created() {
  71 + this.applyRoomDiscountRecordDetailsInfo.conditions.ardrId = this.$route.query.ardrId
  72 + this.applyRoomDiscountRecordDetailsInfo.conditions.roomName = this.$route.query.roomName
  73 + this.applyRoomDiscountRecordDetailsInfo.conditions.state = this.$route.query.state
  74 + this.applyRoomDiscountRecordDetailsInfo.conditions.communityId = getCommunityId()
  75 + this._listApplyRoomDiscountRecordDetails()
  76 + },
  77 + methods: {
  78 + async _listApplyRoomDiscountRecordDetails() {
  79 + try {
  80 + const params = {
  81 + page: this.pagination.current,
  82 + row: this.pagination.size,
  83 + ...this.applyRoomDiscountRecordDetailsInfo.conditions
  84 + }
  85 + const { data, total } = await queryApplyRoomDiscountRecordDetail(params)
  86 + this.applyRoomDiscountRecordDetailsInfo.applyRoomDiscountRecordDetails = data
  87 + this.pagination.total = total
  88 + } catch (error) {
  89 + console.error('Failed to fetch apply room discount record details:', error)
  90 + }
  91 + },
  92 + handleSizeChange(val) {
  93 + this.pagination.size = val
  94 + this._listApplyRoomDiscountRecordDetails()
  95 + },
  96 + handleCurrentChange(val) {
  97 + this.pagination.current = val
  98 + this._listApplyRoomDiscountRecordDetails()
  99 + },
  100 + _goBack() {
  101 + this.$router.go(-1)
  102 + },
  103 + showImg(url) {
  104 + this.$refs.viewImage.open(url)
  105 + },
  106 + handleImageError(e) {
  107 + e.target.src = '/img/noPhoto.jpg'
  108 + }
  109 + }
  110 +}
  111 +</script>
  112 +
  113 +<style lang="scss" scoped>
  114 +.listApplyRoomDiscountRecordDetails-container {
  115 + padding: 20px;
  116 +
  117 + .box-card {
  118 + margin-bottom: 20px;
  119 + }
  120 +
  121 + .el-pagination {
  122 + margin-top: 20px;
  123 + text-align: right;
  124 + }
  125 +}
  126 +</style>
0 127 \ No newline at end of file
... ...
src/views/fee/listApplyRoomDiscountRecordList.vue
... ... @@ -3,8 +3,10 @@
3 3 <el-card class="box-card">
4 4 <div slot="header" class="clearfix">
5 5 <div class="card-header">
6   - <span>{{ listApplyRoomDiscountRecordsInfo.conditions.roomName }}</span>
7   - <span class="header-title">{{ $t('listApplyRoomDiscountRecord.title') }}</span>
  6 + <div>
  7 + <span>{{ listApplyRoomDiscountRecordsInfo.conditions.roomName }}</span>
  8 + <span class="header-title">{{ $t('listApplyRoomDiscountRecord.title') }}</span>
  9 + </div>
8 10 <div class="header-tools">
9 11 <el-button type="primary" size="small" @click="_openAddModal(listApplyRoomDiscountRecordsInfo.applyRoomDiscount)">
10 12 <i class="el-icon-plus"></i>
... ... @@ -35,7 +37,7 @@
35 37 <template slot-scope="scope">
36 38 <el-button-group>
37 39 <el-button size="mini" @click="_openApplyRoomDiscountRecordDetailsModel(scope.row)">
38   - {{ $t('common.viewDetails') }}
  40 + {{ $t('common.viewDetail') }}
39 41 </el-button>
40 42 <el-button size="mini" type="danger" @click="_openDeleteApplyRoomDiscountRecordModel(scope.row)">
41 43 {{ $t('common.delete') }}
... ...
src/views/fee/listOweFeeList.vue
... ... @@ -47,7 +47,7 @@
47 47 <el-col :span="6">
48 48 <el-select v-model="listOweFeeInfo.conditions.roomSubType" :placeholder="$t('listOweFee.search.roomType')"
49 49 style="width:100%">
50   - <el-option :label="$t('common.selectRoomType')" value=""></el-option>
  50 + <el-option :label="$t('listOweFee.search.roomType')" value=""></el-option>
51 51 <el-option v-for="(item, index) in listOweFeeInfo.roomSubTypes" :key="index" :label="item.name"
52 52 :value="item.statusCd"></el-option>
53 53 </el-select>
... ... @@ -59,14 +59,14 @@
59 59 <el-col :span="6">
60 60 <el-select v-model="listOweFeeInfo.conditions.payObjType" :placeholder="$t('listOweFee.search.payObjType')"
61 61 style="width:100%">
62   - <el-option :label="$t('common.selectPayObjType')" value=""></el-option>
  62 + <el-option :label="$t('listOweFee.search.payObjType')" value=""></el-option>
63 63 <el-option v-for="(item, index) in listOweFeeInfo.payObjTypes" :key="index" :label="item.name"
64 64 :value="item.statusCd"></el-option>
65 65 </el-select>
66 66 </el-col>
67 67 </el-row>
68 68  
69   - <el-row v-show="listOweFeeInfo.moreCondition" :gutter="20">
  69 + <el-row v-show="listOweFeeInfo.moreCondition" :gutter="20" class="margin-top">
70 70 <el-col v-if="listOweFeeInfo.conditions.payObjType === '3333'" :span="6">
71 71 <el-input v-model.trim="listOweFeeInfo.conditions.num"
72 72 :placeholder="$t('listOweFee.search.roomNumFormat')"></el-input>
... ... @@ -148,7 +148,7 @@
148 148 <script>
149 149 import { getDict } from '@/api/community/communityApi'
150 150 import { getCommunityId } from '@/api/community/communityApi'
151   -import { queryReportOweFee, listFeeConfigs, exportData,queryUnits } from '@/api/fee/listOweFeeApi'
  151 +import { queryReportOweFee, listFeeConfigs, exportData, queryUnits } from '@/api/fee/listOweFeeApi'
152 152 import SearchFloor from '@/components/fee/searchFloor'
153 153  
154 154 export default {
... ...
src/views/oa/staffAttendanceManageList.vue
... ... @@ -16,9 +16,11 @@
16 16 :placeholder="$t('staffAttendance.staffPlaceholder')" class="filter-item"
17 17 @keyup.enter.native="loadStaffs"></el-input>
18 18  
19   - <el-button type="primary" class="filter-item" @click="loadStaffs">
20   - {{ $t('common.search') }}
21   - </el-button>
  19 + <div class="filter-item text-right">
  20 + <el-button type="primary" @click="loadStaffs">
  21 + {{ $t('common.search') }}
  22 + </el-button>
  23 + </div>
22 24 </div>
23 25  
24 26 <div class="staff-list">
... ... @@ -71,7 +73,7 @@
71 73 </el-row>
72 74  
73 75 <!-- 子组件 -->
74   -
  76 +
75 77 <choose-org-tree ref="chooseOrgTree" @switchOrg="handleSwitchOrg"></choose-org-tree>
76 78 <staff-attendance-detail ref="staffAttendanceDetail"></staff-attendance-detail>
77 79 <staff-attendance-replenish-check-in ref="staffAttendanceReplenishCheckIn"></staff-attendance-replenish-check-in>
... ... @@ -83,7 +85,7 @@ import { getCommunityId } from &#39;@/api/community/communityApi&#39;
83 85 import {
84 86 queryStaffInfos,
85 87 queryAttendanceClassesTask,
86   -
  88 +
87 89 } from '@/api/oa/staffAttendanceManageApi'
88 90 import { dateFormat } from '@/utils/dateUtil'
89 91 import ChooseOrgTree from '@/components/org/ChooseOrgTree'
... ... @@ -149,7 +151,7 @@ export default {
149 151 communityId: this.communityId
150 152 }
151 153  
152   - const { data } = await queryStaffInfos(params)
  154 + const data = await queryStaffInfos(params)
153 155 this.staffAttendanceManageInfo.staffs = data.staffs || []
154 156  
155 157 if (this.staffAttendanceManageInfo.staffs.length > 0) {
... ...