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,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 { |