projects/mesxc-dy #328
							
								
								
									
										13
									
								
								.env.dev
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.env.dev
									
									
									
									
									
								
							@@ -1,8 +1,8 @@
 | 
			
		||||
###
 | 
			
		||||
 # @Author: Do not edit
 | 
			
		||||
 # @Date: 2023-08-29 09:40:39
 | 
			
		||||
 # @LastEditTime: 2024-04-08 16:46:49
 | 
			
		||||
 # @LastEditors: DY
 | 
			
		||||
 # @LastEditTime: 2024-04-10 16:58:06
 | 
			
		||||
 # @LastEditors: zhp
 | 
			
		||||
 # @Description:
 | 
			
		||||
###
 | 
			
		||||
# 开发环境配置
 | 
			
		||||
@@ -20,13 +20,16 @@ VUE_APP_TITLE = MES系统
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.4.173:9001'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.1.104:48082'
 | 
			
		||||
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.0.33:48082'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.1.62:48082'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.1.78:48082'
 | 
			
		||||
# VUE_APP_BASE_API = 'http://192.168.1.47:48082'
 | 
			
		||||
VUE_APP_BASE_API = 'http://192.168.1.78:48082'
 | 
			
		||||
# socket地址
 | 
			
		||||
VUE_APP_Socket_API = 'ws://10.70.2.2:8080'
 | 
			
		||||
VUE_APP_Socket_Dcs_API = 'ws://10.70.180.10:8081'
 | 
			
		||||
# VUE_APP_Socket_API = 'ws://10.70.2.2:8080'
 | 
			
		||||
# VUE_APP_Socket_Dcs_API = 'ws://10.70.180.10:8081'
 | 
			
		||||
VUE_APP_Socket_API = 'ws://192.168.0.33:48082'
 | 
			
		||||
VUE_APP_Socket_Dcs_API = 'ws://192.168.0.33:8080'
 | 
			
		||||
 | 
			
		||||
# 积木报表指向地址
 | 
			
		||||
VUE_APP_JIMU_API = 'http://10.70.2.22:8080'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-11-06 15:38:12
 | 
			
		||||
 * @LastEditTime: 2023-12-15 15:29:16
 | 
			
		||||
 * @LastEditTime: 2024-04-11 14:57:02
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
 */
 | 
			
		||||
@@ -94,7 +94,7 @@ export function getWorkerList(query) {
 | 
			
		||||
 | 
			
		||||
export function getMaterialCheckList(query) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/base/core-hot-material-check/listByMaterial',
 | 
			
		||||
    url: 'base/quality-hot-material-det/filterList',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: query
 | 
			
		||||
  })
 | 
			
		||||
@@ -102,7 +102,7 @@ export function getMaterialCheckList(query) {
 | 
			
		||||
 | 
			
		||||
export function createQualityHotMaterialDet(query){
 | 
			
		||||
   return request({
 | 
			
		||||
    url: '/base/quality-hot-material-det/create',
 | 
			
		||||
    url: 'base/quality-hot-material-det/createBatch',
 | 
			
		||||
    method: 'post',
 | 
			
		||||
    data: query
 | 
			
		||||
  })
 | 
			
		||||
@@ -110,7 +110,7 @@ export function createQualityHotMaterialDet(query){
 | 
			
		||||
 | 
			
		||||
export function updateQualityHotMaterialDet(query){
 | 
			
		||||
   return request({
 | 
			
		||||
    url: '/base/quality-hot-material-det/listbyfilter',
 | 
			
		||||
    url: 'base/quality-hot-material-det/updateBatch',
 | 
			
		||||
    method: 'put',
 | 
			
		||||
    data: query
 | 
			
		||||
  })
 | 
			
		||||
@@ -118,7 +118,7 @@ export function updateQualityHotMaterialDet(query){
 | 
			
		||||
 | 
			
		||||
export function getQualityHotMaterialDetList(query){
 | 
			
		||||
   return request({
 | 
			
		||||
    url: '/base/quality-hot-material-det/listbyfilter',
 | 
			
		||||
    url: '/base/quality-hot-material-det/filterList',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: query
 | 
			
		||||
  })
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-11-07 15:02:37
 | 
			
		||||
 * @LastEditTime: 2023-11-07 18:32:07
 | 
			
		||||
 * @LastEditTime: 2024-04-09 15:14:42
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-11-07 14:10:18
 | 
			
		||||
 * @LastEditTime: 2023-11-16 17:49:52
 | 
			
		||||
 * @LastEditTime: 2024-04-09 09:17:02
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
 */
 | 
			
		||||
@@ -18,14 +18,14 @@ export function getStatisticalDataPage(query) {
 | 
			
		||||
 | 
			
		||||
export function getWorkOrderList(query) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/base/core-work-order/listbyfilter',
 | 
			
		||||
    url: 'base/quality-inspection-record/listbyfilter',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: query,
 | 
			
		||||
  })
 | 
			
		||||
}
 | 
			
		||||
export function getProductList(query) {
 | 
			
		||||
  return request({
 | 
			
		||||
    url: '/base/core-product/listAll',
 | 
			
		||||
    url: 'base/statistical-data/listAll',
 | 
			
		||||
    method: 'get',
 | 
			
		||||
    params: query,
 | 
			
		||||
  })
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2024-01-29 16:50:26
 | 
			
		||||
 * @LastEditTime: 2024-04-07 16:05:59
 | 
			
		||||
 * @LastEditTime: 2024-04-11 09:55:04
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2024-01-29 13:45:56
 | 
			
		||||
 * @LastEditTime: 2024-03-13 08:58:01
 | 
			
		||||
 * @LastEditTime: 2024-04-11 11:02:53
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
@@ -26,7 +26,7 @@ export default {
 | 
			
		||||
		return {
 | 
			
		||||
			chart: null,
 | 
			
		||||
			// notMsg:true,
 | 
			
		||||
			colors:['#2760ff', '#518eec', '#0ee8e4', '#ddb523'],
 | 
			
		||||
      colors: ['#2760ff', '#518eec', '#49FBD6', '#ddb523'],
 | 
			
		||||
			chartData: []
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
@@ -45,7 +45,32 @@ export default {
 | 
			
		||||
				this.$emit('emitFun')
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.chartData = [
 | 
			
		||||
      {
 | 
			
		||||
        name: '细长泡',
 | 
			
		||||
        num: 1112,
 | 
			
		||||
        yield: 0.97,
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        name: '长泡',
 | 
			
		||||
        num: 1112,
 | 
			
		||||
        yield: 0.97,
 | 
			
		||||
      },
 | 
			
		||||
       {
 | 
			
		||||
         name: '开口泡',
 | 
			
		||||
        num: 1112,
 | 
			
		||||
        yield: 0.97,
 | 
			
		||||
      },
 | 
			
		||||
       {
 | 
			
		||||
         name: '结石',
 | 
			
		||||
        num: 1112,
 | 
			
		||||
        yield: 0.97,
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
    this.updateChart()
 | 
			
		||||
  },
 | 
			
		||||
	methods: {
 | 
			
		||||
		updateChart() {
 | 
			
		||||
			console.log('update')
 | 
			
		||||
@@ -71,7 +96,7 @@ export default {
 | 
			
		||||
				color:this.colors,
 | 
			
		||||
				title:{
 | 
			
		||||
					text: num,
 | 
			
		||||
					subtext: '总数',
 | 
			
		||||
					subtext: '总数/片',
 | 
			
		||||
					top: '32%',
 | 
			
		||||
					left: '49%',
 | 
			
		||||
					textAlign: 'center',
 | 
			
		||||
@@ -89,7 +114,7 @@ export default {
 | 
			
		||||
					left: 'center',
 | 
			
		||||
					itemWidth: 12,
 | 
			
		||||
					itemHeight:12,
 | 
			
		||||
          icon: 'rect',
 | 
			
		||||
          icon: 'roundRect',
 | 
			
		||||
					textStyle: {
 | 
			
		||||
						color: '#fff'
 | 
			
		||||
					},
 | 
			
		||||
@@ -107,21 +132,36 @@ export default {
 | 
			
		||||
						radius: ['45%', '70%'],
 | 
			
		||||
						avoidLabelOverlap: true,
 | 
			
		||||
						label: {
 | 
			
		||||
							show: false
 | 
			
		||||
              show: true,
 | 
			
		||||
            normal: {
 | 
			
		||||
              // 各分区的提示内容
 | 
			
		||||
              // params: 即下面传入的data数组,通过自定义函数,展示你想要的内容和格式
 | 
			
		||||
              formatter: function (params) {
 | 
			
		||||
                console.log(params);
 | 
			
		||||
                return params.value + " | " + params.percent.toFixed(0) + "%" + "\n\n" + params.name;
 | 
			
		||||
              },
 | 
			
		||||
              textStyle: {            // 提示文字的样式
 | 
			
		||||
                // color: '#595959',
 | 
			
		||||
                fontSize: 24.48
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
						},
 | 
			
		||||
						labelLine: {
 | 
			
		||||
							show: true,
 | 
			
		||||
						},
 | 
			
		||||
						data: this.chartData && this.chartData.length > 0 && this.chartData.map((item, index) => ({
 | 
			
		||||
						name:item.name,
 | 
			
		||||
						value: item.num,
 | 
			
		||||
            value: item.num,
 | 
			
		||||
            label: {
 | 
			
		||||
              color: this.colors[index % 4]
 | 
			
		||||
            },
 | 
			
		||||
						itemStyle:{
 | 
			
		||||
							color:{
 | 
			
		||||
								type: 'linear',
 | 
			
		||||
								x: 1,
 | 
			
		||||
								y: 1,
 | 
			
		||||
								x: 0,
 | 
			
		||||
								y: 0,
 | 
			
		||||
								x2: 0,
 | 
			
		||||
								y2: 0,
 | 
			
		||||
								y2: 1,
 | 
			
		||||
								global: false,
 | 
			
		||||
								colorStops:[
 | 
			
		||||
									{offset: 0,color: this.colors[index%4]},
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-09-21 09:06:28
 | 
			
		||||
 * @LastEditTime: 2024-04-03 16:28:40
 | 
			
		||||
 * @LastEditTime: 2024-04-09 15:24:39
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
@@ -225,6 +225,9 @@ export default {
 | 
			
		||||
            scale: true,
 | 
			
		||||
            type: 'value',
 | 
			
		||||
            name: '良品率/%',
 | 
			
		||||
            max: 100,//最大值
 | 
			
		||||
            min: 0,//最小值
 | 
			
		||||
            interval: 20,//间隔
 | 
			
		||||
            nameTextStyle: {// y轴上方单位的颜色
 | 
			
		||||
              color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
			
		||||
              align: "left",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-09-21 09:06:28
 | 
			
		||||
 * @LastEditTime: 2024-04-03 17:09:12
 | 
			
		||||
 * @LastEditTime: 2024-04-09 15:24:28
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
@@ -224,6 +224,9 @@ export default {
 | 
			
		||||
              scale: true,
 | 
			
		||||
              type: 'value',
 | 
			
		||||
              name: '良品率/%',
 | 
			
		||||
              max: 100,//最大值
 | 
			
		||||
              min: 0,//最小值
 | 
			
		||||
              interval: 20,//间隔
 | 
			
		||||
              nameTextStyle: {// y轴上方单位的颜色
 | 
			
		||||
                color: 'rgba(255,255,255,0.5)', // 坐标值得具体的颜色
 | 
			
		||||
                align: "left",
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,16 @@
 | 
			
		||||
 * @Author: zwq
 | 
			
		||||
 * @Date: 2021-07-19 15:18:30
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @LastEditTime: 2024-04-03 17:14:03
 | 
			
		||||
 * @LastEditTime: 2024-04-10 16:10:11
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
  <div id="container" ref="container" class="visual-container" :style="styles">
 | 
			
		||||
    <el-row class="container-title" :style="{
 | 
			
		||||
				height: 88 + 'px',
 | 
			
		||||
				lineHeight: 88 + 'px',
 | 
			
		||||
				fontSize: 31 + 'px',
 | 
			
		||||
			}">
 | 
			
		||||
    	height: 88 + 'px',
 | 
			
		||||
    	lineHeight: 88 + 'px',
 | 
			
		||||
    	fontSize: 31 + 'px',
 | 
			
		||||
    }">
 | 
			
		||||
      <img src="../../assets/img/logo.png" style="width: 1.1em; position: relative; top: 0.22em" alt="" />
 | 
			
		||||
      许昌安彩深加工看板
 | 
			
		||||
      <h3 class="unit">单位:河南汇融数字科技有限公司</h3>
 | 
			
		||||
@@ -39,10 +39,23 @@
 | 
			
		||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="8" height="100%">
 | 
			
		||||
          <base-container :height="318" :size="'small'" :title="'工单监控'" :title-icon="'eqMonitoring'">
 | 
			
		||||
            <div class="order" style="width: 100%; overflow: hidden scroll; height: 350px">
 | 
			
		||||
              <el-row v-for="op in orderList" :key="op.id" style="margin-bottom: .5em">
 | 
			
		||||
              <el-row v-for="op in orderList" :key="op.id" style="margin-bottom: .5em;overflow: hidden;">
 | 
			
		||||
                <!-- <el-col :span="12"> -->
 | 
			
		||||
 | 
			
		||||
                <p class="now-secondary-title" style="font-size: 14px;opacity: calc(.6);">{{ op.name }}</p>
 | 
			
		||||
                <!-- <div style="height: 34px;"> -->
 | 
			
		||||
                <span class="now-secondary-title" style="font-size: 14px;opacity: calc(.6);">{{ op.name }}</span>
 | 
			
		||||
                <el-divider class="split" v-if="op.specifications" direction="vertical"></el-divider>
 | 
			
		||||
                <!-- <span v-if="op.size" class="split"></span> -->
 | 
			
		||||
                <span v-if="op.specifications" class="orderSize" style="font-size: 14px;opacity: calc(.6);">{{
 | 
			
		||||
                op.specifications }}</span>
 | 
			
		||||
                <el-divider class="split" v-if="op.planQuantity" direction="vertical"></el-divider>
 | 
			
		||||
                <span v-if="op.planQuantity" class="orderPlan" style="font-size: 14px;opacity: calc(.6);">{{
 | 
			
		||||
                op.planQuantity }}</span>
 | 
			
		||||
                <span v-if="op.actualQuantity" class="orderFinish"
 | 
			
		||||
                  style="font-size: 14px;opacity: calc(.6);margin-left: 130px;">{{
 | 
			
		||||
                  op.actualQuantity
 | 
			
		||||
                  }}</span>
 | 
			
		||||
                <el-divider class="split" v-if="op.actualQuantity" direction="vertical"></el-divider>
 | 
			
		||||
                <!-- </div> -->
 | 
			
		||||
                <el-progress style="width: 620px;" text-color="rgba(255, 255, 255, .6)" :stroke-width="10"
 | 
			
		||||
                  define-back-color="rgba(32, 57, 96, 1)" :percentage="op.progressRate" class="custom-progress-bar" />
 | 
			
		||||
              </el-row>
 | 
			
		||||
@@ -67,7 +80,7 @@
 | 
			
		||||
        <el-col :style="{ margin: 8 + 'px' + ' 0' }" :span="12">
 | 
			
		||||
          <base-container :show-time="true" :no-content-padding="true" :height="318 + 338 + 16" :size="'eqStatus'"
 | 
			
		||||
            :title="'产线产量及良品率'" :title-icon="'productLine'">
 | 
			
		||||
            <div  class="myLegend">
 | 
			
		||||
            <div class="myLegend">
 | 
			
		||||
              <div class=" barCircleLegend"></div>
 | 
			
		||||
              <div class=" barCircle"></div>
 | 
			
		||||
              <h4 class="barText">产线良品率</h4>
 | 
			
		||||
@@ -364,42 +377,66 @@ export default {
 | 
			
		||||
			{
 | 
			
		||||
				id: '1',
 | 
			
		||||
				name: '测试工单',
 | 
			
		||||
				progressRate: 0.933333,
 | 
			
		||||
        progressRate: 0.933333,
 | 
			
		||||
        specifications: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish:111,
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				id: '2',
 | 
			
		||||
				name: '测试工单2',
 | 
			
		||||
				progressRate: 0.932323,
 | 
			
		||||
        progressRate: 0.932323,
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				id: '3',
 | 
			
		||||
				name: '测试工单3',
 | 
			
		||||
				progressRate: 0.23232,
 | 
			
		||||
        progressRate: 0.23232,
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
			},
 | 
			
		||||
			{
 | 
			
		||||
				id: '4',
 | 
			
		||||
				name: '测试工单4',
 | 
			
		||||
				progressRate: 0.32323,
 | 
			
		||||
        progressRate: 0.32323,
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: '4',
 | 
			
		||||
        id: '5',
 | 
			
		||||
        name: '测试工单4',
 | 
			
		||||
        progressRate: 0.32323,
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: '4',
 | 
			
		||||
        id: '6',
 | 
			
		||||
        name: '测试工单4',
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        progressRate: 0.32323,
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: '4',
 | 
			
		||||
        id: '7',
 | 
			
		||||
        name: '测试工单4',
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        progressRate: 0.32323,
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
      },
 | 
			
		||||
      {
 | 
			
		||||
        id: '4',
 | 
			
		||||
        id: '8',
 | 
			
		||||
        name: '测试工单4',
 | 
			
		||||
        progressRate: 0.32323,
 | 
			
		||||
        size: '1100*5554*22',
 | 
			
		||||
        plan: 11111,
 | 
			
		||||
        finish: 111,
 | 
			
		||||
      },
 | 
			
		||||
			// {
 | 
			
		||||
			//   id: '5',
 | 
			
		||||
@@ -416,7 +453,10 @@ export default {
 | 
			
		||||
				return {
 | 
			
		||||
					id: ele.id,
 | 
			
		||||
					name: ele.name,
 | 
			
		||||
					progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
			
		||||
          progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
			
		||||
          specifications: ele.specifications ?  '规格' + ele.specifications :null,
 | 
			
		||||
          planQuantity: ele.plan ? '计划' + ele.plan + '片' : null,
 | 
			
		||||
          finish: ele.finish + '片',
 | 
			
		||||
				};
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
@@ -440,8 +480,8 @@ export default {
 | 
			
		||||
          <span style="color:rgba(255,255,255,0.5)" >${item.name || ''}
 | 
			
		||||
            </span>`,
 | 
			
		||||
			`<span style="color:rgba(255,255,255,0.5)">${item.code || ''}</span>`,
 | 
			
		||||
			`<span style="color:rgba(255,255,255,0.5)">${item.status || ''}</span>`,
 | 
			
		||||
			`<span style="color:rgba(255,255,255,0.5)">${item.error || ''}</span>`,
 | 
			
		||||
      `<span style="color:rgba(255,255,255,0.5)"><div style="${item.status == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:13px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:13px 10px 0 0 '}"></div>  ${item.status || ''}</span>`,
 | 
			
		||||
      `<span style="color:rgba(255,255,255,0.5)"><div style="${item.error == '是' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:13px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:13px 10px 0 0 '}"></div>  ${item.error || ''}</span>`,
 | 
			
		||||
		]);
 | 
			
		||||
    this.eqConfig.data = eqArr;
 | 
			
		||||
    let data = [
 | 
			
		||||
@@ -690,7 +730,10 @@ export default {
 | 
			
		||||
							return {
 | 
			
		||||
								id: ele.id,
 | 
			
		||||
								name: ele.name,
 | 
			
		||||
								progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
			
		||||
                progressRate: parseFloat((ele.progressRate * 100).toFixed(0)),
 | 
			
		||||
                specifications: ele.specifications ?  '规格' + ele.specifications :null,
 | 
			
		||||
                planQuantity: ele.planQuantity  ? '计划' + ele.planQuantity + '片' : null,
 | 
			
		||||
                actualQuantity: ele.actualQuantity ? ele.actualQuantity + '片' : null,
 | 
			
		||||
							};
 | 
			
		||||
						}
 | 
			
		||||
					});
 | 
			
		||||
@@ -704,12 +747,8 @@ export default {
 | 
			
		||||
						`<span style="color:rgba(255,255,255,0.5)">${
 | 
			
		||||
							item.code || ''
 | 
			
		||||
						}</span>`,
 | 
			
		||||
						`<span style="color:rgba(255,255,255,0.5)"><span style="color:rgba(255,255,255,0.5)"></span>  ${
 | 
			
		||||
							item.status || ''
 | 
			
		||||
						}</span>`,
 | 
			
		||||
						`<span style="color:rgba(255,255,255,0.5)">${
 | 
			
		||||
							item.error || ''
 | 
			
		||||
						}</span>`,
 | 
			
		||||
            `<span style="color:rgba(255,255,255,0.5)"><div style="${item.status == '运行' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.status || ''}</span>`,
 | 
			
		||||
            `<span style="color:rgba(255,255,255,0.5)"><div style="${item.error == '是' ? 'box-shadow: 0px 0px 2px 1px #2760FF;width:6px;height:6px;border-radius: 50%;background-color: #2760FF;float:left;margin:10px 10px 0 0 ' : 'box-shadow: 0px 0px 2px 1px #FFBD02;width:6px;height:6px;border-radius: 50%;  background-color: #FFBD02;float:left;margin:10px 10px 0 0 '}"></div>  ${item.error || ''}</span>`,
 | 
			
		||||
					]);
 | 
			
		||||
          this.eqConfig.data = eqArr;
 | 
			
		||||
          // this.$nextTick(() => {
 | 
			
		||||
@@ -802,6 +841,18 @@ export default {
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="scss" scoped>
 | 
			
		||||
.split{
 | 
			
		||||
  width: 1px;
 | 
			
		||||
  // display: inline-block;
 | 
			
		||||
  height: 14px;
 | 
			
		||||
  // margin-top: 2px;
 | 
			
		||||
  // line-height: 0;
 | 
			
		||||
  margin-left: 8px;
 | 
			
		||||
  opacity:calc(.6);
 | 
			
		||||
  margin-right: 8px;
 | 
			
		||||
  background-color: #C8CDD7;
 | 
			
		||||
  // border: 1px solid #C8CDD7;
 | 
			
		||||
}
 | 
			
		||||
.myLegend {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: -28px;
 | 
			
		||||
@@ -902,12 +953,39 @@ export default {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.now-secondary-title {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 70px;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
	font-size: 14px;
 | 
			
		||||
	line-height: 2em;
 | 
			
		||||
	color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.orderSize {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 120px;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
  line-height: 2em;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.orderFinish {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 60px;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
  line-height: 2em;
 | 
			
		||||
  text-align: right;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.orderPlan {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  width: 100px;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  font-size: 14px;
 | 
			
		||||
  line-height: 2em;
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
}
 | 
			
		||||
.now-team-content {
 | 
			
		||||
	font-size: 3em;
 | 
			
		||||
	line-height: 1em;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @Author: zwq
 | 
			
		||||
 * @Date: 2023-08-01 14:55:51
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @LastEditTime: 2024-04-08 11:49:33
 | 
			
		||||
 * @LastEditTime: 2024-04-10 16:34:40
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
@@ -141,8 +141,8 @@ export default {
 | 
			
		||||
				// 	btnName: '重置',
 | 
			
		||||
				// 	name: 'reset',
 | 
			
		||||
				// },
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:packaging-print-log:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:packaging-print-log:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,348 +1,368 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="choicepart-container">
 | 
			
		||||
    <navbar />
 | 
			
		||||
    <div class="choicepart-wrapper">
 | 
			
		||||
      <div class="choicepart-box" id="choicepartBox" :style="'transform:scale('+scale+');width:1710px;height:538px;'" v-show="showItem">
 | 
			
		||||
      <div class="choicepart-line1">
 | 
			
		||||
        <div
 | 
			
		||||
          v-for="(item, index) in menuArr1"
 | 
			
		||||
          :key="index"
 | 
			
		||||
          class="choicepart-item"
 | 
			
		||||
          @click="handelClick(item, item.choicepart)"
 | 
			
		||||
          :style="{opacity: item.visible?1:0.4, pointerEvents:item.visible?'auto':'none'}"
 | 
			
		||||
        >
 | 
			
		||||
          <div>
 | 
			
		||||
            <img :src="require(`../../assets/images/choicepart/${item.name}.png`)" alt="">
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="choicepart-item-title">{{item.meta.title}}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="choicepart-line2">
 | 
			
		||||
        <div
 | 
			
		||||
          v-for="(item, index) in menuArr2"
 | 
			
		||||
          :key="index"
 | 
			
		||||
          class="choicepart-item"
 | 
			
		||||
          @click="handelClick(item, item.choicepart)"
 | 
			
		||||
          :style="{opacity: item.visible?1:0.4, pointerEvents:item.visible?'auto':'none'}"
 | 
			
		||||
        >
 | 
			
		||||
          <div>
 | 
			
		||||
            <img :src="require(`../../assets/images/choicepart/${item.name}.png`)" alt="">
 | 
			
		||||
          </div>
 | 
			
		||||
          <div class="choicepart-item-title">{{item.meta.title}}</div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="choicepart-footer">© 中建材智能自动化研究院有限公司</div>
 | 
			
		||||
  </div>
 | 
			
		||||
	<div class="choicepart-container">
 | 
			
		||||
		<navbar />
 | 
			
		||||
		<div class="choicepart-wrapper">
 | 
			
		||||
			<div
 | 
			
		||||
				class="choicepart-box"
 | 
			
		||||
				id="choicepartBox"
 | 
			
		||||
				:style="'transform:scale(' + scale + ')'"
 | 
			
		||||
				style="width: 1710px; height: 538px"
 | 
			
		||||
				v-show="showItem">
 | 
			
		||||
				<div class="choicepart-line1">
 | 
			
		||||
					<div
 | 
			
		||||
						v-for="(item, index) in menuArr1"
 | 
			
		||||
						:key="index"
 | 
			
		||||
						class="choicepart-item"
 | 
			
		||||
						@click="handelClick(item, item.choicepart)"
 | 
			
		||||
						:style="{
 | 
			
		||||
							opacity: item.visible ? 1 : 0.4,
 | 
			
		||||
							pointerEvents: item.visible ? 'auto' : 'none',
 | 
			
		||||
						}">
 | 
			
		||||
						<div>
 | 
			
		||||
							<img
 | 
			
		||||
								:src="
 | 
			
		||||
									require(`../../assets/images/choicepart/${item.name}.png`)
 | 
			
		||||
								"
 | 
			
		||||
								alt="" />
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="choicepart-item-title">{{ item.meta.title }}</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="choicepart-line2">
 | 
			
		||||
					<div
 | 
			
		||||
						v-for="(item, index) in menuArr2"
 | 
			
		||||
						:key="index"
 | 
			
		||||
						class="choicepart-item"
 | 
			
		||||
						@click="handelClick(item, item.choicepart)"
 | 
			
		||||
						:style="{
 | 
			
		||||
							opacity: item.visible ? 1 : 0.4,
 | 
			
		||||
							pointerEvents: item.visible ? 'auto' : 'none',
 | 
			
		||||
						}">
 | 
			
		||||
						<div>
 | 
			
		||||
							<img
 | 
			
		||||
								:src="
 | 
			
		||||
									require(`../../assets/images/choicepart/${item.name}.png`)
 | 
			
		||||
								"
 | 
			
		||||
								alt="" />
 | 
			
		||||
						</div>
 | 
			
		||||
						<div class="choicepart-item-title">{{ item.meta.title }}</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class="choicepart-footer">© 中建材智能自动化研究院有限公司</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import Navbar from './components/Navbar'
 | 
			
		||||
import { debounce } from '@/utils/debounce'
 | 
			
		||||
import Navbar from './components/Navbar';
 | 
			
		||||
import { debounce } from '@/utils/debounce';
 | 
			
		||||
export default {
 | 
			
		||||
  components: { Navbar },
 | 
			
		||||
  name: 'choicePart',
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      boxReset: '',
 | 
			
		||||
      scale: 1,
 | 
			
		||||
      menuArr1: [
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Core',
 | 
			
		||||
          title: '基础核心',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Order',
 | 
			
		||||
          title: '订单管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Equipment',
 | 
			
		||||
          title: '设备管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Group',
 | 
			
		||||
          title: '班组管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Quality',
 | 
			
		||||
          title: '质量管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Warehouse',
 | 
			
		||||
          title: '仓库管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Energy',
 | 
			
		||||
          title: '能源管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Packaging',
 | 
			
		||||
          title: '包装管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      menuArr2: [
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Material',
 | 
			
		||||
          title: '物料管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Extend',
 | 
			
		||||
          title: '工艺管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        // {
 | 
			
		||||
        //   name: 'Delivery',
 | 
			
		||||
        //   title: '成品发货',
 | 
			
		||||
        //   visible: false,
 | 
			
		||||
        //   meta: {
 | 
			
		||||
        //     title: ''
 | 
			
		||||
        //   }
 | 
			
		||||
        // },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Report',
 | 
			
		||||
          title: '报表管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Cost',
 | 
			
		||||
          title: '成本管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'SafetyEnvironmental',
 | 
			
		||||
          title: '安环管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'Databoard',
 | 
			
		||||
          title: '数据驾驶舱',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          name: 'System',
 | 
			
		||||
          title: '系统管理',
 | 
			
		||||
          visible: false,
 | 
			
		||||
          meta: {
 | 
			
		||||
            title: ''
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      showItem: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  // computed:{
 | 
			
		||||
  //   ...mapGetters(['sidebarRouters'])
 | 
			
		||||
  // },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.getMsg()
 | 
			
		||||
    this.boxReset = debounce(() => {
 | 
			
		||||
      this.resetSize()
 | 
			
		||||
    }, 300)
 | 
			
		||||
    this.boxReset()
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.boxReset()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getMsg() {
 | 
			
		||||
      let menuList = this.$store.state.permission.sidebarRouters
 | 
			
		||||
      console.log(menuList)
 | 
			
		||||
      if (menuList.length > 0) {
 | 
			
		||||
        for (let i = 0; i < menuList.length; i ++) {
 | 
			
		||||
          for (let k = 0; k < 8; k++) {
 | 
			
		||||
            if (menuList[i].name === this.menuArr1[k].name) {
 | 
			
		||||
              this.menuArr1[k].visible = true
 | 
			
		||||
              this.menuArr1[k].id = menuList[i].id
 | 
			
		||||
              this.menuArr1[k].choicepart = i
 | 
			
		||||
              this.menuArr1[k].children = menuList[i].children
 | 
			
		||||
              this.menuArr1[k].meta = menuList[i].meta
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          for (let j = 0; j < 7; j++) {
 | 
			
		||||
            if (menuList[i].name === this.menuArr2[j].name) {
 | 
			
		||||
              this.menuArr2[j].visible = true
 | 
			
		||||
              this.menuArr2[j].id = menuList[i].id
 | 
			
		||||
              this.menuArr2[j].choicepart = i
 | 
			
		||||
              this.menuArr2[j].children = menuList[i].children
 | 
			
		||||
              this.menuArr2[j].meta = menuList[i].meta
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      console.log(this.menuArr1)
 | 
			
		||||
      console.log(this.menuArr2)
 | 
			
		||||
    },
 | 
			
		||||
    handelClick(item, index) {
 | 
			
		||||
      // this.$router.push({name: 'SystemUser'})
 | 
			
		||||
      this.$store.dispatch('app/setChoicepart', index)
 | 
			
		||||
      this.toRouter(item)
 | 
			
		||||
      // if (item.meta.unuse) {
 | 
			
		||||
      //   this.$message.warning(this.$t('暂无数据'))
 | 
			
		||||
      // } else {
 | 
			
		||||
      //   this.toRouter(item)
 | 
			
		||||
      // }
 | 
			
		||||
    },
 | 
			
		||||
    toRouter(item) {
 | 
			
		||||
      console.log(item)
 | 
			
		||||
      if (item.children) {
 | 
			
		||||
        this.toRouter(item.children[0])
 | 
			
		||||
      } else {
 | 
			
		||||
        this.$router.push({ name: item.name })
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    resetSize() {
 | 
			
		||||
      let _this = this
 | 
			
		||||
      _this.showItem = false
 | 
			
		||||
      _this.loading = true
 | 
			
		||||
      let choicepartBox = document.querySelector('#choicepartBox')
 | 
			
		||||
      let rw = parseFloat(window.innerWidth)
 | 
			
		||||
      let rh = parseFloat(window.innerHeight)
 | 
			
		||||
      let bw = parseFloat(choicepartBox.style.width)
 | 
			
		||||
      let bh = parseFloat(choicepartBox.style.height)
 | 
			
		||||
      let wx = 0.82/(bw / rw)
 | 
			
		||||
      let hx = 0.56/(bh / rh)
 | 
			
		||||
      _this.scale = wx > hx ? hx : wx
 | 
			
		||||
      setTimeout(_this.showItemFun, 700)
 | 
			
		||||
    },
 | 
			
		||||
    showItemFun() {
 | 
			
		||||
      this.loading = false
 | 
			
		||||
      this.showItem = true
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  beforeDestroy() {
 | 
			
		||||
    this.showItem = false
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
	components: { Navbar },
 | 
			
		||||
	name: 'choicePart',
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			scale: 1,
 | 
			
		||||
			menuArr1: [
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Core',
 | 
			
		||||
					title: '基础核心',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Order',
 | 
			
		||||
					title: '订单管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Equipment',
 | 
			
		||||
					title: '设备管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Group',
 | 
			
		||||
					title: '班组管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Quality',
 | 
			
		||||
					title: '质量管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Warehouse',
 | 
			
		||||
					title: '仓库管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Energy',
 | 
			
		||||
					title: '能源管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Packaging',
 | 
			
		||||
					title: '包装管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			],
 | 
			
		||||
			menuArr2: [
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Material',
 | 
			
		||||
					title: '物料管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Extend',
 | 
			
		||||
					title: '工艺管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				// {
 | 
			
		||||
				//   name: 'Delivery',
 | 
			
		||||
				//   title: '成品发货',
 | 
			
		||||
				//   visible: false,
 | 
			
		||||
				//   meta: {
 | 
			
		||||
				//     title: ''
 | 
			
		||||
				//   }
 | 
			
		||||
				// },
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Report',
 | 
			
		||||
					title: '报表管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Cost',
 | 
			
		||||
					title: '成本管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'SafetyEnvironmental',
 | 
			
		||||
					title: '安环管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'Databoard',
 | 
			
		||||
					title: '数据驾驶舱',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					name: 'System',
 | 
			
		||||
					title: '系统管理',
 | 
			
		||||
					visible: false,
 | 
			
		||||
					meta: {
 | 
			
		||||
						title: '',
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			],
 | 
			
		||||
			showItem: false,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	// computed:{
 | 
			
		||||
	//   ...mapGetters(['sidebarRouters'])
 | 
			
		||||
	// },
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.getMsg();
 | 
			
		||||
		this.boxReset();
 | 
			
		||||
		window.addEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	destroyed() {
 | 
			
		||||
		window.removeEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		boxReset() {
 | 
			
		||||
			debounce(() => {
 | 
			
		||||
				this.resetSize();
 | 
			
		||||
			}, 300)();
 | 
			
		||||
		},
 | 
			
		||||
		getMsg() {
 | 
			
		||||
			let menuList = this.$store.state.permission.sidebarRouters;
 | 
			
		||||
			console.log(menuList);
 | 
			
		||||
			if (menuList.length > 0) {
 | 
			
		||||
				for (let i = 0; i < menuList.length; i++) {
 | 
			
		||||
					for (let k = 0; k < 8; k++) {
 | 
			
		||||
						if (menuList[i].name === this.menuArr1[k].name) {
 | 
			
		||||
							this.menuArr1[k].visible = true;
 | 
			
		||||
							this.menuArr1[k].id = menuList[i].id;
 | 
			
		||||
							this.menuArr1[k].choicepart = i;
 | 
			
		||||
							this.menuArr1[k].children = menuList[i].children;
 | 
			
		||||
							this.menuArr1[k].meta = menuList[i].meta;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
					for (let j = 0; j < 7; j++) {
 | 
			
		||||
						if (menuList[i].name === this.menuArr2[j].name) {
 | 
			
		||||
							this.menuArr2[j].visible = true;
 | 
			
		||||
							this.menuArr2[j].id = menuList[i].id;
 | 
			
		||||
							this.menuArr2[j].choicepart = i;
 | 
			
		||||
							this.menuArr2[j].children = menuList[i].children;
 | 
			
		||||
							this.menuArr2[j].meta = menuList[i].meta;
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			console.log(this.menuArr1);
 | 
			
		||||
			console.log(this.menuArr2);
 | 
			
		||||
		},
 | 
			
		||||
		handelClick(item, index) {
 | 
			
		||||
			// this.$router.push({name: 'SystemUser'})
 | 
			
		||||
			this.$store.dispatch('app/setChoicepart', index);
 | 
			
		||||
			this.toRouter(item);
 | 
			
		||||
			// if (item.meta.unuse) {
 | 
			
		||||
			//   this.$message.warning(this.$t('暂无数据'))
 | 
			
		||||
			// } else {
 | 
			
		||||
			//   this.toRouter(item)
 | 
			
		||||
			// }
 | 
			
		||||
		},
 | 
			
		||||
		toRouter(item) {
 | 
			
		||||
			console.log(item);
 | 
			
		||||
			if (item.children) {
 | 
			
		||||
				this.toRouter(item.children[0]);
 | 
			
		||||
			} else {
 | 
			
		||||
				this.$router.push({ name: item.name });
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		resetSize() {
 | 
			
		||||
			let _this = this;
 | 
			
		||||
			_this.showItem = false;
 | 
			
		||||
			_this.loading = true;
 | 
			
		||||
			let choicepartBox = document.querySelector('#choicepartBox');
 | 
			
		||||
			let rw = parseFloat(window.innerWidth);
 | 
			
		||||
			let rh = parseFloat(window.innerHeight);
 | 
			
		||||
			let bw = parseFloat(choicepartBox.style.width);
 | 
			
		||||
			let bh = parseFloat(choicepartBox.style.height);
 | 
			
		||||
			let wx = 0.82 / (bw / rw);
 | 
			
		||||
			let hx = 0.56 / (bh / rh);
 | 
			
		||||
			_this.scale = wx > hx ? hx : wx;
 | 
			
		||||
			setTimeout(_this.showItemFun, 700);
 | 
			
		||||
		},
 | 
			
		||||
		showItemFun() {
 | 
			
		||||
			this.loading = false;
 | 
			
		||||
			this.showItem = true;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	beforeDestroy() {
 | 
			
		||||
		this.showItem = false;
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
.choicepart-container {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  background: url('../../assets/images/choicepart/choicepart-back.png') repeat;
 | 
			
		||||
  background-size: 100% 100%;
 | 
			
		||||
  .choicepart-wrapper {
 | 
			
		||||
    width: 100vw;
 | 
			
		||||
    height: calc(100vh - 94px);
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
  }
 | 
			
		||||
  .choicepart-box {
 | 
			
		||||
    // transition: all 0.3s linear;
 | 
			
		||||
    .choicepart-line1 {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      margin-bottom: 80px;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-flow: row nowrap;
 | 
			
		||||
    }
 | 
			
		||||
    .choicepart-line2 {
 | 
			
		||||
      width: 100%;
 | 
			
		||||
      display: flex;
 | 
			
		||||
      flex-flow: row nowrap;
 | 
			
		||||
      justify-content: center;
 | 
			
		||||
    }
 | 
			
		||||
    .choicepart-item {
 | 
			
		||||
      width: 184px;
 | 
			
		||||
      height: 224px;
 | 
			
		||||
      background: url('../../assets/images/choicepart/choice-item-back.png') no-repeat;
 | 
			
		||||
      background-size: 100% 100%;
 | 
			
		||||
      border-radius: 5px;
 | 
			
		||||
      overflow: hidden;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
      position: relative;
 | 
			
		||||
      margin: 0 20px;
 | 
			
		||||
      img {
 | 
			
		||||
        width: 184px;
 | 
			
		||||
        height: 224px;
 | 
			
		||||
      }
 | 
			
		||||
      .choicepart-item-title {
 | 
			
		||||
        overflow: hidden;
 | 
			
		||||
        padding: 0 10px;
 | 
			
		||||
        text-overflow: ellipsis;
 | 
			
		||||
        white-space: nowrap;
 | 
			
		||||
        position: absolute;
 | 
			
		||||
        bottom: 0;
 | 
			
		||||
        left: 2px;
 | 
			
		||||
        right: 2px;
 | 
			
		||||
        text-align: center;
 | 
			
		||||
        color: #fff;
 | 
			
		||||
        font-size: 16px;
 | 
			
		||||
        line-height: 40px;
 | 
			
		||||
        height: 40px;
 | 
			
		||||
        letter-spacing: 2px;
 | 
			
		||||
        background-color: rgba($color: #0b58ff, $alpha: 0.45);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .choicepart-item:hover {
 | 
			
		||||
      .choicepart-item-title {
 | 
			
		||||
        background-color: rgba($color: #0b58ff, $alpha: 1);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .choicepart-footer {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    color: #C7C7C7;
 | 
			
		||||
    user-select: none;
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    letter-spacing: 1px;
 | 
			
		||||
    height: 30px;
 | 
			
		||||
    display: grid;
 | 
			
		||||
    place-content: center;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    opacity: 0.5;
 | 
			
		||||
  }
 | 
			
		||||
	position: relative;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
	background: url('../../assets/images/choicepart/choicepart-back.png') repeat;
 | 
			
		||||
	background-size: 100% 100%;
 | 
			
		||||
	.choicepart-wrapper {
 | 
			
		||||
		width: 100vw;
 | 
			
		||||
		height: calc(100vh - 94px);
 | 
			
		||||
		display: flex;
 | 
			
		||||
		justify-content: center;
 | 
			
		||||
		align-items: center;
 | 
			
		||||
	}
 | 
			
		||||
	.choicepart-box {
 | 
			
		||||
		// transition: all 0.3s linear;
 | 
			
		||||
		.choicepart-line1 {
 | 
			
		||||
			width: 100%;
 | 
			
		||||
			margin-bottom: 80px;
 | 
			
		||||
			display: flex;
 | 
			
		||||
			flex-flow: row nowrap;
 | 
			
		||||
		}
 | 
			
		||||
		.choicepart-line2 {
 | 
			
		||||
			width: 100%;
 | 
			
		||||
			display: flex;
 | 
			
		||||
			flex-flow: row nowrap;
 | 
			
		||||
			justify-content: center;
 | 
			
		||||
		}
 | 
			
		||||
		.choicepart-item {
 | 
			
		||||
			width: 184px;
 | 
			
		||||
			height: 224px;
 | 
			
		||||
			background: url('../../assets/images/choicepart/choice-item-back.png')
 | 
			
		||||
				no-repeat;
 | 
			
		||||
			background-size: 100% 100%;
 | 
			
		||||
			border-radius: 5px;
 | 
			
		||||
			overflow: hidden;
 | 
			
		||||
			cursor: pointer;
 | 
			
		||||
			position: relative;
 | 
			
		||||
			margin: 0 20px;
 | 
			
		||||
			img {
 | 
			
		||||
				width: 184px;
 | 
			
		||||
				height: 224px;
 | 
			
		||||
			}
 | 
			
		||||
			.choicepart-item-title {
 | 
			
		||||
				overflow: hidden;
 | 
			
		||||
				padding: 0 10px;
 | 
			
		||||
				text-overflow: ellipsis;
 | 
			
		||||
				white-space: nowrap;
 | 
			
		||||
				position: absolute;
 | 
			
		||||
				bottom: 0;
 | 
			
		||||
				left: 2px;
 | 
			
		||||
				right: 2px;
 | 
			
		||||
				text-align: center;
 | 
			
		||||
				color: #fff;
 | 
			
		||||
				font-size: 16px;
 | 
			
		||||
				line-height: 40px;
 | 
			
		||||
				height: 40px;
 | 
			
		||||
				letter-spacing: 2px;
 | 
			
		||||
				background-color: rgba($color: #0b58ff, $alpha: 0.45);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		.choicepart-item:hover {
 | 
			
		||||
			.choicepart-item-title {
 | 
			
		||||
				background-color: rgba($color: #0b58ff, $alpha: 1);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	.choicepart-footer {
 | 
			
		||||
		position: absolute;
 | 
			
		||||
		width: 100%;
 | 
			
		||||
		color: #c7c7c7;
 | 
			
		||||
		user-select: none;
 | 
			
		||||
		font-size: 12px;
 | 
			
		||||
		letter-spacing: 1px;
 | 
			
		||||
		height: 30px;
 | 
			
		||||
		display: grid;
 | 
			
		||||
		place-content: center;
 | 
			
		||||
		bottom: 0;
 | 
			
		||||
		opacity: 0.5;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -32,6 +32,7 @@ import {
 | 
			
		||||
import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
@@ -61,7 +62,7 @@ const tableProps = [
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	mixins: [basicPage],
 | 
			
		||||
	mixins: [basicPage,tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			urlOptions: {
 | 
			
		||||
@@ -70,7 +71,6 @@ export default {
 | 
			
		||||
			},
 | 
			
		||||
			tableData: [],
 | 
			
		||||
			tableProps,
 | 
			
		||||
      tableH: this.tableHeight(260),
 | 
			
		||||
			drawerVisible: false,
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
@@ -92,7 +92,7 @@ export default {
 | 
			
		||||
					param: 'searchTime',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:energyCost:query')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-energy-search:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -100,7 +100,7 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:energyCost:export')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-energy-search:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
@@ -113,9 +113,6 @@ export default {
 | 
			
		||||
	},
 | 
			
		||||
	components: {},
 | 
			
		||||
	created() {
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.tableH = this.tableHeight(260)
 | 
			
		||||
    })
 | 
			
		||||
		getEnergyTypeListAll().then((response) => {
 | 
			
		||||
			this.formConfig[0].selectOptions = response.data;
 | 
			
		||||
		});
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import {
 | 
			
		||||
import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
@@ -71,7 +72,7 @@ const tableProps = [
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	mixins: [basicPage],
 | 
			
		||||
	mixins: [basicPage,tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			urlOptions: {
 | 
			
		||||
@@ -80,7 +81,6 @@ export default {
 | 
			
		||||
			},
 | 
			
		||||
			tableData: [],
 | 
			
		||||
			tableProps,
 | 
			
		||||
      tableH: this.tableHeight(260),
 | 
			
		||||
			drawerVisible: false,
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
@@ -116,7 +116,7 @@ export default {
 | 
			
		||||
					defaultSelect: [],
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:energyCostHis:query')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-enery-auto-report:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -124,7 +124,7 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:energyCostHis:export')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-enery-auto-report:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
@@ -137,9 +137,6 @@ export default {
 | 
			
		||||
	},
 | 
			
		||||
	components: {},
 | 
			
		||||
	created() {
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.tableH = this.tableHeight(260)
 | 
			
		||||
    })
 | 
			
		||||
		const end = new Date();
 | 
			
		||||
		const start = new Date();
 | 
			
		||||
		start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
			:table-props="tableProps"
 | 
			
		||||
			:page="listQuery.pageNo"
 | 
			
		||||
			:limit="listQuery.pageSize"
 | 
			
		||||
      :max-height="tableH"
 | 
			
		||||
			:max-height="tableH"
 | 
			
		||||
			:table-data="tableData">
 | 
			
		||||
			<method-btn
 | 
			
		||||
				v-if="tableBtn.length"
 | 
			
		||||
@@ -53,6 +53,7 @@ import {
 | 
			
		||||
} from '@/api/cost/costMaterialSet';
 | 
			
		||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
@@ -91,7 +92,7 @@ const tableProps = [
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	mixins: [basicPage],
 | 
			
		||||
	mixins: [basicPage,tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			urlOptions: {
 | 
			
		||||
@@ -99,15 +100,14 @@ export default {
 | 
			
		||||
				deleteURL: deleteCostMaterialSet,
 | 
			
		||||
			},
 | 
			
		||||
			tableProps,
 | 
			
		||||
      tableH: this.tableHeight(260),
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi(`cost:rawMaterialConfig:update`)
 | 
			
		||||
				this.$auth.hasPermi(`extend:cost-material-set:update`)
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi(`cost:rawMaterialConfig:delete`)
 | 
			
		||||
				this.$auth.hasPermi(`extend:cost-material-set:delete`)
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
@@ -124,7 +124,7 @@ export default {
 | 
			
		||||
					filterable: true,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialConfig:query')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-set:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -132,10 +132,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type:
 | 
			
		||||
						this.$auth.hasPermi('extend:cost-material-set:create') &&
 | 
			
		||||
						this.$auth.hasPermi('extend:cost-material-set:query')
 | 
			
		||||
							? 'separate'
 | 
			
		||||
							: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialConfig:create')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-set:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
@@ -150,9 +154,6 @@ export default {
 | 
			
		||||
		AddOrUpdate,
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.tableH = this.tableHeight(260)
 | 
			
		||||
    })
 | 
			
		||||
		getHotMaterialList().then((response) => {
 | 
			
		||||
			this.formConfig[0].selectOptions = response.data;
 | 
			
		||||
		});
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import {
 | 
			
		||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
@@ -66,7 +67,7 @@ const tableProps = [
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	mixins: [basicPage],
 | 
			
		||||
	mixins: [basicPage,tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			urlOptions: {
 | 
			
		||||
@@ -75,7 +76,6 @@ export default {
 | 
			
		||||
			},
 | 
			
		||||
			tableData: [],
 | 
			
		||||
			tableProps,
 | 
			
		||||
      tableH: this.tableHeight(260),
 | 
			
		||||
			drawerVisible: false,
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
@@ -97,7 +97,7 @@ export default {
 | 
			
		||||
					param: 'searchTime',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialCost:query')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-search:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -105,7 +105,7 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialCost:export')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-search:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
@@ -118,9 +118,6 @@ export default {
 | 
			
		||||
	},
 | 
			
		||||
	components: {},
 | 
			
		||||
	created() {
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.tableH = this.tableHeight(260)
 | 
			
		||||
    })
 | 
			
		||||
		getHotMaterialList().then((response) => {
 | 
			
		||||
			this.formConfig[0].selectOptions = response.data;
 | 
			
		||||
		});
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ import {
 | 
			
		||||
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
import tableHeightMixin from '@/mixins/lb/tableHeightMixin';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
	{
 | 
			
		||||
@@ -70,7 +71,7 @@ const tableProps = [
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	mixins: [basicPage],
 | 
			
		||||
	mixins: [basicPage,tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			urlOptions: {
 | 
			
		||||
@@ -79,7 +80,6 @@ export default {
 | 
			
		||||
			},
 | 
			
		||||
			tableData: [],
 | 
			
		||||
			tableProps,
 | 
			
		||||
      tableH: this.tableHeight(260),
 | 
			
		||||
			drawerVisible: false,
 | 
			
		||||
			formConfig: [
 | 
			
		||||
				{
 | 
			
		||||
@@ -115,7 +115,7 @@ export default {
 | 
			
		||||
					defaultSelect: [],
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialCostHis:query')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-auto-report:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -123,7 +123,7 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('cost:rawMaterialCostHis:export')
 | 
			
		||||
					type: this.$auth.hasPermi('extend:cost-material-auto-report:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
@@ -136,9 +136,6 @@ export default {
 | 
			
		||||
	},
 | 
			
		||||
	components: {},
 | 
			
		||||
	created() {
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.tableH = this.tableHeight(260)
 | 
			
		||||
    })
 | 
			
		||||
		const end = new Date();
 | 
			
		||||
		const start = new Date();
 | 
			
		||||
		start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div id='deepProcessingContainerB' ref='deepProcessingContainerB' style="width: 100%;height: 100%;">
 | 
			
		||||
	<div
 | 
			
		||||
		id="deepProcessingContainerB"
 | 
			
		||||
		ref="deepProcessingContainerB"
 | 
			
		||||
		style="width: 100%; height: 100%">
 | 
			
		||||
		<div
 | 
			
		||||
			id='deepProcessingContainer'
 | 
			
		||||
			ref='deepProcessingContainer'
 | 
			
		||||
			id="deepProcessingContainer"
 | 
			
		||||
			ref="deepProcessingContainer"
 | 
			
		||||
			class="deepProcessingBoard"
 | 
			
		||||
			style="
 | 
			
		||||
				position: absolute;
 | 
			
		||||
@@ -16,15 +19,14 @@
 | 
			
		||||
				flex-direction: column;
 | 
			
		||||
				gap: 24px;
 | 
			
		||||
			"
 | 
			
		||||
			:style="{transform:'scale('+scaleNum+')'}">
 | 
			
		||||
			<KHeader :isFullScreen='isFullScreen' @screenfullChange='screenfullChange' topTitle='深加工生产运行驾驶舱'/>
 | 
			
		||||
			:style="{ transform: 'scale(' + scaleNum + ')' }">
 | 
			
		||||
			<KHeader
 | 
			
		||||
				:isFullScreen="isFullScreen"
 | 
			
		||||
				@screenfullChange="screenfullChange"
 | 
			
		||||
				topTitle="深加工生产运行驾驶舱" />
 | 
			
		||||
			<div
 | 
			
		||||
				class="main-body"
 | 
			
		||||
				style="
 | 
			
		||||
					display: grid;
 | 
			
		||||
					gap: 16px;
 | 
			
		||||
					grid-template-rows: 462px 462px;
 | 
			
		||||
				">
 | 
			
		||||
				style="display: grid; gap: 16px; grid-template-rows: 462px 462px">
 | 
			
		||||
				<TopThree />
 | 
			
		||||
				<BottomTwo />
 | 
			
		||||
			</div>
 | 
			
		||||
@@ -47,16 +49,16 @@
 | 
			
		||||
import KHeader from '../components/Header';
 | 
			
		||||
import TopThree from './TopThree';
 | 
			
		||||
import BottomTwo from './BottomTwo';
 | 
			
		||||
import screenfull from 'screenfull'
 | 
			
		||||
import { debounce } from '@/utils/debounce'
 | 
			
		||||
import { getDcsMsg, getMesMsg } from './../utils/wsInterface'
 | 
			
		||||
import screenfull from 'screenfull';
 | 
			
		||||
import { debounce } from '@/utils/debounce';
 | 
			
		||||
import { getDcsMsg, getMesMsg } from './../utils/wsInterface';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'deepProcessingBoard',
 | 
			
		||||
	components: {
 | 
			
		||||
		KHeader,
 | 
			
		||||
		TopThree,
 | 
			
		||||
		BottomTwo
 | 
			
		||||
		BottomTwo,
 | 
			
		||||
	},
 | 
			
		||||
	// provide() {
 | 
			
		||||
	// 	return {
 | 
			
		||||
@@ -66,83 +68,90 @@ export default {
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isFullScreen: false,
 | 
			
		||||
			scaleNum: 0.8
 | 
			
		||||
			scaleNum: 0.8,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
		this.init()
 | 
			
		||||
		this.init();
 | 
			
		||||
	},
 | 
			
		||||
	destroy() {
 | 
			
		||||
		this.destroy()
 | 
			
		||||
		this.destroy();
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.boxReset = debounce(() => {
 | 
			
		||||
      this.resetSize()
 | 
			
		||||
    }, 300)
 | 
			
		||||
    this.boxReset()
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.boxReset()
 | 
			
		||||
    })
 | 
			
		||||
			this.resetSize();
 | 
			
		||||
		}, 300);
 | 
			
		||||
		this.boxReset();
 | 
			
		||||
		window.addEventListener('resize', () => {
 | 
			
		||||
			this.boxReset();
 | 
			
		||||
		});
 | 
			
		||||
		// closeWebsocket()
 | 
			
		||||
		// getDcsMsg()
 | 
			
		||||
		// getMesMsg()
 | 
			
		||||
		console.log('mounted...........')
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.boxReset();
 | 
			
		||||
		window.addEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	destroyed() {
 | 
			
		||||
		console.log('destroyed...........')
 | 
			
		||||
		window.removeEventListener('resize', this.boxReset);
 | 
			
		||||
		this.destroy();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		boxReset() {
 | 
			
		||||
			debounce(() => {
 | 
			
		||||
				this.resetSize();
 | 
			
		||||
			}, 300)();
 | 
			
		||||
		},
 | 
			
		||||
		change() {
 | 
			
		||||
      this.isFullScreen = screenfull.isFullscreen
 | 
			
		||||
    },
 | 
			
		||||
    init() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.on('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    destroy() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.off('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
			this.isFullScreen = screenfull.isFullscreen;
 | 
			
		||||
		},
 | 
			
		||||
		init() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.on('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		destroy() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.off('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		// 全屏
 | 
			
		||||
		screenfullChange() {
 | 
			
		||||
      if (!screenfull.isEnabled) {
 | 
			
		||||
        this.$message({
 | 
			
		||||
          message: 'you browser can not work',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        })
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
      screenfull.toggle(this.$refs.deepProcessingContainerB)
 | 
			
		||||
    },
 | 
			
		||||
			if (!screenfull.isEnabled) {
 | 
			
		||||
				this.$message({
 | 
			
		||||
					message: 'you browser can not work',
 | 
			
		||||
					type: 'warning',
 | 
			
		||||
				});
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			screenfull.toggle(this.$refs.deepProcessingContainerB);
 | 
			
		||||
		},
 | 
			
		||||
		resetSize() {
 | 
			
		||||
      let deepProcessingContainer = document.getElementById('deepProcessingContainer')
 | 
			
		||||
      let rw = parseFloat(window.innerWidth)
 | 
			
		||||
      let rh = parseFloat(window.innerHeight)
 | 
			
		||||
      let bw = parseFloat(deepProcessingContainer.style.width)
 | 
			
		||||
      let bh = parseFloat(deepProcessingContainer.style.height)
 | 
			
		||||
			let wx = 0
 | 
			
		||||
			let hx = 0
 | 
			
		||||
			let deepProcessingContainer = document.getElementById(
 | 
			
		||||
				'deepProcessingContainer'
 | 
			
		||||
			);
 | 
			
		||||
			let rw = parseFloat(window.innerWidth);
 | 
			
		||||
			let rh = parseFloat(window.innerHeight);
 | 
			
		||||
			let bw = parseFloat(deepProcessingContainer.style.width);
 | 
			
		||||
			let bh = parseFloat(deepProcessingContainer.style.height);
 | 
			
		||||
			let wx = 0;
 | 
			
		||||
			let hx = 0;
 | 
			
		||||
			if (screenfull.isFullscreen) {
 | 
			
		||||
				console.log('全屏')
 | 
			
		||||
				wx = rw / bw
 | 
			
		||||
				hx = rh / bh
 | 
			
		||||
				console.log(this.scaleNum)
 | 
			
		||||
			}else{
 | 
			
		||||
				console.log('非全屏')
 | 
			
		||||
				console.log(this.$store.state.app.sidebar.opened)
 | 
			
		||||
				wx = rw / bw;
 | 
			
		||||
				hx = rh / bh;
 | 
			
		||||
			} else {
 | 
			
		||||
				if (this.$store.state.app.sidebar.opened) {
 | 
			
		||||
					wx = (rw-280) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
				}else{
 | 
			
		||||
					wx = (rw-85) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
					wx = (rw - 280) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				} else {
 | 
			
		||||
					wx = (rw - 85) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			this.scaleNum = wx
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
			this.scaleNum = wx;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,24 +1,23 @@
 | 
			
		||||
<!-- 
 | 
			
		||||
    filename: MaterialCost.vue
 | 
			
		||||
    author: liubin
 | 
			
		||||
    date: 2023-12-06 09:09:27
 | 
			
		||||
    description: 
 | 
			
		||||
-->
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
	<Container name="原料用量统计" size="middle" style="">
 | 
			
		||||
		<div style="flex: 1; display: flex; gap: 8px;flex-direction: column;">
 | 
			
		||||
	<Container
 | 
			
		||||
		name="原料用量统计"
 | 
			
		||||
		size="middle"
 | 
			
		||||
		style="">
 | 
			
		||||
		<div style="flex: 1; display: flex; gap: 8px; flex-direction: column">
 | 
			
		||||
			<div
 | 
			
		||||
				class="absolute"
 | 
			
		||||
				style="
 | 
			
		||||
					flex:3;
 | 
			
		||||
					flex: 2;
 | 
			
		||||
					padding: 12px 12px 0 12px;
 | 
			
		||||
					display: grid;
 | 
			
		||||
					grid-template-columns: repeat(3, 1fr);
 | 
			
		||||
					grid-template-columns: repeat(2, 1fr);
 | 
			
		||||
					grid-auto-rows: repeat(4, 1fr);
 | 
			
		||||
					gap: 8px;
 | 
			
		||||
				">
 | 
			
		||||
				<ShadowRect v-for="(item, index) in materialMsg1" :key="index" :rounded="false">
 | 
			
		||||
				<ShadowRect
 | 
			
		||||
					v-for="(item, index) in materialMsg"
 | 
			
		||||
					:key="index"
 | 
			
		||||
					:rounded="false">
 | 
			
		||||
					<div
 | 
			
		||||
						class="material"
 | 
			
		||||
						style="
 | 
			
		||||
@@ -30,43 +29,24 @@
 | 
			
		||||
							align-items: center;
 | 
			
		||||
							justify-content: center;
 | 
			
		||||
						">
 | 
			
		||||
						<span style="color: #0ee8e4; font-weight: 500; font-size: 32px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
 | 
			
		||||
							{{item.materialUsed}}
 | 
			
		||||
						<span
 | 
			
		||||
							style="
 | 
			
		||||
								color: #0ee8e4;
 | 
			
		||||
								font-weight: 500;
 | 
			
		||||
								font-size: 32px;
 | 
			
		||||
								white-space: nowrap;
 | 
			
		||||
								overflow: hidden;
 | 
			
		||||
								text-overflow: ellipsis;
 | 
			
		||||
							">
 | 
			
		||||
							{{ item.materialUsed }}
 | 
			
		||||
						</span>
 | 
			
		||||
						<span style="color: #fff; font-size: 16px; letter-spacing: 1px">
 | 
			
		||||
							- {{item.materialName}}/kg-
 | 
			
		||||
						</span>
 | 
			
		||||
					</div>
 | 
			
		||||
				</ShadowRect>
 | 
			
		||||
			</div>
 | 
			
		||||
			<div style="flex:1;
 | 
			
		||||
					padding: 0 12px 12px 12px;
 | 
			
		||||
					display: grid;
 | 
			
		||||
					grid-template-columns: repeat(4, 1fr);
 | 
			
		||||
					gap: 8px;">
 | 
			
		||||
				<ShadowRect v-for="(item, index) in materialMsg2" :key="index" :rounded="false">
 | 
			
		||||
					<div
 | 
			
		||||
						class="material"
 | 
			
		||||
						style="
 | 
			
		||||
							flex: 1;
 | 
			
		||||
							padding-bottom: 3px;
 | 
			
		||||
							display: flex;
 | 
			
		||||
							flex-direction: column;
 | 
			
		||||
							gap: 4px;
 | 
			
		||||
							align-items: center;
 | 
			
		||||
							justify-content: center;
 | 
			
		||||
						">
 | 
			
		||||
						<span style="color: #0ee8e4; font-weight: 500; font-size: 32px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">
 | 
			
		||||
							{{item.materialUsed}}
 | 
			
		||||
						</span>
 | 
			
		||||
						<span style="color: #fff; font-size: 16px; letter-spacing: 1px">
 | 
			
		||||
							- {{item.materialName}}/kg-
 | 
			
		||||
							- {{ item.materialName }}/kg-
 | 
			
		||||
						</span>
 | 
			
		||||
					</div>
 | 
			
		||||
				</ShadowRect>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		
 | 
			
		||||
	</Container>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -81,12 +61,9 @@ export default {
 | 
			
		||||
		return {};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
		materialMsg1() {
 | 
			
		||||
			return this.$store.state.websocket.material.slice(0,9)
 | 
			
		||||
		materialMsg() {
 | 
			
		||||
			return this.$store.state.websocket.material;
 | 
			
		||||
		},
 | 
			
		||||
		materialMsg2() {
 | 
			
		||||
			return this.$store.state.websocket.material.slice(9)
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	methods: {},
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div id='kilnContainerB' ref='kilnContainerB' style="width: 100%;height: 100%;">
 | 
			
		||||
	<div
 | 
			
		||||
		id="kilnContainerB"
 | 
			
		||||
		ref="kilnContainerB"
 | 
			
		||||
		style="width: 100%; height: 100%">
 | 
			
		||||
		<div
 | 
			
		||||
			id='kilnContainer'
 | 
			
		||||
			ref='kilnContainer'
 | 
			
		||||
			id="kilnContainer"
 | 
			
		||||
			ref="kilnContainer"
 | 
			
		||||
			class="KilnDataBoard"
 | 
			
		||||
			style="
 | 
			
		||||
				position: absolute;
 | 
			
		||||
@@ -16,15 +19,22 @@
 | 
			
		||||
				flex-direction: column;
 | 
			
		||||
				gap: 24px;
 | 
			
		||||
			"
 | 
			
		||||
			:style="{transform:'scale('+scaleNum+')'}">
 | 
			
		||||
			<KHeader :isFullScreen='isFullScreen' @screenfullChange='screenfullChange' topTitle='窑炉生产运行驾驶舱'/>
 | 
			
		||||
			:style="{ transform: 'scale(' + scaleNum + ')' }">
 | 
			
		||||
			<KHeader
 | 
			
		||||
				:isFullScreen="isFullScreen"
 | 
			
		||||
				@screenfullChange="screenfullChange"
 | 
			
		||||
				topTitle="窑炉生产运行驾驶舱" />
 | 
			
		||||
			<div
 | 
			
		||||
				class="main-body"
 | 
			
		||||
				style="flex: 1; display: flex; gap: 20px; padding: 0px 16px">
 | 
			
		||||
				<div class="left-side" style="flex: 2">
 | 
			
		||||
				<div
 | 
			
		||||
					class="left-side"
 | 
			
		||||
					style="flex: 2">
 | 
			
		||||
					<LeftFour />
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="right-side" style="flex: 1">
 | 
			
		||||
				<div
 | 
			
		||||
					class="right-side"
 | 
			
		||||
					style="flex: 1">
 | 
			
		||||
					<RightTwo />
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
@@ -36,8 +46,8 @@
 | 
			
		||||
import KHeader from '../components/Header';
 | 
			
		||||
import LeftFour from './LeftFour';
 | 
			
		||||
import RightTwo from './RightTwo.vue';
 | 
			
		||||
import screenfull from 'screenfull'
 | 
			
		||||
import { debounce } from '@/utils/debounce'
 | 
			
		||||
import screenfull from 'screenfull';
 | 
			
		||||
import { debounce } from '@/utils/debounce';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'Kiln',
 | 
			
		||||
@@ -46,10 +56,10 @@ export default {
 | 
			
		||||
		LeftFour,
 | 
			
		||||
		RightTwo,
 | 
			
		||||
	},
 | 
			
		||||
	computed:{
 | 
			
		||||
	computed: {
 | 
			
		||||
		sidebarStatus() {
 | 
			
		||||
			return this.$store.state.app.sidebar.opened;
 | 
			
		||||
		}
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	// provide() {
 | 
			
		||||
	// 	return {
 | 
			
		||||
@@ -59,84 +69,80 @@ export default {
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isFullScreen: false,
 | 
			
		||||
			scaleNum: 0.8
 | 
			
		||||
			scaleNum: 0.8,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	watch: {
 | 
			
		||||
		sidebarStatus() {
 | 
			
		||||
			this.boxReset()
 | 
			
		||||
			this.boxReset();
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
		this.init()
 | 
			
		||||
	},
 | 
			
		||||
	destroy() {
 | 
			
		||||
		this.destroy()
 | 
			
		||||
		this.init();
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.boxReset = debounce(() => {
 | 
			
		||||
      this.resetSize()
 | 
			
		||||
    }, 300)
 | 
			
		||||
    this.boxReset()
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.boxReset()
 | 
			
		||||
    })
 | 
			
		||||
		this.boxReset();
 | 
			
		||||
		window.addEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	destroyed() {
 | 
			
		||||
		window.removeEventListener('resize', this.boxReset);
 | 
			
		||||
		this.destroy();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		boxReset() {
 | 
			
		||||
			debounce(() => {
 | 
			
		||||
				this.resetSize();
 | 
			
		||||
			}, 300)();
 | 
			
		||||
		},
 | 
			
		||||
		change() {
 | 
			
		||||
      this.isFullScreen = screenfull.isFullscreen
 | 
			
		||||
    },
 | 
			
		||||
			this.isFullScreen = screenfull.isFullscreen;
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
    init() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.on('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
		init() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.on('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
    destroy() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.off('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
		destroy() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.off('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		// 全屏
 | 
			
		||||
		screenfullChange() {
 | 
			
		||||
      if (!screenfull.isEnabled) {
 | 
			
		||||
        this.$message({
 | 
			
		||||
          message: 'you browser can not work',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        })
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
      screenfull.toggle(this.$refs.kilnContainerB)
 | 
			
		||||
    },
 | 
			
		||||
			if (!screenfull.isEnabled) {
 | 
			
		||||
				this.$message({
 | 
			
		||||
					message: 'you browser can not work',
 | 
			
		||||
					type: 'warning',
 | 
			
		||||
				});
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			screenfull.toggle(this.$refs.kilnContainerB);
 | 
			
		||||
		},
 | 
			
		||||
		resetSize() {
 | 
			
		||||
      let kilnContainerBox = document.getElementById('kilnContainer')
 | 
			
		||||
			console.log(kilnContainerBox)
 | 
			
		||||
      let rw = parseFloat(window.innerWidth)
 | 
			
		||||
      let rh = parseFloat(window.innerHeight)
 | 
			
		||||
      let bw = parseFloat(kilnContainerBox.style.width)
 | 
			
		||||
      let bh = parseFloat(kilnContainerBox.style.height)
 | 
			
		||||
			let wx = 0
 | 
			
		||||
			let hx = 0
 | 
			
		||||
			let kilnContainerBox = document.getElementById('kilnContainer');
 | 
			
		||||
			let rw = parseFloat(window.innerWidth);
 | 
			
		||||
			let rh = parseFloat(window.innerHeight);
 | 
			
		||||
			let bw = parseFloat(kilnContainerBox.style.width);
 | 
			
		||||
			let bh = parseFloat(kilnContainerBox.style.height);
 | 
			
		||||
			let wx = 0;
 | 
			
		||||
			let hx = 0;
 | 
			
		||||
			if (screenfull.isFullscreen) {
 | 
			
		||||
				console.log('全屏')
 | 
			
		||||
				wx = rw / bw
 | 
			
		||||
				hx = rh / bh
 | 
			
		||||
				console.log(this.scaleNum)
 | 
			
		||||
			}else{
 | 
			
		||||
				console.log('非全屏')
 | 
			
		||||
				console.log(this.$store.state.app.sidebar.opened)
 | 
			
		||||
				wx = rw / bw;
 | 
			
		||||
				hx = rh / bh;
 | 
			
		||||
			} else {
 | 
			
		||||
				if (this.$store.state.app.sidebar.opened) {
 | 
			
		||||
					wx = (rw-280) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
				}else{
 | 
			
		||||
					wx = (rw-85) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
					wx = (rw - 280) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				} else {
 | 
			
		||||
					wx = (rw - 85) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			this.scaleNum = wx
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
			this.scaleNum = wx;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,11 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div id='wholePlantContainerB' ref='wholePlantContainerB' style="width: 100%;height: 100%;">
 | 
			
		||||
	<div
 | 
			
		||||
		id="wholePlantContainerB"
 | 
			
		||||
		ref="wholePlantContainerB"
 | 
			
		||||
		style="width: 100%; height: 100%">
 | 
			
		||||
		<div
 | 
			
		||||
			id='wholePlantContainer'
 | 
			
		||||
			ref='wholePlantContainer'
 | 
			
		||||
			id="wholePlantContainer"
 | 
			
		||||
			ref="wholePlantContainer"
 | 
			
		||||
			class="wholePlantBoard"
 | 
			
		||||
			style="
 | 
			
		||||
				position: absolute;
 | 
			
		||||
@@ -16,18 +19,27 @@
 | 
			
		||||
				flex-direction: column;
 | 
			
		||||
				gap: 24px;
 | 
			
		||||
			"
 | 
			
		||||
			:style="{transform:'scale('+scaleNum+')'}">
 | 
			
		||||
			<KHeader :isFullScreen='isFullScreen' @screenfullChange='screenfullChange' topTitle='全厂总览驾驶舱'/>
 | 
			
		||||
			:style="{ transform: 'scale(' + scaleNum + ')' }">
 | 
			
		||||
			<KHeader
 | 
			
		||||
				:isFullScreen="isFullScreen"
 | 
			
		||||
				@screenfullChange="screenfullChange"
 | 
			
		||||
				topTitle="全厂总览驾驶舱" />
 | 
			
		||||
			<div
 | 
			
		||||
				class="main-body"
 | 
			
		||||
				style="flex: 1; display: flex; gap: 20px; padding: 0px 16px">
 | 
			
		||||
				<div class="left-side" style="flex: 1">
 | 
			
		||||
				<div
 | 
			
		||||
					class="left-side"
 | 
			
		||||
					style="flex: 1">
 | 
			
		||||
					<LeftTwo />
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="middle-side" style="flex: 1">
 | 
			
		||||
				<div
 | 
			
		||||
					class="middle-side"
 | 
			
		||||
					style="flex: 1">
 | 
			
		||||
					<MiddleTwo />
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="right-side" style="flex: 1">
 | 
			
		||||
				<div
 | 
			
		||||
					class="right-side"
 | 
			
		||||
					style="flex: 1">
 | 
			
		||||
					<RightTwo />
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
@@ -40,8 +52,8 @@ import KHeader from '../components/Header';
 | 
			
		||||
import LeftTwo from './LeftTwo';
 | 
			
		||||
import MiddleTwo from './MiddleTwo';
 | 
			
		||||
import RightTwo from './RightTwo';
 | 
			
		||||
import screenfull from 'screenfull'
 | 
			
		||||
import { debounce } from '@/utils/debounce'
 | 
			
		||||
import screenfull from 'screenfull';
 | 
			
		||||
import { debounce } from '@/utils/debounce';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'wholePlantBoard',
 | 
			
		||||
@@ -49,7 +61,7 @@ export default {
 | 
			
		||||
		KHeader,
 | 
			
		||||
		LeftTwo,
 | 
			
		||||
		MiddleTwo,
 | 
			
		||||
		RightTwo
 | 
			
		||||
		RightTwo,
 | 
			
		||||
	},
 | 
			
		||||
	// provide() {
 | 
			
		||||
	// 	return {
 | 
			
		||||
@@ -59,80 +71,77 @@ export default {
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isFullScreen: false,
 | 
			
		||||
			scaleNum: 0.8
 | 
			
		||||
			scaleNum: 0.8,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
		this.init()
 | 
			
		||||
		this.init();
 | 
			
		||||
	},
 | 
			
		||||
	destroy() {
 | 
			
		||||
		this.destroy()
 | 
			
		||||
		this.destroy();
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.boxReset = debounce(() => {
 | 
			
		||||
      this.resetSize()
 | 
			
		||||
    }, 300)
 | 
			
		||||
    this.boxReset()
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.boxReset()
 | 
			
		||||
    })
 | 
			
		||||
		console.log('mounted...........')
 | 
			
		||||
		this.boxReset();
 | 
			
		||||
		window.addEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	destroyed() {
 | 
			
		||||
		console.log('destroyed...........')
 | 
			
		||||
		window.removeEventListener('resize', this.boxReset);
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		boxReset() {
 | 
			
		||||
			debounce(() => {
 | 
			
		||||
				this.resetSize();
 | 
			
		||||
			}, 300)();
 | 
			
		||||
		},
 | 
			
		||||
		change() {
 | 
			
		||||
      this.isFullScreen = screenfull.isFullscreen
 | 
			
		||||
    },
 | 
			
		||||
    init() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.on('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    destroy() {
 | 
			
		||||
      if (screenfull.isEnabled) {
 | 
			
		||||
        screenfull.off('change', this.change)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
			this.isFullScreen = screenfull.isFullscreen;
 | 
			
		||||
		},
 | 
			
		||||
		init() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.on('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		destroy() {
 | 
			
		||||
			if (screenfull.isEnabled) {
 | 
			
		||||
				screenfull.off('change', this.change);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		// 全屏
 | 
			
		||||
		screenfullChange() {
 | 
			
		||||
      if (!screenfull.isEnabled) {
 | 
			
		||||
        this.$message({
 | 
			
		||||
          message: 'you browser can not work',
 | 
			
		||||
          type: 'warning'
 | 
			
		||||
        })
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
      screenfull.toggle(this.$refs.wholePlantContainerB)
 | 
			
		||||
    },
 | 
			
		||||
			if (!screenfull.isEnabled) {
 | 
			
		||||
				this.$message({
 | 
			
		||||
					message: 'you browser can not work',
 | 
			
		||||
					type: 'warning',
 | 
			
		||||
				});
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			screenfull.toggle(this.$refs.wholePlantContainerB);
 | 
			
		||||
		},
 | 
			
		||||
		resetSize() {
 | 
			
		||||
      let wholePlantContainerBox = document.getElementById('wholePlantContainer')
 | 
			
		||||
      let rw = parseFloat(window.innerWidth)
 | 
			
		||||
      let rh = parseFloat(window.innerHeight)
 | 
			
		||||
      let bw = parseFloat(wholePlantContainerBox.style.width)
 | 
			
		||||
      let bh = parseFloat(wholePlantContainerBox.style.height)
 | 
			
		||||
			let wx = 0
 | 
			
		||||
			let hx = 0
 | 
			
		||||
			let wholePlantContainerBox = document.getElementById(
 | 
			
		||||
				'wholePlantContainer'
 | 
			
		||||
			);
 | 
			
		||||
			let rw = parseFloat(window.innerWidth);
 | 
			
		||||
			let rh = parseFloat(window.innerHeight);
 | 
			
		||||
			let bw = parseFloat(wholePlantContainerBox.style.width);
 | 
			
		||||
			let bh = parseFloat(wholePlantContainerBox.style.height);
 | 
			
		||||
			let wx = 0;
 | 
			
		||||
			let hx = 0;
 | 
			
		||||
			if (screenfull.isFullscreen) {
 | 
			
		||||
				console.log('全屏')
 | 
			
		||||
				wx = rw / bw
 | 
			
		||||
				hx = rh / bh
 | 
			
		||||
				console.log(this.scaleNum)
 | 
			
		||||
			}else{
 | 
			
		||||
				console.log('非全屏')
 | 
			
		||||
				console.log(this.$store.state.app.sidebar.opened)
 | 
			
		||||
				wx = rw / bw;
 | 
			
		||||
				hx = rh / bh;
 | 
			
		||||
			} else {
 | 
			
		||||
				if (this.$store.state.app.sidebar.opened) {
 | 
			
		||||
					wx = (rw-280) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
				}else{
 | 
			
		||||
					wx = (rw-85) / bw
 | 
			
		||||
					hx = (rh-116) / bh
 | 
			
		||||
					wx = (rw - 280) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				} else {
 | 
			
		||||
					wx = (rw - 85) / bw;
 | 
			
		||||
					hx = (rh - 116) / bh;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			this.scaleNum = wx
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
			this.scaleNum = wx;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -76,10 +76,6 @@ export default {
 | 
			
		||||
					name: this.chartData[i].objName + this.chartData[i].objCode,
 | 
			
		||||
					type: 'bar',
 | 
			
		||||
					barMaxWidth: 20,
 | 
			
		||||
					label: {
 | 
			
		||||
						show: true,
 | 
			
		||||
						position: 'top',
 | 
			
		||||
					},
 | 
			
		||||
					data: [],
 | 
			
		||||
				};
 | 
			
		||||
				legendData.push(this.chartData[i].objName + this.chartData[i].objCode);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div
 | 
			
		||||
		class="searchBarBox divHeight"
 | 
			
		||||
		ref="searchBarRef"
 | 
			
		||||
		:style="{ paddingRight: isFold ? '55px' : '0px' }">
 | 
			
		||||
		ref="searchBarRef">
 | 
			
		||||
		<el-form
 | 
			
		||||
			:inline="true"
 | 
			
		||||
			class="demo-form-inline">
 | 
			
		||||
@@ -200,13 +199,6 @@
 | 
			
		||||
				</el-button>
 | 
			
		||||
			</el-form-item>
 | 
			
		||||
		</el-form>
 | 
			
		||||
		<span
 | 
			
		||||
			v-if="isFold"
 | 
			
		||||
			class="foldClass"
 | 
			
		||||
			@click="switchMode">
 | 
			
		||||
			{{ isExpand ? '收起' : '展开' }}
 | 
			
		||||
			<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" />
 | 
			
		||||
		</span>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
@@ -217,16 +209,8 @@ import { getFactoryList } from '@/api/core/base/factory';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'searchArea',
 | 
			
		||||
	props: {
 | 
			
		||||
		isFold: {
 | 
			
		||||
			// 多行模式(默认否)
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isExpand: false, // 展开收起
 | 
			
		||||
			// 查询参数
 | 
			
		||||
			queryParams: {
 | 
			
		||||
				energyTypeId: null,
 | 
			
		||||
@@ -525,16 +509,6 @@ export default {
 | 
			
		||||
			let value = new Date(newData).getTime();
 | 
			
		||||
			return value;
 | 
			
		||||
		},
 | 
			
		||||
		switchMode() {
 | 
			
		||||
			// 展开和收起切换
 | 
			
		||||
			this.isExpand = !this.isExpand;
 | 
			
		||||
			const element = this.$refs.searchBarRef;
 | 
			
		||||
			if (this.isExpand) {
 | 
			
		||||
				element.classList.remove('divHeight');
 | 
			
		||||
			} else {
 | 
			
		||||
				element.classList.add('divHeight');
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
@@ -573,21 +547,6 @@ export default {
 | 
			
		||||
		margin-bottom: 4px;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
.searchBarBox .foldClass {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 14px;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
	color: #0b58ff;
 | 
			
		||||
}
 | 
			
		||||
.searchBarBox .foldClass .iconfont {
 | 
			
		||||
	font-size: 14px;
 | 
			
		||||
}
 | 
			
		||||
.divHeight {
 | 
			
		||||
	height: 45px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.separateStyle {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	width: 1px;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
		id="contrastAnalysisBox">
 | 
			
		||||
		<!-- 搜索工作栏 -->
 | 
			
		||||
		<search-area
 | 
			
		||||
			:isFold="isFold"
 | 
			
		||||
			@submit="getList"
 | 
			
		||||
			@export="exportExl" />
 | 
			
		||||
		<div v-show="chartData.length">
 | 
			
		||||
@@ -38,7 +37,6 @@ export default {
 | 
			
		||||
	mixins: [tableHeightMixin],
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isFold: false,
 | 
			
		||||
			chartData: [],
 | 
			
		||||
			timeDim: '',
 | 
			
		||||
			tableProps: [],
 | 
			
		||||
@@ -46,13 +44,6 @@ export default {
 | 
			
		||||
			tableH: this.tableHeight(250) / 2,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		window.addEventListener('resize', () => {
 | 
			
		||||
			this.isFold = this.searchBarWidth('contrastAnalysisBox', 1437);
 | 
			
		||||
			// console.log(document.getElementById("contrastAnalysisBox").offsetWidth)
 | 
			
		||||
		});
 | 
			
		||||
		this.isFold = this.searchBarWidth('contrastAnalysisBox', 1437);
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		_setTableHeight() {
 | 
			
		||||
			this.tableH = this.tableHeight(250) / 2;
 | 
			
		||||
 
 | 
			
		||||
@@ -68,9 +68,9 @@ export default {
 | 
			
		||||
 | 
			
		||||
			var option = {
 | 
			
		||||
				color: ['#288AFF'],
 | 
			
		||||
				// tooltip: {
 | 
			
		||||
				//   trigger: 'axis'
 | 
			
		||||
				// },
 | 
			
		||||
				tooltip: {
 | 
			
		||||
					trigger: 'axis',
 | 
			
		||||
				},
 | 
			
		||||
				grid: {
 | 
			
		||||
					left: '4%',
 | 
			
		||||
					right: '1%',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,7 @@
 | 
			
		||||
<template>
 | 
			
		||||
	<div
 | 
			
		||||
		class="searchBarBox divHeight"
 | 
			
		||||
		ref="searchBarRef"
 | 
			
		||||
		:style="{ paddingRight: isFold ? '55px' : '0px' }">
 | 
			
		||||
		class="searchBarBox"
 | 
			
		||||
		ref="searchBarRef">
 | 
			
		||||
		<el-form
 | 
			
		||||
			:inline="true"
 | 
			
		||||
			class="demo-form-inline">
 | 
			
		||||
@@ -172,9 +171,9 @@
 | 
			
		||||
				</el-button>
 | 
			
		||||
				<span
 | 
			
		||||
					class="separateStyle"
 | 
			
		||||
					v-hasPermi="['analysis:trend-analysis:export']"></span>
 | 
			
		||||
					v-hasPermi="['analysis:energy-analysis:query']"></span>
 | 
			
		||||
				<el-button
 | 
			
		||||
					v-hasPermi="['analysis:trend-analysis:export']"
 | 
			
		||||
					v-hasPermi="['analysis:energy-analysis:query']"
 | 
			
		||||
					type="primary"
 | 
			
		||||
					size="small"
 | 
			
		||||
					plain
 | 
			
		||||
@@ -183,13 +182,6 @@
 | 
			
		||||
				</el-button>
 | 
			
		||||
			</el-form-item>
 | 
			
		||||
		</el-form>
 | 
			
		||||
		<span
 | 
			
		||||
			v-if="isFold"
 | 
			
		||||
			class="foldClass"
 | 
			
		||||
			@click="switchMode">
 | 
			
		||||
			{{ isExpand ? '收起' : '展开' }}
 | 
			
		||||
			<svg-icon :icon-class="isExpand ? 'upward' : 'downward'" />
 | 
			
		||||
		</span>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
@@ -198,16 +190,8 @@ import { getEnergyTypeListAll } from '@/api/base/energyType';
 | 
			
		||||
import moment from 'moment';
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'searchArea',
 | 
			
		||||
	props: {
 | 
			
		||||
		isFold: {
 | 
			
		||||
			// 多行模式(默认否)
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			default: false,
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isExpand: false, // 展开收起
 | 
			
		||||
			// 查询参数
 | 
			
		||||
			queryParams: {
 | 
			
		||||
				energyTypeId: null,
 | 
			
		||||
@@ -509,16 +493,6 @@ export default {
 | 
			
		||||
			let value = new Date(newData).getTime();
 | 
			
		||||
			return value;
 | 
			
		||||
		},
 | 
			
		||||
		switchMode() {
 | 
			
		||||
			// 展开和收起切换
 | 
			
		||||
			this.isExpand = !this.isExpand;
 | 
			
		||||
			const element = this.$refs.searchBarRef;
 | 
			
		||||
			if (this.isExpand) {
 | 
			
		||||
				element.classList.remove('divHeight');
 | 
			
		||||
			} else {
 | 
			
		||||
				element.classList.add('divHeight');
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
@@ -557,21 +531,6 @@ export default {
 | 
			
		||||
		margin-bottom: 4px;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
.searchBarBox .foldClass {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 14px;
 | 
			
		||||
	right: 0;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	font-size: 12px;
 | 
			
		||||
	color: #0b58ff;
 | 
			
		||||
}
 | 
			
		||||
.searchBarBox .foldClass .iconfont {
 | 
			
		||||
	font-size: 14px;
 | 
			
		||||
}
 | 
			
		||||
.divHeight {
 | 
			
		||||
	height: 45px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.separateStyle {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	width: 1px;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
		id="trendAnalysisBox">
 | 
			
		||||
		<!-- 搜索工作栏 -->
 | 
			
		||||
		<search-area
 | 
			
		||||
			:isFold="isFold"
 | 
			
		||||
			@submit="getList"
 | 
			
		||||
			@export="exportExl" />
 | 
			
		||||
		<div v-show="chartData.length">
 | 
			
		||||
@@ -33,20 +32,12 @@ export default {
 | 
			
		||||
	components: { SearchArea, LineChart },
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			isFold: false,
 | 
			
		||||
			chartData: [],
 | 
			
		||||
			timeDim: '',
 | 
			
		||||
			tableProps: [],
 | 
			
		||||
			list: [],
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		window.addEventListener('resize', () => {
 | 
			
		||||
			this.tableH = this.tableHeight(260);
 | 
			
		||||
			this.isFold = this.searchBarWidth('trendAnalysisBox', 1480);
 | 
			
		||||
		});
 | 
			
		||||
		this.isFold = this.searchBarWidth('trendAnalysisBox', 1480);
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		getList(params) {
 | 
			
		||||
			this.timeDim = params.timeDim;
 | 
			
		||||
@@ -66,8 +57,10 @@ export default {
 | 
			
		||||
			let listObj = { useNum: '消耗量' }; // 数据
 | 
			
		||||
			for (let i = 0; i < arr.length; i++) {
 | 
			
		||||
				let obj = {};
 | 
			
		||||
				let fName = arr[i].time.slice(0, 4);
 | 
			
		||||
				let lName = arr[i].time.slice(4, 6);
 | 
			
		||||
				obj.prop = arr[i].time;
 | 
			
		||||
				obj.label = arr[i].time;
 | 
			
		||||
				obj.label = fName + ' 第 ' + lName + ' 周';
 | 
			
		||||
				obj.minWidth = 100;
 | 
			
		||||
				tempX.push(obj);
 | 
			
		||||
				listObj[arr[i].time] = arr[i].useNum || null;
 | 
			
		||||
 
 | 
			
		||||
@@ -89,13 +89,13 @@ export default {
 | 
			
		||||
					param: 'name',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc:query') ? 'button' : '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,9 @@
 | 
			
		||||
							readonly
 | 
			
		||||
							style="width: 250px"></el-input>
 | 
			
		||||
					</el-form-item>
 | 
			
		||||
					<el-form-item v-if="showBtn">
 | 
			
		||||
					<el-form-item
 | 
			
		||||
						v-if="showBtn"
 | 
			
		||||
						v-hasPermi="['base:energy-plc-param:create']">
 | 
			
		||||
						<el-button
 | 
			
		||||
							type="success"
 | 
			
		||||
							size="small"
 | 
			
		||||
@@ -160,15 +162,19 @@ export default {
 | 
			
		||||
				this.drawerTitle = '参数绑定';
 | 
			
		||||
				this.showBtn = true;
 | 
			
		||||
				this.tableBtn = [
 | 
			
		||||
					{
 | 
			
		||||
						type: 'edit',
 | 
			
		||||
						btnName: '编辑',
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						type: 'delete',
 | 
			
		||||
						btnName: '删除',
 | 
			
		||||
					},
 | 
			
		||||
				];
 | 
			
		||||
					this.$auth.hasPermi('base:energy-plc-param:update')
 | 
			
		||||
						? {
 | 
			
		||||
								type: 'edit',
 | 
			
		||||
								btnName: '编辑',
 | 
			
		||||
						  }
 | 
			
		||||
						: undefined,
 | 
			
		||||
					this.$auth.hasPermi('base:energy-plc-param:delete')
 | 
			
		||||
						? {
 | 
			
		||||
								type: 'delete',
 | 
			
		||||
								btnName: '删除',
 | 
			
		||||
						  }
 | 
			
		||||
						: undefined,
 | 
			
		||||
				].filter((v) => v);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		getList() {
 | 
			
		||||
 
 | 
			
		||||
@@ -107,13 +107,17 @@ export default {
 | 
			
		||||
					param: 'cnName',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc-connect:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc-connect:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-plc-connect:create')
 | 
			
		||||
@@ -127,17 +131,25 @@ export default {
 | 
			
		||||
			],
 | 
			
		||||
			tableProps,
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:energy-plc-connect:bind')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:energy-plc-param:query',
 | 
			
		||||
					'base:energy-type:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'connect',
 | 
			
		||||
							btnName: '绑定',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				{
 | 
			
		||||
					type: 'detail',
 | 
			
		||||
					btnName: '详情',
 | 
			
		||||
				},
 | 
			
		||||
				this.$auth.hasPermi('base:energy-plc-connect:update')
 | 
			
		||||
				this.$auth.hasPermi('base:energy-plc-param:query')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'detail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:energy-plc-connect:update',
 | 
			
		||||
					'base:energy-plc-connect:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -45,6 +45,7 @@
 | 
			
		||||
			</el-table-column>
 | 
			
		||||
		</el-table>
 | 
			
		||||
		<el-button
 | 
			
		||||
			v-show="!isEdit"
 | 
			
		||||
			class="addButton"
 | 
			
		||||
			icon="el-icon-plus"
 | 
			
		||||
			@click="emitButtonClick">
 | 
			
		||||
@@ -70,6 +71,13 @@ export default {
 | 
			
		||||
				return [];
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		isEdit: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			required: true,
 | 
			
		||||
			default: () => {
 | 
			
		||||
				return false;
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {};
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,7 @@
 | 
			
		||||
				<add-table
 | 
			
		||||
					:table-data="tableData"
 | 
			
		||||
					:table-name-list="tableNameList"
 | 
			
		||||
					:isEdit="isEdit"
 | 
			
		||||
					@emitFun="inputChange"
 | 
			
		||||
					@emitButtonClick="emitButtonClick" />
 | 
			
		||||
			</el-col>
 | 
			
		||||
 
 | 
			
		||||
@@ -114,13 +114,20 @@ export default {
 | 
			
		||||
					defaultSelect: [],
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-quantity-manual:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermiOr([
 | 
			
		||||
						'base:energy-quantity-manual:export',
 | 
			
		||||
						'base:energy-quantity-manual:create',
 | 
			
		||||
					])
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-quantity-manual:export')
 | 
			
		||||
@@ -147,13 +154,19 @@ export default {
 | 
			
		||||
			// 班次基础信息列表
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:energy-quantity-manual:create')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:energy-quantity-manual:query',
 | 
			
		||||
					'base:energy-quantity-manual:create',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'meterReading',
 | 
			
		||||
							btnName: '抄表',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:energy-quantity-manual:update')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:energy-quantity-manual:update',
 | 
			
		||||
					'base:energy-quantity-manual:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,9 @@ export default {
 | 
			
		||||
					width: 350,
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('base:energy-quantity-realtime:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,10 @@ export default {
 | 
			
		||||
		return {
 | 
			
		||||
			tableProps,
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:table-name-config:edit')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:energy-table:query',
 | 
			
		||||
					'base:energy-table:update',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@
 | 
			
		||||
						placeholder="请选择"
 | 
			
		||||
						style="width: 100%">
 | 
			
		||||
						<el-option
 | 
			
		||||
							v-for="item in getDictDatas(DICT_TYPE.TABLE_NAME)"
 | 
			
		||||
							v-for="item in tableNameList"
 | 
			
		||||
							:key="item.value"
 | 
			
		||||
							:label="item.label"
 | 
			
		||||
							:value="item.value"></el-option>
 | 
			
		||||
@@ -154,6 +154,7 @@ import {
 | 
			
		||||
	createEnergyLimit,
 | 
			
		||||
	getEnergyParamList,
 | 
			
		||||
} from '@/api/monitoring/energyLimit';
 | 
			
		||||
import { energyTableGet } from '@/api/base/energyQuantityManual';
 | 
			
		||||
export default {
 | 
			
		||||
	name: 'energyLimitAdd',
 | 
			
		||||
	props: {
 | 
			
		||||
@@ -203,6 +204,7 @@ export default {
 | 
			
		||||
					{ required: true, message: '指标类型不能为空', trigger: 'change' },
 | 
			
		||||
				],
 | 
			
		||||
			},
 | 
			
		||||
			tableNameList: [],
 | 
			
		||||
			detailList: [],
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
@@ -267,11 +269,22 @@ export default {
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		toggleType() {
 | 
			
		||||
			if (this.form.energyTypeId && this.form.type) {
 | 
			
		||||
				this.getDetailList();
 | 
			
		||||
				this.form.plcParamId = '';
 | 
			
		||||
			if (this.form.energyTypeId && this.form.method == 2) {
 | 
			
		||||
				this.form.tableName = '';
 | 
			
		||||
				this.getTableNameList(this.form.energyTypeId);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		// 获取能源表名list
 | 
			
		||||
		getTableNameList(id) {
 | 
			
		||||
			energyTableGet({ energyTypeId: id }).then((res) => {
 | 
			
		||||
				this.tableNameList = res.data.tableObjs || [];
 | 
			
		||||
				if (this.tableNameList.length === 0) {
 | 
			
		||||
					this.$modal.msgWarning(
 | 
			
		||||
						'当前能源类型暂无配置表名,请先到《表名配置》页面配置'
 | 
			
		||||
					);
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		// 递归处理分类回显问题
 | 
			
		||||
		changeDetSelect(key, treeData) {
 | 
			
		||||
			let arr = []; // 递归时操作的数组
 | 
			
		||||
 
 | 
			
		||||
@@ -125,13 +125,17 @@ export default {
 | 
			
		||||
					param: 'limitType',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-limit:query')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-limit:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-limit:create')
 | 
			
		||||
 
 | 
			
		||||
@@ -113,7 +113,9 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-report:export')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-report:export')
 | 
			
		||||
 
 | 
			
		||||
@@ -22,6 +22,7 @@
 | 
			
		||||
					</el-form-item>
 | 
			
		||||
					<el-form-item>
 | 
			
		||||
						<el-button
 | 
			
		||||
							v-hasPermi="['monitoring:energy-statistics-det:query']"
 | 
			
		||||
							type="success"
 | 
			
		||||
							size="small"
 | 
			
		||||
							v-if="showBtn"
 | 
			
		||||
@@ -30,6 +31,7 @@
 | 
			
		||||
							新增
 | 
			
		||||
						</el-button>
 | 
			
		||||
						<el-button
 | 
			
		||||
							v-hasPermi="['monitoring:energy-statistics-det:delete']"
 | 
			
		||||
							type="danger"
 | 
			
		||||
							size="small"
 | 
			
		||||
							v-if="showBtn"
 | 
			
		||||
@@ -161,11 +163,13 @@ export default {
 | 
			
		||||
				this.drawerTitle = '参数绑定';
 | 
			
		||||
				this.showBtn = true;
 | 
			
		||||
				this.tableBtn = [
 | 
			
		||||
					{
 | 
			
		||||
						type: 'delete',
 | 
			
		||||
						btnName: '删除',
 | 
			
		||||
					},
 | 
			
		||||
				];
 | 
			
		||||
					this.$auth.hasPermi('monitoring:energy-statistics-det:delete')
 | 
			
		||||
						? {
 | 
			
		||||
								type: 'delete',
 | 
			
		||||
								btnName: '删除',
 | 
			
		||||
						  }
 | 
			
		||||
						: undefined,
 | 
			
		||||
				].filter((v) => v);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		getList() {
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,9 @@ export default {
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'button',
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-statistics-det:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '关联',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
 
 | 
			
		||||
@@ -104,7 +104,9 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-statistics:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('monitoring:energy-statistics:create')
 | 
			
		||||
@@ -118,17 +120,22 @@ export default {
 | 
			
		||||
			],
 | 
			
		||||
			tableProps,
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('monitoring:energy-statistics:bind')
 | 
			
		||||
				this.$auth.hasPermi('monitoring:energy-statistics-det:query')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'connect',
 | 
			
		||||
							btnName: '绑定',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				{
 | 
			
		||||
					type: 'detail',
 | 
			
		||||
					btnName: '详情',
 | 
			
		||||
				},
 | 
			
		||||
				this.$auth.hasPermi('monitoring:energy-statistics:update')
 | 
			
		||||
				this.$auth.hasPermi('monitoring:energy-statistics:query')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'detail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'monitoring:energy-statistics:update',
 | 
			
		||||
					'monitoring:energy-statistics:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @Author: zwq
 | 
			
		||||
 * @Date: 2021-11-18 14:16:25
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @LastEditTime: 2024-03-22 17:11:55
 | 
			
		||||
 * @LastEditTime: 2024-04-11 13:35:46
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
@@ -62,7 +62,8 @@
 | 
			
		||||
        <div v-if="!isdetail" class="action_btn">
 | 
			
		||||
          <template>
 | 
			
		||||
            <span style="display: inline-block;">
 | 
			
		||||
              <el-button type="text" @click="addNew()" icon="el-icon-plus">新增</el-button>
 | 
			
		||||
              <el-button v-if="this.$auth.hasPermi('extend:process-equ-material-bom-det:add')" type="text"
 | 
			
		||||
                @click="addNew()" icon="el-icon-plus">新增</el-button>
 | 
			
		||||
            </span>
 | 
			
		||||
          </template>
 | 
			
		||||
        </div>
 | 
			
		||||
@@ -101,11 +102,15 @@ import attrAdd from './attr-add';
 | 
			
		||||
import { publicFormatter } from '@/utils/dict';
 | 
			
		||||
const tableBtn = [
 | 
			
		||||
	{
 | 
			
		||||
		type: 'edit',
 | 
			
		||||
    type: this.$auth.hasPermi('extend:process-equ-material-bom-det:update')
 | 
			
		||||
      ? 'edit'
 | 
			
		||||
      : '',
 | 
			
		||||
		btnName: '编辑',
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		type: 'delete',
 | 
			
		||||
    type: this.$auth.hasPermi('extend:process-equ-material-bom-det:delete')
 | 
			
		||||
      ? 'delete'
 | 
			
		||||
      : '',
 | 
			
		||||
		btnName: '删除',
 | 
			
		||||
	},
 | 
			
		||||
];
 | 
			
		||||
@@ -237,9 +242,6 @@ export default {
 | 
			
		||||
        // console.log(response);
 | 
			
		||||
        this.equipmentList = res.data
 | 
			
		||||
      })
 | 
			
		||||
      getMaterialCode().then(res => {
 | 
			
		||||
        this.dataForm.code = res.data
 | 
			
		||||
      })
 | 
			
		||||
    },
 | 
			
		||||
		handleClick(raw) {
 | 
			
		||||
			if (raw.type === 'delete') {
 | 
			
		||||
@@ -292,7 +294,10 @@ export default {
 | 
			
		||||
			if (id) {
 | 
			
		||||
				this.idAttrShow = true
 | 
			
		||||
			} else {
 | 
			
		||||
				this.idAttrShow = false
 | 
			
		||||
        this.idAttrShow = false
 | 
			
		||||
        getMaterialCode().then(res => {
 | 
			
		||||
          this.dataForm.code = res.data
 | 
			
		||||
        })
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			this.$nextTick(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,8 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
          // type: 'separate',
 | 
			
		||||
          type: this.$auth.hasPermi('extend:process-equ-material-bom:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('extend:process-equ-material-bom:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @Author: zwq
 | 
			
		||||
 * @Date: 2021-11-18 14:16:25
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @LastEditTime: 2024-03-25 14:07:31
 | 
			
		||||
 * @LastEditTime: 2024-04-11 13:35:42
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
@@ -72,7 +72,8 @@
 | 
			
		||||
        <div v-if="!isdetail" class="action_btn">
 | 
			
		||||
          <template>
 | 
			
		||||
            <span style="display: inline-block;">
 | 
			
		||||
              <el-button type="text" @click="addNew()" icon="el-icon-plus">新增</el-button>
 | 
			
		||||
              <el-button v-if="this.$auth.hasPermi('extend:process-equ-value-bom-det:add')" type="text"
 | 
			
		||||
                @click="addNew()" icon="el-icon-plus">新增</el-button>
 | 
			
		||||
            </span>
 | 
			
		||||
          </template>
 | 
			
		||||
        </div>
 | 
			
		||||
@@ -111,11 +112,15 @@ import attrAdd from './attr-add';
 | 
			
		||||
 | 
			
		||||
const tableBtn = [
 | 
			
		||||
	{
 | 
			
		||||
		type: 'edit',
 | 
			
		||||
    type: this.$auth.hasPermi('extend:process-equ-value-bom-det:update')
 | 
			
		||||
      ? 'edit'
 | 
			
		||||
      : '',
 | 
			
		||||
		btnName: '编辑',
 | 
			
		||||
	},
 | 
			
		||||
	{
 | 
			
		||||
		type: 'delete',
 | 
			
		||||
    type: this.$auth.hasPermi('extend:process-equ-value-bom-det:delete')
 | 
			
		||||
      ? 'delete'
 | 
			
		||||
      : '',
 | 
			
		||||
		btnName: '删除',
 | 
			
		||||
	},
 | 
			
		||||
];
 | 
			
		||||
@@ -156,7 +161,9 @@ const tableProps = [
 | 
			
		||||
 | 
			
		||||
const topBtnConfig = [
 | 
			
		||||
  {
 | 
			
		||||
    type: 'add',
 | 
			
		||||
    type: this.$auth.hasPermi('extend:process-equ-value-bom-det:add')
 | 
			
		||||
      ? 'add'
 | 
			
		||||
      : '',
 | 
			
		||||
    btnName: 'btn.add'
 | 
			
		||||
  }
 | 
			
		||||
]
 | 
			
		||||
@@ -246,9 +253,7 @@ export default {
 | 
			
		||||
        // console.log(response);
 | 
			
		||||
        this.equipmentList = res.data
 | 
			
		||||
      })
 | 
			
		||||
      getValueCode().then(res => {
 | 
			
		||||
        this.dataForm.code = res.data
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
    },
 | 
			
		||||
		handleClick(raw) {
 | 
			
		||||
			if (raw.type === 'delete') {
 | 
			
		||||
@@ -325,7 +330,10 @@ export default {
 | 
			
		||||
			if (id) {
 | 
			
		||||
				this.idAttrShow = true
 | 
			
		||||
			} else {
 | 
			
		||||
				this.idAttrShow = false
 | 
			
		||||
        this.idAttrShow = false
 | 
			
		||||
        getValueCode().then(res => {
 | 
			
		||||
          this.dataForm.code = res.data
 | 
			
		||||
        })
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			this.$nextTick(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,8 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
          // type: 'separate',
 | 
			
		||||
          type: this.$auth.hasPermi('extend:process-equ-value-bom:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('extend:process-equ-value-bom:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,46 +1,52 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <el-switch v-model="state" type="text" size="small" :disabled="readonly" @change="changeHandler" />
 | 
			
		||||
	<el-switch
 | 
			
		||||
		v-hasPermi="['base:group-team:edit-worker']"
 | 
			
		||||
		v-model="state"
 | 
			
		||||
		type="text"
 | 
			
		||||
		size="small"
 | 
			
		||||
		:disabled="readonly"
 | 
			
		||||
		@change="changeHandler" />
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({})
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      state: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  computed: {
 | 
			
		||||
    readonly() {
 | 
			
		||||
      return !!this.injectData.readonly
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.mapToState()
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    mapToState() {
 | 
			
		||||
      if (this.injectData.prop === 'enabled') {
 | 
			
		||||
        this.state = this.injectData.enabled === 1 ? true : false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    changeHandler() {
 | 
			
		||||
      let params = {}
 | 
			
		||||
      let payload = {}
 | 
			
		||||
      params.name = 'state'
 | 
			
		||||
      payload.id = this.injectData.id
 | 
			
		||||
      payload.enabled = this.state ? '1' : '0'
 | 
			
		||||
      payload.code = this.injectData.code
 | 
			
		||||
      payload.name = this.injectData.name
 | 
			
		||||
      payload.leaderId = this.injectData.leaderId
 | 
			
		||||
      params.payload = payload
 | 
			
		||||
      this.$emit('emitData', params)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
	props: {
 | 
			
		||||
		injectData: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			default: () => ({}),
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			state: false,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	computed: {
 | 
			
		||||
		readonly() {
 | 
			
		||||
			return !!this.injectData.readonly;
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.mapToState();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		mapToState() {
 | 
			
		||||
			if (this.injectData.prop === 'enabled') {
 | 
			
		||||
				this.state = this.injectData.enabled === 1 ? true : false;
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		changeHandler() {
 | 
			
		||||
			let params = {};
 | 
			
		||||
			let payload = {};
 | 
			
		||||
			params.name = 'state';
 | 
			
		||||
			payload.id = this.injectData.id;
 | 
			
		||||
			payload.enabled = this.state ? '1' : '0';
 | 
			
		||||
			payload.code = this.injectData.code;
 | 
			
		||||
			payload.name = this.injectData.name;
 | 
			
		||||
			payload.leaderId = this.injectData.leaderId;
 | 
			
		||||
			params.payload = payload;
 | 
			
		||||
			this.$emit('emitData', params);
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,41 +1,51 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="workerOperate">
 | 
			
		||||
    <div class="operateBtn">
 | 
			
		||||
      <span class="view" v-if="this.$auth.hasPermi('base:group-team:view-worker')" @click="emitParams('view')">查看</span>
 | 
			
		||||
      <span class="edit" v-if="this.$auth.hasPermi('base:group-team:edit-worker')" @click="emitParams('edit')">编辑</span>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
	<div class="workerOperate">
 | 
			
		||||
		<div class="operateBtn">
 | 
			
		||||
			<span
 | 
			
		||||
				class="view"
 | 
			
		||||
				v-hasPermi="['base:group-team:view-worker']"
 | 
			
		||||
				@click="emitParams('view')">
 | 
			
		||||
				查看
 | 
			
		||||
			</span>
 | 
			
		||||
			<span
 | 
			
		||||
				class="edit"
 | 
			
		||||
				v-hasPermi="['base:group-team:edit-worker']"
 | 
			
		||||
				@click="emitParams('edit')">
 | 
			
		||||
				编辑
 | 
			
		||||
			</span>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'WorkerOperate',
 | 
			
		||||
  props: {
 | 
			
		||||
    injectData: {
 | 
			
		||||
      type: Object,
 | 
			
		||||
      default: () => ({})
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    emitParams(data) {
 | 
			
		||||
      let params = {}
 | 
			
		||||
      params.name = data
 | 
			
		||||
      params.payload = this.injectData
 | 
			
		||||
      this.$emit('emitData', params)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
	name: 'WorkerOperate',
 | 
			
		||||
	props: {
 | 
			
		||||
		injectData: {
 | 
			
		||||
			type: Object,
 | 
			
		||||
			default: () => ({}),
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		emitParams(data) {
 | 
			
		||||
			let params = {};
 | 
			
		||||
			params.name = data;
 | 
			
		||||
			params.payload = this.injectData;
 | 
			
		||||
			this.$emit('emitData', params);
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
.workerOperate {
 | 
			
		||||
  .operateBtn{
 | 
			
		||||
    color: #0B58FF;
 | 
			
		||||
    .view {
 | 
			
		||||
      margin-right: 10px;
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
    .edit {
 | 
			
		||||
      cursor: pointer;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
	.operateBtn {
 | 
			
		||||
		color: #0b58ff;
 | 
			
		||||
		.view {
 | 
			
		||||
			margin-right: 10px;
 | 
			
		||||
			cursor: pointer;
 | 
			
		||||
		}
 | 
			
		||||
		.edit {
 | 
			
		||||
			cursor: pointer;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -125,7 +125,7 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
					type: this.$auth.hasPermi('base:group-team:create') ? 'separate' : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:group-team:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -88,7 +88,7 @@ export default {
 | 
			
		||||
			workOrderList: [],
 | 
			
		||||
			workOrderName: '',
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:group-team-view:detail')
 | 
			
		||||
				this.$auth.hasPermi('monitoring:group-team-scheduling:query')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'detail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
 
 | 
			
		||||
@@ -97,7 +97,7 @@ export default {
 | 
			
		||||
			},
 | 
			
		||||
			tableProps,
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:team-production:detail')
 | 
			
		||||
				this.$auth.hasPermi('monitoring:group-team-scheduling:query')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'productionDetail',
 | 
			
		||||
							btnName: '查看',
 | 
			
		||||
 
 | 
			
		||||
@@ -173,12 +173,24 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:order-group:create')
 | 
			
		||||
					type: this.$auth.hasPermiAnd([
 | 
			
		||||
						'base:order-group:create',
 | 
			
		||||
						'base:core-product:query',
 | 
			
		||||
						'base:core-customer:query',
 | 
			
		||||
						'base:order:query',
 | 
			
		||||
					])
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:order-group:create') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermiAnd([
 | 
			
		||||
						'base:order-group:create',
 | 
			
		||||
						'base:core-product:query',
 | 
			
		||||
						'base:core-customer:query',
 | 
			
		||||
						'base:order:query',
 | 
			
		||||
					])
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
@@ -197,7 +209,10 @@ export default {
 | 
			
		||||
			tableProps,
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:bind')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order:query',
 | 
			
		||||
					'base:order-con-group-order:create',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'bind',
 | 
			
		||||
							btnName: '绑定',
 | 
			
		||||
@@ -214,7 +229,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:complete')
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'complete',
 | 
			
		||||
							btnName: '完成',
 | 
			
		||||
@@ -231,7 +246,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:termination')
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'termination',
 | 
			
		||||
							btnName: '终止',
 | 
			
		||||
@@ -248,7 +263,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:cancel')
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'cancel',
 | 
			
		||||
							btnName: '作废',
 | 
			
		||||
@@ -265,11 +280,17 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				{
 | 
			
		||||
					type: 'detail',
 | 
			
		||||
					btnName: '详情',
 | 
			
		||||
				},
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:edit')
 | 
			
		||||
				this.$auth.hasPermi('base:order-group:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'detail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order-group:update',
 | 
			
		||||
					'base:core-product:query',
 | 
			
		||||
					'base:core-customer:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
			<method-btn
 | 
			
		||||
				v-if="tableBtn.length"
 | 
			
		||||
				slot="handleBtn"
 | 
			
		||||
				:width="290"
 | 
			
		||||
				:width="250"
 | 
			
		||||
				label="操作"
 | 
			
		||||
				:method-list="tableBtn"
 | 
			
		||||
				@clickBtn="handleClick" />
 | 
			
		||||
@@ -169,12 +169,22 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:order-manage:create')
 | 
			
		||||
					type: this.$auth.hasPermiAnd([
 | 
			
		||||
						'base:order:query',
 | 
			
		||||
						'base:core-product:query',
 | 
			
		||||
						'base:order:create',
 | 
			
		||||
					])
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:order-manage:create') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermiAnd([
 | 
			
		||||
						'base:order:query',
 | 
			
		||||
						'base:core-product:query',
 | 
			
		||||
						'base:order:create',
 | 
			
		||||
					])
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
@@ -210,7 +220,14 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:bindWorkOrder')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order:update',
 | 
			
		||||
					'base:core-product:query',
 | 
			
		||||
					'base:production-line:query',
 | 
			
		||||
					'extend:process-flow:query',
 | 
			
		||||
					'base:core-work-order:query',
 | 
			
		||||
					'base:order:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'bind',
 | 
			
		||||
							btnName: '绑定',
 | 
			
		||||
@@ -227,7 +244,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:complete')
 | 
			
		||||
				this.$auth.hasPermi('base:order:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'complete',
 | 
			
		||||
							btnName: '完成',
 | 
			
		||||
@@ -244,7 +261,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:termination')
 | 
			
		||||
				this.$auth.hasPermi('base:order:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'termination',
 | 
			
		||||
							btnName: '终止',
 | 
			
		||||
@@ -261,7 +278,7 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:cancel')
 | 
			
		||||
				this.$auth.hasPermi('base:order:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'cancel',
 | 
			
		||||
							btnName: '作废',
 | 
			
		||||
@@ -278,13 +295,20 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:detail')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order:query',
 | 
			
		||||
					'extend:process-flow:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'detail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-manage:edit')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order:query',
 | 
			
		||||
					'base:core-product:query',
 | 
			
		||||
					'base:order:update',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,168 +1,223 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div>
 | 
			
		||||
    <div class="boxTitle">
 | 
			
		||||
      <span class="blueTitle"></span>
 | 
			
		||||
      <span>各集团订单环形图</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="chartBox" id='orderChartBox' v-show='chartList.length'>
 | 
			
		||||
      <div class="chartItem" v-for="(item, index) in chartList" :key='index' :style="{width: 388*beilv+'px',height: 286*beilv+'px',padding:14*beilv+'px',marginRight:9*beilv+'px',marginBottom:9*beilv+'px'}">
 | 
			
		||||
        <div class="topTitle" :style="{fontSize: 14 * beilv + 'px'}">
 | 
			
		||||
          <svg-icon icon-class="order-monitoring" :style="{fontSize: 16*beilv+'px'}"/>
 | 
			
		||||
          <span class="orderName" :style="{paddingRight:8*beilv+'px',marginRight:8*beilv+'px'}">{{item.orderGroupName}}</span>
 | 
			
		||||
          <span>订单计划数量{{item.num}}</span>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div
 | 
			
		||||
          :id="item.id"
 | 
			
		||||
          :style="{width: 166*beilv+'px',height: 166*beilv+'px',margin: 'auto'}"
 | 
			
		||||
        ></div>
 | 
			
		||||
        <div class="legend" :style="{height: 54 * beilv + 'px', marginTop: 10*beilv+'px'}">
 | 
			
		||||
          <div class="legendItem" v-for="(subItem, i) in item.order" :key='i' :style="{paddingRight:9*beilv+'px',marginRight:9*beilv+'px'}">
 | 
			
		||||
            <span class="itemNum" :style="{fontSize: 18 * beilv + 'px'}">{{subItem.value}}</span>
 | 
			
		||||
            <div>
 | 
			
		||||
              <span class="itemName" :style="{fontSize: 14 * beilv + 'px'}">
 | 
			
		||||
                <span class="smallBlock" :style="{backgroundColor:subItem.color,width:8*beilv+'px',height:8*beilv+'px'}"></span>
 | 
			
		||||
                {{subItem.name}}
 | 
			
		||||
              </span>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <!-- 空图 -->
 | 
			
		||||
    <div class="no-data-bg" v-show='!chartList.length'></div>
 | 
			
		||||
  </div>
 | 
			
		||||
	<div>
 | 
			
		||||
		<div class="boxTitle">
 | 
			
		||||
			<span class="blueTitle"></span>
 | 
			
		||||
			<span>各集团订单环形图</span>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div
 | 
			
		||||
			class="chartBox"
 | 
			
		||||
			id="orderChartBox"
 | 
			
		||||
			v-show="chartList.length">
 | 
			
		||||
			<div
 | 
			
		||||
				class="chartItem"
 | 
			
		||||
				v-for="(item, index) in chartList"
 | 
			
		||||
				:key="index"
 | 
			
		||||
				:style="{
 | 
			
		||||
					width: 388 * beilv + 'px',
 | 
			
		||||
					height: 286 * beilv + 'px',
 | 
			
		||||
					padding: 14 * beilv + 'px',
 | 
			
		||||
					marginRight: 9 * beilv + 'px',
 | 
			
		||||
					marginBottom: 9 * beilv + 'px',
 | 
			
		||||
				}">
 | 
			
		||||
				<div
 | 
			
		||||
					class="topTitle"
 | 
			
		||||
					:style="{ fontSize: 14 * beilv + 'px' }">
 | 
			
		||||
					<svg-icon
 | 
			
		||||
						icon-class="order-monitoring"
 | 
			
		||||
						:style="{ fontSize: 16 * beilv + 'px' }" />
 | 
			
		||||
					<span
 | 
			
		||||
						class="orderName"
 | 
			
		||||
						:style="{
 | 
			
		||||
							paddingRight: 8 * beilv + 'px',
 | 
			
		||||
							marginRight: 8 * beilv + 'px',
 | 
			
		||||
						}">
 | 
			
		||||
						{{ item.orderGroupName }}
 | 
			
		||||
					</span>
 | 
			
		||||
					<span>订单计划数量{{ item.num }}</span>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div
 | 
			
		||||
					:id="item.id"
 | 
			
		||||
					:style="{
 | 
			
		||||
						width: 166 * beilv + 'px',
 | 
			
		||||
						height: 166 * beilv + 'px',
 | 
			
		||||
						margin: 'auto',
 | 
			
		||||
					}"></div>
 | 
			
		||||
				<div
 | 
			
		||||
					class="legend"
 | 
			
		||||
					:style="{ height: 54 * beilv + 'px', marginTop: 10 * beilv + 'px' }">
 | 
			
		||||
					<div
 | 
			
		||||
						class="legendItem"
 | 
			
		||||
						v-for="(subItem, i) in item.order"
 | 
			
		||||
						:key="i"
 | 
			
		||||
						:style="{
 | 
			
		||||
							paddingRight: 9 * beilv + 'px',
 | 
			
		||||
							marginRight: 9 * beilv + 'px',
 | 
			
		||||
						}">
 | 
			
		||||
						<span
 | 
			
		||||
							class="itemNum"
 | 
			
		||||
							:style="{ fontSize: 18 * beilv + 'px' }">
 | 
			
		||||
							{{ subItem.value }}
 | 
			
		||||
						</span>
 | 
			
		||||
						<div>
 | 
			
		||||
							<span
 | 
			
		||||
								class="itemName"
 | 
			
		||||
								:style="{ fontSize: 14 * beilv + 'px' }">
 | 
			
		||||
								<span
 | 
			
		||||
									class="smallBlock"
 | 
			
		||||
									:style="{
 | 
			
		||||
										backgroundColor: subItem.color,
 | 
			
		||||
										width: 8 * beilv + 'px',
 | 
			
		||||
										height: 8 * beilv + 'px',
 | 
			
		||||
									}"></span>
 | 
			
		||||
								{{ subItem.name }}
 | 
			
		||||
							</span>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<!-- 空图 -->
 | 
			
		||||
		<div
 | 
			
		||||
			class="no-data-bg"
 | 
			
		||||
			v-show="!chartList.length"></div>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import * as echarts from 'echarts'
 | 
			
		||||
import { debounce } from '@/utils/debounce'
 | 
			
		||||
import * as echarts from 'echarts';
 | 
			
		||||
import { debounce } from '@/utils/debounce';
 | 
			
		||||
export default {
 | 
			
		||||
  name: 'MonitoringRingCharts',
 | 
			
		||||
  props: {
 | 
			
		||||
    chartList: {
 | 
			
		||||
      type: Array,
 | 
			
		||||
      default: () => {
 | 
			
		||||
        return []
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      myChart: [],
 | 
			
		||||
      beilv: 1,
 | 
			
		||||
      canvasReset: ''
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  mounted() {
 | 
			
		||||
    this.beilv = document.getElementById('orderChartBox').offsetWidth / 1610
 | 
			
		||||
    this.canvasReset = debounce(() => {
 | 
			
		||||
      this.initChart()
 | 
			
		||||
    }, 500)
 | 
			
		||||
    window.addEventListener('resize', () => {
 | 
			
		||||
      this.beilv = document.getElementById('orderChartBox').offsetWidth / 1610
 | 
			
		||||
      this.canvasReset()
 | 
			
		||||
    })
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    // 饼图
 | 
			
		||||
    initChart() {
 | 
			
		||||
      if (this.chartList.length <= 0) {
 | 
			
		||||
        return false
 | 
			
		||||
      }
 | 
			
		||||
      // 销毁实例
 | 
			
		||||
      for (let j = 0;j < this.chartList.length; j++) {
 | 
			
		||||
        if (this.myChart[j]) {
 | 
			
		||||
          this.myChart[j].dispose() // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      for (let i = 0; i < this.chartList.length; i++) {
 | 
			
		||||
        var chartDom = document.getElementById(this.chartList[i].id);
 | 
			
		||||
        this.myChart[i] = echarts.init(chartDom);
 | 
			
		||||
        let colorList = []
 | 
			
		||||
        this.chartList[i].order.map(item => {
 | 
			
		||||
          colorList.push(item.color)
 | 
			
		||||
        })
 | 
			
		||||
        let percentage = (this.chartList[i].sunNum/this.chartList[i].num*100).toFixed(0)
 | 
			
		||||
        var option = {
 | 
			
		||||
          color: colorList,
 | 
			
		||||
          series: [
 | 
			
		||||
            {
 | 
			
		||||
              name: 'Access From',
 | 
			
		||||
              type: 'pie',
 | 
			
		||||
              radius: ['75%', '95%'],
 | 
			
		||||
              avoidLabelOverlap: false,
 | 
			
		||||
              itemStyle: {
 | 
			
		||||
                borderRadius: 5,
 | 
			
		||||
                borderColor: '#fff',
 | 
			
		||||
                borderWidth: 2
 | 
			
		||||
              },
 | 
			
		||||
              label: {
 | 
			
		||||
                show: true,
 | 
			
		||||
                position: 'center',
 | 
			
		||||
                color: '#000',
 | 
			
		||||
                formatter: [
 | 
			
		||||
                    '{a|'+percentage+'%}',
 | 
			
		||||
                    '{b|生产'+this.chartList[i].sunNum+'}'
 | 
			
		||||
                ].join('\n\n'),
 | 
			
		||||
                rich: {
 | 
			
		||||
                  a: {
 | 
			
		||||
                      fontSize: this.beilv*24 +'px'
 | 
			
		||||
                  },
 | 
			
		||||
                  b: {
 | 
			
		||||
                      fontSize: this.beilv*12 +'px'
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              },
 | 
			
		||||
              emphasis: {
 | 
			
		||||
                disabled: true
 | 
			
		||||
              },
 | 
			
		||||
              labelLine: {
 | 
			
		||||
                show: false
 | 
			
		||||
              },
 | 
			
		||||
              data: this.chartList[i].order
 | 
			
		||||
            }
 | 
			
		||||
          ]
 | 
			
		||||
        };
 | 
			
		||||
        option && this.myChart[i].setOption(option)
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
	name: 'MonitoringRingCharts',
 | 
			
		||||
	props: {
 | 
			
		||||
		chartList: {
 | 
			
		||||
			type: Array,
 | 
			
		||||
			default: () => {
 | 
			
		||||
				return [];
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			myChart: [],
 | 
			
		||||
			beilv: 1,
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	mounted() {
 | 
			
		||||
		this.canvasReset();
 | 
			
		||||
		window.addEventListener('resize', this.canvasReset);
 | 
			
		||||
	},
 | 
			
		||||
	destroyed() {
 | 
			
		||||
		window.removeEventListener('resize', this.canvasReset);
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		canvasReset() {
 | 
			
		||||
			debounce(() => {
 | 
			
		||||
				this.initChart();
 | 
			
		||||
			}, 500)();
 | 
			
		||||
			this.beilv = document.getElementById('orderChartBox').offsetWidth / 1610;
 | 
			
		||||
		},
 | 
			
		||||
		// 饼图
 | 
			
		||||
		initChart() {
 | 
			
		||||
			if (this.chartList.length <= 0) {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
			// 销毁实例
 | 
			
		||||
			for (let j = 0; j < this.chartList.length; j++) {
 | 
			
		||||
				if (this.myChart[j]) {
 | 
			
		||||
					this.myChart[j].dispose(); // 页面多次刷新会出现警告,Dom已经初始化了一个实例,这是销毁实例
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			for (let i = 0; i < this.chartList.length; i++) {
 | 
			
		||||
				var chartDom = document.getElementById(this.chartList[i].id);
 | 
			
		||||
				this.myChart[i] = echarts.init(chartDom);
 | 
			
		||||
				let colorList = [];
 | 
			
		||||
				this.chartList[i].order.map((item) => {
 | 
			
		||||
					colorList.push(item.color);
 | 
			
		||||
				});
 | 
			
		||||
				let percentage = (
 | 
			
		||||
					(this.chartList[i].sunNum / this.chartList[i].num) *
 | 
			
		||||
					100
 | 
			
		||||
				).toFixed(0);
 | 
			
		||||
				var option = {
 | 
			
		||||
					color: colorList,
 | 
			
		||||
					series: [
 | 
			
		||||
						{
 | 
			
		||||
							name: 'Access From',
 | 
			
		||||
							type: 'pie',
 | 
			
		||||
							radius: ['75%', '95%'],
 | 
			
		||||
							avoidLabelOverlap: false,
 | 
			
		||||
							itemStyle: {
 | 
			
		||||
								borderRadius: 5,
 | 
			
		||||
								borderColor: '#fff',
 | 
			
		||||
								borderWidth: 2,
 | 
			
		||||
							},
 | 
			
		||||
							label: {
 | 
			
		||||
								show: true,
 | 
			
		||||
								position: 'center',
 | 
			
		||||
								color: '#000',
 | 
			
		||||
								formatter: [
 | 
			
		||||
									'{a|' + percentage + '%}',
 | 
			
		||||
									'{b|生产' + this.chartList[i].sunNum + '}',
 | 
			
		||||
								].join('\n\n'),
 | 
			
		||||
								rich: {
 | 
			
		||||
									a: {
 | 
			
		||||
										fontSize: this.beilv * 24 + 'px',
 | 
			
		||||
									},
 | 
			
		||||
									b: {
 | 
			
		||||
										fontSize: this.beilv * 12 + 'px',
 | 
			
		||||
									},
 | 
			
		||||
								},
 | 
			
		||||
							},
 | 
			
		||||
							emphasis: {
 | 
			
		||||
								disabled: true,
 | 
			
		||||
							},
 | 
			
		||||
							labelLine: {
 | 
			
		||||
								show: false,
 | 
			
		||||
							},
 | 
			
		||||
							data: this.chartList[i].order,
 | 
			
		||||
						},
 | 
			
		||||
					],
 | 
			
		||||
				};
 | 
			
		||||
				option && this.myChart[i].setOption(option);
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
<style lang='scss' scoped>
 | 
			
		||||
.chartBox {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  padding-right: 6px;
 | 
			
		||||
  height: calc(100vh - 356px);
 | 
			
		||||
  display: flex;
 | 
			
		||||
  flex-flow: row wrap;
 | 
			
		||||
  overflow: auto;
 | 
			
		||||
  align-content: flex-start;
 | 
			
		||||
  .chartItem {
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
    border: 1px solid #CACACA;
 | 
			
		||||
    .topTitle {
 | 
			
		||||
      margin-bottom: 10px;
 | 
			
		||||
      .orderName {
 | 
			
		||||
        border-right: 1px solid #CACACA;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    .legend {
 | 
			
		||||
      text-align: center;
 | 
			
		||||
      white-space: nowrap;
 | 
			
		||||
      overflow: auto;
 | 
			
		||||
      .legendItem {
 | 
			
		||||
        display: inline-block;
 | 
			
		||||
        border-right: 1px solid #E8E8E8;
 | 
			
		||||
        .itemName {
 | 
			
		||||
          .smallBlock {
 | 
			
		||||
            display: inline-block;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      .legendItem:last-child {
 | 
			
		||||
        border: none;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	padding-right: 6px;
 | 
			
		||||
	height: calc(100vh - 356px);
 | 
			
		||||
	display: flex;
 | 
			
		||||
	flex-flow: row wrap;
 | 
			
		||||
	overflow: auto;
 | 
			
		||||
	align-content: flex-start;
 | 
			
		||||
	.chartItem {
 | 
			
		||||
		border-radius: 8px;
 | 
			
		||||
		border: 1px solid #cacaca;
 | 
			
		||||
		.topTitle {
 | 
			
		||||
			margin-bottom: 10px;
 | 
			
		||||
			.orderName {
 | 
			
		||||
				border-right: 1px solid #cacaca;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		.legend {
 | 
			
		||||
			text-align: center;
 | 
			
		||||
			white-space: nowrap;
 | 
			
		||||
			overflow: auto;
 | 
			
		||||
			.legendItem {
 | 
			
		||||
				display: inline-block;
 | 
			
		||||
				border-right: 1px solid #e8e8e8;
 | 
			
		||||
				.itemName {
 | 
			
		||||
					.smallBlock {
 | 
			
		||||
						display: inline-block;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			.legendItem:last-child {
 | 
			
		||||
				border: none;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
</style>
 | 
			
		||||
@@ -181,7 +181,10 @@ export default {
 | 
			
		||||
			list: [],
 | 
			
		||||
			total: 0,
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:order-completion-monitoring:orderDet')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:order:query',
 | 
			
		||||
					'extend:process-flow:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'orderDetail',
 | 
			
		||||
							btnName: '详情',
 | 
			
		||||
@@ -198,7 +201,11 @@ export default {
 | 
			
		||||
							},
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:order-completion-monitoring:qualityDet')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:quality-inspection-record:query',
 | 
			
		||||
					'base:core-product:query',
 | 
			
		||||
					'base:core-work-order:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'qualityDetail',
 | 
			
		||||
							btnName: '质量',
 | 
			
		||||
 
 | 
			
		||||
@@ -62,7 +62,9 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-btn:create')
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:quality-inspection-box-btn:create')
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ export default {
 | 
			
		||||
          param: 'nickName',
 | 
			
		||||
        },
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-permissions:query')
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-btn-auth:query')
 | 
			
		||||
            ? 'button'
 | 
			
		||||
            : '',
 | 
			
		||||
					btnName: '查询',
 | 
			
		||||
@@ -74,10 +74,12 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-btn-auth:create')
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-permissions:create')
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-box-btn-auth:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
@@ -87,13 +89,13 @@ export default {
 | 
			
		||||
				},
 | 
			
		||||
			],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
        this.$auth.hasPermi('base:quality-inspection-box-permissions:update')
 | 
			
		||||
        this.$auth.hasPermi('base:quality-inspection-box-btn-auth:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '修改',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
        this.$auth.hasPermi('base:quality-inspection-box-permissions:delete')
 | 
			
		||||
        this.$auth.hasPermi('base:quality-inspection-box-btn-auth:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-12-08 13:46:17
 | 
			
		||||
 * @LastEditTime: 2024-03-25 08:50:25
 | 
			
		||||
 * @LastEditTime: 2024-04-11 15:25:51
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
@@ -73,31 +73,45 @@
 | 
			
		||||
          </el-form-item>
 | 
			
		||||
        </el-row>
 | 
			
		||||
        <el-row :gutter="24" v-for="(item,index) in ingredientList" :key="item.id">
 | 
			
		||||
          <el-col :span="6">
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item label="成分">
 | 
			
		||||
              {{ item.name }}
 | 
			
		||||
              {{ item.checkName }}
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="6">
 | 
			
		||||
            <el-form-item :prop="'checkValueList.' + index + '.checkValue'" label="成分含量"
 | 
			
		||||
            <el-form-item :prop="'checkValueList.' + index + '.minCheckValue'" label="最小检测值"
 | 
			
		||||
              :rules="[{ required: true, message: '成分含量不能为空', trigger: 'blur' }]">
 | 
			
		||||
              <el-input oninput="value=value.replace(/[^\d]/g,'')" :disabled="isdetail"
 | 
			
		||||
                style="width: 90%;margin-right: 10px;" :max="item.maxValue" :min='item.minValue'
 | 
			
		||||
                v-model.number="dataForm.checkValueList[index].checkValue"
 | 
			
		||||
                @change="judgeValue(arguments[0],item.minValue,item.maxValue,index)"></el-input>
 | 
			
		||||
                v-model.number="dataForm.checkValueList[index].minCheckValue"
 | 
			
		||||
                @change="judgeMinValue(arguments[0],item.minValue,item.maxValue,index)"></el-input>
 | 
			
		||||
              <span v-if="dataForm.checkValueList[index].showIcon">
 | 
			
		||||
                <!-- <i class="el-icon-success"></i> -->
 | 
			
		||||
                <svg-icon v-if="dataForm.checkValueList[index].isStandard" icon-class="standards" />
 | 
			
		||||
                <svg-icon v-if="dataForm.checkValueList[index].isMinStandard" icon-class="standards" />
 | 
			
		||||
                <svg-icon v-else icon-class="noStandards" />
 | 
			
		||||
              </span>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="6">
 | 
			
		||||
            <el-form-item :prop="'checkValueList.' + index + '.maxCheckValue'" label="最大检测值"
 | 
			
		||||
              :rules="[{ required: true, message: '成分含量不能为空', trigger: 'blur' }]">
 | 
			
		||||
              <el-input oninput="value=value.replace(/[^\d]/g,'')" :disabled="isdetail"
 | 
			
		||||
                style="width: 90%;margin-right: 10px;" :max="item.maxValue" :min='item.minValue'
 | 
			
		||||
                v-model.number="dataForm.checkValueList[index].maxCheckValue"
 | 
			
		||||
                @change="judgeMaxValue(arguments[0],item.minValue,item.maxValue,index)"></el-input>
 | 
			
		||||
              <span v-if="dataForm.checkValueList[index].showIcon">
 | 
			
		||||
                <!-- <i class="el-icon-success"></i> -->
 | 
			
		||||
                <svg-icon v-if="dataForm.checkValueList[index].isMaxStandard" icon-class="standards" />
 | 
			
		||||
                <svg-icon v-else icon-class="noStandards" />
 | 
			
		||||
              </span>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item :prop="'checkValueList.' + index + '.minValue'" label="最小值">
 | 
			
		||||
              <el-input disabled style="width: 90%;margin-right: 10px;" v-model="item.minValue"></el-input>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="6">
 | 
			
		||||
          <el-col :span="4">
 | 
			
		||||
            <el-form-item :prop="'checkValueList.' + index + '.minValue'" label="最大值">
 | 
			
		||||
              <el-input disabled style="width: 90%;margin-right: 10px;" v-model="item.maxValue"></el-input>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
@@ -260,14 +274,25 @@ export default {
 | 
			
		||||
    onInput() {
 | 
			
		||||
      this.$forceUpdate();
 | 
			
		||||
    },
 | 
			
		||||
    judgeValue(val, minValue, maxValue, index) {
 | 
			
		||||
    judgeMinValue(val, minValue, maxValue, index) {
 | 
			
		||||
      // console.log(cal);
 | 
			
		||||
      if (val >= minValue && val <= maxValue) {
 | 
			
		||||
        console.log(val)
 | 
			
		||||
        this.dataForm.checkValueList[index].showIcon = true
 | 
			
		||||
        this.dataForm.checkValueList[index].isStandard = true
 | 
			
		||||
        this.dataForm.checkValueList[index].isMinStandard = true
 | 
			
		||||
      } else {
 | 
			
		||||
        this.dataForm.checkValueList[index].showIcon = true
 | 
			
		||||
        this.dataForm.checkValueList[index].isStandard = false
 | 
			
		||||
        this.dataForm.checkValueList[index].isMinStandard = false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    judgeMaxValue(val, minValue, maxValue, index) {
 | 
			
		||||
      if (val >= minValue && val <= maxValue) {
 | 
			
		||||
        console.log(val)
 | 
			
		||||
        this.dataForm.checkValueList[index].showIcon = true
 | 
			
		||||
        this.dataForm.checkValueList[index].isMaxStandard = true
 | 
			
		||||
      } else {
 | 
			
		||||
        this.dataForm.checkValueList[index].showIcon = true
 | 
			
		||||
        this.dataForm.checkValueList[index].isMaxStandard = false
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    handleClose() {
 | 
			
		||||
@@ -290,7 +315,7 @@ export default {
 | 
			
		||||
            checkerId: this.dataForm.checkerId,
 | 
			
		||||
            checkTime: this.dataForm.checkTime,
 | 
			
		||||
            appearance: this.dataForm.appearance,
 | 
			
		||||
            checkResult: this.dataForm.checkResult,
 | 
			
		||||
            // checkResult: this.dataForm.checkResult,
 | 
			
		||||
            materialGrade: this.dataForm.materialGrade,
 | 
			
		||||
            // checkValueList: [],
 | 
			
		||||
            checkResult: this.dataForm.checkResult,
 | 
			
		||||
@@ -304,7 +329,9 @@ export default {
 | 
			
		||||
                mainId: this.dataForm.id,
 | 
			
		||||
                id:ele.id,
 | 
			
		||||
                checkDetId: ele.checkDetId,
 | 
			
		||||
                checkValue: ele.checkValue
 | 
			
		||||
                minCheckValue: ele.minCheckValue,
 | 
			
		||||
                maxCheckValue: ele.maxCheckValue
 | 
			
		||||
 | 
			
		||||
              }))
 | 
			
		||||
            })
 | 
			
		||||
            Promise.all(array).then(res => {
 | 
			
		||||
@@ -333,7 +360,7 @@ export default {
 | 
			
		||||
          checkResult: this.dataForm.checkResult,
 | 
			
		||||
          materialGrade: this.dataForm.materialGrade,
 | 
			
		||||
          // checkValueList: [],
 | 
			
		||||
          checkResult: this.dataForm.checkResult,
 | 
			
		||||
          // checkResult: this.dataForm.checkResult,
 | 
			
		||||
          materialGrade: this.dataForm.materialGrade,
 | 
			
		||||
          remark:this.dataForm.remark
 | 
			
		||||
        }
 | 
			
		||||
@@ -341,11 +368,15 @@ export default {
 | 
			
		||||
          // this.idAttrShow = true;
 | 
			
		||||
          let array = []
 | 
			
		||||
          this.dataForm.checkValueList.forEach(ele => {
 | 
			
		||||
            array.push(this.createDet({
 | 
			
		||||
              mainId: response.data,
 | 
			
		||||
              checkDetId: ele.checkDetId,
 | 
			
		||||
              checkValue: ele.checkValue
 | 
			
		||||
            }))
 | 
			
		||||
            array.push(this.createDet([
 | 
			
		||||
              {
 | 
			
		||||
                mainId: response.data,
 | 
			
		||||
                checkDetId: ele.checkDetId,
 | 
			
		||||
                minCheckValue: ele.minCheckValue,
 | 
			
		||||
                maxCheckValue: ele.maxCheckValue
 | 
			
		||||
 | 
			
		||||
              }
 | 
			
		||||
            ]))
 | 
			
		||||
          })
 | 
			
		||||
          Promise.all(array).then(res => {
 | 
			
		||||
            this.$modal.msgSuccess("新增成功");
 | 
			
		||||
@@ -376,14 +407,17 @@ export default {
 | 
			
		||||
      getMaterialCheckList({
 | 
			
		||||
        materialId:val
 | 
			
		||||
      }).then((res) => {
 | 
			
		||||
        console.log('aaaaaaaa', res.data);
 | 
			
		||||
        this.ingredientList = res.data
 | 
			
		||||
        this.ingredientFlag = true
 | 
			
		||||
        this.dataForm.checkValueList = res.data.map((ele) => {
 | 
			
		||||
          return {
 | 
			
		||||
            mainId: null,
 | 
			
		||||
            checkDetId: ele.id,
 | 
			
		||||
            checkValue: null,
 | 
			
		||||
            isStandard: true,
 | 
			
		||||
            checkDetId: ele.checkDetId,
 | 
			
		||||
            minCheckValue:undefined,
 | 
			
		||||
            maxCheckValue: undefined,
 | 
			
		||||
            isMinStandard: true,
 | 
			
		||||
            isMaxStandard: true,
 | 
			
		||||
            showIcon:false,
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
@@ -477,28 +511,31 @@ export default {
 | 
			
		||||
          this.urlOptions.infoURL(id).then(response => {
 | 
			
		||||
            this.dataForm = response.data
 | 
			
		||||
            getMaterialCheckList({
 | 
			
		||||
              materialId: response.data.materialId
 | 
			
		||||
              materialId: response.data.materialId,
 | 
			
		||||
              mainId:id,
 | 
			
		||||
            }).then((res) => {
 | 
			
		||||
              console.log(res.data);
 | 
			
		||||
              let arr  = res.data
 | 
			
		||||
              valueList = arr.map((ele) => {
 | 
			
		||||
                // console.log(ele)
 | 
			
		||||
                return {
 | 
			
		||||
                  checkDetId:ele.id,
 | 
			
		||||
                  checkDetId: ele.checkDetId,
 | 
			
		||||
                  maxValue: ele.maxValue,
 | 
			
		||||
                  minValue: ele.minValue
 | 
			
		||||
                }
 | 
			
		||||
              })
 | 
			
		||||
              console.log(valueList);
 | 
			
		||||
              getQualityHotMaterialDetList({
 | 
			
		||||
                mainId: response.data.id
 | 
			
		||||
                mainId: response.data.id,
 | 
			
		||||
                materialId: response.data.materialId,
 | 
			
		||||
              }).then((result) => {
 | 
			
		||||
                this.ingredientList = result.data.map((ele) => {
 | 
			
		||||
                  return {
 | 
			
		||||
                    name: ele.checkName,
 | 
			
		||||
                    checkName: ele.checkName,
 | 
			
		||||
                    id: ele.id,
 | 
			
		||||
                    checkDetId: ele.checkDetId,
 | 
			
		||||
                    checkValue: ele.checkValue,
 | 
			
		||||
                    minCheckValue: ele.minCheckValue,
 | 
			
		||||
                    maxCheckValue: ele.maxCheckValue,
 | 
			
		||||
                    maxValue:null,
 | 
			
		||||
                    minValue: null
 | 
			
		||||
                  }
 | 
			
		||||
@@ -509,8 +546,10 @@ export default {
 | 
			
		||||
                    mainId: ele.mainId,
 | 
			
		||||
                    id: ele.id,
 | 
			
		||||
                    checkDetId: ele.checkDetId,
 | 
			
		||||
                    checkValue: ele.checkValue,
 | 
			
		||||
                    isStandard: true,
 | 
			
		||||
                    minCheckValue: ele.minCheckValue,
 | 
			
		||||
                    maxCheckValue: ele.maxCheckValue,
 | 
			
		||||
                    isMinStandard: true,
 | 
			
		||||
                    isMaxStandard: true,
 | 
			
		||||
                    showIcon: false,
 | 
			
		||||
                  }
 | 
			
		||||
                })
 | 
			
		||||
@@ -524,13 +563,21 @@ export default {
 | 
			
		||||
                })
 | 
			
		||||
                valueList.forEach((ele, index) => {
 | 
			
		||||
                 this.dataForm.checkValueList.forEach((item, i) => {
 | 
			
		||||
                   if (ele.checkDetId == item.checkDetId && item.checkValue >= ele.minValue && item.checkValue <= ele.maxValue) {
 | 
			
		||||
                   if (ele.checkDetId == item.checkDetId && item.minCheckValue >= ele.minValue && item.minCheckValue <= ele.maxValue) {
 | 
			
		||||
                     console.log(1111)
 | 
			
		||||
                     item.showIcon = true
 | 
			
		||||
                     item.isStandard = true
 | 
			
		||||
                     item.isMinStandard = true
 | 
			
		||||
                   } else {
 | 
			
		||||
                     item.showIcon = true
 | 
			
		||||
                     item.isStandard = false
 | 
			
		||||
                     item.isMinStandard = false
 | 
			
		||||
                   }
 | 
			
		||||
                   if (ele.checkDetId == item.checkDetId && item.maxCheckValue >= ele.minValue && item.maxCheckValue <= ele.maxValue) {
 | 
			
		||||
                     console.log(1111)
 | 
			
		||||
                     item.showIcon = true
 | 
			
		||||
                     item.isMaxStandard = true
 | 
			
		||||
                   } else {
 | 
			
		||||
                     item.showIcon = true
 | 
			
		||||
                     item.isMaxStandard = false
 | 
			
		||||
                   }
 | 
			
		||||
                  })
 | 
			
		||||
                })
 | 
			
		||||
 
 | 
			
		||||
@@ -140,8 +140,9 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-hot-material:create') ? 'separate' : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-hot-material:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,10 @@ export default {
 | 
			
		||||
				// 	name: 'reset',
 | 
			
		||||
				// },
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
          // type: 'separate',
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-det:create')
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:quality-inspection-det:create')
 | 
			
		||||
 
 | 
			
		||||
@@ -146,8 +146,11 @@ export default {
 | 
			
		||||
				// 	btnName: '重置',
 | 
			
		||||
				// 	name: 'reset',
 | 
			
		||||
				// },
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-inspection-type:create')
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:quality-inspection-type:create')
 | 
			
		||||
 
 | 
			
		||||
@@ -97,8 +97,9 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-det:create') ? 'separate' : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-det:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
<!--
 | 
			
		||||
 * @Author: zhp
 | 
			
		||||
 * @Date: 2023-11-06 15:15:30
 | 
			
		||||
 * @LastEditTime: 2024-03-22 17:13:16
 | 
			
		||||
 * @LastEditTime: 2024-04-09 15:14:08
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ import {
 | 
			
		||||
  getQualityScrapLogPage,
 | 
			
		||||
  deleteQualityScrapLog,
 | 
			
		||||
  getWorkOrderList,
 | 
			
		||||
  getTeamList
 | 
			
		||||
  // getTeamList
 | 
			
		||||
} from '@/api/base/qualityScrapLog';
 | 
			
		||||
 | 
			
		||||
const tableProps = [
 | 
			
		||||
@@ -124,8 +124,9 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-det:create') ? 'separate' : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-det:create') ? 'button' : '',
 | 
			
		||||
@@ -189,18 +190,18 @@ export default {
 | 
			
		||||
        // console.log(this.formConfig[0].selectOptions);
 | 
			
		||||
        // this.listQuery.total = response.data.total;
 | 
			
		||||
      })
 | 
			
		||||
      getTeamList().then((res) => {
 | 
			
		||||
        console.log(res);
 | 
			
		||||
        // console.log(response);
 | 
			
		||||
        this.formConfig[1].selectOptions = res.data.map((item) => {
 | 
			
		||||
          return {
 | 
			
		||||
            name: item.name,
 | 
			
		||||
            id: item.id
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        // console.log(this.formConfig[0].selectOptions);
 | 
			
		||||
        // this.listQuery.total = response.data.total;
 | 
			
		||||
      })
 | 
			
		||||
      // getTeamList().then((res) => {
 | 
			
		||||
      //   console.log(res);
 | 
			
		||||
      //   // console.log(response);
 | 
			
		||||
      //   this.formConfig[1].selectOptions = res.data.map((item) => {
 | 
			
		||||
      //     return {
 | 
			
		||||
      //       name: item.name,
 | 
			
		||||
      //       id: item.id
 | 
			
		||||
      //     }
 | 
			
		||||
      //   })
 | 
			
		||||
      //   // console.log(this.formConfig[0].selectOptions);
 | 
			
		||||
      //   // this.listQuery.total = response.data.total;
 | 
			
		||||
      // })
 | 
			
		||||
    },
 | 
			
		||||
    getDataList() {
 | 
			
		||||
      this.dataListLoading = true;
 | 
			
		||||
 
 | 
			
		||||
@@ -87,8 +87,9 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-type:create') ? 'separate' : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
          type: this.$auth.hasPermi('base:quality-scrap-type:create') ? 'button' : '',
 | 
			
		||||
 
 | 
			
		||||
@@ -269,6 +269,13 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi(
 | 
			
		||||
            'monitoring:equipment-traceability:export'
 | 
			
		||||
          )
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi(
 | 
			
		||||
            'monitoring:equipment-traceability:export'
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 * @Author: zwq
 | 
			
		||||
 * @Date: 2023-08-01 14:55:51
 | 
			
		||||
 * @LastEditors: zhp
 | 
			
		||||
 * @LastEditTime: 2024-04-07 16:19:18
 | 
			
		||||
 * @LastEditTime: 2024-04-10 16:31:48
 | 
			
		||||
 * @Description:
 | 
			
		||||
-->
 | 
			
		||||
<template>
 | 
			
		||||
@@ -161,6 +161,13 @@ export default {
 | 
			
		||||
        // 	type: 'separate',
 | 
			
		||||
        // 	type: this.$auth.hasPermi('base:product:create') ? 'separate' : '',
 | 
			
		||||
        // },
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi(
 | 
			
		||||
            'monitoring:materiel-date-from:export'
 | 
			
		||||
          )
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi('monitoring:materiel-date-from:export') ? 'button' : '',
 | 
			
		||||
        	btnName: '导出',
 | 
			
		||||
 
 | 
			
		||||
@@ -168,8 +168,13 @@ export default {
 | 
			
		||||
					name: 'search',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: 'separate',
 | 
			
		||||
        {
 | 
			
		||||
          type: this.$auth.hasPermi(
 | 
			
		||||
            'base:quality-inspection-record:create'
 | 
			
		||||
          )
 | 
			
		||||
            ? 'separate'
 | 
			
		||||
            : '',
 | 
			
		||||
					// type: 'separate',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi(
 | 
			
		||||
 
 | 
			
		||||
@@ -99,10 +99,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:voc:export') ? 'separate' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:voc:export') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
					name: 'export',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
 
 | 
			
		||||
@@ -103,10 +103,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:voc:create') ? 'separate' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:voc:create') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
@@ -124,13 +128,16 @@ export default {
 | 
			
		||||
			tableProps,
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:voc:update')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:environmental-check:update',
 | 
			
		||||
					'base:environmental-check:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:voc:delete')
 | 
			
		||||
				this.$auth.hasPermi('base:environmental-check:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
 
 | 
			
		||||
@@ -99,10 +99,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-gas:export') ? 'separate' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-gas:export') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
					name: 'export',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
 
 | 
			
		||||
@@ -103,10 +103,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-gas:create') ? 'separate' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-gas:create') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
@@ -124,13 +128,16 @@ export default {
 | 
			
		||||
			tableProps,
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:waste-gas:update')
 | 
			
		||||
				this.$auth.hasPermiAnd([
 | 
			
		||||
					'base:environmental-check:update',
 | 
			
		||||
					'base:environmental-check:query',
 | 
			
		||||
				])
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:waste-gas:delete')
 | 
			
		||||
				this.$auth.hasPermi('base:environmental-check:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
 
 | 
			
		||||
@@ -99,12 +99,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-water:export')
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-water:export') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check-record:export')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '导出',
 | 
			
		||||
					name: 'export',
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
 
 | 
			
		||||
@@ -103,12 +103,14 @@ export default {
 | 
			
		||||
					color: 'primary',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-water:create')
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'separate'
 | 
			
		||||
						: '',
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					type: this.$auth.hasPermi('base:waste-water:create') ? 'button' : '',
 | 
			
		||||
					type: this.$auth.hasPermi('base:environmental-check:create')
 | 
			
		||||
						? 'button'
 | 
			
		||||
						: '',
 | 
			
		||||
					btnName: '新增',
 | 
			
		||||
					name: 'add',
 | 
			
		||||
					color: 'success',
 | 
			
		||||
@@ -126,13 +128,13 @@ export default {
 | 
			
		||||
			tableProps,
 | 
			
		||||
			list: [],
 | 
			
		||||
			tableBtn: [
 | 
			
		||||
				this.$auth.hasPermi('base:waste-water:update')
 | 
			
		||||
				this.$auth.hasPermi('base:environmental-check:update')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'edit',
 | 
			
		||||
							btnName: '编辑',
 | 
			
		||||
					  }
 | 
			
		||||
					: undefined,
 | 
			
		||||
				this.$auth.hasPermi('base:waste-water:delete')
 | 
			
		||||
				this.$auth.hasPermi('base:environmental-check:delete')
 | 
			
		||||
					? {
 | 
			
		||||
							type: 'delete',
 | 
			
		||||
							btnName: '删除',
 | 
			
		||||
 
 | 
			
		||||
@@ -1,82 +1,194 @@
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="app-container">
 | 
			
		||||
    <!-- <doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
 | 
			
		||||
	<div class="app-container">
 | 
			
		||||
		<!-- <doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
 | 
			
		||||
    <doc-alert title="菜单路由" url="https://doc.iocoder.cn/vue2/route/" /> -->
 | 
			
		||||
    <!-- 搜索工作栏 -->
 | 
			
		||||
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
 | 
			
		||||
      <el-form-item label="菜单名称" prop="name">
 | 
			
		||||
        <el-input v-model="queryParams.name" placeholder="请输入菜单名称" clearable @keyup.enter.native="handleQuery"/>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="状态" prop="status">
 | 
			
		||||
        <el-select v-model="queryParams.status" placeholder="菜单状态" clearable>
 | 
			
		||||
          <el-option v-for="dict in statusDictDatas" :key="parseInt(dict.value)" :label="dict.label" :value="parseInt(dict.value)"/>
 | 
			
		||||
        </el-select>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item>
 | 
			
		||||
        <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
 | 
			
		||||
        <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
		<!-- 搜索工作栏 -->
 | 
			
		||||
		<el-form
 | 
			
		||||
			:model="queryParams"
 | 
			
		||||
			ref="queryForm"
 | 
			
		||||
			size="small"
 | 
			
		||||
			:inline="true"
 | 
			
		||||
			v-show="showSearch">
 | 
			
		||||
			<el-form-item
 | 
			
		||||
				label="菜单名称"
 | 
			
		||||
				prop="name">
 | 
			
		||||
				<el-input
 | 
			
		||||
					v-model="queryParams.name"
 | 
			
		||||
					placeholder="请输入菜单名称"
 | 
			
		||||
					clearable
 | 
			
		||||
					@keyup.enter.native="handleQuery" />
 | 
			
		||||
			</el-form-item>
 | 
			
		||||
			<el-form-item
 | 
			
		||||
				label="状态"
 | 
			
		||||
				prop="status">
 | 
			
		||||
				<el-select
 | 
			
		||||
					v-model="queryParams.status"
 | 
			
		||||
					placeholder="菜单状态"
 | 
			
		||||
					clearable>
 | 
			
		||||
					<el-option
 | 
			
		||||
						v-for="dict in statusDictDatas"
 | 
			
		||||
						:key="parseInt(dict.value)"
 | 
			
		||||
						:label="dict.label"
 | 
			
		||||
						:value="parseInt(dict.value)" />
 | 
			
		||||
				</el-select>
 | 
			
		||||
			</el-form-item>
 | 
			
		||||
			<el-form-item>
 | 
			
		||||
				<el-button
 | 
			
		||||
					type="primary"
 | 
			
		||||
					icon="el-icon-search"
 | 
			
		||||
					@click="handleQuery">
 | 
			
		||||
					搜索
 | 
			
		||||
				</el-button>
 | 
			
		||||
				<el-button
 | 
			
		||||
					icon="el-icon-refresh"
 | 
			
		||||
					@click="resetQuery">
 | 
			
		||||
					重置
 | 
			
		||||
				</el-button>
 | 
			
		||||
			</el-form-item>
 | 
			
		||||
		</el-form>
 | 
			
		||||
 | 
			
		||||
    <el-row :gutter="10" class="mb8">
 | 
			
		||||
      <el-col :span="1.5">
 | 
			
		||||
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
 | 
			
		||||
                   v-hasPermi="['system:menu:create']">新增</el-button>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <el-col :span="1.5">
 | 
			
		||||
        <el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
 | 
			
		||||
      </el-col>
 | 
			
		||||
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
 | 
			
		||||
    </el-row>
 | 
			
		||||
		<el-row
 | 
			
		||||
			:gutter="10"
 | 
			
		||||
			class="mb8">
 | 
			
		||||
			<el-col :span="1.5">
 | 
			
		||||
				<el-button
 | 
			
		||||
					type="primary"
 | 
			
		||||
					plain
 | 
			
		||||
					icon="el-icon-plus"
 | 
			
		||||
					size="mini"
 | 
			
		||||
					@click="handleAdd"
 | 
			
		||||
					v-hasPermi="['system:menu:create']">
 | 
			
		||||
					新增
 | 
			
		||||
				</el-button>
 | 
			
		||||
			</el-col>
 | 
			
		||||
			<el-col :span="1.5">
 | 
			
		||||
				<el-button
 | 
			
		||||
					type="info"
 | 
			
		||||
					plain
 | 
			
		||||
					icon="el-icon-sort"
 | 
			
		||||
					size="mini"
 | 
			
		||||
					@click="toggleExpandAll">
 | 
			
		||||
					展开/折叠
 | 
			
		||||
				</el-button>
 | 
			
		||||
			</el-col>
 | 
			
		||||
			<right-toolbar
 | 
			
		||||
				:showSearch.sync="showSearch"
 | 
			
		||||
				@queryTable="getList"></right-toolbar>
 | 
			
		||||
		</el-row>
 | 
			
		||||
 | 
			
		||||
    <el-table v-if="refreshTable" v-loading="loading" :data="menuList" row-key="id" :default-expand-all="isExpandAll"
 | 
			
		||||
              :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
 | 
			
		||||
      <el-table-column prop="name" label="菜单名称" :show-overflow-tooltip="true" width="250"></el-table-column>
 | 
			
		||||
      <!-- <el-table-column prop="icon" label="图标" align="center" width="100">
 | 
			
		||||
		<el-table
 | 
			
		||||
			v-if="refreshTable"
 | 
			
		||||
			v-loading="loading"
 | 
			
		||||
			:data="menuList"
 | 
			
		||||
			row-key="id"
 | 
			
		||||
			:default-expand-all="isExpandAll"
 | 
			
		||||
			:tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="name"
 | 
			
		||||
				label="菜单名称"
 | 
			
		||||
				:show-overflow-tooltip="true"
 | 
			
		||||
				width="250"></el-table-column>
 | 
			
		||||
			<!-- <el-table-column prop="icon" label="图标" align="center" width="100">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <svg-icon :icon-class="scope.row.icon" />
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column> -->
 | 
			
		||||
      <el-table-column prop="sort" label="排序" width="60"></el-table-column>
 | 
			
		||||
      <el-table-column prop="permission" label="权限标识" :show-overflow-tooltip="true" />
 | 
			
		||||
      <el-table-column prop="component" label="组件路径" :show-overflow-tooltip="true" />
 | 
			
		||||
      <el-table-column prop="componentName" label="组件名称" :show-overflow-tooltip="true" />
 | 
			
		||||
      <el-table-column prop="status" label="状态" width="80">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
 | 
			
		||||
        <template v-slot="scope">
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:menu:update']">修改</el-button>
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:menu:create']">新增</el-button>
 | 
			
		||||
          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
 | 
			
		||||
                     v-hasPermi="['system:menu:delete']">删除</el-button>
 | 
			
		||||
        </template>
 | 
			
		||||
      </el-table-column>
 | 
			
		||||
    </el-table>
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="sort"
 | 
			
		||||
				label="排序"
 | 
			
		||||
				width="60"></el-table-column>
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="permission"
 | 
			
		||||
				label="权限标识"
 | 
			
		||||
				:show-overflow-tooltip="true" />
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="component"
 | 
			
		||||
				label="组件路径"
 | 
			
		||||
				:show-overflow-tooltip="true" />
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="componentName"
 | 
			
		||||
				label="组件名称"
 | 
			
		||||
				:show-overflow-tooltip="true" />
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				prop="status"
 | 
			
		||||
				label="状态"
 | 
			
		||||
				width="80">
 | 
			
		||||
				<template v-slot="scope">
 | 
			
		||||
					<dict-tag
 | 
			
		||||
						:type="DICT_TYPE.COMMON_STATUS"
 | 
			
		||||
						:value="scope.row.status" />
 | 
			
		||||
				</template>
 | 
			
		||||
			</el-table-column>
 | 
			
		||||
			<el-table-column
 | 
			
		||||
				label="操作"
 | 
			
		||||
				align="center"
 | 
			
		||||
				class-name="small-padding fixed-width">
 | 
			
		||||
				<template v-slot="scope">
 | 
			
		||||
					<el-button
 | 
			
		||||
						size="mini"
 | 
			
		||||
						type="text"
 | 
			
		||||
						icon="el-icon-edit"
 | 
			
		||||
						@click="handleUpdate(scope.row)"
 | 
			
		||||
						v-hasPermi="['system:menu:update']">
 | 
			
		||||
						修改
 | 
			
		||||
					</el-button>
 | 
			
		||||
					<el-button
 | 
			
		||||
						size="mini"
 | 
			
		||||
						type="text"
 | 
			
		||||
						icon="el-icon-plus"
 | 
			
		||||
						@click="handleAdd(scope.row)"
 | 
			
		||||
						v-hasPermi="['system:menu:create']">
 | 
			
		||||
						新增
 | 
			
		||||
					</el-button>
 | 
			
		||||
					<el-button
 | 
			
		||||
						size="mini"
 | 
			
		||||
						type="text"
 | 
			
		||||
						icon="el-icon-delete"
 | 
			
		||||
						@click="handleDelete(scope.row)"
 | 
			
		||||
						v-hasPermi="['system:menu:delete']">
 | 
			
		||||
						删除
 | 
			
		||||
					</el-button>
 | 
			
		||||
				</template>
 | 
			
		||||
			</el-table-column>
 | 
			
		||||
		</el-table>
 | 
			
		||||
 | 
			
		||||
    <!-- 添加或修改菜单对话框 -->
 | 
			
		||||
    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
 | 
			
		||||
      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
 | 
			
		||||
        <el-row>
 | 
			
		||||
          <el-col :span="24">
 | 
			
		||||
            <el-form-item label="上级菜单">
 | 
			
		||||
              <treeselect v-model="form.parentId" :options="menuOptions" :normalizer="normalizer" :show-count="true"
 | 
			
		||||
                          placeholder="选择上级菜单"/>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="24">
 | 
			
		||||
            <el-form-item label="菜单类型" prop="type">
 | 
			
		||||
              <el-radio-group v-model="form.type">
 | 
			
		||||
                <el-radio v-for="dict in menuTypeDictDatas" :key="parseInt(dict.value)" :label="parseInt(dict.value)">
 | 
			
		||||
                  {{dict.label}}</el-radio>
 | 
			
		||||
              </el-radio-group>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <!-- <el-col :span="24">
 | 
			
		||||
		<!-- 添加或修改菜单对话框 -->
 | 
			
		||||
		<el-dialog
 | 
			
		||||
			:title="title"
 | 
			
		||||
			:visible.sync="open"
 | 
			
		||||
			width="800px"
 | 
			
		||||
			append-to-body>
 | 
			
		||||
			<el-form
 | 
			
		||||
				ref="form"
 | 
			
		||||
				:model="form"
 | 
			
		||||
				:rules="rules"
 | 
			
		||||
				label-width="100px">
 | 
			
		||||
				<el-row>
 | 
			
		||||
					<el-col :span="24">
 | 
			
		||||
						<el-form-item label="上级菜单">
 | 
			
		||||
							<treeselect
 | 
			
		||||
								v-model="form.parentId"
 | 
			
		||||
								:options="menuOptions"
 | 
			
		||||
								:normalizer="normalizer"
 | 
			
		||||
								:show-count="true"
 | 
			
		||||
								placeholder="选择上级菜单" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="24">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="菜单类型"
 | 
			
		||||
							prop="type">
 | 
			
		||||
							<el-radio-group v-model="form.type">
 | 
			
		||||
								<el-radio
 | 
			
		||||
									v-for="dict in menuTypeDictDatas"
 | 
			
		||||
									:key="parseInt(dict.value)"
 | 
			
		||||
									:label="parseInt(dict.value)">
 | 
			
		||||
									{{ dict.label }}
 | 
			
		||||
								</el-radio>
 | 
			
		||||
							</el-radio-group>
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<!-- <el-col :span="24">
 | 
			
		||||
            <el-form-item v-if="form.type !== 3" label="菜单图标">
 | 
			
		||||
              <el-popover placement="bottom-start" width="460" trigger="click" @show="$refs['iconSelect'].reset()">
 | 
			
		||||
                <IconSelect ref="iconSelect" @selected="selected" />
 | 
			
		||||
@@ -88,319 +200,414 @@
 | 
			
		||||
              </el-popover>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col> -->
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="菜单名称" prop="name">
 | 
			
		||||
              <el-input v-model="form.name" placeholder="请输入菜单名称" />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="显示排序" prop="sort">
 | 
			
		||||
              <el-input-number v-model="form.sort" controls-position="right" :min="0" />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item v-if="form.type !== 3" label="路由地址" prop="path">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头" placement="top">
 | 
			
		||||
                <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                路由地址
 | 
			
		||||
              </span>
 | 
			
		||||
              <el-input v-model="form.path" placeholder="请输入路由地址" />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item v-if="form.type !== 1" label="权限标识">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)" placement="top">
 | 
			
		||||
                  <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                权限字符
 | 
			
		||||
              </span>
 | 
			
		||||
							<el-input v-model="form.permission" placeholder="请权限标识" maxlength="50" />
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="菜单名称"
 | 
			
		||||
							prop="name">
 | 
			
		||||
							<el-input
 | 
			
		||||
								v-model="form.name"
 | 
			
		||||
								placeholder="请输入菜单名称" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
          <el-col :span="12" v-if="form.type === 2">
 | 
			
		||||
            <el-form-item label="组件路径" prop="component">
 | 
			
		||||
              <el-input v-model="form.component" placeholder="例如说:system/user/index" />
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
					<el-col :span="12" v-if="form.type === 2">
 | 
			
		||||
						<el-form-item label="组件名称" prop="componentName">
 | 
			
		||||
							<el-input v-model="form.componentName" placeholder="例如说:SystemUser" />
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="显示排序"
 | 
			
		||||
							prop="sort">
 | 
			
		||||
							<el-input-number
 | 
			
		||||
								v-model="form.sort"
 | 
			
		||||
								controls-position="right"
 | 
			
		||||
								:min="0" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item label="菜单状态" prop="status">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="选择停用时,路由将不会出现在侧边栏,也不能被访问" placement="top">
 | 
			
		||||
                  <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                菜单状态
 | 
			
		||||
              </span>
 | 
			
		||||
              <el-radio-group v-model="form.status">
 | 
			
		||||
                <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
 | 
			
		||||
                          :key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
 | 
			
		||||
              </el-radio-group>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item v-if="form.type !== 3" label="显示状态">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问" placement="top">
 | 
			
		||||
                  <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                是否显示
 | 
			
		||||
              </span>
 | 
			
		||||
              <el-radio-group v-model="form.visible">
 | 
			
		||||
                <el-radio :key="true" :label="true">显示</el-radio>
 | 
			
		||||
                <el-radio :key="false" :label="false">隐藏</el-radio>
 | 
			
		||||
              </el-radio-group>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
          <el-col :span="12">
 | 
			
		||||
            <el-form-item v-if="form.type !== 3" label="总是显示">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单" placement="top">
 | 
			
		||||
                  <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                 总是显示
 | 
			
		||||
              </span>
 | 
			
		||||
              <el-radio-group v-model="form.alwaysShow">
 | 
			
		||||
                <el-radio :key="true" :label="true">总是</el-radio>
 | 
			
		||||
                <el-radio :key="false" :label="false">不是</el-radio>
 | 
			
		||||
              </el-radio-group>
 | 
			
		||||
            </el-form-item>
 | 
			
		||||
          </el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item v-if="form.type === 2" label="是否缓存">
 | 
			
		||||
              <span slot="label">
 | 
			
		||||
                <el-tooltip content="选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段" placement="top">
 | 
			
		||||
                  <i class="el-icon-question" />
 | 
			
		||||
                </el-tooltip>
 | 
			
		||||
                 是否缓存
 | 
			
		||||
              </span>
 | 
			
		||||
							<el-radio-group v-model="form.keepAlive">
 | 
			
		||||
								<el-radio :key="true" :label="true">缓存</el-radio>
 | 
			
		||||
								<el-radio :key="false" :label="false">不缓存</el-radio>
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							v-if="form.type !== 3"
 | 
			
		||||
							label="路由地址"
 | 
			
		||||
							prop="path">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								路由地址
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-input
 | 
			
		||||
								v-model="form.path"
 | 
			
		||||
								placeholder="请输入路由地址" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							v-if="form.type !== 1"
 | 
			
		||||
							label="权限标识">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								权限字符
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-input
 | 
			
		||||
								v-model="form.permission"
 | 
			
		||||
								placeholder="请权限标识"
 | 
			
		||||
								maxlength="200" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col
 | 
			
		||||
						:span="12"
 | 
			
		||||
						v-if="form.type === 2">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="组件路径"
 | 
			
		||||
							prop="component">
 | 
			
		||||
							<el-input
 | 
			
		||||
								v-model="form.component"
 | 
			
		||||
								placeholder="例如说:system/user/index" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col
 | 
			
		||||
						:span="12"
 | 
			
		||||
						v-if="form.type === 2">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="组件名称"
 | 
			
		||||
							prop="componentName">
 | 
			
		||||
							<el-input
 | 
			
		||||
								v-model="form.componentName"
 | 
			
		||||
								placeholder="例如说:SystemUser" />
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							label="菜单状态"
 | 
			
		||||
							prop="status">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="选择停用时,路由将不会出现在侧边栏,也不能被访问"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								菜单状态
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-radio-group v-model="form.status">
 | 
			
		||||
								<el-radio
 | 
			
		||||
									v-for="dict in this.getDictDatas(DICT_TYPE.COMMON_STATUS)"
 | 
			
		||||
									:key="dict.value"
 | 
			
		||||
									:label="parseInt(dict.value)">
 | 
			
		||||
									{{ dict.label }}
 | 
			
		||||
								</el-radio>
 | 
			
		||||
							</el-radio-group>
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
        </el-row>
 | 
			
		||||
      </el-form>
 | 
			
		||||
      <div slot="footer" class="dialog-footer">
 | 
			
		||||
        <el-button type="primary" @click="submitForm">确 定</el-button>
 | 
			
		||||
        <el-button @click="cancel">取 消</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
    </el-dialog>
 | 
			
		||||
  </div>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							v-if="form.type !== 3"
 | 
			
		||||
							label="显示状态">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								是否显示
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-radio-group v-model="form.visible">
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="true"
 | 
			
		||||
									:label="true">
 | 
			
		||||
									显示
 | 
			
		||||
								</el-radio>
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="false"
 | 
			
		||||
									:label="false">
 | 
			
		||||
									隐藏
 | 
			
		||||
								</el-radio>
 | 
			
		||||
							</el-radio-group>
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							v-if="form.type !== 3"
 | 
			
		||||
							label="总是显示">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								总是显示
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-radio-group v-model="form.alwaysShow">
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="true"
 | 
			
		||||
									:label="true">
 | 
			
		||||
									总是
 | 
			
		||||
								</el-radio>
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="false"
 | 
			
		||||
									:label="false">
 | 
			
		||||
									不是
 | 
			
		||||
								</el-radio>
 | 
			
		||||
							</el-radio-group>
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
					<el-col :span="12">
 | 
			
		||||
						<el-form-item
 | 
			
		||||
							v-if="form.type === 2"
 | 
			
		||||
							label="是否缓存">
 | 
			
		||||
							<span slot="label">
 | 
			
		||||
								<el-tooltip
 | 
			
		||||
									content="选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段"
 | 
			
		||||
									placement="top">
 | 
			
		||||
									<i class="el-icon-question" />
 | 
			
		||||
								</el-tooltip>
 | 
			
		||||
								是否缓存
 | 
			
		||||
							</span>
 | 
			
		||||
							<el-radio-group v-model="form.keepAlive">
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="true"
 | 
			
		||||
									:label="true">
 | 
			
		||||
									缓存
 | 
			
		||||
								</el-radio>
 | 
			
		||||
								<el-radio
 | 
			
		||||
									:key="false"
 | 
			
		||||
									:label="false">
 | 
			
		||||
									不缓存
 | 
			
		||||
								</el-radio>
 | 
			
		||||
							</el-radio-group>
 | 
			
		||||
						</el-form-item>
 | 
			
		||||
					</el-col>
 | 
			
		||||
				</el-row>
 | 
			
		||||
			</el-form>
 | 
			
		||||
			<div
 | 
			
		||||
				slot="footer"
 | 
			
		||||
				class="dialog-footer">
 | 
			
		||||
				<el-button
 | 
			
		||||
					type="primary"
 | 
			
		||||
					@click="submitForm">
 | 
			
		||||
					确 定
 | 
			
		||||
				</el-button>
 | 
			
		||||
				<el-button @click="cancel">取 消</el-button>
 | 
			
		||||
			</div>
 | 
			
		||||
		</el-dialog>
 | 
			
		||||
	</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/system/menu";
 | 
			
		||||
import Treeselect from "@riophae/vue-treeselect";
 | 
			
		||||
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 | 
			
		||||
import IconSelect from "@/components/IconSelect";
 | 
			
		||||
import {
 | 
			
		||||
	listMenu,
 | 
			
		||||
	getMenu,
 | 
			
		||||
	delMenu,
 | 
			
		||||
	addMenu,
 | 
			
		||||
	updateMenu,
 | 
			
		||||
} from '@/api/system/menu';
 | 
			
		||||
import Treeselect from '@riophae/vue-treeselect';
 | 
			
		||||
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
 | 
			
		||||
import IconSelect from '@/components/IconSelect';
 | 
			
		||||
 | 
			
		||||
import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants'
 | 
			
		||||
import { getDictDatas, DICT_TYPE } from '@/utils/dict'
 | 
			
		||||
import {isExternal} from "@/utils/validate";
 | 
			
		||||
import { SystemMenuTypeEnum, CommonStatusEnum } from '@/utils/constants';
 | 
			
		||||
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
 | 
			
		||||
import { isExternal } from '@/utils/validate';
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  name: "SystemMenu",
 | 
			
		||||
  components: { Treeselect, IconSelect },
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      // 遮罩层
 | 
			
		||||
      loading: true,
 | 
			
		||||
      // 显示搜索条件
 | 
			
		||||
      showSearch: true,
 | 
			
		||||
      // 菜单表格树数据
 | 
			
		||||
      menuList: [],
 | 
			
		||||
      // 菜单树选项
 | 
			
		||||
      menuOptions: [],
 | 
			
		||||
      // 弹出层标题
 | 
			
		||||
      title: "",
 | 
			
		||||
      // 是否显示弹出层
 | 
			
		||||
      open: false,
 | 
			
		||||
      // 是否展开,默认全部折叠
 | 
			
		||||
      isExpandAll: false,
 | 
			
		||||
      // 重新渲染表格状态
 | 
			
		||||
      refreshTable: true,
 | 
			
		||||
      // 查询参数
 | 
			
		||||
      queryParams: {
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        visible: undefined
 | 
			
		||||
      },
 | 
			
		||||
      // 表单参数
 | 
			
		||||
      form: {},
 | 
			
		||||
      // 表单校验
 | 
			
		||||
      rules: {
 | 
			
		||||
        name: [
 | 
			
		||||
          { required: true, message: "菜单名称不能为空", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        sort: [
 | 
			
		||||
          { required: true, message: "菜单顺序不能为空", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        path: [
 | 
			
		||||
          { required: true, message: "路由地址不能为空", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
        status: [
 | 
			
		||||
          { required: true, message: "状态不能为空", trigger: "blur" }
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
	name: 'SystemMenu',
 | 
			
		||||
	components: { Treeselect, IconSelect },
 | 
			
		||||
	data() {
 | 
			
		||||
		return {
 | 
			
		||||
			// 遮罩层
 | 
			
		||||
			loading: true,
 | 
			
		||||
			// 显示搜索条件
 | 
			
		||||
			showSearch: true,
 | 
			
		||||
			// 菜单表格树数据
 | 
			
		||||
			menuList: [],
 | 
			
		||||
			// 菜单树选项
 | 
			
		||||
			menuOptions: [],
 | 
			
		||||
			// 弹出层标题
 | 
			
		||||
			title: '',
 | 
			
		||||
			// 是否显示弹出层
 | 
			
		||||
			open: false,
 | 
			
		||||
			// 是否展开,默认全部折叠
 | 
			
		||||
			isExpandAll: false,
 | 
			
		||||
			// 重新渲染表格状态
 | 
			
		||||
			refreshTable: true,
 | 
			
		||||
			// 查询参数
 | 
			
		||||
			queryParams: {
 | 
			
		||||
				name: undefined,
 | 
			
		||||
				visible: undefined,
 | 
			
		||||
			},
 | 
			
		||||
			// 表单参数
 | 
			
		||||
			form: {},
 | 
			
		||||
			// 表单校验
 | 
			
		||||
			rules: {
 | 
			
		||||
				name: [
 | 
			
		||||
					{ required: true, message: '菜单名称不能为空', trigger: 'blur' },
 | 
			
		||||
				],
 | 
			
		||||
				sort: [
 | 
			
		||||
					{ required: true, message: '菜单顺序不能为空', trigger: 'blur' },
 | 
			
		||||
				],
 | 
			
		||||
				path: [
 | 
			
		||||
					{ required: true, message: '路由地址不能为空', trigger: 'blur' },
 | 
			
		||||
				],
 | 
			
		||||
				status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
      // 枚举
 | 
			
		||||
      MenuTypeEnum: SystemMenuTypeEnum,
 | 
			
		||||
      CommonStatusEnum: CommonStatusEnum,
 | 
			
		||||
      // 数据字典
 | 
			
		||||
      menuTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_MENU_TYPE),
 | 
			
		||||
      statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS)
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
  created() {
 | 
			
		||||
    this.getList();
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    // 选择图标
 | 
			
		||||
    // selected(name) {
 | 
			
		||||
    //   this.form.icon = name;
 | 
			
		||||
    // },
 | 
			
		||||
    /** 查询菜单列表 */
 | 
			
		||||
    getList() {
 | 
			
		||||
      this.loading = true;
 | 
			
		||||
      listMenu(this.queryParams).then(response => {
 | 
			
		||||
        this.menuList = this.handleTree(response.data, "id");
 | 
			
		||||
        this.loading = false;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 转换菜单数据结构 */
 | 
			
		||||
    normalizer(node) {
 | 
			
		||||
      if (node.children && !node.children.length) {
 | 
			
		||||
        delete node.children;
 | 
			
		||||
      }
 | 
			
		||||
      return {
 | 
			
		||||
        id: node.id,
 | 
			
		||||
        label: node.name,
 | 
			
		||||
        children: node.children
 | 
			
		||||
      };
 | 
			
		||||
    },
 | 
			
		||||
    /** 查询菜单下拉树结构 */
 | 
			
		||||
    getTreeselect() {
 | 
			
		||||
      listMenu().then(response => {
 | 
			
		||||
        this.menuOptions = [];
 | 
			
		||||
        const menu = { id: 0, name: '主类目', children: [] };
 | 
			
		||||
        menu.children = this.handleTree(response.data, "id");
 | 
			
		||||
        this.menuOptions.push(menu);
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    // 取消按钮
 | 
			
		||||
    cancel() {
 | 
			
		||||
      this.open = false;
 | 
			
		||||
      this.reset();
 | 
			
		||||
    },
 | 
			
		||||
    // 表单重置
 | 
			
		||||
    reset() {
 | 
			
		||||
      this.form = {
 | 
			
		||||
        id: undefined,
 | 
			
		||||
        parentId: 0,
 | 
			
		||||
        name: undefined,
 | 
			
		||||
        // icon: undefined,
 | 
			
		||||
        type: SystemMenuTypeEnum.DIR,
 | 
			
		||||
        sort: undefined,
 | 
			
		||||
        status: CommonStatusEnum.ENABLE,
 | 
			
		||||
        visible: true,
 | 
			
		||||
        keepAlive: true,
 | 
			
		||||
        alwaysShow: true,
 | 
			
		||||
      };
 | 
			
		||||
      this.resetForm("form");
 | 
			
		||||
    },
 | 
			
		||||
    /** 搜索按钮操作 */
 | 
			
		||||
    handleQuery() {
 | 
			
		||||
      this.getList();
 | 
			
		||||
    },
 | 
			
		||||
    /** 重置按钮操作 */
 | 
			
		||||
    resetQuery() {
 | 
			
		||||
      this.resetForm("queryForm");
 | 
			
		||||
      this.handleQuery();
 | 
			
		||||
    },
 | 
			
		||||
    /** 展开/折叠操作 */
 | 
			
		||||
    toggleExpandAll() {
 | 
			
		||||
      this.refreshTable = false;
 | 
			
		||||
      this.isExpandAll = !this.isExpandAll;
 | 
			
		||||
      this.$nextTick(() => {
 | 
			
		||||
        this.refreshTable = true;
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 新增按钮操作 */
 | 
			
		||||
    handleAdd(row) {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      this.getTreeselect();
 | 
			
		||||
      if (row != null && row.id) {
 | 
			
		||||
        this.form.parentId = row.id;
 | 
			
		||||
      } else {
 | 
			
		||||
        this.form.parentId = 0;
 | 
			
		||||
      }
 | 
			
		||||
      this.open = true;
 | 
			
		||||
      this.title = "添加菜单";
 | 
			
		||||
    },
 | 
			
		||||
    /** 修改按钮操作 */
 | 
			
		||||
    handleUpdate(row) {
 | 
			
		||||
      this.reset();
 | 
			
		||||
      this.getTreeselect();
 | 
			
		||||
      getMenu(row.id).then(response => {
 | 
			
		||||
        this.form = response.data;
 | 
			
		||||
        this.open = true;
 | 
			
		||||
        this.title = "修改菜单";
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 提交按钮 */
 | 
			
		||||
    submitForm: function() {
 | 
			
		||||
      this.$refs["form"].validate(valid => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          // 若权限类型为目录或者菜单时,进行 path 的校验,避免后续拼接出来的路由无法跳转
 | 
			
		||||
          if (this.form.type === SystemMenuTypeEnum.DIR
 | 
			
		||||
            || this.form.type === SystemMenuTypeEnum.MENU) {
 | 
			
		||||
            // 如果是外链,则不进行校验
 | 
			
		||||
            const path = this.form.path
 | 
			
		||||
            if (!isExternal(path)) {
 | 
			
		||||
              // 父权限为根节点,path 必须以 / 开头
 | 
			
		||||
              if (this.form.parentId === 0 && path.charAt(0) !== '/') {
 | 
			
		||||
                this.$modal.msgSuccess('前端必须以 / 开头')
 | 
			
		||||
                return
 | 
			
		||||
              } else if (this.form.parentId !== 0 && path.charAt(0) === '/') {
 | 
			
		||||
                this.$modal.msgSuccess('前端不能以 / 开头')
 | 
			
		||||
                return
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
			// 枚举
 | 
			
		||||
			MenuTypeEnum: SystemMenuTypeEnum,
 | 
			
		||||
			CommonStatusEnum: CommonStatusEnum,
 | 
			
		||||
			// 数据字典
 | 
			
		||||
			menuTypeDictDatas: getDictDatas(DICT_TYPE.SYSTEM_MENU_TYPE),
 | 
			
		||||
			statusDictDatas: getDictDatas(DICT_TYPE.COMMON_STATUS),
 | 
			
		||||
		};
 | 
			
		||||
	},
 | 
			
		||||
	created() {
 | 
			
		||||
		this.getList();
 | 
			
		||||
	},
 | 
			
		||||
	methods: {
 | 
			
		||||
		// 选择图标
 | 
			
		||||
		// selected(name) {
 | 
			
		||||
		//   this.form.icon = name;
 | 
			
		||||
		// },
 | 
			
		||||
		/** 查询菜单列表 */
 | 
			
		||||
		getList() {
 | 
			
		||||
			this.loading = true;
 | 
			
		||||
			listMenu(this.queryParams).then((response) => {
 | 
			
		||||
				this.menuList = this.handleTree(response.data, 'id');
 | 
			
		||||
				this.loading = false;
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/** 转换菜单数据结构 */
 | 
			
		||||
		normalizer(node) {
 | 
			
		||||
			if (node.children && !node.children.length) {
 | 
			
		||||
				delete node.children;
 | 
			
		||||
			}
 | 
			
		||||
			return {
 | 
			
		||||
				id: node.id,
 | 
			
		||||
				label: node.name,
 | 
			
		||||
				children: node.children,
 | 
			
		||||
			};
 | 
			
		||||
		},
 | 
			
		||||
		/** 查询菜单下拉树结构 */
 | 
			
		||||
		getTreeselect() {
 | 
			
		||||
			listMenu().then((response) => {
 | 
			
		||||
				this.menuOptions = [];
 | 
			
		||||
				const menu = { id: 0, name: '主类目', children: [] };
 | 
			
		||||
				menu.children = this.handleTree(response.data, 'id');
 | 
			
		||||
				this.menuOptions.push(menu);
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		// 取消按钮
 | 
			
		||||
		cancel() {
 | 
			
		||||
			this.open = false;
 | 
			
		||||
			this.reset();
 | 
			
		||||
		},
 | 
			
		||||
		// 表单重置
 | 
			
		||||
		reset() {
 | 
			
		||||
			this.form = {
 | 
			
		||||
				id: undefined,
 | 
			
		||||
				parentId: 0,
 | 
			
		||||
				name: undefined,
 | 
			
		||||
				// icon: undefined,
 | 
			
		||||
				type: SystemMenuTypeEnum.DIR,
 | 
			
		||||
				sort: undefined,
 | 
			
		||||
				status: CommonStatusEnum.ENABLE,
 | 
			
		||||
				visible: true,
 | 
			
		||||
				keepAlive: true,
 | 
			
		||||
				alwaysShow: true,
 | 
			
		||||
			};
 | 
			
		||||
			this.resetForm('form');
 | 
			
		||||
		},
 | 
			
		||||
		/** 搜索按钮操作 */
 | 
			
		||||
		handleQuery() {
 | 
			
		||||
			this.getList();
 | 
			
		||||
		},
 | 
			
		||||
		/** 重置按钮操作 */
 | 
			
		||||
		resetQuery() {
 | 
			
		||||
			this.resetForm('queryForm');
 | 
			
		||||
			this.handleQuery();
 | 
			
		||||
		},
 | 
			
		||||
		/** 展开/折叠操作 */
 | 
			
		||||
		toggleExpandAll() {
 | 
			
		||||
			this.refreshTable = false;
 | 
			
		||||
			this.isExpandAll = !this.isExpandAll;
 | 
			
		||||
			this.$nextTick(() => {
 | 
			
		||||
				this.refreshTable = true;
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/** 新增按钮操作 */
 | 
			
		||||
		handleAdd(row) {
 | 
			
		||||
			this.reset();
 | 
			
		||||
			this.getTreeselect();
 | 
			
		||||
			if (row != null && row.id) {
 | 
			
		||||
				this.form.parentId = row.id;
 | 
			
		||||
			} else {
 | 
			
		||||
				this.form.parentId = 0;
 | 
			
		||||
			}
 | 
			
		||||
			this.open = true;
 | 
			
		||||
			this.title = '添加菜单';
 | 
			
		||||
		},
 | 
			
		||||
		/** 修改按钮操作 */
 | 
			
		||||
		handleUpdate(row) {
 | 
			
		||||
			this.reset();
 | 
			
		||||
			this.getTreeselect();
 | 
			
		||||
			getMenu(row.id).then((response) => {
 | 
			
		||||
				this.form = response.data;
 | 
			
		||||
				this.open = true;
 | 
			
		||||
				this.title = '修改菜单';
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/** 提交按钮 */
 | 
			
		||||
		submitForm: function () {
 | 
			
		||||
			this.$refs['form'].validate((valid) => {
 | 
			
		||||
				if (valid) {
 | 
			
		||||
					// 若权限类型为目录或者菜单时,进行 path 的校验,避免后续拼接出来的路由无法跳转
 | 
			
		||||
					if (
 | 
			
		||||
						this.form.type === SystemMenuTypeEnum.DIR ||
 | 
			
		||||
						this.form.type === SystemMenuTypeEnum.MENU
 | 
			
		||||
					) {
 | 
			
		||||
						// 如果是外链,则不进行校验
 | 
			
		||||
						const path = this.form.path;
 | 
			
		||||
						if (!isExternal(path)) {
 | 
			
		||||
							// 父权限为根节点,path 必须以 / 开头
 | 
			
		||||
							if (this.form.parentId === 0 && path.charAt(0) !== '/') {
 | 
			
		||||
								this.$modal.msgSuccess('前端必须以 / 开头');
 | 
			
		||||
								return;
 | 
			
		||||
							} else if (this.form.parentId !== 0 && path.charAt(0) === '/') {
 | 
			
		||||
								this.$modal.msgSuccess('前端不能以 / 开头');
 | 
			
		||||
								return;
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
          // 提交
 | 
			
		||||
          if (this.form.id !== undefined) {
 | 
			
		||||
            updateMenu(this.form).then(response => {
 | 
			
		||||
              this.$modal.msgSuccess("修改成功");
 | 
			
		||||
              this.open = false;
 | 
			
		||||
              this.getList();
 | 
			
		||||
            });
 | 
			
		||||
          } else {
 | 
			
		||||
            addMenu(this.form).then(response => {
 | 
			
		||||
              this.$modal.msgSuccess("新增成功");
 | 
			
		||||
              this.open = false;
 | 
			
		||||
              this.getList();
 | 
			
		||||
            });
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      });
 | 
			
		||||
    },
 | 
			
		||||
    /** 删除按钮操作 */
 | 
			
		||||
    handleDelete(row) {
 | 
			
		||||
      this.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() {
 | 
			
		||||
          return delMenu(row.id);
 | 
			
		||||
        }).then(() => {
 | 
			
		||||
          this.getList();
 | 
			
		||||
          this.$modal.msgSuccess("删除成功");
 | 
			
		||||
      }).catch(() => {});
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
					// 提交
 | 
			
		||||
					if (this.form.id !== undefined) {
 | 
			
		||||
						updateMenu(this.form).then((response) => {
 | 
			
		||||
							this.$modal.msgSuccess('修改成功');
 | 
			
		||||
							this.open = false;
 | 
			
		||||
							this.getList();
 | 
			
		||||
						});
 | 
			
		||||
					} else {
 | 
			
		||||
						addMenu(this.form).then((response) => {
 | 
			
		||||
							this.$modal.msgSuccess('新增成功');
 | 
			
		||||
							this.open = false;
 | 
			
		||||
							this.getList();
 | 
			
		||||
						});
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			});
 | 
			
		||||
		},
 | 
			
		||||
		/** 删除按钮操作 */
 | 
			
		||||
		handleDelete(row) {
 | 
			
		||||
			this.$modal
 | 
			
		||||
				.confirm('是否确认删除名称为"' + row.name + '"的数据项?')
 | 
			
		||||
				.then(function () {
 | 
			
		||||
					return delMenu(row.id);
 | 
			
		||||
				})
 | 
			
		||||
				.then(() => {
 | 
			
		||||
					this.getList();
 | 
			
		||||
					this.$modal.msgSuccess('删除成功');
 | 
			
		||||
				})
 | 
			
		||||
				.catch(() => {});
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
};
 | 
			
		||||
</script>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user