From 725b0706937306c6341e5dddbcc4fd8de7b8f002 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期二, 01 四月 2025 10:13:18 +0800 Subject: [PATCH] 1、mdc模块实现各利用率图表页面功能并与后端进行联调 2、删除用户修改密码时的输入校验 3、删除用户管理冗余查询字段 4、调整DNC模块获取权限配置功能时调用的获取所有用户列表接口(原先接口有分页参数导致获取不完整) --- src/api/dnc.js | 2 src/views/system/UserList.vue | 37 src/views/mdc/base/GroupUtilizationRateChart.vue | 330 ++++++- src/views/system/modules/UserModal.vue | 1076 ++++++++++++------------ src/views/dnc/base/modules/DeviceStructure/Permission/AssignPermissionModal.vue | 2 src/api/mdc.js | 17 src/views/mdc/base/GroupUtilizationRateCompareChart.vue | 234 +++-- src/views/system/modules/PasswordModal.vue | 211 ++-- src/views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue | 6 src/views/mdc/base/GroupEquipmentUtilizationRateChart.vue | 327 ++++++- src/views/mdc/base/DeliveryGroupUtilizationRateChart.vue | 363 ++++++- src/views/dnc/base/modules/ProductStructure/Permission/AssignPermissionModal.vue | 2 12 files changed, 1,652 insertions(+), 955 deletions(-) diff --git a/src/api/dnc.js b/src/api/dnc.js index 7945af3..582bfcb 100644 --- a/src/api/dnc.js +++ b/src/api/dnc.js @@ -54,7 +54,7 @@ // 鏉冮檺閰嶇疆寮圭獥涓幏鍙栨墍鏈夎溅闂村垪琛� getAllDepartmentsListApi: () => getAction('/mdc/mdcProduction/queryTreeListByConfig'), // 鏉冮檺閰嶇疆寮圭獥涓幏鍙栨墍鏈夌敤鎴峰垪琛� - getAllUsersListApi: () => getAction('/sys/user/list'), + getAllUsersListApi: () => getAction('/sys/user/listAll'), // 鏉冮檺閰嶇疆寮圭獥涓幏鍙栨湁鏉冮檺鐨勯儴闂ㄥ垪琛� getHasPermissionDepartApi: ({ type, id }) => getAction(`/nc/product/get/perm/depart/${type}/${id}`), // 鏉冮檺閰嶇疆寮圭獥涓幏鍙栨湁鏉冮檺鐨勭敤鎴峰垪琛� diff --git a/src/api/mdc.js b/src/api/mdc.js index 3511070..636952d 100644 --- a/src/api/mdc.js +++ b/src/api/mdc.js @@ -30,4 +30,21 @@ // -------------------------------------OEE椤甸潰-------------------------------------------- // 璁$畻OEE computeOeeApi: params => postAction('/mdc/mdcOeeInfo/computeOee', params), + // -------------------------------------鍚勫埄鐢ㄧ巼鍥捐〃椤甸潰-------------------------------------------- + // 鑾峰彇涓績鎴栦腑蹇冨搴旂彮缁勫垪琛� + getCenterOrGroupListApi: productionId => getAction('/mdc/mdcProduction/loadProductionOptions', { productionId }), + // 鑾峰彇璁惧缁煎悎鍒╃敤鐜囧浘琛ㄦ暟鎹� + getGroupEquipmentChartDataApi: params => getAction('/mdc/efficiencyReport/equipmentEfficiencyAnalyze', params), + // 鑾峰彇鐝粍瀵瑰簲閰嶉�佸皬缁勫垪琛� + getDeliveryGroupListApi: productionId => getAction('/mdc/mdcProduction/loadTeamOptions', { productionId }), + // 鑾峰彇鏈堥厤閫佸皬缁勭患鍚堝埄鐢ㄧ巼鍥捐〃鏁版嵁 + getDeliveryGroupChartDataApi: params => getAction('/mdc/efficiencyReport/teamEquipmentEfficiencyAnalyze', params), + // 鑾峰彇鐝粍璁惧鍒╃敤鐜囧姣斿浘琛ㄦ暟鎹� + getGroupRateCompareChartDataApi: productionId => getAction('/mdc/efficiencyReport/teamEfficiencyAnalyzeByMonth', { productionId }), + // 鑾峰彇璁惧绫诲瀷鍒楄〃 + getEquipmentTypeListApi: () => getAction('/mdc/mdcEquipmentType/queryEquipmentType'), + // 鑾峰彇鐝埗鍒楄〃 + getShiftListApi: () => getAction('/mdc/mdcMdcShift/initShiftList'), + // 鑾峰彇鐝粍璁惧鍒╃敤鐜囧浘琛ㄦ暟鎹� + getGroupChartDataApi: params => getAction('/mdc/efficiencyReport/comprehensiveRateAnalyze', params) } \ No newline at end of file diff --git a/src/views/dnc/base/modules/DeviceStructure/Permission/AssignPermissionModal.vue b/src/views/dnc/base/modules/DeviceStructure/Permission/AssignPermissionModal.vue index 4b23a76..6ea023b 100644 --- a/src/views/dnc/base/modules/DeviceStructure/Permission/AssignPermissionModal.vue +++ b/src/views/dnc/base/modules/DeviceStructure/Permission/AssignPermissionModal.vue @@ -69,7 +69,7 @@ dncApi.getAllUsersListApi() .then(res => { if (res.success) { - this.allUsersList = res.result.records + this.allUsersList = res.result this.$nextTick(() => this.$refs.userPermissionTransferRef.getHasPermissionUserByApi()) } }) diff --git a/src/views/dnc/base/modules/ProductStructure/Permission/AssignPermissionModal.vue b/src/views/dnc/base/modules/ProductStructure/Permission/AssignPermissionModal.vue index 6491b13..425111e 100644 --- a/src/views/dnc/base/modules/ProductStructure/Permission/AssignPermissionModal.vue +++ b/src/views/dnc/base/modules/ProductStructure/Permission/AssignPermissionModal.vue @@ -116,7 +116,7 @@ dncApi.getAllUsersListApi() .then(res => { if (res.success) { - this.allUsersList = res.result.records + this.allUsersList = res.result this.$nextTick(() => this.$refs.userPermissionTransferRef.getHasPermissionUserByApi()) } }) diff --git a/src/views/mdc/base/DeliveryGroupUtilizationRateChart.vue b/src/views/mdc/base/DeliveryGroupUtilizationRateChart.vue index f7b6e6d..b07adcc 100644 --- a/src/views/mdc/base/DeliveryGroupUtilizationRateChart.vue +++ b/src/views/mdc/base/DeliveryGroupUtilizationRateChart.vue @@ -1,82 +1,327 @@ <template> - <div style="width: 100%; height: 100%;"> - <a-card :bordered="false"> - <a-row type="flex" :gutter="16"> - <a-col :md="5"> - <a-tabs :activeKey="activeKey" @change="tabChange"> - <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render> - <base-tree @getCurrSelected="changeSelectionNode"></base-tree> - </a-tab-pane> - <a-tab-pane v-if="isDepartType == 0" key="2" tab="閮ㄩ棬灞傜骇">, - <depart-tree @getCurrSelectedDD="changeSelectionNodedd"></depart-tree> - </a-tab-pane> - </a-tabs> - </a-col> - <a-col :md="19"> - <ChartComponent :nodePeople='selectPeople' :nodeTree='selectEquipment' :Type="selectTypeTree"/> - </a-col> - </a-row> - </a-card> - </div> + <a-card> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :md="3" :sm="3"> + <a-form-item label="涓績"> + <a-select v-model="queryParam.productionId" placeholder="璇烽�夋嫨涓績" @change="handleCenterSelectChange"> + <a-select-option v-for="item in centerList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + + <a-col :md="8" :sm="8"> + <a-form-item label="鐝粍"> + <a-select :value="productionIds" placeholder="璇烽�夋嫨鐝粍" mode="multiple" :maxTagCount="3" + @change="handleGroupSelectChange" allowClear> + <a-select-option v-for="item in groupList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + + <a-col :md="8" :sm="8"> + <a-form-item label="閰嶉�佸皬缁�"> + <a-select v-model="teamCodes" placeholder="璇烽�夋嫨閰嶉�佸皬缁�" mode="multiple" :maxTagCount="3" + @change="handleDeliverGroupSelectChange" allowClear> + <a-select-option v-for="item in deliveryGroupList" :key="item.key">{{ item.title }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="3" :sm="3"> + <a-form-item label="鏈堜唤"> + <a-month-picker v-model="queryParam.month" style="width: 100%" value-format="YYYYMM" :allowClear="false" + placeholder="璇烽�夋嫨鏈堜唤"/> + </a-form-item> + </a-col> + + <a-col :md="2" :sm="2"> + <a-space> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <!-- <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>--> + </a-space> + </a-col> + </a-row> + </a-form> + </div> + + <div id="chart-container" style="height: 700px"></div> + </a-card> </template> <script> -import BaseTree from '../common/BaseTree' -import DepartTree from './modules/DepartList/DepartListTree/DepartTree' -import { mapActions } from 'vuex' -import ChartComponent from '@views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import moment from 'moment/moment' +import mdcApi from '@api/mdc' export default { name: 'DeliveryGroupUtilizationRateChart', - components: { - ChartComponent, - BaseTree, - DepartTree, - }, + components: {}, + mixins: [JeecgListMixin], data() { return { - activeKey: '1', - selectEquipment: {}, - selectPeople: {}, - selectTypeTree: '', - isDepartType: '' + disableMixinCreated: true, + queryParam: { + month: moment().subtract('1', 'month').format('YYYYMM') + }, + productionIds: [],//鐝粍 + teamCodes: [],//閰嶉�佸皬缁� + centerList: [], + groupList: [], + deliveryGroupList: [] } }, - created() { - this.queryTreeData() + mounted() { + window.addEventListener('resize', this.handleWindowResize) + this.getCenterListByApi() + this.handleWindowResize() }, methods: { - ...mapActions(['QueryDepartTree']), - - queryTreeData() { - this.QueryDepartTree().then(res => { - if (res.success) { - this.isDepartType = res.result[0].value - } else { - this.$notification.warning({ - message: '娑堟伅', - description: res.message - }) - } - }).finally(() => { + loadData() { + this.chartContainer = this.$echarts.init(document.getElementById('chart-container')) + this.initChart({}) + this.chartContainer.showLoading({ + text: '鏁版嵁鍔犺浇涓� ...', + color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊 + textColor: '#0696e1' }) + const that = this + mdcApi.getDeliveryGroupChartDataApi(this.queryParam) + .then(res => { + if (res.success) { + if (Object.keys(res.result).length === 0 || res.result.teamCodeList.length === 0) { + that.$notification.warning({ + message: '娑堟伅', + description: '鏆傛棤鏁版嵁' + }) + // 姝ゅ鏈猺eturn鏄负淇濊瘉鍥捐〃鏁版嵁鑳借娓呴櫎骞跺睍绀虹┖鍥捐〃 + } + that.initChart(res.result) + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + that.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) }, - tabChange(val) { - this.activeKey = val - this.selectTypeTree = val + /** + * 鍒濆鍖栧浘琛� + * @param chartDataObj 鏁版嵁瀵硅薄 Object + */ + initChart(chartDataObj) { + const option = { + title: { + text: (this.queryParam.month.slice(-2) >= 10 ? this.queryParam.month.slice(-2) : this.queryParam.month.slice(-1)) + '鏈堥厤閫佸皬缁勭患鍚堝埄鐢ㄧ巼', + left: 'center', + top: 0, + textStyle: { + fontSize: 22 + } + }, + grid: { + top: '12%', + left: '1%', + right: '1%', + bottom: '8%', + containLabel: true + }, + legend: { + top: '6%', + right: 'center', + itemGap: 20, + data: ['24h缁煎悎鍒╃敤鐜�', '鍘婚櫎鏁呴殰璁惧鏃堕棿24h缁煎悎鍒╃敤鐜�', '鐝鍒╃敤鐜�'] + }, + tooltip: { + show: true, + trigger: 'axis' + }, + xAxis: { + type: 'category', + data: chartDataObj.teamCodeList ? chartDataObj.teamCodeList : [] + // data: ['鏉庢湁涓虹粍', '涓佺孩鐕曠粍', '鍞愪笢缁�', '鏈卞皬纾婄粍', '寮犲缁�', '瀹嬪畤鍧ょ粍', '缃楀啗缁�', '寮犲弻杩涚粍', '甯告尟鍕囩粍', '钁涘簲榫欑粍', '璧靛箍娑涚粍', '浜庡崕浜粍', '闄堝郴缁�', '鐜嬬户宄扮粍', '鐜嬫檽鏄庣粍', '闄堟灄缁�', '鍚村悏骞崇粍'] + }, + yAxis: [ + { + type: 'value', + name: '鍒╃敤鐜�(%)', + axisLine: { + show: true + }, + axisLabel: { + formatter: '{value}%' + } + } + ], + series: [ + { + type: 'bar', + name: '24h缁煎悎鍒╃敤鐜�', + // barWidth: '40%', + // data: [85, 32, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 85, 63, 74, 11, 58] + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.utilizationRate) : [] + }, + { + type: 'bar', + name: '鍘婚櫎鏁呴殰璁惧鏃堕棿24h缁煎悎鍒╃敤鐜�', + // barWidth: '40%', + // data: [24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 64, 34, 85, 54], + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.amendUtilizationRate) : [] + }, + { + type: 'bar', + name: '鐝鍒╃敤鐜�', + // barWidth: '40%', + // data: [24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 64, 34, 85, 54], + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.shiftUtilizationRate) : [] + } + ], + dataZoom: [ + { + type: 'slider', + show: true, + xAxisIndex: 0, + startValue: 0, + endValue: 19, + // 鏄惁鏄剧ずdetail锛屽嵆鎷栨嫿鏃跺�欐樉绀鸿缁嗘暟鍊间俊鎭� + showDetail: false, + // empty锛氬綋鍓嶆暟鎹獥鍙e鐨勬暟鎹紝琚缃负绌恒�� + // 鍗充笉浼氬奖鍝嶅叾浠栬酱鐨勬暟鎹寖鍥� + filterMode: 'empty', + // 鎺у埗鎵嬫焺鐨勫昂瀵� + // handleSize: 0, + // 鏄惁閿佸畾閫夋嫨鍖哄煙锛堟垨鍙仛鏁版嵁绐楀彛锛夌殑澶у皬 + zoomLock: true, + brushSelect: false + }, + { + // 娌℃湁涓嬮潰杩欏潡鐨勮瘽锛屽彧鑳芥嫋鍔ㄦ粴鍔ㄦ潯锛� + // 榧犳爣婊氳疆鍦ㄥ尯鍩熷唴涓嶈兘鎺у埗澶栭儴婊氬姩鏉� + type: 'inside', + show: true, + // 鎺у埗鍝釜杞达紝濡傛灉鏄痭umber琛ㄧず鎺у埗涓�涓酱锛� + xAxisIndex: 0, + // 婊氳疆鏄惁瑙﹀彂缂╂斁 + zoomOnMouseWheel: false, + // 榧犳爣绉诲姩鑳藉惁瑙﹀彂骞崇Щ + moveOnMouseMove: true, + // 榧犳爣婊氳疆鑳藉惁瑙﹀彂骞崇Щ + moveOnMouseWheel: true + } + ] + } + this.chartContainer.setOption(option, true) + this.chartContainer.hideLoading() }, - changeSelectionNode(val) { - this.selectEquipment = val - this.selectTypeTree = '1' + // 鑾峰彇涓績鍒楄〃 + getCenterListByApi() { + const that = this + mdcApi.getCenterOrGroupListApi() + .then(res => { + if (res.success) { + that.centerList = res.result + that.queryParam.productionId = res.result[0].value + that.getGroupListByApi(res.result[0].value, true) + } + }) }, - changeSelectionNodedd(val) { - this.selectPeople = val - this.selectTypeTree = '2' + /** + * 鑾峰彇鐝粍鍒楄〃 + * @param productionId 涓績Id + * @param isInitLoad 鏄惁涓哄垵濮嬪寲鍔犺浇 + */ + getGroupListByApi(productionId, isInitLoad = false) { + const that = this + mdcApi.getCenterOrGroupListApi(productionId) + .then(res => { + if (res.success) { + that.groupList = res.result + if (!isInitLoad) return + that.handleGroupSelectChange([res.result[0].value]) + that.loadData() + } + }) + }, + + /** + * 鑾峰彇閰嶉�佸皬缁勫垪琛� + * @param productionId 鐝粍Id + * @param isReduceSelectOption 鏄惁鍑忓皯鐝粍閫変腑椤� + */ + getDeliveryGroupListByApi(productionId, isReduceSelectOption = false) { + const that = this + mdcApi.getDeliveryGroupListApi(productionId) + .then(res => { + if (res.success) { + that.deliveryGroupList = res.result + + if (!isReduceSelectOption) return + that.teamCodes.forEach((key, keyIndex, self) => { + // 濡傛灉灏嗗敮涓�涓�缁勫寘鍚�変腑閰嶉�佸皬缁勯」鐨勭彮缁勫彇娑堝嬀閫夊悗搴斿皢宸插嬀閫夌殑閰嶉�佸皬缁勪竴骞跺彇娑堝嬀閫� + if (that.deliveryGroupList.findIndex(item => item.key === key) === -1) self.splice(keyIndex, 1) + }) + } + }) + }, + + /** + * 涓績鏀瑰彉鏃惰Е鍙� + * @param value 鏀瑰彉鍚庣殑涓績Id + */ + handleCenterSelectChange(value) { + if (this.productionIds.length > 0) { + this.groupList = [] + this.productionIds = [] + delete this.queryParam.productionIds + } + if (this.teamCodes.length > 0) { + this.deliveryGroupList = [] + this.teamCodes = [] + delete this.queryParam.teamCodes + } + this.getGroupListByApi(value) + }, + + /** + * 鐝粍鏀瑰彉鏃惰Е鍙� + * @param value 鏀瑰彉鍚庣殑鐝粍Id + */ + handleGroupSelectChange(value) { + let isReduceSelectOption + if (value.length > this.productionIds.length) isReduceSelectOption = false //澧炲姞鍕鹃�夐」 + else isReduceSelectOption = true // 鍑忓皯鍕鹃�夐」 + this.productionIds = value + this.queryParam.productionIds = value.join(',') + this.getDeliveryGroupListByApi(value.join(','), isReduceSelectOption) + }, + + /** + * 閰嶉�佸皬缁勫彂鐢熸敼鍙樻椂瑙﹀彂 + * @param value 鏀瑰彉鍚庣殑閰嶉�佸皬缁処d + */ + handleDeliverGroupSelectChange(value) { + this.queryParam.teamCodes = value.join(',') + }, + + handleWindowResize() { + if (this.chartContainer) this.chartContainer.resize() } } - } -</script> +</script> \ No newline at end of file diff --git a/src/views/mdc/base/GroupEquipmentUtilizationRateChart.vue b/src/views/mdc/base/GroupEquipmentUtilizationRateChart.vue index f0346d8..8e3d7cb 100644 --- a/src/views/mdc/base/GroupEquipmentUtilizationRateChart.vue +++ b/src/views/mdc/base/GroupEquipmentUtilizationRateChart.vue @@ -1,82 +1,291 @@ <template> - <div style="width: 100%; height: 100%;"> - <a-card :bordered="false"> - <a-row type="flex" :gutter="16"> - <a-col :md="5"> - <a-tabs :activeKey="activeKey" @change="tabChange"> - <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render> - <base-tree @getCurrSelected="changeSelectionNode"></base-tree> - </a-tab-pane> - <a-tab-pane v-if="isDepartType == 0" key="2" tab="閮ㄩ棬灞傜骇">, - <depart-tree @getCurrSelectedDD="changeSelectionNodedd"></depart-tree> - </a-tab-pane> - </a-tabs> - </a-col> - <a-col :md="19"> - <ChartComponent :nodePeople='selectPeople' :nodeTree='selectEquipment' :Type="selectTypeTree"/> - </a-col> - </a-row> - </a-card> - </div> + <a-card> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :md="3" :sm="3"> + <a-form-item label="涓績"> + <a-select v-model="queryParam.productionId" placeholder="璇烽�夋嫨涓績" @change="handleCenterSelectChange"> + <a-select-option v-for="item in centerList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="10" :sm="10"> + <a-form-item label="鐝粍"> + <a-select :value="productionIds" placeholder="璇烽�夋嫨鐝粍" mode="multiple" :maxTagCount="5" + @change="handleGroupSelectChange" allowClear> + <a-select-option v-for="item in groupList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="3" :sm="3"> + <a-form-item label="鏈堜唤"> + <a-month-picker v-model="queryParam.month" style="width: 100%" value-format="YYYYMM" :allowClear="false" + placeholder="璇烽�夋嫨鏈堜唤"/> + </a-form-item> + </a-col> + + <a-col :md="5" :sm="5"> + <a-space> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <!-- <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>--> + </a-space> + </a-col> + </a-row> + </a-form> + </div> + + <div id="chart-container" style="height: 700px"></div> + </a-card> </template> <script> -import BaseTree from '../common/BaseTree' -import DepartTree from './modules/DepartList/DepartListTree/DepartTree' -import { mapActions } from 'vuex' -import ChartComponent from '@views/mdc/base/modules/GroupEquipmentUtilizationRateChart/ChartComponent.vue' +import mdcApi from '@api/mdc' +import moment from 'moment' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' export default { name: 'GroupEquipmentUtilizationRateChart', - components: { - ChartComponent, - BaseTree, - DepartTree, - }, + components: {}, + mixins: [JeecgListMixin], data() { return { - activeKey: '1', - selectEquipment: {}, - selectPeople: {}, - selectTypeTree: '', - isDepartType: '' + disableMixinCreated: true, + productionIds: [],//鐝粍 + centerList: [], + groupList: [], + queryParam: { + month: moment().subtract('1', 'month').format('YYYYMM') + } } }, - created() { - this.queryTreeData() + mounted() { + window.addEventListener('resize', this.handleWindowResize) + this.handleWindowResize() + this.getCenterListByApi() }, methods: { - ...mapActions(['QueryDepartTree']), - - queryTreeData() { - this.QueryDepartTree().then(res => { - if (res.success) { - this.isDepartType = res.result[0].value - } else { - this.$notification.warning({ - message: '娑堟伅', - description: res.message - }) - } - }).finally(() => { + loadData() { + this.chartContainer = this.$echarts.init(document.getElementById('chart-container')) + this.initChart({}) + this.chartContainer.showLoading({ + text: '鏁版嵁鍔犺浇涓� ...', + color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊 + textColor: '#0696e1' }) + const that = this + mdcApi.getGroupEquipmentChartDataApi(this.queryParam) + .then(res => { + if (res.success) { + if (Object.keys(res.result).length === 0 || res.result.equipmentNameList.length === 0) { + that.$notification.warning({ + message: '娑堟伅', + description: '鏆傛棤鏁版嵁' + }) + // 姝ゅ鏈猺eturn鏄负淇濊瘉鍥捐〃鏁版嵁鑳借娓呴櫎骞跺睍绀虹┖鍥捐〃 + } + that.initChart(res.result) + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + that.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) }, - tabChange(val) { - this.activeKey = val - this.selectTypeTree = val + /** + * 鍒濆鍖栧浘琛� + * @param chartDataObj 鏁版嵁瀵硅薄 Object + */ + initChart(chartDataObj) { + const option = { + title: { + text: '璁惧缁煎悎鍒╃敤鐜囷紙' + (this.queryParam.month.slice(-2) >= 10 ? this.queryParam.month.slice(-2) : this.queryParam.month.slice(-1)) + '鏈堬級', + left: 'center', + top: 0, + textStyle: { + fontSize: 22 + } + }, + grid: { + top: '12%', + left: '1%', + right: '1%', + bottom: '8%', + containLabel: true + }, + legend: { + top: '6%', + right: 'center', + itemGap: 20, + data: ['24h缁煎悎鍒╃敤鐜�', '24h鍘婚櫎鏁呴殰', '璁″垝宸ヤ綔鏃堕棿缁煎悎鍒╃敤鐜�'] + }, + tooltip: { + show: true, + trigger: 'axis' + }, + xAxis: { + type: 'category', + // data: ['绔嬪姞u1000-3', '浜旇酱125P', '浜斿潗鏍囧姞宸ヤ腑蹇僄S1000', 'A杞�1000PLUS', '姊у窞80P_2', '闆曞埢鏈�800TE', '鍥涘潗鏍囩珛鍔�104V', '绔嬪姞u1000-4', '绔嬪姞GX710_1', '涓夊潗鏍囩珛鍔�1350', '鍗у姞H5000-1', '绔嬪姞u1000-2', '绔嬪姞1000HS_1', '绔嬪姞1160_1', '绔嬪姞GX710_2', '绔嬪姞u1000-3', '浜旇酱125P', '浜斿潗鏍囧姞宸ヤ腑蹇僄S1000', 'A杞�1000PLUS', '姊у窞80P_2', '闆曞埢鏈�800TE', '鍥涘潗鏍囩珛鍔�104V', '绔嬪姞u1000-4', '绔嬪姞GX710_1', '涓夊潗鏍囩珛鍔�1350', '鍗у姞H5000-1', '绔嬪姞u1000-2', '绔嬪姞1000HS_1', '绔嬪姞1160_1', '绔嬪姞GX710_2', '绔嬪姞u1000-3', '浜旇酱125P', '浜斿潗鏍囧姞宸ヤ腑蹇僄S1000', 'A杞�1000PLUS', '姊у窞80P_2', '闆曞埢鏈�800TE', '鍥涘潗鏍囩珛鍔�104V'], + data: chartDataObj.equipmentNameList ? chartDataObj.equipmentNameList : [], + axisLabel: { + interval: 0, // 鍧愭爣杞村埢搴︽爣绛剧殑鏄剧ず闂撮殧锛屽湪绫荤洰杞翠腑鏈夋晥锛涢粯璁や細閲囩敤鏍囩涓嶉噸鍙犵殑绛栫暐闂撮殧鏄剧ず鏍囩锛涘彲浠ヨ缃垚0寮哄埗鏄剧ず鎵�鏈夋爣绛撅紱濡傛灉璁剧疆涓�1锛岃〃绀恒�庨殧涓�涓爣绛炬樉绀轰竴涓爣绛俱�忥紝濡傛灉鍊间负2锛岃〃绀洪殧涓や釜鏍囩鏄剧ず涓�涓爣绛撅紝浠ユ绫绘帹銆� + rotate: 45, // 鍒诲害鏍囩鏃嬭浆鐨勮搴︼紝鍦ㄧ被鐩酱鐨勭被鐩爣绛炬樉绀轰笉涓嬬殑鏃跺�欏彲浠ラ�氳繃鏃嬭浆闃叉鏍囩涔嬮棿閲嶅彔锛涙棆杞殑瑙掑害浠�-90搴﹀埌90搴� + inside: false, // 鍒诲害鏍囩鏄惁鏈濆唴锛岄粯璁ゆ湞澶� + margin: 15, // 鍒诲害鏍囩涓庤酱绾夸箣闂寸殑璺濈 + fontSize: 14, + color: '#000' + } + }, + yAxis: [ + { + type: 'value', + name: '鍒╃敤鐜�(%)', + axisLine: { + show: true + }, + axisLabel: { + formatter: '{value}%' + } + } + ], + series: [ + { + type: 'bar', + name: '24h缁煎悎鍒╃敤鐜�', + // data: [53.28, 32.22, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 23, 56, 24, 85, 32, 23, 56, 24, 85, 32, 85, 32, 23, 56, 24, 85, 32] + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.utilizationRate) : [] + // label: { + // show: true, + // position: 'top', + // formatter: '{c}%', + // avoidLabelOverlap: true + // } + }, + { + type: 'bar', + name: '24h鍘婚櫎鏁呴殰', + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.amendUtilizationRate) : [] + // data: [53.28, 32.22, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 23, 56, 24, 85, 32, 23, 56, 24, 85, 32, 85, 32, 23, 56, 24, 85, 32] + }, + { + type: 'bar', + name: '璁″垝宸ヤ綔鏃堕棿缁煎悎鍒╃敤鐜�', + data: chartDataObj.dataList ? chartDataObj.dataList.map(item => item.shiftUtilizationRate) : [] + // data: [63.25, 32.22, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24, 85, 32, 23, 56, 24, 85, 32, 85, 32, 23, 56, 24, 85, 32] + } + ], + dataZoom: [ + { + type: 'slider', + show: true, + xAxisIndex: 0, + startValue: 0, + endValue: 19, + // 鏄惁鏄剧ずdetail锛屽嵆鎷栨嫿鏃跺�欐樉绀鸿缁嗘暟鍊间俊鎭� + showDetail: false, + // empty锛氬綋鍓嶆暟鎹獥鍙e鐨勬暟鎹紝琚缃负绌恒�� + // 鍗充笉浼氬奖鍝嶅叾浠栬酱鐨勬暟鎹寖鍥� + filterMode: 'empty', + // 鎺у埗鎵嬫焺鐨勫昂瀵� + // handleSize: 0, + // 鏄惁閿佸畾閫夋嫨鍖哄煙锛堟垨鍙仛鏁版嵁绐楀彛锛夌殑澶у皬 + zoomLock: true, + brushSelect: false + }, + { + // 娌℃湁涓嬮潰杩欏潡鐨勮瘽锛屽彧鑳芥嫋鍔ㄦ粴鍔ㄦ潯锛� + // 榧犳爣婊氳疆鍦ㄥ尯鍩熷唴涓嶈兘鎺у埗澶栭儴婊氬姩鏉� + type: 'inside', + show: true, + // 鎺у埗鍝釜杞达紝濡傛灉鏄痭umber琛ㄧず鎺у埗涓�涓酱锛� + xAxisIndex: 0, + // 婊氳疆鏄惁瑙﹀彂缂╂斁 + zoomOnMouseWheel: false, + // 榧犳爣绉诲姩鑳藉惁瑙﹀彂骞崇Щ + moveOnMouseMove: true, + // 榧犳爣婊氳疆鑳藉惁瑙﹀彂骞崇Щ + moveOnMouseWheel: true + } + ] + } + this.chartContainer.setOption(option, true) + this.chartContainer.hideLoading() }, - changeSelectionNode(val) { - this.selectEquipment = val - this.selectTypeTree = '1' + // 鑾峰彇涓績鍒楄〃 + getCenterListByApi() { + const that = this + mdcApi.getCenterOrGroupListApi() + .then(res => { + if (res.success) { + that.centerList = res.result + that.queryParam.productionId = res.result[0].value + that.getGroupListByApi(res.result[0].value, true) + } + }) }, - changeSelectionNodedd(val) { - this.selectPeople = val - this.selectTypeTree = '2' + /** + * 鑾峰彇鐝粍鍒楄〃 + * @param productionId 涓績Id + * @param isInitLoad 鏄惁涓哄垵濮嬪寲鍔犺浇 + */ + getGroupListByApi(productionId, isInitLoad = false) { + const that = this + mdcApi.getCenterOrGroupListApi(productionId) + .then(res => { + if (res.success) { + that.groupList = res.result + if (!isInitLoad) return + that.handleGroupSelectChange([res.result[0].value]) + that.loadData() + } + }) + }, + + /** + * 涓績鏀瑰彉鏃惰Е鍙� + * @param value 鏀瑰彉鍚庣殑涓績Id + */ + handleCenterSelectChange(value) { + if (this.productionIds.length > 0) { + this.groupList = [] + this.productionIds = [] + delete this.queryParam.productionIds + } + this.getGroupListByApi(value) + }, + + /** + * 鐝粍鍙戠敓鏀瑰彉鏃惰Е鍙� + * @param value 鏀瑰彉鍚庣殑鐝粍Id + */ + handleGroupSelectChange(value) { + this.productionIds = value + if (value.length === 0) { + delete this.queryParam.productionIds + return + } + this.queryParam.productionIds = value.join(',') + }, + + handleWindowResize() { + if (this.chartContainer) this.chartContainer.resize() } } - } -</script> +</script> \ No newline at end of file diff --git a/src/views/mdc/base/GroupUtilizationRateChart.vue b/src/views/mdc/base/GroupUtilizationRateChart.vue index 7343d52..ad8c62d 100644 --- a/src/views/mdc/base/GroupUtilizationRateChart.vue +++ b/src/views/mdc/base/GroupUtilizationRateChart.vue @@ -1,82 +1,294 @@ <template> - <div style="width: 100%; height: 100%;"> - <a-card :bordered="false"> - <a-row type="flex" :gutter="16"> - <a-col :md="5"> - <a-tabs :activeKey="activeKey" @change="tabChange"> - <a-tab-pane key="1" tab="杞﹂棿灞傜骇" force-render> - <base-tree @getCurrSelected="changeSelectionNode"></base-tree> - </a-tab-pane> - <a-tab-pane v-if="isDepartType == 0" key="2" tab="閮ㄩ棬灞傜骇">, - <depart-tree @getCurrSelectedDD="changeSelectionNodedd"></depart-tree> - </a-tab-pane> - </a-tabs> - </a-col> - <a-col :md="19"> - <ChartComponent :nodePeople='selectPeople' :nodeTree='selectEquipment' :Type="selectTypeTree"/> - </a-col> - </a-row> - </a-card> - </div> + <a-card> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :md="3" :sm="3"> + <a-form-item label="涓績"> + <a-select v-model="queryParam.productionId" placeholder="璇烽�夋嫨涓績"> + <a-select-option v-for="item in centerList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="10" :sm="10"> + <a-form-item label="鐝粍"> + <a-select :value="productionIds" placeholder="璇烽�夋嫨鐝粍" mode="multiple" :maxTagCount="5" + @change="handleGroupSelectChange($event,'productionIds')" allowClear> + <a-select-option v-for="item in groupList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + + <a-col :md="4" :sm="4"> + <a-form-item label="璁惧绫诲瀷"> + <a-select v-model="queryParam.equipmentType" placeholder="璇烽�夋嫨璁惧绫诲瀷" allowClear> + <a-select-option v-for="item in equipmentTypeList" :key="item.id"> + {{ item.equipmentTypeName }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + + <a-col :md="4" :sm="4"> + <a-form-item label="鐝埗"> + <a-select v-model="queryParam.shiftId" placeholder="璇烽�夋嫨鐝埗" allowClear> + <a-select-option v-for="item in shiftList" :key="item.value">{{ item.label }}</a-select-option> + </a-select> + </a-form-item> + </a-col> + + + <!-- <a-col :md="5" :sm="5">--> + <!-- <a-form-item label="鐝">--> + <!-- <a-select v-model="queryParam.workTime" placeholder="璇烽�夋嫨鐝" mode="multiple" :maxTagCount="2">--> + <!-- <a-select-option key="123">涓�鐝�</a-select-option>--> + <!-- <a-select-option key="234">浜岀彮</a-select-option>--> + <!-- <a-select-option key="345">涓夌彮</a-select-option>--> + <!-- </a-select>--> + <!-- </a-form-item>--> + <!-- </a-col>--> + + <a-col :md="2" :sm="2"> + <a-space> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <!-- <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>--> + </a-space> + </a-col> + </a-row> + </a-form> + </div> + + <div id="chart-container" style="height: 700px"></div> + </a-card> </template> <script> -import BaseTree from '../common/BaseTree' -import DepartTree from './modules/DepartList/DepartListTree/DepartTree' -import { mapActions } from 'vuex' -import ChartComponent from '@views/mdc/base/modules/GroupUtilizationRateChart/ChartComponent.vue' +import mdcApi from '@api/mdc' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' export default { name: 'GroupUtilizationRateChart', - components: { - ChartComponent, - BaseTree, - DepartTree, - }, + components: {}, + mixins: [JeecgListMixin], data() { return { - activeKey: '1', - selectEquipment: {}, - selectPeople: {}, - selectTypeTree: '', - isDepartType: '' + disableMixinCreated: true, + queryParam: {}, + productionIds: [],//鐝粍 + centerList: [], + groupList: [], + equipmentTypeList: [], + shiftList: [] } }, - created() { - this.queryTreeData() + mounted() { + window.addEventListener('resize', this.handleWindowResize) + this.handleWindowResize() + this.getCenterListByApi() + this.getEquipmentTypeListApi() + this.getShiftListByApi() }, methods: { - ...mapActions(['QueryDepartTree']), - - queryTreeData() { - this.QueryDepartTree().then(res => { - if (res.success) { - this.isDepartType = res.result[0].value - } else { - this.$notification.warning({ - message: '娑堟伅', - description: res.message - }) - } - }).finally(() => { + // 鑾峰彇鏁版嵁 + loadData() { + this.chartContainer = this.$echarts.init(document.getElementById('chart-container')) + this.initChart({}) + this.chartContainer.showLoading({ + text: '鏁版嵁鍔犺浇涓� ...', + color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊 + textColor: '#0696e1' }) + const that = this + + mdcApi.getGroupChartDataApi(this.queryParam) + .then(res => { + if (res.success) { + if (!res.result.dataList || (res.result.dataList && res.result.dataList.length === 0)) { + that.$notification.warning({ + message: '娑堟伅', + description: '鏆傛棤鏁版嵁' + }) + } + that.initChart(res.result) + } + }) }, - tabChange(val) { - this.activeKey = val - this.selectTypeTree = val + /** + * 鍒濆鍖栧浘琛� + * @param dataList 鍥捐〃鏁版嵁婧� + * @param dateList 鏃ユ湡鍒楄〃 + * @param shiftSubList 鐝鏍囬鍒楄〃 + * @param shiftDataList 鐝鏁版嵁鍒楄〃 + */ + initChart({ dataList, dateList, shiftSubList, shiftDataList }) { + const defaultLegendData = ['24灏忔椂', '24灏忔椂锛堝幓闄ゆ晠闅滆澶囷級', '鐝', '绱杩愯鏃堕棿(h)'] + const defaultSeries = [ + { + type: 'line', + name: '24灏忔椂', + yAxisIndex: 0, + data: dataList ? dataList.map(item => item.utilizationRate) : [] + }, + { + type: 'line', + name: '24灏忔椂锛堝幓闄ゆ晠闅滆澶囷級', + yAxisIndex: 0, + data: dataList ? dataList.map(item => item.amendUtilizationRate) : [] + }, + { + type: 'line', + name: '鐝', + yAxisIndex: 0, + data: dataList ? dataList.map(item => item.shiftUtilizationRate) : [] + }, + { + type: 'bar', + name: '绱杩愯鏃堕棿(h)', + yAxisIndex: 1, + barWidth: '30%', + data: dataList ? dataList.map(item => item.processLong) : [] + } + ] + const option = { + title: { + text: '璁惧缁煎悎鍒╃敤鐜�', + left: 'center', + top: 0, + textStyle: { + fontSize: 22 + } + }, + grid: { + top: '12%', + left: '1%', + right: '1%', + bottom: '1%', + containLabel: true + }, + legend: { + top: '6%', + right: 'center', + itemGap: 20, + data: defaultLegendData + }, + tooltip: { + show: true, + trigger: 'axis' + }, + xAxis: { + type: 'category', + data: dateList ? dateList : [] + }, + yAxis: [ + { + type: 'value', + name: '鍒╃敤鐜�(%)', + axisLine: { + show: true + }, + axisLabel: { + formatter: '{value}%' + } + }, + { + type: 'value', + name: '杩愯鏃堕棿(h)', + axisLine: { + show: true + } + } + ], + series: defaultSeries + } + if (shiftSubList) { + option.legend.data = defaultLegendData.concat(shiftSubList) + const newSeriesData = shiftDataList.map(item => { + return { + type: 'line', + name: item.shiftSubName, + yAxisIndex: 0, + data: item.dataList ? item.dataList.map(item => item.utilizationRate) : [] + } + }) + + option.series = defaultSeries.concat(newSeriesData) + } + + this.chartContainer.setOption(option, true) + this.chartContainer.hideLoading() }, - changeSelectionNode(val) { - this.selectEquipment = val - this.selectTypeTree = '1' + // 鑾峰彇涓績鍒楄〃 + getCenterListByApi() { + const that = this + mdcApi.getCenterOrGroupListApi() + .then(res => { + if (res.success) { + that.centerList = res.result + that.queryParam.productionId = res.result[0].value + that.getGroupListByApi(res.result[0].value) + } + }) }, - changeSelectionNodedd(val) { - this.selectPeople = val - this.selectTypeTree = '2' + /** + * 鑾峰彇鐝粍鍒楄〃 + * @param productionId 涓績Id + */ + getGroupListByApi(productionId) { + const that = this + mdcApi.getCenterOrGroupListApi(productionId) + .then(res => { + if (res.success) { + that.groupList = res.result + that.handleGroupSelectChange([res.result[0].value]) + that.loadData() + } + }) + }, + + /** + * 鐝粍鍙戠敓鏀瑰彉鏃惰Е鍙� + * @param value 鏀瑰彉鍚庣殑鍊� + */ + handleGroupSelectChange(value) { + this.productionIds = value + this.queryParam.productionIds = value.join(',') + }, + + // 鑾峰彇璁惧绫诲瀷鍒楄〃 + getEquipmentTypeListApi() { + const that = this + mdcApi.getEquipmentTypeListApi() + .then(res => { + if (res.success) { + that.equipmentTypeList = res.result + } + }) + }, + + // 鑾峰彇鐝埗鍒楄〃 + getShiftListByApi() { + const that = this + mdcApi.getShiftListApi() + .then(res => { + if (res.success) { + that.shiftList = res.result + } + }) + }, + + handleWindowResize() { + if (this.chartContainer) this.chartContainer.resize() } } - } -</script> +</script> \ No newline at end of file diff --git a/src/views/mdc/base/GroupUtilizationRateCompareChart.vue b/src/views/mdc/base/GroupUtilizationRateCompareChart.vue index db59115..5ab96c8 100644 --- a/src/views/mdc/base/GroupUtilizationRateCompareChart.vue +++ b/src/views/mdc/base/GroupUtilizationRateCompareChart.vue @@ -1,14 +1,38 @@ <template> <a-card> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :md="3" :sm="3"> + <a-form-item label="涓績"> + <a-select v-model="queryParam.productionId" placeholder="璇烽�夋嫨涓績"> + <a-select-option v-for="item in centerList" :key="item.key"> + {{ item.title }} + </a-select-option> + </a-select> + </a-form-item> + </a-col> + + <a-col :md="5" :sm="5"> + <a-space> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <!-- <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>--> + </a-space> + </a-col> + </a-row> + </a-form> + </div> + <div style="display: flex;justify-content: space-between"> - <div id="chart-container-left" style="height: 700px;width: 48%"></div> - <div id="chart-container-right" style="height: 700px;width: 48%"></div> + <div id="chart-container-left" style="height: 700px;width: 30%"></div> + <div id="chart-container-middle" style="height: 700px;width: 30%"></div> + <div id="chart-container-right" style="height: 700px;width: 30%"></div> </div> </a-card> </template> <script> -import api from '@api/mdc' +import mdcApi from '@api/mdc' import { JeecgListMixin } from '@/mixins/JeecgListMixin' export default { @@ -18,64 +42,87 @@ data() { return { disableMixinCreated: true, - typeTree: '', - queryParam: {}, - driveTypeList: [], + centerList: [], + chartsOptionList: [ + { + position: 'left', + title: '鐝粍璁惧缁煎悎鍒╃敤鐜囷紙24h锛�', + property: 'utilizationRateList' + }, + { + position: 'middle', + title: '鐝粍璁惧缁煎悎鍒╃敤鐜囷紙24h鍘婚櫎鏁呴殰鏃堕棿锛�', + property: 'amendUtilizationRateList' + }, + { + position: 'right', + title: '鐝粍璁惧缁煎悎鍒╃敤鐜囷紙璁″垝宸ヤ綔鏃堕棿锛�', + property: 'shiftUtilizationRateList' + } + ], leftChartContainer: null, - rightChartContainer: null, - url: {} + middleChartContainer: null, + rightChartContainer: null } }, - props: { nodeTree: '', Type: '', nodePeople: '' }, - created() { - }, + mounted() { window.addEventListener('resize', this.handleWindowResize) - this.getDriveTypeByApi() - this.loadData() + this.getCenterListByApi() this.handleWindowResize() }, - watch: { - Type(valmath) { - this.dataList = [] - this.queryParam.typeTree = valmath - }, - nodeTree(val) { //鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢 - if (JSON.stringify(val) != '{}') { - if (val.equipmentId != null) { - this.queryParamEquip.parentId = '' - this.queryParamEquip.equipmentId = val.equipmentId - } else { - this.queryParamEquip.parentId = val.key - this.queryParamEquip.equipmentId = '' - } - this.searchQuery() - } - }, - nodePeople(val) { - if (JSON.stringify(val) != '{}') { - if (val.equipmentId != null) { - this.queryParamPeople.parentId = val.equipmentId - this.queryParamPeople.equipmentId = '' - } else { - this.queryParamPeople.parentId = val.key - this.queryParamPeople.equipmentId = '' - } - this.searchQuery() - } - } - }, methods: { + // 鑾峰彇鍥捐〃鏁版嵁 loadData() { - this.initChart('left') - this.initChart('right') + const that = this + this.chartsOptionList.forEach(item => { + that.initChart(item.position) + that.chartSetOption(item.position, item.title, [], [], false) + }) + mdcApi.getGroupRateCompareChartDataApi(this.queryParam.productionId) + .then(res => { + if (res.success) { + that.chartsOptionList.forEach(item => this.chartSetOption(item.position, item.title, res.result[item.property], res.result.dateList)) + } else { + that.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + that.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) }, + /** + * 鍒濆鍖栧浘琛� + * @param position 鍥捐〃浣嶇疆 String + */ initChart(position) { this[position + 'ChartContainer'] = this.$echarts.init(document.getElementById(`chart-container-${position}`)) + this[position + 'ChartContainer'].showLoading({ + text: '鏁版嵁鍔犺浇涓� ...', + color: '#0696e1', // 鍔犺浇鍔ㄧ敾棰滆壊 + textColor: '#0696e1' + }) + }, + + /** + * 璁剧疆鍥炬爣閫夐」 + * @param position 鍥捐〃浣嶇疆 String + * @param title 鍥捐〃鏍囬 String + * @param dataList 鍥捐〃鏁版嵁婧� Array + * @param dateList 鍥捐〃妯潗鏍囨湀浠� Array + * @param isHideLoading 鏄惁鍏抽棴鍔犺浇鍥炬爣 Boolean + */ + chartSetOption(position, title, dataList, dateList, isHideLoading = true) { const option = { title: { - text: position === 'left' ? '鍚勭彮缁�24灏忔椂缁煎悎鏁堢巼瀵规瘮' : '鍚勭彮缁�24灏忔椂缁煎悎鏁堢巼瀵规瘮锛堝幓闄ゆ晠闅滆澶囨椂闂达級', + text: title, left: 'center', top: 0, textStyle: { @@ -86,14 +133,13 @@ top: '10%', left: '1%', right: '1%', - bottom: '5%', + bottom: '12%', containLabel: true }, legend: { - bottom: 0, + bottom: '3%', right: 'center', - itemGap: 20, - data: ['鏁伴摚涓�鐝�', '鏁伴摚浜岀彮', '鏁伴摚涓夌彮', '鏁拌溅鐝�'] + data: dataList.map(item => item.productionName) }, tooltip: { show: true, @@ -101,7 +147,7 @@ }, xAxis: { type: 'category', - data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�'] + data: dateList }, yAxis: [ { @@ -115,63 +161,57 @@ } } ], - series: [ - { + series: dataList.map(item => { + return { type: 'line', - name: '鏁伴摚涓�鐝�', - yAxisIndex: 0, - data: [85, 32, 23, 56, 24, 64, 34, 85, 32, 23, 56, 24] - }, - { - type: 'line', - name: '鏁伴摚浜岀彮', - yAxisIndex: 0, - data: [23, 42, 76, 54, 87, 34, 53, 76, 54, 87, 34, 53] - }, - { - type: 'line', - name: '鏁伴摚涓夌彮', - yAxisIndex: 0, - data: [10, 84, 21, 42, 53, 57, 32, 21, 42, 53, 57, 32] - }, - { - type: 'line', - name: '鏁拌溅鐝�', - yAxisIndex: 0, - data: [23, 32, 42, 35, 64, 53, 16, 42, 35, 64, 53, 16] + name: item.productionName, + data: item.dataList.map(item => item.utilizationRate) } - ] + }) + // series: [ + // { + // type: 'line', + // name: '鏁伴摚涓�鐝�', + // data: [85, 32, 23, 56, 24, 64] + // }, + // { + // type: 'line', + // name: '鏁伴摚浜岀彮', + // data: [23, 42, 76, 54, 87, 34] + // }, + // { + // type: 'line', + // name: '鏁伴摚涓夌彮', + // data: [10, 84, 21, 42, 53, 57] + // }, + // { + // type: 'line', + // name: '鏁拌溅鐝�', + // data: [23, 32, 42, 35, 64, 53] + // } + // ] } this[position + 'ChartContainer'].setOption(option, true) + if (isHideLoading) this[position + 'ChartContainer'].hideLoading() }, - // 璋冪敤鎺ュ彛鑾峰彇鎺у埗绯荤粺绫诲瀷 - getDriveTypeByApi() { - api.getDriveTypeApi().then((res) => { - this.driveTypeList = res.result.map(item => item.value) - }) - }, - - /** - * 鑱旀兂杈撳叆妗嗙瓫閫夊姛鑳� - * @param input 杈撳叆鐨勫唴瀹� - * @param option 閰嶇疆 - * @returns {boolean} 鍒ゆ柇鏄惁绛涢�� - */ - filterOption(input, option) { - return ( - option.componentOptions.children[0].text.toUpperCase().indexOf(input.toUpperCase()) >= 0 - ) + // 鑾峰彇涓績鍒楄〃 + getCenterListByApi() { + mdcApi.getCenterOrGroupListApi() + .then(res => { + if (res.success) { + this.centerList = res.result + this.queryParam.productionId = res.result[0].value + this.loadData() + } + }) }, handleWindowResize() { if (this.leftChartContainer) this.leftChartContainer.resize() + if (this.middleChartContainer) this.middleChartContainer.resize() if (this.rightChartContainer) this.rightChartContainer.resize() } } } -</script> - -<style scoped lang="less"> - -</style> \ No newline at end of file +</script> \ No newline at end of file diff --git a/src/views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue b/src/views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue index 7ad05bd..372778b 100644 --- a/src/views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue +++ b/src/views/mdc/base/modules/DeliveryGroupUtilizationRateChart/ChartComponent.vue @@ -106,15 +106,15 @@ } }, grid: { - top: '10%', + top: '12%', left: '1%', right: '1%', bottom: '1%', containLabel: true }, legend: { - top: 0, - right: 0, + top: '6%', + right: 'center', itemGap: 20, data: ['缁煎悎鏁堢巼锛堝叏閮ㄨ澶囨椂闂达級', '缁煎悎鏁堢巼锛堝幓闄ゆ晠闅滆澶囨椂闂达級'] }, diff --git a/src/views/system/UserList.vue b/src/views/system/UserList.vue index 5a29723..e6fa01a 100644 --- a/src/views/system/UserList.vue +++ b/src/views/system/UserList.vue @@ -14,48 +14,19 @@ </a-col> <a-col :md="6" :sm="8"> - <a-form-item label="鎬у埆"> - <a-select v-model="queryParam.sex" placeholder="璇烽�夋嫨鎬у埆"> + <a-form-item label="鐢ㄦ埛鐘舵��"> + <a-select v-model="queryParam.status" placeholder="璇烽�夋嫨"> <a-select-option value="">璇烽�夋嫨</a-select-option> - <a-select-option value="1">鐢�</a-select-option> - <a-select-option value="2">濂�</a-select-option> + <a-select-option value="1">姝e父</a-select-option> + <a-select-option value="2">鍐荤粨</a-select-option> </a-select> </a-form-item> </a-col> - - - <template v-if="toggleSearchStatus"> - <a-col :md="6" :sm="8"> - <a-form-item label="鐪熷疄鍚嶅瓧"> - <a-input placeholder="璇疯緭鍏ョ湡瀹炲悕瀛�" v-model="queryParam.realname"></a-input> - </a-form-item> - </a-col> - - <a-col :md="6" :sm="8"> - <a-form-item label="鎵嬫満鍙风爜"> - <a-input placeholder="璇疯緭鍏ユ墜鏈哄彿鐮佹煡璇�" v-model="queryParam.phone"></a-input> - </a-form-item> - </a-col> - - <a-col :md="6" :sm="8"> - <a-form-item label="鐢ㄦ埛鐘舵��"> - <a-select v-model="queryParam.status" placeholder="璇烽�夋嫨"> - <a-select-option value="">璇烽�夋嫨</a-select-option> - <a-select-option value="1">姝e父</a-select-option> - <a-select-option value="2">鍐荤粨</a-select-option> - </a-select> - </a-form-item> - </a-col> - </template> <a-col :md="6" :sm="8"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> - <a @click="handleToggleSearch" style="margin-left: 8px"> - {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} - <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> - </a> </span> </a-col> diff --git a/src/views/system/modules/PasswordModal.vue b/src/views/system/modules/PasswordModal.vue index f9f897e..c73b25d 100644 --- a/src/views/system/modules/PasswordModal.vue +++ b/src/views/system/modules/PasswordModal.vue @@ -16,12 +16,13 @@ <a-input placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" v-decorator="[ 'username', {}]" :readOnly="true"/> </a-form-item> - <a-form-item label="鐧诲綍瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback > - <a-input type="password" placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" v-decorator="[ 'password', validatorRules.password]" /> + <a-form-item label="鐧诲綍瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback> + <a-input type="password" placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" v-decorator="[ 'password', validatorRules.password]"/> </a-form-item> - <a-form-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback > - <a-input type="password" @blur="handleConfirmBlur" placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/> + <a-form-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" hasFeedback> + <a-input type="password" @blur="handleConfirmBlur" placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" + v-decorator="[ 'confirmpassword', validatorRules.confirmpassword]"/> </a-form-item> </a-form> @@ -30,113 +31,115 @@ </template> <script> - import {changePassword} from '@/api/api' +import { changePassword } from '@/api/api' - export default { - name: "PasswordModal", - data () { - return { - visible: false, - confirmLoading: false, - confirmDirty: false, - validatorRules:{ - password:{ - rules: [{ +export default { + name: 'PasswordModal', + data() { + return { + visible: false, + confirmLoading: false, + confirmDirty: false, + validatorRules: { + password: { + rules: [ + { required: true, - pattern:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, - message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!' - }, { - validator: this.validateToNextPassword, - }], - }, - confirmpassword:{ - rules: [{ - required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!', - }, { - validator: this.compareToFirstPassword, - }], - }, + // pattern:/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, + message: '璇疯緭鍏ョ櫥褰曞瘑鐮�!' + }, + { + validator: this.validateToNextPassword + }] }, + confirmpassword: { + rules: [{ + required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!' + }, { + validator: this.compareToFirstPassword + }] + } + }, - model: {}, + model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 }, - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 }, - }, - form:this.$form.createForm(this) + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + form: this.$form.createForm(this) + } + }, + created() { + console.log('created') + }, + + methods: { + show(username) { + this.form.resetFields() + this.visible = true + this.model.username = username + this.$nextTick(() => { + this.form.setFieldsValue({ username: username }) + }) + }, + close() { + this.$emit('close') + this.visible = false + this.disableSubmit = false + this.selectedRole = [] + }, + handleSubmit() { + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.form.validateFields((err, values) => { + if (!err) { + this.confirmLoading = true + let formData = Object.assign(this.model, values) + changePassword(formData).then((res) => { + if (res.success) { + this.$message.success(res.message) + this.$emit('ok') + } else { + this.$message.warning(res.message) + } + }).finally(() => { + this.confirmLoading = false + this.close() + }) + } + }) + }, + handleCancel() { + this.close() + }, + validateToNextPassword(rule, value, callback) { + const form = this.form + const confirmpassword = form.getFieldValue('confirmpassword') + console.log('confirmpassword==>', confirmpassword) + if (value && confirmpassword && value !== confirmpassword) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') + } + if (value && this.confirmDirty) { + form.validateFields(['confirm'], { force: true }) + } + callback() + }, + compareToFirstPassword(rule, value, callback) { + const form = this.form + if (value && value !== form.getFieldValue('password')) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') + } else { + callback() } }, - created () { - console.log("created"); - }, - - methods: { - show (username) { - this.form.resetFields(); - this.visible = true; - this.model.username = username; - this.$nextTick(() => { - this.form.setFieldsValue({username:username}); - }); - }, - close () { - this.$emit('close'); - this.visible = false; - this.disableSubmit = false; - this.selectedRole = []; - }, - handleSubmit () { - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.form.validateFields((err, values) => { - if (!err) { - this.confirmLoading = true; - let formData = Object.assign(this.model, values); - changePassword(formData).then((res)=>{ - if(res.success){ - this.$message.success(res.message); - this.$emit('ok'); - }else{ - this.$message.warning(res.message); - } - }).finally(() => { - this.confirmLoading = false; - this.close(); - }); - } - }) - }, - handleCancel () { - this.close() - }, - validateToNextPassword (rule, value, callback) { - const form = this.form; - const confirmpassword=form.getFieldValue('confirmpassword'); - console.log("confirmpassword==>",confirmpassword); - if (value && confirmpassword && value !== confirmpassword) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); - } - if (value && this.confirmDirty) { - form.validateFields(['confirm'], { force: true }) - } - callback(); - }, - compareToFirstPassword (rule, value, callback) { - const form = this.form; - if (value && value !== form.getFieldValue('password')) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); - } else { - callback() - } - }, - handleConfirmBlur (e) { - const value = e.target.value - this.confirmDirty = this.confirmDirty || !!value - } + handleConfirmBlur(e) { + const value = e.target.value + this.confirmDirty = this.confirmDirty || !!value } } +} </script> \ No newline at end of file diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index 1bf4935..6f8fbd6 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -157,7 +157,8 @@ :wrapperCol="wrapperCol" v-show="!productionDisabled" > - <a-tooltip title="閫夋嫨璁惧鍚庯紝鐢ㄦ埛灏卞彧鏈夎繖浜涜澶囩殑鏉冮檺锛佷笉閫夋嫨璁惧锛屽垯浼氭牴鎹溅闂村垎閰嶆帶鍒惰澶囩殑鏉冮檺锛�" placement="topRight"> + <a-tooltip title="閫夋嫨璁惧鍚庯紝鐢ㄦ埛灏卞彧鏈夎繖浜涜澶囩殑鏉冮檺锛佷笉閫夋嫨璁惧锛屽垯浼氭牴鎹溅闂村垎閰嶆帶鍒惰澶囩殑鏉冮檺锛�" + placement="topRight"> <a-input-search :readOnly="true" v-model="model.equipmentIds" @@ -170,70 +171,69 @@ </a-form-model-item> - <!--<a-form-model-item--> - <!--label="棣栭〉鏉冮檺"--> - <!--:labelCol="labelCol"--> - <!--:wrapperCol="wrapperCol"--> + <!--label="棣栭〉鏉冮檺"--> + <!--:labelCol="labelCol"--> + <!--:wrapperCol="wrapperCol"--> <!-->--> - <!--<a-radio-group--> - <!--v-model="model.userType"--> - <!--:defaultValue="0"--> - <!-->--> - <!--<a-radio :value="4">鍏徃绾�</a-radio>--> - <!--<a-radio :value="3">杞﹂棿绾�</a-radio>--> - <!--<a-radio :value="2">宸ユ绾�</a-radio>--> - <!--<a-radio :value="1">鎿嶄綔宸�</a-radio>--> - <!--<a-radio :value="0">鏃�</a-radio>--> - <!--</a-radio-group>--> + <!--<a-radio-group--> + <!--v-model="model.userType"--> + <!--:defaultValue="0"--> + <!-->--> + <!--<a-radio :value="4">鍏徃绾�</a-radio>--> + <!--<a-radio :value="3">杞﹂棿绾�</a-radio>--> + <!--<a-radio :value="2">宸ユ绾�</a-radio>--> + <!--<a-radio :value="1">鎿嶄綔宸�</a-radio>--> + <!--<a-radio :value="0">鏃�</a-radio>--> + <!--</a-radio-group>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> - <!--label="鐝粍鍒嗛厤"--> - <!--:labelCol="labelCol"--> - <!--:wrapperCol="wrapperCol"--> - <!--prop="teamId"--> + <!--label="鐝粍鍒嗛厤"--> + <!--:labelCol="labelCol"--> + <!--:wrapperCol="wrapperCol"--> + <!--prop="teamId"--> <!-->--> - <!--<j-dict-select-tag--> - <!--v-model="model.teamId"--> - <!--:triggerChange="true"--> - <!--dictCode="mom_base_team,name,id,del_flag = 0"--> - <!--placeholder="璇风淮鎶ょ彮缁�"--> - <!--></j-dict-select-tag>--> + <!--<j-dict-select-tag--> + <!--v-model="model.teamId"--> + <!--:triggerChange="true"--> + <!--dictCode="mom_base_team,name,id,del_flag = 0"--> + <!--placeholder="璇风淮鎶ょ彮缁�"--> + <!--></j-dict-select-tag>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> - <!--label="涓績鍒嗛厤"--> - <!--:labelCol="labelCol"--> - <!--:wrapperCol="wrapperCol"--> - <!--prop="areaId"--> + <!--label="涓績鍒嗛厤"--> + <!--:labelCol="labelCol"--> + <!--:wrapperCol="wrapperCol"--> + <!--prop="areaId"--> <!-->--> - <!--<!– <j-dict-select-tag--> - <!--v-model="model.areaId"--> - <!--:triggerChange="true"--> - <!--dictCode="mom_base_area,name,id,del_flag = 0"--> - <!--placeholder="璇风淮鎶や腑蹇�"--> - <!--></j-dict-select-tag> –>--> - <!--<j-multi-select-tag--> - <!--:triggerChange="true"--> - <!--v-model="model.areaId"--> - <!--dictCode="mom_base_area,name,id,del_flag = 0 and type = 1"--> - <!--placeholder="璇风淮鎶や腑蹇�"--> - <!-->--> - <!--</j-multi-select-tag>--> + <!--<!– <j-dict-select-tag--> + <!--v-model="model.areaId"--> + <!--:triggerChange="true"--> + <!--dictCode="mom_base_area,name,id,del_flag = 0"--> + <!--placeholder="璇风淮鎶や腑蹇�"--> + <!--></j-dict-select-tag> –>--> + <!--<j-multi-select-tag--> + <!--:triggerChange="true"--> + <!--v-model="model.areaId"--> + <!--dictCode="mom_base_area,name,id,del_flag = 0 and type = 1"--> + <!--placeholder="璇风淮鎶や腑蹇�"--> + <!-->--> + <!--</j-multi-select-tag>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> - <!--label="璐熻矗閮ㄩ棬"--> - <!--:labelCol="labelCol"--> - <!--:wrapperCol="wrapperCol"--> - <!--v-if="departIdShow==true"--> + <!--label="璐熻矗閮ㄩ棬"--> + <!--:labelCol="labelCol"--> + <!--:wrapperCol="wrapperCol"--> + <!--v-if="departIdShow==true"--> <!-->--> - <!--<j-multi-select-tag--> - <!--:disabled="disableSubmit"--> - <!--v-model="model.departIds"--> - <!--:options="nextDepartOptions"--> - <!--placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬"--> - <!-->--> - <!--</j-multi-select-tag>--> + <!--<j-multi-select-tag--> + <!--:disabled="disableSubmit"--> + <!--v-model="model.departIds"--> + <!--:options="nextDepartOptions"--> + <!--placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬"--> + <!-->--> + <!--</j-multi-select-tag>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> @@ -348,504 +348,504 @@ </template> <script> - import moment from 'moment' - import Vue from 'vue' - import { ACCESS_TOKEN } from '@/store/mutation-types' - import { getAction } from '@/api/manage' - import { addUser, editUser, queryUserRole, queryall } from '@/api/api' - import { disabledAuthFilter } from '@/utils/authFilter' - import { duplicateCheck } from '@/api/api' - import JSelectProduction from '../../../components/jeecgbiz/JSelectProduction' - import { mapActions } from 'vuex' - import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' - import SelectDeviceModal from './SelectDeviceModal' +import moment from 'moment' +import Vue from 'vue' +import { ACCESS_TOKEN } from '@/store/mutation-types' +import { getAction } from '@/api/manage' +import { addUser, editUser, queryUserRole, queryall } from '@/api/api' +import { disabledAuthFilter } from '@/utils/authFilter' +import { duplicateCheck } from '@/api/api' +import JSelectProduction from '../../../components/jeecgbiz/JSelectProduction' +import { mapActions } from 'vuex' +import { ajaxGetDictItems, getDictItemsFromCache } from '@/api/api' +import SelectDeviceModal from './SelectDeviceModal' - export default { - name: 'UserModal', - components: { - SelectDeviceModal, - JSelectProduction - }, - data() { - return { - departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 - productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 - roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 - modalWidth: 800, - drawerWidth: 700, - modaltoggleFlag: true, - confirmDirty: false, - userId: '', //淇濆瓨鐢ㄦ埛id - disableSubmit: false, - dateFormat: 'YYYY-MM-DD', - validatorRules: { - username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' }, - { validator: this.validateUsername }], - password: [ - // { - // required: true, - // pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, - // message: '瀵嗙爜鐢�8浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!' - // }, - { validator: this.validateToNextPassword, trigger: 'change' }], - confirmpassword: [{ required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!' }, - { validator: this.compareToFirstPassword }], - realname: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕绉�!' }], - phone: [{ required: false, message: '璇疯緭鍏ユ墜鏈哄彿!' }, { validator: this.validatePhone }], - email: [{ validator: this.validateEmail }], - roles: {}, - workNo: [{ required: true, message: '璇疯緭鍏ュ伐鍙�' }, - { validator: this.validateWorkNo }], - telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }], - teamId: [{ required: false, message: '璇风淮鎶ょ彮缁�' }] - }, - departIdShow: false, - title: '鎿嶄綔', - visible: false, - model: {}, - labelCol: { - xs: { span: 24 }, - sm: { span: 5 } - }, - wrapperCol: { - xs: { span: 24 }, - sm: { span: 16 } - }, - uploadLoading: false, - confirmLoading: false, - headers: {}, - url: { - fileUpload: window._CONFIG['domianURL'] + 'sys/common/upload', - userWithDepart: '/sys/user/userDepartList', // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url - //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url - userProductionList: '/sys/user/userProductionList', - userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url - syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦 - queryTenantList: '/sys/tenant/queryList' - }, - tenantsOptions: [], - rolesOptions: [], - nextDepartOptions: [], - nextProductionOptions: [], - isDepartType: '', - model: { - selectedProduction: '' - } - } - }, - watch: { - visible: { - handler(value) { - if (value) this.initDictData('password_length') - } +export default { + name: 'UserModal', + components: { + SelectDeviceModal, + JSelectProduction + }, + data() { + return { + departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 + productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 + roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 + modalWidth: 800, + drawerWidth: 700, + modaltoggleFlag: true, + confirmDirty: false, + userId: '', //淇濆瓨鐢ㄦ埛id + disableSubmit: false, + dateFormat: 'YYYY-MM-DD', + validatorRules: { + username: [{ required: true, message: '璇疯緭鍏ョ敤鎴疯处鍙�!' }, + { validator: this.validateUsername }], + password: [ + { + required: true, + // pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/, + message: '璇疯緭鍏ョ櫥褰曞瘑鐮�!' + }, + { validator: this.validateToNextPassword, trigger: 'change' }], + confirmpassword: [{ required: true, message: '璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�!' }, + { validator: this.compareToFirstPassword }], + realname: [{ required: true, message: '璇疯緭鍏ョ敤鎴峰悕绉�!' }], + phone: [{ required: false, message: '璇疯緭鍏ユ墜鏈哄彿!' }, { validator: this.validatePhone }], + email: [{ validator: this.validateEmail }], + roles: {}, + // workNo: [{ required: true, message: '璇疯緭鍏ュ伐鍙�' }, + // { validator: this.validateWorkNo }], + telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }], + teamId: [{ required: false, message: '璇风淮鎶ょ彮缁�' }] }, - 'model.selectedProduction': { - handler(newVal, oldVal) { - if (newVal && this.$refs.selectDeviceModal) { - // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧 - if ((oldVal && newVal !== oldVal)) this.model.equipmentIds = '' - this.$refs.selectDeviceModal.queryTreeData(newVal) - } - // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 - if (newVal === '') this.model.equipmentIds = '' - } - } - }, - created() { - const token = Vue.ls.get(ACCESS_TOKEN) - this.headers = { 'X-Access-Token': token } - this.initRoleList() - this.initTenantList() - this.queryTreeData() - }, - computed: { - uploadAction: function () { - return this.url.fileUpload - } - }, - methods: { - ...mapActions(['QueryDepartTree']), - queryTreeData() { - this.QueryDepartTree().then(res => { - if (res.success) { - this.isDepartType = res.result[0].value - } else { - // this.$message.warn(res.message) - this.$notification.warning({ - message: '娑堟伅', - description: res.message - }) - } - }).finally(() => { - }) + departIdShow: false, + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } }, - add() { - this.refresh() - this.edit({ - activitiSync: '1', - userType: 0, - userIdentity: 1, - selectedroles: '', - selecteddeparts: '', - selectedProduction: '' - }) + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } }, - edit(record) { - let that = this - that.visible = true - //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害 - this.resetScreenSize() - that.userId = record.id - console.log('record', record) - that.model = Object.assign({}, record) - //韬唤涓轰笂绾ф樉绀鸿礋璐i儴闂紝鍚﹀垯涓嶆樉绀� - if (this.model.userIdentity == 2) { - this.departIdShow = true - } else { - this.departIdShow = false - } - - if (record.hasOwnProperty('id')) { - that.getUserRoles(record.id) - that.getUserDeparts(record.id) - } + uploadLoading: false, + confirmLoading: false, + headers: {}, + url: { + fileUpload: window._CONFIG['domianURL'] + 'sys/common/upload', + userWithDepart: '/sys/user/userDepartList', // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url + //寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬭溅闂翠俊鎭渶瑕佺殑url + userProductionList: '/sys/user/userProductionList', + userId: '/sys/user/generateUserId', // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url + syncUserByUserName: '/act/process/extActProcess/doSyncUserByUserName',//鍚屾鐢ㄦ埛鍒板伐浣滄祦 + queryTenantList: '/sys/tenant/queryList' }, - isDisabledAuth(code) { - return disabledAuthFilter(code) - }, - //绐楀彛鏈�澶у寲鍒囨崲 - toggleScreen() { - if (this.modaltoggleFlag) { - this.modalWidth = window.innerWidth - } else { - this.modalWidth = 800 - } - this.modaltoggleFlag = !this.modaltoggleFlag - }, - // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄 - resetScreenSize() { - let screenWidth = document.body.clientWidth - if (screenWidth < 500) { - this.drawerWidth = screenWidth - } else { - this.drawerWidth = 700 - } - }, - //鍒濆鍖栫鎴峰瓧鍏� - initTenantList() { - getAction(this.url.queryTenantList).then(res => { - if (res.success) { - this.tenantsOptions = res.result.map((item, index, arr) => { - let c = { label: item.name, value: item.id + '' } - return c - }) - } - }) - }, - //鍒濆鍖栬鑹插瓧鍏� - initRoleList() { - queryall().then((res) => { - if (res.success) { - this.rolesOptions = res.result.map((item, index, arr) => { - let c = { label: item.roleName, value: item.id } - return c - }) - } - }) - }, - getUserRoles(userid) { - queryUserRole({ userid: userid }).then((res) => { - if (res.success) { - this.$set(this.model, 'selectedroles', res.result.join(',')) - } - }) - }, - getUserDeparts(userid) { - let that = this - //閮ㄩ棬鐨剈rl 鑾峰彇閮ㄩ棬鍒嗛厤 - getAction(that.url.userWithDepart, { userId: userid }).then((res) => { - if (res.success) { - let departOptions = [] - let selectDepartKeys = [] - for (let i = 0; i < res.result.length; i++) { - selectDepartKeys.push(res.result[i].key) - //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� - departOptions.push({ - value: res.result[i].key, - label: res.result[i].title - }) - } - - this.$set(this.model, 'selecteddeparts', selectDepartKeys.join(',')) - that.nextDepartOptions = departOptions - } - }) - - // 鑾峰彇杞﹂棿鍒嗛厤 - getAction(that.url.userProductionList, { userId: userid }).then((res) => { - if (res.success) { - let ProductionOptions = [] - let selectProductKeys = [] - for (let i = 0; i < res.result.length; i++) { - selectProductKeys.push(res.result[i].key) - //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� - ProductionOptions.push({ - value: res.result[i].key, - label: res.result[i].title - }) - } - - this.$set(this.model, 'selectedProduction', selectProductKeys.join(',')) - that.nextProductionOptions = ProductionOptions - } - }) - //杞﹂棿鐨剈rl - }, - backDepartInfo(info) { - this.model.departIds = this.model.selecteddeparts - this.nextDepartOptions = info.map((item, index, arr) => { - let c = { label: item.text, value: item.value + '' } - return c - }) - }, - backProductionInfo(info) { - this.model.productionIds = this.model.selectedProduction - this.nextProductionOptions = info.map((item, index, arr) => { - let c = { label: item.text, value: item.value + '' } - return c - }) - }, - - refresh() { - this.userId = '' - this.nextDepartOptions = [] - this.nextProductionOptions = [] - this.departIdShow = false - }, - close() { - this.$emit('close') - this.visible = false - this.disableSubmit = false - this.nextDepartOptions = [] - this.nextProductionOptions = [] - this.departIdShow = false - this.$refs.form.resetFields() - }, - moment, - handleSubmit() { - const that = this - // 瑙﹀彂琛ㄥ崟楠岃瘉 - this.$refs.form.validate(valid => { - if (valid) { - that.confirmLoading = true - //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖ - if (this.model.userIdentity !== 2) { - this.model.departIds = '' - } - let obj - if (!this.model.id) { - this.model.id = this.userId - obj = addUser(this.model) - } else { - obj = editUser(this.model) - } - obj.then((res) => { - if (res.success) { - that.$message.success(res.message) - that.$emit('ok') - } else { - that.$message.warning(res.message) - } - }).finally(() => { - that.confirmLoading = false - that.close() - }) - } else { - return false - } - }) - }, - handleCancel() { - this.close() - }, - validateToNextPassword(rule, value, callback) { - const confirmpassword = this.model.confirmpassword - if (value && confirmpassword && value !== confirmpassword) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') - } - if (value && this.confirmDirty) { - this.$refs.form.validateField(['confirmpassword']) - } - callback() - }, - compareToFirstPassword(rule, value, callback) { - if (value && value !== this.model.password) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') - } else { - callback() - } - }, - validatePhone(rule, value, callback) { - if (!value) { - callback() - } else { - if (new RegExp(/^1[3|4|5|7|8|9][0-9]\d{8}$/).test(value)) { - var params = { - tableName: 'sys_user', - fieldName: 'phone', - fieldVal: value, - dataId: this.userId - } - duplicateCheck(params).then((res) => { - if (res.success) { - callback() - } else { - callback('鎵嬫満鍙峰凡瀛樺湪!') - } - }) - } else { - callback('璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!') - } - } - }, - validateEmail(rule, value, callback) { - if (!value) { - callback() - } else { - if (new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/).test(value)) { - var params = { - tableName: 'sys_user', - fieldName: 'email', - fieldVal: value, - dataId: this.userId - } - duplicateCheck(params).then((res) => { - console.log(res) - if (res.success) { - callback() - } else { - callback('閭宸插瓨鍦�!') - } - }) - } else { - callback('璇疯緭鍏ユ纭牸寮忕殑閭!') - } - } - }, - validateUsername(rule, value, callback) { - var params = { - tableName: 'sys_user', - fieldName: 'username', - fieldVal: value, - dataId: this.userId - } - duplicateCheck(params).then((res) => { - if (res.success) { - callback() - } else { - callback('鐢ㄦ埛鍚嶅凡瀛樺湪!') - } - }) - }, - validateWorkNo(rule, value, callback) { - var params = { - tableName: 'sys_user', - fieldName: 'work_no', - fieldVal: value, - dataId: this.userId - } - duplicateCheck(params).then((res) => { - if (res.success) { - callback() - } else { - callback('宸ュ彿宸插瓨鍦�!') - } - }) - }, - handleConfirmBlur(e) { - const value = e.target.value - this.confirmDirty = this.confirmDirty || !!value - }, - beforeUpload: function (file) { - var fileType = file.type - if (fileType.indexOf('image') < 0) { - this.$message.warning('璇蜂笂浼犲浘鐗�') - return false - } - //TODO 楠岃瘉鏂囦欢澶у皬 - }, - identityChange(e) { - if (e.target.value === 1) { - this.departIdShow = false - } else { - this.departIdShow = true - } - }, - initDictData(dictCode) { - //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁� - ajaxGetDictItems(dictCode, null).then((res) => { - if (res.success) { - const regExp = new RegExp('^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:";\'<>?,./]).{' + Number(res.result[0].value) + ',}$') - - this.validatorRules.password[0] = { - required: true, - pattern: regExp, - message: `瀵嗙爜鐢�${res.result[0].value}浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!` - } - - } - }) - }, - - deviceSearch() { - this.$refs.selectDeviceModal.visible = true - this.$refs.selectDeviceModal.selectedRowKeys = [] - this.$refs.selectDeviceModal.selectedRows = [] - this.$refs.selectDeviceModal.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : [] - }, - - /** - * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 - * @param data 宸查�夋嫨鐨勮澶囨暟缁� - */ - selectOK(data) { - console.log('data=', data) - this.$set(this.model, 'equipmentIds', data.join(',')) + tenantsOptions: [], + rolesOptions: [], + nextDepartOptions: [], + nextProductionOptions: [], + isDepartType: '', + model: { + selectedProduction: '' } } + }, + watch: { + visible: { + handler(value) { + if (value) this.initDictData('password_length') + } + }, + 'model.selectedProduction': { + handler(newVal, oldVal) { + if (newVal && this.$refs.selectDeviceModal) { + // 濡傛灉杞﹂棿閫夋嫨鍓嶅悗涓嶄竴鑷村垯閲嶇疆閫夋嫨璁惧 + if ((oldVal && newVal !== oldVal)) this.model.equipmentIds = '' + this.$refs.selectDeviceModal.queryTreeData(newVal) + } + // 濡傛灉娓呯┖杞﹂棿鍊煎垯閲嶇疆閫夋嫨璁惧 + if (newVal === '') this.model.equipmentIds = '' + } + } + }, + created() { + const token = Vue.ls.get(ACCESS_TOKEN) + this.headers = { 'X-Access-Token': token } + this.initRoleList() + this.initTenantList() + this.queryTreeData() + }, + computed: { + uploadAction: function() { + return this.url.fileUpload + } + }, + methods: { + ...mapActions(['QueryDepartTree']), + queryTreeData() { + this.QueryDepartTree().then(res => { + if (res.success) { + this.isDepartType = res.result[0].value + } else { + // this.$message.warn(res.message) + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }).finally(() => { + }) + }, + add() { + this.refresh() + this.edit({ + activitiSync: '1', + userType: 0, + userIdentity: 1, + selectedroles: '', + selecteddeparts: '', + selectedProduction: '' + }) + }, + edit(record) { + let that = this + that.visible = true + //鏍规嵁灞忓箷瀹藉害鑷�傚簲鎶藉眽瀹藉害 + this.resetScreenSize() + that.userId = record.id + console.log('record', record) + that.model = Object.assign({}, record) + //韬唤涓轰笂绾ф樉绀鸿礋璐i儴闂紝鍚﹀垯涓嶆樉绀� + if (this.model.userIdentity == 2) { + this.departIdShow = true + } else { + this.departIdShow = false + } + + if (record.hasOwnProperty('id')) { + that.getUserRoles(record.id) + that.getUserDeparts(record.id) + } + }, + isDisabledAuth(code) { + return disabledAuthFilter(code) + }, + //绐楀彛鏈�澶у寲鍒囨崲 + toggleScreen() { + if (this.modaltoggleFlag) { + this.modalWidth = window.innerWidth + } else { + this.modalWidth = 800 + } + this.modaltoggleFlag = !this.modaltoggleFlag + }, + // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄 + resetScreenSize() { + let screenWidth = document.body.clientWidth + if (screenWidth < 500) { + this.drawerWidth = screenWidth + } else { + this.drawerWidth = 700 + } + }, + //鍒濆鍖栫鎴峰瓧鍏� + initTenantList() { + getAction(this.url.queryTenantList).then(res => { + if (res.success) { + this.tenantsOptions = res.result.map((item, index, arr) => { + let c = { label: item.name, value: item.id + '' } + return c + }) + } + }) + }, + //鍒濆鍖栬鑹插瓧鍏� + initRoleList() { + queryall().then((res) => { + if (res.success) { + this.rolesOptions = res.result.map((item, index, arr) => { + let c = { label: item.roleName, value: item.id } + return c + }) + } + }) + }, + getUserRoles(userid) { + queryUserRole({ userid: userid }).then((res) => { + if (res.success) { + this.$set(this.model, 'selectedroles', res.result.join(',')) + } + }) + }, + getUserDeparts(userid) { + let that = this + //閮ㄩ棬鐨剈rl 鑾峰彇閮ㄩ棬鍒嗛厤 + getAction(that.url.userWithDepart, { userId: userid }).then((res) => { + if (res.success) { + let departOptions = [] + let selectDepartKeys = [] + for (let i = 0; i < res.result.length; i++) { + selectDepartKeys.push(res.result[i].key) + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + departOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + this.$set(this.model, 'selecteddeparts', selectDepartKeys.join(',')) + that.nextDepartOptions = departOptions + } + }) + + // 鑾峰彇杞﹂棿鍒嗛厤 + getAction(that.url.userProductionList, { userId: userid }).then((res) => { + if (res.success) { + let ProductionOptions = [] + let selectProductKeys = [] + for (let i = 0; i < res.result.length; i++) { + selectProductKeys.push(res.result[i].key) + //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� + ProductionOptions.push({ + value: res.result[i].key, + label: res.result[i].title + }) + } + + this.$set(this.model, 'selectedProduction', selectProductKeys.join(',')) + that.nextProductionOptions = ProductionOptions + } + }) + //杞﹂棿鐨剈rl + }, + backDepartInfo(info) { + this.model.departIds = this.model.selecteddeparts + this.nextDepartOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + backProductionInfo(info) { + this.model.productionIds = this.model.selectedProduction + this.nextProductionOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c + }) + }, + + refresh() { + this.userId = '' + this.nextDepartOptions = [] + this.nextProductionOptions = [] + this.departIdShow = false + }, + close() { + this.$emit('close') + this.visible = false + this.disableSubmit = false + this.nextDepartOptions = [] + this.nextProductionOptions = [] + this.departIdShow = false + this.$refs.form.resetFields() + }, + moment, + handleSubmit() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖ + if (this.model.userIdentity !== 2) { + this.model.departIds = '' + } + let obj + if (!this.model.id) { + this.model.id = this.userId + obj = addUser(this.model) + } else { + obj = editUser(this.model) + } + obj.then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + that.close() + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + }, + validateToNextPassword(rule, value, callback) { + const confirmpassword = this.model.confirmpassword + if (value && confirmpassword && value !== confirmpassword) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') + } + if (value && this.confirmDirty) { + this.$refs.form.validateField(['confirmpassword']) + } + callback() + }, + compareToFirstPassword(rule, value, callback) { + if (value && value !== this.model.password) { + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') + } else { + callback() + } + }, + validatePhone(rule, value, callback) { + if (!value) { + callback() + } else { + if (new RegExp(/^1[3|4|5|7|8|9][0-9]\d{8}$/).test(value)) { + var params = { + tableName: 'sys_user', + fieldName: 'phone', + fieldVal: value, + dataId: this.userId + } + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback('鎵嬫満鍙峰凡瀛樺湪!') + } + }) + } else { + callback('璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!') + } + } + }, + validateEmail(rule, value, callback) { + if (!value) { + callback() + } else { + if (new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/).test(value)) { + var params = { + tableName: 'sys_user', + fieldName: 'email', + fieldVal: value, + dataId: this.userId + } + duplicateCheck(params).then((res) => { + console.log(res) + if (res.success) { + callback() + } else { + callback('閭宸插瓨鍦�!') + } + }) + } else { + callback('璇疯緭鍏ユ纭牸寮忕殑閭!') + } + } + }, + validateUsername(rule, value, callback) { + var params = { + tableName: 'sys_user', + fieldName: 'username', + fieldVal: value, + dataId: this.userId + } + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback('鐢ㄦ埛鍚嶅凡瀛樺湪!') + } + }) + }, + validateWorkNo(rule, value, callback) { + var params = { + tableName: 'sys_user', + fieldName: 'work_no', + fieldVal: value, + dataId: this.userId + } + duplicateCheck(params).then((res) => { + if (res.success) { + callback() + } else { + callback('宸ュ彿宸插瓨鍦�!') + } + }) + }, + handleConfirmBlur(e) { + const value = e.target.value + this.confirmDirty = this.confirmDirty || !!value + }, + beforeUpload: function(file) { + var fileType = file.type + if (fileType.indexOf('image') < 0) { + this.$message.warning('璇蜂笂浼犲浘鐗�') + return false + } + //TODO 楠岃瘉鏂囦欢澶у皬 + }, + identityChange(e) { + if (e.target.value === 1) { + this.departIdShow = false + } else { + this.departIdShow = true + } + }, + initDictData(dictCode) { + //鏍规嵁瀛楀吀Code, 鍒濆鍖栧瓧鍏告暟缁� + ajaxGetDictItems(dictCode, null).then((res) => { + if (res.success) { + const regExp = new RegExp('^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:";\'<>?,./]).{' + Number(res.result[0].value) + ',}$') + + this.validatorRules.password[0] = { + required: true, + pattern: regExp, + message: `瀵嗙爜鐢�${res.result[0].value}浣嶆暟瀛椼�佸ぇ灏忓啓瀛楁瘝鍜岀壒娈婄鍙风粍鎴�!` + } + + } + }) + }, + + deviceSearch() { + this.$refs.selectDeviceModal.visible = true + this.$refs.selectDeviceModal.selectedRowKeys = [] + this.$refs.selectDeviceModal.selectedRows = [] + this.$refs.selectDeviceModal.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : [] + }, + + /** + * 閫夋嫨宸叉湁璁惧鍚庣偣鍑荤‘瀹氭椂瑙﹀彂 + * @param data 宸查�夋嫨鐨勮澶囨暟缁� + */ + selectOK(data) { + console.log('data=', data) + this.$set(this.model, 'equipmentIds', data.join(',')) + } } +} </script> <style scoped> - .avatar-uploader > .ant-upload { - width: 104px; - height: 104px; - } +.avatar-uploader > .ant-upload { + width: 104px; + height: 104px; +} - .ant-upload-select-picture-card i { - font-size: 49px; - color: #999; - } +.ant-upload-select-picture-card i { + font-size: 49px; + color: #999; +} - .ant-upload-select-picture-card .ant-upload-text { - margin-top: 8px; - color: #666; - } +.ant-upload-select-picture-card .ant-upload-text { + margin-top: 8px; + color: #666; +} - .ant-table-tbody .ant-table-row td { - padding-top: 10px; - padding-bottom: 10px; - } +.ant-table-tbody .ant-table-row td { + padding-top: 10px; + padding-bottom: 10px; +} - .drawer-bottom-button { - position: absolute; - bottom: -8px; - width: 100%; - border-top: 1px solid #e8e8e8; - padding: 10px 16px; - text-align: right; - left: 0; - background: #fff; - border-radius: 0 0 2px 2px; - } +.drawer-bottom-button { + position: absolute; + bottom: -8px; + width: 100%; + border-top: 1px solid #e8e8e8; + padding: 10px 16px; + text-align: right; + left: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} </style> \ No newline at end of file -- Gitblit v1.9.3