From 24e235a318ae5bf11f35c339ad9187ab896334b8 Mon Sep 17 00:00:00 2001 From: zhaowei <zhaowei> Date: 星期一, 29 七月 2024 15:16:31 +0800 Subject: [PATCH] 1、隐藏首页,进入系统后跳转至设备监控页面 2、调整用户管理编辑及显示字段 3、增加设备车间管理页面 --- src/views/system/modules/SelectDeviceModal.vue | 231 ++++ /dev/null | 372 ------- src/views/system/UserList.vue | 239 ++++ src/views/system/modules/UserModal.vue | 848 +++++++++++----- public/index.html | 2 src/components/tools/Logo.vue | 4 src/views/user/Login.vue | 2 src/views/dashboard/Analysis.vue | 20 src/views/system/ProductionManager.vue | 647 +++++++++++++ src/views/system/modules/ProductionManager/ProductionEquipment.vue | 331 ++++++ src/views/system/modules/ProductionManager/ProductionModal.vue | 181 +++ 11 files changed, 2,177 insertions(+), 700 deletions(-) diff --git a/public/index.html b/public/index.html index a58c86b..f42bfe6 100644 --- a/public/index.html +++ b/public/index.html @@ -220,7 +220,7 @@ } /* 婊氬姩鏉′紭鍖� start */ ::-webkit-scrollbar{ - width:8px; + width:0; height:8px; } ::-webkit-scrollbar-track{ diff --git a/src/components/tools/Logo.vue b/src/components/tools/Logo.vue index 7808fba..d0fb089 100644 --- a/src/components/tools/Logo.vue +++ b/src/components/tools/Logo.vue @@ -32,8 +32,8 @@ // 鐐瑰嚮Logo璺宠浆鍦板潃 routerLinkTo: { type: Object, - default: () => ({name: 'dashboard'}), - }, + default: () => ({ name: 'mdc-base-DeviceBaseInfo' }) + } } } </script> diff --git a/src/views/dashboard/Analysis.vue b/src/views/dashboard/Analysis.vue index 2e16b22..1b9ab1c 100644 --- a/src/views/dashboard/Analysis.vue +++ b/src/views/dashboard/Analysis.vue @@ -1,30 +1,16 @@ <template> <div> - <index-chart v-if="indexStyle==1"></index-chart> - <index-bdc v-if="indexStyle==2"></index-bdc> - <index-task v-if="indexStyle==3"></index-task> - <div style="width: 100%;text-align: right;margin-top: 20px"> - 璇烽�夋嫨棣栭〉鏍峰紡锛� - <a-radio-group v-model="indexStyle"> - <a-radio :value="1">缁熻鍥捐〃</a-radio> - <a-radio :value="2">缁熻鍥捐〃2</a-radio> - <a-radio :value="3">浠诲姟琛ㄦ牸</a-radio> - </a-radio-group> - </div> + </div> </template> <script> - import IndexChart from './IndexChart' - import IndexTask from "./IndexTask" - import IndexBdc from './IndexBdc' + export default { name: "Analysis", components: { - IndexChart, - IndexTask, - IndexBdc + }, data() { return { diff --git a/src/views/dashboard/IndexBdc.vue b/src/views/dashboard/IndexBdc.vue deleted file mode 100644 index fa8edea..0000000 --- a/src/views/dashboard/IndexBdc.vue +++ /dev/null @@ -1,519 +0,0 @@ -<template> - <div class="page-header-index-wide"> - <a-row :gutter="24"> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鍙楃悊閲�" :total="cardCount.sll | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-area :data-source="chartData.sll" /> - </div> - <template slot="footer">浠婃棩鍙楃悊閲忥細<span>{{ todaySll }}</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鍔炵粨閲�" :total="cardCount.bjl | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-area :data-source="chartData.bjl"/> - </div> - <template slot="footer">浠婃棩鍔炵粨閲忥細<span>{{ todayBjl }}</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鐢ㄦ埛鍙楃悊閲�" :total="cardCount.isll | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-bar :datasource="chartData.isll" :height="50"/> - </div> - <template slot="footer">鐢ㄦ埛浠婃棩鍙楃悊閲忥細<span>{{ todayISll }}</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鐢ㄦ埛鍔炵粨閲�" :total="cardCount.ibjl | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-bar :datasource="chartData.ibjl" :height="50"/> - </div> - <template slot="footer">鐢ㄦ埛浠婃棩鍔炵粨閲忥細<span>{{ todayIBjl }}</span></template> - </chart-card> - </a-col> - </a-row> - - <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}"> - <div class="salesCard"> - <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}"> - <div class="extra-wrapper" slot="tabBarExtraContent"> - <div class="extra-item"> - <a>浠婃棩</a> - <a>鏈懆</a> - <a>鏈湀</a> - <a>鏈勾</a> - </div> - <a-range-picker :style="{width: '256px'}" /> - </div> - - <a-tab-pane loading="true" tab="鍙楃悊鐩戠" key="1"> - <a-row> - <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24"> - <index-bar title="鍙楃悊閲忕粺璁�" /> - </a-col> - <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24"> - - <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}"> - <div class="item-group"> - <a-row> - <a-col :class="'more-btn'" :span="12" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index "> - <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button> - </a-col> - </a-row> - </div> - </a-card> - - </a-col> - </a-row> - </a-tab-pane> - - <a-tab-pane tab="浜や簰鐩戠" key="2"> - <a-row> - <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24"> - <bar-multid :sourceData="jhjgData" :fields="jhjgFields" title="骞冲彴涓庨儴闂ㄤ氦浜掗噺缁熻"></bar-multid> - </a-col> - <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24"> - - <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}"> - <div class="item-group"> - <a-row> - <a-col :class="'more-btn'" :span="12" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index "> - <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button> - </a-col> - </a-row> - </div> - </a-card> - - </a-col> - </a-row> - </a-tab-pane> - - <a-tab-pane tab="瀛樺偍鐩戠" key="4"> - <a-row> - <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24"> - <a-row> - <template v-if="diskInfo && diskInfo.length>0"> - <a-col :span="12" v-for="(item,index) in diskInfo" :key=" 'diskInfo'+index "> - <dash-chart-demo :title="item.name" :datasource="item.restPPT"></dash-chart-demo> - </a-col> - </template> - </a-row> - </a-col> - - <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24"> - - <a-card title="蹇�熷紑濮� / 渚挎嵎瀵艰埅" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}"> - <div class="item-group"> - <a-row> - <a-col :class="'more-btn'" :span="10" v-for="(item,index) in registerTypeList" :key=" 'registerType'+index "> - <a-button @click="goPage(index)" style="margin-bottom:10px" size="small" type="primary" ghost>{{ item.text }}</a-button> - </a-col> - </a-row> - </div> - </a-card> - - </a-col> - </a-row> - </a-tab-pane> - - </a-tabs> - - </div> - </a-card> - - <a-row :gutter="12"> - <a-card :loading="loading" :class="{ 'anty-list-cust':true }" :bordered="false" :style="{ marginTop: '24px' }"> - - <a-tabs v-model="indexBottomTab" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}"> - <div class="extra-wrapper" slot="tabBarExtraContent"> - <a-radio-group v-model="indexRegisterType" @change="changeRegisterType"> - <a-radio-button value="杞Щ鐧昏">杞Щ鐧昏</a-radio-button> - <a-radio-button value="鎶垫娂鐧昏">鎶垫娂鐧昏</a-radio-button> - <a-radio-button value="">鎵�鏈�</a-radio-button> - </a-radio-group> - </div> - - <a-tab-pane loading="true" tab="涓氬姟娴佺▼闄愭椂鐩戠" key="1"> - - <a-table :dataSource="dataSource1" size="default" rowKey="id" :columns="columns" :pagination="ipagination1" @change="tableChange1"> - <template slot="flowRate" slot-scope="text, record, index"> - <a-progress :strokeColor="getPercentColor(record.flowRate)" :format="getPercentFormat" :percent="getFlowRateNumber(record.flowRate)" style="width:80px" /> - </template> - </a-table> - </a-tab-pane> - - <a-tab-pane loading="true" tab="涓氬姟鑺傜偣闄愭椂鐩戠" key="2"> - <a-table :dataSource="dataSource2" size="default" rowKey="id" :columns="columns2" :pagination="ipagination2" @change="tableChange2"> - <template slot="flowRate" slot-scope="text, record, index"> - <span style="color: red;">{{ record.flowRate }}灏忔椂</span> - </template> - </a-table> - </a-tab-pane> - - </a-tabs> - - - </a-card> - </a-row> - - </div> -</template> - -<script> - - import ACol from "ant-design-vue/es/grid/Col" - import ATooltip from "ant-design-vue/es/tooltip/Tooltip" - import ChartCard from '@/components/ChartCard' - import MiniBar from '@/components/chart/MiniBar' - import MiniArea from '@/components/chart/MiniArea' - import IndexBar from '@/components/chart/IndexBar' - import BarMultid from '@/components/chart/BarMultid' - import DashChartDemo from '@/components/chart/DashChartDemo' - - const jhjgData = [ - { type: '鎴跨', '1鏈�': 900, '2鏈�': 1120, '3鏈�': 1380, '4鏈�': 1480, '5鏈�': 1450, '6鏈�': 1100, '7鏈�':1300, '8鏈�':900,'9鏈�':1000 ,'10鏈�':1200 ,'11鏈�':600 ,'12鏈�':900 }, - { type: '绋庡姟', '1鏈�':1200, '2鏈�': 1500, '3鏈�': 1980, '4鏈�': 2000, '5鏈�': 1000, '6鏈�': 600, '7鏈�':900, '8鏈�':1100,'9鏈�':1300 ,'10鏈�':2000 ,'11鏈�':900 ,'12鏈�':1100 }, - { type: '涓嶅姩浜�', '1鏈�':2000, '2鏈�': 1430, '3鏈�': 1300, '4鏈�': 1400, '5鏈�': 900, '6鏈�': 500, '7鏈�':600, '8鏈�':1000,'9鏈�':600 ,'10鏈�':1000 ,'11鏈�':1500 ,'12鏈�':1200 } - ] - - const jhjgFields=[ - '1鏈�','2鏈�','3鏈�','4鏈�','5鏈�','6鏈�', - '7鏈�','8鏈�','9鏈�','10鏈�','11鏈�','12鏈�' - ] - - const xljgData = [ - {type:'涓�鏈�',"鎴跨":1.12,"绋庡姟":1.55,"涓嶅姩浜�":1.2}, - {type:'浜屾湀',"鎴跨":1.65,"绋庡姟":1.32,"涓嶅姩浜�":1.42}, - {type:'涓夋湀',"鎴跨":1.85,"绋庡姟":1.1,"涓嶅姩浜�":1.5}, - - {type:'鍥涙湀',"鎴跨":1.33,"绋庡姟":1.63,"涓嶅姩浜�":1.4}, - {type:'浜旀湀',"鎴跨":1.63,"绋庡姟":1.8,"涓嶅姩浜�":1.7}, - {type:'鍏湀',"鎴跨":1.85,"绋庡姟":1.98,"涓嶅姩浜�":1.8}, - - {type:'涓冩湀',"鎴跨":1.98,"绋庡姟":1.5,"涓嶅姩浜�":1.76}, - {type:'鍏湀',"鎴跨":1.48,"绋庡姟":1.2,"涓嶅姩浜�":1.3}, - {type:'涔濇湀',"鎴跨":1.41,"绋庡姟":1.9,"涓嶅姩浜�":1.6}, - - {type:'鍗佹湀',"鎴跨":1.1,"绋庡姟":1.1,"涓嶅姩浜�":1.4}, - {type:'鍗佷竴鏈�',"鎴跨":1.85,"绋庡姟":1.6,"涓嶅姩浜�":1.5}, - {type:'鍗佷簩鏈�',"鎴跨":1.5,"绋庡姟":1.4,"涓嶅姩浜�":1.3} - ] - const xljgFields=["鎴跨","绋庡姟","涓嶅姩浜�"] - - const dataCol1 = [{ - title: '涓氬姟鍙�', - align:"center", - dataIndex: 'reBizCode' - },{ - title: '涓氬姟绫诲瀷', - align:"center", - dataIndex: 'type' - },{ - title: '鍙楃悊浜�', - align:"center", - dataIndex: 'acceptBy' - },{ - title: '鍙楃悊鏃堕棿', - align:"center", - dataIndex: 'acceptDate' - },{ - title: '褰撳墠鑺傜偣', - align:"center", - dataIndex: 'curNode' - },{ - title: '鍔炵悊鏃堕暱', - align:"center", - dataIndex: 'flowRate', - scopedSlots: { customRender: 'flowRate' } - }]; - const dataSource1=[ - {reBizCode:"1",type:"杞Щ鐧昏",acceptBy:'寮犱笁',acceptDate:"2019-01-22",curNode:"浠诲姟鍒嗘淳",flowRate:60}, - {reBizCode:"2",type:"鎶垫娂鐧昏",acceptBy:'鏉庡洓',acceptDate:"2019-01-23",curNode:"棰嗗瀹℃牳",flowRate:30}, - {reBizCode:"3",type:"杞Щ鐧昏",acceptBy:'鐜嬫',acceptDate:"2019-01-25",curNode:"浠诲姟澶勭悊",flowRate:20}, - {reBizCode:"4",type:"杞Щ鐧昏",acceptBy:'璧垫ゼ',acceptDate:"2019-11-22",curNode:"閮ㄩ棬瀹℃牳",flowRate:80}, - {reBizCode:"5",type:"杞Щ鐧昏",acceptBy:'閽卞氨',acceptDate:"2019-12-12",curNode:"浠诲姟鍒嗘淳",flowRate:90}, - {reBizCode:"6",type:"杞Щ鐧昏",acceptBy:'瀛欏惂',acceptDate:"2019-03-06",curNode:"浠诲姟澶勭悊",flowRate:10}, - {reBizCode:"7",type:"鎶垫娂鐧昏",acceptBy:'鍛ㄥぇ',acceptDate:"2019-04-13",curNode:"浠诲姟鍒嗘淳",flowRate:100}, - {reBizCode:"8",type:"鎶垫娂鐧昏",acceptBy:'鍚翠簩',acceptDate:"2019-05-09",curNode:"浠诲姟涓婃姤",flowRate:50}, - {reBizCode:"9",type:"鎶垫娂鐧昏",acceptBy:'閮戠埥',acceptDate:"2019-07-12",curNode:"浠诲姟澶勭悊",flowRate:63}, - {reBizCode:"20",type:"鎶垫娂鐧昏",acceptBy:'鏋楁湁',acceptDate:"2019-12-12",curNode:"浠诲姟鎵撳洖",flowRate:59}, - {reBizCode:"11",type:"杞Щ鐧昏",acceptBy:'鐮佷簯',acceptDate:"2019-09-10",curNode:"浠诲姟绛炬敹",flowRate:87}, - ] - - const dataCol2 = [{ - title: '涓氬姟鍙�', - align:"center", - dataIndex: 'reBizCode' - },{ - title: '鍙楃悊浜�', - align:"center", - dataIndex: 'acceptBy' - },{ - title: '鍙戣捣鏃堕棿', - align:"center", - dataIndex: 'acceptDate' - },{ - title: '褰撳墠鑺傜偣', - align:"center", - dataIndex: 'curNode' - },{ - title: '瓒呮椂鏃堕棿', - align:"center", - dataIndex: 'flowRate', - scopedSlots: { customRender: 'flowRate' } - }]; - const dataSource2=[ - {reBizCode:"A001",type:"杞Щ鐧昏",acceptBy:'寮犲洓',acceptDate:"2019-01-22",curNode:"浠诲姟鍒嗘淳",flowRate:12}, - {reBizCode:"A002",type:"鎶垫娂鐧昏",acceptBy:'鏉庡惂',acceptDate:"2019-01-23",curNode:"浠诲姟绛炬敹",flowRate:3}, - {reBizCode:"A003",type:"杞Щ鐧昏",acceptBy:'鐜嬩笁',acceptDate:"2019-01-25",curNode:"浠诲姟澶勭悊",flowRate:24}, - {reBizCode:"A004",type:"杞Щ鐧昏",acceptBy:'璧典簩',acceptDate:"2019-11-22",curNode:"閮ㄩ棬瀹℃牳",flowRate:10}, - {reBizCode:"A005",type:"杞Щ鐧昏",acceptBy:'閽卞ぇ',acceptDate:"2019-12-12",curNode:"浠诲姟绛炬敹",flowRate:8}, - {reBizCode:"A006",type:"杞Щ鐧昏",acceptBy:'瀛欏氨',acceptDate:"2019-03-06",curNode:"浠诲姟澶勭悊",flowRate:10}, - {reBizCode:"A007",type:"鎶垫娂鐧昏",acceptBy:'鍛ㄦ檿',acceptDate:"2019-04-13",curNode:"閮ㄩ棬瀹℃牳",flowRate:24}, - {reBizCode:"A008",type:"鎶垫娂鐧昏",acceptBy:'鍚存湁',acceptDate:"2019-05-09",curNode:"閮ㄩ棬瀹℃牳",flowRate:30}, - {reBizCode:"A009",type:"鎶垫娂鐧昏",acceptBy:'閮戞',acceptDate:"2019-07-12",curNode:"浠诲姟鍒嗘淳",flowRate:1}, - {reBizCode:"A0010",type:"鎶垫娂鐧昏",acceptBy:'鏋楃埥',acceptDate:"2019-12-12",curNode:"閮ㄩ棬瀹℃牳",flowRate:16}, - {reBizCode:"A0011",type:"杞Щ鐧昏",acceptBy:'鐮佹ゼ',acceptDate:"2019-09-10",curNode:"閮ㄩ棬瀹℃牳",flowRate:7}, - ] - - export default { - name: "IndexBdc", - components: { - ATooltip, - ACol, - ChartCard, - MiniArea, - MiniBar, - DashChartDemo, - BarMultid, - IndexBar - }, - data() { - return { - loading: true, - cardCount:{ - sll:100, - bjl:87, - isll:15, - ibjl:9 - }, - - todaySll:60, - todayBjl:54, - todayISll:13, - todayIBjl:7, - - chartData:{ - sll:[], - bjl:[], - isll:[], - ibjl:[] - }, - jhjgFields, - jhjgData, - - xljgData, - xljgFields, - - diskInfo:[ - {name:"C鐩�",restPPT:7}, - {name:"D鐩�",restPPT:5} - ], - - registerTypeList:[{ - text:"涓氬姟鍙楃悊" - },{ - text:"涓氬姟绠$悊" - },{ - text:"鏂囦欢绠$悊" - },{ - text:"淇℃伅鏌ヨ" - }], - - dataSource1:[], - dataSource2:[], - columns:dataCol1, - columns2:dataCol2, - ipagination1:{ - current: 1, - pageSize: 5, - pageSizeOptions: ['10', '20', '30'], - showTotal: (total, range) => { - return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" - }, - showQuickJumper: true, - showSizeChanger: true, - total: 0, - - }, - ipagination2:{ - current: 1, - pageSize: 5, - pageSizeOptions: ['10', '20', '30'], - showTotal: (total, range) => { - return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" - }, - showQuickJumper: true, - showSizeChanger: true, - total: 0, - }, - indexRegisterType:"杞Щ鐧昏", - indexBottomTab:"1" - - } - }, - methods:{ - goPage(){ - this.$message.success("鏍规嵁涓氬姟鑷澶勭悊璺宠浆椤甸潰!") - }, - changeRegisterType(e){ - this.indexRegisterType = e.target.value - if(this.indexBottomTab=="1"){ - this.loadDataSource1() - }else{ - this.loadDataSource2() - } - }, - tableChange1(pagination){ - this.ipagination1.current = pagination.current - this.ipagination1.pageSize = pagination.pageSize - this.queryTimeoutInfo() - }, - tableChange2(pagination){ - this.ipagination2.current = pagination.current - this.ipagination2.pageSize = pagination.pageSize - this.queryNodeTimeoutInfo() - }, - getFlowRateNumber(value){ - return Number(value) - }, - getPercentFormat(value){ - if(value==100){ - return "瓒呮椂" - }else{ - return value+"%" - } - }, - getPercentColor(value){ - let p = Number(value) - if(p>=90 && p<100){ - return 'rgb(244, 240, 89)' - }else if(p>=100){ - return 'red' - }else{ - return 'rgb(16, 142, 233)' - } - }, - - loadDataSource1(){ - this.dataSource1 = dataSource1.filter(item=>{ - if(!this.indexRegisterType){ - return true - } - return item.type==this.indexRegisterType - }) - }, - loadDataSource2(){ - this.dataSource2 = dataSource2.filter(item=>{ - if(!this.indexRegisterType){ - return true - } - return item.type==this.indexRegisterType - }) - } - }, - created() { - this.loadDataSource1() - this.loadDataSource2() - setTimeout(() => { - this.loading = !this.loading - }, 1000) - } - } -</script> - -<style lang="less" scoped> - .extra-wrapper { - line-height: 55px; - padding-right: 24px; - - .extra-item { - display: inline-block; - margin-right: 24px; - - a { - margin-left: 24px; - } - } - } - - .item-group { - padding: 20px 0 8px 24px; - font-size: 0; - a { - color: rgba(0, 0, 0, 0.65); - display: inline-block; - font-size: 14px; - margin-bottom: 13px; - width: 25%; - } - } - - .item-group { - .more-btn { - margin-bottom: 13px; - text-align: center; - } - } - - .list-content-item { - color: rgba(0, 0, 0, .45); - display: inline-block; - vertical-align: middle; - font-size: 14px; - margin-left: 40px; - } - - @media only screen and (min-width: 1600px) { - .list-content-item{ - margin-left:60px; - } - } - - @media only screen and (max-width: 1300px) { - .list-content-item{ - margin-left:20px; - } - .width-hidden4{ - display:none - } - } - .list-content-item{ - span{line-height: 20px;} - } - .list-content-item{ - p{margin-top: 4px;margin-bottom:0;line-height:22px;} - } - .anty-list-cust { - .ant-list-item-meta{flex: 0.3 !important;} - } - .anty-list-cust { - .ant-list-item-content{flex:1 !important; justify-content:flex-start !important;margin-left: 20px;} - } - - -</style> \ No newline at end of file diff --git a/src/views/dashboard/IndexChart.vue b/src/views/dashboard/IndexChart.vue deleted file mode 100644 index 60ac1f5..0000000 --- a/src/views/dashboard/IndexChart.vue +++ /dev/null @@ -1,268 +0,0 @@ -<template> - <div class="page-header-index-wide"> - <a-row :gutter="24"> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鎬婚攢鍞" total="锟�126,560"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <trend flag="up" style="margin-right: 16px;"> - <span slot="term">鍛ㄥ悓姣�</span> - 12% - </trend> - <trend flag="down"> - <span slot="term">鏃ュ悓姣�</span> - 11% - </trend> - </div> - <template slot="footer">鏃ュ潎閿�鍞<span>锟� 234.56</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="璁㈠崟閲�" :total="8846 | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-area /> - </div> - <template slot="footer">鏃ヨ鍗曢噺<span> {{ '1234' | NumberFormat }}</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="鏀粯绗旀暟" :total="6560 | NumberFormat"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-bar :height="40" /> - </div> - <template slot="footer">杞寲鐜� <span>60%</span></template> - </chart-card> - </a-col> - <a-col :sm="24" :md="12" :xl="6" :style="{ marginBottom: '24px' }"> - <chart-card :loading="loading" title="杩愯惀娲诲姩鏁堟灉" total="78%"> - <a-tooltip title="鎸囨爣璇存槑" slot="action"> - <a-icon type="info-circle-o" /> - </a-tooltip> - <div> - <mini-progress color="rgb(19, 194, 194)" :target="80" :percentage="78" :height="8" /> - </div> - <template slot="footer"> - <trend flag="down" style="margin-right: 16px;"> - <span slot="term">鍚屽懆姣�</span> - 12% - </trend> - <trend flag="up"> - <span slot="term">鏃ョ幆姣�</span> - 80% - </trend> - </template> - </chart-card> - </a-col> - </a-row> - - <a-card :loading="loading" :bordered="false" :body-style="{padding: '0'}"> - <div class="salesCard"> - <a-tabs default-active-key="1" size="large" :tab-bar-style="{marginBottom: '24px', paddingLeft: '16px'}"> - <div class="extra-wrapper" slot="tabBarExtraContent"> - <div class="extra-item"> - <a>浠婃棩</a> - <a>鏈懆</a> - <a>鏈湀</a> - <a>鏈勾</a> - </div> - <a-range-picker :style="{width: '256px'}" /> - </div> - <a-tab-pane loading="true" tab="閿�鍞" key="1"> - <a-row> - <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24"> - <bar title="閿�鍞鎺掕" :dataSource="barData"/> - </a-col> - <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24"> - <rank-list title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList"/> - </a-col> - </a-row> - </a-tab-pane> - <a-tab-pane tab="閿�鍞秼鍔�" key="2"> - <a-row> - <a-col :xl="16" :lg="12" :md="12" :sm="24" :xs="24"> - <bar title="閿�鍞瓒嬪娍" :dataSource="barData"/> - </a-col> - <a-col :xl="8" :lg="12" :md="12" :sm="24" :xs="24"> - <rank-list title="闂ㄥ簵閿�鍞帓琛屾" :list="rankList"/> - </a-col> - </a-row> - </a-tab-pane> - </a-tabs> - </div> - </a-card> - - <a-row> - <a-col :span="24"> - <a-card :loading="loading" :bordered="false" title="鏈�杩戜竴鍛ㄨ闂噺缁熻" :style="{ marginTop: '24px' }"> - <a-row> - <a-col :span="6"> - <head-info title="浠婃棩IP" :content="loginfo.todayIp"></head-info> - </a-col> - <a-col :span="2"> - <a-spin class='circle-cust'> - <a-icon slot="indicator" type="environment" style="font-size: 24px" /> - </a-spin> - </a-col> - <a-col :span="6"> - <head-info title="浠婃棩璁块棶" :content="loginfo.todayVisitCount"></head-info> - </a-col> - <a-col :span="2"> - <a-spin class='circle-cust'> - <a-icon slot="indicator" type="team" style="font-size: 24px" /> - </a-spin> - </a-col> - <a-col :span="6"> - <head-info title="鎬昏闂噺" :content="loginfo.totalVisitCount"></head-info> - </a-col> - <a-col :span="2"> - <a-spin class='circle-cust'> - <a-icon slot="indicator" type="rise" style="font-size: 24px" /> - </a-spin> - </a-col> - </a-row> - <line-chart-multid :fields="visitFields" :dataSource="visitInfo"></line-chart-multid> - </a-card> - </a-col> - </a-row> - </div> -</template> - -<script> - import ChartCard from '@/components/ChartCard' - import ACol from "ant-design-vue/es/grid/Col" - import ATooltip from "ant-design-vue/es/tooltip/Tooltip" - import MiniArea from '@/components/chart/MiniArea' - import MiniBar from '@/components/chart/MiniBar' - import MiniProgress from '@/components/chart/MiniProgress' - import RankList from '@/components/chart/RankList' - import Bar from '@/components/chart/Bar' - import LineChartMultid from '@/components/chart/LineChartMultid' - import HeadInfo from '@/components/tools/HeadInfo.vue' - - import Trend from '@/components/Trend' - import { getLoginfo,getVisitInfo } from '@/api/api' - - const rankList = [] - for (let i = 0; i < 7; i++) { - rankList.push({ - name: '鐧介弓宀� ' + (i+1) + ' 鍙峰簵', - total: 1234.56 - i * 100 - }) - } - const barData = [] - for (let i = 0; i < 12; i += 1) { - barData.push({ - x: `${i + 1}鏈坄, - y: Math.floor(Math.random() * 1000) + 200 - }) - } - export default { - name: "IndexChart", - components: { - ATooltip, - ACol, - ChartCard, - MiniArea, - MiniBar, - MiniProgress, - RankList, - Bar, - Trend, - LineChartMultid, - HeadInfo - }, - data() { - return { - loading: true, - center: null, - rankList, - barData, - loginfo:{}, - visitFields:['ip','visit'], - visitInfo:[], - indicator: <a-icon type="loading" style="font-size: 24px" spin /> - } - }, - created() { - setTimeout(() => { - this.loading = !this.loading - }, 1000) - this.initLogInfo(); - }, - methods: { - initLogInfo () { - getLoginfo(null).then((res)=>{ - if(res.success){ - Object.keys(res.result).forEach(key=>{ - res.result[key] =res.result[key]+"" - }) - this.loginfo = res.result; - } - }) - getVisitInfo().then(res=>{ - if(res.success){ - this.visitInfo = res.result; - } - }) - }, - } - } -</script> - -<style lang="less" scoped> - .circle-cust{ - position: relative; - top: 28px; - left: -100%; - } - .extra-wrapper { - line-height: 55px; - padding-right: 24px; - - .extra-item { - display: inline-block; - margin-right: 24px; - - a { - margin-left: 24px; - } - } - } - - /* 棣栭〉璁块棶閲忕粺璁� */ - .head-info { - position: relative; - text-align: left; - padding: 0 32px 0 0; - min-width: 125px; - - &.center { - text-align: center; - padding: 0 32px; - } - - span { - color: rgba(0, 0, 0, .45); - display: inline-block; - font-size: .95rem; - line-height: 42px; - margin-bottom: 4px; - } - p { - line-height: 42px; - margin: 0; - a { - font-weight: 600; - font-size: 1rem; - } - } - } -</style> \ No newline at end of file diff --git a/src/views/dashboard/IndexTask.vue b/src/views/dashboard/IndexTask.vue deleted file mode 100644 index 8e9d84b..0000000 --- a/src/views/dashboard/IndexTask.vue +++ /dev/null @@ -1,372 +0,0 @@ -<template> - <div class="index-container-ty"> - <a-spin :spinning="loading"> - <a-row type="flex" justify="start" :gutter="3"> - <a-col :sm="24" :lg="12"> - <a-card> - <div slot="title" class="index-md-title"> - <img src="../../assets/daiban.png"/> - 鎴戠殑寰呭姙銆恵{ dataSource1.length }}銆� - </div> - <div slot="extra"> - <a v-if="dataSource1 && dataSource1.length>0" slot="footer" @click="goPage">鏇村 <a-icon type="double-right" /></a> - </div> - <a-table - :class="'my-index-table tytable1'" - ref="table1" - size="small" - rowKey="id" - :columns="columns" - :dataSource="dataSource1" - :pagination="false"> - <template slot="ellipsisText" slot-scope="text"> - <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis> - </template> - - <template slot="dayWarnning" slot-scope="text,record"> - <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/> - </template> - - <span slot="action" slot-scope="text, record"> - <a @click="handleData">鍔炵悊</a> - </span> - - </a-table> - </a-card> - </a-col> - - <a-col :sm="24" :lg="12"> - <a-card> - <div slot="title" class="index-md-title"> - <img src="../../assets/zaiban.png"/> - 鎴戠殑鍦ㄥ姙銆恵{ dataSource2.length }}銆� - </div> - <div slot="extra"> - <a v-if="dataSource2 && dataSource2.length>0" slot="footer" @click="goPage">鏇村 <a-icon type="double-right" /></a> - </div> - <a-table - :class="'my-index-table tytable2'" - ref="table2" - size="small" - rowKey="id" - :columns="columns" - :dataSource="dataSource2" - :pagination="false"> - <template slot="ellipsisText" slot-scope="text"> - <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis> - </template> - - <template slot="dayWarnning" slot-scope="text,record"> - <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/> - </template> - - <span slot="action" slot-scope="text, record"> - <a @click="handleData">鍔炵悊</a> - </span> - - </a-table> - </a-card> - </a-col> - - <a-col :span="24"> - <div style="height: 5px;"></div> - </a-col> - - <a-col :sm="24" :lg="12"> - <a-card> - <div slot="title" class="index-md-title"> - <img src="../../assets/guaz.png"/> - 鎴戠殑鎸傝处銆恵{ dataSource4.length }}銆� - </div> - <a-table - :class="'my-index-table tytable4'" - ref="table4" - size="small" - rowKey="id" - :columns="columns" - :dataSource="dataSource4" - :pagination="false"> - <template slot="ellipsisText" slot-scope="text"> - <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis> - </template> - - <template slot="dayWarnning" slot-scope="text,record"> - <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/> - </template> - - <span slot="action" slot-scope="text, record"> - <a @click="handleData">鍔炵悊</a> - </span> - - </a-table> - </a-card> - </a-col> - - <a-col :sm="24" :lg="12"> - <a-card> - <div slot="title" class="index-md-title"> - <img src="../../assets/duban.png"/> - 鎴戠殑鐫e姙銆恵{ dataSource3.length }}銆� - </div> - <a-table - :class="'my-index-table tytable3'" - ref="table3" - size="small" - rowKey="id" - :columns="columns" - :dataSource="dataSource3" - :pagination="false"> - <template slot="ellipsisText" slot-scope="text"> - <j-ellipsis :value="text" :length="textMaxLength"></j-ellipsis> - </template> - - <template slot="dayWarnning" slot-scope="text,record"> - <a-icon type="bulb" theme="twoTone" style="font-size:22px" :twoToneColor="getTipColor(record)"/> - </template> - - <span slot="action" slot-scope="text, record"> - <a @click="handleData">鍔炵悊</a> - </span> - - </a-table> - </a-card> - </a-col> - - </a-row> - </a-spin> - - </div> -</template> - -<script> - import noDataPng from '@/assets/nodata.png' - import JEllipsis from '@/components/jeecg/JEllipsis' - - const tempSs1=[{ - id:"001", - orderNo:"鐢礫1]1267102", - orderTitle:"鑽搧鍑洪棶棰樹簡", - restDay:1 - },{ - id:"002", - orderNo:"鐢礫4]5967102", - orderTitle:"鍚冧簡xxx鍖婚櫌鐨勮嵂锛岀梾鎯呰秺鏉ヨ秺涓ラ噸", - restDay:0 - },{ - id:"003", - orderNo:"鐢礫3]5988987", - orderTitle:"浠婂ぉ鍘昏秴甯備拱楦¤泲锛岄浮铔嬮兘鏄潖鐨�", - restDay:7 - },{ - id:"004", - orderNo:"鐢礫2]5213491", - orderTitle:"xx瀹濆疄浣撳簵楂樹环鍞崠xx", - restDay:5 - },{ - id:"005", - orderNo:"鐢礫1]1603491", - orderTitle:"浠ョ孩鍒╃浉璇憋紝绛斿簲閫�淇濆悗鎵d竴骞磋垂鐢�", - restDay:0 - }] - - const tempSs2=[{ - id:"001", - orderTitle:"鎴戣鎶曡瘔杩欎釜澶ц秴甯�", - orderNo:"鐢礫1]10299456", - restDay:6 - },{ - id:"002", - orderTitle:"xxx鍖婚櫌涔卞紑鑽柟,鍞崠鍋囪嵂", - orderNo:"鐢礫2]20235691", - restDay:0 - },{ - id:"003", - orderTitle:"鎴戞兂闂棶杩欏搴楁槸骞插暐鐨�", - orderNo:"鐢礫3]495867322", - restDay:7 - },{ - id:"004", - orderTitle:"鎴戣涓炬姤鏈濋槼鍖哄ゥ妫叕鍥厭搴�", - orderNo:"鐢礫2]1193849", - restDay:3 - },{ - id:"005", - orderTitle:"鎴戜粖澶╁悆楗悆鍒颁竴涓煶澶村瓙", - orderNo:"鐢礫4]56782344", - restDay:9 - }] - - //4-7澶� - const tip_green = "rgba(0, 255, 0, 1)" - //1-3澶� - const tip_yellow = "rgba(255, 255, 0, 1)" - //瓒呮湡 - const tip_red = "rgba(255, 0, 0, 1)" - - export default { - name: "IndexTask", - components:{ JEllipsis }, - data() { - return { - loading:false, - textMaxLength:8, - dataSource1:[], - dataSource2:[], - dataSource3:[], - dataSource4:[], - columns: [ - { - title: '', - dataIndex: '', - key:'rowIndex', - width:50, - fixed:'left', - align:"center", - scopedSlots: {customRender: "dayWarnning"} - }, - { - title:'鍓╀綑澶╂暟', - align:"center", - dataIndex: 'restDay', - width:80 - }, - { - title:'宸ュ崟鏍囬', - align:"center", - dataIndex: 'orderTitle', - scopedSlots: {customRender: "ellipsisText"} - }, - { - title:'宸ュ崟缂栧彿', - align:"center", - dataIndex: 'orderNo', - }, - { - title: '鎿嶄綔', - dataIndex: 'action', - align:"center", - scopedSlots: { customRender: 'action' } - } - ] - - } - }, - created() { - this.mock(); - }, - mounted(){ - - }, - methods: { - getTipColor(rd){ - let num = rd.restDay - if(num<=0){ - return tip_red - }else if(num>=1 && num<4){ - return tip_yellow - }else if(num>=4){ - return tip_green - } - }, - goPage(){ - this.$message.success("璇锋牴鎹叿浣撲笟鍔¤烦杞〉闈�") - //this.$router.push({ path: '/comp/mytask' }) - }, - mock(){ - this.dataSource1=tempSs1 - this.dataSource2=tempSs2 - this.dataSource3=tempSs1 - this.dataSource4=[] - this.ifNullDataSource(this.dataSource4,'.tytable4') - }, - - ifNullDataSource(ds,tb){ - this.$nextTick(()=>{ - if(!ds || ds.length==0){ - var tmp = document.createElement('img'); - tmp.src=noDataPng - tmp.width=300 - let tbclass=`${tb} .ant-table-placeholder` - document.querySelector(tbclass).innerHTML="" - document.querySelector(tbclass).appendChild(tmp) - } - }) - }, - handleData(){ - this.$message.success("鍔炵悊瀹屾垚") - } - - - - - } - } -</script> - -<style> - .my-index-table{height:270px} - .my-index-table table{font-size: 14px !important;} - - .index-container-ty .ant-card-head-title{padding-top: 6px;padding-bottom: 6px;} - .index-container-ty .ant-card-extra{padding:0} - .index-container-ty .ant-card-extra a{color:#fff} - .index-container-ty .ant-card-extra a:hover{color:#152ede} - .index-container-ty .ant-card-head-wrapper,.index-container-ty .ant-card-head{ - line-height:24px; - min-height:24px; - /*background: #90aeff;*/ - background: #7196fb; - } - .index-container-ty .ant-card-body{padding: 10px 12px 0px 12px} - - /* .index-container-ty .ant-card-actions{background: #fff} - .index-container-ty .ant-card-actions li {margin:2px 0;} - .index-container-ty .ant-card-actions > li > span{width: 100%}*/ - - - .index-container-ty .ant-table-footer{text-align: right;padding:6px 12px 6px 6px;background: #fff;border-top: 2px solid #f7f1f1;} - - .index-md-title{ - postion:relative; - padding-left:24px; - width: 100%; - color: #fff; - font-size: 21px; - font-family: cursive; - } - .index-md-title img{ - position: absolute; - height:32px; - top: 2px; - left:14px; - } - - .index-container-ty .ant-card-body{ - /*border-left:1px solid #90aeff; - /*border-right:1px solid #90aeff; - border-bottom:1px solid #90aeff;*/ - } - - - .index-container-ty .ant-table-thead > tr > th, - .index-container-ty .ant-table-tbody > tr > td{ - border-bottom: 1px solid #90aeff; - } - - .index-container-ty .ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, - .index-container-ty .ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th{ - border-bottom: 1px solid #90aeff; - } - - .index-container-ty .ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th{ - border-bottom: 1px solid #90aeff; - } - - .index-container-ty .ant-table-small{ - border: 1px solid #90aeff; - } - - .index-container-ty .ant-table-placeholder { - padding: 0 - } -</style> \ No newline at end of file diff --git a/src/views/system/ProductionManager.vue b/src/views/system/ProductionManager.vue new file mode 100644 index 0000000..de94956 --- /dev/null +++ b/src/views/system/ProductionManager.vue @@ -0,0 +1,647 @@ +<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"> + <!--<template>--> + <!--<a-dropdown :trigger="[this.dropTrigger]" @visibleChange="dropStatus">--> + <!--<span style="user-select: none">--> + <!--<a-tree--> + <!--checkable--> + <!--multiple--> + <!--@select="onSelect"--> + <!--@check="onCheck"--> + <!--@rightClick="rightHandle"--> + <!--:selectedKeys="selectedKeys"--> + <!--:checkedKeys="checkedKeys"--> + <!--:treeData="departTree"--> + <!--:checkStrictly="checkStrictly"--> + <!--:expandedKeys="iExpandedKeys"--> + <!--:autoExpandParent="autoExpandParent"--> + <!--@expand="onExpand"/>--> + <!--</span>--> + <!--<!–鏂板鍙抽敭鐐瑰嚮浜嬩欢,鍜屽鍔犳坊鍔犲拰鍒犻櫎鍔熻兘–>--> + + <!--<a-menu slot="overlay">--> + <!--<a-menu-item @click="handleAdd(3)" key="1">娣诲姞</a-menu-item>--> + <!--<a-menu-item @click="handleDelete" key="2">鍒犻櫎</a-menu-item>--> + <!--<a-menu-item @click="closeDrop" key="3">鍙栨秷</a-menu-item>--> + <!--</a-menu>--> + <!--</a-dropdown>--> + <!--</template>--> + <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="productionCode" label="杞﹂棿缂栧彿"> + <a-input placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿缂栧彿" v-model="model.productionCode"/> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="productionName" label="杞﹂棿鍚嶇О"> + <a-input placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О" v-model="model.productionName"/> + </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.productionOrder"/> + </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-tab-pane tab="閮ㄩ棬鏉冮檺" key="2" forceRender>--> + <!--<depart-auth-modal ref="departAuth"/>--> + <!--</a-tab-pane>--> + <a-tab-pane tab="璁惧鍒楄〃" key="2" forceRender> + <!--<depart-auth-modal/>--> + <production-equipment ref="departAuth"></production-equipment> + </a-tab-pane> + </a-tabs> + + </a-col> + <production-modal ref="departModal" @ok="loadTree"></production-modal> + </a-row> +</template> +<script> + import ProductionEquipment from './modules/ProductionManager/ProductionEquipment' + import { queryProductionTreeList, searchByKeywords, deleteByProduction } from '@/api/api' + import { httpAction, deleteAction } from '@/api/manage' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import ProductionModal from './modules/ProductionManager/ProductionModal' + + export default { + name: 'ProductionManager', + mixins: [JeecgListMixin], + components: { + ProductionEquipment, + ProductionModal + }, + 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: { + productionName: [{ required: true, message: '璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О!' }] + }, + url: { + delete: '/mdc/mdcProduction/delete', + edit: '/mdc/mdcProduction/edit', + deleteBatch: '/mdc/mdcProduction/deleteBatch', + exportXlsUrl: '/mdc/mdcProduction/exportXls', + importExcelUrl: '/mdc/mdcProduction/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 = [] + queryProductionTreeList().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) + + // 涓簍rue鍒欒〃绀洪�変腑椤瑰寘鍚潪鍙跺瓙缁撶偣 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) { + searchByKeywords({ 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浜嬩欢鏃�,涓洪儴闂ㄦ爲鍙充晶鐨刦orm琛ㄥ崟璧嬪�� + 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.productionName} 鍚�?`, + onOk: function() { + deleteByProduction({ 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> \ No newline at end of file diff --git a/src/views/system/UserList.vue b/src/views/system/UserList.vue index 73dceb5..5a29723 100644 --- a/src/views/system/UserList.vue +++ b/src/views/system/UserList.vue @@ -114,7 +114,7 @@ :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" @change="handleTableChange"> - <template slot="avatarslot" slot-scope="text, record, index"> + <template slot="avatarslot" slot-scope="text, record"> <div class="anty-img-wrap"> <a-avatar shape="square" :src="getAvatarView(record.avatar)" icon="user"/> </div> @@ -178,6 +178,7 @@ </template> <script> + import UserModal from './modules/UserModal' import PasswordModal from './modules/PasswordModal' import {putAction,getFileAccessHttpUrl} from '@/api/manage'; @@ -188,6 +189,7 @@ import UserRecycleBinModal from './modules/UserRecycleBinModal' import JSuperQuery from '@/components/jeecg/JSuperQuery' import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton' + import {mapActions} from 'vuex' export default { name: "UserList", @@ -233,41 +235,42 @@ { title: '澶村儚', align: "center", - width: 120, + width: 80, 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", + // width: 80, + // dataIndex: 'sex_dictText', + // sorter: true + // }, + // { + // title: '鐢熸棩', + // align: "center", + // width: 100, + // dataIndex: 'birthday' + // }, + // { + // title: '鎵嬫満鍙风爜', + // align: "center", + // width: 100, + // dataIndex: 'phone' + // }, { title: '閮ㄩ棬', align: "center", - width: 180, + width: 240, dataIndex: 'orgCodeTxt' }, { - title: '璐熻矗閮ㄩ棬', + title: '杞﹂棿', align: "center", - width: 180, - dataIndex: 'departIds_dictText' + width: 240, + dataIndex: 'productionName', + ellipsis: true, }, { title: '鐘舵��', @@ -278,12 +281,14 @@ { title: '鎿嶄綔', dataIndex: 'action', - scopedSlots: {customRender: 'action'}, + scopedSlots: { customRender: 'action' }, align: "center", - width: 170 - } + width: 80 + }, + ], + isDepartType:'', superQueryFieldList: [ { type: 'input', value: 'username', text: '鐢ㄦ埛璐﹀彿', }, { type: 'input', value: 'realname', text: '鐢ㄦ埛濮撳悕', }, @@ -304,14 +309,180 @@ return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; } }, + created() { + this.queryTreeData() + }, methods: { + ...mapActions(['QueryDepartTree']), + queryTreeData() { + this.QueryDepartTree().then(res => { + if (res.success) { + this.isDepartType = res.result[0].value + if(this.isDepartType == -1){ + this.columns=[ + { + title: '鐢ㄦ埛璐﹀彿', + align: "center", + dataIndex: 'username', + width: 120, + sorter: true + }, + { + title: '鐢ㄦ埛濮撳悕', + align: "center", + width: 100, + dataIndex: 'realname', + }, + { + title: '澶村儚', + align: "center", + width: 80, + 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", + width: 240, + dataIndex: 'productionName', + ellipsis: true, + }, + { + title: '鐘舵��', + align: "center", + width: 80, + dataIndex: 'status_dictText' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: "center", + width: 80 + }, + + + ] + }else{ + this.columns= [ + { + title: '鐢ㄦ埛璐﹀彿', + align: "center", + dataIndex: 'username', + width: 120, + sorter: true + }, + { + title: '鐢ㄦ埛濮撳悕', + align: "center", + width: 100, + dataIndex: 'realname', + }, + { + title: '澶村儚', + align: "center", + width: 80, + 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", + width: 240, + dataIndex: 'orgCodeTxt' + }, + { + title: '杞﹂棿', + align: "center", + width: 240, + dataIndex: 'productionName', + ellipsis: true, + }, + { + title: '鐝粍', + align: "center", + width: 240, + dataIndex: 'teamId_dictText' + }, + { + title: '鐘舵��', + align: "center", + width: 80, + dataIndex: 'status_dictText' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: { customRender: 'action' }, + align: "center", + width: 80 + } + + + ] + } + + } else { + // this.$message.warn(res.message) + this.$notification.warning({ + message:'娑堟伅', + description:res.message + }); + } + }).finally(() =>{ + }) + }, getAvatarView: function (avatar) { return getFileAccessHttpUrl(avatar) }, batchFrozen: function (status) { if (this.selectedRowKeys.length <= 0) { - this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒'); + // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒'); + this.$notification.warning({ + message:'娑堟伅', + description:"璇烽�夋嫨涓�鏉¤褰�" + }); return false; } else { let ids = ""; @@ -364,10 +535,16 @@ } frozenBatch({ids: id, status: status}).then((res) => { if (res.success) { - that.$message.success(res.message); + that.$notification.success({ + message:'娑堟伅', + description:res.message + }); that.loadData(); } else { - that.$message.warning(res.message); + that.$notification.warning({ + message:'娑堟伅', + description:res.message + }); } }); }, diff --git a/src/views/system/modules/ProductionManager/ProductionEquipment.vue b/src/views/system/modules/ProductionManager/ProductionEquipment.vue new file mode 100644 index 0000000..6227bb9 --- /dev/null +++ b/src/views/system/modules/ProductionManager/ProductionEquipment.vue @@ -0,0 +1,331 @@ +<template> + <a-card :bordered="false"> + <template v-if="this.productionId"> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + + <a-col :md="6" :sm="12"> + <a-form-item label="璁惧缂栧彿"> + <a-input placeholder="璇疯緭鍏ヨ澶囩紪鍙�" v-model="queryParam.equipmentId"></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="8"> + <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-col> + </a-row> + </a-form> + </div> + <div class="table-operator" style="border-top: 5px"> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay" @click="handleMenuClick"> + <a-menu-item key="1"> + <a-icon type="delete" @click="batchDel"/> + 鎵归噺绉婚櫎 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> + 鎵归噺鎿嶄綔 + <a-icon type="down"/> + </a-button> + </a-dropdown> + </div> + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :scroll="{x: 500}" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <!--<template slot="avatarslot" slot-scope="text, record, index">--> + <!--<div class="anty-img-wrap">--> + <!--<a-avatar shape="square" :src="getAvatarView(record.avatar)" icon="user"/>--> + <!--</div>--> + <!--</template>--> + + <span slot="action" slot-scope="text, record"> + <a-popconfirm title="纭畾绉婚櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>绉婚櫎</a> + </a-popconfirm> + </span> + </a-table> + </template> + <a-card v-else :bordered="false" style="height:200px"> + <a-empty> + <span slot="description"> 璇峰厛閫夋嫨涓�涓儴闂�! </span> + </a-empty> + </a-card> + </a-card> +</template> + +<script> + import { filterObj } from '@/utils/util'; + import {queryTreeListForRole,queryDepartPermission,saveDepartPermission} from '@/api/api' + import {JeecgListMixin} from '@/mixins/JeecgListMixin' + import { getAction,postAction } from '@/api/manage' + import qs from 'qs' + export default { + name: 'ProductionEquipment', + mixins: [JeecgListMixin], + data(){ + return { + queryParam:{}, + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '璁惧缂栧彿', + align: "center", + dataIndex: 'equipmentId', + width: 120, + // sorter: true + }, + { + title: '璁惧鍚嶇О', + align: "center", + width: 150, + dataIndex: 'equipmentName', + }, + { + title: '璁惧绫诲瀷', + align: "center", + width: 120, + dataIndex: 'equipmentType', + // scopedSlots: {customRender: "avatarslot"} + }, + + { + title: '椹卞姩绫诲瀷', + align: "center", + width: 80, + dataIndex: 'driveType', + // sorter: true + }, + + { + title: '鎿嶄綔', + dataIndex: 'action', + scopedSlots: {customRender: 'action'}, + align: "center", + width: 120 + } + + ], + disableMixinCreated:true, + productionId:"", + title:"閮ㄩ棬鏉冮檺閰嶇疆", + visible: false, + loading: false, + url:{ + list:'/mdc/mdcEquipment/equipmentListByProduction', + removeEquipmentForDepart:'/mdc/mdcEquipment/removeEquipmentForProduction', + serachEquipment:'/mdc/mdcEquipment/equipmentListByProduction', + removeEquipmentsForProduction:"/mdc/mdcEquipment/removeEquipmentsForProduction" + } + } + }, + methods: { + + show(productionId){ + this.productionId=productionId + this.loadData(); + }, + close () { + this.reset() + this.$emit('close'); + this.visible = false; + }, + searchReset() { + this.queryParam = {} + this.loadData(); + }, + searchQuery() { + var id = this.queryParam.equipmentId + this.loading = true; + var params = this.getQueryParams();//鏌ヨ鏉′欢 + + params.pageNo = this.ipagination.current; + params.pageSize = this.ipagination.pageSize; + getAction(this.url.serachEquipment,{equipmentId:this.queryParam.equipmentId,productionId:this.productionId,pageNo:params.pageNo,pageSize:params.pageSize}).then((res)=>{ + if (res.success) { + // console.log(res) + //update-begin---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + this.dataSource = res.result.records||res.result; + if(res.result.total) + { + this.ipagination.total = res.result.total; + }else{ + this.ipagination.total = 0; + } + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + }else{ + // this.$message.warning(res.message) + this.$notification.warning({ + message:'娑堟伅', + description:res.message + }); + } + }).finally(() => { + this.loading = false + }) + }, + handleTableChange(pagination, filters, sorter) { + //鍒嗛〉銆佹帓搴忋�佺瓫閫夊彉鍖栨椂瑙﹀彂 + //TODO 绛涢�� + // console.log(pagination) + if (Object.keys(sorter).length > 0) { + this.isorter.column = sorter.field; + this.isorter.order = "ascend" == sorter.order ? "asc" : "desc" + } + this.ipagination = pagination; + this.loadData(); + }, + loadData(){ + //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭 + // if (arg === 1) { + // this.ipagination.current = 1; + // } + var params = this.getQueryParams();//鏌ヨ鏉′欢 + + params.pageNo = this.ipagination.current; + params.pageSize = this.ipagination.pageSize; + this.loading = true; + getAction(this.url.list,params).then((res)=>{ + if (res.success) { + // console.log(res) + //update-begin---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + this.dataSource = res.result.records||res.result; + if(res.result.total) + { + this.ipagination.total = res.result.total; + }else{ + this.ipagination.total = 0; + } + //update-end---author:zhangyafei Date:20201118 for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------ + }else{ + // this.$message.warning(res.message) + this.$notification.warning({ + message:'娑堟伅', + description:res.message + }); + } + }).finally(() => { + this.loading = false + }) + }, + getQueryParams() { + //鑾峰彇鏌ヨ鏉′欢 + let sqp = {} + if(this.superQueryParams){ + sqp['superQueryParams']=encodeURI(this.superQueryParams) + sqp['superQueryMatchType'] = this.superQueryMatchType + } + var param = Object.assign(sqp, this.queryParam, this.isorter ,this.filters); + param.field = this.getQueryField(); + param.pageNo = this.ipagination.current; + param.pageSize = this.ipagination.pageSize; + param.productionId = this.productionId; + //鑾峰彇鐢ㄦ埛瀹氬埗鐨勫弬鏁板睘鎬� + if (this.getCustomQueryParams) { + param = this.getCustomQueryParams(param); + if(!param){ + return false; + } + } + + return filterObj(param); + }, + handleDelete(equipmentId){ + + postAction(this.url.removeEquipmentForDepart,qs.stringify({productionId:this.productionId,equipmentId:equipmentId})).then((res)=>{ + if (res.success) { + this.$notification.success({ + message:'娑堟伅', + description:res.message + }); + this.loadData(this.productionId); + }else{ + this.$notification.warning({ + message:'娑堟伅', + description:res.message + }); + } + }).finally(() => { + + }) + }, + handleMenuClick(e) { + if (e.key == 1) { + this.batchDel(); + } + }, + batchDel: function () { + if(!this.url.removeEquipmentsForProduction){ + this.$message.error("璇疯缃畊rl.removeEquipmentsForProduction灞炴��!") + return + } + if (this.selectedRowKeys.length <= 0) { + // this.$message.warning('璇烽�夋嫨涓�鏉¤褰曪紒'); + this.$notification.warning({ + message:'娑堟伅', + description:"璇烽�夋嫨涓�鏉¤褰�" + }); + return; + } else { + var ids = ""; + for (var a = 0; a < this.selectedRowKeys.length; a++) { + ids += this.selectedRowKeys[a] + ","; + } + var that = this; + this.$confirm({ + title: "纭鍒犻櫎", + content: "鏄惁鍒犻櫎閫変腑鏁版嵁?", + onOk: function () { + that.loading = true; + postAction(that.url.removeEquipmentsForProduction,qs.stringify({productionId:that.productionId,equipmentIds:ids})).then((res) => { + if (res.success) { + //閲嶆柊璁$畻鍒嗛〉闂 + that.reCalculatePage(that.selectedRowKeys.length) + // that.$message.success(res.message); + this.$notification.success({ + message:'娑堟伅', + description:res.message + }); + that.loadData(that.productionId); + that.onClearSelected(); + } else { + // that.$message.warning(res.message); + this.$notification.warning({ + message:'娑堟伅', + description:res.message + }); + } + }).finally(() => { + that.loading = false; + }); + } + }); + } + }, + }, + } +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/src/views/system/modules/ProductionManager/ProductionModal.vue b/src/views/system/modules/ProductionManager/ProductionModal.vue new file mode 100644 index 0000000..c300b70 --- /dev/null +++ b/src/views/system/modules/ProductionManager/ProductionModal.vue @@ -0,0 +1,181 @@ +<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="productionCode" + :hidden="false" + hasFeedback > + <a-input id="productionCode" placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿缂栧彿" v-model="model.productionCode"/> + </a-form-model-item> + <a-form-model-item + :labelCol="labelCol" + :wrapperCol="wrapperCol" + label="杞﹂棿鍚嶇О" + prop="productionName" + :hidden="false" + hasFeedback > + <a-input id="departName" placeholder="璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О" v-model="model.productionName"/> + </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.productionOrder"/> + </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 { queryById } from '@/api/api' + import pick from 'lodash.pick' + import ATextarea from 'ant-design-vue/es/input/TextArea' + export default { + name: "ProductionModal", + 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:{ + productionName:[{ required: true, message: '璇疯緭鍏ヤ骇绾�/杞﹂棿鍚嶇О!' }], + }, + url: { + add: "/mdc/mdcProduction/add", + }, + dictDisabled:true, + } + }, + created () { + }, + methods: { + loadTreeData(){ + var that = this; + queryById().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.success({ + 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> \ No newline at end of file diff --git a/src/views/system/modules/SelectDeviceModal.vue b/src/views/system/modules/SelectDeviceModal.vue new file mode 100644 index 0000000..599de84 --- /dev/null +++ b/src/views/system/modules/SelectDeviceModal.vue @@ -0,0 +1,231 @@ +<template> + <a-modal + :title="title" + :visible="visible" + @ok="handleOk" + @cancel="handleCancel" + > + + <a-spin :spinning="loading"> + <!-- showLine --> + <a-form> + <a-form-item label="杞﹂棿灞傜骇锛�"> + <a-tree showLine ref="tree" :expandedKeys.sync="expandedKeys" + :treeData="treeDataSource" checkable @check="onCheck" v-model="checkedKeys" + @expand="onExpand"> + </a-tree> + </a-form-item> + </a-form> + + </a-spin> + + <template slot="footer"> + <div> + <a-dropdown + style="float: left" + :trigger="['click']" + placement="topCenter" + > + <a-menu slot="overlay"> + <a-menu-item key="1" @click="expandAll">灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item key="2" @click="closeAll">鍚堝苟鎵�鏈�</a-menu-item> + <a-menu-item key="3" @click="refreshTree">鍒锋柊</a-menu-item> + </a-menu> + <a-button> + 鏍戞搷浣� + <a-icon type="up"/> + </a-button> + </a-dropdown> + <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷"> + <a-button style="margin-right: .8rem">鍏抽棴</a-button> + </a-popconfirm> + <a-button + @click="handleOk" + type="primary" + >纭畾 + </a-button> + </div> + </template> + + </a-modal> +</template> + +<script> + import { + getAction, + postAction, + deleteAction + } from '@/api/manage' + import BaseTree from '@/views/mdc/common/BaseTree' + import DepartTree from '@/views/mdc/base/modules/DepartList/DepartListTree/DepartTree' + + export default { + name: 'SelectDeviceModal', + components: { + BaseTree, DepartTree + }, + props: { + editDisable: { + type: Boolean, + default() { + return true + } + }, + title: { + type: String + }, + selectedProduction: { + type: String + } + }, + data() { + return { + loading: false, + treeDataSource: [], + expandedKeys: [], + checkedKeys: [], + url: { + getDeviceTree: '/mdc/mdcEquipment/loadTreeListByProductionIds' + }, + selectedWorkshopIds: '', + dataList: [], + allTreeKeys: [], + visible: false, + dataSource: [] + } + }, + created() { + this.closeAll() + }, + methods: { + onExpand(expandedKeys) { + this.expandedKeys = expandedKeys + this.autoExpandParent = false + }, + queryTreeData(value) { + this.loading = true + this.selectedWorkshopIds = value + getAction(this.url.getDeviceTree, { ids: value }) + .then(res => { + if (res.success) { + this.dataList = [] + this.allTreeKeys = [] + this.getTreeDataSouce(res.result) + this.treeDataSource = res.result + this.generateList(this.treeDataSource) + this.expandedKeys = this.allTreeKeys + } else { + this.$notification.warning({ + message: '娑堟伅', + description: res.message + }) + } + }) + .catch(err => { + this.$notification.error({ + message: '娑堟伅', + description: err.message + }) + }) + .finally(() => { + this.loading = false + }) + }, + + generateList(data) { + for (let i = 0; i < data.length; i++) { + const node = data[i] + const key = node.key + const title = node.title + this.dataList.push({ + key, + title: title + }) + this.allTreeKeys.push(key) + if (node.children) { + this.generateList(node.children) + } + } + }, + + getTreeDataSouce(data) { + data.forEach(item => { + if (item.children && item.children.length > 0) { + this.getTreeDataSouce(item.children) + } + item.key = item.equipmentId ? item.equipmentId : item.key + item.value = item.equipmentId ? item.equipmentId : item.value + }) + }, + expandAll() { + this.expandedKeys = this.allTreeKeys + }, + closeAll() { + this.expandedKeys = ['-1'] + }, + refreshTree() { + this.queryTreeData(this.selectedWorkshopIds) + }, + onCheck(value, obj) { + this.checkedKeys = value + this.deviceNodes = obj.checkedNodes.filter(item => item.data.props.equipmentId).map(item => item.data.props.equipmentId) + }, + handleCancel() { + this.visible = false + }, + handleOk() { + this.$emit('selectFinished', this.deviceNodes) + this.visible = false + } + + } + } +</script> +<style lang="less" scoped> + /deep/ .ant-modal { + /*transform-origin: 337px 50px;*/ + } + + .ant-card-body .table-operator { + margin-bottom: 18px; + } + + .ant-table-tbody .ant-table-row td { + padding-top: 15px; + padding-bottom: 15px; + } + + .anty-row-operator button { + margin: 0 5px + } + + .ant-btn-danger { + background-color: #ffffff + } + + .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 + } + + .drawer-bottom-button { + position: absolute; + bottom: 0; + 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 diff --git a/src/views/system/modules/UserModal.vue b/src/views/system/modules/UserModal.vue index cc7c1f0..cc451b0 100644 --- a/src/views/system/modules/UserModal.vue +++ b/src/views/system/modules/UserModal.vue @@ -1,485 +1,786 @@ <template> <a-drawer - :title="title" - :maskClosable="true" - :width="drawerWidth" - placement="right" - :closable="true" - @close="handleCancel" - :visible="visible" - style="height: 100%;"> + :title="title" + :maskClosable="true" + :width="drawerWidth" + placement="right" + :closable="true" + @close="handleCancel" + :visible="visible" + style="height: 100%;overflow: auto;padding-bottom: 53px;" + > <template slot="title"> <div style="width: 100%;"> <span>{{ title }}</span> <span style="display:inline-block;width:calc(100% - 51px);padding-right:10px;text-align: right"> - <a-button @click="toggleScreen" icon="appstore" style="height:20px;width:20px;border:0px"></a-button> + <a-button + @click="toggleScreen" + icon="appstore" + style="height:20px;width:20px;border:0px" + ></a-button> </span> </div> </template> <a-spin :spinning="confirmLoading"> - <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-form-model + ref="form" + :model="model" + :rules="validatorRules" + > - <a-form-model-item label="鐢ㄦ埛璐﹀彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="username"> - <a-input placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" v-model="model.username" :readOnly="!!model.id"/> + <a-form-model-item + label="鐢ㄦ埛璐﹀彿" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + prop="username" + > + <a-input + placeholder="璇疯緭鍏ョ敤鎴疯处鍙�" + v-model="model.username" + :readOnly="!!model.id" + /> </a-form-model-item> <template v-if="!model.id"> - <a-form-model-item label="鐧诲綍瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="password" > - <a-input type="password" placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" v-model="model.password" /> + <a-form-model-item + label="鐧诲綍瀵嗙爜" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + prop="password" + > + <a-input + type="password" + placeholder="璇疯緭鍏ョ櫥褰曞瘑鐮�" + v-model="model.password" + /> </a-form-model-item> - <a-form-model-item label="纭瀵嗙爜" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmpassword" > - <a-input type="password" @blur="handleConfirmBlur" placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" v-model="model.confirmpassword"/> + <a-form-model-item + label="纭瀵嗙爜" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + prop="confirmpassword" + > + <a-input + type="password" + @blur="handleConfirmBlur" + placeholder="璇烽噸鏂拌緭鍏ョ櫥褰曞瘑鐮�" + v-model="model.confirmpassword" + /> </a-form-model-item> </template> - <a-form-model-item label="鐢ㄦ埛濮撳悕" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="realname"> - <a-input placeholder="璇疯緭鍏ョ敤鎴峰鍚�" v-model="model.realname" /> + <a-form-model-item + label="鐢ㄦ埛濮撳悕" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + prop="realname" + > + <a-input + placeholder="璇疯緭鍏ョ敤鎴峰鍚�" + v-model="model.realname" + /> </a-form-model-item> - <a-form-model-item label="宸ュ彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workNo"> - <a-input placeholder="璇疯緭鍏ュ伐鍙�" v-model="model.workNo" /> + <a-form-model-item + label="宸ュ彿" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + prop="workNo" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍙�" + v-model="model.workNo" + /> </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">--> + <!--<j-select-position placeholder="璇烽�夋嫨鑱屽姟" :multiple="false" v-model="model.post"/>--> + <!--</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" :wrapperCol="wrapperCol" v-show="!roleDisabled" > + <a-form-model-item + label="瑙掕壊鍒嗛厤" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-show="!roleDisabled" + > <j-multi-select-tag - :disabled="disableSubmit" - v-model="model.selectedroles" - :options="rolesOptions" - placeholder="璇烽�夋嫨瑙掕壊"> + :disabled="disableSubmit" + v-model="model.selectedroles" + :options="rolesOptions" + placeholder="璇烽�夋嫨瑙掕壊" + > </j-multi-select-tag> </a-form-model-item> <!--閮ㄩ棬鍒嗛厤--> - <a-form-model-item label="閮ㄩ棬鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled"> - <j-select-depart v-model="model.selecteddeparts" :multi="true" @back="backDepartInfo" :backDepart="true" :treeOpera="true">></j-select-depart> + <a-form-model-item + v-if="isDepartType== 0" + label="閮ㄩ棬鍒嗛厤" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-show="!departDisabled" + > + <j-select-depart + v-model="model.selecteddeparts" + :multi="true" + @back="backDepartInfo" + :backDepart="true" + :treeOpera="true" + >> + </j-select-depart> </a-form-model-item> - <!--绉熸埛鍒嗛厤--> - <a-form-model-item label="绉熸埛鍒嗛厤" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="!departDisabled"> - <j-multi-select-tag - :disabled="disableSubmit" - v-model="model.relTenantIds" - :options="tenantsOptions" - placeholder="璇烽�夋嫨绉熸埛"> - </j-multi-select-tag> + <!--杞﹂棿鍒嗛厤--> + <a-form-model-item + label="杞﹂棿鍒嗛厤" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-show="!productionDisabled" + > + <j-select-production + v-model="model.selectedProduction" + :multi="true" + @back="backProductionInfo" + :backProduction="true" + :treeProductOpera="true" + ></j-select-production> </a-form-model-item> - <a-form-model-item label="韬唤" :labelCol="labelCol" :wrapperCol="wrapperCol"> - <a-radio-group v-model="model.userIdentity" @change="identityChange"> - <a-radio :value="1">鏅�氱敤鎴�</a-radio> - <a-radio :value="2">涓婄骇</a-radio> + <a-form-model-item + label="閫夋嫨璁惧" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-show="!productionDisabled" + > + <a-input-search :readOnly="true" v-model="model.equipmentIds" @search="deviceSearch" enter-button + placeholder="璇烽�夋嫨璁惧" :disabled="!model.selectedProduction"/> + </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" v-show="departIdShow==true"> + + <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="涓績鍒嗛厤" + :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> + </a-form-model-item> + <a-form-model-item + label="璐熻矗閮ㄩ棬" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-if="departIdShow==true" + > <j-multi-select-tag - :disabled="disableSubmit" - v-model="model.departIds" - :options="nextDepartOptions" - placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬"> + :disabled="disableSubmit" + v-model="model.departIds" + :options="nextDepartOptions" + placeholder="璇烽�夋嫨璐熻矗閮ㄩ棬" + > </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"--> + <!-->--> + <!--<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-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"--> + <!-->--> + <!--<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="email"--> + <!-->--> + <!--<a-input--> + <!--placeholder="璇疯緭鍏ラ偖绠�"--> + <!--v-model="model.email"--> + <!--/>--> + <!--</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"--> + <!--prop="phone"--> + <!-->--> + <!--<a-input--> + <!--placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�"--> + <!--v-model="model.phone"--> + <!--/>--> + <!--</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-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> - - <div class="drawer-bootom-button" v-show="!disableSubmit"> - <a-popconfirm title="纭畾鏀惧純缂栬緫锛�" @confirm="handleCancel" okText="纭畾" cancelText="鍙栨秷"> + <div + class="drawer-bottom-button" + v-show="!disableSubmit" + > + <a-popconfirm + title="纭畾鏀惧純缂栬緫锛�" + @confirm="handleCancel" + okText="纭畾" + cancelText="鍙栨秷" + > <a-button style="margin-right: .8rem">鍙栨秷</a-button> </a-popconfirm> - <a-button @click="handleSubmit" type="primary" :loading="confirmLoading">鎻愪氦</a-button> + <a-button + @click="handleSubmit" + type="primary" + :loading="confirmLoading" + >鎻愪氦 + </a-button> </div> + + <select-device-modal ref="selectDeviceModal" @selectFinished="selectOK" :title="'閫夋嫨璁惧'"/> </a-drawer> </template> <script> import moment from 'moment' import Vue from 'vue' - import { ACCESS_TOKEN } from "@/store/mutation-types" + 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 { 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", + name: 'UserModal', components: { + SelectDeviceModal, + JSelectProduction }, - data () { + data() { return { departDisabled: false, //鏄惁鏄垜鐨勯儴闂ㄨ皟鐢ㄨ椤甸潰 + productionDisabled: false, //鏄惁鏄垜鐨勮溅闂磋皟鐢ㄨ椤甸潰 roleDisabled: false, //鏄惁鏄鑹茬淮鎶よ皟鐢ㄨ椤甸潰 - modalWidth:800, - drawerWidth:700, - modaltoggleFlag:true, + 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: true, message: '璇疯緭鍏ユ墜鏈哄彿!'}, {validator: this.validatePhone}], - email: [{validator: this.validateEmail}], - roles:{}, - workNo:[ { required: true, message: '璇疯緭鍏ュ伐鍙�' }, + 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: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' },] + telephone: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: '璇疯緭鍏ユ纭殑搴ф満鍙风爜' }], + teamId: [{ required: false, message: '璇风淮鎶ょ彮缁�' }] }, - departIdShow:false, - title:"鎿嶄綔", + departIdShow: false, + title: '鎿嶄綔', visible: false, model: {}, labelCol: { xs: { span: 24 }, - sm: { span: 5 }, + sm: { span: 5 } }, wrapperCol: { xs: { span: 24 }, - sm: { span: 16 }, + sm: { span: 16 } }, - uploadLoading:false, + uploadLoading: false, confirmLoading: false, - headers:{}, + headers: {}, url: { - fileUpload: window._CONFIG['domianURL']+"/sys/common/upload", - userWithDepart: "/sys/user/userDepartList", // 寮曞叆涓烘寚瀹氱敤鎴锋煡鐪嬮儴闂ㄤ俊鎭渶瑕佺殑url - userId:"/sys/user/generateUserId", // 寮曞叆鐢熸垚娣诲姞鐢ㄦ埛鎯呭喌涓嬬殑url - syncUserByUserName:"/act/process/extActProcess/doSyncUserByUserName",//鍚屾鐢ㄦ埛鍒板伐浣滄祦 + 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:[], + rolesOptions: [], + nextDepartOptions: [], + nextProductionOptions: [], + isDepartType: '', + model: { + selectedProduction: '' + } } }, - created () { - const token = Vue.ls.get(ACCESS_TOKEN); - this.headers = {"X-Access-Token":token} + 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; + computed: { + uploadAction: function() { + return this.url.fileUpload } }, methods: { - add () { - this.refresh(); - this.edit({activitiSync:'1',userIdentity:1}); + ...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(() => { + }) }, - edit (record) { - let that = this; - that.visible = true; + 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; - that.model = Object.assign({},{selectedroles:'',selecteddeparts:''}, record); + 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 (this.model.userIdentity == 2) { + this.departIdShow = true + } else { + this.departIdShow = false } - if(record.hasOwnProperty("id")){ - that.getUserRoles(record.id); - that.getUserDeparts(record.id); + if (record.hasOwnProperty('id')) { + that.getUserRoles(record.id) + that.getUserDeparts(record.id) } - console.log('that.model=',that.model) }, - isDisabledAuth(code){ - return disabledAuthFilter(code); + isDisabledAuth(code) { + return disabledAuthFilter(code) }, //绐楀彛鏈�澶у寲鍒囨崲 - toggleScreen(){ - if(this.modaltoggleFlag){ - this.modalWidth = window.innerWidth; - }else{ - this.modalWidth = 800; + toggleScreen() { + if (this.modaltoggleFlag) { + this.modalWidth = window.innerWidth + } else { + this.modalWidth = 800 } - this.modaltoggleFlag = !this.modaltoggleFlag; + this.modaltoggleFlag = !this.modaltoggleFlag }, // 鏍规嵁灞忓箷鍙樺寲,璁剧疆鎶藉眽灏哄 - resetScreenSize(){ - let screenWidth = document.body.clientWidth; - if(screenWidth < 500){ - this.drawerWidth = screenWidth; - }else{ - this.drawerWidth = 700; + 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; + 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 }) - console.log('this.tenantsOptions: ',this.tenantsOptions) } }) }, //鍒濆鍖栬鑹插瓧鍏� - 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; + 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 }) - console.log('this.rolesOptions: ',this.rolesOptions) } - }); + }) }, - getUserRoles(userid){ - queryUserRole({userid:userid}).then((res)=>{ - if(res.success){ - this.model.selectedroles = res.result.join(","); - console.log('that.model.selectedroles=',this.model.selectedroles) + getUserRoles(userid) { + queryUserRole({ userid: userid }).then((res) => { + if (res.success) { + this.$set(this.model, 'selectedroles', res.result.join(',')) } - }); + }) }, - getUserDeparts(userid){ - let that = this; - getAction(that.url.userWithDepart,{userId:userid}).then((res)=>{ - if(res.success){ - let departOptions=[]; - let selectDepartKeys=[] + 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); + selectDepartKeys.push(res.result[i].key) //鏂板璐熻矗閮ㄩ棬閫夋嫨涓嬫媺妗� departOptions.push({ value: res.result[i].key, label: res.result[i].title }) } - that.model.selecteddeparts = selectDepartKeys.join(",") - that.nextDepartOptions=departOptions; - console.log('that.nextDepartOptions=',that.nextDepartOptions) + + 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; + this.model.departIds = this.model.selecteddeparts + this.nextDepartOptions = info.map((item, index, arr) => { + let c = { label: item.text, value: item.value + '' } + return c }) }, - refresh () { - this.userId="" - this.nextDepartOptions=[]; - this.departIdShow=false; + 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 + }) }, - close () { - this.$emit('close'); - this.visible = false; - this.disableSubmit = false; - this.nextDepartOptions=[]; - this.departIdShow=false; - this.$refs.form.resetFields(); + + 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; + handleSubmit() { + const that = this // 瑙﹀彂琛ㄥ崟楠岃瘉 this.$refs.form.validate(valid => { if (valid) { - that.confirmLoading = true; + that.confirmLoading = true //濡傛灉鏄笂绾ф嫨浼犲叆departIds,鍚﹀垯涓虹┖ - if(this.model.userIdentity!==2){ - this.model.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); + 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); + 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(); + that.confirmLoading = false + that.close() }) - }else{ - return false; + } else { + return false } }) }, - handleCancel () { + handleCancel() { this.close() }, - validateToNextPassword (rule, value, callback) { - const confirmpassword=this.model.confirmpassword; + validateToNextPassword(rule, value, callback) { + const confirmpassword = this.model.confirmpassword if (value && confirmpassword && value !== confirmpassword) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') } if (value && this.confirmDirty) { - this.$refs.form.validateField(['confirmpassword']); + this.$refs.form.validateField(['confirmpassword']) } - callback(); + callback() }, - compareToFirstPassword (rule, value, callback) { + compareToFirstPassword(rule, value, callback) { if (value && value !== this.model.password) { - callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒'); + callback('涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鏍凤紒') } else { callback() } }, - validatePhone(rule, value, callback){ - if(!value){ + validatePhone(rule, value, callback) { + if (!value) { callback() - }else{ - if(new RegExp(/^1[3|4|5|6|7|8|9][0-9]\d{8}$/).test(value)){ + } 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("鎵嬫満鍙峰凡瀛樺湪!") + callback('鎵嬫満鍙峰凡瀛樺湪!') } }) - }else{ - callback("璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!"); + } else { + callback('璇疯緭鍏ユ纭牸寮忕殑鎵嬫満鍙风爜!') } } }, - validateEmail(rule, value, callback){ - if(!value){ + 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)){ + } 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("閭宸插瓨鍦�!") + callback('閭宸插瓨鍦�!') } }) - }else{ - callback("璇疯緭鍏ユ纭牸寮忕殑閭!") + } else { + callback('璇疯緭鍏ユ纭牸寮忕殑閭!') } } }, - validateUsername(rule, value, 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("鐢ㄦ埛鍚嶅凡瀛樺湪!") + callback('鐢ㄦ埛鍚嶅凡瀛樺湪!') } }) }, - validateWorkNo(rule, value, 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("宸ュ彿宸插瓨鍦�!") + callback('宸ュ彿宸插瓨鍦�!') } }) }, handleConfirmBlur(e) { - const value = e.target.value; + 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; + 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; + 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(',')) } } } @@ -487,9 +788,10 @@ <style scoped> .avatar-uploader > .ant-upload { - width:104px; - height:104px; + width: 104px; + height: 104px; } + .ant-upload-select-picture-card i { font-size: 49px; color: #999; @@ -500,14 +802,14 @@ 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-bootom-button { + .drawer-bottom-button { position: absolute; - bottom: 0; + bottom: -8px; width: 100%; border-top: 1px solid #e8e8e8; padding: 10px 16px; @@ -516,10 +818,4 @@ background: #fff; border-radius: 0 0 2px 2px; } - - /*銆怞TC-502銆� 娣诲姞鐢ㄦ埛涓や釜婊氬姩鏉�*/ - /deep/ .ant-drawer-body { - padding-bottom: 53px; - } - -</style> +</style> \ No newline at end of file diff --git a/src/views/user/Login.vue b/src/views/user/Login.vue index e7d4f86..6eb8ab0 100644 --- a/src/views/user/Login.vue +++ b/src/views/user/Login.vue @@ -163,7 +163,7 @@ // this.$router.push({ path: "/isps/userAnnouncement" }).catch(() => { // console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') // }) - this.$router.push({ path: '/dashboard/analysis' }).catch(() => { + this.$router.push({ path: '/mdc/base/DeviceBaseInfo' }).catch(() => { console.log('鐧诲綍璺宠浆棣栭〉鍑洪敊,杩欎釜閿欒浠庡摢閲屾潵鐨�') }) this.$notification.success({ -- Gitblit v1.9.3