Commit 59833eeb6d90236fb91b9ebfe669e5aaa9a4ec3b

Authored by wuxw
1 parent 56c7fec9

测试报表代码

src/api/dev/taskApi.js
@@ -117,6 +117,24 @@ export function stopTask(taskId) { @@ -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 export function getTaskTemplateList(params) { 140 export function getTaskTemplateList(params) {
src/components/report/configFeeSummary.vue
1 <template> 1 <template>
2 <el-card class="config-fee-summary-container"> 2 <el-card class="config-fee-summary-container">
3 - <div slot="header">  
4 - <span>{{ $t('reportFeeSummary.configFeeSummary') }}</span>  
5 - </div> 3 +
6 <div id="configFeeSummary" style="height:300px;width:100%;"></div> 4 <div id="configFeeSummary" style="height:300px;width:100%;"></div>
7 </el-card> 5 </el-card>
8 </template> 6 </template>
src/components/report/floorFeeSummary.vue
1 <template> 1 <template>
2 <el-card class="floor-fee-summary-container"> 2 <el-card class="floor-fee-summary-container">
3 - <div slot="header">  
4 - <span>{{ $t('reportFeeSummary.floorFeeSummary') }}</span>  
5 - </div> 3 +
6 <div id="floorFeeSummary" style="height:300px;width:100%;"></div> 4 <div id="floorFeeSummary" style="height:300px;width:100%;"></div>
7 </el-card> 5 </el-card>
8 </template> 6 </template>
src/components/report/reportProficientCarFee.vue
1 <template> 1 <template>
2 <div class="report-proficient-car-fee"> 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 <el-row :gutter="20" class="margin-top"> 29 <el-row :gutter="20" class="margin-top">
35 <el-col :span="12"> 30 <el-col :span="12">
@@ -44,14 +39,19 @@ @@ -44,14 +39,19 @@
44 </el-pagination> 39 </el-pagination>
45 </el-col> 40 </el-col>
46 </el-row> 41 </el-row>
  42 + <view-fee-detail ref="viewFeeDetail"></view-fee-detail>
47 </div> 43 </div>
48 </template> 44 </template>
49 45
50 <script> 46 <script>
51 import { queryReportFeeYear } from '@/api/report/reportProficientApi' 47 import { queryReportFeeYear } from '@/api/report/reportProficientApi'
  48 +import ViewFeeDetail from '@/components/report/viewFeeDetail'
52 49
53 export default { 50 export default {
54 name: 'ReportProficientCarFee', 51 name: 'ReportProficientCarFee',
  52 + components: {
  53 + ViewFeeDetail
  54 + },
55 props: { 55 props: {
56 conditions: { 56 conditions: {
57 type: Object, 57 type: Object,
@@ -72,14 +72,12 @@ export default { @@ -72,14 +72,12 @@ export default {
72 } 72 }
73 }, 73 },
74 created() { 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 methods: { 76 methods: {
  77 + open(params) {
  78 + this.conditions = params
  79 + this.listReportProficientCarFee()
  80 + },
83 handleSwitch(params) { 81 handleSwitch(params) {
84 console.log(params) 82 console.log(params)
85 this.clearReportProficientCarFeeInfo() 83 this.clearReportProficientCarFeeInfo()
@@ -149,8 +147,18 @@ export default { @@ -149,8 +147,18 @@ export default {
149 147
150 <style lang="scss" scoped> 148 <style lang="scss" scoped>
151 .report-proficient-car-fee { 149 .report-proficient-car-fee {
152 - .table-wrapper { 150 + .table-container {
153 overflow-x: auto; 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 .margin-top { 164 .margin-top {
src/components/report/reportProficientRoomFee.vue
1 <template> 1 <template>
2 <div class="report-proficient-room-fee"> 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 <el-row :gutter="20" class="margin-top"> 31 <el-row :gutter="20" class="margin-top">
37 <el-col :span="12"> 32 <el-col :span="12">
38 - <div class="tip-text"> 33 + <div class="tip-text text-left">
39 {{ $t('reportProficientRoomFee.tip') }} 34 {{ $t('reportProficientRoomFee.tip') }}
40 </div> 35 </div>
41 </el-col> 36 </el-col>
42 <el-col :span="12"> 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 </el-pagination> 41 </el-pagination>
47 </el-col> 42 </el-col>
48 </el-row> 43 </el-row>
  44 + <view-fee-detail ref="viewFeeDetail"></view-fee-detail>
49 </div> 45 </div>
50 </template> 46 </template>
51 47
52 <script> 48 <script>
53 import { queryReportFeeYear } from '@/api/report/reportProficientApi' 49 import { queryReportFeeYear } from '@/api/report/reportProficientApi'
  50 +import ViewFeeDetail from '@/components/report/viewFeeDetail'
54 51
55 export default { 52 export default {
56 name: 'ReportProficientRoomFee', 53 name: 'ReportProficientRoomFee',
  54 + components: {
  55 + ViewFeeDetail
  56 + },
57 props: { 57 props: {
58 conditions: { 58 conditions: {
59 type: Object, 59 type: Object,
@@ -74,14 +74,12 @@ export default { @@ -74,14 +74,12 @@ export default {
74 } 74 }
75 }, 75 },
76 created() { 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 methods: { 78 methods: {
  79 + open(params) {
  80 + this.conditions = params
  81 + this.listReportProficientRoomFee()
  82 + },
85 handleSwitch(params) { 83 handleSwitch(params) {
86 console.log(params) 84 console.log(params)
87 this.clearReportProficientRoomFeeInfo() 85 this.clearReportProficientRoomFeeInfo()
@@ -151,8 +149,18 @@ export default { @@ -151,8 +149,18 @@ export default {
151 149
152 <style lang="scss" scoped> 150 <style lang="scss" scoped>
153 .report-proficient-room-fee { 151 .report-proficient-room-fee {
154 - .table-wrapper { 152 + .table-container {
155 overflow-x: auto; 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 .margin-top { 166 .margin-top {
src/components/report/selectCommunityFloor.vue
1 <template> 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 </div> 14 </div>
14 </template> 15 </template>
15 16
@@ -46,7 +47,7 @@ export default { @@ -46,7 +47,7 @@ export default {
46 floorId: '' 47 floorId: ''
47 } 48 }
48 49
49 - const data = await queryFloors(params) 50 + const data = await queryFloors(params)
50 this.floors = [defaultFloor, ...data.apiFloorDataVoList] 51 this.floors = [defaultFloor, ...data.apiFloorDataVoList]
51 this.handleSelectFloor(defaultFloor) 52 this.handleSelectFloor(defaultFloor)
52 } catch (error) { 53 } catch (error) {
src/components/report/viewFeeDetail.vue
@@ -8,12 +8,12 @@ @@ -8,12 +8,12 @@
8 <el-table-column prop="createTime" :label="$t('viewFeeDetail.table.payTime')" align="center" /> 8 <el-table-column prop="createTime" :label="$t('viewFeeDetail.table.payTime')" align="center" />
9 <el-table-column prop="startTime" :label="$t('viewFeeDetail.table.startTime')" align="center"> 9 <el-table-column prop="startTime" :label="$t('viewFeeDetail.table.startTime')" align="center">
10 <template slot-scope="scope"> 10 <template slot-scope="scope">
11 - {{ $dayjs(scope.row.startTime).format('YYYY-MM-DD') }} 11 + {{ dateFormat(scope.row.startTime) }}
12 </template> 12 </template>
13 </el-table-column> 13 </el-table-column>
14 <el-table-column prop="endTime" :label="$t('viewFeeDetail.table.endTime')" align="center"> 14 <el-table-column prop="endTime" :label="$t('viewFeeDetail.table.endTime')" align="center">
15 <template slot-scope="scope"> 15 <template slot-scope="scope">
16 - {{ $dayjs(scope.row.endTime).format('YYYY-MM-DD') }} 16 + {{ dateFormat(scope.row.endTime) }}
17 </template> 17 </template>
18 </el-table-column> 18 </el-table-column>
19 <el-table-column prop="stateName" :label="$t('viewFeeDetail.table.status')" align="center" /> 19 <el-table-column prop="stateName" :label="$t('viewFeeDetail.table.status')" align="center" />
@@ -28,6 +28,7 @@ @@ -28,6 +28,7 @@
28 <script> 28 <script>
29 import { queryFeeDetail } from '@/api/report/reportHuaningApi' 29 import { queryFeeDetail } from '@/api/report/reportHuaningApi'
30 import { getCommunityId } from '@/api/community/communityApi' 30 import { getCommunityId } from '@/api/community/communityApi'
  31 +import {dateFormat} from '@/utils/dateUtil'
31 32
32 export default { 33 export default {
33 name: 'ViewFeeDetail', 34 name: 'ViewFeeDetail',
@@ -75,9 +76,9 @@ export default { @@ -75,9 +76,9 @@ export default {
75 payerObjId: this.viewFeeDetailInfo.payerObjId 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 this.pagination.total = total 82 this.pagination.total = total
82 } catch (error) { 83 } catch (error) {
83 console.error('获取费用明细失败:', error) 84 console.error('获取费用明细失败:', error)
@@ -86,7 +87,8 @@ export default { @@ -86,7 +87,8 @@ export default {
86 handlePageChange(currentPage) { 87 handlePageChange(currentPage) {
87 this.pagination.current = currentPage 88 this.pagination.current = currentPage
88 this.listFeeDetail() 89 this.listFeeDetail()
89 - } 90 + },
  91 + dateFormat
90 } 92 }
91 } 93 }
92 </script> 94 </script>
src/views/dev/taskList.vue
@@ -36,6 +36,7 @@ @@ -36,6 +36,7 @@
36 <el-button size="mini" type="warn" @click="handleStart(scope.row)" v-if="scope.row.state == '001'">{{ 36 <el-button size="mini" type="warn" @click="handleStart(scope.row)" v-if="scope.row.state == '001'">{{
37 $t('task.start') }}</el-button> 37 $t('task.start') }}</el-button>
38 <el-button size="mini" type="warn" @click="handleStop(scope.row)" v-else>{{ $t('task.stop') }}</el-button> 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 </template> 40 </template>
40 </el-table-column> 41 </el-table-column>
41 </el-table> 42 </el-table>
@@ -53,7 +54,7 @@ @@ -53,7 +54,7 @@
53 </template> 54 </template>
54 55
55 <script> 56 <script>
56 -import { getTaskList, startTask, stopTask } from '@/api/dev/taskApi' 57 +import { getTaskList, startTask, stopTask ,runTask} from '@/api/dev/taskApi'
57 import AddTask from '@/components/dev/AddTask' 58 import AddTask from '@/components/dev/AddTask'
58 import EditTask from '@/components/dev/EditTask' 59 import EditTask from '@/components/dev/EditTask'
59 import DelTask from '@/components/dev/DelTask' 60 import DelTask from '@/components/dev/DelTask'
@@ -148,6 +149,17 @@ export default { @@ -148,6 +149,17 @@ export default {
148 this.currentRow = { ...row } 149 this.currentRow = { ...row }
149 this.delVisible = true 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 handleSuccess() { 163 handleSuccess() {
152 this.getList() 164 this.getList()
153 }, 165 },
src/views/oa/addComplaintTypeList.vue
1 <template> 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 </template> 65 </template>
63 66
64 <script> 67 <script>
src/views/report/reportFeeSummaryList.vue
1 <template> 1 <template>
2 <div class="report-fee-summary-container animated fadeInRight"> 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 <select-community-floor ref="selectCommunityFloor" /> 5 <select-community-floor ref="selectCommunityFloor" />
6 </el-col> 6 </el-col>
7 - <el-col :span="22"> 7 + <el-col :span="21">
8 <el-card class="box-card"> 8 <el-card class="box-card">
9 <div slot="header" class="flex justify-between"> 9 <div slot="header" class="flex justify-between">
10 <span>{{ $t('reportFeeSummary.queryCondition') }}</span> 10 <span>{{ $t('reportFeeSummary.queryCondition') }}</span>
@@ -254,7 +254,7 @@ export default { @@ -254,7 +254,7 @@ export default {
254 }, 254 },
255 async _loadStaffCommunitys() { 255 async _loadStaffCommunitys() {
256 try { 256 try {
257 - const { data } = await queryCommunitys() 257 + const data = await queryCommunitys()
258 this.reportFeeSummaryInfo.communitys = data.communitys 258 this.reportFeeSummaryInfo.communitys = data.communitys
259 } catch (error) { 259 } catch (error) {
260 console.error('Failed to load communities:', error) 260 console.error('Failed to load communities:', error)
@@ -269,7 +269,7 @@ export default { @@ -269,7 +269,7 @@ export default {
269 isDefault: 'F' 269 isDefault: 'F'
270 } 270 }
271 271
272 - const { data } = await queryFeeConfigs(params) 272 + const data = await queryFeeConfigs(params)
273 this.reportFeeSummaryInfo.feeConfigs = data.feeConfigs 273 this.reportFeeSummaryInfo.feeConfigs = data.feeConfigs
274 } catch (error) { 274 } catch (error) {
275 console.error('Failed to list fee configs:', error) 275 console.error('Failed to list fee configs:', error)
src/views/report/reportProficientList.vue
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 46
47 <!-- 内容区域 --> 47 <!-- 内容区域 -->
48 <el-card class="content-wrapper"> 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 <el-tab-pane :label="$t('reportProficient.roomFee')" name="reportProficientRoomFee"> 50 <el-tab-pane :label="$t('reportProficient.roomFee')" name="reportProficientRoomFee">
51 <report-proficient-room-fee ref="reportProficientRoomFee" v-if="reportProficientInfo._currentTab === 'reportProficientRoomFee'" 51 <report-proficient-room-fee ref="reportProficientRoomFee" v-if="reportProficientInfo._currentTab === 'reportProficientRoomFee'"
52 :conditions="reportProficientInfo.conditions"> 52 :conditions="reportProficientInfo.conditions">
@@ -96,6 +96,7 @@ export default { @@ -96,6 +96,7 @@ export default {
96 }, 96 },
97 created() { 97 created() {
98 this._initData() 98 this._initData()
  99 + this.changeTab(this.reportProficientInfo._currentTab)
99 }, 100 },
100 methods: { 101 methods: {
101 async _initData() { 102 async _initData() {
@@ -122,12 +123,14 @@ export default { @@ -122,12 +123,14 @@ export default {
122 } 123 }
123 }, 124 },
124 changeTab(tab) { 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 _queryMethod() { 131 _queryMethod() {
129 setTimeout(() => { 132 setTimeout(() => {
130 - this.$refs[`${this.reportProficientInfo._currentTab}`].handleSwitch() 133 + this.$refs[`${this.reportProficientInfo._currentTab}`].open(this.reportProficientInfo.conditions)
131 },500) 134 },500)
132 }, 135 },
133 _resetMethod() { 136 _resetMethod() {
@@ -141,9 +144,9 @@ export default { @@ -141,9 +144,9 @@ export default {
141 }, 144 },
142 _getReportProficientRoomName() { 145 _getReportProficientRoomName() {
143 if (this.reportProficientInfo._currentTab === 'reportProficientRoomFee') { 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 async _exportFee() { 151 async _exportFee() {
149 try { 152 try {