1、新增统计分析和报警分析页面
2、调整用户管理页面字段
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <a-card :bordered="false"> |
| | | <div style="width: 100%; height: 100%;overflow: hidden"> |
| | | <a-row type="flex" :gutter="16"> |
| | | <a-col :md="5" :sm="24"> |
| | | <base-tree @getCurrSelected="changeSelectionNode"></base-tree> |
| | | </a-col> |
| | | <a-col :md="24-5" :sm="24"> |
| | | <statistics-legend :equip="selectEquementnode"></statistics-legend> |
| | | </a-col> |
| | | </a-row> |
| | | </div> |
| | | </a-card> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTree from '../common/BaseTree' |
| | | import StatisticsLegend from './modules/StatisticsChart/StatisticsLegend' |
| | | export default { |
| | | name: 'StatisticsChart', |
| | | components:{ |
| | | BaseTree, |
| | | StatisticsLegend |
| | | }, |
| | | data() { |
| | | return { |
| | | description: '设å¤ä¿¡æ¯', |
| | | selectEquementnode:{}, |
| | | equipmentStatisticsInfo:{}, |
| | | url:{ |
| | | equipmentStatistics:"/mdc/equipment/equipmentStatistics" |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | changeSelectionNode(val){ |
| | | this.selectEquementnode = val |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div style="width: 100%; height: 100%;"> |
| | | <a-card :bordered="false"> |
| | | <a-row type="flex" :gutter="16"> |
| | | <a-col :md="5"> |
| | | <a-tabs :activeKey="activeKey" @change="tabChange"> |
| | | <a-tab-pane key="1" tab="车é´å±çº§" force-render> |
| | | <base-tree @getCurrSelected="changeSelectionNode"></base-tree> |
| | | </a-tab-pane> |
| | | <a-tab-pane v-if="isDepartType == 0" key="2" tab="é¨é¨å±çº§">, |
| | | <depart-tree @getCurrSelectedDD="changeSelectionNodedd"></depart-tree> |
| | | </a-tab-pane> |
| | | </a-tabs> |
| | | </a-col> |
| | | <a-col :md="19"> |
| | | <alarm-analysis-main ref="alarmAnalysisMain" :nodePeople='selectPeople' :nodeTree = 'selectEquement' :Type="slectTypeTree"></alarm-analysis-main> |
| | | </a-col> |
| | | </a-row> |
| | | </a-card> |
| | | </div> |
| | | |
| | | </template> |
| | | |
| | | <script> |
| | | import { putAction, getAction } from '@/api/manage' |
| | | import { frozenBatch } from '@/api/api' |
| | | import { JeecgListMixin } from '@/mixins/JeecgListMixin' |
| | | import JInput from '@/components/jeecg/JInput' |
| | | import BaseTree from '../common/BaseTree' |
| | | import alarmAnalysisMain from './modules/alarmAnalysis/alarmAnalysisMain' |
| | | import JSuperQuery from '@/components/jeecg/JSuperQuery' |
| | | import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton' |
| | | import DepartTree from './modules/DepartList/DepartListTree/DepartTree' |
| | | import {mapActions} from 'vuex' |
| | | export default { |
| | | name: 'alarmAnalysis', |
| | | components: { |
| | | JThirdAppButton, |
| | | JInput, |
| | | BaseTree, |
| | | JSuperQuery, |
| | | DepartTree, |
| | | alarmAnalysisMain |
| | | }, |
| | | data() { |
| | | return { |
| | | activeKey: '1', |
| | | description: '设å¤ä¿¡æ¯', |
| | | selectEquementId: '', |
| | | selectEquement: {}, |
| | | selectPeople:{}, |
| | | slectTypeTree:"", |
| | | url: { |
| | | equipmentStatistics: '/mdc/equipment/equipmentStatistics' |
| | | }, |
| | | isDepartType:'', |
| | | } |
| | | }, |
| | | created() { |
| | | this.queryTreeData() |
| | | }, |
| | | methods: { |
| | | ...mapActions(['QueryDepartTree']), |
| | | queryTreeData() { |
| | | this.QueryDepartTree().then(res => { |
| | | if (res.success) { |
| | | this.isDepartType = res.result[0].value |
| | | } else { |
| | | // this.$message.warn(res.message) |
| | | this.$notification.warning({ |
| | | message:'æ¶æ¯', |
| | | description:res.message |
| | | }); |
| | | } |
| | | }).finally(() =>{ |
| | | }) |
| | | }, |
| | | tabChange(val) { |
| | | // console.log(val); |
| | | this.activeKey = val |
| | | this.slectTypeTree = val |
| | | }, |
| | | // changeSelection(val) { |
| | | // this.selectEquementId = val |
| | | // this.$refs.efficiencyList.pQuery(val) |
| | | // this.$refs.efficiencyList.searchQuery() |
| | | // }, |
| | | changeSelectionNode(val) { |
| | | this.selectEquement = val |
| | | this.slectTypeTree = "1" |
| | | }, |
| | | changeSelectionNodedd(val) { |
| | | this.selectPeople = val |
| | | this.slectTypeTree = "2" |
| | | } |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | @import '~@assets/less/common.less'; |
| | | |
| | | .equipMessage { |
| | | width: 100%; |
| | | height: 10%; |
| | | } |
| | | |
| | | .equipMessage table { |
| | | width: 60%; |
| | | height: 100%; |
| | | line-height: 50%; |
| | | } |
| | | |
| | | .equipMessage table td { |
| | | text-align: center; |
| | | } |
| | | |
| | | .equipMessage table td span { |
| | | display: inline-block; |
| | | width: 15px; |
| | | height: 15px; |
| | | } |
| | | |
| | | .equipMessage table td .equipShutdown { |
| | | background-color: #808080; |
| | | } |
| | | |
| | | .equipMessage table td .equipStandby { |
| | | background-color: #ffbf37; |
| | | } |
| | | |
| | | .equipMessage table td .equipRun { |
| | | background-color: #19FE01; |
| | | } |
| | | |
| | | .equipMessage table td .equipAlarm { |
| | | background-color: #FD0008; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div id="StatisticsLegend" |
| | | style="width: 100%; height: 100%; overflow: hidden;display: flex;flex-direction: column;background-color: #f5f4f4"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div style="width: 100%; height: 44px; background-color: #fff" class="table-page-search-wrapper"> |
| | | <a-form layout="inline" @keyup.enter.native="searchQuery"> |
| | | <a-row :gutter="24"> |
| | | <a-col :md="5" :sm="5" :xs="5"> |
| | | <a-form-item label="åç§°"> |
| | | <a-input placeholder="è¾å
¥è®¾å¤åç§°æ¥è¯¢" :readOnly="readOnly" v-model="queryParam.tierName"></a-input> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="4" :sm="4" :xs="4"> |
| | | <a-form-item label="æ¥æ"> |
| | | <a-date-picker v-model="queryParams.collectTime" :disabledDate="disabledDate" format='YYYY-MM-DD' |
| | | @change="dataChange" :allowClear="false"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :md="2" :sm="2" :xs="2"> |
| | | <a-space> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button> |
| | | </a-space> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | <!--弿ºç--> |
| | | <div class="PowerOnRate Line-box"> |
| | | <div class="title"> |
| | | <div class="circle"></div> |
| | | <div class="text">å©ç¨ç</div> |
| | | </div> |
| | | <div class="PowerOnRate-box box-bottom"> |
| | | <div class="PowerOnRate-left" ref="PowerOnRatePie" id="PowerOnRatePie"></div> |
| | | <div class="PowerOnRate-right" ref="PowerOnRateLine" id="PowerOnRateLine"></div> |
| | | </div> |
| | | </div> |
| | | <!--å©ç¨çåå¼å¨ç--> |
| | | <div class="UtilizationStartup"> |
| | | <div class="Utilization Line-box"> |
| | | <div class="title"> |
| | | <div class="circle"></div> |
| | | <div class="text">弿ºç</div> |
| | | </div> |
| | | <div class="Utilization-box box-bottom"> |
| | | <div class="Utilization-left left"> |
| | | <div class="left-box"> |
| | | <div class="left-box-con"> |
| | | <div class="Rate-box-kong" :style="{height:100-UtilizationHeight+'%'}"></div> |
| | | <div class="Rate-box" :style="{height:UtilizationHeight+'%'}"> |
| | | <p class="Rate-box-text"> |
| | | <span ref="UtilizationRate">{{UtilizationHeight}}%</span> |
| | | <br> |
| | | 弿ºç |
| | | </p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="Utilization-right" ref="UtilizationLine" id="UtilizationLine"></div> |
| | | </div> |
| | | </div> |
| | | <div class="Startup Line-box"> |
| | | <div class="title"> |
| | | <div class="circle"></div> |
| | | <div class="text">å¼å¨ç</div> |
| | | </div> |
| | | <div class="Startup-box box-bottom"> |
| | | <div class="Startup-left left" ref="StartupRate"> |
| | | <div class="left-box"> |
| | | <div class="left-box-con"> |
| | | <div class="Rate-box-kong" :style="{height:100-StartupHeight+'%'}"></div> |
| | | <div class="Rate-box" :style="{height:StartupHeight+'%'}"> |
| | | <p class="Rate-box-text"> |
| | | <span>{{StatCharUsedopeningRate}}%</span> |
| | | <br> |
| | | å¼å¨ç |
| | | </p> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <div class="Startup-right" ref="StartupLine" id="StartupLine"></div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import moment from 'moment' |
| | | import { putAction, getAction } from '@/api/manage' |
| | | import $ from 'jquery' |
| | | import * as echarts from 'echarts' |
| | | |
| | | export default { |
| | | name: 'StatisticsLegend', |
| | | props: { equip: {} }, |
| | | data() { |
| | | return { |
| | | readOnly: true, |
| | | showday: true, |
| | | StatCharOpeningRate: 0, |
| | | StatCharUsedRate: 0, |
| | | StatCharUsedopeningRate: 0, |
| | | openingLong: 0, |
| | | waitingLong: 0, |
| | | processLong: 0, |
| | | closedLong: 0, |
| | | totalLong: 0, |
| | | UtilizationHeight: 0, |
| | | StartupHeight: 0, |
| | | quip: {}, |
| | | dates: [], |
| | | queryParam: {}, |
| | | queryParams: { |
| | | collectTime: undefined |
| | | }, |
| | | shiftSubList: [], |
| | | shiftList: [], |
| | | url: { |
| | | getEquipmentByPid: '/mdc/mdcequipment/getEquipmentByPid', |
| | | dayStatisticalRate: '/mdc/efficiencyReport/dayStatisticalRate', |
| | | getBaseTree: '/mdc/mdcEquipment/queryTreeListByProduction' |
| | | } |
| | | } |
| | | }, |
| | | created() { |
| | | let collectTime = moment(moment().add(-1, 'd'), 'YYYY-MM-DD') |
| | | this.queryParams.collectTime = moment().add(-1, 'd').format('YYYY-MM-DD') |
| | | this.queryParams.dateTime = moment().add(-1, 'd').format('YYYYMMDD') |
| | | this.initEquipmentNode() |
| | | }, |
| | | |
| | | methods: { |
| | | disabledDate(current) { |
| | | //Can not slect days before today and today |
| | | return current && current > moment().subtract('days', 1) |
| | | }, |
| | | //æç§è®¡ç®æå¯¹åºçæ¶åç§ç彿° |
| | | getTime(time) { |
| | | //转æ¢ä¸ºæ¶åç§ |
| | | let h = Math.round(time / 60 / 60) |
| | | h = h < 10 ? '0' + h : h |
| | | //ä½ä¸ºè¿åå¼è¿å |
| | | // console.log(h); |
| | | return h |
| | | }, |
| | | moment, |
| | | draw() { |
| | | //å©ç¨ç |
| | | //é¥¼å¾ |
| | | let PowerOnRatePie = this.$echarts.init(document.getElementById('PowerOnRatePie'), 'macarons') |
| | | let PowerOnRatePie_option = { |
| | | // color: ["#3859fa", '#ccc'], |
| | | title: { |
| | | text: this.StatCharUsedRate + '%', |
| | | subtext: 'å©ç¨ç', |
| | | textStyle: { |
| | | color: '#268e80', |
| | | fontSize: 18 |
| | | |
| | | }, |
| | | subtextStyle: { |
| | | color: '#292929' |
| | | }, |
| | | x: 'center', |
| | | y: 'center' |
| | | }, |
| | | series: [{ |
| | | name: '', |
| | | type: 'pie', |
| | | radius: ['55%', '70%'], |
| | | itemStyle: { |
| | | normal: { |
| | | borderWidth: 4,//æåºé´å é´é |
| | | borderColor: '#fff'//é´é为ç½è² |
| | | } |
| | | }, |
| | | label: { |
| | | normal: { |
| | | show: false |
| | | } |
| | | }, |
| | | data: [{ |
| | | value: 100, |
| | | itemStyle: { |
| | | color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| | | offset: 0, |
| | | color: '#88a8fd' |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: '#544cee' |
| | | }], false) |
| | | } |
| | | }, |
| | | { |
| | | value: 100 - this.StatCharUsedRate, |
| | | itemStyle: { |
| | | color: '#f0f3f5' |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ] |
| | | } |
| | | PowerOnRatePie.setOption(PowerOnRatePie_option) |
| | | let PowerOnRateLine = this.$echarts.init(document.getElementById('PowerOnRateLine'), 'macarons') |
| | | let PowerOnRateLine_option = { |
| | | tooltip: { |
| | | trigger: 'axis' |
| | | }, |
| | | grid: { |
| | | left: '3%', |
| | | right: '4%', |
| | | bottom: '3%', |
| | | top: 60, |
| | | containLabel: true |
| | | }, |
| | | legend: { |
| | | // selected:{ |
| | | // "æ²çº¿":false, |
| | | // }, |
| | | top: '0', |
| | | right: '10', |
| | | //设置åéå¤éæ¨¡å¼ |
| | | // selectedMode:'single', |
| | | icon: 'pin', |
| | | data: [ |
| | | // { |
| | | // name:'æ²çº¿', |
| | | // textStyle:{ |
| | | // padding:4, |
| | | // color:'#e957ff', |
| | | // // borderWidth:1, |
| | | // fontSize:16, |
| | | // // borderColor:'#50E6D7' |
| | | // } |
| | | // }, |
| | | { |
| | | name: 'æ±ç¶å¾', |
| | | textStyle: { |
| | | padding: 4, |
| | | fontSize: 16, |
| | | color: '#9996f8' |
| | | // borderWidth:1, |
| | | // borderColor:'#50E6D7' |
| | | } |
| | | } |
| | | ] |
| | | }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: ['弿ºæ¶é¿', 'å
³æºæ¶é¿', 'è¿è¡æ¶é¿', 'å¾
æºæ¶é¿'], |
| | | axisLabel: { //åæ è½´åä½é¢è² |
| | | textStyle: { |
| | | color: '#000' |
| | | } |
| | | }, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: '#e5e5e5' |
| | | } |
| | | }, |
| | | axisTick: { //yè½´å»åº¦çº¿ |
| | | show: false |
| | | }, |
| | | splitLine: { //ç½æ ¼ |
| | | show: false |
| | | }, |
| | | boundaryGap: true |
| | | }, |
| | | yAxis: { |
| | | name: 'æ¶é´/å°æ¶', |
| | | type: 'value', |
| | | axisLabel: { //åæ è½´åä½é¢è² |
| | | textStyle: { |
| | | color: '#000' |
| | | } |
| | | }, |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | axisTick: { //yè½´å»åº¦çº¿ |
| | | show: false |
| | | }, |
| | | splitLine: { //ç½æ ¼ |
| | | show: true, |
| | | lineStyle: { |
| | | color: '#dadde4', |
| | | type: 'dashed' |
| | | } |
| | | } |
| | | }, |
| | | series: [ |
| | | // { |
| | | // name:'æ²çº¿', |
| | | // type: 'line', |
| | | // smooth:true, |
| | | // symbol: 'circle', |
| | | // symbolSize: 8, |
| | | // label:{ |
| | | // show:true, |
| | | // position:"top", |
| | | // textStyle:{ |
| | | // color:'#000', |
| | | // }, |
| | | // formatter:"æ¶é¿ï¼{c}H" |
| | | // }, |
| | | // itemStyle: { |
| | | // color: "rgb(87, 120, 225)", |
| | | // borderColor: "#fff", |
| | | // borderWidth: 2, |
| | | // shadowColor: 'rgba(0, 0, 0, .3)', |
| | | // }, |
| | | // lineStyle: { |
| | | // normal: { |
| | | // color:"rgb(87, 120, 225)", |
| | | // shadowColor: 'rgba(87, 120, 225, .4)', |
| | | // shadowBlur: 8, |
| | | // shadowOffsetY: 10, |
| | | // shadowOffsetX: 0, |
| | | // }, |
| | | // }, |
| | | // areaStyle: { |
| | | // normal: { |
| | | // color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| | | // offset: 0, |
| | | // color: 'rgba(87, 120, 225, .6)' |
| | | // }, { |
| | | // offset: 1, |
| | | // color: 'rgba(87, 120, 225, .3)' |
| | | // }]), |
| | | // } |
| | | // }, |
| | | // data: [this.openingLong, this.closedLong, this.processLong,this.waitingLong], |
| | | // }, |
| | | { |
| | | name: 'æ±ç¶å¾', |
| | | type: 'bar', |
| | | data: [this.openingLong, this.closedLong, this.processLong, this.waitingLong], |
| | | // data:[22,3,5,6], |
| | | barWidth: 25, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: '#000' |
| | | }, |
| | | // formatter:"æ¶é¿ï¼{c}H", |
| | | formatter: params => { |
| | | const value = String(params.value) |
| | | return value.length == 2 && value[0] === '0' ? `æ¶é¿ï¼${value.slice(1)}H` : `æ¶é¿ï¼${value}H` |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | normal: { |
| | | color: function(params) { |
| | | let colorList = [ |
| | | ['#6496e9', '#6bded3'], |
| | | ['#849db8', '#b4b8cc'], |
| | | ['#4fe1c5', '#4ecee1'], |
| | | // ["#9978fa","#88a1fa"], |
| | | ['#ffbb65', '#fdc68b'] |
| | | ] |
| | | // return colorList[params.dataIndex]; |
| | | let colorItem = colorList[params.dataIndex] |
| | | return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| | | offset: 0, |
| | | color: colorItem[0] |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: colorItem[1] |
| | | }], false) |
| | | }, |
| | | barBorderRadius: [5, 5, 0, 0] |
| | | } |
| | | } |
| | | }] |
| | | } |
| | | PowerOnRateLine.setOption(PowerOnRateLine_option) |
| | | //弿ºç |
| | | let UtilizationLine = this.$echarts.init(document.getElementById('UtilizationLine'), 'macarons') |
| | | let UtilizationLine_option = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '15%', |
| | | right: '3%', |
| | | left: '10%', |
| | | bottom: '12%' |
| | | }, |
| | | xAxis: [{ |
| | | type: 'category', |
| | | data: ['弿ºæ¶é¿', 'æ»æ¶é¿'], |
| | | axisLine: { |
| | | lineStyle: { |
| | | // color: 'rgba(70, 196, 255, .8)' |
| | | } |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLabel: { |
| | | // color: 'rgba(111, 132, 189, 1)', |
| | | textStyle: { |
| | | fontSize: 14 |
| | | } |
| | | } |
| | | }], |
| | | yAxis: [{ |
| | | type: 'value', |
| | | name: 'æ¶é´/å°æ¶', |
| | | nameTextStyle: { |
| | | // color: 'rgba(111, 132, 189, 1)' |
| | | }, |
| | | axisLabel: { |
| | | formatter: '{value}' |
| | | // color: 'rgba(111, 132, 189, 1)', |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | // color: 'rgba(70, 196, 255, .3)' |
| | | } |
| | | } |
| | | }], |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | data: [this.openingLong, this.totalLong], |
| | | // data:[22,22], |
| | | barWidth: 25, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: '#000' |
| | | }, |
| | | // formatter:"æ¶é¿ï¼{c}H", |
| | | formatter: params => { |
| | | const value = String(params.value) |
| | | return value.length == 2 && value[0] === '0' ? `æ¶é¿ï¼${value.slice(1)}H` : `æ¶é¿ï¼${value}H` |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | normal: { |
| | | color: function(params) { |
| | | let colorList = [ |
| | | ['#6496e9', '#6bded3'], |
| | | ['#9978fa', '#88a1fa'] |
| | | ] |
| | | // return colorList[params.dataIndex]; |
| | | let colorItem = colorList[params.dataIndex] |
| | | return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| | | offset: 0, |
| | | color: colorItem[0] |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: colorItem[1] |
| | | }], false) |
| | | }, |
| | | barBorderRadius: [5, 5, 0, 0] |
| | | } |
| | | } |
| | | }] |
| | | } |
| | | UtilizationLine.setOption(UtilizationLine_option) |
| | | //å¼å¨ç |
| | | let StartupLine = this.$echarts.init(document.getElementById('StartupLine'), 'macarons') |
| | | let StartupLine_option = { |
| | | tooltip: { |
| | | trigger: 'axis', |
| | | axisPointer: { |
| | | type: 'shadow' |
| | | } |
| | | }, |
| | | grid: { |
| | | top: '15%', |
| | | right: '3%', |
| | | left: '10%', |
| | | bottom: '12%' |
| | | }, |
| | | xAxis: [{ |
| | | type: 'category', |
| | | data: ['è¿è¡æ¶é¿', '弿ºæ¶é¿'], |
| | | axisLine: { |
| | | lineStyle: { |
| | | // color: 'rgba(70, 196, 255, .8)' |
| | | } |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | axisLabel: { |
| | | // color: 'rgba(111, 132, 189, 1)', |
| | | textStyle: { |
| | | fontSize: 14 |
| | | } |
| | | } |
| | | }], |
| | | yAxis: [{ |
| | | type: 'value', |
| | | name: 'æ¶é´/å°æ¶', |
| | | nameTextStyle: { |
| | | // color: 'rgba(111, 132, 189, 1)' |
| | | }, |
| | | axisLabel: { |
| | | formatter: '{value}' |
| | | // color: 'rgba(111, 132, 189, 1)', |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | splitLine: { |
| | | lineStyle: { |
| | | // color: 'rgba(70, 196, 255, .3)' |
| | | } |
| | | } |
| | | }], |
| | | series: [{ |
| | | type: 'bar', |
| | | data: [this.processLong, this.openingLong], |
| | | // data:[22,22], |
| | | barWidth: 25, |
| | | label: { |
| | | show: true, |
| | | position: 'top', |
| | | textStyle: { |
| | | color: '#000' |
| | | }, |
| | | // formatter:"æ¶é¿ï¼{c}H", |
| | | formatter: params => { |
| | | const value = String(params.value) |
| | | return value.length == 2 && value[0] === '0' ? `æ¶é¿ï¼${value.slice(1)}H` : `æ¶é¿ï¼${value}H` |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | normal: { |
| | | color: function(params) { |
| | | let colorList = [ |
| | | ['#4fe1c5', '#4ecee1'], |
| | | ['#6496e9', '#6bded3'] |
| | | ] |
| | | // return colorList[params.dataIndex]; |
| | | let colorItem = colorList[params.dataIndex] |
| | | return new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ |
| | | offset: 0, |
| | | color: colorItem[0] |
| | | }, |
| | | { |
| | | offset: 1, |
| | | color: colorItem[1] |
| | | }], false) |
| | | }, |
| | | barBorderRadius: [5, 5, 0, 0] |
| | | } |
| | | } |
| | | }] |
| | | } |
| | | StartupLine.setOption(StartupLine_option) |
| | | }, |
| | | queryStatistical() { |
| | | getAction(this.url.dayStatisticalRate, this.queryParams).then(res => { |
| | | if (res.success) { |
| | | this.StatCharOpeningRate = res.result.openRate |
| | | this.StatCharUsedRate = res.result.utilizationRate |
| | | this.UtilizationHeight = res.result.openRate |
| | | this.StatCharUsedopeningRate = res.result.usedOpenRate |
| | | this.StartupHeight = res.result.usedOpenRate |
| | | this.openingLong = this.getTime(res.result.openLong) |
| | | this.waitingLong = this.getTime(res.result.waitLong) |
| | | this.processLong = this.getTime(res.result.processLong) |
| | | this.closedLong = this.getTime(res.result.closeLong) |
| | | this.totalLong = parseInt(this.openingLong) + parseInt(this.closedLong) |
| | | this.draw() |
| | | } |
| | | }) |
| | | }, |
| | | dataChange(val) { |
| | | if (val) { |
| | | this.queryParams.dateTime = val.format('YYYYMMDD') |
| | | this.queryParams.collectTime = val.format('YYYY-MM-DD') |
| | | } |
| | | }, |
| | | initEquipmentNode() { |
| | | let _this = this |
| | | getAction(this.url.getBaseTree).then((res) => { |
| | | if (res.success) { |
| | | const { isEquipment, productionId, tierName } = this.$route.params |
| | | // 夿æ¯å¦æ¯ä»çæ¿è·³è½¬è¿æ¥ï¼productionId åå¨å为ä»çæ¿è·³è½¬ |
| | | if (productionId) { |
| | | // 夿æ¯å¦ç¹å»çæ¯è®¾å¤å±çº§ |
| | | if (!isEquipment) { |
| | | _this.$set(this.queryParams, 'parentId', productionId) |
| | | _this.$set(this.queryParam, 'tierName', tierName) |
| | | } else { |
| | | _this.$set(this.queryParams, 'equipmentId', productionId) |
| | | _this.$set(this.queryParam, 'tierName', productionId + '/' + tierName) |
| | | } |
| | | } else { |
| | | if (res.result[0]) { |
| | | _this.$set(this.queryParam, 'tierName', res.result[0].title) |
| | | _this.$set(this.queryParams, 'parentId', res.result[0].key) |
| | | } |
| | | } |
| | | this.queryStatistical() |
| | | } else { |
| | | this.$notification.warning({ |
| | | message: 'æ¶æ¯', |
| | | description: res.message |
| | | }) |
| | | } |
| | | }).finally(() => { |
| | | this.loading = false |
| | | this.cardLoading = false |
| | | }) |
| | | }, |
| | | searchReset() { |
| | | this.queryParam = {} |
| | | this.queryParams = { |
| | | collectTime: moment().add(-1, 'd').format('YYYY-MM-DD'), |
| | | dateTime: moment().add(-1, 'd').format('YYYYMMDD') |
| | | } |
| | | this.initEquipmentNode() |
| | | }, |
| | | searchQuery() { |
| | | this.queryStatistical() |
| | | } |
| | | }, |
| | | watch: { |
| | | equip(val) { |
| | | // console.log(val); |
| | | if (val && val.equipmentId) { |
| | | this.$set(this.queryParam, 'tierName', val.title) |
| | | this.$set(this.queryParam, 'equipmentId', val.equipmentId) |
| | | this.queryParams.parentId = '' |
| | | this.queryParams.equipmentId = val.equipmentId |
| | | } else { |
| | | this.queryParams.parentId = val.key |
| | | this.queryParams.equipmentId = '' |
| | | this.$set(this.queryParam, 'tierName', val.title) |
| | | } |
| | | this.searchQuery() |
| | | } |
| | | // this.searchQuery(); |
| | | } |
| | | |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .charContent { |
| | | display: flex; |
| | | } |
| | | |
| | | @media screen and (min-width: 1920px) { |
| | | #StatisticsLegend { |
| | | height: 748px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1680px) and (max-width: 1920px) { |
| | | #StatisticsLegend { |
| | | height: 748px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1400px) and (max-width: 1680px) { |
| | | #StatisticsLegend { |
| | | height: 600px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1280px) and (max-width: 1400px) { |
| | | #StatisticsLegend { |
| | | height: 501px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (max-width: 1280px) { |
| | | #StatisticsLegend { |
| | | height: 501px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | #StatisticsLegend .PowerOnRate { |
| | | flex: 1; |
| | | margin-bottom: 15px; |
| | | background-color: #fff; |
| | | } |
| | | |
| | | #StatisticsLegend .UtilizationStartup { |
| | | flex: 1; |
| | | display: flex; |
| | | } |
| | | |
| | | #StatisticsLegend .UtilizationStartup > div { |
| | | flex: 1; |
| | | background-color: #fff; |
| | | } |
| | | |
| | | #StatisticsLegend .UtilizationStartup .Utilization { |
| | | margin-right: 15px; |
| | | } |
| | | |
| | | .title { |
| | | display: flex; |
| | | align-items: center; |
| | | padding-left: 15px; |
| | | padding-top: 5px; |
| | | } |
| | | |
| | | .title .circle { |
| | | width: 15px; |
| | | height: 15px; |
| | | background-color: #7282ec; |
| | | border-radius: 100%; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .title .text { |
| | | font-size: 2vh; |
| | | } |
| | | |
| | | .Line-box { |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | |
| | | .Line-box .box-bottom { |
| | | flex: 1; |
| | | } |
| | | |
| | | .PowerOnRate-box { |
| | | display: flex; |
| | | } |
| | | |
| | | .PowerOnRate-box .PowerOnRate-left { |
| | | width: 25%; |
| | | } |
| | | |
| | | .PowerOnRate-box .PowerOnRate-right { |
| | | flex: 1; |
| | | } |
| | | |
| | | .Utilization-box { |
| | | display: flex; |
| | | } |
| | | |
| | | .Utilization-box .Utilization-left { |
| | | width: 25%; |
| | | } |
| | | |
| | | .Utilization-box .Utilization-right { |
| | | flex: 1; |
| | | } |
| | | |
| | | .Startup-box { |
| | | display: flex; |
| | | } |
| | | |
| | | .Startup-box .Startup-left { |
| | | width: 25%; |
| | | } |
| | | |
| | | .Startup-box .Startup-right { |
| | | flex: 1; |
| | | } |
| | | |
| | | .left { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .left .left-box { |
| | | width: 65%; |
| | | height: 60%; |
| | | margin: 0 auto; |
| | | overflow: hidden; |
| | | border-radius: 8px; |
| | | |
| | | /*border: 6px solid red;*/ |
| | | /*!*background-color: yellow;*!*/ |
| | | /*border-image: linear-gradient(to top, #2bf3c7, #06a8f8) 1;*/ |
| | | } |
| | | |
| | | .left-box-con { |
| | | width: 100%; |
| | | height: 100%; |
| | | position: relative; |
| | | text-align: center; |
| | | border: 6px solid red; |
| | | /*background-color: yellow;*/ |
| | | border-image: linear-gradient(to top, #2bf3c7, #06a8f8) 1; |
| | | } |
| | | |
| | | .left .left-box .Rate-box-kong { |
| | | width: 100%; |
| | | background: -moz-linear-gradient(bottom, #b5dec2 0%, #f4f5ba 100%); |
| | | background: -webkit-gradient(linear, bottom bottom, top top, color-stop(0%, #b5dec2), color-stop(100%, #f4f5ba)); |
| | | background: -webkit-linear-gradient(bottom, #b5dec2 0%, #f4f5ba 100%); |
| | | background: -o-linear-gradient(bottom, #b5dec2 0%, #f4f5ba 100%); |
| | | background: -ms-linear-gradient(bottom, #b5dec2 0%, #f4f5ba 100%); |
| | | background: linear-gradient(to top, #b5dec2 0%, #f4f5ba 100%); |
| | | } |
| | | |
| | | .left .left-box .Rate-box { |
| | | position: absolute; |
| | | text-align: center; |
| | | bottom: 0; |
| | | width: 100%; |
| | | height: 89%; |
| | | /*background-color: green;*/ |
| | | background: -moz-linear-gradient(bottom, #06a8f8 0%, #2bf3c7 100%); |
| | | background: -webkit-gradient(linear, bottom bottom, top top, color-stop(0%, #06a8f8), color-stop(100%, #2bf3c7)); |
| | | background: -webkit-linear-gradient(bottom, #06a8f8 0%, #2bf3c7 100%); |
| | | background: -o-linear-gradient(bottom, #06a8f8 0%, #2bf3c7 100%); |
| | | background: -ms-linear-gradient(bottom, #06a8f8 0%, #2bf3c7 100%); |
| | | background: linear-gradient(to top, #06a8f8 0%, #2bf3c7 100%); |
| | | } |
| | | |
| | | .left .left-box .Rate-box p { |
| | | position: absolute; |
| | | bottom: 0; |
| | | color: #fff; |
| | | width: 100%; |
| | | text-align: center; |
| | | } |
| | | |
| | | .con-left { |
| | | display: flex; |
| | | flex-direction: column; |
| | | flex-wrap: wrap; |
| | | justify-content: space-around; |
| | | align-items: center; |
| | | } |
| | | |
| | | .con-left > span { |
| | | flex: 1; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="efficiency_list" style="width: 100%;height: 100%;"> |
| | | <div :bordered="false" style="height: 100%"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div class="table-page-search-wrapper"> |
| | | <a-form layout="inline" @keyup.enter.native="searchQuery"> |
| | | <a-row :gutter="24"> |
| | | <a-col :md="7" :sm="7"> |
| | | <a-form-item label="æ¶é´"> |
| | | <a-range-picker @change="dateParamChange" :disabledDate="disabledDate" format="YYYYMMDD" |
| | | v-model="dates" :allowClear="false"/> |
| | | </a-form-item> |
| | | </a-col> |
| | | <a-col :lg="2" :md="2" :sm="2" :xs="2"> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | </div> |
| | | <div id="DeviceList"> |
| | | <div class="openRateTrendDg"> |
| | | <a-table :columns="columns" :data-source="dataList" bordered :pagination="false" :scroll="{y:210}" |
| | | :customRow="customRow" |
| | | rowKey="alarmCode" @expand="handleExpandChange" :loading="outerDataLoading" |
| | | > |
| | | <span slot="timeCount" slot-scope="text">{{text | getFormattedTime}}</span> |
| | | <a-table |
| | | slot="expandedRowRender" |
| | | slot-scope="row" |
| | | :columns="innerColumns" |
| | | :data-source="row.innerDataList" |
| | | :pagination="false" |
| | | rowKey="rowIndex" |
| | | :loading="innerDataLoading" |
| | | > |
| | | <span slot="duration" slot-scope="text">{{text | getFormattedTime}}</span> |
| | | </a-table> |
| | | </a-table> |
| | | </div> |
| | | |
| | | <a-spin :spinning="echartLoading"> |
| | | <div style="width: 100%;height: 100%;display: flex;"> |
| | | <div id="MdcEquipmentWarningPie" style="height: 100%;width: 35%;"></div> |
| | | <div id="MdcEquipmentWarningLine" style="height: 100%;width: 65%;"></div> |
| | | </div> |
| | | </a-spin> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import moment from 'moment' |
| | | import { putAction, getAction } from '@/api/manage' |
| | | import $ from 'jquery' |
| | | import '@/components/table2excel/table2excel' |
| | | import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api' |
| | | import { |
| | | JeecgListMixin |
| | | } from '@/mixins/JeecgListMixin' |
| | | |
| | | const columns = [ |
| | | { title: 'æ¥è¦å·', dataIndex: 'alarmCode', key: 'alarmCode', align: 'center' }, |
| | | { title: 'åºç°æ¬¡æ°', dataIndex: 'count', key: 'count', align: 'center', sorter: (a, b) => b.count - a.count }, |
| | | { |
| | | title: 'å计æç»æ¶é´', |
| | | dataIndex: 'timeCount', |
| | | key: 'timeCount', |
| | | scopedSlots: { customRender: 'timeCount' }, |
| | | align: 'center', |
| | | sorter: (a, b) => b.timeCount - a.timeCount |
| | | }, |
| | | { title: 'æ¥è¦ä¿¡æ¯', dataIndex: 'alarmContent', key: 'alarmContent', align: 'center', ellipsis: true } |
| | | ] |
| | | |
| | | const innerColumns = [ |
| | | { |
| | | title: '', |
| | | dataIndex: 'rowIndex', |
| | | key: 'rowIndex', |
| | | width: 60, |
| | | align: 'center', |
| | | customRender: function(t, r, index) { |
| | | return parseInt(index) + 1 |
| | | } |
| | | }, |
| | | { title: '设å¤ç¼å·', dataIndex: 'equipmentId', key: 'equipmentId', align: 'center' }, |
| | | { title: '设å¤åç§°', dataIndex: 'equipmentName', key: 'equipmentName', align: 'center' }, |
| | | { title: 'æ¥è¦æ¶é´', dataIndex: 'startTime', key: 'startTime', align: 'center' }, |
| | | { title: 'ç»ææ¶é´', dataIndex: 'endTime', key: 'endTime', align: 'center' }, |
| | | { |
| | | title: 'æç»æ¶é´', |
| | | dataIndex: 'duration', |
| | | key: 'duration', |
| | | scopedSlots: { customRender: 'duration' }, |
| | | align: 'center' |
| | | } |
| | | ] |
| | | |
| | | export default { |
| | | // mixins: [JeecgListMixin], |
| | | name: 'alarmAnalysisMain', |
| | | components: {}, |
| | | data() { |
| | | return { |
| | | dataSource: [], |
| | | /* tableå è½½ç¶æ */ |
| | | outerDataLoading: false, |
| | | innerDataLoading: false, |
| | | echartLoading: false, |
| | | typeTree: '', |
| | | typeParent: 1, |
| | | typeEquipment: 1, |
| | | TreeIDOne: 1, |
| | | TreeIDTwo: 2, |
| | | deviceTypeDict: '', |
| | | dates: [], |
| | | identifying: [], |
| | | queryParam: {}, |
| | | queryParams: {}, |
| | | queryParamEquip: {}, |
| | | queryParamPeople: {}, |
| | | efficiencyOptions: [ |
| | | { label: 'å©ç¨ç', value: 'lyl' }, |
| | | { label: '弿ºç', value: 'kjl' }, |
| | | { label: '弿ºæ¶é´', value: 'kjsj' }, |
| | | { label: 'å å·¥æ¶é´', value: 'jgsj' }, |
| | | { label: 'å¾
æºæ¶é´', value: 'djsj' }, |
| | | { label: 'å
³æºæ¶é´', value: 'gjsj' } |
| | | ], |
| | | checkedList: ['lyl'], |
| | | dataList: [], |
| | | url: { |
| | | efficiencyList: '/mdc/alarmAnalyze/alarmList', |
| | | listByType: '/mdc/MdcUtilizationRate/getByType', |
| | | alarmTrend: '/mdc/alarmAnalyze/alarmTrend', |
| | | equipmentAlarmList: '/mdc/alarmAnalyze/equipmentAlarmList' |
| | | }, |
| | | tableHeads: [], |
| | | pieDate: [0], |
| | | XData: [0], |
| | | YData: [0], |
| | | columns, |
| | | innerColumns, |
| | | hasRequsetAlarmCodeList: [] |
| | | } |
| | | }, |
| | | props: { nodeTree: '', Type: '', nodePeople: '' }, |
| | | /** |
| | | * çå½å¨æ æè½½å |
| | | * */ |
| | | created() { |
| | | this.dates = [moment().subtract('days', 8), moment().subtract('days', 1)] |
| | | this.queryParam.startDate = moment(this.dates[0]).format('YYYYMMDD') |
| | | this.queryParam.endDate = moment(this.dates[1]).format('YYYYMMDD') |
| | | this.queryParam.typeTree = '1' |
| | | this.loadData1() |
| | | |
| | | }, |
| | | mounted() { |
| | | this.drawWrin() |
| | | window.addEventListener('resize', this.handleWindowResize) |
| | | }, |
| | | beforeDestroy() { |
| | | window.removeEventListener('resize', this.handleWindowResize) |
| | | }, |
| | | watch: { |
| | | Type(valmath) { |
| | | this.dataList = [] |
| | | this.queryParam.typeTree = valmath |
| | | }, |
| | | nodeTree(val) { //çå¬currSelected ååï¼å°åååçæ°å¼ä¼ éç» getCurrSelected äºä»¶ |
| | | if (JSON.stringify(val) != '{}') { |
| | | if (val.equipmentId != null) { |
| | | this.queryParamEquip.parentId = '' |
| | | this.queryParamEquip.equipmentId = val.equipmentId |
| | | } else { |
| | | this.queryParamEquip.parentId = val.key |
| | | this.queryParamEquip.equipmentId = '' |
| | | } |
| | | /*è¿éä½ æ¯çå¬å°æ å¾åå æ¯ä¸æ¯è¯·æ±ä¸æ¬¡*/ |
| | | this.searchQuery() |
| | | } |
| | | }, |
| | | nodePeople(val) { |
| | | if (JSON.stringify(val) != '{}') { |
| | | if (val.equipmentId != null) { |
| | | this.queryParamPeople.parentId = val.equipmentId |
| | | this.queryParamPeople.equipmentId = '' |
| | | } else { |
| | | this.queryParamPeople.parentId = val.key |
| | | this.queryParamPeople.equipmentId = '' |
| | | } |
| | | this.searchQuery() |
| | | } |
| | | } |
| | | }, |
| | | filters: { |
| | | numFilter(value) { |
| | | if (value) { |
| | | return parseFloat((value * 100).toFixed(2)) |
| | | } else { |
| | | return '0' |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * æ ¼å¼åæ¶é´ |
| | | * @param seconds ç§æ° |
| | | * @returns '' æ ¼å¼ååæ¶é´å符串 |
| | | */ |
| | | getFormattedTime(seconds) { |
| | | var hours = Math.floor(seconds / 3600) |
| | | var minutes = Math.floor((seconds % 3600) / 60) |
| | | var secs = seconds % 60 |
| | | |
| | | if (hours === 0) { |
| | | if (minutes === 0) { |
| | | return secs === 0 ? 0 : `${secs}ç§` |
| | | } else { |
| | | if (secs === 0) { |
| | | return `${minutes}å` |
| | | } |
| | | return `${minutes}å ${secs}ç§` |
| | | } |
| | | } else { |
| | | if (minutes === 0 && secs === 0) { |
| | | return `${hours}å°æ¶` |
| | | } else if (minutes !== 0 && secs === 0) { |
| | | return `${hours}å°æ¶ ${minutes}å` |
| | | } |
| | | } |
| | | return `${hours}å°æ¶ ${minutes}å ${secs}ç§` |
| | | } |
| | | }, |
| | | methods: { |
| | | numBerTwo(value) { |
| | | if (value) { |
| | | return parseFloat((value * 100).toFixed(2)) |
| | | } else { |
| | | return '0' |
| | | } |
| | | }, |
| | | TableDraw(key, val) { |
| | | let that = this |
| | | that.echartLoading = true |
| | | that.queryParam.alarmCode = val.alarmCode |
| | | console.log(this.queryParam) |
| | | getAction(that.url.alarmTrend, that.queryParam) |
| | | .then(res => { |
| | | if (res.success) { |
| | | that.pieDate = res.result.equipmentCountList.map(item => { |
| | | return { |
| | | name: item.key, |
| | | value: item.count |
| | | } |
| | | }) |
| | | that.XData = res.result.dateCountList.map(item => item.key) |
| | | that.YData = res.result.dateCountList.map(item => item.count) |
| | | |
| | | // this.tableHeads = res.result.dates |
| | | // this.dataList = res.result |
| | | // this.draw() |
| | | // this.checkSameData(this.dataList) |
| | | // this.checkSameData1(this.dataList) |
| | | // this.checkSameData2(this.dataList) |
| | | // this.combineCell(); |
| | | // this.initDeviceType(this.dataList) |
| | | that.drawWrin() |
| | | } |
| | | }) |
| | | .finally(() => { |
| | | that.echartLoading = false |
| | | }) |
| | | console.log(this.YData) |
| | | |
| | | }, |
| | | disabledDate(current) { |
| | | //Can not slect days before today and today |
| | | return current && current > moment().subtract('days', 1) |
| | | }, |
| | | initDeviceType(deviceList) { |
| | | let dictCode = 'mdc_equipmentType' |
| | | let items = [] |
| | | items = getDictItemsFromCache(dictCode) |
| | | if (deviceList && items.length > 0) { |
| | | for (let a = 0; a < deviceList.length; a++) { |
| | | if (items && items.length > 0) { |
| | | for (let i = 0; i < items.length; i++) { |
| | | if (deviceList[a].equipmentType == items[i].value) { |
| | | deviceList[a].equipmentType = items[i].title |
| | | } |
| | | } |
| | | } else { |
| | | ajaxGetDictItems(dictCode, null).then((res) => { |
| | | if (res.success) { |
| | | let items = res.result |
| | | for (let i = 0; i < items.length; i++) { |
| | | if (deviceList[a].equipmentType == items[i].value) { |
| | | deviceList[a].equipmentType = items[i].title |
| | | } |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | dateParamChange(v1, v2) { |
| | | this.queryParam.startDate = v2[0] |
| | | this.queryParam.endDate = v2[1] |
| | | }, |
| | | searchQuery() { |
| | | if (this.queryParam.typeTree == '1') { |
| | | this.queryParam.parentId = this.queryParamEquip.parentId |
| | | this.queryParam.equipmentId = this.queryParamEquip.equipmentId |
| | | } else { |
| | | this.queryParam.parentId = this.queryParamPeople.parentId |
| | | this.queryParam.equipmentId = '' |
| | | } |
| | | this.loadData1() |
| | | }, |
| | | loadData1() { |
| | | this.outerDataLoading = true |
| | | this.tableHeads = [] |
| | | this.dataList = [] |
| | | getAction(this.url.efficiencyList, this.queryParam).then(res => { |
| | | if (res.success) { |
| | | // this.tableHeads = res.result.dates |
| | | this.dataList = res.result |
| | | this.hasRequsetAlarmCodeList = [] |
| | | // this.draw() |
| | | // this.checkSameData(this.dataList) |
| | | // this.checkSameData1(this.dataList) |
| | | // this.checkSameData2(this.dataList) |
| | | // this.combineCell(); |
| | | // this.initDeviceType(this.dataList) |
| | | |
| | | } |
| | | }).finally(() => { |
| | | this.outerDataLoading = false |
| | | }) |
| | | }, |
| | | drawWrin() { |
| | | this.equipmentWarningPie = this.$echarts.init(document.getElementById('MdcEquipmentWarningPie'), 'macarons') |
| | | let equipmentWarningPieOption = { |
| | | title: { |
| | | text: 'å设å¤åºç°æ¤æ¥è¦çæ¯ä¾', |
| | | x: 'center', |
| | | y: 'bottom', |
| | | textStyle: { |
| | | color: '#4FAEDC' |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'item', |
| | | formatter: '<br/>{b} : {c} ({d}%)' |
| | | }, |
| | | calculable: true, |
| | | series: [{ |
| | | type: 'pie', |
| | | radius: '60%', |
| | | itemStyle: { |
| | | normal: { |
| | | color: function(params) { |
| | | var colorList = ['#5AB1EF', '#2EC7C9', '#B6A2DE', '#FFB980', '#D87A80', '#8D98B3'] |
| | | return colorList[params.dataIndex] |
| | | }, |
| | | label: { |
| | | show: true, |
| | | // position: 'top', |
| | | formatter: '{b}\n{c}', |
| | | color: function(params) { |
| | | var colorList = ['#5AB1EF', '#2EC7C9', '#B6A2DE', '#FFB980', '#D87A80', '#8D98B3'] |
| | | return colorList[params.dataIndex] |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | data: this.pieDate |
| | | // data:[{name:'jjjjjjj',value:'2'}] |
| | | }] |
| | | } |
| | | this.equipmentWarningPie.setOption(equipmentWarningPieOption, true) |
| | | this.equipmentWarningLine = this.$echarts.init(document.getElementById('MdcEquipmentWarningLine'), 'macarons') |
| | | let equipmentWarningLineOption = { |
| | | title: { |
| | | text: 'æ¯å¤©åºç°æ¤æ¥è¦çæ°éèµ°å¿', |
| | | x: 'center', |
| | | y: 'bottom', |
| | | textStyle: { |
| | | color: '#4FAEDC' |
| | | } |
| | | }, |
| | | tooltip: { |
| | | trigger: 'axis' |
| | | }, |
| | | calculable: true, |
| | | xAxis: [ |
| | | { |
| | | type: 'category', |
| | | show: true, |
| | | data: this.XData |
| | | /*axisLabel :{ |
| | | interval:0 |
| | | }*/, |
| | | axisLine: { |
| | | //x轴线çé¢è²ä»¥å宽度 |
| | | show: true, |
| | | lineStyle: { |
| | | width: 2, |
| | | color: '#4FAEDC' |
| | | } |
| | | } |
| | | } |
| | | ], |
| | | yAxis: [ |
| | | { |
| | | type: 'value', |
| | | name: '次æ°', |
| | | axisLine: { |
| | | //x轴线çé¢è²ä»¥å宽度 |
| | | show: true, |
| | | lineStyle: { |
| | | width: 2, |
| | | color: '#4FAEDC' |
| | | } |
| | | } |
| | | } |
| | | ], |
| | | series: [ |
| | | { |
| | | name: 'æ¥è¦æ°é', |
| | | type: 'line', |
| | | data: this.YData, |
| | | markPoint: { |
| | | data: [ |
| | | { type: 'max', name: 'æå¤§å¼' }, |
| | | { type: 'min', name: 'æå°å¼' } |
| | | ], |
| | | label: { |
| | | color: '#fff' |
| | | } |
| | | }, |
| | | itemStyle: { |
| | | normal: { |
| | | color: '#2EC7C9' |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | this.equipmentWarningLine.setOption(equipmentWarningLineOption, true) |
| | | }, |
| | | |
| | | /** |
| | | * èªå®ä¹è¡¨æ ¼è¡è§¦å |
| | | * @param record å½åè¡ä¿¡æ¯ |
| | | * @param index å½åè¡ä¸æ |
| | | * @returns {{on: {click: on.click}}} è¿å对象 |
| | | */ |
| | | customRow(record, index) { |
| | | return { |
| | | on: { |
| | | click: (event) => { |
| | | // 妿ç¹å»ç䏿¯å±å¼å¾æ åºå忏²æå¾è¡¨ï¼ç¸ååç¸å½äºç¹å»å±å¼å¾æ |
| | | if (event.target.className !== 'ant-table-row-expand-icon-cell') { |
| | | this.TableDraw(index, record) |
| | | } else { |
| | | if (event.target.children && event.target.children.length > 0) event.target.children[0].click() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * èªå®ä¹è¡¨æ ¼è¡è§¦å |
| | | * @param expanded å½åè¡æ¯å¦ä¸ºå±å¼ç¶æ |
| | | * @param record å½åè¡ä¿¡æ¯ |
| | | */ |
| | | handleExpandChange(expanded, record) { |
| | | let _this = this |
| | | // å½å±å¼æ¶è¥è¯¥è¡æªè¢«å±å¼è¿æä¼è¯·æ±åå°æ°æ®ï¼å±å¼è¿çæ°æ®ä¼è¢«ç¼åæ ééå¤è¯·æ± |
| | | this.queryParam.alarmCode = record.alarmCode |
| | | if (expanded && !this.hasRequsetAlarmCodeList.includes(record.alarmCode)) { |
| | | this.innerDataLoading = true |
| | | getAction(this.url.equipmentAlarmList, this.queryParam).then(res => { |
| | | if (res.success) { |
| | | _this.dataList.forEach(item => { |
| | | if (item.alarmCode === record.alarmCode) { |
| | | item.innerDataList = res.result |
| | | } |
| | | }) |
| | | _this.hasRequsetAlarmCodeList.push(record.alarmCode) |
| | | } |
| | | }) |
| | | .finally(() => { |
| | | _this.innerDataLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | |
| | | /** |
| | | * 彿µè§å¨å¯è§çªå£å°ºå¯¸åçæ¹åæ¶è§¦å |
| | | */ |
| | | handleWindowResize() { |
| | | if (this.equipmentWarningPie) this.equipmentWarningPie.resize() |
| | | if (this.equipmentWarningLine) this.equipmentWarningLine.resize() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .efficiency_list #DeviceList { |
| | | height: 90% !important; |
| | | } |
| | | |
| | | /deep/ .ant-table-body .ant-table-row td { |
| | | padding-top: 10px; |
| | | padding-bottom: 10px; |
| | | } |
| | | |
| | | /deep/ .ant-table-scroll > .ant-table-body > table > .ant-table-tbody > .ant-table-row td { |
| | | cursor: pointer; |
| | | } |
| | | |
| | | /deep/ .ant-spin-nested-loading { |
| | | height: 55%; |
| | | } |
| | | |
| | | /deep/ .ant-spin-container { |
| | | height: 100%; |
| | | } |
| | | |
| | | /deep/ .ant-table.ant-table-bordered { |
| | | height: 265px; |
| | | } |
| | | |
| | | /deep/ .ant-table-scroll > .ant-table-placeholder { |
| | | height: 210px; |
| | | } |
| | | </style> |
| | |
| | | :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> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import UserModal from './modules/UserModal' |
| | | import PasswordModal from './modules/PasswordModal' |
| | | import {putAction,getFileAccessHttpUrl} from '@/api/manage'; |
| | |
| | | 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", |
| | |
| | | { |
| | | 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: 'ç¶æ', |
| | |
| | | { |
| | | 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: 'ç¨æ·å§å', }, |
| | |
| | | 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 = ""; |
| | |
| | | } |
| | | 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 |
| | | }); |
| | | } |
| | | }); |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | <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-radio-group> |
| | | </a-form-model-item> |
| | | <a-form-model-item label="è´è´£é¨é¨" :labelCol="labelCol" :wrapperCol="wrapperCol" v-show="departIdShow==true"> |
| | | <j-multi-select-tag |
| | | :disabled="disableSubmit" |
| | | v-model="model.departIds" |
| | | :options="nextDepartOptions" |
| | | placeholder="è¯·éæ©è´è´£é¨é¨"> |
| | | </j-multi-select-tag> |
| | | </a-form-model-item> |
| | | <!--<a-form-model-item--> |
| | | <!--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"> |
| | | <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-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"> |
| | | <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"--> |
| | | <!--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> –>--> |
| | | <!--<j-multi-select-tag--> |
| | | <!--:triggerChange="true"--> |
| | | <!--v-model="model.areaId"--> |
| | | <!--dictCode="mom_base_area,name,id,del_flag = 0 and type = 1"--> |
| | | <!--placeholder="请维æ¤ä¸å¿"--> |
| | | <!-->--> |
| | | <!--</j-multi-select-tag>--> |
| | | <!--</a-form-model-item>--> |
| | | <!--<a-form-model-item--> |
| | | <!--label="è´è´£é¨é¨"--> |
| | | <!--:labelCol="labelCol"--> |
| | | <!--:wrapperCol="wrapperCol"--> |
| | | <!--v-if="departIdShow==true"--> |
| | | <!-->--> |
| | | <!--<j-multi-select-tag--> |
| | | <!--:disabled="disableSubmit"--> |
| | | <!--v-model="model.departIds"--> |
| | | <!--:options="nextDepartOptions"--> |
| | | <!--placeholder="è¯·éæ©è´è´£é¨é¨"--> |
| | | <!-->--> |
| | | <!--</j-multi-select-tag>--> |
| | | <!--</a-form-model-item>--> |
| | | |
| | | <a-form-model-item 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"--> |
| | | <!-->--> |
| | | <!--<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" prop="email"> |
| | | <a-input placeholder="请è¾å
¥é®ç®±" v-model="model.email" /> |
| | | </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" prop="telephone"> |
| | | <a-input placeholder="请è¾å
¥åº§æº" v-model="model.telephone" /> |
| | | </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"> |
| | | <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="email"--> |
| | | <!-->--> |
| | | <!--<a-input--> |
| | | <!--placeholder="请è¾å
¥é®ç®±"--> |
| | | <!--v-model="model.email"--> |
| | | <!--/>--> |
| | | <!--</a-form-model-item>--> |
| | | |
| | | <!--<a-form-model-item--> |
| | | <!--label="ææºå·ç "--> |
| | | <!--:labelCol="labelCol"--> |
| | | <!--:wrapperCol="wrapperCol"--> |
| | | <!--prop="phone"--> |
| | | <!-->--> |
| | | <!--<a-input--> |
| | | <!--placeholder="请è¾å
¥ææºå·ç "--> |
| | | <!--v-model="model.phone"--> |
| | | <!--/>--> |
| | | <!--</a-form-model-item>--> |
| | | |
| | | <!--<a-form-model-item--> |
| | | <!--label="座æº"--> |
| | | <!--:labelCol="labelCol"--> |
| | | <!--:wrapperCol="wrapperCol"--> |
| | | <!--prop="telephone"--> |
| | | <!-->--> |
| | | <!--<a-input--> |
| | | <!--placeholder="请è¾å
¥åº§æº"--> |
| | | <!--v-model="model.telephone"--> |
| | | <!--/>--> |
| | | <!--</a-form-model-item>--> |
| | | <!--<a-form-model-item label="工使µå¼æ" :labelCol="labelCol" :wrapperCol="wrapperCol">--> |
| | | <!--<j-dict-select-tag v-model="model.activitiSync" placeholder="è¯·éæ©æ¯å¦åæ¥å·¥ä½æµå¼æ" :type="'radio'" dictCode="activiti_sync"/>--> |
| | | <!--</a-form-model-item>--> |
| | | |
| | | </a-form-model> |
| | | </a-spin> |
| | | |
| | | |
| | | <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) |
| | | //身份为ä¸çº§æ¾ç¤ºè´è´£é¨é¨ï¼å¦å䏿¾ç¤º |
| | | 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 |
| | | //é¨é¨çurl è·åé¨é¨åé
|
| | | getAction(that.url.userWithDepart, { userId: userid }).then((res) => { |
| | | if (res.success) { |
| | | let departOptions = [] |
| | | let selectDepartKeys = [] |
| | | for (let i = 0; i < res.result.length; i++) { |
| | | selectDepartKeys.push(res.result[i].key); |
| | | 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 |
| | | } |
| | | }) |
| | | //车é´çurl |
| | | }, |
| | | backDepartInfo(info) { |
| | | this.model.departIds = this.model.selecteddeparts; |
| | | this.nextDepartOptions = info.map((item,index,arr)=>{ |
| | | let c = {label:item.text, value: item.value+""} |
| | | return c; |
| | | 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(',')) |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | <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; |
| | |
| | | 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; |
| | |
| | | background: #fff; |
| | | border-radius: 0 0 2px 2px; |
| | | } |
| | | |
| | | /*ãJTC-502ã æ·»å ç¨æ·ä¸¤ä¸ªæ»å¨æ¡*/ |
| | | /deep/ .ant-drawer-body { |
| | | padding-bottom: 53px; |
| | | } |
| | | |
| | | </style> |
| | | </style> |