Commit 59833eeb6d90236fb91b9ebfe669e5aaa9a4ec3b
1 parent
56c7fec9
测试报表代码
Showing
11 changed files
with
222 additions
and
171 deletions
src/api/dev/taskApi.js
| ... | ... | @@ -117,6 +117,24 @@ export function stopTask(taskId) { |
| 117 | 117 | }) |
| 118 | 118 | }) |
| 119 | 119 | } |
| 120 | +export function runTask(taskId) { | |
| 121 | + return new Promise((resolve, reject) => { | |
| 122 | + request({ | |
| 123 | + url: '/job.runJob', | |
| 124 | + method: 'post', | |
| 125 | + data: { taskId } | |
| 126 | + }).then(response => { | |
| 127 | + const res = response.data | |
| 128 | + if (res.code == 0) { | |
| 129 | + resolve(res) | |
| 130 | + } else { | |
| 131 | + reject(new Error(res.msg || '执行定时任务失败')) | |
| 132 | + } | |
| 133 | + }).catch(error => { | |
| 134 | + reject(error) | |
| 135 | + }) | |
| 136 | + }) | |
| 137 | +} | |
| 120 | 138 | |
| 121 | 139 | // 获取定时任务列表 |
| 122 | 140 | export function getTaskTemplateList(params) { | ... | ... |
src/components/report/configFeeSummary.vue
src/components/report/floorFeeSummary.vue
src/components/report/reportProficientCarFee.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="report-proficient-car-fee"> |
| 3 | - <el-row :gutter="20"> | |
| 4 | - <el-col :span="12"> | |
| 5 | - <el-table :data="reportProficientCarFeeInfo.fees" border style="width: 100%" height="500"> | |
| 6 | - <el-table-column prop="ownerName" :label="$t('reportProficientCarFee.name')" align="center"> | |
| 7 | - </el-table-column> | |
| 8 | - <el-table-column prop="objName" :label="$t('reportProficientCarFee.carNumber')" align="center"> | |
| 9 | - </el-table-column> | |
| 10 | - <el-table-column prop="ownerLink" :label="$t('reportProficientCarFee.phone')" align="center"> | |
| 11 | - </el-table-column> | |
| 12 | - <el-table-column prop="feeTypeCdName" :label="$t('reportProficientCarFee.feeType')" align="center"> | |
| 13 | - </el-table-column> | |
| 14 | - <el-table-column prop="feeName" :label="$t('reportProficientCarFee.feeName')" align="center"> | |
| 15 | - </el-table-column> | |
| 16 | - </el-table> | |
| 17 | - </el-col> | |
| 18 | - <el-col :span="12"> | |
| 19 | - <div class="table-wrapper"> | |
| 20 | - <el-table :data="reportProficientCarFeeInfo.fees" border style="width: 100%" height="500"> | |
| 21 | - <el-table-column v-for="(item, index) in reportProficientCarFeeInfo.listColumns" :key="index" | |
| 22 | - :label="item + $t('reportProficientCarFee.year')" align="center" width="120"> | |
| 23 | - <template slot-scope="scope"> | |
| 24 | - <el-link type="primary" @click="_showCarFeeDetail(scope.row, item)"> | |
| 25 | - {{ _getProficientCarFeeValue(scope.row.reportFeeYearCollectionDetailDtos, item) }} | |
| 26 | - </el-link> | |
| 27 | - </template> | |
| 28 | - </el-table-column> | |
| 29 | - </el-table> | |
| 30 | - </div> | |
| 31 | - </el-col> | |
| 32 | - </el-row> | |
| 3 | + <div class="table-container"> | |
| 4 | + <el-table :data="reportProficientCarFeeInfo.fees" border style="width: 100%" height="500"> | |
| 5 | + <!-- 固定列:基本信息 --> | |
| 6 | + <el-table-column prop="ownerName" :label="$t('reportProficientCarFee.name')" align="center" fixed="left" width="120"> | |
| 7 | + </el-table-column> | |
| 8 | + <el-table-column prop="objName" :label="$t('reportProficientCarFee.carNumber')" align="center" fixed="left" width="120"> | |
| 9 | + </el-table-column> | |
| 10 | + <el-table-column prop="ownerLink" :label="$t('reportProficientCarFee.phone')" align="center" fixed="left" width="120"> | |
| 11 | + </el-table-column> | |
| 12 | + <el-table-column prop="feeTypeCdName" :label="$t('reportProficientCarFee.feeType')" align="center" fixed="left" width="120"> | |
| 13 | + </el-table-column> | |
| 14 | + <el-table-column prop="feeName" :label="$t('reportProficientCarFee.feeName')" align="center" fixed="left" width="120"> | |
| 15 | + </el-table-column> | |
| 16 | + | |
| 17 | + <!-- 动态列:年度费用数据 --> | |
| 18 | + <el-table-column v-for="(item, index) in reportProficientCarFeeInfo.listColumns" :key="index" | |
| 19 | + :label="item + $t('reportProficientCarFee.year')" align="center" > | |
| 20 | + <template slot-scope="scope"> | |
| 21 | + <el-link type="primary" @click="_showCarFeeDetail(scope.row, item)"> | |
| 22 | + {{ _getProficientCarFeeValue(scope.row.reportFeeYearCollectionDetailDtos, item) }} | |
| 23 | + </el-link> | |
| 24 | + </template> | |
| 25 | + </el-table-column> | |
| 26 | + </el-table> | |
| 27 | + </div> | |
| 33 | 28 | |
| 34 | 29 | <el-row :gutter="20" class="margin-top"> |
| 35 | 30 | <el-col :span="12"> |
| ... | ... | @@ -44,14 +39,19 @@ |
| 44 | 39 | </el-pagination> |
| 45 | 40 | </el-col> |
| 46 | 41 | </el-row> |
| 42 | + <view-fee-detail ref="viewFeeDetail"></view-fee-detail> | |
| 47 | 43 | </div> |
| 48 | 44 | </template> |
| 49 | 45 | |
| 50 | 46 | <script> |
| 51 | 47 | import { queryReportFeeYear } from '@/api/report/reportProficientApi' |
| 48 | +import ViewFeeDetail from '@/components/report/viewFeeDetail' | |
| 52 | 49 | |
| 53 | 50 | export default { |
| 54 | 51 | name: 'ReportProficientCarFee', |
| 52 | + components: { | |
| 53 | + ViewFeeDetail | |
| 54 | + }, | |
| 55 | 55 | props: { |
| 56 | 56 | conditions: { |
| 57 | 57 | type: Object, |
| ... | ... | @@ -72,14 +72,12 @@ export default { |
| 72 | 72 | } |
| 73 | 73 | }, |
| 74 | 74 | created() { |
| 75 | - this.$bus.$on('reportProficientCarFee-switch', this.handleSwitch) | |
| 76 | - this.$bus.$on('reportProficientCarFee-notify', this.listReportProficientCarFee) | |
| 77 | - }, | |
| 78 | - beforeDestroy() { | |
| 79 | - this.$bus.$off('reportProficientCarFee-switch', this.handleSwitch) | |
| 80 | - this.$bus.$off('reportProficientCarFee-notify', this.listReportProficientCarFee) | |
| 81 | 75 | }, |
| 82 | 76 | methods: { |
| 77 | + open(params) { | |
| 78 | + this.conditions = params | |
| 79 | + this.listReportProficientCarFee() | |
| 80 | + }, | |
| 83 | 81 | handleSwitch(params) { |
| 84 | 82 | console.log(params) |
| 85 | 83 | this.clearReportProficientCarFeeInfo() |
| ... | ... | @@ -149,8 +147,18 @@ export default { |
| 149 | 147 | |
| 150 | 148 | <style lang="scss" scoped> |
| 151 | 149 | .report-proficient-car-fee { |
| 152 | - .table-wrapper { | |
| 150 | + .table-container { | |
| 153 | 151 | overflow-x: auto; |
| 152 | + | |
| 153 | + // 确保表格容器有足够的宽度来显示滚动条 | |
| 154 | + .el-table { | |
| 155 | + min-width: 100%; | |
| 156 | + | |
| 157 | + // 设置表格的最小宽度,确保横向滚动生效 | |
| 158 | + &::v-deep .el-table__body-wrapper { | |
| 159 | + overflow-x: auto; | |
| 160 | + } | |
| 161 | + } | |
| 154 | 162 | } |
| 155 | 163 | |
| 156 | 164 | .margin-top { | ... | ... |
src/components/report/reportProficientRoomFee.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="report-proficient-room-fee"> |
| 3 | - <el-row :gutter="20"> | |
| 4 | - <el-col :span="12"> | |
| 5 | - <el-table :data="reportProficientRoomFeeInfo.fees" border style="width: 100%" height="500"> | |
| 6 | - <el-table-column prop="ownerName" :label="$t('reportProficientRoomFee.name')" align="center"> | |
| 7 | - </el-table-column> | |
| 8 | - <el-table-column prop="objName" :label="$t('reportProficientRoomFee.roomNumber')" align="center"> | |
| 9 | - </el-table-column> | |
| 10 | - <el-table-column prop="ownerLink" :label="$t('reportProficientRoomFee.phone')" align="center"> | |
| 11 | - </el-table-column> | |
| 12 | - <el-table-column prop="builtUpArea" :label="$t('reportProficientRoomFee.area')" align="center"> | |
| 13 | - </el-table-column> | |
| 14 | - <el-table-column prop="feeTypeCdName" :label="$t('reportProficientRoomFee.feeType')" align="center"> | |
| 15 | - </el-table-column> | |
| 16 | - <el-table-column prop="feeName" :label="$t('reportProficientRoomFee.feeName')" align="center"> | |
| 17 | - </el-table-column> | |
| 18 | - </el-table> | |
| 19 | - </el-col> | |
| 20 | - <el-col :span="12"> | |
| 21 | - <div class="table-wrapper"> | |
| 22 | - <el-table :data="reportProficientRoomFeeInfo.fees" border style="width: 100%" height="500"> | |
| 23 | - <el-table-column v-for="(item, index) in reportProficientRoomFeeInfo.listColumns" :key="index" | |
| 24 | - :label="item + $t('reportProficientRoomFee.year')" align="center" width="120"> | |
| 25 | - <template slot-scope="scope"> | |
| 26 | - <el-link type="primary" @click="_showFeeDetail(scope.row, item)"> | |
| 27 | - {{ _getProficientRoomFeeValue(scope.row.reportFeeYearCollectionDetailDtos, item) }} | |
| 28 | - </el-link> | |
| 29 | - </template> | |
| 30 | - </el-table-column> | |
| 31 | - </el-table> | |
| 32 | - </div> | |
| 33 | - </el-col> | |
| 34 | - </el-row> | |
| 3 | + <div class="table-container"> | |
| 4 | + <el-table :data="reportProficientRoomFeeInfo.fees" border style="width: 100%" height="500"> | |
| 5 | + <!-- 固定列:基本信息 --> | |
| 6 | + <el-table-column prop="ownerName" :label="$t('reportProficientRoomFee.name')" align="center" fixed="left" width="120"> | |
| 7 | + </el-table-column> | |
| 8 | + <el-table-column prop="objName" :label="$t('reportProficientRoomFee.roomNumber')" align="center" fixed="left" width="120"> | |
| 9 | + </el-table-column> | |
| 10 | + <el-table-column prop="ownerLink" :label="$t('reportProficientRoomFee.phone')" align="center" fixed="left" width="120"> | |
| 11 | + </el-table-column> | |
| 12 | + <el-table-column prop="builtUpArea" :label="$t('reportProficientRoomFee.area')" align="center" fixed="left" width="100"> | |
| 13 | + </el-table-column> | |
| 14 | + <el-table-column prop="feeTypeCdName" :label="$t('reportProficientRoomFee.feeType')" align="center" fixed="left" width="120"> | |
| 15 | + </el-table-column> | |
| 16 | + <el-table-column prop="feeName" :label="$t('reportProficientRoomFee.feeName')" align="center" fixed="left" width="120"> | |
| 17 | + </el-table-column> | |
| 18 | + | |
| 19 | + <!-- 动态列:年度费用数据 --> | |
| 20 | + <el-table-column v-for="(item, index) in reportProficientRoomFeeInfo.listColumns" :key="index" | |
| 21 | + :label="item + $t('reportProficientRoomFee.year')" align="center" > | |
| 22 | + <template slot-scope="scope"> | |
| 23 | + <el-link type="primary" @click="_showFeeDetail(scope.row, item)"> | |
| 24 | + {{ _getProficientRoomFeeValue(scope.row.reportFeeYearCollectionDetailDtos, item) }} | |
| 25 | + </el-link> | |
| 26 | + </template> | |
| 27 | + </el-table-column> | |
| 28 | + </el-table> | |
| 29 | + </div> | |
| 35 | 30 | |
| 36 | 31 | <el-row :gutter="20" class="margin-top"> |
| 37 | 32 | <el-col :span="12"> |
| 38 | - <div class="tip-text"> | |
| 33 | + <div class="tip-text text-left"> | |
| 39 | 34 | {{ $t('reportProficientRoomFee.tip') }} |
| 40 | 35 | </div> |
| 41 | 36 | </el-col> |
| 42 | 37 | <el-col :span="12"> |
| 43 | - <el-pagination :current-page.sync="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size" | |
| 44 | - :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange" | |
| 45 | - @current-change="handleCurrentChange"> | |
| 38 | + <el-pagination :current-page.sync="pagination.current" :page-sizes="[10, 20, 30, 50]" | |
| 39 | + :page-size="pagination.size" :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" | |
| 40 | + @size-change="handleSizeChange" @current-change="handleCurrentChange"> | |
| 46 | 41 | </el-pagination> |
| 47 | 42 | </el-col> |
| 48 | 43 | </el-row> |
| 44 | + <view-fee-detail ref="viewFeeDetail"></view-fee-detail> | |
| 49 | 45 | </div> |
| 50 | 46 | </template> |
| 51 | 47 | |
| 52 | 48 | <script> |
| 53 | 49 | import { queryReportFeeYear } from '@/api/report/reportProficientApi' |
| 50 | +import ViewFeeDetail from '@/components/report/viewFeeDetail' | |
| 54 | 51 | |
| 55 | 52 | export default { |
| 56 | 53 | name: 'ReportProficientRoomFee', |
| 54 | + components: { | |
| 55 | + ViewFeeDetail | |
| 56 | + }, | |
| 57 | 57 | props: { |
| 58 | 58 | conditions: { |
| 59 | 59 | type: Object, |
| ... | ... | @@ -74,14 +74,12 @@ export default { |
| 74 | 74 | } |
| 75 | 75 | }, |
| 76 | 76 | created() { |
| 77 | - this.$bus.$on('reportProficientRoomFee-switch', this.handleSwitch) | |
| 78 | - this.$bus.$on('reportProficientRoomFee-notify', this.listReportProficientRoomFee) | |
| 79 | - }, | |
| 80 | - beforeDestroy() { | |
| 81 | - this.$bus.$off('reportProficientRoomFee-switch', this.handleSwitch) | |
| 82 | - this.$bus.$off('reportProficientRoomFee-notify', this.listReportProficientRoomFee) | |
| 83 | 77 | }, |
| 84 | 78 | methods: { |
| 79 | + open(params) { | |
| 80 | + this.conditions = params | |
| 81 | + this.listReportProficientRoomFee() | |
| 82 | + }, | |
| 85 | 83 | handleSwitch(params) { |
| 86 | 84 | console.log(params) |
| 87 | 85 | this.clearReportProficientRoomFeeInfo() |
| ... | ... | @@ -151,8 +149,18 @@ export default { |
| 151 | 149 | |
| 152 | 150 | <style lang="scss" scoped> |
| 153 | 151 | .report-proficient-room-fee { |
| 154 | - .table-wrapper { | |
| 152 | + .table-container { | |
| 155 | 153 | overflow-x: auto; |
| 154 | + | |
| 155 | + // 确保表格容器有足够的宽度来显示滚动条 | |
| 156 | + .el-table { | |
| 157 | + min-width: 100%; | |
| 158 | + | |
| 159 | + // 设置表格的最小宽度,确保横向滚动生效 | |
| 160 | + &::v-deep .el-table__body-wrapper { | |
| 161 | + overflow-x: auto; | |
| 162 | + } | |
| 163 | + } | |
| 156 | 164 | } |
| 157 | 165 | |
| 158 | 166 | .margin-top { | ... | ... |
src/components/report/selectCommunityFloor.vue
| 1 | 1 | <template> |
| 2 | - <div class="select-community-floor-container"> | |
| 3 | - <div class="border-radius"> | |
| 4 | - <div class="margin-xs-r treeview attendance-staff" style="height: 650px;"> | |
| 5 | - <ul class="list-group text-center border-radius"> | |
| 6 | - <li v-for="(item, index) in floors" :key="index" class="list-group-item node-orgTree" | |
| 7 | - :class="{ 'vc-node-selected': selectedFloorId === item.floorId }" @click="handleSelectFloor(item)"> | |
| 8 | - {{ item.floorNum }} | |
| 9 | - </li> | |
| 10 | - </ul> | |
| 11 | - </div> | |
| 12 | - </div> | |
| 2 | + <div class=""> | |
| 3 | + <div class="list-group-border-radius"> | |
| 4 | + <div class=" treeview"> | |
| 5 | + <ul class="list-group text-center "> | |
| 6 | + <li v-for="(item, index) in floors" :key="index" @click="handleSelectFloor(item)" | |
| 7 | + :class="{ 'vc-node-selected': selectedFloorId === item.floorId }" | |
| 8 | + class="list-group-item node-orgTree"> | |
| 9 | + {{ item.floorNum }} | |
| 10 | + </li> | |
| 11 | + </ul> | |
| 12 | + </div> | |
| 13 | + </div> | |
| 13 | 14 | </div> |
| 14 | 15 | </template> |
| 15 | 16 | |
| ... | ... | @@ -46,7 +47,7 @@ export default { |
| 46 | 47 | floorId: '' |
| 47 | 48 | } |
| 48 | 49 | |
| 49 | - const data = await queryFloors(params) | |
| 50 | + const data = await queryFloors(params) | |
| 50 | 51 | this.floors = [defaultFloor, ...data.apiFloorDataVoList] |
| 51 | 52 | this.handleSelectFloor(defaultFloor) |
| 52 | 53 | } catch (error) { | ... | ... |
src/components/report/viewFeeDetail.vue
| ... | ... | @@ -8,12 +8,12 @@ |
| 8 | 8 | <el-table-column prop="createTime" :label="$t('viewFeeDetail.table.payTime')" align="center" /> |
| 9 | 9 | <el-table-column prop="startTime" :label="$t('viewFeeDetail.table.startTime')" align="center"> |
| 10 | 10 | <template slot-scope="scope"> |
| 11 | - {{ $dayjs(scope.row.startTime).format('YYYY-MM-DD') }} | |
| 11 | + {{ dateFormat(scope.row.startTime) }} | |
| 12 | 12 | </template> |
| 13 | 13 | </el-table-column> |
| 14 | 14 | <el-table-column prop="endTime" :label="$t('viewFeeDetail.table.endTime')" align="center"> |
| 15 | 15 | <template slot-scope="scope"> |
| 16 | - {{ $dayjs(scope.row.endTime).format('YYYY-MM-DD') }} | |
| 16 | + {{ dateFormat(scope.row.endTime) }} | |
| 17 | 17 | </template> |
| 18 | 18 | </el-table-column> |
| 19 | 19 | <el-table-column prop="stateName" :label="$t('viewFeeDetail.table.status')" align="center" /> |
| ... | ... | @@ -28,6 +28,7 @@ |
| 28 | 28 | <script> |
| 29 | 29 | import { queryFeeDetail } from '@/api/report/reportHuaningApi' |
| 30 | 30 | import { getCommunityId } from '@/api/community/communityApi' |
| 31 | +import {dateFormat} from '@/utils/dateUtil' | |
| 31 | 32 | |
| 32 | 33 | export default { |
| 33 | 34 | name: 'ViewFeeDetail', |
| ... | ... | @@ -75,9 +76,9 @@ export default { |
| 75 | 76 | payerObjId: this.viewFeeDetailInfo.payerObjId |
| 76 | 77 | } |
| 77 | 78 | |
| 78 | - const { data, total } = await queryFeeDetail(params) | |
| 79 | + const { feeDetails, total } = await queryFeeDetail(params) | |
| 79 | 80 | |
| 80 | - this.viewFeeDetailInfo.feeDetails = data | |
| 81 | + this.viewFeeDetailInfo.feeDetails = feeDetails | |
| 81 | 82 | this.pagination.total = total |
| 82 | 83 | } catch (error) { |
| 83 | 84 | console.error('获取费用明细失败:', error) |
| ... | ... | @@ -86,7 +87,8 @@ export default { |
| 86 | 87 | handlePageChange(currentPage) { |
| 87 | 88 | this.pagination.current = currentPage |
| 88 | 89 | this.listFeeDetail() |
| 89 | - } | |
| 90 | + }, | |
| 91 | + dateFormat | |
| 90 | 92 | } |
| 91 | 93 | } |
| 92 | 94 | </script> | ... | ... |
src/views/dev/taskList.vue
| ... | ... | @@ -36,6 +36,7 @@ |
| 36 | 36 | <el-button size="mini" type="warn" @click="handleStart(scope.row)" v-if="scope.row.state == '001'">{{ |
| 37 | 37 | $t('task.start') }}</el-button> |
| 38 | 38 | <el-button size="mini" type="warn" @click="handleStop(scope.row)" v-else>{{ $t('task.stop') }}</el-button> |
| 39 | + <el-button size="mini" type="warn" @click="handleTest(scope.row)" v-if="scope.row.state == '002'">Test</el-button> | |
| 39 | 40 | </template> |
| 40 | 41 | </el-table-column> |
| 41 | 42 | </el-table> |
| ... | ... | @@ -53,7 +54,7 @@ |
| 53 | 54 | </template> |
| 54 | 55 | |
| 55 | 56 | <script> |
| 56 | -import { getTaskList, startTask, stopTask } from '@/api/dev/taskApi' | |
| 57 | +import { getTaskList, startTask, stopTask ,runTask} from '@/api/dev/taskApi' | |
| 57 | 58 | import AddTask from '@/components/dev/AddTask' |
| 58 | 59 | import EditTask from '@/components/dev/EditTask' |
| 59 | 60 | import DelTask from '@/components/dev/DelTask' |
| ... | ... | @@ -148,6 +149,17 @@ export default { |
| 148 | 149 | this.currentRow = { ...row } |
| 149 | 150 | this.delVisible = true |
| 150 | 151 | }, |
| 152 | + async handleTest(row) { | |
| 153 | + try { | |
| 154 | + this.loading = true | |
| 155 | + await runTask(row.taskId) | |
| 156 | + this.getList() | |
| 157 | + } catch (error) { | |
| 158 | + this.$message.error(this.$t('task.fetchError')) | |
| 159 | + } finally { | |
| 160 | + this.loading = false | |
| 161 | + } | |
| 162 | + }, | |
| 151 | 163 | handleSuccess() { |
| 152 | 164 | this.getList() |
| 153 | 165 | }, | ... | ... |
src/views/oa/addComplaintTypeList.vue
| 1 | 1 | <template> |
| 2 | - <el-card class="complaint-type-container"> | |
| 3 | - <div class="header-wrapper"> | |
| 4 | - <h3>{{ $t('addComplaintType.title') }}</h3> | |
| 5 | - </div> | |
| 2 | + <div class="padding"> | |
| 3 | + <el-card class="complaint-type-container"> | |
| 4 | + <div class="header-wrapper"> | |
| 5 | + <h3>{{ $t('addComplaintType.title') }}</h3> | |
| 6 | + </div> | |
| 6 | 7 | |
| 7 | - <el-form ref="form" :model="addComplaintTypeInfo" label-width="120px"> | |
| 8 | - <el-row :gutter="20"> | |
| 9 | - <el-col :span="12"> | |
| 10 | - <el-form-item :label="$t('addComplaintType.typeName')" prop="typeName"> | |
| 11 | - <el-input v-model="addComplaintTypeInfo.typeName" :placeholder="$t('addComplaintType.typeNamePlaceholder')" | |
| 12 | - clearable /> | |
| 13 | - </el-form-item> | |
| 14 | - </el-col> | |
| 15 | - <el-col :span="12"> | |
| 16 | - <el-form-item :label="$t('addComplaintType.notifyWay')" prop="notifyWay"> | |
| 17 | - <el-select v-model="addComplaintTypeInfo.notifyWay" :placeholder="$t('addComplaintType.notifyWayPlaceholder')" | |
| 18 | - style="width:100%"> | |
| 19 | - <el-option v-for="item in notifyWayOptions" :key="item.value" :label="item.label" :value="item.value" /> | |
| 20 | - </el-select> | |
| 21 | - </el-form-item> | |
| 22 | - </el-col> | |
| 23 | - </el-row> | |
| 8 | + <el-form ref="form" :model="addComplaintTypeInfo" label-width="120px"> | |
| 9 | + <el-row :gutter="20"> | |
| 10 | + <el-col :span="12"> | |
| 11 | + <el-form-item :label="$t('addComplaintType.typeName')" prop="typeName"> | |
| 12 | + <el-input v-model="addComplaintTypeInfo.typeName" | |
| 13 | + :placeholder="$t('addComplaintType.typeNamePlaceholder')" clearable /> | |
| 14 | + </el-form-item> | |
| 15 | + </el-col> | |
| 16 | + <el-col :span="12"> | |
| 17 | + <el-form-item :label="$t('addComplaintType.notifyWay')" prop="notifyWay"> | |
| 18 | + <el-select v-model="addComplaintTypeInfo.notifyWay" | |
| 19 | + :placeholder="$t('addComplaintType.notifyWayPlaceholder')" style="width:100%"> | |
| 20 | + <el-option v-for="item in notifyWayOptions" :key="item.value" :label="item.label" :value="item.value" /> | |
| 21 | + </el-select> | |
| 22 | + </el-form-item> | |
| 23 | + </el-col> | |
| 24 | + </el-row> | |
| 24 | 25 | |
| 25 | - <el-row :gutter="20"> | |
| 26 | - <el-col :span="12"> | |
| 27 | - <el-form-item :label="$t('addComplaintType.appraiseReply')" prop="appraiseReply"> | |
| 28 | - <el-select v-model="addComplaintTypeInfo.appraiseReply" | |
| 29 | - :placeholder="$t('addComplaintType.appraiseReplyPlaceholder')" style="width:100%"> | |
| 30 | - <el-option v-for="item in appraiseReplyOptions" :key="item.value" :label="item.label" :value="item.value" /> | |
| 31 | - </el-select> | |
| 32 | - </el-form-item> | |
| 33 | - </el-col> | |
| 34 | - <el-col :span="12"> | |
| 35 | - <el-form-item :label="$t('addComplaintType.remark')" prop="remark"> | |
| 36 | - <el-input v-model="addComplaintTypeInfo.remark" type="textarea" | |
| 37 | - :placeholder="$t('addComplaintType.remarkPlaceholder')" :rows="2" /> | |
| 38 | - </el-form-item> | |
| 39 | - </el-col> | |
| 40 | - </el-row> | |
| 26 | + <el-row :gutter="20"> | |
| 27 | + <el-col :span="12"> | |
| 28 | + <el-form-item :label="$t('addComplaintType.appraiseReply')" prop="appraiseReply"> | |
| 29 | + <el-select v-model="addComplaintTypeInfo.appraiseReply" | |
| 30 | + :placeholder="$t('addComplaintType.appraiseReplyPlaceholder')" style="width:100%"> | |
| 31 | + <el-option v-for="item in appraiseReplyOptions" :key="item.value" :label="item.label" | |
| 32 | + :value="item.value" /> | |
| 33 | + </el-select> | |
| 34 | + </el-form-item> | |
| 35 | + </el-col> | |
| 36 | + <el-col :span="12"> | |
| 37 | + <el-form-item :label="$t('addComplaintType.remark')" prop="remark"> | |
| 38 | + <el-input v-model="addComplaintTypeInfo.remark" type="textarea" | |
| 39 | + :placeholder="$t('addComplaintType.remarkPlaceholder')" :rows="2" /> | |
| 40 | + </el-form-item> | |
| 41 | + </el-col> | |
| 42 | + </el-row> | |
| 41 | 43 | |
| 42 | - <el-row> | |
| 43 | - <el-col :span="24"> | |
| 44 | - <el-form-item :label="$t('addComplaintType.selectStaff')"> | |
| 45 | - <select-staffs ref="selectStaffs" @selectStaffs="handleStaffSelected" /> | |
| 46 | - </el-form-item> | |
| 47 | - </el-col> | |
| 48 | - </el-row> | |
| 44 | + <el-row> | |
| 45 | + <el-col :span="24"> | |
| 46 | + <el-form-item :label="$t('addComplaintType.selectStaff')"> | |
| 47 | + <select-staffs ref="selectStaffs" @selectStaffs="handleStaffSelected" /> | |
| 48 | + </el-form-item> | |
| 49 | + </el-col> | |
| 50 | + </el-row> | |
| 49 | 51 | |
| 50 | - <el-row> | |
| 51 | - <el-col :span="24" class="button-group"> | |
| 52 | - <el-button type="primary" @click="saveComplaintTypeInfo"> | |
| 53 | - {{ $t('common.save') }} | |
| 54 | - </el-button> | |
| 55 | - <el-button @click="goBack"> | |
| 56 | - {{ $t('common.back') }} | |
| 57 | - </el-button> | |
| 58 | - </el-col> | |
| 59 | - </el-row> | |
| 60 | - </el-form> | |
| 61 | - </el-card> | |
| 52 | + <el-row> | |
| 53 | + <el-col :span="24" class="button-group"> | |
| 54 | + <el-button type="primary" @click="saveComplaintTypeInfo"> | |
| 55 | + {{ $t('common.save') }} | |
| 56 | + </el-button> | |
| 57 | + <el-button @click="goBack"> | |
| 58 | + {{ $t('common.back') }} | |
| 59 | + </el-button> | |
| 60 | + </el-col> | |
| 61 | + </el-row> | |
| 62 | + </el-form> | |
| 63 | + </el-card> | |
| 64 | + </div> | |
| 62 | 65 | </template> |
| 63 | 66 | |
| 64 | 67 | <script> | ... | ... |
src/views/report/reportFeeSummaryList.vue
| 1 | 1 | <template> |
| 2 | 2 | <div class="report-fee-summary-container animated fadeInRight"> |
| 3 | - <el-row class="flex justify-start"> | |
| 4 | - <el-col :span="2" class="padding-r-0"> | |
| 3 | + <el-row class="flex justify-start" :gutter="20"> | |
| 4 | + <el-col :span="3" class="padding-r-0"> | |
| 5 | 5 | <select-community-floor ref="selectCommunityFloor" /> |
| 6 | 6 | </el-col> |
| 7 | - <el-col :span="22"> | |
| 7 | + <el-col :span="21"> | |
| 8 | 8 | <el-card class="box-card"> |
| 9 | 9 | <div slot="header" class="flex justify-between"> |
| 10 | 10 | <span>{{ $t('reportFeeSummary.queryCondition') }}</span> |
| ... | ... | @@ -254,7 +254,7 @@ export default { |
| 254 | 254 | }, |
| 255 | 255 | async _loadStaffCommunitys() { |
| 256 | 256 | try { |
| 257 | - const { data } = await queryCommunitys() | |
| 257 | + const data = await queryCommunitys() | |
| 258 | 258 | this.reportFeeSummaryInfo.communitys = data.communitys |
| 259 | 259 | } catch (error) { |
| 260 | 260 | console.error('Failed to load communities:', error) |
| ... | ... | @@ -269,7 +269,7 @@ export default { |
| 269 | 269 | isDefault: 'F' |
| 270 | 270 | } |
| 271 | 271 | |
| 272 | - const { data } = await queryFeeConfigs(params) | |
| 272 | + const data = await queryFeeConfigs(params) | |
| 273 | 273 | this.reportFeeSummaryInfo.feeConfigs = data.feeConfigs |
| 274 | 274 | } catch (error) { |
| 275 | 275 | console.error('Failed to list fee configs:', error) | ... | ... |
src/views/report/reportProficientList.vue
| ... | ... | @@ -46,7 +46,7 @@ |
| 46 | 46 | |
| 47 | 47 | <!-- 内容区域 --> |
| 48 | 48 | <el-card class="content-wrapper"> |
| 49 | - <el-tabs v-model="reportProficientInfo._currentTab" @tab-click="changeTab"> | |
| 49 | + <el-tabs v-model="reportProficientInfo._currentTab" @tab-click="changeTab(reportProficientInfo._currentTab)"> | |
| 50 | 50 | <el-tab-pane :label="$t('reportProficient.roomFee')" name="reportProficientRoomFee"> |
| 51 | 51 | <report-proficient-room-fee ref="reportProficientRoomFee" v-if="reportProficientInfo._currentTab === 'reportProficientRoomFee'" |
| 52 | 52 | :conditions="reportProficientInfo.conditions"> |
| ... | ... | @@ -96,6 +96,7 @@ export default { |
| 96 | 96 | }, |
| 97 | 97 | created() { |
| 98 | 98 | this._initData() |
| 99 | + this.changeTab(this.reportProficientInfo._currentTab) | |
| 99 | 100 | }, |
| 100 | 101 | methods: { |
| 101 | 102 | async _initData() { |
| ... | ... | @@ -122,12 +123,14 @@ export default { |
| 122 | 123 | } |
| 123 | 124 | }, |
| 124 | 125 | changeTab(tab) { |
| 125 | - this.reportProficientInfo._currentTab = tab.name || tab | |
| 126 | - this._queryMethod() | |
| 126 | + this.reportProficientInfo._currentTab = tab | |
| 127 | + setTimeout(() => { | |
| 128 | + this.$refs[`${this.reportProficientInfo._currentTab}`].open(this.reportProficientInfo.conditions) | |
| 129 | + },500) | |
| 127 | 130 | }, |
| 128 | 131 | _queryMethod() { |
| 129 | 132 | setTimeout(() => { |
| 130 | - this.$refs[`${this.reportProficientInfo._currentTab}`].handleSwitch() | |
| 133 | + this.$refs[`${this.reportProficientInfo._currentTab}`].open(this.reportProficientInfo.conditions) | |
| 131 | 134 | },500) |
| 132 | 135 | }, |
| 133 | 136 | _resetMethod() { |
| ... | ... | @@ -141,9 +144,9 @@ export default { |
| 141 | 144 | }, |
| 142 | 145 | _getReportProficientRoomName() { |
| 143 | 146 | if (this.reportProficientInfo._currentTab === 'reportProficientRoomFee') { |
| 144 | - return this.$t('reportProficient.roomPlaceholder') | |
| 147 | + return this.$t('reportProficient.search.roomPlaceholder') | |
| 145 | 148 | } |
| 146 | - return this.$t('reportProficient.carPlaceholder') | |
| 149 | + return this.$t('reportProficient.search.carPlaceholder') | |
| 147 | 150 | }, |
| 148 | 151 | async _exportFee() { |
| 149 | 152 | try { | ... | ... |