Commit 27dcfde5732b936778708bce65731ee5d4042e24

Authored by wuxw
1 parent c104a84f

系统全面测试完成

src/api/org/orgApi.js
... ... @@ -120,11 +120,8 @@ export function listStaffs(params) {
120 120 params
121 121 }).then(response => {
122 122 const res = response.data
123   - if (res.code == 0) {
124 123 resolve(res)
125   - } else {
126   - reject(new Error(res.msg || '获取员工列表失败'))
127   - }
  124 +
128 125 }).catch(error => {
129 126 reject(error)
130 127 })
... ...
src/api/org/scheduleClassesStaffManageApi.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +/**
  4 + * 获取班次员工列表
  5 + * @param {Object} params 查询参数
  6 + * @returns {Promise}
  7 + */
  8 +export function listScheduleClassesStaff(params) {
  9 + return new Promise((resolve, reject) => {
  10 + request({
  11 + url: '/scheduleClasses.listScheduleClassesStaff',
  12 + method: 'get',
  13 + params
  14 + }).then(response => {
  15 + const res = response.data
  16 + resolve(res)
  17 + }).catch(error => {
  18 + reject(error)
  19 + })
  20 + })
  21 +}
  22 +
  23 +/**
  24 + * 保存班次员工
  25 + * @param {Object} data 保存数据
  26 + * @returns {Promise}
  27 + */
  28 +export function saveScheduleClassesStaff(data) {
  29 + return new Promise((resolve, reject) => {
  30 + request({
  31 + url: '/scheduleClasses.saveScheduleClassesStaff',
  32 + method: 'post',
  33 + data
  34 + }).then(response => {
  35 + const res = response.data
  36 + resolve(res)
  37 + }).catch(error => {
  38 + reject(error)
  39 + })
  40 + })
  41 +}
  42 +
  43 +/**
  44 + * 删除班次员工
  45 + * @param {Object} data 删除数据
  46 + * @returns {Promise}
  47 + */
  48 +export function deleteScheduleClassesStaff(data) {
  49 + return new Promise((resolve, reject) => {
  50 + request({
  51 + url: '/scheduleClasses.deleteScheduleClassesStaff',
  52 + method: 'post',
  53 + data
  54 + }).then(response => {
  55 + const res = response.data
  56 + resolve(res)
  57 + }).catch(error => {
  58 + reject(error)
  59 + })
  60 + })
  61 +}
  62 +
  63 +/**
  64 + * 获取组织树
  65 + * @returns {Promise}
  66 + */
  67 +export function listOrgTree() {
  68 + return new Promise((resolve, reject) => {
  69 + request({
  70 + url: '/org.listOrgTree',
  71 + method: 'get'
  72 + }).then(response => {
  73 + const res = response.data
  74 + resolve(res)
  75 + }).catch(error => {
  76 + reject(error)
  77 + })
  78 + })
  79 +}
  80 +
  81 +/**
  82 + * 根据组织ID获取员工列表
  83 + * @param {Object} params 查询参数
  84 + * @returns {Promise}
  85 + */
  86 +export function listStaffByOrg(params) {
  87 + return new Promise((resolve, reject) => {
  88 + request({
  89 + url: '/query.staff.infos',
  90 + method: 'get',
  91 + params
  92 + }).then(response => {
  93 + const res = response.data
  94 + resolve(res)
  95 + }).catch(error => {
  96 + reject(error)
  97 + })
  98 + })
  99 +}
0 100 \ No newline at end of file
... ...
src/components/car/importOwnerCar.vue
... ... @@ -80,7 +80,7 @@ export default {
80 80 this.$message.success(this.$t('listOwnerCar.importSuccess'))
81 81 this.$emit('success')
82 82 this.visible = false
83   - this.$router.push(`/pages/property/assetImportLogDetail?logId=${response.logId}&logType=importOwnerCar`)
  83 + this.$router.push(`/views/system/assetImportLogDetail?logId=${response.logId}&logType=importOwnerCar`)
84 84 } catch (error) {
85 85 console.error('导入失败:', error)
86 86 this.$message.error(error.message || this.$t('listOwnerCar.importError'))
... ...
src/components/fee/doImportCreateFee.vue
... ... @@ -78,7 +78,7 @@ export default {
78 78 if (res.code === 0) {
79 79 this.$message.success(this.$t('doImportCreateFee.successMessage'))
80 80 this.handleClose()
81   - this.$router.push(`/pages/property/assetImportLogDetail?logId=${res.data.logId}&logType=importCustomFee`)
  81 + this.$router.push(`/views/system/assetImportLogDetail?logId=${res.data.logId}&logType=importCustomFee`)
82 82 } else {
83 83 this.$message.error(res.msg)
84 84 }
... ...
src/components/org/addClasses.vue
1 1 <template>
2   - <el-dialog :title="$t('classesManage.add.title')" :visible.sync="visible" width="60%" @close="handleClose">
3   - <el-form ref="form" :model="formData" label-width="120px">
  2 + <el-dialog :title="$t('classesManage.add.title')" :visible.sync="visible" width="50%" @close="handleClose">
  3 + <el-form ref="form" :model="formData" label-width="120px" class="text-left">
4 4 <el-form-item :label="$t('classesManage.add.name')" prop="name" :rules="[
5 5 { required: true, message: $t('classesManage.validate.nameRequired'), trigger: 'blur' },
6 6 { max: 100, message: $t('classesManage.validate.nameMaxLength'), trigger: 'blur' }
... ...
src/components/org/addScheduleClassesStaff.vue 0 → 100644
  1 +<template>
  2 + <el-dialog :title="$t('scheduleClassesStaffManage.addTitle')" :visible.sync="visible" width="70%"
  3 + @close="handleClose">
  4 + <el-row :gutter="20">
  5 + <el-col :span="24">
  6 + <select-staffs-div ref="selectStaffs" @selectStaffs="handleSelectStaffs" />
  7 + </el-col>
  8 + </el-row>
  9 + <span slot="footer" class="dialog-footer">
  10 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  11 + <el-button type="primary" @click="handleSave">{{ $t('common.save') }}</el-button>
  12 + </span>
  13 + </el-dialog>
  14 +</template>
  15 +
  16 +<script>
  17 +import { saveScheduleClassesStaff } from '@/api/org/scheduleClassesStaffManageApi'
  18 +import SelectStaffsDiv from '@/components/staff/selectStaffsDiv'
  19 +
  20 +export default {
  21 + name: 'AddScheduleClassesStaff',
  22 + components: {
  23 + SelectStaffsDiv
  24 + },
  25 + data() {
  26 + return {
  27 + visible: false,
  28 + scheduleId: '',
  29 + staffs: []
  30 + }
  31 + },
  32 + methods: {
  33 + open(scheduleId) {
  34 + this.scheduleId = scheduleId
  35 + this.visible = true
  36 + },
  37 + async handleSave() {
  38 + if (this.staffs.length === 0) {
  39 + this.$message.warning(this.$t('scheduleClassesStaffManage.selectStaffWarning'))
  40 + return
  41 + }
  42 +
  43 + try {
  44 + const params = {
  45 + scheduleId: this.scheduleId,
  46 + staffs: this.staffs
  47 + }
  48 + await saveScheduleClassesStaff(params)
  49 + this.$message.success(this.$t('common.saveSuccess'))
  50 + this.$emit('success')
  51 + this.visible = false
  52 + } catch (error) {
  53 + this.$message.error(this.$t('common.saveError'))
  54 + }
  55 + },
  56 + handleClose() {
  57 + this.$refs.selectStaffs.reset()
  58 + },
  59 + handleSelectStaffs(staffs) {
  60 + this.staffs = staffs
  61 + }
  62 + }
  63 +}
  64 +</script>
  65 +
  66 +<style scoped>
  67 +.el-row {
  68 + margin-bottom: 20px;
  69 +}
  70 +</style>
0 71 \ No newline at end of file
... ...
src/components/org/deleteScheduleClassesStaff.vue 0 → 100644
  1 +<template>
  2 + <el-dialog
  3 + :title="$t('common.confirmDelete')"
  4 + :visible.sync="visible"
  5 + width="30%"
  6 + center>
  7 + <div class="text-center">
  8 + <p>{{ $t('scheduleClassesStaffManage.confirmDeleteStaff') }}</p>
  9 + </div>
  10 + <span slot="footer" class="dialog-footer">
  11 + <el-button @click="visible = false">{{ $t('common.cancel') }}</el-button>
  12 + <el-button type="primary" @click="confirmDelete">{{ $t('common.confirm') }}</el-button>
  13 + </span>
  14 + </el-dialog>
  15 +</template>
  16 +
  17 +<script>
  18 +import { deleteScheduleClassesStaff } from '@/api/org/scheduleClassesStaffManageApi'
  19 +
  20 +export default {
  21 + name: 'DeleteScheduleClassesStaff',
  22 + data() {
  23 + return {
  24 + visible: false,
  25 + deleteData: null
  26 + }
  27 + },
  28 + methods: {
  29 + open(data) {
  30 + this.deleteData = data
  31 + this.visible = true
  32 + },
  33 + async confirmDelete() {
  34 + try {
  35 + await deleteScheduleClassesStaff(this.deleteData)
  36 + this.$message.success(this.$t('common.deleteSuccess'))
  37 + this.$emit('success')
  38 + this.visible = false
  39 + } catch (error) {
  40 + this.$message.error(this.$t('common.deleteError'))
  41 + }
  42 + }
  43 + }
  44 +}
  45 +</script>
  46 +
  47 +<style scoped>
  48 +.text-center {
  49 + text-align: center;
  50 + margin: 20px 0;
  51 +}
  52 +</style>
0 53 \ No newline at end of file
... ...
src/components/org/editClasses.vue
1 1 <template>
2   - <el-dialog :title="$t('classesManage.edit.title')" :visible.sync="visible" width="60%" @close="handleClose">
3   - <el-form ref="form" :model="formData" label-width="120px">
  2 + <el-dialog :title="$t('classesManage.edit.title')" :visible.sync="visible" width="40%" @close="handleClose">
  3 + <el-form ref="form" :model="formData" label-width="120px" class="text-left">
4 4 <el-form-item :label="$t('classesManage.edit.name')" prop="name" :rules="[
5 5 { required: true, message: $t('classesManage.validate.nameRequired'), trigger: 'blur' },
6 6 { max: 100, message: $t('classesManage.validate.nameMaxLength'), trigger: 'blur' }
... ...
src/components/owner/ownerDetailHis.vue
... ... @@ -56,8 +56,7 @@
56 56 <script>
57 57 import { queryHisOwner } from '@/api/owner/ownerDetailHisApi'
58 58 import { getCommunityId } from '@/api/community/communityApi'
59   -import { getDict } from '@/api/community/communityApi'
60   -
  59 +import {getAttrSpecList} from '@/api/dev/attrSpecApi'
61 60 export default {
62 61 name: 'OwnerDetailHis',
63 62 data() {
... ... @@ -148,7 +147,7 @@ export default {
148 147 },
149 148 _getColumns(callback) {
150 149 this.ownerDetailHisInfo.listColumns = []
151   - getDict('building_owner_attr').then(data => {
  150 + getAttrSpecList({specCd:'building_owner_attr',page:1,row:10}).then(data => {
152 151 this.ownerDetailHisInfo.listColumns = []
153 152 data.forEach(item => {
154 153 if (item.listShow === 'Y') {
... ...
src/components/room/importOwnerRoom.vue
... ... @@ -95,7 +95,7 @@ export default {
95 95  
96 96 this.handleClose()
97 97 this.$router.push({
98   - path: '/property/assetImportLogDetail',
  98 + path: '/views/system/assetImportLogDetail',
99 99 query: {
100 100 logId: response.logId,
101 101 logType: 'importRoomOwner'
... ...
src/components/staff/selectStaffsDiv.vue
... ... @@ -42,7 +42,7 @@ import { listStaffsByOrgId } from &#39;@/api/inspection/inspectionPlanApi&#39;
42 42 import OrgTreeShow from '@/components/org/OrgTreeShow'
43 43  
44 44 export default {
45   - name: 'SelectStaffs',
  45 + name: 'SelectStaffsDiv',
46 46 components: {
47 47 OrgTreeShow
48 48 },
... ...
src/components/system/addPaymentPool.vue
1 1 <template>
2 2 <el-dialog :title="$t('paymentPool.add.title')" :visible.sync="visible" width="50%" @close="handleClose">
3   - <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
  3 + <el-form ref="form" :model="formData" :rules="rules" label-width="120px" class="text-left">
4 4 <el-form-item :label="$t('paymentPool.add.paymentName')" prop="paymentName">
5 5 <el-input v-model="formData.paymentName" :placeholder="$t('paymentPool.add.paymentNamePlaceholder')" />
6 6 </el-form-item>
... ... @@ -18,7 +18,7 @@
18 18 </el-form-item>
19 19  
20 20 <el-form-item v-if="formData.paymentType === 'WECHAT'" :label="$t('paymentPool.add.certFile')">
21   - <upload-file ref="uploadFile" :call-back-listener="'addPaymentPool'" :call-back-function="'notifyCert'" />
  21 + <upload-file ref="uploadFile" @notify="handleNotifyCert" />
22 22 </el-form-item>
23 23  
24 24 <el-form-item :label="$t('paymentPool.add.payRange')" prop="payType">
... ... @@ -56,8 +56,8 @@
56 56 </template>
57 57  
58 58 <script>
59   -import { savePaymentPool, listPaymentKey, listFeeConfigs,listPaymentAdapt } from '@/api/system/paymentPoolApi'
60   -import UploadFile from '@/components/upload/FileUpload'
  59 +import { savePaymentPool, listPaymentKey, listFeeConfigs, listPaymentAdapt } from '@/api/system/paymentPoolApi'
  60 +import UploadFile from '@/components/upload/uploadFile'
61 61 import { getCommunityId } from '@/api/community/communityApi'
62 62  
63 63 export default {
... ... @@ -108,7 +108,6 @@ export default {
108 108 created() {
109 109 this.formData.communityId = getCommunityId()
110 110 this.getPaymentTypes()
111   - this.$on('notifyCert', this.handleNotifyCert)
112 111 },
113 112 methods: {
114 113 open() {
... ... @@ -185,7 +184,7 @@ export default {
185 184 try {
186 185 const params = {
187 186 ...this.formData,
188   - values: this.paymentKeys.map(item => ({
  187 + paymentKeys: this.paymentKeys.map(item => ({
189 188 columnKey: item.columnKey,
190 189 columnValue: item.columnValue
191 190 }))
... ...
src/components/system/contractDetailChange.vue
1 1 <template>
2 2 <div class="contract-detail-change">
3   - <el-table
4   - :data="contractDetailChangeInfo.contracts"
5   - border
6   - style="width: 100%"
7   - v-loading="loading">
8   - <el-table-column
9   - prop="contractName"
10   - :label="$t('contractDetailChange.contractName')"
11   - align="center">
  3 + <el-table :data="contractDetailChangeInfo.contracts" border style="width: 100%" v-loading="loading">
  4 + <el-table-column prop="contractName" :label="$t('contractDetailChange.contractName')" align="center">
12 5 </el-table-column>
13   - <el-table-column
14   - prop="contractCode"
15   - :label="$t('contractDetailChange.contractCode')"
16   - align="center">
  6 + <el-table-column prop="contractCode" :label="$t('contractDetailChange.contractCode')" align="center">
17 7 </el-table-column>
18   - <el-table-column
19   - prop="contractTypeName"
20   - :label="$t('contractDetailChange.contractTypeName')"
21   - align="center">
  8 + <el-table-column prop="contractTypeName" :label="$t('contractDetailChange.contractTypeName')" align="center">
22 9 </el-table-column>
23   - <el-table-column
24   - prop="partyA"
25   - :label="$t('contractDetailChange.partyA')"
26   - align="center">
  10 + <el-table-column prop="partyA" :label="$t('contractDetailChange.partyA')" align="center">
27 11 </el-table-column>
28   - <el-table-column
29   - prop="partyB"
30   - :label="$t('contractDetailChange.partyB')"
31   - align="center">
  12 + <el-table-column prop="partyB" :label="$t('contractDetailChange.partyB')" align="center">
32 13 </el-table-column>
33   - <el-table-column
34   - prop="planTypeName"
35   - :label="$t('contractDetailChange.planTypeName')"
36   - align="center">
  14 + <el-table-column prop="planTypeName" :label="$t('contractDetailChange.planTypeName')" align="center">
37 15 </el-table-column>
38   - <el-table-column
39   - prop="changePersonName"
40   - :label="$t('contractDetailChange.changePersonName')"
41   - align="center">
  16 + <el-table-column prop="changePersonName" :label="$t('contractDetailChange.changePersonName')" align="center">
42 17 </el-table-column>
43   - <el-table-column
44   - prop="createTime"
45   - :label="$t('contractDetailChange.createTime')"
46   - align="center">
  18 + <el-table-column prop="createTime" :label="$t('contractDetailChange.createTime')" align="center">
47 19 </el-table-column>
48   - <el-table-column
49   - prop="remark"
50   - :label="$t('contractDetailChange.remark')"
51   - align="center">
  20 + <el-table-column prop="remark" :label="$t('contractDetailChange.remark')" align="center">
52 21 </el-table-column>
53   - <el-table-column
54   - prop="stateName"
55   - :label="$t('contractDetailChange.stateName')"
56   - align="center">
  22 + <el-table-column prop="stateName" :label="$t('contractDetailChange.stateName')" align="center">
57 23 </el-table-column>
58   - <el-table-column
59   - :label="$t('contractDetailChange.operation')"
60   - align="center"
61   - width="120">
  24 + <el-table-column :label="$t('contractDetailChange.operation')" align="center" width="120">
62 25 <template slot-scope="scope">
63   - <el-button
64   - size="mini"
65   - type="primary"
66   - @click="_toContractDetails(scope.row)">
  26 + <el-button size="mini" type="primary" @click="_toContractDetails(scope.row)">
67 27 {{ $t('contractDetailChange.detail') }}
68 28 </el-button>
69 29 </template>
70 30 </el-table-column>
71 31 </el-table>
72 32  
73   - <el-pagination
74   - @size-change="handleSizeChange"
75   - @current-change="handleCurrentChange"
76   - :current-page="page.current"
77   - :page-sizes="[10, 20, 30, 50]"
78   - :page-size="page.size"
79   - layout="total, sizes, prev, pager, next, jumper"
  33 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
  34 + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
80 35 :total="page.total">
81 36 </el-pagination>
82 37 </div>
... ... @@ -127,7 +82,7 @@ export default {
127 82 contractCode: this.contractDetailChangeInfo.contractCode,
128 83 staffNameLike: this.contractDetailChangeInfo.staffNameLike
129 84 }
130   -
  85 +
131 86 const { data, total } = await queryContractChangePlan(params)
132 87 this.contractDetailChangeInfo.contracts = data
133 88 this.page.total = total
... ... @@ -139,7 +94,7 @@ export default {
139 94 },
140 95 _toContractDetails(contract) {
141 96 this.$router.push({
142   - path: '/admin/contractChangeDetails',
  97 + path: '/views/contract/contractChangeDetails',
143 98 query: { planId: contract.planId }
144 99 })
145 100 },
... ...
src/components/system/editPaymentPool.vue
1 1 <template>
2 2 <el-dialog :title="$t('paymentPool.edit.title')" :visible.sync="visible" width="50%" @close="handleClose">
3   - <el-form ref="form" :model="formData" :rules="rules" label-width="120px">
  3 + <el-form ref="form" :model="formData" :rules="rules" label-width="120px" class="text-left">
4 4 <el-form-item :label="$t('paymentPool.edit.paymentName')" prop="paymentName">
5 5 <el-input v-model="formData.paymentName" :placeholder="$t('paymentPool.edit.paymentNamePlaceholder')" />
6 6 </el-form-item>
... ... @@ -18,7 +18,7 @@
18 18 </el-form-item>
19 19  
20 20 <el-form-item v-if="formData.paymentType === 'WECHAT'" :label="$t('paymentPool.edit.certFile')">
21   - <upload-file ref="uploadFile" :call-back-listener="'editPaymentPool'" :call-back-function="'notifyCert'" />
  21 + <upload-file ref="uploadFile" @notify="handleNotifyCert" />
22 22 <div v-if="formData.certPath" class="cert-tip">
23 23 {{ $t('paymentPool.edit.currentCert') }}: {{ formData.certPath }}
24 24 </div>
... ... @@ -66,8 +66,8 @@
66 66 </template>
67 67  
68 68 <script>
69   -import { updatePaymentPool, listPaymentKey, listFeeConfigs, getPaymentPoolDetail,listPaymentAdapt } from '@/api/system/paymentPoolApi'
70   -import UploadFile from '@/components/upload/FileUpload'
  69 +import { updatePaymentPool, listPaymentKey, listFeeConfigs, getPaymentPoolDetail, listPaymentAdapt } from '@/api/system/paymentPoolApi'
  70 +import UploadFile from '@/components/upload/uploadFile'
71 71 import { getCommunityId } from '@/api/community/communityApi'
72 72  
73 73 export default {
... ... @@ -109,7 +109,6 @@ export default {
109 109 created() {
110 110 this.formData.communityId = getCommunityId()
111 111 this.getPaymentTypes()
112   - this.$on('notifyCert', this.handleNotifyCert)
113 112 },
114 113 methods: {
115 114 open(row) {
... ... @@ -232,7 +231,7 @@ export default {
232 231 try {
233 232 const params = {
234 233 ...this.formData,
235   - values: this.paymentKeys.map(item => ({
  234 + paymentKeys: this.paymentKeys.map(item => ({
236 235 columnKey: item.columnKey,
237 236 columnValue: item.columnValue
238 237 }))
... ...
src/components/system/feeConfigDetailHis.vue
1 1 <template>
2 2 <div class="fee-config-detail-his">
3   - <el-table
4   - :data="feeConfigDetailHisInfo.feeDetails"
5   - border
6   - style="width: 100%"
7   - v-loading="loading">
8   - <el-table-column
9   - prop="feeTypeCdName"
10   - :label="$t('feeConfigDetailHis.feeTypeCdName')"
11   - align="center">
12   - </el-table-column>
13   - <el-table-column
14   - prop="feeName"
15   - :label="$t('feeConfigDetailHis.feeName')"
16   - align="center">
17   - </el-table-column>
18   - <el-table-column
19   - prop="feeFlagName"
20   - :label="$t('feeConfigDetailHis.feeFlagName')"
21   - align="center">
22   - </el-table-column>
23   - <el-table-column
24   - prop="billTypeName"
25   - :label="$t('feeConfigDetailHis.billTypeName')"
26   - align="center">
27   - </el-table-column>
28   - <el-table-column
29   - :label="$t('feeConfigDetailHis.paymentCd')"
30   - align="center">
  3 + <el-table :data="feeConfigDetailHisInfo.feeDetails" border style="width: 100%" v-loading="loading">
  4 + <el-table-column prop="feeTypeCdName" :label="$t('feeConfigDetailHis.feeTypeCdName')" align="center">
  5 + </el-table-column>
  6 + <el-table-column prop="feeName" :label="$t('feeConfigDetailHis.feeName')" align="center">
  7 + </el-table-column>
  8 + <el-table-column prop="feeFlagName" :label="$t('feeConfigDetailHis.feeFlagName')" align="center">
  9 + </el-table-column>
  10 + <el-table-column prop="billTypeName" :label="$t('feeConfigDetailHis.billTypeName')" align="center">
  11 + </el-table-column>
  12 + <el-table-column :label="$t('feeConfigDetailHis.paymentCd')" align="center">
31 13 <template slot-scope="scope">
32   - {{ scope.row.paymentCd === '1200' ? $t('feeConfigDetailHis.prePayment') : $t('feeConfigDetailHis.postPayment') }}
  14 + {{ scope.row.paymentCd === '1200' ? $t('feeConfigDetailHis.prePayment') : $t('feeConfigDetailHis.postPayment')
  15 + }}
33 16 </template>
34 17 </el-table-column>
35   - <el-table-column
36   - prop="paymentCycle"
37   - :label="$t('feeConfigDetailHis.paymentCycle')"
38   - align="center">
  18 + <el-table-column prop="paymentCycle" :label="$t('feeConfigDetailHis.paymentCycle')" align="center">
39 19 </el-table-column>
40   - <el-table-column
41   - :label="$t('feeConfigDetailHis.validityPeriod')"
42   - align="center">
  20 + <el-table-column :label="$t('feeConfigDetailHis.validityPeriod')" align="center">
43 21 <template slot-scope="scope">
44 22 <div>{{ scope.row.startTime }}</div>
45 23 <div>{{ scope.row.endTime }}</div>
46 24 </template>
47 25 </el-table-column>
48   - <el-table-column
49   - :label="$t('feeConfigDetailHis.squarePrice')"
50   - align="center">
  26 + <el-table-column :label="$t('feeConfigDetailHis.squarePrice')" align="center">
51 27 <template slot-scope="scope">
52 28 {{ scope.row.computingFormula === '2002' ? '-' : scope.row.squarePrice }}
53 29 </template>
54 30 </el-table-column>
55   - <el-table-column
56   - prop="additionalAmount"
57   - :label="$t('feeConfigDetailHis.additionalAmount')"
58   - align="center">
  31 + <el-table-column prop="additionalAmount" :label="$t('feeConfigDetailHis.additionalAmount')" align="center">
59 32 </el-table-column>
60   - <el-table-column
61   - :label="$t('feeConfigDetailHis.deductFrom')"
62   - align="center">
  33 + <el-table-column :label="$t('feeConfigDetailHis.deductFrom')" align="center">
63 34 <template slot-scope="scope">
64 35 {{ scope.row.deductFrom === 'Y' ? $t('common.yes') : $t('common.no') }}
65 36 </template>
66 37 </el-table-column>
67   - <el-table-column
68   - :label="$t('feeConfigDetailHis.payOnline')"
69   - align="center">
  38 + <el-table-column :label="$t('feeConfigDetailHis.payOnline')" align="center">
70 39 <template slot-scope="scope">
71 40 {{ scope.row.payOnline === 'Y' ? $t('common.yes') : $t('common.no') }}
72 41 </template>
73 42 </el-table-column>
74   - <el-table-column
75   - :label="$t('feeConfigDetailHis.scale')"
76   - align="center">
  43 + <el-table-column :label="$t('feeConfigDetailHis.scale')" align="center">
77 44 <template slot-scope="scope">
78 45 <div v-if="scope.row.scale === '1'">{{ $t('feeConfigDetailHis.round') }}</div>
79 46 <div v-if="scope.row.scale === '3'">{{ $t('feeConfigDetailHis.roundUp') }}</div>
80 47 <div v-if="scope.row.scale === '4'">{{ $t('feeConfigDetailHis.roundDown') }}</div>
81 48 </template>
82 49 </el-table-column>
83   - <el-table-column
84   - prop="decimalPlace"
85   - :label="$t('feeConfigDetailHis.decimalPlace')"
86   - align="center">
  50 + <el-table-column prop="decimalPlace" :label="$t('feeConfigDetailHis.decimalPlace')" align="center">
87 51 </el-table-column>
88   - <el-table-column
89   - :label="$t('feeConfigDetailHis.operate')"
90   - align="center">
  52 + <el-table-column :label="$t('feeConfigDetailHis.operate')" align="center">
91 53 <template slot-scope="scope">
92 54 {{ _getHisConfigOperate(scope.row) }}
93 55 </template>
94 56 </el-table-column>
95   - <el-table-column
96   - prop="userName"
97   - :label="$t('feeConfigDetailHis.userName')"
98   - align="center">
  57 + <el-table-column prop="userName" :label="$t('feeConfigDetailHis.userName')" align="center">
99 58 <template slot-scope="scope">
100 59 {{ scope.row.userName || '-' }}
101 60 </template>
102 61 </el-table-column>
103   - <el-table-column
104   - prop="createTime"
105   - :label="$t('feeConfigDetailHis.createTime')"
106   - align="center">
  62 + <el-table-column prop="createTime" :label="$t('feeConfigDetailHis.createTime')" align="center">
107 63 <template slot-scope="scope">
108 64 {{ scope.row.createTime || '-' }}
109 65 </template>
110 66 </el-table-column>
111 67 </el-table>
112 68  
113   - <el-pagination
114   - @size-change="handleSizeChange"
115   - @current-change="handleCurrentChange"
116   - :current-page="page.current"
117   - :page-sizes="[10, 20, 30, 50]"
118   - :page-size="page.size"
119   - layout="total, sizes, prev, pager, next, jumper"
  69 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
  70 + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
120 71 :total="page.total">
121 72 </el-pagination>
122 73 </div>
... ... @@ -124,6 +75,7 @@
124 75  
125 76 <script>
126 77 import { queryHisFeeConfig } from '@/api/system/operateDataLogApi'
  78 +import { getCommunityId } from '@/api/community/communityApi'
127 79  
128 80 export default {
129 81 name: 'FeeConfigDetailHis',
... ... @@ -163,9 +115,10 @@ export default {
163 115 staffNameLike: this.feeConfigDetailHisInfo.staffNameLike,
164 116 feeNameLike: this.feeConfigDetailHisInfo.feeNameLike,
165 117 logStartTime: this.feeConfigDetailHisInfo.logStartTime,
166   - logEndTime: this.feeConfigDetailHisInfo.logEndTime
  118 + logEndTime: this.feeConfigDetailHisInfo.logEndTime,
  119 + communityId: getCommunityId()
167 120 }
168   -
  121 +
169 122 const { data, total } = await queryHisFeeConfig(params)
170 123 this.feeConfigDetailHisInfo.feeDetails = data
171 124 this.page.total = total
... ... @@ -177,13 +130,13 @@ export default {
177 130 },
178 131 _getHisConfigOperate(fee) {
179 132 const feeCount = this.feeConfigDetailHisInfo.feeDetails.filter(item => item.bId === fee.bId).length
180   -
  133 +
181 134 if (feeCount <= 1) {
182 135 if (fee.operate === 'ADD') return this.$t('feeConfigDetailHis.add')
183 136 if (fee.operate === 'DEL') return this.$t('feeConfigDetailHis.delete')
184 137 return '-'
185 138 }
186   -
  139 +
187 140 if (fee.operate === 'ADD') return this.$t('feeConfigDetailHis.modifyNew')
188 141 if (fee.operate === 'DEL') return this.$t('feeConfigDetailHis.modifyOld')
189 142 return '-'
... ...
src/components/system/feeDetailHis.vue
1 1 <template>
2 2 <div class="fee-detail-his">
3   - <el-table
4   - :data="feeDetailHisInfo.fees"
5   - border
6   - style="width: 100%"
7   - v-loading="loading">
8   - <el-table-column
9   - :label="$t('feeDetailHis.feeName')"
10   - align="center">
  3 + <el-table :data="feeDetailHisInfo.fees" border style="width: 100%" v-loading="loading">
  4 + <el-table-column :label="$t('feeDetailHis.feeName')" align="center">
11 5 <template slot-scope="scope">
12 6 {{ scope.row.feeName }}
13 7 <span v-if="scope.row.payerObjName">({{ scope.row.payerObjName }})</span>
14 8 </template>
15 9 </el-table-column>
16   - <el-table-column
17   - :label="$t('feeDetailHis.startTime')"
18   - align="center">
  10 + <el-table-column :label="$t('feeDetailHis.startTime')" align="center">
19 11 <template slot-scope="scope">
20 12 {{ scope.row.startTime || '-' }}
21 13 </template>
22 14 </el-table-column>
23   - <el-table-column
24   - :label="$t('feeDetailHis.endTime')"
25   - align="center">
  15 + <el-table-column :label="$t('feeDetailHis.endTime')" align="center">
26 16 <template slot-scope="scope">
27 17 {{ scope.row.endTime || '-' }}
28 18 </template>
29 19 </el-table-column>
30   - <el-table-column
31   - :label="$t('feeDetailHis.operate')"
32   - align="center">
  20 + <el-table-column :label="$t('feeDetailHis.operate')" align="center">
33 21 <template slot-scope="scope">
34 22 {{ _getFeeHisOperate(scope.row) }}
35 23 </template>
36 24 </el-table-column>
37   - <el-table-column
38   - :label="$t('feeDetailHis.userName')"
39   - align="center">
  25 + <el-table-column :label="$t('feeDetailHis.userName')" align="center">
40 26 <template slot-scope="scope">
41 27 {{ scope.row.userName || '-' }}
42 28 </template>
43 29 </el-table-column>
44   - <el-table-column
45   - :label="$t('feeDetailHis.createTime')"
46   - align="center">
  30 + <el-table-column :label="$t('feeDetailHis.createTime')" align="center">
47 31 <template slot-scope="scope">
48 32 {{ scope.row.createTime }}
49 33 </template>
50 34 </el-table-column>
51 35 </el-table>
52 36  
53   - <el-pagination
54   - @size-change="handleSizeChange"
55   - @current-change="handleCurrentChange"
56   - :current-page="page.current"
57   - :page-sizes="[10, 20, 30, 50]"
58   - :page-size="page.size"
59   - layout="total, sizes, prev, pager, next, jumper"
  37 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
  38 + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
60 39 :total="page.total">
61 40 </el-pagination>
62 41 </div>
... ... @@ -64,6 +43,7 @@
64 43  
65 44 <script>
66 45 import { queryHisFee } from '@/api/system/operateDataLogApi'
  46 +import { getCommunityId } from '@/api/community/communityApi'
67 47  
68 48 export default {
69 49 name: 'FeeDetailHis',
... ... @@ -105,9 +85,10 @@ export default {
105 85 feeNameLike: this.feeDetailHisInfo.feeNameLike,
106 86 payerObjName: this.feeDetailHisInfo.payerObjName,
107 87 logStartTime: this.feeDetailHisInfo.logStartTime,
108   - logEndTime: this.feeDetailHisInfo.logEndTime
  88 + logEndTime: this.feeDetailHisInfo.logEndTime,
  89 + communityId: getCommunityId()
109 90 }
110   -
  91 +
111 92 const { data, total } = await queryHisFee(params)
112 93 this.feeDetailHisInfo.fees = data
113 94 this.page.total = total
... ... @@ -119,13 +100,13 @@ export default {
119 100 },
120 101 _getFeeHisOperate(fee) {
121 102 const feeCount = this.feeDetailHisInfo.fees.filter(item => item.bId === fee.bId).length
122   -
  103 +
123 104 if (feeCount <= 1) {
124 105 if (fee.operate === 'ADD') return this.$t('feeDetailHis.add')
125 106 if (fee.operate === 'DEL') return this.$t('feeDetailHis.delete')
126 107 return '-'
127 108 }
128   -
  109 +
129 110 if (fee.operate === 'ADD') return this.$t('feeDetailHis.modifyNew')
130 111 if (fee.operate === 'DEL') return this.$t('feeDetailHis.modifyOld')
131 112 return '-'
... ...
src/components/system/roomDetailHis.vue
1 1 <template>
2 2 <div class="room-detail-his">
3   - <el-table
4   - :data="roomDetailHisInfo.rooms"
5   - border
6   - style="width: 100%"
7   - v-loading="loading">
8   - <el-table-column
9   - :label="$t('roomDetailHis.operate')"
10   - align="center">
  3 + <el-table :data="roomDetailHisInfo.rooms" border style="width: 100%" v-loading="loading">
  4 + <el-table-column :label="$t('roomDetailHis.operate')" align="center">
11 5 <template slot-scope="scope">
12 6 {{ _getRoomHisOperate(scope.row) }}
13 7 </template>
14 8 </el-table-column>
15   - <el-table-column
16   - :label="$t('roomDetailHis.userName')"
17   - align="center">
  9 + <el-table-column :label="$t('roomDetailHis.userName')" align="center">
18 10 <template slot-scope="scope">
19 11 {{ scope.row.userName || '-' }}
20 12 </template>
21 13 </el-table-column>
22   - <el-table-column
23   - :label="$t('roomDetailHis.createTime')"
24   - align="center">
  14 + <el-table-column :label="$t('roomDetailHis.createTime')" align="center">
25 15 <template slot-scope="scope">
26 16 {{ scope.row.createTime }}
27 17 </template>
28 18 </el-table-column>
29   - <el-table-column
30   - :label="$t('roomDetailHis.roomNum')"
31   - align="center">
  19 + <el-table-column :label="$t('roomDetailHis.roomNum')" align="center">
32 20 <template slot-scope="scope">
33 21 {{ scope.row.floorNum }}-{{ scope.row.unitNum }}-{{ scope.row.roomNum }}
34 22 </template>
35 23 </el-table-column>
36   - <el-table-column
37   - :label="$t('roomDetailHis.layer')"
38   - align="center">
  24 + <el-table-column :label="$t('roomDetailHis.layer')" align="center">
39 25 <template slot-scope="scope">
40 26 {{ scope.row.layer }}
41 27 </template>
42 28 </el-table-column>
43   - <el-table-column
44   - :label="$t('roomDetailHis.roomSubTypeName')"
45   - align="center">
  29 + <el-table-column :label="$t('roomDetailHis.roomSubTypeName')" align="center">
46 30 <template slot-scope="scope">
47 31 {{ scope.row.roomSubTypeName }}
48 32 </template>
49 33 </el-table-column>
50   - <el-table-column
51   - :label="$t('roomDetailHis.area')"
52   - align="center">
  34 + <el-table-column :label="$t('roomDetailHis.area')" align="center">
53 35 <template slot-scope="scope">
54 36 {{ scope.row.builtUpArea }}/{{ scope.row.roomArea }}
55 37 </template>
56 38 </el-table-column>
57   - <el-table-column
58   - :label="$t('roomDetailHis.roomRent')"
59   - align="center">
  39 + <el-table-column :label="$t('roomDetailHis.roomRent')" align="center">
60 40 <template slot-scope="scope">
61 41 {{ scope.row.roomRent }}
62 42 </template>
63 43 </el-table-column>
64   - <el-table-column
65   - :label="$t('roomDetailHis.stateName')"
66   - align="center">
  44 + <el-table-column :label="$t('roomDetailHis.stateName')" align="center">
67 45 <template slot-scope="scope">
68 46 {{ scope.row.stateName }}
69 47 </template>
70 48 </el-table-column>
71 49 </el-table>
72 50  
73   - <el-pagination
74   - @size-change="handleSizeChange"
75   - @current-change="handleCurrentChange"
76   - :current-page="page.current"
77   - :page-sizes="[10, 20, 30, 50]"
78   - :page-size="page.size"
79   - layout="total, sizes, prev, pager, next, jumper"
  51 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page.current"
  52 + :page-sizes="[10, 20, 30, 50]" :page-size="page.size" layout="total, sizes, prev, pager, next, jumper"
80 53 :total="page.total">
81 54 </el-pagination>
82 55 </div>
... ... @@ -84,6 +57,7 @@
84 57  
85 58 <script>
86 59 import { queryHisRoom } from '@/api/system/operateDataLogApi'
  60 +import { getCommunityId } from '@/api/community/communityApi'
87 61  
88 62 export default {
89 63 name: 'RoomDetailHis',
... ... @@ -125,9 +99,10 @@ export default {
125 99 logStartTime: this.roomDetailHisInfo.logStartTime,
126 100 logEndTime: this.roomDetailHisInfo.logEndTime,
127 101 staffNameLike: this.roomDetailHisInfo.staffNameLike,
128   - payerObjName: this.roomDetailHisInfo.payerObjName
  102 + payerObjName: this.roomDetailHisInfo.payerObjName,
  103 + communityId: getCommunityId()
129 104 }
130   -
  105 +
131 106 const { data, total } = await queryHisRoom(params)
132 107 this.roomDetailHisInfo.rooms = data
133 108 this.page.total = total
... ... @@ -139,13 +114,13 @@ export default {
139 114 },
140 115 _getRoomHisOperate(room) {
141 116 const roomCount = this.roomDetailHisInfo.rooms.filter(item => item.bId === room.bId).length
142   -
  117 +
143 118 if (roomCount <= 1) {
144 119 if (room.operate === 'ADD') return this.$t('roomDetailHis.add')
145 120 if (room.operate === 'DEL') return this.$t('roomDetailHis.delete')
146 121 return '-'
147 122 }
148   -
  123 +
149 124 if (room.operate === 'ADD') return this.$t('roomDetailHis.modifyNew')
150 125 if (room.operate === 'DEL') return this.$t('roomDetailHis.modifyOld')
151 126 return '-'
... ...
src/components/upload/FileUpload.vue
1 1 <!-- src/components/upload/FileUpload.vue -->
2 2 <template>
3   - <div>
4   - <el-upload
5   - :action="uploadUrl"
6   - :headers="headers"
7   - :on-success="handleSuccess"
8   - :on-error="handleError"
9   - :show-file-list="false"
10   - :before-upload="beforeUpload"
11   - name="uploadFile"
12   - >
13   - <el-button size="small" type="primary">{{ $t('common.upload') }}</el-button>
14   - <span v-if="value" style="margin-left: 10px">
15   - {{ fileName }}
16   - <el-button type="text" @click.stop="downloadFile">
17   - <i class="el-icon-download"></i>
18   - </el-button>
19   - <el-button type="text" @click.stop="removeFile">
20   - <i class="el-icon-delete"></i>
21   - </el-button>
22   - </span>
23   - </el-upload>
24   - </div>
25   - </template>
26   -
27   - <script>
28   - import {getHeader} from '@/utils/header'
29   - export default {
30   - name: 'FileUpload',
31   - props: {
32   - value: {
33   - type: String,
34   - default: ''
35   - }
  3 + <div>
  4 + <el-upload :action="uploadUrl" :headers="headers" :on-success="handleSuccess" :on-error="handleError"
  5 + :show-file-list="false" :before-upload="beforeUpload" name="uploadFile">
  6 + <el-button size="small" type="primary">{{ $t('common.upload') }}</el-button>
  7 + <span v-if="value" style="margin-left: 10px">
  8 + {{ fileName }}
  9 + <el-button type="text" @click.stop="downloadFile">
  10 + <i class="el-icon-download"></i>
  11 + </el-button>
  12 + <el-button type="text" @click.stop="removeFile">
  13 + <i class="el-icon-delete"></i>
  14 + </el-button>
  15 + </span>
  16 + </el-upload>
  17 + </div>
  18 +</template>
  19 +
  20 +<script>
  21 +import { getHeader } from '@/utils/header'
  22 +export default {
  23 + name: 'FileUpload',
  24 + props: {
  25 + value: {
  26 + type: String,
  27 + default: ''
  28 + }
  29 + },
  30 + data() {
  31 + return {
  32 + uploadUrl: '/upload/uploadFile'
  33 + }
  34 + },
  35 + computed: {
  36 + fileName() {
  37 + return this.value ? this.value.split('/').pop() : ''
36 38 },
37   - data() {
38   - return {
39   - uploadUrl: '/upload/uploadFile'
  39 + headers() {
  40 + return getHeader()
  41 + }
  42 + },
  43 + methods: {
  44 + handleSuccess(response, file) {
  45 + console.log('Upload file:', file)
  46 + if (response.code == 0) {
  47 + const fileUrl = response.url || response.path
  48 + this.$emit('input', fileUrl)
  49 + this.$emit('success', fileUrl)
  50 + this.$message.success(this.$t('upload.success'))
  51 + } else {
  52 + this.$message.error(response.msg || this.$t('upload.error'))
40 53 }
41 54 },
42   - computed: {
43   - fileName() {
44   - return this.value ? this.value.split('/').pop() : ''
45   - },
46   - headers() {
47   - return getHeader()
48   - }
  55 + handleError(err) {
  56 + console.error('Upload error:', err)
  57 + this.$message.error(this.$t('upload.error'))
49 58 },
50   - methods: {
51   - handleSuccess(response, file) {
52   - console.log('Upload file:', file)
53   - if (response.code == 0) {
54   - const fileUrl = response.url || response.path
55   - this.$emit('input', fileUrl)
56   - this.$emit('success', fileUrl)
57   - this.$message.success(this.$t('upload.success'))
58   - } else {
59   - this.$message.error(response.msg || this.$t('upload.error'))
60   - }
61   - },
62   - handleError(err) {
63   - console.error('Upload error:', err)
64   - this.$message.error(this.$t('upload.error'))
65   - },
66   - beforeUpload(file) {
67   - const isLt10M = file.size / 1024 / 1024 < 10
68   - if (!isLt10M) {
69   - this.$message.error(this.$t('upload.sizeLimit'))
70   - }
71   - return isLt10M
72   - },
73   - removeFile() {
74   - this.$confirm(this.$t('common.confirmDelete'), this.$t('common.tip'), {
75   - type: 'warning'
76   - }).then(() => {
77   - this.$emit('input', '')
78   - this.$emit('remove')
79   - }).catch(() => {})
80   - },
81   - downloadFile() {
82   - window.open(this.value, '_blank')
  59 + beforeUpload(file) {
  60 + const isLt10M = file.size / 1024 / 1024 < 10
  61 + if (!isLt10M) {
  62 + this.$message.error(this.$t('upload.sizeLimit'))
83 63 }
  64 + return isLt10M
  65 + },
  66 + removeFile() {
  67 + this.$confirm(this.$t('common.confirmDelete'), this.$t('common.tip'), {
  68 + type: 'warning'
  69 + }).then(() => {
  70 + this.$emit('input', '')
  71 + this.$emit('remove')
  72 + }).catch(() => { })
  73 + },
  74 + downloadFile() {
  75 + window.open(this.value, '_blank')
84 76 }
85 77 }
86   - </script>
87 78 \ No newline at end of file
  79 +}
  80 +</script>
88 81 \ No newline at end of file
... ...
src/i18n/userI18n.js
... ... @@ -10,6 +10,7 @@ import { messages as workflowManageMessages } from &#39;../views/system/workflowMana
10 10 import { messages as workflowSettingManageMessages } from '../views/system/workflowSettingManageLang'
11 11 import { messages as ownerDetailMessages } from '../views/owner/ownerDetailLang'
12 12 import { messages as auditAuthOwnerUndoMessages } from '../views/owner/auditAuthOwnerUndoLang'
  13 +import { messages as scheduleClassesStaffManageMessages } from '../views/org/scheduleClassesStaffManageLang'
13 14  
14 15 export const messages = {
15 16 en: {
... ... @@ -25,6 +26,7 @@ export const messages = {
25 26 ...workflowSettingManageMessages.en,
26 27 ...ownerDetailMessages.en,
27 28 ...auditAuthOwnerUndoMessages.en,
  29 + ...scheduleClassesStaffManageMessages.en,
28 30 },
29 31 zh: {
30 32 ...staffCommunityMessages.zh,
... ... @@ -39,5 +41,6 @@ export const messages = {
39 41 ...workflowSettingManageMessages.zh,
40 42 ...ownerDetailMessages.zh,
41 43 ...auditAuthOwnerUndoMessages.zh,
  44 + ...scheduleClassesStaffManageMessages.zh,
42 45 }
43 46 }
44 47 \ No newline at end of file
... ...
src/router/userRouter.js
... ... @@ -45,8 +45,13 @@ export default [
45 45 component: () => import('@/views/owner/ownerDetail.vue')
46 46 },
47 47 {
48   - path:'/views/owner/auditAuthOwnerUndo',
49   - name:'/views/owner/auditAuthOwnerUndo',
  48 + path: '/views/owner/auditAuthOwnerUndo',
  49 + name: '/views/owner/auditAuthOwnerUndo',
50 50 component: () => import('@/views/owner/auditAuthOwnerUndoList.vue')
51   - },
  51 + },
  52 + {
  53 + path: '/views/org/scheduleClassesStaffManage',
  54 + name: '/views/org/scheduleClassesStaffManage',
  55 + component: () => import('@/views/org/scheduleClassesStaffManageList.vue')
  56 + },
52 57 ]
53 58 \ No newline at end of file
... ...
src/views/org/classesManageList.vue
1 1 <template>
2   - <div class="classes-manage-container">
  2 + <div class="classes-manage-container padding">
3 3 <!-- 查询条件 -->
4 4 <el-card class="search-wrapper">
5 5 <div slot="header" class="text-left">
... ... @@ -189,7 +189,7 @@ export default {
189 189  
190 190 <style lang="scss" scoped>
191 191 .classes-manage-container {
192   - padding: 0;
  192 +
193 193 margin: 0;
194 194  
195 195 .search-wrapper {
... ...
src/views/org/editScheduleClassesList.vue
1 1 <template>
2 2 <div class="edit-schedule-classes-container">
3 3 <el-card class="box-card">
4   - <div slot="header" class="clearfix">
5   - <h5>{{ $t('editScheduleClasses.title') }}</h5>
  4 + <div slot="header" class="flex justify-between">
  5 + <span>{{ $t('editScheduleClasses.title') }}</span>
6 6 </div>
7 7 <el-row :gutter="20">
8 8 <el-col :span="24">
... ...
src/views/org/orgList.vue
... ... @@ -95,8 +95,8 @@ export default {
95 95 orgId: this.orgId,
96 96 staffName: this.staffName.trim(),
97 97 };
98   - const {data,total} = await listStaffs( params );
99   - this.staffs = data;
  98 + const {staffs,total} = await listStaffs( params );
  99 + this.staffs = staffs;
100 100 this.total = total;
101 101 } catch (error) {
102 102 console.error('Failed to fetch staffs:', error);
... ...
src/views/org/scheduleClassesList.vue
... ... @@ -168,7 +168,7 @@ export default {
168 168 })
169 169 },
170 170 handleStaff(row) {
171   - this.$router.push(`/org/scheduleClassesStaffManage?scheduleId=${row.scheduleId}`)
  171 + this.$router.push(`/views/org/scheduleClassesStaffManage?scheduleId=${row.scheduleId}`)
172 172 },
173 173 handleSuccess() {
174 174 this.getList()
... ...
src/views/org/scheduleClassesPageList.vue
... ... @@ -50,22 +50,38 @@
50 50 <div slot="header" class="flex justify-between">
51 51 <span>{{ $t('scheduleClassesPage.scheduleTable') }}</span>
52 52 </div>
53   - <div class="hc-table-div" :style="{ width: _computeTableDivWidth() }">
54   - <el-table :data="scheduleClassesPageInfo.staffs" border style="width: 100%">
55   - <el-table-column prop="staffName" :label="$t('scheduleClassesPage.staffName')" align="center" width="120" />
56   - <el-table-column v-for="index in scheduleClassesPageInfo.maxDay" :key="index"
57   - :label="`${index}${$t('scheduleClassesPage.day')}`" align="center">
58   - <template slot-scope="scope">
59   - <div v-for="(day, dayIndex) in scope.row.days" :key="dayIndex"
60   - class="text-center border padding-lg labeling-strip" style="border-radius: 5px;cursor:pointer">
61   - <div>{{ day.workdayName || $t('scheduleClassesPage.rest') }}</div>
62   - <div v-for="(time, timeIndex) in day.times" :key="timeIndex">
63   - {{ time.startTime }}-{{ time.endTime }}
  53 + <div class="hc-table-div" >
  54 + <table class="custom-table">
  55 + <thead>
  56 + <tr>
  57 + <th
  58 + style=" text-align: center; border: 1px solid #ebeef5; background-color: #fafafa;">
  59 + {{ $t('scheduleClassesPage.staffName') }}
  60 + </th>
  61 + <th v-for="index in scheduleClassesPageInfo.maxDay" :key="index"
  62 + style="text-align: center; border: 1px solid #ebeef5; background-color: #fafafa;">
  63 + {{ index }}{{ $t('scheduleClassesPage.day') }}
  64 + </th>
  65 + </tr>
  66 + </thead>
  67 + <tbody>
  68 + <tr v-for="(staff, staffIndex) in scheduleClassesPageInfo.staffs" :key="staffIndex">
  69 + <td style="text-align: center; border: 1px solid #ebeef5;" class="padding-lg">
  70 + {{ staff.staffName }}
  71 + </td>
  72 + <td v-for="(day, dayIndex) in staff.days" :key="dayIndex"
  73 + style="text-align: center; border: 1px solid #ebeef5; vertical-align: top;">
  74 + <div class="text-center border padding-lg labeling-strip"
  75 + style="border-radius: 5px; cursor: pointer; margin: 2px 0;">
  76 + <div>{{ day.workdayName || $t('scheduleClassesPage.rest') }}</div>
  77 + <div v-for="(time, timeIndex) in day.times" :key="timeIndex">
  78 + {{ time.startTime }}-{{ time.endTime }}
  79 + </div>
64 80 </div>
65   - </div>
66   - </template>
67   - </el-table-column>
68   - </el-table>
  81 + </td>
  82 + </tr>
  83 + </tbody>
  84 + </table>
69 85 </div>
70 86  
71 87 <!-- 分页 -->
... ... @@ -196,11 +212,7 @@ export default {
196 212 this.scheduleClassesPageInfo.conditions.orgId = org.orgId
197 213 this.scheduleClassesPageInfo.conditions.orgName = org.allOrgName
198 214 },
199   - _computeTableDivWidth() {
200   - const mainWidth = document.getElementsByTagName('body')[0].clientWidth -
201   - (document.getElementById('menu-nav').offsetWidth || 0)
202   - return `${mainWidth - 55}px`
203   - },
  215 +
204 216 handleSizeChange(val) {
205 217 this.page.size = val
206 218 this._listStaffScheduleClassess(this.page.current, val)
... ... @@ -225,8 +237,34 @@ export default {
225 237 overflow-x: auto;
226 238 }
227 239  
  240 + .custom-table {
  241 + width: 100%;
  242 + border-collapse: collapse;
  243 + border: 1px solid #ebeef5;
  244 +
  245 + th,
  246 + td {
  247 + border: 1px solid #ebeef5;
  248 + padding: 12px 8px;
  249 + text-align: center;
  250 + }
  251 +
  252 + th {
  253 + background-color: #fafafa;
  254 + font-weight: 500;
  255 + color: #606266;
  256 + }
  257 +
  258 + td {
  259 + background-color: #fff;
  260 + }
  261 +
  262 + tbody tr:hover {
  263 + background-color: #f5f7fa;
  264 + }
  265 + }
  266 +
228 267 .labeling-strip {
229   - padding: 8px;
230 268 margin: 2px;
231 269 border: 1px solid #ebeef5;
232 270 }
... ...
src/views/org/scheduleClassesStaffManageLang.js 0 → 100644
  1 +export const messages = {
  2 + en: {
  3 + scheduleClassesStaffManage: {
  4 + title: 'Shift Staff Management',
  5 + staffId: 'Staff ID',
  6 + staffName: 'Staff Name',
  7 + createTime: 'Create Time',
  8 + addTitle: 'Add Shift Staff',
  9 + selectStaffWarning: 'Please select at least one staff',
  10 + confirmDeleteStaff: 'Are you sure to delete this shift staff?',
  11 + orgInfo: 'Organization Info',
  12 + staffInfo: 'Staff Info',
  13 + selectedStaff: 'Selected Staff',
  14 + staffExists: 'Staff already selected'
  15 + }
  16 + },
  17 + zh: {
  18 + scheduleClassesStaffManage: {
  19 + title: '班次员工管理',
  20 + staffId: '员工ID',
  21 + staffName: '员工名称',
  22 + createTime: '创建时间',
  23 + addTitle: '添加班次员工',
  24 + selectStaffWarning: '请至少选择一名员工',
  25 + confirmDeleteStaff: '确定要删除该班次员工吗?',
  26 + orgInfo: '组织信息',
  27 + staffInfo: '员工信息',
  28 + selectedStaff: '已选员工',
  29 + staffExists: '员工已选择'
  30 + }
  31 + }
  32 +}
0 33 \ No newline at end of file
... ...
src/views/org/scheduleClassesStaffManageList.vue 0 → 100644
  1 +<template>
  2 + <div class="schedule-classes-staff-manage-container">
  3 + <el-card class="box-card">
  4 + <div slot="header" class="flex justify-between">
  5 + <span>{{ $t('scheduleClassesStaffManage.title') }}</span>
  6 + <div class="header-tools">
  7 + <el-button size="small" @click="goBack">{{ $t('common.back') }}</el-button>
  8 + <el-button type="primary" size="small" icon="el-icon-plus" @click="openAddModal">
  9 + {{ $t('common.add') }}
  10 + </el-button>
  11 + </div>
  12 + </div>
  13 +
  14 + <el-table v-loading="loading" :data="tableData" border style="width: 100%">
  15 + <el-table-column prop="staffId" :label="$t('scheduleClassesStaffManage.staffId')" align="center">
  16 + </el-table-column>
  17 + <el-table-column prop="staffName" :label="$t('scheduleClassesStaffManage.staffName')" align="center">
  18 + </el-table-column>
  19 + <el-table-column prop="createTime" :label="$t('scheduleClassesStaffManage.createTime')" align="center">
  20 + </el-table-column>
  21 + <el-table-column :label="$t('common.operation')" align="center" width="150">
  22 + <template slot-scope="scope">
  23 + <el-button size="mini" type="danger" @click="openDeleteModal(scope.row)">
  24 + {{ $t('common.delete') }}
  25 + </el-button>
  26 + </template>
  27 + </el-table-column>
  28 + </el-table>
  29 +
  30 + <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
  31 + :current-page="pagination.current" :page-sizes="[10, 20, 30, 50]" :page-size="pagination.size"
  32 + layout="total, sizes, prev, pager, next, jumper" :total="pagination.total">
  33 + </el-pagination>
  34 + </el-card>
  35 +
  36 + <add-schedule-classes-staff ref="addModal" @success="fetchData" />
  37 + <delete-schedule-classes-staff ref="deleteModal" @success="fetchData" />
  38 + </div>
  39 +</template>
  40 +
  41 +<script>
  42 +import { listScheduleClassesStaff } from '@/api/org/scheduleClassesStaffManageApi'
  43 +import AddScheduleClassesStaff from '@/components/org/addScheduleClassesStaff'
  44 +import DeleteScheduleClassesStaff from '@/components/org/deleteScheduleClassesStaff'
  45 +
  46 +export default {
  47 + name: 'ScheduleClassesStaffManageList',
  48 + components: {
  49 + AddScheduleClassesStaff,
  50 + DeleteScheduleClassesStaff
  51 + },
  52 + data() {
  53 + return {
  54 + loading: false,
  55 + tableData: [],
  56 + pagination: {
  57 + current: 1,
  58 + size: 10,
  59 + total: 0
  60 + },
  61 + queryParams: {
  62 + scheduleId: ''
  63 + }
  64 + }
  65 + },
  66 + created() {
  67 + this.queryParams.scheduleId = this.$route.query.scheduleId
  68 + this.fetchData()
  69 + },
  70 + methods: {
  71 + async fetchData() {
  72 + try {
  73 + this.loading = true
  74 + const params = {
  75 + page: this.pagination.current,
  76 + row: this.pagination.size,
  77 + ...this.queryParams
  78 + }
  79 + const { data, total } = await listScheduleClassesStaff(params)
  80 + this.tableData = data
  81 + this.pagination.total = total
  82 + } catch (error) {
  83 + this.$message.error(this.$t('common.fetchError'))
  84 + } finally {
  85 + this.loading = false
  86 + }
  87 + },
  88 + handleSizeChange(val) {
  89 + this.pagination.size = val
  90 + this.fetchData()
  91 + },
  92 + handleCurrentChange(val) {
  93 + this.pagination.current = val
  94 + this.fetchData()
  95 + },
  96 + goBack() {
  97 + this.$router.go(-1)
  98 + },
  99 + openAddModal() {
  100 + this.$refs.addModal.open(this.queryParams.scheduleId)
  101 + },
  102 + openDeleteModal(row) {
  103 + this.$refs.deleteModal.open(row)
  104 + }
  105 + }
  106 +}
  107 +</script>
  108 +
  109 +<style lang="scss" scoped>
  110 +.schedule-classes-staff-manage-container {
  111 + padding: 20px;
  112 +
  113 + .clearfix {
  114 + display: flex;
  115 + justify-content: space-between;
  116 + align-items: center;
  117 + }
  118 +
  119 + .header-tools {
  120 + display: flex;
  121 + gap: 10px;
  122 + }
  123 +
  124 + .el-pagination {
  125 + margin-top: 20px;
  126 + text-align: right;
  127 + }
  128 +}
  129 +</style>
0 130 \ No newline at end of file
... ...
src/views/scm/communityIntegralList.vue
1 1 <template>
2   - <el-card class="community-integral-container">
3   - <div class="white-bg padding-lg padding-top border-radius">
4   - <div class="flex justify-between">
5   - <h3>{{ $t('communityIntegral.title') }}</h3>
6   - </div>
7   -
8   - <!-- 业主信息 -->
9   - <div class="margin-top">
10   - <el-row>
11   - <el-col :span="8">
12   - <div class="form-group">
13   - <label class="col-form-label">
14   - {{ $t('communityIntegral.accountId') }}
15   - </label>
16   - <label>{{ communityIntegralInfo.integralId }}</label>
17   - </div>
18   - </el-col>
19   - <el-col :span="8">
20   - <div class="form-group">
21   - <label class="col-form-label">
22   - {{ $t('communityIntegral.accountName') }}
23   - </label>
24   - <label>{{ communityIntegralInfo.integralName }}</label>
25   - </div>
26   - </el-col>
27   - <el-col :span="8">
28   - <div class="form-group">
29   - <label class="col-form-label">
30   - {{ $t('communityIntegral.points') }}
31   - </label>
32   - <label>
33   - {{ communityIntegralInfo.amount }}
34   - <el-link type="primary" @click="openApplyWithholdIntegral">{{ $t('communityIntegral.withdraw')
  2 + <div class="community-integral-container ">
  3 + <el-card >
  4 + <div class="white-bg padding-lg padding-top border-radius">
  5 + <div class="flex justify-between">
  6 + <h3>{{ $t('communityIntegral.title') }}</h3>
  7 + </div>
  8 +
  9 + <!-- 业主信息 -->
  10 + <div class="margin-top">
  11 + <el-row>
  12 + <el-col :span="8">
  13 + <div class="form-group">
  14 + <label class="col-form-label">
  15 + {{ $t('communityIntegral.accountId') }}
  16 + </label>
  17 + <label>{{ communityIntegralInfo.integralId }}</label>
  18 + </div>
  19 + </el-col>
  20 + <el-col :span="8">
  21 + <div class="form-group">
  22 + <label class="col-form-label">
  23 + {{ $t('communityIntegral.accountName') }}
  24 + </label>
  25 + <label>{{ communityIntegralInfo.integralName }}</label>
  26 + </div>
  27 + </el-col>
  28 + <el-col :span="8">
  29 + <div class="form-group">
  30 + <label class="col-form-label">
  31 + {{ $t('communityIntegral.points') }}
  32 + </label>
  33 + <label>
  34 + {{ communityIntegralInfo.amount }}
  35 + <el-link type="primary" @click="openApplyWithholdIntegral">{{ $t('communityIntegral.withdraw')
35 36 }}</el-link>
36   - </label>
37   - </div>
38   - </el-col>
39   - </el-row>
  37 + </label>
  38 + </div>
  39 + </el-col>
  40 + </el-row>
  41 + </div>
  42 +
  43 + <divider></divider>
  44 +
  45 + <div class="margin-top-sm">
  46 + <el-tabs v-model="communityIntegralInfo._currentTab"
  47 + @tab-click="changeTab(communityIntegralInfo._currentTab)">
  48 + <el-tab-pane :label="$t('communityIntegral.transactionDetails')" name="communityIntegralDetail">
  49 + <community-integral-detail v-if="communityIntegralInfo._currentTab === 'communityIntegralDetail'"
  50 + ref="communityIntegralDetail" />
  51 + </el-tab-pane>
  52 + <el-tab-pane :label="$t('communityIntegral.pointsWithdrawal')" name="applyWithholdIntegral">
  53 + <apply-withhold-integral v-if="communityIntegralInfo._currentTab === 'applyWithholdIntegral'"
  54 + ref="applyWithholdIntegral" />
  55 + </el-tab-pane>
  56 + </el-tabs>
  57 + </div>
40 58 </div>
41 59  
42   - <el-divider></el-divider>
43   -
44   - <div class="margin-top-sm">
45   - <el-tabs v-model="communityIntegralInfo._currentTab" @tab-click="changeTab(communityIntegralInfo._currentTab)">
46   - <el-tab-pane :label="$t('communityIntegral.transactionDetails')" name="communityIntegralDetail">
47   - <community-integral-detail v-if="communityIntegralInfo._currentTab === 'communityIntegralDetail'"
48   - ref="communityIntegralDetail" />
49   - </el-tab-pane>
50   - <el-tab-pane :label="$t('communityIntegral.pointsWithdrawal')" name="applyWithholdIntegral">
51   - <apply-withhold-integral v-if="communityIntegralInfo._currentTab === 'applyWithholdIntegral'"
52   - ref="applyWithholdIntegral" />
53   - </el-tab-pane>
54   - </el-tabs>
55   - </div>
56   - </div>
57   -
58   - <withhold-integral ref="withholdIntegral" @success="handleWithdrawSuccess" />
59   - </el-card>
  60 + <withhold-integral ref="withholdIntegral" @success="handleWithdrawSuccess" />
  61 + </el-card>
  62 + </div>
60 63 </template>
61 64  
62 65 <script>
... ... @@ -65,13 +68,15 @@ import { queryCommunityIntegral } from &#39;@/api/scm/communityIntegralApi&#39;
65 68 import CommunityIntegralDetail from '@/components/scm/communityIntegralDetail'
66 69 import ApplyWithholdIntegral from '@/components/scm/applyWithholdIntegral'
67 70 import WithholdIntegral from '@/components/scm/withholdIntegral'
  71 +import divider from '@/components/system/divider'
68 72  
69 73 export default {
70 74 name: 'CommunityIntegralList',
71 75 components: {
72 76 CommunityIntegralDetail,
73 77 ApplyWithholdIntegral,
74   - WithholdIntegral
  78 + WithholdIntegral,
  79 + divider
75 80 },
76 81 data() {
77 82 return {
... ... @@ -132,20 +137,18 @@ export default {
132 137 </script>
133 138  
134 139 <style scoped>
135   -.community-integral-container {
136   - padding: 20px;
137   -}
  140 +.community-integral-container {padding: 20px;}
138 141  
139 142 .white-bg {
140 143 background-color: #fff;
141 144 }
142 145  
143 146 .padding-lg {
144   - padding: 20px;
  147 +
145 148 }
146 149  
147 150 .padding-top {
148   - padding-top: 20px;
  151 +
149 152 }
150 153  
151 154 .border-radius {
... ...
src/views/scm/doDiningList.vue
... ... @@ -45,7 +45,7 @@
45 45 <el-row class="margin-top">
46 46 <el-col :span="24">
47 47 <el-card>
48   - <div slot="header" class="clearfix">
  48 + <div slot="header" class="flex justify-between">
49 49 <span>{{ $t('doDining.diningRecords') }}</span>
50 50 </div>
51 51 <el-row :gutter="20">
... ...
src/views/scm/goldList.vue
... ... @@ -57,16 +57,15 @@
57 57 </el-row>
58 58 </div>
59 59  
60   - <el-divider></el-divider>
  60 + <divider></divider>
61 61  
62 62 <div class="margin-top-sm">
63 63 <el-tabs v-model="goldInfo.currentTab" @tab-click="changeTab(goldInfo.currentTab)">
64 64 <el-tab-pane :label="$t('gold.transactionDetails')" name="goldDetail">
65   - <gold-detail v-if="goldInfo.currentTab === 'goldDetail'" ref="goldDetail" />
  65 + <gold-detail v-if="goldInfo.currentTab === 'goldDetail'" ref="goldDetail" />
66 66 </el-tab-pane>
67 67 <el-tab-pane :label="$t('gold.goldWithdrawal')" name="applyWithholdGold">
68   - <apply-withhold-gold v-if="goldInfo.currentTab === 'applyWithholdGold'" ref="applyWithholdGold"
69   - />
  68 + <apply-withhold-gold v-if="goldInfo.currentTab === 'applyWithholdGold'" ref="applyWithholdGold" />
70 69 </el-tab-pane>
71 70 </el-tabs>
72 71 </div>
... ... @@ -82,13 +81,15 @@ import { getPropertyGoldInfo } from &#39;@/api/scm/goldApi&#39;
82 81 import GoldDetail from '@/components/scm/goldDetail'
83 82 import ApplyWithholdGold from '@/components/scm/applyWithholdGold'
84 83 import WithholdGold from '@/components/scm/withholdGold'
  84 +import divider from '@/components/system/divider'
85 85  
86 86 export default {
87 87 name: 'GoldList',
88 88 components: {
89 89 GoldDetail,
90 90 ApplyWithholdGold,
91   - WithholdGold
  91 + WithholdGold,
  92 + divider
92 93 },
93 94 data() {
94 95 return {
... ... @@ -167,10 +168,10 @@ export default {
167 168 }
168 169  
169 170 .form-group {
  171 + text-align: left;
170 172 margin-bottom: 0;
171 173 padding: 10px;
172 174 border-radius: 4px;
173   - background-color: #f5f7fa;
174 175  
175 176 .el-form-item__label {
176 177 font-weight: bold;
... ... @@ -178,7 +179,6 @@ export default {
178 179 }
179 180  
180 181 .el-form-item__content {
181   - margin-top: 5px;
182 182 }
183 183 }
184 184 }
... ...
src/views/staff/staffAppAuthManageList.vue
1 1 <template>
2 2 <div class="staff-app-auth-manage-container">
3 3 <el-card class="box-card">
4   - <div slot="header" class="clearfix">
  4 + <div slot="header" class="flex justify-between">
5 5 <span>{{ $t('staffAppAuthManage.title') }}</span>
6 6 <div class="card-header-actions">
7 7 <el-button type="primary" size="small" @click="_refreshStaffAppAuth">
... ...
src/views/staff/staffDetailList.vue
... ... @@ -12,11 +12,8 @@
12 12 <div class="staff-info">
13 13 <el-row :gutter="20">
14 14 <el-col :span="4">
15   - <el-image
16   - style="width: 120px; height: 140px; border-radius: 4px;"
17   - :src="staffDetailInfo.photo"
18   - fit="cover"
19   - @error="errorLoadImg">
  15 + <el-image style="width: 120px; height: 140px; border-radius: 4px;" :src="staffDetailInfo.photo"
  16 + fit="cover" @error="errorLoadImg">
20 17 </el-image>
21 18 </el-col>
22 19 <el-col :span="20">
... ... @@ -50,7 +47,8 @@
50 47 <el-col :span="8">
51 48 <div class="info-item">
52 49 <label>{{ $t('staffDetailInfo.sex') }}</label>
53   - <div>{{ staffDetailInfo.sex == '0' ? $t('staffDetailInfo.male') : $t('staffDetailInfo.female') }}</div>
  50 + <div>{{ staffDetailInfo.sex == '0' ? $t('staffDetailInfo.male') : $t('staffDetailInfo.female') }}
  51 + </div>
54 52 </div>
55 53 </el-col>
56 54 <el-col :span="8">
... ... @@ -69,7 +67,7 @@
69 67 <div slot="header" class="clearfix ">
70 68 <span>{{ $t('staffDetailInfo.relatedOrg') }}</span>
71 69 </div>
72   - <div v-for="(item,index) in staffDetailInfo.orgs" :key="index">
  70 + <div v-for="(item, index) in staffDetailInfo.orgs" :key="index">
73 71 <div class="org-item">{{ $t('staffDetailInfo.org') }}: {{ item.orgName }}</div>
74 72 </div>
75 73 </el-card>
... ... @@ -78,12 +76,12 @@
78 76 <div slot="header" class="clearfix">
79 77 <span>{{ $t('staffDetailInfo.relatedRoleCommunity') }}</span>
80 78 </div>
81   - <div v-for="(item,index) in staffDetailInfo.roles" :key="index">
82   - <div v-if="item.roleCommunityDtoList.length>0">
  79 + <div v-for="(item, index) in staffDetailInfo.roles" :key="index">
  80 + <div v-if="item.roleCommunityDtoList.length > 0">
83 81 {{ item.roleName }} (
84   - <span v-for="(item1,index1) in item.roleCommunityDtoList" :key="index1">
  82 + <span v-for="(item1, index1) in item.roleCommunityDtoList" :key="index1">
85 83 {{ item1.communityName }}
86   - {{ index1 === item.roleCommunityDtoList.length-1 ? " ":" 、 " }}
  84 + {{ index1 === item.roleCommunityDtoList.length - 1 ? " " : " 、 " }}
87 85 </span> )
88 86 </div>
89 87 </div>
... ... @@ -97,11 +95,7 @@
97 95 <div slot="header" class="clearfix">
98 96 <span>{{ $t('staffDetailInfo.staffPrivilege') }}</span>
99 97 </div>
100   - <el-tree
101   - :data="privilegeTreeData"
102   - node-key="id"
103   - default-expand-all
104   - :props="defaultProps">
  98 + <el-tree :data="privilegeTreeData" node-key="id" default-expand-all :props="defaultProps">
105 99 </el-tree>
106 100 </el-card>
107 101 </el-col>
... ... @@ -202,7 +196,7 @@ export default {
202 196 staffId: this.staffDetailInfo.staffId
203 197 }
204 198 const res = await getStaffPrivileges(params)
205   - if (res.data && res.data.length>0) {
  199 + if (res.data && res.data.length > 0) {
206 200 this.privilegeTreeData = this.buildTreeData(res.data)
207 201 }
208 202 } catch (error) {
... ... @@ -211,7 +205,7 @@ export default {
211 205 },
212 206 buildTreeData(privileges) {
213 207 const groupMap = {}
214   -
  208 +
215 209 privileges.forEach(item => {
216 210 if (!groupMap[item.gId]) {
217 211 groupMap[item.gId] = {
... ... @@ -221,10 +215,10 @@ export default {
221 215 children: []
222 216 }
223 217 }
224   -
  218 +
225 219 const group = groupMap[item.gId]
226 220 const menuExists = group.children.some(menu => menu.mId === item.mId)
227   -
  221 +
228 222 if (!menuExists) {
229 223 group.children.push({
230 224 id: `m_${item.mId}`,
... ... @@ -233,7 +227,7 @@ export default {
233 227 children: []
234 228 })
235 229 }
236   -
  230 +
237 231 const menu = group.children.find(menu => menu.mId === item.mId)
238 232 menu.children.push({
239 233 id: `p_${item.pId}`,
... ... @@ -241,7 +235,7 @@ export default {
241 235 text: item.pName
242 236 })
243 237 })
244   -
  238 +
245 239 return Object.values(groupMap)
246 240 }
247 241 }
... ... @@ -251,22 +245,22 @@ export default {
251 245 <style lang="scss" scoped>
252 246 .staff-detail-container {
253 247 padding: 20px;
254   -
  248 +
255 249 .margin-top {
256 250 margin-top: 20px;
257 251 }
258   -
  252 +
259 253 .info-item {
260 254 margin-bottom: 15px;
261 255  
262   -
  256 +
263 257 label {
264 258 display: block;
265 259 color: #909399;
266 260 margin-bottom: 5px;
267 261 }
268 262 }
269   -
  263 +
270 264 .org-item {
271 265 padding: 5px 0;
272 266 }
... ...
src/views/system/assetImportLogDetailList.vue
... ... @@ -16,7 +16,7 @@
16 16 </el-col>
17 17 <el-col :span="20">
18 18 <el-card>
19   - <div slot="header" class="clearfix">
  19 + <div slot="header" class="flex justify-between">
20 20 <span>{{ $t('assetImportLogDetail.title') }}</span>
21 21 <div class="ibox-tools" style="float: right;">
22 22 <el-button type="primary" size="small" @click="queryAssetImportLogDetail()">
... ...
src/views/system/historyFeeDetailImportList.vue
1 1 <template>
2 2 <div class="history-fee-detail-import-container">
3 3 <el-card class="box-card">
4   - <div slot="header" class="clearfix">
  4 + <div slot="header" class="flex justify-between">
5 5 <span>{{ $t('historyFeeDetailImport.assetInfo') }}</span>
6 6 <div class="card-header-right">
7 7 <el-button type="primary" size="small" @click="_openDownloadHcExcelTemplate">
... ... @@ -15,42 +15,29 @@
15 15  
16 16 <el-row :gutter="20">
17 17 <el-col :span="24">
18   - <el-form label-position="left" label-width="120px">
  18 + <el-form label-position="left" label-width="120px" class="text-left">
19 19 <el-form-item :label="$t('historyFeeDetailImport.feeObject')">
20   - <el-select
21   - v-model="historyFeeDetailImportInfo.objType"
22   - style="width:100%"
  20 + <el-select v-model="historyFeeDetailImportInfo.objType" style="width:100%"
23 21 :placeholder="$t('historyFeeDetailImport.selectFeeObject')">
24   - <el-option
25   - disabled
26   - value=""
27   - :label="$t('historyFeeDetailImport.requiredSelect')">
  22 + <el-option disabled value="" :label="$t('historyFeeDetailImport.requiredSelect')">
28 23 </el-option>
29   - <el-option
30   - value="3333"
31   - :label="$t('historyFeeDetailImport.house')">
  24 + <el-option value="3333" :label="$t('historyFeeDetailImport.house')">
32 25 </el-option>
33   - <el-option
34   - value="6666"
35   - :label="$t('historyFeeDetailImport.car')">
  26 + <el-option value="6666" :label="$t('historyFeeDetailImport.car')">
36 27 </el-option>
37 28 </el-select>
38 29 </el-form-item>
39 30  
40 31 <el-form-item :label="$t('historyFeeDetailImport.selectFile')">
41   - <el-upload
42   - class="upload-demo"
43   - action=""
44   - :auto-upload="false"
45   - :on-change="getExcelTemplate"
  32 + <el-upload class="upload-demo" action="" :auto-upload="false" :on-change="getExcelTemplate"
46 33 :show-file-list="false">
47 34 <el-button size="small" type="primary">
48 35 {{ $t('historyFeeDetailImport.clickUpload') }}
49 36 </el-button>
50 37 <div slot="tip" class="el-upload__tip">
51   - {{ historyFeeDetailImportInfo.excelTemplate ?
52   - historyFeeDetailImportInfo.excelTemplate.name :
53   - $t('historyFeeDetailImport.requiredFile') }}
  38 + {{ historyFeeDetailImportInfo.excelTemplate ?
  39 + historyFeeDetailImportInfo.excelTemplate.name :
  40 + $t('historyFeeDetailImport.requiredFile') }}
54 41 </div>
55 42 </el-upload>
56 43 </el-form-item>
... ... @@ -66,9 +53,7 @@
66 53  
67 54 <el-row>
68 55 <el-col :span="24" class="text-right">
69   - <el-button
70   - type="primary"
71   - @click="_importData"
  56 + <el-button type="primary" @click="_importData"
72 57 :disabled="!historyFeeDetailImportInfo.excelTemplate || !historyFeeDetailImportInfo.objType">
73 58 {{ $t('historyFeeDetailImport.import') }}
74 59 </el-button>
... ... @@ -115,8 +100,8 @@ export default {
115 100 param.append('uploadFile', this.historyFeeDetailImportInfo.excelTemplate)
116 101 param.append('communityId', this.historyFeeDetailImportInfo.communityId)
117 102 param.append('objType', this.historyFeeDetailImportInfo.objType)
118   -
119   - const _importAdapt = this.historyFeeDetailImportInfo.objType === '6666' ?
  103 +
  104 + const _importAdapt = this.historyFeeDetailImportInfo.objType === '6666' ?
120 105 'importCarHistoryFeeDetail' : 'importRoomHistoryFeeDetail'
121 106 param.append('importAdapt', _importAdapt)
122 107  
... ... @@ -126,7 +111,7 @@ export default {
126 111 this.$message.success(this.$t('historyFeeDetailImport.importSuccess'))
127 112 this.historyFeeDetailImportInfo.excelTemplate = null
128 113 this.$router.push({
129   - path: '/pages/property/assetImportLogDetail',
  114 + path: '/views/system/assetImportLogDetail',
130 115 query: {
131 116 logId: res.data.logId,
132 117 logType: _importAdapt
... ...
src/views/system/operateDataLogList.vue
1 1 <template>
2 2 <div class="operate-data-log-container">
3 3 <el-card class="search-card">
4   - <div slot="header" class="clearfix">
  4 + <div slot="header" class="flex justify-between">
5 5 <span>{{ $t('operateDataLog.search.title') }}</span>
6 6 <el-button type="text" style="float: right; padding: 3px 0" @click="_moreCondition">
7 7 {{ operateDataLogInfo.moreCondition ? $t('common.hide') : $t('common.more') }}
... ... @@ -82,7 +82,7 @@
82 82 </el-card>
83 83  
84 84 <el-card class="table-card">
85   - <el-tabs v-model="operateDataLogInfo._currentTab" @tab-click="changeTab">
  85 + <el-tabs v-model="operateDataLogInfo._currentTab" @tab-click="changeTab(operateDataLogInfo._currentTab)">
86 86 <el-tab-pane label="费用项" name="feeConfigDetailHis"></el-tab-pane>
87 87 <el-tab-pane label="费用" name="feeDetailHis"></el-tab-pane>
88 88 <el-tab-pane label="业主" name="ownerDetailHis"></el-tab-pane>
... ... @@ -91,7 +91,7 @@
91 91 <el-tab-pane label="合同" name="contractDetailChange"></el-tab-pane>
92 92 </el-tabs>
93 93  
94   - <component :is="currentComponent" ref="childComponent"></component>
  94 + <component :is="currentComponent" :ref="currentComponent"></component>
95 95 </el-card>
96 96 </div>
97 97 </template>
... ... @@ -152,13 +152,13 @@ export default {
152 152 this.communityId = getCommunityId()
153 153 },
154 154 methods: {
155   - changeTab(tab) {
156   - this.operateDataLogInfo._currentTab = tab.name || tab
157   - this.$nextTick(() => {
158   - if (this.$refs.childComponent) {
159   - this.$refs.childComponent.open(this.operateDataLogInfo.conditions)
  155 + changeTab(tab) {
  156 + this.operateDataLogInfo._currentTab = tab
  157 + setTimeout(() => {
  158 + if (this.$refs[tab]) {
  159 + this.$refs[tab].open(this.operateDataLogInfo.conditions)
160 160 }
161   - })
  161 + }, 100)
162 162 },
163 163 _queryDataMethod() {
164 164 this.changeTab(this.operateDataLogInfo._currentTab)
... ...
src/views/system/smallWeChatManageList.vue
1 1 <template>
2 2 <div class="small-wechat-manage-container">
3 3 <el-card class="box-card">
4   - <div slot="header" class="clearfix">
  4 + <div slot="header" class="flex justify-between">
5 5 <span>{{ $t('smallWeChatManage.title') }}</span>
6 6 <el-button v-if="smallWeChatManageInfo.smallWeChats.length === 0" type="primary" size="small"
7 7 class="float-right" @click="_openAddSmallWeChatModal(1000)">
... ...