XiaoRuby
2023-08-23 65a67490426dadcf62fc1bef3cb54dffa27d099d
Merge remote-tracking branch 'origin/master'

# Conflicts:
# src/views/standardLibrary/index.vue
已修改15个文件
已添加3个文件
1380 ■■■■ 文件已修改
.env.development 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/App.vue 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/experiment/passRateStatistics.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/experiment/reportAuditing.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/home.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/url.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/util/requestUtil.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/404_images/bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Sidebar/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/checkTheReport/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/inspectionApplication/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/passRateStatistics/index.vue 419 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/planAssignments/plan.vue 299 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/experiment/reportAuditing/index.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/home/index.vue 458 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/worker/test.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.env.development
@@ -2,4 +2,4 @@
ENV = 'development'
# base api
VUE_APP_BASE_API =  'http://192.168.110.167:1234/'
VUE_APP_BASE_API =  'http://localhost:1234/'
package.json
@@ -40,6 +40,7 @@
    "babel-jest": "23.6.0",
    "babel-plugin-dynamic-import-node": "2.3.3",
    "chalk": "2.4.2",
    "comlink-loader": "^2.0.0",
    "connect": "3.6.6",
    "eslint": "6.7.2",
    "eslint-plugin-vue": "6.2.2",
src/App.vue
@@ -48,6 +48,16 @@
        color: #fff;
    }
    
    .el-message-box{
        border: 0;
        border-radius: 15px;
    }
    .el-message-box__header * {
        font-size: 16px !important;
        color: #fff !important;
    }
    .el-dialog__headerbtn .el-dialog__close{
        color: #fff;
        top: -20px;
@@ -67,4 +77,20 @@
      box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
      padding: 0 14px;
    }
    .ins_state_success{
        background-color: #67c23a;
        color: #fff;
        display: initial;
        padding: 6px 10px;
        border-radius: 4px;
    }
    .ins_state_error{
        background-color: #f56c6c;
        color: #fff;
        display: initial;
        padding: 6px 10px;
        border-radius: 4px;
    }
</style>
src/api/experiment/passRateStatistics.js
@@ -44,4 +44,15 @@
      method: 'get',
      params
    })
  }
  /**
   * getSampleOptions
   */
  export function getSampleOptions(params) {
    return request({
      url: '/qualificationRate/getSampleOptions',
      method: 'get',
      params
    })
  }
src/api/experiment/reportAuditing.js
@@ -2,8 +2,17 @@
export function selectAllReportCheck(params) {
  return request({
    url: '/reportAuditing/selectAllReportAuditing',
    // url: '/reportAuditing/selectAllReportAuditing',
    url: '/report/selectAllReport',
    method: 'get',
    params
  })
}
// å®¡æ ¸
export function checkApi(params){
  return request({
    url: '/report/check',
    method: 'post',
    params
  })
}
src/api/home.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
import request from '@/utils/request'
//获取已检验top3
export function getVerifiedTop3(params) {
    return request({
      url: '/home/checktop3',
      method: 'get',
      params
    })
}
//获取未检验top4
export function getUncheckedTop4(params) {
    return request({
      url: '/home/unchecktop4',
      method: 'get',
      params
    })
}
//获取原材料与成品合格率
export function getMatAndFinshQualified(params) {
    return request({
      url: '/home/qualified',
      method: 'get',
      params
    })
}
//获取检验与未检验的单子与项目的数量
export function getCheckAndProjectNum(params) {
    return request({
      url: '/home/checkProjectNum',
      method: 'get',
      params
    })
}
src/api/url.js
@@ -1,4 +1,10 @@
const url = {
    "selectAllPlan": "/plan/selectAllPlan",//查询所有检验计划
    "choosecheck": "/plan/choosecheck",//分配--选择检验人
    "chooseinstum": "/plan/chooseinstum",//分配--选择设备
    "reported": "/plan/reported",//上报
    "distribution": "/plan/distribution",//分配
    "check": "/plan/check",//检验
}
export default function(Vue) {
src/api/util/requestUtil.js
@@ -15,6 +15,15 @@
        data
    })
}
export function wpost(path, params) {
    return request({
        url: path,
        method: 'post',
        params
    })
}
export function postFile(path, data) {
    return request({
        url: path,
src/assets/404_images/bg.png
src/layout/components/Sidebar/index.vue
@@ -31,6 +31,7 @@
      'sidebar'
    ]),
    routes() {
      console.log(this.$router.options.routes);
      return this.$router.options.routes
    },
    activeMenu() {
src/main.js
@@ -14,6 +14,11 @@
import store from './store'
import router from './router'
//引入echarts
import echarts from 'echarts'
Vue.prototype.$echarts = echarts
import '@/icons' // icon
import '@/permission' // permission control
src/views/experiment/checkTheReport/index.vue
@@ -100,7 +100,7 @@
          <el-table-column prop="approver" label="审批人" min-width="8%">
            <template slot-scope="scope">
              <span>
                <el-tag type="info" icon="el-icon-user">
                <el-tag v-if="scope.row.approver!=null && scope.row.approver!=''" type="info" icon="el-icon-user">
                  <i class="el-icon-user">{{ scope.row.approver }}</i>
                </el-tag>
              </span>
src/views/experiment/inspectionApplication/index.vue
@@ -164,7 +164,7 @@
                <el-pagination
                  class="pagination"
                  :current-page="currentPage"
                  :page-sizes="[1, 10, 20, 30]"
                  :page-sizes="[ 10, 20, 30,40]"
                  :page-size="pageSize"
                  layout="total, sizes, prev, pager, next, jumper"
                  :total="total"
@@ -721,10 +721,10 @@
      this.total = this.inspectionTable.length
    },
    reset(){
      this.countSize = 1
      this.searchData = { }
      // console.log('2222');
      this.selectInspectsList()
      this.countSize = 1;
      this.pageSize = 8;
      this.searchData = { };
      this.selectInspectsList();
    },
    //被选中的信息 å•选
    handleSelectionChange(val) {
src/views/experiment/passRateStatistics/index.vue
@@ -19,6 +19,14 @@
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item style="margin-left: 40px;" label="样品:">
          <el-select v-model="searchData.code" filterable placeholder="请选择">
            <el-option v-for="item in sampleOptions" :key="item.value" :label="item.label" :value="item.value">
              <span style="float: left">{{ item.label }}</span>
              <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
            </el-option>
          </el-select>
        </el-form-item>
        <div class="rightBtn">
          <el-form-item>
            <el-button type="primary" plain size="mini">清空</el-button>
@@ -31,12 +39,18 @@
    <div class="chart-content">
      <div class="qualified-wrapper">
        <div style="margin-left: 20px;padding:20px 0px;font-size:18px">检测样品合格率统计</div>
        <div class="qualified" ref="qualified"></div>
        <div :hidden="testSample" class="qualified" ref="qualified"></div>
        <div :hidden="!testSample" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">暂无数据
        </div>
      </div>
      <div class="unqualified">
        <div class="firstBox-wrapper">
          <div style="margin-left: 20px;padding:20px 0px;font-size:18px">供应商不合格次数统计</div>
          <div class="firstBox" ref="unqualified_provider"></div>
          <div style="margin-left: 20px;padding:20px 0px;font-size:18px">供应商合格率统计</div>
          <div>
            <div :hidden="supplierData" class="firstBox" ref="unqualified_provider"></div>
            <div :hidden="!supplierData" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">
              æš‚无数据</div>
          </div>
        </div>
        <div class="secondBox-wrapper">
          <div class="secondBox_header">
@@ -46,12 +60,17 @@
              }}</el-radio-button>
            </el-radio-group>
          </div>
          <div class="secondBox" ref="unqualified_project"></div>
          <div style="width: 100%;height: 100;">
            <div :hidden="projectData" class="secondBox" ref="unqualified_project"></div>
            <div :hidden="!projectData" style="height: 100%;text-align: center; color: #999696df; margin-top: 100px;">暂无数据
            </div>
          </div>
        </div>
      </div>
    </div>
    <div class="bottom">
      <el-button type="primary" size="mini">数据导出</el-button>
      <!-- <el-button type="primary" size="mini" @click="testWork">测试</el-button> -->
    </div>
  </div>
</template>
@@ -70,18 +89,26 @@
})
import * as echarts from 'echarts'
import { getSupplierList,getTestSampleStatistics,getSupplierNoPassStatistics,getNoPassProjectStatistics } from '@/api/experiment/passRateStatistics';
import { getSupplierList, getTestSampleStatistics, getSupplierNoPassStatistics, getNoPassProjectStatistics, getSampleOptions } from '@/api/experiment/passRateStatistics';
import { dateFormat } from '../../../utils/dateUtil'
import MyWorker from 'comlink-loader!../../../worker/test';
export default {
  data() {
    return {
      supplier: [],
      sampleOptions: [],
      searchData: {
        date: [],
        type: null,
        supplier: null
        supplier: null,
        sample: null,
        code: null
      },
      options: [
        {
          label: '全部',
          value: 3
        },
        {
          label: '原材料',
          value: 0
@@ -109,191 +136,228 @@
      rules: {
        // date: [{ required: true, message: '请输入账号', trigger: 'blur' }],
        // type: [{ required: true, message: '请输入名字', trigger: 'blur' }]
      }
      },
      supplierNoPassStatistics: null,
      supplierData: false,
      projectStatistics: null,
      projectData: false,
      testSampleStatistics: null,
      testSample: false,
      m1: null,
      m2: null,
      m3: null
    }
  },
  mounted() {
    this.getSupplierList()
    this.getTestSampleStatistics()
    this.getSupplierNoPassStatistics()
    const chartDom_qualified = this.$refs.qualified;
    const chartDom_unqualified_provider = this.$refs.unqualified_provider;
    const chartDom_unqualified_project = this.$refs.unqualified_project;
    const myChart1 = echarts.init(chartDom_qualified);
    const myChart2 = echarts.init(chartDom_unqualified_provider);
    const myChart3 = echarts.init(chartDom_unqualified_project);
    /**
     * æ£€æµ‹åˆæ ¼çŽ‡ç»Ÿè®¡
     */
    const option_qualified = {
      tooltip: {
        trigger: 'axis',
        axisPointer: { // åæ ‡è½´æŒ‡ç¤ºå™¨ï¼Œåæ ‡è½´è§¦å‘有效
          type: 'shadow' // é»˜è®¤ä¸ºç›´çº¿ï¼Œå¯é€‰ä¸ºï¼š'line' | 'shadow'
        }
      },
      legend: {
        data: ['数据1', '数据2', '数据3']
      },
      xAxis: [
        {
          type: 'category',
          data: ['第一批', '第二批', '第三批', '第四批']
        }
      ],
      yAxis: [
        {
          type: 'value',
          axisLabel: {
            formatter: '{value}'
          }
        }
      ],
      series: [
        {
          name: '数据1',
          type: 'bar',
          data: [7245, 3475, 1237, 3456]
        },
        {
          name: '数据2',
          type: 'bar',
          data: [9965, 9075, 4875, 8687]
        },
        {
          name: '数据3',
          type: 'line',
          yAxisIndex: 0,
          symbolSize: 3, // æŠ˜çº¿èŠ‚ç‚¹çš„å¤§å°
          symbol: 'circle', // æŠ˜çº¿èŠ‚ç‚¹çš„å½¢çŠ¶
          smooth: false, // å¹³æ»‘曲线
          data: [1465, 6437, 3257, 6537]
        }
      ]
    };
    /**
     * ä¾›åº”商
     */
    const option_unqualified1 = {
      tooltip: {
        trigger: 'axis',
        axisPointer: { // åæ ‡è½´æŒ‡ç¤ºå™¨ï¼Œåæ ‡è½´è§¦å‘有效
          type: 'shadow' // é»˜è®¤ä¸ºç›´çº¿ï¼Œå¯é€‰ä¸ºï¼š'line' | 'shadow'
        },
        formatter: function (params) {
          let tooltip = params[0].name + '<br/>';
          params.forEach(function (item) {
            tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // å°†æ•°æ®ä¿ç•™ä¸¤ä½å°æ•°å¹¶è½¬ä¸ºç™¾åˆ†æ¯”形式
          });
          return tooltip;
        }
      },
      legend: {
        data: ['合格数量', '不合格数量']
      },
      xAxis: {
        data: ['供应商1', '供应商2', '供应商3', '供应商4']
      },
      yAxis: [
        {
          type: 'value',
          axisLabel: {
            formatter: '{value}%'
          }
        }
      ],
      series: [
        {
          name: '合格数量',
          data: [52, 46, 39, 66],
          type: 'bar',
          stack: 'x'
        },
        {
          name: '不合格数量',
          data: [47, 53, 60, 33],
          type: 'bar',
          stack: 'x'
        }
      ]
    };
    /**
     * ä¸åˆæ ¼é¡¹ç›®
     */
    const option_unqualified2 = {
      legend: {
        orient: 'vertical',
        x: 'left',
        data: ['绝缘偏心率', '试验结果', '导体屏蔽最大值']
      },
      title: {
        text: '',
        left: 'center',
        top: 'center'
      },
      series: [
        {
          type: 'pie',
          data: [
            {
              value: 40,
              name: '绝缘偏心率'
            },
            {
              value: 20,
              name: '试验结果'
            },
            {
              value: 40,
              name: '导体屏蔽最大值'
            }
          ],
          radius: ['40%', '70%'],
          label: {
            show: true,
            formatter: '{b}: {c}'
          },
        }
      ]
    }
    myChart1.setOption(option_qualified);
    myChart2.setOption(option_unqualified1);
    if (this.type === 0) {
      myChart3.setOption(option_unqualified2);
    }
    if (this.type === 1) {
      myChart3.setOption(option_unqualified2);
    }
  async mounted() {
    await this.start()
    this.tableStart()
  },
  methods: {
    search() {
      this.getTestSampleStatistics()
    },
    dateHandle(){
      let data=JSON.parse(JSON.stringify(this.searchData))
      if(this.searchData.date.length!=0&&this.searchData.date !=[]){
        data.beginDate=dateFormat(this.searchData.date[0])
        data.endDate=dateFormat(this.searchData.date[1])
    testWork(){
      const inst = new MyWorker();
      inst.test()
      for (let index = 0; index < 100; index++) {
        console.log("主线程"+index);
      }
      data.date=null
    },
    async search() {
      this.testSampleStatistics = null
      this.supplierNoPassStatistics = null
      this.projectStatistics = null
      this.supplier = []
      this.sampleOptions = []
      await this.start()
      this.tableStart()
    },
    dateHandle() {
      let data = JSON.parse(JSON.stringify(this.searchData))
      if (this.searchData.date.length != 0 && this.searchData.date != []) {
        data.beginDate = dateFormat(this.searchData.date[0])
        data.endDate = dateFormat(this.searchData.date[1])
      }
      if (data.supplier == '全部') {
        data.supplier = null
      }
      if (data.type === 3) {
        data.type = null
      }
      if (this.sampleOptions.length > 0 && this.sampleOptions != []) {
        let labelSam = this.sampleOptions.filter(item => {
          return item.value == data.code
        })[0]
        data.sample = labelSam.label
      }
      if (data.code == '全部') {
        data.code = null
        data.sample = null
      }
      data.date = null
      return data
    },
    async getSupplierList() {
      let res = await getSupplierList()
      this.supplier.push({ label: '全部', value: '全部' })
      res.data.forEach(item => {
        this.supplier.push({ label: item.supplier, value: item.supplier })
      })
    },
    getTestSampleStatistics(){
     let param= this.dateHandle()
     let res =getTestSampleStatistics(param)
    async getTestSampleStatistics() {
      let param = this.dateHandle()
      let res = await getTestSampleStatistics(param)
      this.testSample = !res.data.noData
      this.testSampleStatistics = res.data
    },
    getSupplierNoPassStatistics(){
      let param= this.dateHandle()
      getSupplierNoPassStatistics(param)
    async getSupplierNoPassStatistics() {
      let param = this.dateHandle()
      let res = await getSupplierNoPassStatistics(param)
      this.supplierData = !res.data.noData
      this.supplierNoPassStatistics = res.data
    },
    async getNoPassProjectStatistics() {
      let param = this.dateHandle()
      let res = await getNoPassProjectStatistics(param)
      this.projectData = !res.data.noData
      this.projectStatistics = res.data
    },
    async start() {
      await this.getTestSampleStatistics()
      await this.getSupplierNoPassStatistics()
      await this.getNoPassProjectStatistics()
      await this.getSupplierList()
      await this.getSampleOptions()
    },
    async getSampleOptions() {
      let res = await getSampleOptions()
      this.sampleOptions.push({
        label: '全部',
        value: '全部'
      })
      res.data.forEach(item => {
        let data = {
          label: item.name,
          value: item.code
        }
        this.sampleOptions.push(data)
      })
    },
    tableStart() {
      const chartDom_qualified = this.$refs.qualified;
      const chartDom_unqualified_provider = this.$refs.unqualified_provider;
      const chartDom_unqualified_project = this.$refs.unqualified_project;
      const myChart1 = echarts.init(chartDom_qualified);
      const myChart2 = echarts.init(chartDom_unqualified_provider, null, {
        height: 300
      });
      const myChart3 = echarts.init(chartDom_unqualified_project, null, {
        height: 268
      });
      window.addEventListener("resize",function(){
        myChart1.resize()
        myChart2.resize()
        myChart3.resize()
      })
      this.m1 = myChart1
      this.m2 = myChart2
      this.m3 = myChart3
      /**
       * æ£€æµ‹åˆæ ¼çŽ‡ç»Ÿè®¡
       */
      const option_qualified = {
        tooltip: {
          trigger: 'axis',
          axisPointer: { // åæ ‡è½´æŒ‡ç¤ºå™¨ï¼Œåæ ‡è½´è§¦å‘有效
            type: 'shadow' // é»˜è®¤ä¸ºç›´çº¿ï¼Œå¯é€‰ä¸ºï¼š'line' | 'shadow'
          }
        },
        legend: {
          data: ['合格', '不合格']
        },
        xAxis: [
          {
            type: 'category',
            data: this.testSampleStatistics.xAxis
          }
        ],
        yAxis: [
          {
            type: 'value',
            axisLabel: {
              formatter: '{value}'
            }
          }
        ],
        series: this.testSampleStatistics.series
      };
      /**
       * ä¾›åº”商
       */
      const option_unqualified1 = {
        tooltip: {
          trigger: 'axis',
          axisPointer: { // åæ ‡è½´æŒ‡ç¤ºå™¨ï¼Œåæ ‡è½´è§¦å‘有效
            type: 'shadow' // é»˜è®¤ä¸ºç›´çº¿ï¼Œå¯é€‰ä¸ºï¼š'line' | 'shadow'
          },
          formatter: function (params) {
            let tooltip = params[0].name + '<br/>';
            params.forEach(function (item) {
              tooltip += item.marker + ' ' + item.seriesName + ': ' + item.value.toFixed(2) + '%<br/>'; // å°†æ•°æ®ä¿ç•™ä¸¤ä½å°æ•°å¹¶è½¬ä¸ºç™¾åˆ†æ¯”形式
            });
            return tooltip;
          }
        },
        legend: {
          data: ['合格数量', '不合格数量']
        },
        xAxis: {
          data: this.supplierNoPassStatistics.xAxis
        },
        yAxis: [
          {
            type: 'value',
            axisLabel: {
              formatter: '{value}%'
            }
          }
        ],
        series: this.supplierNoPassStatistics.series
      };
      /**
       * ä¸åˆæ ¼é¡¹ç›®
       */
      const option_unqualified2 = {
        legend: {
          orient: 'vertical',
          x: 'left',
          data: this.projectStatistics.legend
        },
        title: {
          text: '',
          left: 'center',
          top: 'center'
        },
        series: [
          {
            type: 'pie',
            data: this.projectStatistics.series,
            radius: ['40%', '70%'],
            label: {
              show: true,
              formatter: '{b}: {c}%'
            },
          }
        ]
      }
      myChart1.setOption(option_qualified);
      myChart2.setOption(option_unqualified1);
      if (this.type === 0) {
        myChart3.setOption(option_unqualified2);
      }
      if (this.type === 1) {
        myChart3.setOption(option_unqualified2);
      }
    }
  }
}
@@ -303,6 +367,7 @@
.content-main {
  height: 100%;
  width: 100%;
  overflow: auto;
  .top-bar {
    position: absolute;
src/views/experiment/planAssignments/plan.vue
@@ -17,11 +17,11 @@
        margin: 10px;
        padding: 15px;
        background-color: white;
        height: calc(100vh - 15vh);
        height: calc(100vh - 18vh);
        overflow-y: auto;
    }
    .order_num{
    .order_num {
        border-radius: 1rem;
        width: 35px;
        height: 25px;
@@ -56,41 +56,77 @@
            <el-button size="small">重置</el-button>
        </div>
        <div class="thing">
            <el-table :data="tableData" style="width: 100%;" row-key="id" default-expand-all
            <el-table :data="tableData" style="width: 100%;" row-key="code" default-expand-all
                :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :key="upIndex">
                <el-table-column type="index" width="50" label="序号">
                </el-table-column>
                <el-table-column prop="date" label="申请单号">
                <el-table-column prop="code" label="申请单号" width="250px">
                    <template slot-scope="scope">
                        <div style="display: flex;">
                            <div v-if="scope.row.code=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">01</div>
                            <div v-else-if="scope.row.code=='02'" style="color: #57c981;background-color: #f1fbf4;" class="order_num">02</div>
                            <div v-else-if="scope.row.code=='03'" style="color: #dfa8fb;background-color: #faf2ff;" class="order_num">03</div>
                            <div>{{scope.row.date}}</div>
                            <div v-if="scope.row.orderNum=='01'" style="color: #3caaff;background-color: #eff5ff;" class="order_num">
                                01
                            </div>
                            <div v-else-if="scope.row.orderNum=='02'" style="color: #57c981;background-color: #f1fbf4;"
                                class="order_num">
                                02</div>
                            <div v-else-if="scope.row.orderNum=='03'" style="color: #dfa8fb;background-color: #faf2ff;"
                                class="order_num">
                                03</div>
                            <div>{{scope.row.code}}</div>
                        </div>
                    </template>
                </el-table-column>
                <el-table-column prop="name" label="检验结果">
                <el-table-column prop="name" label="名称" width="200px">
                </el-table-column>
                <el-table-column prop="address" label="地址">
                <el-table-column prop="unit" label="单位">
                </el-table-column>
                <el-table-column label="操作" width="80">
                <el-table-column prop="required" label="要求值">
                </el-table-column>
                <el-table-column prop="internal" label="内控值">
                </el-table-column>
                <el-table-column prop="testValue" label="检验值">
                </el-table-column>
                <el-table-column prop="checker" label="执行人">
                </el-table-column>
                <el-table-column prop="instrumentname" label="检验设备">
                </el-table-column>
                <el-table-column prop="testState" label="检验状态" width="100px">
                    <template slot-scope="scope">
                        <el-button size="mini" type="primary" v-if="isIfReport(scope.row)">上报</el-button>
                        <el-button size="mini" type="warning" @click="openUpDia(scope.row)"
                            v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.address==null">分配</el-button>
                        <el-button size="mini" type="success" @click="openUpInsDia(scope.row)"
                            v-else-if="scope.row.code=='03'&&scope.row.insId==undefined&&scope.row.name==null">检验</el-button>
                        <el-tag type="success" v-if="scope.row.testState==1">合格</el-tag>
                        <el-tag type="danger" v-else-if="scope.row.testState==0">不合格</el-tag>
                    </template>
                </el-table-column>
                <el-table-column prop="startTime" label="检验开始" width="100px">
                </el-table-column>
                <el-table-column prop="endTime" label="检验结束" width="100px">
                </el-table-column>
                <el-table-column label="操作" width="150">
                    <template slot-scope="scope">
                        <el-button size="mini" type="primary" v-if="isIfReport(scope.row)"
                            @click="addReported(scope.row.id)">上报</el-button>
                        <el-button size="mini" type="text" @click="openUpDia(scope.row)"
                            v-if="scope.row.orderNum=='02'">分配</el-button>
                        <el-button size="mini" type="text" @click="openUpInsDia(scope.row)"
                            v-if="scope.row.orderNum=='02'">检验</el-button>
                    </template>
                </el-table-column>
            </el-table>
        </div>
        <el-dialog title="分配设备和人员" :visible.sync="upDia" width="500px" top="30vh">
            <div class="body">
                <el-row style="line-height: 46px;">
                <el-row style="line-height: 50px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">人员:</el-col>
                    <el-col :span="16" :offset="1">
                        <el-input v-model="upData.address" size="small" clearable></el-input>
                        <el-select v-model="upData.checker" size="medium" clearable style="width: 100%;">
                            <el-option v-for="(a, ai) in users" :key="ai" :label="a.name" :value="a.id"></el-option>
                        </el-select>
                    </el-col>
                </el-row>
                <el-row style="line-height: 50px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">设备:</el-col>
                    <el-col :span="16" :offset="1">
                        <el-cascader v-model="upData.device" :options="devices" size="medium" style="width: 100%;" clearable
                            :props="{label: 'name',value: 'id',emitPath: false}" :show-all-levels="false"></el-cascader>
                    </el-col>
                </el-row>
            </div>
@@ -102,29 +138,37 @@
        <el-dialog title="检验" :visible.sync="upInsDia" width="500px">
            <div class="body" style="max-height: 50vh;overflow-y: auto;">
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">样品编码:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">样品名称:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">申请单编码:</el-col>
                    <el-col :span="7">{{upData.insId}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">样品名称:</el-col>
                    <el-col :span="7">{{upData.productName}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">检验项目:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">单位:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">检验项目:</el-col>
                    <el-col :span="7">{{upData.name}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">单位:</el-col>
                    <el-col :span="7">{{upData.unit}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="4" style="font-size: 14px;text-align: right;">标准值:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="4" style="font-size: 14px;text-align: right;">内控值:</el-col>
                    <el-col :span="8">{{upData.date}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">标准值:</el-col>
                    <el-col :span="7">{{upData.required}}</el-col>
                    <el-col :span="5" style="font-size: 14px;text-align: right;">内控值:</el-col>
                    <el-col :span="7">{{upData.internal}}</el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col :span="5" style="font-size: 14px;text-align: right;">检验状态:</el-col>
                    <el-col :span="7">
                        <el-tag type="success" v-if="upData.testState==1">合格</el-tag>
                        <el-tag type="danger" v-else-if="upData.testState==0">不合格</el-tag>
                        <el-tag type="info" v-else>无结果</el-tag>
                    </el-col>
                </el-row>
                <el-row style="line-height: 46px;">
                    <el-col style="text-align: right;"><el-button size="mini" @click="addRes">添加检验值</el-button></el-col>
                </el-row>
                <el-row>
                    <el-col>
                        <el-table :data="upData.res" border style="width: 99.9%;" :key="upIndex2">
                        <el-table :data="upData.testValue" border style="width: 99.9%;" :key="upIndex2">
                            <el-table-column type="index" width="100" label="序号">
                            </el-table-column>
                            <el-table-column label="检验值">
@@ -137,7 +181,7 @@
                            <el-table-column label="操作" width="60">
                                <template slot-scope="scope">
                                    <el-button size="mini" type="text"
                                        @click.native.prevent="deleteRow(scope.$index, upData.res)">删除</el-button>
                                        @click.native.prevent="deleteRow(scope.$index, upData.testValue)">删除</el-button>
                                </template>
                            </el-table-column>
                        </el-table>
@@ -145,7 +189,7 @@
                </el-row>
            </div>
            <span slot="footer" class="dialog-footer">
                <el-button type="primary" @click="submitUpData">提 äº¤</el-button>
                <el-button type="primary" @click="submitUpData2">提 äº¤</el-button>
                <el-button @click="upInsDia = false">取 æ¶ˆ</el-button>
            </span>
        </el-dialog>
@@ -153,6 +197,12 @@
</template>
<script>
    import {
        get,
        post,
        wpost,
        postFile
    } from "@/api/util/requestUtil.js"
    export default {
        data() {
            return {
@@ -161,125 +211,146 @@
                    date: [],
                    userName: null,
                },
                tableData: [{
                    id: 1,
                    insId: 123,
                    date: '2016-05-02',
                    name: null,
                    address: '上海市普陀区金沙江路 1518 å¼„',
                    children: [{
                        id: 33,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1},{"number": 2}]',
                        address: '上海市普陀区金沙江路 1519 å¼„'
                    }, {
                        id: 34,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1,"res": "不合格"},{"number": 3,"res": "不合格"}]',
                        address: '上海市普陀区金沙江路 1519 å¼„',
                        children: [{
                            id: 35,
                            date: 'hhh',
                            name: null,
                            res: '[{"number": 1},{"number": 2}]',
                            address: '上海市普陀区金沙江路 1519 å¼„'
                        }]
                    }]
                }, {
                    id: 2,
                    insId: 123,
                    date: '2016-05-04',
                    name: null,
                    address: '上海市普陀区金沙江路 1517 å¼„',
                    children: []
                }, {
                    id: 3,
                    insId: 123,
                    date: '2016-05-01',
                    children: [{
                        id: 31,
                        date: '2016-05-01',
                        name: null,
                        res: '[{"number": 1},{"number": 2}]',
                        address: '上海市普陀区金沙江路 1519 å¼„'
                    }, {
                        id: 32,
                        date: '2016-05-01',
                        name: null,
                        res: '[]',
                        address: null
                    }]
                }],
                tableData: [],
                upDia: false,
                upData: {},
                upIndex: 0,
                upInsDia: false,
                upIndex2: 0
                upIndex2: 0,
                users: [],
                devices: []
            }
        },
        mounted() {
            this.selectDataList()
            this.getUsers()
            this.getDevices()
        },
        methods: {
            selectDataList() {
                this.tableData.forEach(a => {
                    a.code = '01'
                    if (a.children != undefined) {
                        a.children.forEach(b => {
                            b.code = '02'
                            if (b.children != undefined) {
                                b.children.forEach(c => {
                                    c.code = '03'
                                    c.res = JSON.parse(c.res)
                                })
                            }
                        })
                    }
                get(this.$url.selectAllPlan).then(res => {
                    this.tableData = JSON.parse(JSON.stringify(res.data).replaceAll('pid', 'code').replaceAll('samplename',
                        'name').replaceAll('inspectionStatus', 'testState'))
                    this.tableData.forEach(a => {
                        a.orderNum = '01'
                        if (a.children != undefined) {
                            a.children.forEach(b => {
                                b.orderNum = '02'
                                if (b.testValue == undefined) {
                                    b.testValue = []
                                }
                            })
                        }
                    })
                    this.upIndex++
                })
                this.upIndex++
            },
            isIfReport(row) {
                var count = 0
                if (row.children == undefined) return false
                row.children.forEach(a => {
                    if (a.name != null && a.name != undefined) count++
                    if (a.testState != null && a.testState != undefined) count++
                })
                return row.insId != undefined && count == row.children.length
                return row.testState == undefined && row.orderNum == '01' && count == row
                    .children.length
            },
            openUpDia(row) {
                this.upDia = true
                this.upData = {
                    id: row.id,
                    address: row.address
                    id: row.code,
                    checker: null,
                    device: null
                }
            },
            submitUpData() {
                this.tableData.forEach(a => {
                    a.children.forEach(b => {
                        if (b.id == this.upData.id) {
                            b.address = this.upData.address
                        }
                    })
                if (this.upData.checker == null || this.upData.checker == '') {
                    this.$message.error('人员未分配')
                    return
                } else if (this.upData.device == null || this.upData.device == '') {
                    this.$message.error('设备未分配')
                    return
                }
                wpost(this.$url.distribution, {
                    id: this.upData.id,
                    userId: this.upData.checker,
                    instrumentId: this.upData.device
                }).then(res => {
                    this.$message.success('分配成功')
                    this.upDia = false
                    this.selectDataList()
                })
                this.$message.success('修改成功')
                this.upIndex++
                this.upDia = false
            },
            openUpInsDia(row) {
                this.upInsDia = true
                this.upData = this.HaveJson(row)
                var str = []
                JSON.parse('[' + this.upData.testValue + ']').forEach(a => {
                    str.push({
                        number: a
                    })
                })
                this.upData.testValue = this.HaveJson(str)
                this.tableData.forEach(a => {
                    a.children.forEach(b => {
                        if (b.code == this.upData.code) {
                            this.upData.insId = a.code
                            this.upData.productName = a.name
                        }
                    })
                })
            },
            deleteRow(index, rows) {
                rows.splice(index, 1);
            },
            addRes() {
                this.upData.res.push({
                this.upData.testValue.push({
                    "number": null
                })
                this.upIndex2++
            },
            getUsers() {
                get(this.$url.choosecheck).then(res => {
                    this.users = res.data
                })
            },
            getDevices() {
                get(this.$url.chooseinstum).then(res => {
                    this.devices = res.data
                })
            },
            addReported(id) {
                wpost(this.$url.reported, {
                    id: id
                }).then(res => {
                    this.$message.success('上报成功')
                    this.selectDataList()
                }).catch(e => {
                    this.$message.error('上报失败')
                })
            },
            submitUpData2() {
                var data = []
                this.upData.testValue.forEach(a => {
                    if(a.number!=''&&a.number!=null){
                        data.push(a.number)
                    }
                })
                wpost(this.$url.check, {
                    id: this.upData.code,
                    value: data.toString()
                }).then(res => {
                    this.upInsDia = false
                    this.selectDataList()
                    this.$confirm(`<p style="line-height: 80px">您的项目(${this.upData.name})检验结果为:<span class="${res.data==1?'ins_state_success':'ins_state_error'}">${res.data==1?'合格':'不合格'}</span></p>`, '提交成功', {
                        confirmButtonText: '确定',
                        cancelButtonText: '关闭',
                        dangerouslyUseHTMLString:true,
                        type: `${res.data==1?'success':'error'}`
                    }).then(() => {
                    }).catch(() => {
                    })
                })
            }
        }
    }
</script>
</script>
src/views/experiment/reportAuditing/index.vue
@@ -59,7 +59,11 @@
          :data="reportTable"
          style="width: 100%"
        >
          <el-table-column type="selection" label="" min-width="5%" />
        <el-table-column
          type="index"
          width="50">
        </el-table-column>
          <!-- <el-table-column  label="" min-width="5%" /> -->
          <el-table-column prop="materialCode" label="样品编号" min-width="10%">
            <template slot-scope="scope">
              <span style="color: #409eff">
@@ -79,7 +83,7 @@
            label="样品名称"
            min-width="10%"
          />
          <el-table-column prop="status" label="审批状态" min-width="8%">
          <el-table-column prop="status" label="审批状态" min-width="8%" v-model="Auditconclusion">
            <template slot-scope="scope">
              <span>
                <el-tag type="warning">{{
@@ -99,31 +103,23 @@
                @click="handleClick(scope.row)"
                >查看详细
              </el-button>
            <el-button  type="text" size="small" @click="checkskip = true">审核</el-button>
            <el-button  type="text" size="small" @click="shenHE(scope)">审核</el-button>
            <el-dialog
              title="原始记录审核"
              :visible.sync="checkskip"
              :visible.sync="checkskipvisible"
              width="30%"
              :before-close="handleClose">
              >
              <el-form :model="form">
                <el-form-item label="请选择审核结果" :label-width="formLabelWidth">
                <el-form-item label="请选择审核结果:" :label-width="formLabelWidth">
                </el-form-item>
                <el-row :gutter="20">
                  <el-col :span="6" :offset="5">
                <!-- <el-button type="primary" style="background-color: rgb(208, 201, 192);">退回</el-button> -->
                <el-button style="background-color: rgb(206, 211, 216);">退回</el-button>
                  </el-col>
                  <el-col :span="6" :offset="3">
                <!-- <el-button type="primary" style="background-color: rgb(181, 237, 125);">通过</el-button> -->
                <el-button style="background-color: rgb(192, 236, 148);">通过</el-button>
                  </el-col>
                </el-row>
              </el-form>
              <div slot="footer" class="dialog-footer">
                <el-button @click="checkskip = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="checkskip= false">ç¡® å®š</el-button>
                <el-button @click="checkskipvisible = false">取 æ¶ˆ</el-button>
                <el-button style="background-color: rgb(206, 211, 216);" @click="nocheckskip(scope.row)" >不通过</el-button>
                <el-button type="primary" @click="checkskip(scope.row)">通过</el-button>
              </div>
            </el-dialog>
@@ -148,27 +144,36 @@
</template>
<script>
import { selectAllReportCheck } from "@/api/experiment/reportAuditing";
import { selectAllReportCheck,checkApi } from "@/api/experiment/reportAuditing";
export default {
  data() {
    return {
      input: "",
      input: '',
      checkStatus: undefined,
      reportTable: [],
      page: 1,
      total: 0,
      pageSize: 10,
      checked: true,
      checkskip: false,
      checkskipvisible: false,
      form:{},
      handleClose:'',
      formLabelWidth: '120px'
      // handleClose:{},
      formLabelWidth: '120px',
      checked:{},
      usertt:[],
      Auditconclusion:{},
      tableRow: {},
    };
  },
  created() {
    this.getData();
  },
  methods: {
    shenHE(s){
      this.tableRow=s
      this.checkskipvisible=true
    },
    // çŠ¶æ€æŒ‰é’®
    handleRadioChange() {
      this.getData();
@@ -193,10 +198,27 @@
      this.checkStatus = undefined;
      this.getData();
    },
    //审核跳转
    // checkskip() {
    //通过
    async checkskip(row) {
      console.log(this.tableRow);
      this.reportTable[this.tableRow.$index].status=2
      this.transmitData(this.tableRow.row.id)
      this.checkskipvisible= false
    // },
    },
    //不通过
    async nocheckskip(row) {
      console.log(this.tableRow);
      this.reportTable[this.tableRow.$index].status=0
      this.transmitData(this.tableRow.row.id)
      this.checkskipvisible= false
    },
    //审核
    async transmitData(id) {
      let param={"id":id,"result":1}
     let data = await checkApi(param)
    },
    // æŸ¥è¯¢åˆ—表
    async getData() {
      const params = {
src/views/home/index.vue
@@ -1,96 +1,406 @@
<template>
  <div class="home-main">
    <div class="home-header-welcome">
      <div class="welcome-left">
        <div class="left-avatar" />
        <div class="left-tips">
          <div>Hi jack,欢迎使用ZT-LIMS</div>
          <div>今天是2023å¹´07月07日 æ˜ŸæœŸäº”</div>
        </div>
    <div class="content-main">
      <div class="echart1">
        <el-row :gutter="10">
          <el-col :span="16">
            <el-card class="box-card" :body-style="{ padding: '0px 10px',height:'120px' }">
              <p style="font-size: 10px;margin-left: 10px;">检验总数统计</p>
               <el-row :gutter="10">
                  <el-col :span="6" >
                    <img :src="imgSrc" />
                    <div class="card-text">
                      <h6>检验单已检验总数</h6>
                      <p>{{insNum}}</p>
                    </div>
                  </el-col>
                  <el-col :span="6">
                    <img :src="imgSrc"/>
                    <div class="card-text">
                      <h6>检验单未检验总数</h6>
                      <p>{{insUnNum}}</p>
                    </div>
                  </el-col>
                  <el-col :span="6">
                    <img :src="imgSrc"/>
                    <div class="card-text">
                      <h6>检验项目已检验总数</h6>
                      <p>{{insproNum}}</p>
                    </div>
                  </el-col>
                  <el-col :span="6">
                    <img :src="imgSrc"/>
                    <div class="card-text">
                      <h6>检验项目未检验总数</h6>
                      <p>{{insproUnNum}}</p>
                    </div>
                  </el-col>
               </el-row>
            </el-card>
          </el-col>
          <el-col :span="8">
            <el-card class="box-card" :body-style="{ padding: '0px',height:'120px' }">
              <p style="font-size: 10px;margin-left: 10px;color: #2fcf10;">已检验</p>
              <el-table
                :data="verifiedData"
                :default-sort = "{prop: 'date', order: 'descending'}"
                :cell-style="{margin:'0',padding:'2px 0px'}"
                :header-cell-style="{margin:'0',padding:'0',backgroundColor:'#f0f7ff',color:'#0050a7'}">
                  <el-table-column prop="no" label="排名" sortable width="110"></el-table-column>
                  <el-table-column prop="result" label="检验结论" width="110"></el-table-column>
                  <el-table-column prop="num" label="检验数量" sortable width="110"></el-table-column>
                  <el-table-column prop="chact" label="检验占比" sortable width="110"></el-table-column>
              </el-table>
            </el-card>
          </el-col>
        </el-row>
      </div>
      <div class="welcome-right">
        <div class="right-centent">
          <div>即将超期待办</div>
          <div>暂无</div>
        </div>
        <div />
        <div class="right-centent">
          <div>已超期待办</div>
          <div>21</div>
        </div>
      <div class="echart2">
        <el-row :gutter="10">
          <el-col :span="6">
            <el-card :body-style="{ padding: '0px',height:'180px' }">
              <p>原材料合格率</p>
              <div id="materialPieChart" style="width:100%;height:180px"></div>
            </el-card>
          </el-col>
          <el-col :span="6">
            <el-card :body-style="{ padding: '0px',height:'180px' }">
              <p>成品合格率</p>
              <div id="finishedPieChart" style="width:100%;height:180px"></div>
            </el-card>
          </el-col>
          <el-col :span="12">
            <el-card :body-style="{ padding: '0px',height:'180px' }">
              <p style="z-index: 10;position: absolute;font-size: 10px;margin-left: 10px;color: #ff0000;">未检验</p>
              <el-table
                :data="uncheckedData"
                :cell-style="{margin:'0px',padding:'3px 0px'}"
                :header-cell-style="{margin:'0px',padding:'3px 0px',backgroundColor:'#f0f7ff',color:'#0050a7'}">
                  <el-table-column prop="no" label="序号" width="100"></el-table-column>
                  <el-table-column prop="name" label="待检项目" width="120"></el-table-column>
                  <el-table-column prop="instrumentname" label="设备" width="120"></el-table-column>
                  <el-table-column prop="startTime" label="检验时间" width="120">
                  </el-table-column><el-table-column prop="checkname" label="检验人" width="120">
                  </el-table-column><el-table-column prop="endTime" label="预计结束时间" width="120"></el-table-column>
              </el-table>
            </el-card>
          </el-col>
        </el-row>
      </div>
      <div class="echart3">
        <el-card :body-style="{ padding: '0px',height:'300px' }">
          <el-radio-group class="button-group" :input="getDataByType(radioType)"  v-model="radioType" size="mini">
            <el-radio-button label="本周"></el-radio-button>
            <el-radio-button label="本月"></el-radio-button>
            <el-radio-button label="本年"></el-radio-button>
          </el-radio-group>
          <div id="barLineChart" style="width:100%;height:300px;"></div>
        </el-card>
      </div>
    </div>
    <div class="content-main" />
  </div>
</template>
<script>
import * as echarts from 'echarts';
import { getVerifiedTop3,getUncheckedTop4,getMatAndFinshQualified,getCheckAndProjectNum
} from '@/api/home'
export default {
  name: "home",
  data() {
    return {
      insNum: 0,
      insUnNum: 0,
      insproNum: 0,
      insproUnNum: 1110,
      radioType: "本年",
      imgSrc: require("@/assets/404_images/bg.png"),
      verifiedData: new Array(),
      uncheckedData: new Array(),
    }
  },
  mounted(){
    this.getcheckProjectNum();
    this.getVerifiedData();
    this.getUncheckedData();
    this.getPieChart();
  },
  methods: {
    async getcheckProjectNum(){
      const {data} = await getCheckAndProjectNum();
      this.insNum = data.insNum;
      this.insUnNum = data.insUnNum;
      this.insproNum = data.insproNum;
      this.insproUnNum = data.insproUnNum;
    },
    async getVerifiedData(){
      const { data } = await getVerifiedTop3();
      for(let i=0;i<data.length;i++){
        let val = "";
        if(data[i].result == 0){
            val = "不合格";
        }else if(data[i].result == 1){
            val = "合格";
        }else{
            val = "未检验";
        }
        this.verifiedData.push ({
          no: i+1,
          result: val,
          num: data[i].num,
          chact: data[i].chact + '%'
        })
      }
    },
    async getUncheckedData(){
        const {data} = await getUncheckedTop4();
        for(let i=0;i<data.length;i++){
        this.uncheckedData.push ({
          no: i+1,
          name: data[i].name,
          instrumentname: data[i].instrumentname,
          startTime: data[i].startTime,
          checkname: data[i].checkname,
          endTime: data[i].endTime
        })
      }
    },
    initPieChart(elementId,data){
      var chartDom = document.getElementById(elementId);
      var myChart = echarts.init(chartDom);
      window.addEventListener('resize', function() {
        myChart.resize();
      });
      var option;
      option = {
        tooltip: {
          trigger: 'item'
        },
        legend: {
          orient: 'vertical',
          right: 'right',
          top: 'center',
          left: 20
        },
        series: [
          {
            type: 'pie',
            radius: ['40%', '70%'],
            tooltip: {
              valueFormatter: function(value){
                return value + '%';
              }
            },
            avoidLabelOverlap: false,
            label: {
              show: false,
              position: 'center',
            },
            labelLine: {
              show: false
            },
            data: data
          }
        ]
      };
      option && myChart.setOption(option);
    },
    async getPieChart(){
      const {data} = await getMatAndFinshQualified();
      let material = [
              { value: data.material, name: '合格',itemStyle:{color: '#91cc75'} },
              { value: data.unmaterial, name: '不合格',itemStyle:{color: '#fac858'} },
              { value: data.notmaterial, name: '待检验' },
            ]
      let finished = [
              { value: data.finished, name: '合格',itemStyle:{color: '#91cc75'} },
              { value: data.unfinished, name: '不合格',itemStyle:{color: '#fac858'} },
              { value: data.notfinished, name: '待检验' },
            ]
      //渲染饼状图
      this.initPieChart("materialPieChart",material);
      this.initPieChart("finishedPieChart",finished);
    },
    async getDataByType(label){
      const xAxis = ['一月', '二月', '三月', '四月', '五月', '六月', '七月','八月','九月','十月','十一月','十二月']
      const bar1Data  = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3];
      const bar2Data = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3];
      const line1Data = [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2];
      const line2Data = [3.0, 4.2, 6.3, 5.5, 8.3, 13.2, 20.3, 13.4, 23.0, 21.5, 2.0, 33.2];
      switch(label){
        case "本年":
          this.initBarAndLineChart(xAxis,bar1Data,bar2Data,line1Data,line2Data);
          break;
        case "本月":
            let arr = new Array();
            for(let i=1;i<=31;i++){
                arr.push(i);
            }
            this.initBarAndLineChart(arr,bar1Data,bar2Data,line1Data,line2Data);
          break;
        case "本周":
            let arr2 = new Array("周一","周二","周三","周四","周五","周六","周日");
            this.initBarAndLineChart(arr2,bar1Data,bar2Data,line1Data,line2Data);
          break
      }
    },
    initBarAndLineChart(xAxis,bar1Data,bar2Data,line1Data,line2Data){
      var chartDom = document.getElementById('barLineChart');
      var myChart = echarts.init(chartDom);
      window.addEventListener('resize', function() {
        myChart.resize();
      });
      var option;
      option = {
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'cross',
            crossStyle: {
              color: '#999'
            }
          }
        },
        legend: {
          data: ['原材料检验', '成品检验', '原材料合格率','成品合格率']
        },
        xAxis: [
          {
            type: 'category',
            data: xAxis,
            axisPointer: {
              type: 'shadow'
            }
          }
        ],
        yAxis: [
          {
            type: 'value',
            name: '检验数量',
            min: 0,
            max: 1000,
            interval: 100,
            axisLabel: {
              formatter: '{value}'
            }
          },
          {
            type: 'value',
            name: '合格率',
            min: 0,
            max: 100,
            interval: 10,
            axisLabel: {
              formatter: '{value} %'
            }
          }
        ],
        series: [
          {
            name: '原材料检验',
            type: 'bar',
            tooltip: {
              valueFormatter: function (value) {
                return value;
              }
            },
            data: bar1Data
          },
          {
            name: '成品检验',
            type: 'bar',
            tooltip: {
              valueFormatter: function (value) {
                return value ;
              }
            },
            data: bar2Data
          },
          {
            name: '原材料合格率',
            smooth: true,
            type: 'line',
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + ' %';
              }
            },
            data: line1Data
          },
          {
            name: '成品合格率',
            smooth: true,
            type: 'line',
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + ' %';
              }
            },
            data: line2Data
          }
        ]
      };
      option && myChart.setOption(option);
    }
  }
}
</script>
<style lang="scss" scoped>
.home-main{
  .home-header-welcome{
    width: 100%;
    background: #fff;
    height: 84px;
    display: flex;
    border-bottom: 1px solid #f0f2f5;
    padding: 8px 24px 12px 24px;
    justify-content: space-between;
    .welcome-left{
      display: flex;
      align-items: center;
      height: 100%;
      .left-avatar{
        width: 56px;
        height: 56px;
        margin-right: 24px;
        background: #0077DB;
        border-radius: 50%;
  .content-main{
    .echart1{
      .el-table{
          font-weight: bold;
          width: 100%;
          height:100;
          padding:0px;
          margin-left:10px;
        }
        .box-card img{
          width:100%;
          height:100px;
          border-radius: 10px;
        }
        .box-card .card-text{
          position: absolute;
          top:0px;
          h6{
            margin:10px 15px;
          }
          p{
            width:100%;
            text-align: right;
            font-size: 25px;
          }
        }
    }
    .echart2 {
      .el-table{
        font-weight: bold;
        width: 100%;
        height:100;
        padding:0px;
        margin-left:10px;
        padding-top:40px;
      }
      .left-tips{
        height: 80%;
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        >div:nth-child(1){
          font-size: 20px;
          color: #303133;
        }
        >div:nth-child(2){
          font-size: 14px;
          color: #606266;
        }
      .el-col{
        margin: 10px 0;
      }
      p{
        position: absolute;
        font-size: 10px;
        margin-left: 10px;
        color:black;
      }
    }
    .welcome-right{
      width: 250px;
      display: flex;
      justify-content: space-between;
      align-items: center;
      .right-centent{
        height: 80%;
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        align-items: flex-end;
        >div:nth-child(1){
          color: #909399;
          font-size: 14px;
        }
        >div:nth-child(2){
          font-size: 24px;
          color: #c0c4cc;
        }
      }
      >div:nth-child(2){
          width: 2px;
          height: 70%;
          background: #f0f2f5;
      }
    .echart3 .button-group{
      margin-top: 10px;
      margin-left: 88%;
      z-index: 10;
    }
  }
}
src/worker/test.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
export function test(){
    for (let index = 0; index < 100; index++) {
        console.log("子线程"+index);
    }
}