src/api/api.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/base/EamRepairDepartList.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/base/modules/EamRepairDepartModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/equipment/EamEquipmentLedger.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/eam/equipment/modules/EamEquipmentModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/system/UserList.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/system/modules/UserModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/api/api.js
@@ -63,7 +63,10 @@ const queryProductionTreeList = (params)=>getAction("/mdc/mdcProduction/queryTreeList",params); const queryById = (params)=>getAction("/mdc/mdcProduction/queryIdTree",params); const deleteByProduction = (params)=>deleteAction("/mdc/mdcProduction/delete",params); //ç»´ä¿®é¨é¨ç®¡ç const queryRepairDepartTreeList = (params)=>getAction("/eam/eamBaseRepairDepart/queryTreeList",params); const queryRepDepIdTree = (params)=>getAction("/eam/eamBaseRepairDepart/queryIdTree",params); const deleteByRepairDepartId = (params)=>deleteAction("/eam/eamBaseRepairDepart/delete",params); //产线æ @@ -184,7 +187,10 @@ deleteByProduction, queryById, addEquipment, editEquipment editEquipment, queryRepairDepartTreeList, queryRepDepIdTree, deleteByRepairDepartId } src/views/eam/base/EamRepairDepartList.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,613 @@ <template xmlns:background-color="http://www.w3.org/1999/xhtml"> <a-row :gutter="10"> <a-col :md="12" :sm="24"> <a-card :bordered="false"> <!-- æé®æä½åºå --> <a-row style="margin-left: 14px"> <a-button @click="handleAdd(1)" type="primary">æ·»å ç»´ä¿®é¨é¨</a-button> <a-button @click="handleAdd(2)" type="primary">æ·»å ä¸çº§</a-button> <a-button type="primary" icon="download" @click="handleExportXls('ç»´ä¿®é¨é¨ä¿¡æ¯')">导åº</a-button> <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-button type="primary" icon="import">å¯¼å ¥</a-button> </a-upload> <a-button @click="handleDelete" v-if="selectedKeys.length>0">å é¤</a-button> <a-button title="å é¤å¤æ¡æ°æ®" @click="batchDel" v-if="checkedKeys.length>0">æ¹éå é¤</a-button> <!--<a-button @click="refresh" type="default" icon="reload" :loading="loading">å·æ°</a-button>--> </a-row> ` <div style="background: #fff;padding-left:16px;height: 100%; margin-top: 5px"> <a-alert type="info" :showIcon="true"> <div slot="message"> å½åéæ©ï¼<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span> <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">åæ¶éæ©</a> </div> </a-alert> <a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="请è¾å ¥ç»´ä¿®é¨é¨åç§°"/> <!-- æ --> <a-col :md="10" :sm="24"> <a-tree checkable multiple @select="onSelect" @check="onCheck" @rightClick="rightHandle" :selectedKeys="selectedKeys" :checkedKeys="checkedKeys" :treeData="departTree" :checkStrictly="checkStrictly" :expandedKeys="iExpandedKeys" :autoExpandParent="autoExpandParent" @expand="onExpand"/> </a-col> </div> </a-card> <!---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------> <div class="drawer-bottom-button"> <a-dropdown :trigger="['click']" placement="topCenter"> <a-menu slot="overlay"> <a-menu-item key="1" @click="switchCheckStrictly(1)">ç¶åå ³è</a-menu-item> <a-menu-item key="2" @click="switchCheckStrictly(2)">åæ¶å ³è</a-menu-item> <a-menu-item key="3" @click="checkALL">å ¨é¨å¾é</a-menu-item> <a-menu-item key="4" @click="cancelCheckALL">åæ¶å ¨é</a-menu-item> <a-menu-item key="5" @click="expandAll">å±å¼ææ</a-menu-item> <a-menu-item key="6" @click="closeAll">åå¹¶ææ</a-menu-item> </a-menu> <a-button> æ æä½ <a-icon type="up"/> </a-button> </a-dropdown> </div> <!---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------> </a-col> <a-col :md="12" :sm="24"> <a-tabs defaultActiveKey="1"> <a-tab-pane tab="åºæ¬ä¿¡æ¯" key="1"> <a-card :bordered="false" v-if="selectedKeys.length>0"> <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departCode" label="ç»´ä¿®é¨é¨ç¼å·"> <a-input placeholder="请è¾å ¥äº§çº¿/ç»´ä¿®é¨é¨ç¼å·" v-model="model.departCode"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departName" label="ç»´ä¿®é¨é¨åç§°"> <a-input placeholder="请è¾å ¥äº§çº¿/ç»´ä¿®é¨é¨åç§°" v-model="model.departName"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="ä¸çº§ç»´ä¿®é¨é¨"> <a-tree-select style="width:100%" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :treeData="treeData" :disabled="disable" v-model="model.parentId" placeholder="æ "> </a-tree-select> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="æåº"> <a-input-number v-model="model.departOrder"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="夿³¨"> <a-textarea placeholder="请è¾å ¥å¤æ³¨" v-model="model.memo"/> </a-form-model-item> </a-form-model> <div class="anty-form-btn"> <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">éç½®</a-button> <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">ä¿å</a-button> </div> </a-card> <a-card v-else> <a-empty> <span slot="description"> 请å éæ©ä¸ä¸ªç»´ä¿®é¨é¨! </span> </a-empty> </a-card> </a-tab-pane> </a-tabs> </a-col> <eam-repair-depart-modal ref="departModal" @ok="loadTree"></eam-repair-depart-modal> </a-row> </template> <script> import { queryRepairDepartTreeList, queryRepDepIdTree, deleteByRepairDepartId } from '@api/api' import { httpAction, deleteAction } from '@api/manage' import { JeecgListMixin } from '@/mixins/JeecgListMixin' import EamRepairDepartModal from './modules/EamRepairDepartModal' export default { name: 'EamRepairDepartList', mixins: [JeecgListMixin], components: { EamRepairDepartModal }, data() { return { iExpandedKeys: [], loading: false, autoExpandParent: true, currFlowId: '', currFlowName: '', disable: true, treeData: [], visible: false, departTree: [], rightClickSelectedKey: '', rightClickSelectedOrgCode: '', hiding: true, model: {}, dropTrigger: '', depart: {}, disableSubmit: false, checkedKeys: [], selectedKeys: [], autoIncr: 1, currSelected: {}, allTreeKeys: [], checkStrictly: true, labelCol: { xs: { span: 24 }, sm: { span: 5 } }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 } }, graphDatasource: { nodes: [], edges: [] }, validatorRules: { departName: [{ required: true, message: '请è¾å ¥äº§çº¿/ç»´ä¿®é¨é¨åç§°!' }] }, url: { delete: '/eam/eamBaseRepairDepart/delete', edit: '/eam/eamBaseRepairDepart/edit', deleteBatch: '/eam/eamBaseRepairDepart/deleteBatch', exportXlsUrl: '/eam/eamBaseRepairDepart/exportXls', importExcelUrl: '/eam/eamBaseRepairDepart/importExcel' }, orgCategoryDisabled: false, isIncludesNotLeaf: false } }, computed: { importExcelUrl: function() { return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}` } }, methods: { loadData() { this.refresh() }, loadTree() { var that = this that.treeData = [] that.departTree = [] queryRepairDepartTreeList().then((res) => { if (res.success) { //é¨é¨å ¨éåï¼åæ·»å é¨é¨ï¼é䏿°éå¢å¤ this.allTreeKeys = [] for (let i = 0; i < res.result.length; i++) { let temp = res.result[i] that.treeData.push(temp) that.departTree.push(temp) that.setThisExpandedKeys(temp) that.getAllKeys(temp) // console.log(temp.id) } this.loading = false } }) }, setThisExpandedKeys(node) { if (node.children && node.children.length > 0) { this.iExpandedKeys.push(node.key) for (let a = 0; a < node.children.length; a++) { this.setThisExpandedKeys(node.children[a]) } } }, refresh() { this.loading = true this.loadTree() }, // å³é®æä½æ¹æ³ rightHandle({ event, node }) { this.dropTrigger = 'contextmenu' const record = node.dataRef this.rightClickSelectedKey = record.id this.rightClickSelected = record this.rightClickSelectedOrgCode = record.orgCode }, onExpand(expandedKeys) { console.log('onExpand', expandedKeys) this.iExpandedKeys = expandedKeys this.autoExpandParent = false }, backFlowList() { this.$router.back(-1) }, // å³é®ç¹å»ä¸ææ¡æ¹åäºä»¶ dropStatus(visible) { if (visible == false) { this.dropTrigger = '' } }, // å³é®ä¸æå ³éä¸ææ¡ closeDrop() { this.dropTrigger = '' }, addRootNode() { this.$refs.nodeModal.add(this.currFlowId, '') }, batchDel: function() { console.log(this.checkedKeys) this.isIncludesNotLeaf = false this.includesNotLeaf(this.departTree) console.log('isIncludesNotLeaf', this.isIncludesNotLeaf) // 为trueå表示éä¸é¡¹å å«éå¶åç»ç¹ falseå表示éä¸é¡¹å为å¶åç»ç¹ if (!this.isIncludesNotLeaf) { if (this.checkedKeys.length <= 0) { // this.$message.warning('è¯·éæ©ä¸æ¡è®°å½ï¼') this.$notification.warning({ message: 'æ¶æ¯', description: 'è¯·éæ©ä¸æ¡è®°å½' }) } else { var ids = '' for (var a = 0; a < this.checkedKeys.length; a++) { ids += this.checkedKeys[a] + ',' } var that = this this.$confirm({ title: '确认å é¤', content: 'ç¡®å®è¦å 餿éä¸ç ' + this.checkedKeys.length + ' æ¡æ°æ®?', onOk: function() { deleteAction(that.url.deleteBatch, { ids: ids }).then((res) => { if (res.success) { // that.$message.success(res.message) that.$notification.success({ message: 'æ¶æ¯', description: res.message }) that.loadTree() that.onClearSelected() } else { // that.$message.warning(res.message) that.$notification.warning({ message: 'æ¶æ¯', description: res.message }) } }) } }) } } else { this.$notification.warning({ message: 'æ¶æ¯', description: 'éä¸é¡¹å å«å·²æè½½åèç¹ç»´ä¿®é¨é¨' }) } }, includesNotLeaf(treeData) { for (let i = 0; i < treeData.length; i++) { if (!treeData[i].leaf) { this.includesNotLeaf(treeData[i].children) } if (this.checkedKeys.includes(treeData[i].id) && !treeData[i].leaf) { this.isIncludesNotLeaf = true } } }, onSearch(value) { let that = this if (value) { queryRepDepIdTree({ keyWord: value }).then((res) => { if (res.success) { that.departTree = [] for (let i = 0; i < res.result.length; i++) { let temp = res.result[i] that.departTree.push(temp) } } else { // that.$message.warning(res.message) that.$notification.warning({ message: 'æ¶æ¯', description: res.message }) } }) } else { that.loadTree() } }, nodeModalOk() { this.loadTree() }, nodeModalClose() { }, hide() { console.log(111) this.visible = false }, onCheck(checkedKeys, info) { console.log('onCheck', checkedKeys, info) this.hiding = false //---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------ if (this.checkStrictly) { this.checkedKeys = checkedKeys.checked } else { this.checkedKeys = checkedKeys } //---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------ }, onSelect(selectedKeys, e) { console.log('selected', selectedKeys, e) this.hiding = false this.deleteTrigger = 'leftClick' let record = e.node.dataRef console.log('onSelect-record', record) this.currSelected = Object.assign({}, record) this.model = this.currSelected this.selectedKeys = [record.key] this.model.parentId = record.parentId this.setValuesToForm(record) this.$refs.departAuth.show(record.id) }, // 触åonSelectäºä»¶æ¶,为é¨é¨æ å³ä¾§çform表åèµå¼ setValuesToForm(record) { if (record.orgCategory == '1') { this.orgCategoryDisabled = true } else { this.orgCategoryDisabled = false } }, getCurrSelectedTitle() { return !this.currSelected.title ? '' : this.currSelected.title }, onClearSelected() { this.hiding = true this.checkedKeys = [] this.currSelected = {} this.selectedKeys = [] this.$refs.departAuth.departId = '' }, handleNodeTypeChange(val) { this.currSelected.nodeType = val }, notifyTriggerTypeChange(value) { this.currSelected.notifyTriggerType = value }, receiptTriggerTypeChange(value) { this.currSelected.receiptTriggerType = value }, submitCurrForm() { this.$refs.form.validate(valid => { if (valid) { if (!this.currSelected.id) { // this.$message.warning('请ç¹å»éæ©è¦ä¿®æ¹ç»´ä¿®é¨é¨!') this.$notification.warning({ message: 'æ¶æ¯', description: '请ç¹å»éæ©è¦ä¿®æ¹ç»´ä¿®é¨é¨ï¼' }) return } httpAction(this.url.edit, this.currSelected, 'put').then((res) => { if (res.success) { // this.$message.success('ä¿åæå!') this.$notification.success({ message: 'æ¶æ¯', description: 'ä¿åæå' }) this.loadTree() } else { // this.$message.error(res.message) this.$notification.warning({ message: 'æ¶æ¯', description: res.message }) } }) } }) }, emptyCurrForm() { this.$refs.form.resetFields() this.model = {} }, nodeSettingFormSubmit() { this.$refs.form.validate(valid => { if (valid) { console.log('Received values of form: ', this.model) } }) }, openSelect() { this.$refs.sysDirectiveModal.show() }, handleAdd(num) { if (num == 1) { this.$refs.departModal.add() this.$refs.departModal.title = 'æ°å¢' } else if (num == 2) { console.log(this.currSelected) let key = this.currSelected.key if (!key) { // this.$message.warning('请å ç¹å»éä¸ä¸çº§ç»´ä¿®é¨é¨ï¼') this.$notification.warning({ message: 'æ¶æ¯', description: '请å ç¹å»éä¸ä¸çº§ç»´ä¿®é¨é¨ï¼' }) return false } this.$refs.departModal.add(this.selectedKeys) this.$refs.departModal.title = 'æ°å¢' } else { this.$refs.departModal.add(this.rightClickSelectedKey) this.$refs.departModal.title = 'æ°å¢' } }, handleDelete() { var that = this if (this.currSelected.leaf) { this.$confirm({ title: '确认å é¤', content: `ç¡®å®è¦å é¤ ${that.currSelected.departName} å?`, onOk: function() { deleteByRepairDepartId({ id: that.currSelected.id }).then((resp) => { if (resp.success) { //å 餿ååï¼å»é¤å·²éä¸ä¸çæ°æ® // that.checkedKeys.splice(that.checkedKeys.findIndex(key => key === that.rightClickSelectedKey), 1) // that.$message.success('å 餿å!') that.$notification.success({ message: 'æ¶æ¯', description: 'å 餿å' }) that.loadTree() //å é¤ååæ¥æ¸ ç©ºå³ä¾§åºæ¬ä¿¡æ¯å 容 // let orgCode=that.model.orgCode; // if(orgCode && orgCode === that.rightClickSelectedOrgCode){ that.onClearSelected() // } } else { // that.$message.warning('å é¤å¤±è´¥!') that.$notification.warning({ message: 'æ¶æ¯', description: 'å é¤å¤±è´¥' }) } }) } }) } else { this.$notification.warning({ message: 'æ¶æ¯', description: 'æ¤ç»´ä¿®é¨é¨å·²æè½½åèç¹' }) } console.log('deletedRecord', deletedRecord) }, selectDirectiveOk(record) { console.log('éä¸æä»¤æ°æ®', record) this.nodeSettingForm.setFieldsValue({ directiveCode: record.directiveCode }) this.currSelected.sysCode = record.sysCode }, getFlowGraphData(node) { this.graphDatasource.nodes.push({ id: node.id, text: node.flowNodeName }) if (node.children.length > 0) { for (let a = 0; a < node.children.length; a++) { let temp = node.children[a] this.graphDatasource.edges.push({ source: node.id, target: temp.id }) this.getFlowGraphData(temp) } } }, //---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------ expandAll() { this.iExpandedKeys = this.allTreeKeys }, closeAll() { this.iExpandedKeys = [] }, checkALL() { this.checkStriccheckStrictlytly = false this.checkedKeys = this.allTreeKeys }, cancelCheckALL() { //this.checkedKeys = this.defaultCheckedKeys this.checkedKeys = [] }, switchCheckStrictly(v) { if (v == 1) { this.checkStrictly = false } else if (v == 2) { this.checkStrictly = true } }, getAllKeys(node) { // console.log('node',node); this.allTreeKeys.push(node.key) if (node.children && node.children.length > 0) { for (let a = 0; a < node.children.length; a++) { this.getAllKeys(node.children[a]) } } } //---- author:os_chengtgen -- date:20190827 -- for:忢ç¶åå¾éæ¨¡å¼ =======------ }, created() { this.currFlowId = this.$route.params.id this.currFlowName = this.$route.params.name // this.loadTree() } } </script> <style scoped> .ant-card-body .table-operator { margin: 15px; } .anty-form-btn { width: 100%; text-align: center; } .anty-form-btn button { margin: 0 5px; } .anty-node-layout .ant-layout-header { padding-right: 0 } .header { padding: 0 8px; } .header button { margin: 0 3px } .ant-modal-cust-warp { height: 100% } .ant-modal-cust-warp .ant-modal-body { height: calc(100% - 110px) !important; overflow-y: auto } .ant-modal-cust-warp .ant-modal-content { height: 90% !important; overflow-y: hidden } /** Buttonæé®é´è· */ .ant-btn { margin-left: 3px } .drawer-bottom-button { /*position: absolute;*/ bottom: 0; width: 100%; border-top: 1px solid #e8e8e8; padding: 10px 16px; text-align: left; left: 0; background: #fff; border-radius: 0 0 2px 2px; } </style> src/views/eam/base/modules/EamRepairDepartModal.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,172 @@ <template> <a-modal :title="title" :width="800" :ok=false :visible="visible" :confirmLoading="confirmLoading" :okButtonProps="{ props: {disabled: disableSubmit} }" @ok="handleOk" @cancel="handleCancel" cancelText="å ³é"> <a-spin :spinning="confirmLoading"> <a-form-model ref="form" :model="model" :rules="validatorRules"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="ç»´ä¿®é¨é¨/çç»åç§°" prop="departName" :hidden="false" hasFeedback > <a-input id="departName" placeholder="请è¾å ¥ç»´ä¿®é¨é¨/çç»åç§°" v-model="model.departName"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" :hidden="seen" label="ä¸çº§é¨é¨" hasFeedback> <a-tree-select style="width:100%" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :treeData="departTree" v-model="model.parentId" placeholder="è¯·éæ©ä¸çº§é¨é¨" :disabled="condition"> </a-tree-select> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="æåº"> <a-input-number v-model="model.departOrder"/> </a-form-model-item> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="夿³¨"> <a-textarea placeholder="请è¾å ¥å¤æ³¨" v-model="model.memo"/> </a-form-model-item> </a-form-model> </a-spin> </a-modal> </template> <script> import { httpAction } from '@/api/manage' import { queryRepDepIdTree } from '@/api/api' import pick from 'lodash.pick' import ATextarea from 'ant-design-vue/es/input/TextArea' export default { name: "EamRepairDepartModal", components: { ATextarea }, data () { return { departTree:[], orgTypeData:[], phoneWarning:'', departName:"", title:"æä½", seen:false, visible: false, condition:true, disableSubmit:false, model: {}, menuhidden:false, menuusing:true, labelCol: { xs: { span: 24 }, sm: { span: 5 }, }, wrapperCol: { xs: { span: 24 }, sm: { span: 16 }, }, confirmLoading: false, validatorRules:{ departName:[{ required: true, message: '请è¾å ¥ç»´ä¿®é¨é¨/çç»åç§°!' }], }, url: { add: "/eam/eamBaseRepairDepart/add", }, dictDisabled:true, } }, created () { }, methods: { loadTreeData(){ var that = this; queryRepDepIdTree().then((res)=>{ if(res.success){ that.departTree = []; for (let i = 0; i < res.result.length; i++) { let temp = res.result[i]; that.departTree.push(temp); } } }) }, add (depart) { if(depart){ this.seen = false; this.dictDisabled = false; }else{ this.seen = true; this.dictDisabled = true; } this.edit(depart); }, edit (record) { this.visible = true; this.model = Object.assign({}, this.defaultModel, record) this.loadTreeData(); this.model.parentId = record!=null?record.toString():null; }, close () { this.$emit('close'); this.disableSubmit = false; this.visible = false; this.$refs.form.resetFields(); }, handleOk () { const that = this; // 触å表åéªè¯ this.$refs.form.validate(valid => { if (valid) { that.confirmLoading = true; httpAction(this.url.add,this.model,"post").then((res)=>{ if(res.success){ // that.$message.success(res.message); that.$notification.warning({ message:'æ¶æ¯', description:res.message }); that.loadTreeData(); that.$emit('ok'); }else{ // that.$message.warning(res.message); that.$notification.warning({ message:'æ¶æ¯', description:res.message }); } }).finally(() => { that.confirmLoading = false; that.close(); }) }else{ return false; } }) }, handleCancel () { this.close() }, } } </script> <style scoped> </style> src/views/eam/equipment/EamEquipmentLedger.vue
@@ -40,7 +40,8 @@ <a-col :xl="6" :lg="7" :md="8" :sm="24"> <a-form-item label="ç»´ä¿®çç»"> <a-tree-select v-model="queryParam.repairDepartOrgCode" style="width: 100%" :tree-data="repairDepartTreeData" show-search :tree-data="repairDepartTreeData" treeNodeFilterProp="title" :replaceFields="{key:'orgCode',value:'orgCode'}" searchPlaceholder="请è¾å ¥å ³é®åæç´¢" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="è¯·éæ©ç»´ä¿®çç»" allow-clear tree-default-expand-all> </a-tree-select> @@ -188,7 +189,8 @@ <!--</a-tabs>--> <!-- 表ååºå --> <eamEquipment-modal ref="modalForm" @ok="modalFormOk" :productionTreeData="productionTreeData"/> <eamEquipment-modal ref="modalForm" @ok="modalFormOk" :productionTreeData="productionTreeData" :repairDepartTreeData="repairDepartTreeData"/> <!--å±¥åå¼¹çª--> <resume-drawer ref="resumeDrawerRef" :currentTableRowRecord="currentTableRowRecord"/> </a-card> @@ -474,6 +476,7 @@ exportXlsUrl: 'eam/equipment/exportXls', importExcelUrl: 'eam/equipment/importExcel', getProductionTreeList: '/eam/BaseFactory/queryTreeList', repairDepartTreeList: '/eam/eamBaseRepairDepart/queryTreeList', templateXlsDownloadUrl: 'å¯¼å ¥æ¨¡æ¿/设å¤å°è´¦å¯¼å ¥æ¨¡æ¿_v1.1.xlsx' }, currentTableRowRecord: {}, @@ -488,6 +491,7 @@ }, created() { this.getProductionTreeDataByApi() this.getRepairDepartTreeDataByApi() }, methods: { // è·å使ç¨é¨é¨æ @@ -505,12 +509,12 @@ }) }, // è·å使ç¨é¨é¨æ getProductionTreeDataByApi() { getAction(this.url.getProductionTreeList) // è·åç»´ä¿®çç»æ getRepairDepartTreeDataByApi() { getAction(this.url.repairDepartTreeList) .then(res => { if (res.success) { this.productionTreeData = res.result this.repairDepartTreeData = res.result } else { this.$notification.warning({ message: 'æ¶æ¯', src/views/eam/equipment/modules/EamEquipmentModal.vue
@@ -58,7 +58,11 @@ </a-col> <a-col :span="customSpan"> <a-form-model-item prop="repairDepartOrgCode" label="ç»´ä¿®çç»"> <a-input placeholder="è¯·éæ©ç»´ä¿®çç»" v-model="model.repairDepartOrgCode"/> <a-tree-select v-model="model.repairDepartOrgCode" style="width: 100%" show-search :tree-data="repairDepartTreeData" treeNodeFilterProp="title" :replaceFields="{key:'orgCode',value:'orgCode'}" searchPlaceholder="请è¾å ¥å ³é®åæç´¢" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" placeholder="è¯·éæ©ç»´ä¿®çç»" allow-clear tree-default-expand-all/> </a-form-model-item> </a-col> <a-col :span="customSpan"> @@ -290,6 +294,9 @@ props: { productionTreeData: { type: Array }, repairDepartTreeData: { type: Array } }, data() { src/views/system/UserList.vue
@@ -14,48 +14,25 @@ </a-col> <a-col :md="6" :sm="8"> <a-form-item label="æ§å«"> <a-select v-model="queryParam.sex" 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> <a-form-item label="çå®åå"> <a-input placeholder="请è¾å ¥çå®åå" v-model="queryParam.realname"></a-input> </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">æ£å¸¸</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"> <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> </a-form-item> </a-col> <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> @@ -209,16 +186,6 @@ queryParam: {}, recycleBinVisible: false, columns: [ /*{ title: '#', dataIndex: '', key:'rowIndex', width:60, align:"center", customRender:function (t,r,index) { return parseInt(index)+1; } },*/ { title: 'ç¨æ·è´¦å·', align: "center", @@ -239,26 +206,6 @@ dataIndex: 'avatar', scopedSlots: {customRender: "avatarslot"} }, // { // title: 'æ§å«', // align: "center", // width: 80, // dataIndex: 'sex_dictText', // sorter: true // }, // { // title: 'çæ¥', // align: "center", // width: 100, // dataIndex: 'birthday' // }, // { // title: 'ææºå·ç ', // align: "center", // width: 100, // dataIndex: 'phone' // }, { title: 'é¨é¨', align: "center", @@ -340,26 +287,6 @@ dataIndex: 'avatar', scopedSlots: {customRender: "avatarslot"} }, // { // title: 'æ§å«', // align: "center", // width: 80, // dataIndex: 'sex_dictText', // sorter: true // }, // { // title: 'çæ¥', // align: "center", // width: 100, // dataIndex: 'birthday' // }, // { // title: 'ææºå·ç ', // align: "center", // width: 100, // dataIndex: 'phone' // }, { title: '车é´', align: "center", @@ -405,26 +332,6 @@ dataIndex: 'avatar', scopedSlots: {customRender: "avatarslot"} }, // { // title: 'æ§å«', // align: "center", // width: 80, // dataIndex: 'sex_dictText', // sorter: true // }, // { // title: 'çæ¥', // align: "center", // width: 100, // dataIndex: 'birthday' // }, // { // title: 'ææºå·ç ', // align: "center", // width: 100, // dataIndex: 'phone' // }, { title: 'é¨é¨', align: "center", @@ -457,13 +364,9 @@ align: "center", width: 80 } ] } } else { // this.$message.warn(res.message) this.$notification.warning({ message:'æ¶æ¯', description:res.message src/views/system/modules/UserModal.vue
@@ -41,6 +41,7 @@ placeholder="请è¾å ¥ç¨æ·è´¦å·" v-model="model.username" :readOnly="!!model.id" autocomplete="off" /> </a-form-model-item> @@ -55,6 +56,7 @@ type="password" placeholder="请è¾å ¥ç»å½å¯ç " v-model="model.password" autocomplete="off" /> </a-form-model-item> @@ -97,10 +99,6 @@ /> </a-form-model-item> <!--<a-form-model-item label="èå¡" :labelCol="labelCol" :wrapperCol="wrapperCol">--> <!--<j-select-position placeholder="è¯·éæ©èå¡" :multiple="false" v-model="model.post"/>--> <!--</a-form-model-item>--> <a-form-model-item label="è§è²åé " :labelCol="labelCol" @@ -114,6 +112,23 @@ placeholder="è¯·éæ©è§è²" > </j-multi-select-tag> </a-form-model-item> <a-form-model-item 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-form-model-item> <!--é¨é¨åé --> @@ -134,9 +149,9 @@ </j-select-depart> </a-form-model-item> <!--车é´åé --> <!--MDC车é´åé --> <a-form-model-item label="车é´åé " label="MDC车é´åé " :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled" @@ -151,7 +166,7 @@ </a-form-model-item> <a-form-model-item label="éæ©è®¾å¤" label="MDC设å¤åé " :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled" @@ -167,55 +182,37 @@ </a-form-model-item> <a-form-model-item 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-form-model-item> <a-form-model-item 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> </a-form-model-item> <a-form-model-item label="ä¸å¿åé " label="EAMä¸å¿åé " :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" v-model="model.eamFactoryIds" 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="EAM设å¤åé " :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!productionDisabled" > <a-input-search :readOnly="true" v-model="model.eamEquipmentIds" @search="deviceSearch" enter-button placeholder="è¯·éæ©è®¾å¤" :disabled="!model.selectedProduction" /> </a-form-model-item> <a-form-model-item label="è´è´£é¨é¨" :labelCol="labelCol" @@ -230,87 +227,6 @@ > </j-multi-select-tag> </a-form-model-item> <!--<a-form-model-item--> <!--label="头å"--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!-->--> <!--<j-image-upload--> <!--class="avatar-uploader"--> <!--text="ä¸ä¼ "--> <!--v-model="model.avatar"--> <!--></j-image-upload>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> <!--label="çæ¥"--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!-->--> <!--<a-date-picker--> <!--style="width: 100%"--> <!--placeholder="è¯·éæ©çæ¥"--> <!--v-model="model.birthday"--> <!--:format="dateFormat"--> <!--:getCalendarContainer="node => node.parentNode"--> <!--/>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> <!--label="æ§å«"--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!-->--> <!--<a-select--> <!--v-model="model.sex"--> <!--placeholder="è¯·éæ©æ§å«"--> <!--:getPopupContainer="(target) => target.parentNode"--> <!-->--> <!--<a-select-option :value="1">ç·</a-select-option>--> <!--<a-select-option :value="2">女</a-select-option>--> <!--</a-select>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> <!--label="é®ç®±"--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!--prop="email"--> <!-->--> <!--<a-input--> <!--placeholder="请è¾å ¥é®ç®±"--> <!--v-model="model.email"--> <!--/>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> <!--label="ææºå·ç "--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!--prop="phone"--> <!-->--> <!--<a-input--> <!--placeholder="请è¾å ¥ææºå·ç "--> <!--v-model="model.phone"--> <!--/>--> <!--</a-form-model-item>--> <!--<a-form-model-item--> <!--label="座æº"--> <!--:labelCol="labelCol"--> <!--:wrapperCol="wrapperCol"--> <!--prop="telephone"--> <!-->--> <!--<a-input--> <!--placeholder="请è¾å ¥åº§æº"--> <!--v-model="model.telephone"--> <!--/>--> <!--</a-form-model-item>--> <!--<a-form-model-item label="工使µå¼æ" :labelCol="labelCol" :wrapperCol="wrapperCol">--> <!--<j-dict-select-tag v-model="model.activitiSync" placeholder="è¯·éæ©æ¯å¦åæ¥å·¥ä½æµå¼æ" :type="'radio'" dictCode="activiti_sync"/>--> <!--</a-form-model-item>--> </a-form-model> </a-spin> @@ -343,503 +259,503 @@ </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使°åã大å°å忝åç¹æ®ç¬¦å·ç»æ!' 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: '请维æ¤çç»' }] }, { 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') } }, 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') } }, '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) //身份为ä¸çº§æ¾ç¤ºè´è´£é¨é¨ï¼å¦å䏿¾ç¤º 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 //é¨é¨çurl è·åé¨é¨åé 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 }) 'model.selectedProduction': { handler(newVal, oldVal) { if (newVal && this.$refs.selectDeviceModal) { // å¦æè½¦é´éæ©ååä¸ä¸è´åéç½®éæ©è®¾å¤ if ((oldVal && newVal !== oldVal)) this.model.equipmentIds = '' this.$refs.selectDeviceModal.queryTreeData(newVal) } this.$set(this.model, 'selecteddeparts', selectDepartKeys.join(',')) that.nextDepartOptions = departOptions // å¦ææ¸ ç©ºè½¦é´å¼åéç½®éæ©è®¾å¤ if (newVal === '') this.model.equipmentIds = '' } }) // è·å车é´åé 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 } }) //车é´çurl } }, 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 }) created() { const token = Vue.ls.get(ACCESS_TOKEN) this.headers = { 'X-Access-Token': token } this.initRoleList() this.initTenantList() this.queryTreeData() }, 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 }) computed: { uploadAction: function() { return this.url.fileUpload } }, 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) methods: { ...mapActions(['QueryDepartTree']), queryTreeData() { this.QueryDepartTree().then(res => { if (res.success) { this.isDepartType = res.result[0].value } else { obj = editUser(this.model) // this.$message.warn(res.message) this.$notification.warning({ message: 'æ¶æ¯', description: res.message }) } 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() }) }).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) //身份为ä¸çº§æ¾ç¤ºè´è´£é¨é¨ï¼å¦å䏿¾ç¤º 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 //é¨é¨çurl è·åé¨é¨åé 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 } }) //车é´çurl }, 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 } }) }, 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('ææºå·å·²åå¨!') //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}使°åã大å°å忝åç¹æ®ç¬¦å·ç»æ!` } }) } 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(',') : [] }, } }) }, 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(',')) /** * 鿩已æè®¾å¤åç¹å»ç¡®å®æ¶è§¦å * @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>