1、全局修改密码弹窗中的新密码校验长度与数据字典password_length设置保持一致
2、报警分析页面优化过快点击多次表格行时图表内容出现数据残留以及加载图表应设置加载中动画,若不设置用户在查询时短时间内不清楚有无数据
3、车间看板以及设备监控页面设备详情弹窗右上角增加关闭按钮、设备详情弹窗透明度加深、设备详情弹窗图表表盘指针对比色加强、调整设备详情弹窗中描述列表子项标题对齐方式由左对齐改为右对齐,锁定运行数据描述列表子项数值宽度,超出部分隐藏出现省略号,悬浮出现气泡卡片
4、设备利用率、设备开动率、班次利用率页面表格前三列增加表头,依次为公司、车间、工段以及表格有关时间值调整为若小时或分钟为0则不显示
5、设备综合效率分析页面表格数据默认每页最多显示10条改为20条
6、设备加工工件报表页面完成布局及功能实现
| | |
| | | username:"", |
| | | } |
| | | }, |
| | | created(){ |
| | | // this.initDictData('password_length') |
| | | watch:{ |
| | | visible:{ |
| | | handler(value){ |
| | | if(value) this.initDictData('password_length') |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | show(uname){ |
| | |
| | | } |
| | | }, |
| | | initDictData(dictCode) { |
| | | //ä¼å
ä»ç¼åä¸è¯»ååå
¸é
ç½® |
| | | if (getDictItemsFromCache(dictCode)) { |
| | | return getDictItemsFromCache(dictCode); |
| | | } |
| | | //æ ¹æ®åå
¸Code, åå§ååå
¸æ°ç» |
| | | ajaxGetDictItems(dictCode, null).then((res) => { |
| | | if (res.success) { |
| | | const regx = new RegExp(/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{12,}$/); |
| | | const regExp = new RegExp("^(?=.*[a-zA-Z])(?=.*\\\d)(?=.*[~!@#$%^&*()_+`\\-={}:\";'<>?,./]).{"+Number(res.result[0].value)+",}$"); |
| | | this.validatorRules.password.rules[2]={ |
| | | pattern: regx, |
| | | message: 'å¯ç ç±8使°åã大å°å忝åç¹æ®ç¬¦å·ç»æ!', |
| | | pattern: regExp, |
| | | message: `å¯ç ç±${res.result[0].value}使°åã大å°å忝åç¹æ®ç¬¦å·ç»æ!`, |
| | | } |
| | | return res.result |
| | | } |
| | | }) |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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"> |
| | | <DeviceProcessReportList ref="deviceList" :nodeTree='selectEquement' :nodePeople='selectPeople' |
| | | :Type="slectTypeTree"/> |
| | | </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 EfficiencyShiftList from './modules/efficiencyShiftReport/EfficiencyShiftList' |
| | | import JSuperQuery from '@/components/jeecg/JSuperQuery' |
| | | import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton' |
| | | import DepartTree from './modules/DepartList/DepartListTree/DepartTree' |
| | | import { mapActions } from 'vuex' |
| | | import DeviceProcessReportList from './modules/DeviceProcessReport/DeviceProcessReportList' |
| | | |
| | | export default { |
| | | name: 'DeviceProcessReport', |
| | | components: { |
| | | DeviceProcessReportList, |
| | | JThirdAppButton, |
| | | JInput, |
| | | BaseTree, |
| | | JSuperQuery, |
| | | DepartTree, |
| | | EfficiencyShiftList |
| | | }, |
| | | data() { |
| | | return { |
| | | activeKey: '1', |
| | | description: '设å¤ä¿¡æ¯', |
| | | selectEquementId: '', |
| | | selectEquement: {}, |
| | | slectTypeTree: '', |
| | | selectPeople: {}, |
| | | 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 |
| | | }, |
| | | 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 style="width: 100%;"> |
| | | <div :bordered="false"> |
| | | <!-- æ¥è¯¢åºå --> |
| | | <div class="seach-content"> |
| | | <div 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-auto-complete |
| | | v-model="queryParam.driveType" |
| | | :data-source="driveTypeList" |
| | | placeholder="è¯·éæ©é©±å¨ç±»å" |
| | | :filter-option="filterOption" |
| | | /> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="5" :sm="5" :xs="5"> |
| | | <a-form-item label="æ¶é´"> |
| | | <a-range-picker |
| | | :placeholder="['å¼å§æ¶é´', 'ç»ææ¶é´']" |
| | | format="YYYY-MM-DD" |
| | | :value="dates" |
| | | @change="dateParamChange" |
| | | /> |
| | | </a-form-item> |
| | | </a-col> |
| | | |
| | | <a-col :md="4" :sm="4" :xs="4"> |
| | | <a-space> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button> |
| | | <a-button type="primary" @click="exportExcel" icon="download">导åº</a-button> |
| | | </a-space> |
| | | </a-col> |
| | | </a-row> |
| | | </a-form> |
| | | |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="container" id="EfficiencyShift" style="margin-top: 20px;"> |
| | | <div class="table2"> |
| | | <a-table :columns="columns" :dataSource="dataSource.records" :pagination="false" bordered> |
| | | <span slot="duration" slot-scope="text">{{getFormattedTime(text)}}</span> |
| | | </a-table> |
| | | </div> |
| | | </div> |
| | | <div class="pagination"> |
| | | <a-pagination |
| | | :total=dataSource.total |
| | | :show-total="(total, range) => `${range[0]}-${range[1]} å
± ${total} æ¡`" |
| | | :page-size="+queryParam.pageSize" |
| | | :default-current="1" |
| | | :current=+queryParam.pageNo |
| | | show-size-changer |
| | | :pageSizeOptions="['20','30','40','50']" |
| | | @change="handlePageNoChange" |
| | | @showSizeChange="handlePageSizeChange" |
| | | /> |
| | | </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 api from '@/api/mdc' |
| | | |
| | | export default { |
| | | name: 'DeviceProcessReportList', |
| | | components: {}, |
| | | data() { |
| | | return { |
| | | typeTree: '', |
| | | typeParent: 1, |
| | | typeEquipment: 1, |
| | | allowClear: true, |
| | | allowClearSu: true, |
| | | dates: [moment(), moment()], |
| | | identifying: [], |
| | | queryParam: { |
| | | pageSize: 20, |
| | | pageNo: 1 |
| | | }, |
| | | queryParamEquip: {}, |
| | | queryParamPeople: {}, |
| | | url: { |
| | | list: '/mdc/mdcProcessCount/list' |
| | | }, |
| | | columns: [ |
| | | { |
| | | title: 'åºå·', |
| | | dataIndex: '', |
| | | key: 'rowIndex', |
| | | width: 70, |
| | | align: 'center', |
| | | customRender: function(t, r, index) { |
| | | return parseInt(index) + 1 |
| | | } |
| | | // fixed: 'left' |
| | | }, |
| | | { |
| | | title: '设å¤ç»ä¸ç¼å·', |
| | | align: 'center', |
| | | dataIndex: 'equipmentId', |
| | | width: 120 |
| | | }, |
| | | { |
| | | title: '设å¤åç§°', |
| | | align: 'center', |
| | | width: 150, |
| | | dataIndex: 'equipmentName' |
| | | }, |
| | | { |
| | | title: '驱å¨ç±»å', |
| | | align: 'center', |
| | | width: 110, |
| | | dataIndex: 'driveType' |
| | | }, |
| | | { |
| | | title: 'ç¨åºå·', |
| | | align: 'center', |
| | | width: 100, |
| | | dataIndex: 'sequenceNumber' |
| | | }, |
| | | { |
| | | title: 'å 工件æ°', |
| | | align: 'center', |
| | | width: 80, |
| | | dataIndex: 'processCount' |
| | | }, |
| | | { |
| | | title: 'æç»æ¶é´', |
| | | dataIndex: 'duration', |
| | | align: 'center', |
| | | scopedSlots: { customRender: 'duration' }, |
| | | width: 110 |
| | | }, |
| | | { |
| | | title: 'æ¥æ', |
| | | dataIndex: 'theDate', |
| | | align: 'center', |
| | | width: 110 |
| | | } |
| | | ], |
| | | dataSource: [], |
| | | driveTypeList: [] |
| | | } |
| | | }, |
| | | props: { nodeTree: '', Type: '', nodePeople: '' }, |
| | | created() { |
| | | this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD') |
| | | this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD') |
| | | this.queryParam.typeTree = '1' |
| | | this.loadData() |
| | | this.getDriveTypeByApi() |
| | | }, |
| | | watch: { |
| | | Type(valmath) { |
| | | this.dataList = [] |
| | | this.queryParam.typeTree = valmath |
| | | }, |
| | | nodeTree(val) { //çå¬currSelected ååï¼å°åååçæ°å¼ä¼ éç» getCurrSelected äºä»¶ |
| | | console.log(val) |
| | | 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' |
| | | } |
| | | } |
| | | }, |
| | | methods: { |
| | | dateParamChange(value) { |
| | | this.dates = value |
| | | console.log('value', value) |
| | | this.queryParam.startTime = moment(this.dates[0]).format('YYYYMMDD') |
| | | this.queryParam.endTime = moment(this.dates[1]).format('YYYYMMDD') |
| | | }, |
| | | |
| | | exportExcel() { |
| | | $('#EfficiencyShift').table2excel({ |
| | | exclude: '.noExl', |
| | | name: 'Excel Document Name', |
| | | filename: '设å¤å 工工件æ¥è¡¨', |
| | | exclude_img: true, |
| | | fileext: '.xls', |
| | | exclude_links: true, |
| | | exclude_inputs: true |
| | | }) |
| | | }, |
| | | |
| | | searchQuery() { |
| | | if (this.dates != '') { |
| | | 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.queryParam.pageNo = 1 |
| | | this.loadData() |
| | | } else { |
| | | // this.$message.warning("è¯·éæ©æ¶é´") |
| | | this.$notification.warning({ |
| | | message: 'æ¶æ¯', |
| | | description: 'è¯·éæ©æ¶é´' |
| | | }) |
| | | } |
| | | // this.onClearSelected() |
| | | }, |
| | | |
| | | searchReset() { |
| | | this.queryParam = { |
| | | pageSize: 20, |
| | | pageNo: 1 |
| | | } |
| | | this.dates = [] |
| | | this.loadData() |
| | | }, |
| | | |
| | | loadData() { |
| | | getAction(this.url.list, this.queryParam).then(res => { |
| | | if (res.success) { |
| | | this.dataSource = res.result |
| | | } |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * è°ç¨æ¥å£è·åæ§å¶ç³»ç»ç±»å |
| | | */ |
| | | getDriveTypeByApi() { |
| | | api.getDriveTypeApi().then((res) => { |
| | | this.driveTypeList = res.result.map(item => item.value) |
| | | }) |
| | | }, |
| | | |
| | | /** |
| | | * æ ¼å¼åæ¶é´ |
| | | * @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}ç§` |
| | | }, |
| | | |
| | | /** |
| | | * å页å¨é¡µæ°åçæ¹åæ¶è§¦å |
| | | * @param page æ¹ååé¡µæ° |
| | | * @param pageSize æ¹å忝页å±ç¤ºæ°æ®æ¡æ° |
| | | */ |
| | | handlePageNoChange(page, pageSize) { |
| | | this.queryParam.pageNo = page |
| | | this.loadData() |
| | | }, |
| | | |
| | | /** |
| | | * å页卿¯é¡µå±ç¤ºæ°æ®æ¡æ°åçæ¹åæ¶è§¦å |
| | | * @param current æ¹ååé¡µæ° |
| | | * @param size æ¹å忝页å±ç¤ºæ°æ®æ¡æ° |
| | | */ |
| | | handlePageSizeChange(current, size) { |
| | | this.queryParam.pageSize = size |
| | | this.loadData() |
| | | }, |
| | | |
| | | /** |
| | | * èæ³è¾å
¥æ¡çéåè½ |
| | | * @param input è¾å
¥çå
容 |
| | | * @param option é
ç½® |
| | | * @returns {boolean} 夿æ¯å¦çé |
| | | */ |
| | | filterOption(input, option) { |
| | | return ( |
| | | option.componentOptions.children[0].text.toUpperCase().indexOf(input.toUpperCase()) >= 0 |
| | | ) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style scoped> |
| | | .table2 { |
| | | width: 100%; |
| | | height: 100%; |
| | | overflow: auto; |
| | | } |
| | | |
| | | .pagination { |
| | | display: flex; |
| | | justify-content: end; |
| | | margin: 20px 0; |
| | | } |
| | | |
| | | @media screen and (min-width: 1920px) { |
| | | #EfficiencyShift { |
| | | height: 670px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1680px) and (max-width: 1920px) { |
| | | #EfficiencyShift { |
| | | height: 670px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1400px) and (max-width: 1680px) { |
| | | #EfficiencyShift { |
| | | height: 522px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (min-width: 1280px) and (max-width: 1400px) { |
| | | #EfficiencyShift { |
| | | height: 414px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | @media screen and (max-width: 1280px) { |
| | | #EfficiencyShift { |
| | | height: 414px !important; |
| | | overflow: scroll; |
| | | } |
| | | } |
| | | |
| | | .identifyingclass { |
| | | width: 55px; |
| | | height: 15px; |
| | | display: inline-block |
| | | } |
| | | |
| | | .dataContent { |
| | | white-space: nowrap; |
| | | /*margin: 0;*/ |
| | | /*border: none;*/ |
| | | border-collapse: separate; |
| | | border-spacing: 0; |
| | | /*table-layout: fixed;*/ |
| | | border: 1px solid #ccc; |
| | | /*border: 1px solid #ccc;*/ |
| | | width: 100%; |
| | | /*height: 100%;*/ |
| | | /*overflow: hidden;*/ |
| | | /*overflow-y: auto;*/ |
| | | text-align: center; |
| | | } |
| | | |
| | | .dataContent .fixed th { |
| | | width: 50px; |
| | | } |
| | | |
| | | .dataContent .thead th { |
| | | background-color: #fafafa; |
| | | text-align: center; |
| | | height: 30px; |
| | | padding: 5px; |
| | | } |
| | | |
| | | .dataContent .notfixed th { |
| | | width: auto; |
| | | } |
| | | |
| | | /*.dataContent tr td {*/ |
| | | /*height: 35px*/ |
| | | /*}*/ |
| | | |
| | | .dataContent .mathData td { |
| | | padding: 10px; |
| | | /*display: none;*/ |
| | | } |
| | | |
| | | .dataContent .mathData .td { |
| | | /*background-color: #ff9bd2;*/ |
| | | display: inline-block; |
| | | padding: 10px; |
| | | } |
| | | |
| | | .dataContent .mathData .tdd { |
| | | /*display: none;*/ |
| | | } |
| | | |
| | | </style> |
| | |
| | | <a-col :md="8" :sm="8" :xs="8"> |
| | | <a-space> |
| | | <a-button type="primary" @click="searchQuery" icon="search">æ¥è¯¢</a-button> |
| | | <!--<a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button>--> |
| | | <a-button type="primary" @click="searchReset" icon="reload">éç½®</a-button> |
| | | <a-button type="primary" @click="exportExcel" icon="download">导åº</a-button> |
| | | </a-space> |
| | | </a-col> |
| | |
| | | :default-current="1" |
| | | :current=+queryParam.pageNo |
| | | show-size-changer |
| | | :pageSizeOptions="['10','15','20','25']" |
| | | :pageSizeOptions="['20','30','40','50']" |
| | | @change="handlePageNoChange" |
| | | @showSizeChange="handlePageSizeChange" |
| | | /> |
| | |
| | | dates: [moment().subtract('month', 1), moment().subtract('month', 1)], |
| | | identifying: [], |
| | | queryParam: { |
| | | pageSize: 10, |
| | | pageSize: 20, |
| | | pageNo: 1 |
| | | }, |
| | | queryParamEquip: {}, |
| | |
| | | }, |
| | | |
| | | searchReset() { |
| | | this.typeTree = this.queryParam.typeTree |
| | | this.typeParent = this.queryParam.parentId |
| | | this.typeEquipment = this.queryParam.equipmentId |
| | | this.queryParam = { |
| | | pageSize: 10, |
| | | pageSize: 20, |
| | | pageNo: 1 |
| | | } |
| | | this.dates = [] |
| | | this.shiftSubList = [] |
| | | this.queryParam.typeTree = this.typeTree |
| | | this.queryParam.parentId = this.typeParent |
| | | this.queryParam.equipmentId = this.typeEquipment |
| | | this.loadData() |
| | | }, |
| | | |
| | |
| | | cancelText="å
³é" |
| | | wrap-class-name="full-modal" |
| | | centered |
| | | :closable="false" |
| | | :footer="null" |
| | | > |
| | | <div |
| | |
| | | v-show="mdcDriveTypeParamConfigList != null" |
| | | v-if="driverType != 'PLC'" |
| | | :column="4" |
| | | class="operationData" |
| | | > |
| | | |
| | | <a-descriptions-item |
| | | v-for="(item,id) in mdcDriveTypeParamConfigList " |
| | | :key="item.id" |
| | | :label="item.chineseName" |
| | | >{{item.value}} |
| | | > |
| | | <a-popover v-if="item.value&&item.value.length>18"> |
| | | <template slot="content"> |
| | | {{item.value}} |
| | | </template> |
| | | {{item.value}} |
| | | </a-popover> |
| | | |
| | | <template v-else> |
| | | {{item.value}} |
| | | </template> |
| | | </a-descriptions-item> |
| | | |
| | | </a-descriptions> |
| | |
| | | <!-->{{item.value}}</a-descriptions-item>--> |
| | | <!--</a-descriptions>--> |
| | | |
| | | <a-descriptions |
| | | title="çæ¬ä¿¡æ¯ for lsv2" |
| | | v-if="driverType == 'LSV2'" |
| | | :column="4" |
| | | > |
| | | <a-descriptions-item label="NCçæ¬">{{resultData.nCVersion}}</a-descriptions-item> |
| | | <a-descriptions-item label="TNCçæ¬">{{resultData.tNCVersion}}</a-descriptions-item> |
| | | <a-descriptions-item label="OPTçæ¬">{{resultData.oPTVersion}}</a-descriptions-item> |
| | | <a-descriptions-item label="PLCçæ¬">{{resultData.pLCVersion}}</a-descriptions-item> |
| | | </a-descriptions> |
| | | <!--<a-descriptions--> |
| | | <!--title="çæ¬ä¿¡æ¯ for lsv2"--> |
| | | <!--v-if="driverType == 'LSV2'"--> |
| | | <!--:column="4"--> |
| | | <!--class="lsv2Data"--> |
| | | <!-->--> |
| | | <!--<a-descriptions-item label="NCçæ¬">{{resultData.ncversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="TNCçæ¬">{{resultData.tncversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="OPTçæ¬">{{resultData.optversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="PLCçæ¬">{{resultData.plcversion}}</a-descriptions-item>--> |
| | | <!--</a-descriptions>--> |
| | | |
| | | </td> |
| | | </tr> |
| | |
| | | postAction |
| | | } from '@/api/manage' |
| | | import { ajaxGetDictItems, getDictItemsFromCache, duplicateCheck } from '@/api/api' |
| | | import Template1 from '../../../../jeecg/JVxeDemo/layout-demo/Template1' |
| | | |
| | | export default { |
| | | name: 'EqumentDetaiModal', |
| | | components: {}, |
| | | components: { Template1 }, |
| | | props: {}, |
| | | data() { |
| | | return { |
| | |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | }, |
| | | pointer: { |
| | | show: true, |
| | | width: 3 |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | }, |
| | | pointer: { |
| | | show: true, |
| | | width: 3 |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | type: 'gauge', |
| | | radius: '80%', |
| | | min: 0, //æå°å»åº¦ |
| | | max: 300, //æå¤§å»åº¦ |
| | | max: 100, //æå¤§å»åº¦ |
| | | splitNumber: 10, //å»åº¦æ°é |
| | | startAngle: 225, |
| | | endAngle: -45, |
| | |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | radius: '52.5%', |
| | | z: 3, |
| | | startAngle: 225, |
| | | max: 300, |
| | | max: 100, |
| | | endAngle: -45, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: [ |
| | | [_this.spindleload / 300, '#31F3FF'], // 卿 |
| | | [_this.spindleload / 100, '#31F3FF'], // 卿 |
| | | [1, '#185363'] |
| | | ], |
| | | width: 4 |
| | |
| | | }, |
| | | pointer: { |
| | | show: true, |
| | | width: 3 |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | }, |
| | | pointer: { |
| | | show: true, |
| | | width: 3 |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | padding-bottom: 0; |
| | | margin: 0; |
| | | background-color: #4a4a48 !important; |
| | | opacity: 0.5; |
| | | opacity: 0.9; |
| | | } |
| | | /deep/ .ant-modal-content { |
| | | display: flex; |
| | |
| | | .ant-tabs-content .ant-form-item { |
| | | margin-bottom: 0px; |
| | | } |
| | | |
| | | /deep/ .ant-descriptions-item-label{ |
| | | width: 6.7vw; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | /deep/ .operationData .ant-descriptions-item-content, |
| | | .lsv2Data .ant-descriptions-item-content |
| | | { |
| | | width: 130px; |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | } |
| | | </style> |
| | |
| | | <!--</div>--> |
| | | <a-table :columns="columns" :data-source="dataList" bordered :pagination="false" :scroll="{y:168}" |
| | | :customRow="customRow" |
| | | rowKey="alarmCode"> |
| | | rowKey="alarmCode" |
| | | > |
| | | <span slot="timeCount" slot-scope="text">{{getFormattedTime(text)}}</span> |
| | | <!--<a-table--> |
| | | <!--slot="expandedRowRender"--> |
| | |
| | | <!--:columns="innerColumns"--> |
| | | <!--:data-source="row.innerDataList"--> |
| | | <!--:pagination="false"--> |
| | | <!--rowKey="equipmentId"--> |
| | | <!-->--> |
| | | <!--<span slot="duration" slot-scope="text">{{getFormattedTime(text)}}</span>--> |
| | | <!--</a-table>--> |
| | | </a-table> |
| | | </div> |
| | | <div style="width: 100%;height: 55%;display: flex;"> |
| | | |
| | | <a-spin :spinning="spinning"> |
| | | <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> |
| | |
| | | dataSource: [], |
| | | /* tableå è½½ç¶æ */ |
| | | loading: false, |
| | | spinning:false, |
| | | typeTree: '', |
| | | typeParent: 1, |
| | | typeEquipment: 1, |
| | |
| | | }, |
| | | TableDraw(key, val) { |
| | | let that = this |
| | | that.spinning=true |
| | | that.queryParam.alarmCode = val.alarmCode |
| | | console.log(this.queryParam) |
| | | that.pieDate = [] |
| | | that.XData = [] |
| | | that.YData = [] |
| | | getAction(that.url.alarmTrend, that.queryParam).then(res => { |
| | | getAction(that.url.alarmTrend, that.queryParam) |
| | | .then(res => { |
| | | if (res.success) { |
| | | for (var i = 0; i < res.result.equipmentCountList.length; i++) { |
| | | that.pieDate.push({ |
| | | name: res.result.equipmentCountList[i].key, |
| | | value: res.result.equipmentCountList[i].count |
| | | that.pieDate=res.result.equipmentCountList.map(item=>{ |
| | | return { |
| | | name:item.key, |
| | | value:item.count |
| | | } |
| | | }) |
| | | } |
| | | for (var j = 0; j < res.result.dateCountList.length; j++) { |
| | | that.XData.push(res.result.dateCountList[j].key) |
| | | that.YData.push(res.result.dateCountList[j].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.initDeviceType(this.dataList) |
| | | that.drawWrin() |
| | | } |
| | | }) |
| | | .finally(()=>{ |
| | | that.spinning=false |
| | | }) |
| | | console.log(this.YData) |
| | | |
| | |
| | | if (res.success) { |
| | | // this.tableHeads = res.result.dates |
| | | this.dataList = res.result |
| | | this.dataList.forEach(item => item.innerDataList = [ |
| | | this.dataList[0].innerDataList=[ |
| | | { |
| | | equipmentId: '11234', |
| | | equipmentName: 'ç«ä½æºåº', |
| | | alarmTime: 20, |
| | | endTime: 20, |
| | | duration: 123 |
| | | }, |
| | | { |
| | | equipmentId: '4213', |
| | | equipmentName: 'å§å®¤æºåº', |
| | | alarmTime: 312, |
| | | endTime: 31, |
| | | duration: 421 |
| | | } |
| | | ]) |
| | | ] |
| | | this.dataList[1].innerDataList=[ |
| | | { |
| | | equipmentId: '4213', |
| | | equipmentName: 'å§å®¤æºåº', |
| | | alarmTime: 312, |
| | | endTime: 31, |
| | | duration: 421 |
| | | } |
| | | ] |
| | | // this.draw() |
| | | // this.checkSameData(this.dataList) |
| | | // this.checkSameData1(this.dataList) |
| | |
| | | /** |
| | | * æ ¼å¼åæ¶é´ |
| | | * @param seconds ç§æ° |
| | | * @returns æ ¼å¼ååæ¶é´å符串 |
| | | * @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}ç§` |
| | | 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) { |
| | | if (minutes === 0 && secs === 0) { |
| | | return `${hours}å°æ¶` |
| | | } else if (minutes != 0 && secs == 0) { |
| | | } else if (minutes !== 0 && secs === 0) { |
| | | return `${hours}å°æ¶ ${minutes}å` |
| | | } |
| | | } |
| | |
| | | customRow(record, index) { |
| | | return { |
| | | on: { |
| | | click: () => { |
| | | 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 props 徿 屿§ |
| | | * @returns {null} è¥ä¸»è¡¨æ°æ®ä¸æ æ°æ®å䏿¾ç¤ºå¾æ |
| | | */ |
| | | expandIcon(props){ |
| | | console.log('props',props) |
| | | if (props.record.innerDataList&&props.record.innerDataList.length>0){ |
| | | if (props.expanded) { |
| | | return <a style="margin-right:0px;color:#999" onClick={e=> { |
| | | props.onExpand(props.record, e); |
| | | }}><a-icon type="minus" /></a> |
| | | } else{ |
| | | return <a style="margin-right:0px;color:#999" onClick={e => { |
| | | props.onExpand(props.record, e); |
| | | }}><a-icon type="plus"/></a> |
| | | } |
| | | }else{ |
| | | return null |
| | | } |
| | | } |
| | | } |
| | |
| | | padding-bottom: 10px; |
| | | cursor: pointer; |
| | | } |
| | | |
| | | /deep/ .ant-spin-nested-loading{ |
| | | height: 55%; |
| | | } |
| | | |
| | | /deep/ .ant-spin-container{ |
| | | height: 100%; |
| | | } |
| | | |
| | | </style> |
| | |
| | | <a-descriptions-item label="ææè½´æ°">{{resultData.ValidAxis}}</a-descriptions-item> |
| | | <a-descriptions-item label="æå¤§è½´æ°">{{resultData.MaxAxis}}</a-descriptions-item> |
| | | <a-descriptions-item label="夿³¨">{{resultData.remark}}</a-descriptions-item> |
| | | |
| | | </a-descriptions> |
| | | |
| | | <!-- <a-descriptions |
| | |
| | | v-show="mdcDriveTypeParamConfigList != null" |
| | | v-if="driverType != 'PLC'" |
| | | :column="4" |
| | | class="operationData" |
| | | > |
| | | |
| | | <a-descriptions-item |
| | | v-for="(item,id) in mdcDriveTypeParamConfigList " |
| | | :key="item.id" |
| | | :label="item.chineseName" |
| | | >{{item.value}}</a-descriptions-item> |
| | | > |
| | | <a-popover v-if="item.value&&item.value.length>18"> |
| | | <template slot="content"> |
| | | {{item.value}} |
| | | </template> |
| | | {{item.value}} |
| | | </a-popover> |
| | | |
| | | <template v-else> |
| | | {{item.value}} |
| | | </template> |
| | | </a-descriptions-item> |
| | | |
| | | </a-descriptions> |
| | | |
| | |
| | | <!-->{{item.value}}</a-descriptions-item>--> |
| | | <!--</a-descriptions>--> |
| | | |
| | | <a-descriptions |
| | | title="çæ¬ä¿¡æ¯ for lsv2" |
| | | v-if="driverType == 'LSV2'" |
| | | :column="4" |
| | | > |
| | | <a-descriptions-item label="NCçæ¬">{{resultData.ncversion}}</a-descriptions-item> |
| | | <a-descriptions-item label="TNCçæ¬">{{resultData.tncversion}}</a-descriptions-item> |
| | | <a-descriptions-item label="OPTçæ¬">{{resultData.optversion}}</a-descriptions-item> |
| | | <a-descriptions-item label="PLCçæ¬">{{resultData.plcversion}}</a-descriptions-item> |
| | | </a-descriptions> |
| | | <!--<a-descriptions--> |
| | | <!--title="çæ¬ä¿¡æ¯ for lsv2"--> |
| | | <!--v-if="driverType == 'LSV2'"--> |
| | | <!--:column="4"--> |
| | | <!--class="lsv2Data"--> |
| | | <!-->--> |
| | | <!--<a-descriptions-item label="NCçæ¬">{{resultData.ncversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="TNCçæ¬">{{resultData.tncversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="OPTçæ¬">{{resultData.optversion}}</a-descriptions-item>--> |
| | | <!--<a-descriptions-item label="PLCçæ¬">{{resultData.plcversion}}</a-descriptions-item>--> |
| | | <!--</a-descriptions>--> |
| | | |
| | | </td> |
| | | </tr> |
| | |
| | | props: {}, |
| | | data() { |
| | | return { |
| | | |
| | | mdcDriveTypeParamConfigList: [], |
| | | xyzAliasesList: [], |
| | | title: '', |
| | |
| | | show: false, |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | pointer: { |
| | | show: true, |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff', |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | show: false, |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | pointer: { |
| | | show: true, |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | type: 'gauge', |
| | | radius: '80%', |
| | | min: 0, //æå°å»åº¦ |
| | | max: 300, //æå¤§å»åº¦ |
| | | max: 100, //æå¤§å»åº¦ |
| | | splitNumber: 10, //å»åº¦æ°é |
| | | startAngle: 225, |
| | | endAngle: -45, |
| | |
| | | show: false, |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | radius: '52.5%', |
| | | z: 3, |
| | | startAngle: 225, |
| | | max: 300, |
| | | max: 100, |
| | | endAngle: -45, |
| | | axisLine: { |
| | | lineStyle: { |
| | | color: [ |
| | | [_this.spindleload / 300, '#31F3FF'], // 卿 |
| | | [_this.spindleload / 100, '#31F3FF'], // 卿 |
| | | [1, '#185363'] |
| | | ], |
| | | width: 4 |
| | |
| | | pointer: { |
| | | show: true, |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | show: false, |
| | | }, |
| | | axisTick: { |
| | | show: true, |
| | | show: false, |
| | | length: 20, |
| | | splitNumber: 1, |
| | | lineStyle: { |
| | |
| | | pointer: { |
| | | show: true, |
| | | width: 3, |
| | | itemStyle:{ |
| | | color:'#fff' |
| | | } |
| | | }, |
| | | data: [{ |
| | | name: '', |
| | |
| | | /*background: -ms-linear-gradient(left, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ |
| | | /*background: linear-gradient(to right, rgba(0, 0, 0, 0.66) 0%, rgba(0, 0, 0, 0.4) 100%);*/ |
| | | background-color: #312c2c; |
| | | opacity: 0.7; |
| | | opacity: 0.9; |
| | | } |
| | | /deep/ .ant-modal-close { |
| | | color: #1191b0; |
| | |
| | | .ant-tabs-content .ant-form-item { |
| | | margin-bottom: 0px; |
| | | } |
| | | |
| | | /deep/ .ant-descriptions-item-label{ |
| | | width: 6.7vw; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | /deep/ .operationData .ant-descriptions-item-content |
| | | { |
| | | width: 130px; |
| | | overflow: hidden; |
| | | white-space: nowrap; |
| | | text-overflow: ellipsis; |
| | | } |
| | | </style> |