Răsfoiți Sursa

1123 多人并行 计划任务进度查看功能开发(管审新增进度功能)

cyy 2 ani în urmă
părinte
comite
f150d0e989

+ 1119 - 0
src/views/system/jbdScan/goods/guanshenzhuangtai.vue

@@ -0,0 +1,1119 @@
+<template>
+    <div class="bg">
+        <el-dialog width="70vw" height="50vh" :modal-append-to-body="false" title="管审进度查询" :visible.sync="scanVisible">
+            <!-- 表单是否显示 -->
+            <div style="height: 75vh; width: 98%">
+                <div id="box">
+                    <div class="overall">
+                        <!-- 步骤条盒子 -->
+                        <div class="steps-box">
+                            <div class="Article-steps">
+                                <!-- 步骤条背景进度条 -->
+                                <div class="line">
+                                    <span class="plan" :style="`width:${activeIndex * (100 / (stepList.length - 1)) -100 / (stepList.length - 1) / 2}%`" />
+                                </div>
+                                <!-- 每步部分底部文字描述 -->
+                                <span v-for="(i, index) in stepList" :key="index" class="step" :class="(i.stepIndex < activeIndex || activeIndex == 100? 'step-active': (i.stepIndex == activeIndex ? 'current-active':''))">
+                                    <span class="step-num">
+                                        <i v-if="index != 0" class="el-icon-caret-right icon" />
+                                        <p cla>{{ i.title }}</p>
+                                    </span>
+                                    <p class="post">{{ i.post }}</p>
+                                </span>
+                            </div>
+                            <!-- 步骤条对应内容 -->
+                            <div class="Article-content" />
+                        </div>
+                    </div>
+                    <div style="width: 90%; margin: 50px auto 0px;display: flex;">
+                        <div v-show="false">
+                            <div class="main">
+                                <div class="wheel-title">管审检查表完成率</div>
+                                <div id="check-progress" />
+                            </div>
+                        </div>
+                        <div class="main">
+                            <div class="wheel-title">管审完成率</div>
+                            <div id="main" />
+                        </div>
+                    </div>
+                    <div v-if="gaijinxiangbing.length > 0">
+                        <div class="cnas">
+                            <div style="width: 90%; margin: 0 auto; line-height: 35px">
+                                管审改进项汇总表
+                            </div>
+                            <el-table :data="gaijinxianglie" :border="true" style="width: 90%;margin: 0 auto;">
+                                <el-table-column type="index" width="40" >            
+                                    <template slot-scope="scope">
+                                        <span>{{scope.$index+1}} </span>
+                                    </template>
+                                </el-table-column> 
+                                <el-table-column prop="gai_jin_yi_jian_" label="改进意见" width="250"  :key="Math.random()">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.gai_jin_yi_jian_}}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="fu_ze_bu_men_" label="责任部门" width="90">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.fu_ze_bu_men_ | partFilter(partList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="fu_ze_ren_" label="负责人" width="60">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.fu_ze_ren_ | emfiltes(employeeList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="gai_jin_que_ren_" label="改进有效性评审" width="100" > 
+                                    <template slot-scope="scope">
+                                        {{ scope.row.gai_jin_que_ren_}}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="shi_fou_guo_shen_" label="状态" width="65" > 
+                                    <template slot-scope="scope">
+                                        {{ scope.row.shi_fou_guo_shen_}}
+                                    </template>
+                                </el-table-column>
+                            </el-table>
+                        </div>
+                        <div class="table-echarts">
+                            <!-- <div class="in-echarts">
+                                <div>不符合项条款统计</div>
+                                <div id="in-echarts" />
+                            </div> -->
+                            <div class="department">
+                                <div>改进项部门统计</div>
+                                <div id="department" />
+                            </div>
+                        </div>
+                    </div>
+                    <!-- <div v-if="false">
+                        <div class="cma">
+                            <div style="width: 90%; margin: 0 auto; line-height: 35px">
+                                内审不符合项汇总表(CMA)
+                            </div>
+                            <el-table :data="CMAtable" :border="true" style="width: 90%; margin: 0 auto">
+                                <el-table-column prop="miao_shu_" label="不符合项描述" width="300" />
+                                <el-table-column prop="ping_shen_yi_ju_" label="评审依据" width="200" />
+                                <el-table-column prop="tiao_kuan_bian_ha" label="条款编号" width="70" />
+                                <el-table-column prop="nei_shen_yuan_" label="内审员" width="60">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.nei_shen_yuan_ | emfiltes(employeeList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="ze_ren_shi_" label="责任部门" width="100">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.ze_ren_shi_ | partFilter(partList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="fu_ze_ren_" label="部门负责人" width="60">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.fu_ze_ren_ | emfiltes(employeeList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="bu_fu_he_cheng_du" label="不符合程度" width="80" />
+                            </el-table>
+                        </div>
+                        <div class="table-echarts">
+                            <div class="in-echarts">
+                                <div>CMA不符合项条款统计</div>
+                                <div id="in-CMAecharts" />
+                            </div>
+                            <div class="department">
+                                <div>CMA不符合项部门统计</div>
+                                <div id="cma-department" />
+                            </div>
+                        </div>
+                    </div> -->
+                    <!-- 检查表编制数据检查完成 -->
+                    <!-- <div v-if="!CNASTableData.length > 0">
+                        <div class="cma">
+                            <div style="width: 90%; margin: 0 auto; line-height: 35px;display: flex;justify-content: space-between;">
+                                <div>内审检查表编制进度查阅</div>
+                                <div @click="urgingEvent" >
+                                    <button class="urgingBtn"><i class="el-icon-position"></i> 发送催办</button>
+                                </div>
+                            </div>
+                            <el-table :data="allCheckData" :border="true" @selection-change="handleSelectionChange" style="width: 90%; margin: 0 auto">
+                                <el-table-column type="selection"  width="40" align="center">
+                                </el-table-column>
+                                <el-table-column prop="nei_shen_yuan_" label="内审员" width="100">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.nei_shen_yuan_ | emfiltes(employeeList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="bei_nei_shen_bu_m" label="被审核部门" width="200" >
+                                    <template slot-scope="scope">
+                                        {{ scope.row.bei_nei_shen_bu_m | partFilter(partList) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="kai_shi_shi_jian_" label="开始时间" width="200">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.kai_shi_shi_jian_.slice(0,scope.row.kai_shi_shi_jian_.length - 3) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="jie_shu_shi_jian_" label="结束时间" width="200">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.jie_shu_shi_jian_.slice(0,scope.row.jie_shu_shi_jian_.length - 3) }}
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="shi_fou_guo_shen_" label="完成状态" width="70">
+                                    <template slot-scope="scope">
+                                        {{ scope.row.shi_fou_guo_shen_}}
+                                    </template>
+                                </el-table-column>
+                            </el-table>
+                        </div>
+                    </div> -->
+                </div>
+                <div v-if="gaijinxiangbing.length == 0" class="nodata">
+                    暂无改进项统计
+                </div>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import * as echarts from 'echarts'
+import curdPost from '@/business/platform/form/utils/custom/joinCURD.js'
+import height from '@/mixins/height'
+export default {
+    components: {},
+    filters: {
+        emfiltes: function (value, arr) {
+            for (let i = 0; i < arr.length; i++) {
+                if (value.includes(',')) {
+                    let part = ''
+                    let parts = []
+                    parts = value.split(',')
+                    for (const item of arr) {
+                        for (let j = 0; j < parts.length; j++) {
+                            if (item.ID_ == parts[j]) {
+                                part = part + ',' + item.NAME_
+                            }
+                        }
+                    }
+                    return part.slice(1, part.length)
+                } else if (arr[i].ID_ == value) {
+                    return arr[i].NAME_
+                }
+            }
+        },
+        partFilter: function (value, arr) {
+            if (value.includes('1')) {
+                if (value.includes(',')) {
+                    let part = ''
+                    let parts = []
+                    parts = value.split(',')
+                    for (const item of arr) {
+                        for (let j = 0; j < parts.length; j++) {
+                            if (item.ID_ == parts[j]) {
+                                part = part + ',' + item.NAME_
+                            }
+                        }
+                    }
+                    return part.slice(1, part.length)
+                } else {
+                    for (let i = 0; i < arr.length; i++) {
+                        if (arr[i].ID_ == value) {
+                            return arr[i].NAME_
+                        }
+                    }
+                }
+            } else {
+                return value
+            }
+        }
+    },
+    props: {
+        obj: {
+            type: Array
+        },
+        scanVisible: {
+            type: Boolean,
+            default: false
+        }
+    },
+    data () {
+        return {
+            gaijinxiangbing:[],
+            gaijinxianglie:[],
+            jiescanVisible:this.scanVisible,
+            value: '',
+            id: '',
+            visible: true,
+            jieduanValue: 0,
+            // 当前位置
+            activeIndex: 1,
+            // 步骤条步数
+            stepList: [
+                {
+                    stepIndex: 20,
+                    title: '管审计划编制',
+                    post: '质量负责人'
+                },
+                {
+                    stepIndex: 40,
+                    title: '汇报材料编制',
+                    post: '会议相关人员'
+                },
+                {
+                    stepIndex: 60,
+                    title: '管审会议',
+                    post: '相关人员'
+                },
+                {
+                    stepIndex: 80,
+                    title: '管审报告',
+                    post: '质量负责人/检验科主任'
+                },
+                {
+                    stepIndex: 100,
+                    title: '管理评审改进项',
+                    post: '质量负责人/部门负责人'
+                }
+            ],
+            CNASTableData: [], // cnas
+            CMAtable: [], // CMA
+            source: [], // CNAS
+            cmaSuorce: [],
+            cnasPieData: [], // cnas饼图
+            cmaPieData: [], // cma饼图
+            employeeList: [],
+            partList: [],
+            loading: true,
+            settime: '',
+            setCheckTime: '',
+            checkValue: 0,
+            allCheckData: [],
+            selectCheckData:[]
+        }
+    },
+    watch: {
+        obj () {
+            this.getInit()
+            this.getLoadEcharts()
+            this.getCheckData()
+        }
+    },
+    created () {
+        this.getInit()
+        this.getEmployee()
+        this.getPart()
+        this.getCheckData()
+    },
+    mounted () {
+        const this_ = this
+        this.$nextTick(() => {
+            this_.getLoadEcharts()
+            this_.getcCheckProgressEcharts()
+        })
+    },
+    destroyed () {
+        clearInterval(this.settime)
+        clearInterval(this.setCheckTime)
+    },
+    methods: {
+        handleSelectionChange(val) {
+          this.selectCheckData = val;
+        },
+        // 催办信息点击
+        urgingEvent () {
+            let this_ = this;
+            let receiverId = "";
+            console.log(this.selectCheckData,"选中的数据");
+            if(this.selectCheckData.length == 0){
+                this.$message({
+                    showClose: true,
+                    message: '您还未选中人员进行发送催办信息,请在列表中选择!',
+                    type: 'error'
+                });
+              return
+            }
+            for(let item of this.selectCheckData){
+                if(item.shi_fou_guo_shen_ !="已完成"){
+                    receiverId += item.nei_shen_yuan_ + ",";
+                }
+            }
+            receiverId = receiverId.slice(0,receiverId.length - 1);
+            let msage = {
+                  canreply: "0",
+                  content: "内审检查表还未完成,请及时完成",
+                  editorValue: "",
+                  fileMsg: "",
+                  groupId: "",
+                  groupName:  "",
+                  id: "",
+                  messageType :  "normal",
+                  ownerId : this.$store.getters.userId,
+                  ownerName: this.$store.getters.name, //发送人 
+                  positionId :  "",
+                  positionName:  "",
+                  receiver: "",
+                  receiverId: receiverId, //接收人
+                  subject: "请在规定时间内完成" + "内审检查表编制内容,以免影响后续进度"
+              }
+            this_.$common.sendMsg(msage).then(res =>{
+                this_.$message({
+                    duration:3000,
+                    message: '已成功向未完成编制内审检查表的内审员发送催办信息',
+                    type: 'success'
+                }); 
+            })
+        },
+        // 管审核查完成率仪表盘
+        getLoadEcharts () {
+            var chartDom = document.getElementById('main')
+            const setEchartWH = {
+                // 设置控制图表大小变量
+                width: 400,
+                height: 300
+            }
+            var myChart = echarts.init(chartDom, null, setEchartWH)
+            var option
+            const this_ = this
+            option = {
+                series: [
+                    {
+                        type: 'gauge',
+                        min: 0,
+                        max: 80,
+                        axisLine: {
+                            lineStyle: {
+                                width: 30,
+                                color: [
+                                    [0.3, '#fd666d'],
+                                    [0.7, '#37a2da'],
+                                    [1, '#67e0e3']
+                                ]
+                            }
+                        },
+                        pointer: {
+                            itemStyle: {
+                                color: 'auto'
+                            }
+                        },
+                        axisTick: {
+                            distance: -30,
+                            length: 8,
+                            lineStyle: {
+                                color: '#fff',
+                                width: 2
+                            }
+                        },
+                        splitLine: {
+                            distance: -30,
+                            length: 30,
+                            lineStyle: {
+                                color: '#fff',
+                                width: 4
+                            }
+                        },
+                        axisLabel: {
+                            show: false
+                        },
+                        detail: {
+                            valueAnimation: true,
+                            formatter: '{value} %',
+                            color: 'auto',
+                            top: '100%'
+                        },
+                        data: [{ value: 100, top: '100%' }]
+                    }
+                ]
+            }
+            this.settime = setInterval(function () {
+                myChart.setOption({
+                    series: [
+                        {
+                            data: [
+                                {
+                                    value: this_.jieduanValue
+                                }
+                            ]
+                        }
+                    ]
+                })
+            }, 2000)
+
+            option && myChart.setOption(option)
+        },
+        // 内审检查表完成率仪表盘
+        getcCheckProgressEcharts () {
+            var checkDom = document.getElementById('check-progress')
+            const setEchartWH = {
+                // 设置控制图表大小变量
+                width: 400,
+                height: 300
+            }
+            var checkChart = echarts.init(checkDom, null, setEchartWH)
+            var option
+            const this_ = this
+            option = {
+                series: [
+                    {
+                        type: 'gauge',
+                        min: 0,
+                        max: 80,
+                        axisLine: {
+                            lineStyle: {
+                                width: 30,
+                                color: [
+                                    [0.3, '#fd666d'],
+                                    [0.7, '#37a2da'],
+                                    [1, '#67e0e3']
+                                ]
+                            }
+                        },
+                        pointer: {
+                            itemStyle: {
+                                color: 'auto'
+                            }
+                        },
+                        axisTick: {
+                            distance: -30,
+                            length: 8,
+                            lineStyle: {
+                                color: '#fff',
+                                width: 2
+                            }
+                        },
+                        splitLine: {
+                            distance: -30,
+                            length: 30,
+                            lineStyle: {
+                                color: '#fff',
+                                width: 4
+                            }
+                        },
+                        axisLabel: {
+                            show: false
+                        },
+                        detail: {
+                            valueAnimation: true,
+                            formatter: '{value} %',
+                            color: 'auto',
+                            top: '100%'
+                        },
+                        data: [{ value: 50, top: '100%' }]
+                    }
+                ]
+            }
+            this.setCheckTime = setInterval(function () {
+                checkChart.setOption({
+                    series: [
+                        {
+                            data: [
+                                {
+                                    value: this_.checkValue
+                                }
+                            ]
+                        }
+                    ]
+                })
+            }, 2000)
+            option && checkChart.setOption(option)
+        },
+        // cnas指定数据到坐标轴的映射
+        getLoadEchartsTwo () {
+            var chartDom = document.getElementById('in-echarts')
+            let width,height;
+            if(window.innerWidth > 1600){
+                width = 590;
+                height = 450;
+            }else{
+                width = 480;
+                height = 400;
+            }
+            const setEchartWH = {
+                // 设置控制图表大小变量
+                width: width,
+                height: this.source.length < 7 ? 350 : (this.source.length - 1) * 30 + 100
+            }
+            var myChart = echarts.init(chartDom, null, setEchartWH)
+            var option
+
+            option = {
+                dataset: {
+                    source: this.source
+                },
+                grid: {
+                // 让图表占满容器
+                    top:"50px",
+                    left:"45px",
+                    right:"80px",
+                    bottom:"40px"
+                },
+                xAxis: {
+                    name: '  条数',
+                    interval: 1,
+                    nameGap: 0,
+                    nameRotate: 0,
+                    nameTextStyle: {
+                        fontSize: 10
+                    }
+                },
+                yAxis: { name: '条款编号', type: 'category' },
+                visualMap: {
+                    orient: 'horizontal',
+                    left: 'center',
+                    show: false,
+                    min: 10,
+                    max: 100,
+                    // text: ["High Score", "Low Score"],
+                    // Map the score column to color
+                    dimension: 0,
+                    inRange: {
+                        color: ['#65B581', '#FFCE34', '#FD665F']
+                    }
+                },
+
+                series: [
+                    {
+                        type: 'bar',
+                        encode: {
+                            // Map the "amount" column to X axis.
+                            x: 'amount',
+                            // Map the "product" column to Y axis
+                            y: 'product'
+                        },
+                        barWidth: 15
+                    }
+                ]
+            }
+
+            option && myChart.setOption(option)
+        },
+        // cma指定数据到坐标轴的映射
+        getLoadCmaEchartsX () {
+            var chartDom = document.getElementById('in-CMAecharts')
+            const setEchartWH = {
+                // 设置控制图表大小变量
+                width: 400,
+                height: 300
+            }
+
+            var myChart = echarts.init(chartDom, null, setEchartWH)
+            var option
+
+            option = {
+                dataset: {
+                    source: this.cmaSuorce
+                },
+                grid: {
+                    // 让图表占满容器
+                    top:"40px",
+                    left:"0px",
+                    right:"40px",
+                    bottom:"40px"
+                },
+                xAxis: {
+                    name: '不符合项',
+                    interval: 1,
+                    nameGap: 0,
+                    nameRotate: 0,
+                    nameTextStyle: {
+                        fontSize: 10
+                    }
+                },
+                yAxis: { type: 'category' },
+                visualMap: {
+                    orient: 'horizontal',
+                    left: 'left',
+                    show: false,
+                    min: 10,
+                    max: 100,
+                    // text: ["High Score", "Low Score"],
+                    // Map the score column to color
+                    dimension: 0,
+                    inRange: {
+                        color: ['#65B581', '#FFCE34', '#FD665F']
+                    }
+                },
+                series: [
+                    {
+                        type: 'bar',
+                        encode: {
+                            // Map the "amount" column to X axis.
+                            x: 'amount',
+                            // Map the "product" column to Y axis
+                            y: 'product'
+                        },
+                        barWidth: 30
+                    }
+                ]
+            }
+
+            option && myChart.setOption(option)
+        },
+        // cnas部门饼图
+        getLoadEchartsthree () {
+            let chartDom = document.getElementById('department')
+            if(chartDom!=null){
+                let radius,width,height,padding,center;
+                if(window.innerWidth > 1600){
+                    center = ["60%", "50%"];
+                    radius = "55%";
+                    width = 590;
+                    height = 450;
+                    padding = [16, 0, 0, 0]
+                }else{
+                    center = ["53%", "50%"];
+                    radius = "42%";
+                    width = 500;
+                    height = 400;
+                    padding = [16, 0, 0, 0]
+                }
+                // const center = window.innerWidth > 1600 ? "55%" : "42%";
+                const setEchartWH = {
+                    // 设置控制图表大小变量
+                    width: width,
+                    height: height
+                }
+                console.log(this.gaijinxiangbing,'setEchartWHsetEchartWH')
+                let myChart = echarts.init(chartDom, null, setEchartWH)
+                let option
+                option = {
+                    tooltip: {
+                        trigger: 'item'
+                    },
+                    
+                    label: {
+                        formatter: '{b}\n({c}项)',
+                        edgeDistance: '20%'
+                    },
+                    legend: {
+                        orient: 'vertical',
+                        left: 'left',
+                        padding: padding
+                    },
+                    grid: {
+                        top: '20%',
+                        bottom: '50%',
+                        left: '10%',
+                        right: '10%'
+                        },
+                    series: [
+                        {
+                            type: 'pie',
+                            radius: radius,
+                            data: this.gaijinxiangbing,
+                            center,
+                            emphasis: {
+                                itemStyle: {
+                                    shadowBlur: 10,
+                                    shadowOffsetX: 0,
+                                    shadowColor: 'rgba(0, 0, 0, 0.5)'
+                                }
+                            }
+                        }
+                    ]
+                }
+
+                option && myChart.setOption(option)
+            }
+        },
+        // cma部门饼图
+        getLoadCmaEcharts () {
+            var chartDom = document.getElementById('cma-department')
+            const setEchartWH = {
+                // 设置控制图表大小变量
+                width: 400,
+                height: 300
+            }
+
+            var myChart = echarts.init(chartDom, null, setEchartWH)
+            var option
+            option = {
+                tooltip: {
+                    trigger: 'item'
+                },
+                legend: {
+                    orient: 'vertical',
+                    left: 'left'
+                },
+                series: [
+                    {
+                        type: 'pie',
+                        radius: '50%',
+                        data: this.cmaPieData, // [{1:2,3:4}]
+                        emphasis: {
+                            itemStyle: {
+                                shadowBlur: 10,
+                                shadowOffsetX: 0,
+                                shadowColor: 'rgba(0, 0, 0, 0.5)'
+                            }
+                        }
+                    }
+                ]
+            }
+
+            option && myChart.setOption(option)
+        },
+        // 人员
+        async getEmployee () {
+            const this_ = this
+            const sql = 'select ID_,NAME_,CREATE_TIME_ FROM ibps_party_employee '
+            await curdPost('sql', sql).then((res) => {
+                this_.employeeList = res.variables.data
+            })
+        },
+        async getPart () {
+            const this_ = this
+            const sql = 'select * FROM ibps_party_position'
+            await curdPost('sql', sql).then((res) => {
+                this_.partList = res.variables.data
+            })
+        },
+        jieduan (value) {
+            if (value.includes('1')) {
+                return 20
+            } else if (value.includes('2')) {
+                return 40
+            } else if (value.includes('3')) {
+                return 60
+            } else if (value.includes('4')) {
+                return 80
+            } else if (value.includes('5')) {
+                return 100
+            } else if (value.includes('6')) {
+                return 100
+            } 
+        },
+        // 不符合项条款统计数据
+        getNoData (arr, type, callBlack) {
+            const firstArr = []
+            let secondArr = []
+            arr.forEach((it) => {
+                if (firstArr.length == 0) {
+                    secondArr.push('score')
+                    secondArr.push('不符合项')
+                    secondArr.push('product')
+                    firstArr.push(secondArr)
+                    secondArr = []
+                    secondArr.push(1)
+                    secondArr.push(1)
+                    secondArr.push(it.tiao_kuan_bian_ha)
+                    firstArr.push(secondArr)
+                    secondArr = []
+                } else {
+                    for (var i in firstArr) {
+                        const a = firstArr[i][2]
+                        const b = it.tiao_kuan_bian_ha
+                        if (firstArr[i][2] == it.tiao_kuan_bian_ha) {
+                            firstArr[i][0] = firstArr[i][0] + 1
+                            firstArr[i][1] = firstArr[i][1] + 1
+                            break
+                        } else if (i == firstArr.length - 1) {
+                            secondArr.push(1)
+                            secondArr.push(1)
+                            secondArr.push(it.tiao_kuan_bian_ha)
+                            firstArr.push(secondArr)
+                            secondArr = []
+                            break
+                        }
+                    }
+                }
+            })
+            type == 'CMA' ? (this.cmaSuorce = firstArr) : (this.source = firstArr)
+            callBlack()
+        },
+        // 饼图数据
+        async getPieData (arr, type, callBlack) {
+            
+            callBlack()
+        },
+        // 检查表编制完成数据
+        async getCheckData () {
+            const ids = this.obj[0]
+            let data = []
+            const sql = `select COUNT(*) AS num FROM t_dsrw WHERE guan_lian_fu_biao = '${ids.id_}' UNION ALL SELECT COUNT(*) AS num FROM t_nsjcbxe WHERE ji_hua_zong_wai_j =  '${ids.ji_hua_zong_wai_j}' AND shi_fou_guo_shen_ = '已完成'`
+            await curdPost('sql', sql).then((res) => {
+                data = res.variables.data
+            })
+            this.checkValue = parseInt(data[1].num / data[0].num * 100)
+            let finish = []
+            let noFinish = []
+            const sqsl1 = `select a.id_,a.nei_shen_yuan_,a.bei_nei_shen_bu_m,a.kai_shi_shi_jian_,a.jie_shu_shi_jian_,b.shi_fou_guo_shen_ FROM t_nsjcx AS a  LEFT JOIN  t_nsjcbxe AS b ON a.bei_nei_shen_bu_m = b.bei_nei_shen_bu_m WHERE a.parent_id_ = '${ids.id_}' AND b.ji_hua_zong_wai_j = '${ids.ji_hua_zong_wai_j}'  ORDER BY a.create_time_,a.id_ DESC`
+            await curdPost('sql', sqsl1).then((res) => {
+                finish = res.variables.data
+            })
+            let id = ''
+            finish.forEach(item => {
+                id += item.id_ + ','
+            })
+            id = id.slice(0, id.length - 1)
+            id = id.replace(/\,/g, '","')
+            const sql3 = `select id_,nei_shen_yuan_,bei_nei_shen_bu_m,kai_shi_shi_jian_,jie_shu_shi_jian_,shi_shi_ji_hua_wa as shi_fou_guo_shen_ FROM t_nsjcx  WHERE  id_ NOT IN ("${id}") AND parent_id_ = "${ids.id_}" `
+            await curdPost('sql', sql3).then((res) => {
+                noFinish = res.variables.data
+            })
+            this.allCheckData = finish.concat(noFinish)
+        },
+        // 核查数据
+        async getInit () {
+            const data = this.obj[0]
+            let that = this
+            let jieduanvalue
+            let sql = `select COUNT(*) as num from t_gsfzrbgtxb where zong_wai_jian_ = '${data.id_}' union all
+                        select COUNT(*) as num from t_gshyjyb where ji_hua_zhu_jian_ = '${data.id_}' union all
+                        select COUNT(*) as num from t_gsbgb where guan_lian_ji_hua_ = '${data.id_}' union all
+                        select COUNT(*) as num from t_glpsjhb where zong_wai_jian_ = '${data.id_}'`
+            let sql1 = `select COUNT(*) as num from t_glpsjhb where zong_wai_jian_ = '${data.id_}' and shi_fou_guo_shen_ ='已完成' `
+            console.log('64552464256')
+            await Promise.all([curdPost('sql', sql),curdPost('sql', sql1)]).then(([res,res1]) => {
+                let panduan = res.variables.data
+                let panduan1 = res1.variables.data
+                let jishu = 1
+                aa: for (let i = 0; i < panduan.length; i++) {
+                    if(panduan[i].num!=0){
+                        jishu +=1
+                    }else{
+                        break aa;
+                    }
+                }
+                // if(panduan1[0].num!=0){
+                //     jishu +=1
+                // }
+                jieduanvalue =  jishu+''
+                that.activeIndex = that.jieduan(jieduanvalue)
+                that.jieduanValue = that.activeIndex
+                that.gettable(data.ji_hua_zong_wai_j)
+            })
+            
+        },
+        async gettable (id) {
+            const this_ = this
+            // this_.CNASTableData = []
+            // this_.CMAtable = []
+            // const sql = "select * FROM t_nsbfhxjlhzzb WHERE parent_id_ =(SELECT id_  FROM t_nsbfhxjlhzbzc WHERE ji_hua_zong_wai_j ='" + id + "' ORDER BY create_time_ DESC LIMIT 1)"
+            this_.gaijinxianglie.length = 0
+            this_.gaijinxiangbing.length = 0
+            const sql = `select * from t_glpsjhb where zong_wai_jian_ = '${this.obj[0].id_}'`
+            const sql1 = `select ibps_party_entity.NAME_,c.numA,c.num,if(c.numA=0,0,ROUND((c.num/c.numA)*100,2)) as chu from (select b.fu_ze_bu_men_,IFNULL(a.num,0) as num,IFNULL(b.numA,0) as numA from (select t_glpsjhb.fu_ze_bu_men_,COUNT(t_glpsjhb.id_) as num from t_glpsjhb where t_glpsjhb.zong_wai_jian_ = '${this.obj[0].id_}' and t_glpsjhb.shi_fou_guo_shen_ = '已完成' GROUP BY t_glpsjhb.fu_ze_bu_men_) as a right JOIN (select t_glpsjhb.fu_ze_bu_men_,COUNT(t_glpsjhb.id_) as numA from t_glpsjhb where t_glpsjhb.zong_wai_jian_ = '${this.obj[0].id_}' GROUP BY t_glpsjhb.fu_ze_bu_men_) as b on a.fu_ze_bu_men_ = b.fu_ze_bu_men_) c LEFT JOIN ibps_party_entity on c.fu_ze_bu_men_ = ibps_party_entity.id_`
+            await Promise.all([curdPost('sql', sql),curdPost('sql', sql1)]).then(([res,res1]) => {
+                const data = res1.variables.data
+                this_.gaijinxianglie = res.variables.data
+                data.forEach(e => {
+                    this_.gaijinxiangbing.push({'name':e.NAME_,'value':e.numA})
+                    console.log(e,this_.gaijinxiangbing)
+                });
+                this_.$nextTick(() => {
+                    this_.getPieData(this_.gaijinxiangbing, 'CNAS', this_.getLoadEchartsthree)
+                })
+            })
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+
+.bg {
+  .main {
+    width: 400px;
+    height: 300px;
+    position: relative;
+    top: 16px;
+    margin: 0 auto;
+    .wheel-title {
+      position: absolute;
+      top: 60px;
+      left: -8px;
+      top: 86%;
+      left: calc(90% - 205px);
+      // color: #000;
+      // font-weight: bold;
+    }
+  }
+  ::v-deep .el-dialog__wrapper .el-dialog__body {
+    overflow-x: hidden !important;
+    }
+  .nodata {
+    width: 90%;
+    margin: 20px auto;
+    font-size: 16px;
+    text-align: center;
+  }
+  .check-progress{
+    width: 92%;
+    position: relative;
+    line-height: 1;
+    margin: 0 auto;
+    margin-left: 5%;
+  }
+  .urgingBtn{
+    background-color: #e6a23d;
+    color: white; 
+    border: none;
+    padding: 4px;
+    border-radius: 6%;
+  }
+  #main {
+    width: 100%;
+    height: 100%;
+  }
+  .steps-box {
+    user-select: none;
+    width: 90%;
+    height: 2px;
+    position: relative;
+    margin: 10px auto;
+    display: flex;
+    justify-content: space-between;
+    // <!-- 步骤条背景进度条 -->
+    .line {
+      display: block;
+      margin: 0 auto;
+      position: absolute;
+      top: 27px;
+      left: 5%;
+      background: #67c23a;
+      width: 95%;
+      height: 2px;
+      overflow: hidden;
+      .plan {
+        position: absolute;
+        top: 0;
+        left: 0;
+        height: 2px;
+        transition: 0.5s;
+        background: #37a2da;
+      }
+    }
+    .Article-steps {
+      width: 100%;
+      display: flex;
+      justify-content: space-between;
+      .step {
+        .title {
+          font-size: 17px;
+          font-weight: bold;
+          color: #808080;
+        }
+        .step-num {
+          position: absolute;
+          width: 58px;
+          height: 58px;
+          display: inline-block;
+          line-height: 50px;
+          background: #808080;
+          // clip-path: polygon(50% 0, 100% 85%, 0 85%);
+          color: white;
+          font-weight: bold;
+          z-index: 999;
+          border-radius: 50%;
+          text-align: center;
+          // transition: 0.5s;
+          font-size: 10px;
+          display: flex;
+          align-items: center;
+          .icon {
+            position: absolute;
+            left: -12px;
+            color: #8ab;
+            font-size: 16px;
+            font-weight: bold;
+            top: 35%;
+          }
+          p {
+            line-height: 20px;
+            width: 40px;
+            overflow: hidden;
+            line-height: 18px;
+            white-space: normal;
+            margin: 0 auto;
+            text-align: center;
+          }
+          .num {
+            transition: 0.5s;
+            display: inline-block;
+          }
+        }
+        .post{
+          text-align: center;
+          font-size: 12px;
+          margin-top: 5px;
+          position: absolute;
+          top: 60px;
+          color: #2d7df5;
+          width: 60px;
+          overflow: hidden;
+        }
+      }
+    }
+
+    // //当前所在位置样式
+    .current-active
+    {
+      .step-num {
+        background: #2d7df5 !important;
+      }
+      .title {
+        color: #2d7df5 !important;
+      }
+    }
+    .step-active
+    {
+      .step-num {
+        background: #00CC00 !important;
+      }
+      .title {
+        color: #2d7df5 !important;
+      }
+    }
+    .Article-content {
+      padding: 20px;
+      .btn {
+        width: 150px;
+        display: block;
+        margin: 0 auto;
+        margin-bottom: 10px;
+        background: #2d7df5;
+        color: white;
+        padding: 10px;
+        border-radius: 5px;
+        cursor: pointer;
+      }
+      .content {
+        padding: 20px;
+      }
+    }
+  }
+  .cnas {
+    margin: 0 auto;
+  }
+  .cma {
+    margin: 10px auto;
+  }
+  .table-echarts {
+    width: 90%;
+     margin: 10px auto 0px;
+  }
+  .table-echarts {
+    width: 90%;
+    display: flex;
+    justify-content: space-between;
+    .in-echarts {
+      width: 400px;
+      height: 300px;
+    }
+    #in-echarts {
+      width: 100%;
+      height: 100%;
+    }
+    .department {
+        width:100%;
+        // height:600px;
+        position: relative;
+    //   margin-left: 40px;
+    }
+    #department {
+      position: absolute;
+      left: 50%;
+      transform: translateX(-50%);
+    }
+    ::deep .el-checkbox__inner{
+        opacity: 0;
+    } 
+  }
+}
+</style>

+ 2 - 0
src/views/system/jbdScan/scan.vue

@@ -11,6 +11,7 @@ import deviceTag from './goods/deviceTag.vue'
 import deviceVerificationTag from './goods/deviceVerificationTag.vue'
 import deviceFailureTag from './goods/deviceFailureTag.vue'
 import neishenzhuangtai from './goods/neishenzhuangtai'
+import guanshenzhuangtai from './goods/guanshenzhuangtai'
 import bwTag from './goods/bwTag.vue'
 import fzrkTag from './goods/fzrkTag.vue'
 import kucuntag from './goods/kucuntag.vue'
@@ -21,6 +22,7 @@ export default {
         deviceVerificationTag,
         deviceFailureTag,
         neishenzhuangtai,
+        guanshenzhuangtai,
         bwTag,
         fzrkTag,
         kucuntag