zhuo
2025-04-22 e53971d9779889889ff8153c391361606d640ab4
Merge remote-tracking branch 'origin/dev' into dev
已修改12个文件
已删除1个文件
已添加2个文件
1690 ■■■■■ 文件已修改
src/api/cnas/process/sampleDisposal.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/echarts/DataComparison.vue 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/disposal/sampleDisposal/index.vue 568 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/disposal/sampleReceipt/index.vue 321 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/sampleDisposal/index.vue 521 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionView/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/copperOrder.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/copperView.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrderComponents/materialOrder/showInfo.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/process/sampleDisposal.js
@@ -1,6 +1,6 @@
// æ£€æµ‹æˆ–校准物品的处置
import request from "@/utils/request";
// æ£€æµ‹æˆ–校准物品的处置
// ä¿®æ”¹
export function doProcessDeal(data) {
  return request({
@@ -10,7 +10,7 @@
  });
}
// æ–°å¢ž
// æ–°å¢žè¯¦æƒ…
export function addProcessDeal(data) {
  return request({
    url: "/processDeal/addProcessDeal",
@@ -27,11 +27,19 @@
    data: data,
  });
}
// æäº¤åŽ†å²  ä¼ å‚id
export function addProcessTotaldeal(data) {
  return request({
    url: "/processTotaldeal/addProcessTotaldeal",
    method: "post",
    data: data,
  });
}
//查询详情  åˆ†é¡µæŸ¥è¯¢é‡Œé¢totaldealId  ä¼ å‚历史的id
export function pageProcessDeal(query) {
export function getProcessDeal(query) {
  return request({
    url: "/processDeal/pageProcessDeal",
    url: "/processDeal/getProcessDeal",
    method: "get",
    params: query,
  });
@@ -72,3 +80,38 @@
    params: query,
  });
}
// æ ·å“æŽ¥æ”¶-分页查询
export function pageProcessSample(query) {
  return request({
    url: "/processSample/pageProcessSample",
    method: "get",
    params: query,
  });
}
// æ ·å“æŽ¥æ”¶-新增/修改
export function addProcessSample(query) {
  return request({
    url: "/processSample/addProcessSample",
    method: "post",
    data: query,
  });
}
// æ ·å“æŽ¥æ”¶-删除
export function delProcessSample(query) {
  return request({
    url: "/processSample/delProcessSample",
    method: "delete",
    params: query,
  });
}
// æ ·å“æŽ¥æ”¶-导出
export function exportProcessSample(query) {
  return request({
    url: "/processSample/exportProcessSample",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
src/components/echarts/DataComparison.vue
@@ -163,7 +163,7 @@
                     :legend="legend2"
                     :lineColors="lineColors"
                     :series="echartsSeries2"
                     :tooltip="tooltip"
                     :tooltip="tooltip1"
                     :xAxis="xAxis"
                     :yAxis="yAxis2"
                     style="height: 40vh;"></Echarts>
@@ -190,6 +190,7 @@
<script>
import Echarts from "./echarts.vue";
import {getRawSupplierCompare} from "@/api/statisticalCharts/dataAnalysis";
export default {
  name: "DataComparison",
@@ -277,6 +278,20 @@
          type: 'shadow'
        }
      },
      tooltip1: {
        trigger: 'axis',
        axisPointer: {
          type: 'shadow'
        },
        formatter: (params) => {
          // params æ˜¯ä¸€ä¸ªæ•°ç»„,包含当前鼠标悬停的所有系列的数据
          return params.map(param => {
            const value = param.value; // èŽ·å–å½“å‰æ•°æ®ç‚¹çš„å€¼
            const name = param.seriesName; // èŽ·å–ç³»åˆ—åç§°
            return `${name}: ${Math.round(value)}%`; // æ ¼å¼åŒ–为百分比形式
          }).join('<br>'); // æ¯ä¸ªç³»åˆ—占一行
        }
      },
      xAxis: [{
        type: 'category',
        data: ['1', '2', '3', '4', '5']
@@ -351,7 +366,10 @@
      yAxis2: [{
        type: 'value',
        min: 0,
        max: 1,
        max: 100,
        axisLabel: {
          formatter: '{value}%' // åœ¨æ¯ä¸ªåˆ»åº¦å€¼åŽæ·»åŠ ç™¾åˆ†æ¯”ç¬¦å·
        }
      }],
      echartsSeries2: [
        {
@@ -360,7 +378,7 @@
          label: {
            show: true,
            position: 'top',
            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
            formatter: (params) => params.value + '%'
          },
          data: [],
        },
@@ -370,7 +388,7 @@
          label: {
            show: true,
            position: 'top',
            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
            formatter: (params) => params.value + '%'
          },
          data: [],
        }
@@ -389,43 +407,65 @@
  },
  // æ–¹æ³•集合
  methods: {
    getInfo () {
      this.localData = this.comparisonData.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData.localData
      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
      this.echartsSeries3[0].data = this.localData.slice(0, 5)
      this.localULC = this.comparisonData.localULC
      this.localLCL = this.comparisonData.localLCL
      this.localAverage = this.comparisonData.localAverage
      this.localRange = this.comparisonData.localRange
    getInfo() {
      const { localData, localULC, localLCL, localAverage, localRange } = this.comparisonData;
      // åˆå§‹åŒ– localData,确保有默认值
      this.localData = localData === null
        ? ['', '', '', '', '', '', '', '', '']
        : localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number);
      // æ›´æ–°å›¾è¡¨æ•°æ®
      this.echartsSeries3[0].data = this.localData.slice(0, 5);
      this.localULC = localULC;
      this.localLCL = localLCL;
      this.localAverage = localAverage;
      this.localRange = localRange;
    },
    getInfo1 () {
      this.echartsSeries1[0].data = []
      this.supplierData = this.comparisonData1.supplierData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.supplierData
      this.localData = this.comparisonData1.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.localData
      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
      this.echartsSeries3[0].data = this.localData.slice(0, 5)
      this.echartsSeries[0].data = this.supplierData
      this.echartsSeries[1].data = this.localData
      this.absoluteDeviation = this.comparisonData1.absoluteDeviation === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.absoluteDeviation
      this.echartsSeries2[1].data = this.absoluteDeviation
      this.absoluteDeviation = this.absoluteDeviation.map(number => `${Math.round(number * 100)}%`) // ç»å¯¹åå·®ç™¾åˆ†æ¯”转换
      this.average = this.comparisonData1.average === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.average
      this.echartsSeries2[0].data = this.average
      this.average = this.average.map(number => `${Math.round(number * 100)}%`) // å¹³å‡å€¼ç™¾åˆ†æ¯”转换
      this.supplierULC = this.comparisonData1.supplierULC === null ? ['', '', '', '', ''] : this.comparisonData1.supplierULC
      this.echartsSeries1[0].data.push(this.supplierULC[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierLCL = this.comparisonData1.supplierLCL === null ? ['', '', '', '', ''] : this.comparisonData1.supplierLCL
      this.echartsSeries1[1].data.push(this.supplierLCL[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierAverage = this.comparisonData1.supplierAverage === null ? ['', '', '', '', ''] : this.comparisonData1.supplierAverage
      this.echartsSeries1[2].data.push(this.supplierAverage[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierRange = this.comparisonData1.supplierRange === null ? ['', '', '', '', ''] : this.comparisonData1.supplierRange
      this.localULC = this.comparisonData1.localULC
      this.echartsSeries1[0].data.push(this.localULC[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localLCL = this.comparisonData1.localLCL
      this.echartsSeries1[1].data.push(this.localLCL[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localAverage = this.comparisonData1.localAverage
      this.echartsSeries1[2].data.push(this.localAverage[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localRange = this.comparisonData1.localRange
    getInfo1() {
      const {
        supplierData,
        localData,
        absoluteDeviation,
        average,
        supplierULC,
        supplierLCL,
        supplierAverage,
        supplierRange,
        localULC,
        localLCL,
        localAverage,
        localRange,
      } = this.comparisonData1;
      // è¾…助函数:处理空数据并转换百分比
      const processPercentageData = (data, defaultValue = ['', '', '', '', '', '', '', '', '']) =>
        data === null ? defaultValue : data.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number);
      // è¾…助函数:处理空数值型数据
      const processNumericData = (data, defaultValue = ['', '', '', '', '']) =>
        data === null ? defaultValue : data;
      // åˆå§‹åŒ–数据
      this.supplierData = processPercentageData(supplierData);
      this.localData = processPercentageData(localData);
      this.absoluteDeviation = processPercentageData(absoluteDeviation).map(number => `${Math.round(number * 100)}%`);
      this.average = processPercentageData(average).map(number => `${Math.round(number * 100)}%`);
      // æ›´æ–°å›¾è¡¨æ•°æ®
      this.echartsSeries1[0].data = [];
      this.echartsSeries3[0].data = this.localData.slice(0, 5);
      this.echartsSeries[0].data = this.supplierData;
      this.echartsSeries[1].data = this.localData;
      this.echartsSeries2[1].data = this.comparisonData1.absoluteDeviation.map(value => value * 100);
      this.echartsSeries2[0].data = this.comparisonData1.average.map(value => value * 100);
      // å¤„理供应商和本地的标准差对比数据
      this.supplierULC = processNumericData(supplierULC);
      this.supplierLCL = processNumericData(supplierLCL);
      this.supplierAverage = processNumericData(supplierAverage);
      this.supplierRange = processNumericData(supplierRange);
      this.localULC = processNumericData(localULC);
      this.localLCL = processNumericData(localLCL);
      this.localAverage = processNumericData(localAverage);
      this.localRange = processNumericData(localRange);
      // æ›´æ–°æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.echartsSeries1[0].data.push(this.supplierULC[0], this.localULC[0]);
      this.echartsSeries1[1].data.push(this.supplierLCL[0], this.localLCL[0]);
      this.echartsSeries1[2].data.push(this.supplierAverage[0], this.localAverage[0]);
    },
    submitForm () {
      this.$refs['supplierForm'].validate((valid) => {
@@ -435,12 +475,7 @@
            itemNames: this.selectRow.itemNames,
            supplierDataList: Object.values(this.supplierForm)
          }
          this.$axios.post(this.$api.dataAnalysis.getRawSupplierCompare, params, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs: true
          }).then(res => {
          getRawSupplierCompare(params).then(res => {
            this.comparisonData1 = res.data
            this.getInfo1()
          })
@@ -459,8 +494,8 @@
<style scoped>
.title {
  height: 60px;
  line-height: 60px;
  height: 40px;
  line-height: 40px;
}
.container {
  width: calc(100% - 20px);
src/views/CNAS/personnel/personnelInfo/tabs/training-record.vue
@@ -169,22 +169,6 @@
    this.getPersonnelTraining(this.departId);
  },
  methods: {
    // exportExcel() {
    //   this.outLoading = true;
    //   const name = this.isDepartment ? 'departmentId' : 'userId';
    //   this.$axios.get(this.$api.personal.personTrackRecordExport + `&${name}=` + this.departId, { responseType: 'blob' }).then(res => {
    //     this.outLoading = false;
    //     this.$message.success('导出成功');
    //     const blob = new Blob([res], { type: 'application/octet-stream' });
    //     const url = URL.createObjectURL(blob);
    //     const link = document.createElement('a');
    //     link.href = url;
    //     link.download = '培训记录.xlsx';
    //     link.click();
    //   }).catch(err => {
    //     this.outLoading = false;
    //   })
    // },
    // æŸ¥è¯¢
    refreshTable() {
      this.getPersonnelTraining(this.departId);
src/views/CNAS/process/disposal/sampleDisposal/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,568 @@
<template>
  <div class="capacity-scope">
    <div style="display: flex;justify-content: space-between;align-items: flex-start">
      <el-form :model="queryParams0" ref="queryParams0" size="small" :inline="true">
        <el-form-item label="年月" prop="month">
          <el-date-picker v-model="queryParams0.month" type="month" placeholder="选择月" format="yyyy-MM"
                          value-format="yyyy-MM" size="small" @change="refreshTable()">
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" size="mini" @click="refreshTable">查询</el-button>
          <el-button size="mini" @click="refresh">重置</el-button>
        </el-form-item>
      </el-form>
      <el-button size="small" type="primary" @click="handleAdd0">新增</el-button>
    </div>
    <div class="table">
      <lims-table :tableData="tableData0" :column="column0" :tableLoading="tableLoading"
                  key="tableData0" :height="'calc(100vh - 240px)'" :page="page0" @pagination="pagination0"></lims-table>
    </div>
    <el-dialog title="详情" :visible.sync="editDialogVisible" width="70%">
      <el-button size="small" type="primary" @click="handleAdd('add')" style="margin-bottom: 10px">新增</el-button>
      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading"
                  key="tableData" :height="'calc(100vh - 290px)'">
      </lims-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="editDialogVisible = false">取消</el-button>
      </span>
    </el-dialog>
    <!-- æ–°å¢žæ ·å“ -->
    <el-dialog title="新增" :visible.sync="addDialogVisible" width="400px" @close="closeAddDialogVisible">
      <el-form ref="addInfo" :model="addInfo" :rules="rules" label-width="120px">
        <el-row>
          <el-col :span="24">
            <el-form-item label="样品名称" prop="sampleName">
              <el-input size="small" placeholder="请输入" clearable
                        v-model="addInfo.sampleName"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="样品编号" prop="sampleCode">
              <el-input size="small" placeholder="请输入" clearable
                        v-model="addInfo.sampleCode"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="供样单位" prop="sampleSupplier">
              <el-select v-model="addInfo.sampleSupplier" size="small">
                <el-option :label="item.company" :value="item.company" v-for="(item, index) in customPageList"
                           :key="item.id"></el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="数量" prop="num">
              <el-input size="small" placeholder="请输入" clearable
                        v-model="addInfo.num"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="处理方式" prop="dealMethod">
              <el-input size="small" placeholder="请输入" clearable
                        v-model="addInfo.dealMethod"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label="时间" prop="dealTime">
              <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
                              value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeAddDialogVisible">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitAdd" :loading="addLoading">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!-- æ–°å¢žåŽ†å² -->
    <el-dialog title="新增" :visible.sync="addDialogVisibleDeal" width="400px" @close="closeDiaDeal">
      <el-form ref="addInfoDeal" :model="addInfoDeal" :rules="rulesDeal" label-width="80px">
        <el-row>
          <el-col :span="24">
            <el-form-item label="月份" prop="month">
              <el-date-picker v-model="addInfoDeal.month" type="month" size="small" placeholder="选择月份" format="yyyy-MM"
                              value-format="yyyy-MM" style="width: 100%;">
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeDiaDeal">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitAddDeal" :loading="addLoading">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!-- è¯¦æƒ…/下载/审核/批准 -->
    <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="400px" :class="{ downPdf: title0 == '下载' }"
      :modal="title0 != '下载'" top="5vh">
      <span>是否通过{{title0}}?</span>
      <span slot="footer" class="dialog-footer" v-if="title0 == '审核' || title0 == '批准'">
        <el-button @click="submitCheck('不通过')" :loading="noCheckLoading">不通过</el-button>
        <el-button type="primary" @click="submitCheck('通过')" :loading="checkLoading">通 è¿‡</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import limsTable from "@/components/Table/lims-table.vue";
import filePreview from "@/components/Preview/filePreview.vue";
import { selectCustomPageList } from "@/api/system/customer";
import {
  doProcessDeal,
  addProcessDeal,
  submitProcessTotaldeal,
  pageProcessDeal,
  checkProcessTotaldeal,
  ratifyProcessTotaldeal,
  delProcessDeal,
  pageProcessTotaldeal, getProcessDeal, addProcessTotaldeal,
} from "@/api/cnas/process/sampleDisposal";
export default {
  name: 'SampleDisposal',
  components: {
    limsTable,
    filePreview,
  },
  data() {
    return {
      title: '新增',
      addDialogVisible: false,
      addLoading: false,
      outLoading: false,
      editDialogVisible: false,
      queryParams: {},
      submitState: '',
      lookDialogVisible: false,
      title0: '查看',
      noCheckLoading: false,
      checkLoading: false,
      // åŽ†å²åˆ—è¡¨
      addInfo: {},//新增样品
      addInfoDeal: {
        month: ''
      },//新增样品
      addDialogVisibleDeal: false,
      rules: {
        sampleName: [{ required: true, message: '请填写样品名称', trigger: 'blur' }],
        sampleCode: [{ required: true, message: '请填写样品编号', trigger: 'blur' }],
        sampleSupplier: [{ required: true, message: '请选择供样单位', trigger: 'change' }],
        num: [{ required: true, message: '请填写数量', trigger: 'blur' }],
        dealMethod: [{ required: true, message: '请填写处理方式', trigger: 'blur' }],
        dealTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
      },
      rulesDeal: {
        month: [{ required: true, message: '请选择月份', trigger: 'change' }],
      },
      customPageList: [],
      currentInfo: {
        arr: []
      },//查看的详情
      outPower: false,
      addPower: false,
      tableData: [],
      column: [
        { label: "样品名称", prop: "sampleName" },
        { label: "样品编号", prop: "sampleCode" },
        { label: "供样单位", prop: "sampleSupplier" },
        { label: "数量", prop: "num" },
        { label: "处理方式", prop: "dealMethod" },
        { label: "时间", prop: "dealTime" },
        {
          dataType: "action",
          label: "操作",
          operation: [
            {
              name: "编辑",
              type: "text",
              clickFun: (row) => {
                this.handleAdd('edit',row);
              },
              disabled: (row) => {
                return this.submitState === '已提交'
              }
            },
            {
              name: "删除",
              type: "text",
              clickFun: (row) => {
                this.handleDelete(row);
              },
              disabled: (row) => {
                return this.submitState === '已提交'
              }
            },
          ],
        },
      ],
      tableLoading: false,
      queryParams0: {},
      tableData0: [],
      column0: [
        { label: "月份", prop: "month" },
        { label: "提交人", prop: "submitUserName" },
        {
          dataType: 'tag',
          label: '提交状态',
          prop: 'submitState',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === '待提交') {
              return 'danger';
            } else if (params === '已提交') {
              return 'success';
            } else {
              return null;
            }
          }
        },
        { label: "审核人", prop: "examineUserName" },
        {
          dataType: 'tag',
          label: '审核状态',
          prop: 'examineState',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === '不通过') {
              return 'danger';
            } else if (params === '通过') {
              return 'success';
            } else {
              return null;
            }
          }
        },
        { label: "批准人", prop: "ratifyUserName" },
        {
          dataType: 'tag',
          label: '批准状态',
          prop: 'ratifyState',
          formatData: (params) => {
            return params
          },
          formatType: (params) => {
            if (params === '不通过') {
              return 'danger';
            } else if (params === '通过') {
              return 'success';
            } else {
              return null;
            }
          }
        },
        {
          dataType: "action",
          label: "操作",
          operation: [
            {
              name: "查看",
              type: "text",
              clickFun: (row) => {
                this.handleLook(row);
              },
            },
            {
              name: "下载",
              type: "text",
              clickFun: (row) => {
                this.handleDown0(row);
              },
              disabled: (row) => {
                return !row.url
              }
            },
            {
              name: "提交",
              type: "text",
              clickFun: (row) => {
                this.handleSubmit(row);
              },
              disabled: (row) => {
                return !!row.submitState && row.submitState != '待提交'
              }
            },
            {
              name: "审核",
              type: "text",
              clickFun: (row) => {
                this.handleCheck(row);
              },
              disabled: (row) => {
                return row.examineState == '通过' || row.submitState == '待提交'
              }
            },
            {
              name: "批准",
              type: "text",
              clickFun: (row) => {
                this.handleApproval(row);
              },
              disabled: (row) => {
                return row.ratifyState == '通过' || row.submitState == '待提交'
              }
            },
          ],
        },
      ],
      page0: {
        total: 0,
        size: 20,
        current: 1,
      },
      operationType: ''
    };
  },
  mounted() {
    this.getList0()
  },
  methods: {
    // èŽ·å–é€æ ·å•ä½åˆ—è¡¨
    getCustomPageList() {
      selectCustomPageList({
        current: -1,
        size: -1
      }).then(res => {
        this.customPageList = res.data.records
      }).catch(err => { });
    },
    handleDown() { },
    refresh() {
      this.queryParams0 = {};
      this.page0.current = 1;
      this.getList0();
    },
    refreshTable() {
      this.page0.current = 1;
      this.getList0();
    },
    // æŸ¥è¯¢å…¨éƒ¨è®°å½•
    getList0() {
      this.tableLoading = true;
      let param = { ...this.queryParams0, ...this.page0 };
      delete param.total;
      pageProcessTotaldeal({ ...param })
        .then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData0 = res.data.records;
            this.page0.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    pagination0({ page, limit }) {
      this.page0.current = page;
      this.page0.size = limit;
      this.getList0();
    },
    // æ‰“开新增历史界面
    handleAdd0() {
      this.addDialogVisibleDeal = true
      this.addInfoDeal.month = ''
    },
    closeAddDialogVisible() {
      this.$refs['addInfo'].resetFields();
      this.addDialogVisible = false
    },
    // æäº¤æ–°å¢ž-历史
    submitAddDeal () {
      this.$refs.addInfoDeal.validate(valid => {
        if (valid) {
          // æ–°å¢ž
          this.addLoading = true
          addProcessTotaldeal({
            ...this.addInfoDeal
          }).then(res => {
            this.addLoading = false
            this.addDialogVisibleDeal = false
            this.$message({
              type: 'success',
              message: '新增成功!'
            });
            this.getList0()
          }).catch(err => {
            this.addLoading = false
          });
        }
      })
    },
    closeDiaDeal() {
      this.$refs['addInfoDeal'].resetFields();
      this.addDialogVisibleDeal = false
    },
    // æäº¤
    handleSubmit(row) {
      this.$confirm('是否提交 ' + row.month + ' æœˆä»½çš„æ•°æ®', '提交', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        submitProcessTotaldeal({
          id: row.id
        }).then(res => {
          this.$message({
            type: 'success',
            message: '提交成功!'
          });
          this.refreshTable()
        }).catch(err => { });
      })
    },
    // æŸ¥çœ‹
    handleLook(row) {
      this.queryParams.id = row.id
      this.submitState = row.submitState
      this.$nextTick(() => {
        this.editDialogVisible = true
        this.getList();
      })
    },
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams };
      getProcessDeal({ ...param }).then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData = res.data;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    // æ‰“开新增详情弹框
    handleAdd(type, row) {
      this.addDialogVisible = true
      this.getCustomPageList()
      this.operationType = type
      if (row) {
        this.addInfo = {...row}
      }
    },
    // æäº¤-详情
    submitAdd() {
      this.$refs.addInfo.validate(valid => {
        if (valid) {
          this.addLoading = true
          addProcessDeal({
            totaldealId: this.queryParams.id,
            ...this.addInfo
          }).then(res => {
            this.addLoading = false
            this.addDialogVisible = false
            this.$message({
              type: 'success',
              message: '新增成功!'
            });
            this.getList()
          }).catch(err => {
            this.addLoading = false
          });
        }
      })
    },
    // æäº¤ä¿®æ”¹è¯¦æƒ…
    handleEdit() {
      if (type === 'submit') {
        doProcessDeal({
          id: row.id,
          ...row
        }).then(res => {
          this.$message({
            type: 'success',
            message: '编辑成功!'
          });
          this.getList();
        }).catch(err => { });
      }
    },
    // å®¡æ ¸
    handleCheck(row) {
      this.title0 = '审核'
      this.lookDialogVisible = true
      this.currentInfo = row
      this.queryParams.id = row.id
    },
    // æ‰¹å‡†
    handleApproval(row) {
      this.title0 = '批准'
      this.lookDialogVisible = true
      this.currentInfo = row
      this.queryParams.id = row.id
    },
    // æäº¤å®¡æ ¸/批准
    submitCheck(state) {
      if (state == '通过') {
        this.checkLoading = true
      } else {
        this.noCheckLoading = true
      }
      if (this.title0 == '审核') {
        checkProcessTotaldeal({
          id: this.currentInfo.id,
          state: state
        }).then(res => {
          this.checkLoading = false
          this.noCheckLoading = false
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          this.refreshTable()
          this.lookDialogVisible = false
        }).catch(err => { });
      } else if (this.title0 == '批准') {
        ratifyProcessTotaldeal({
          id: this.currentInfo.id,
          state: state
        }).then(res => {
          this.checkLoading = false
          this.noCheckLoading = false
          this.$message({
            type: 'success',
            message: '操作成功!'
          });
          this.refreshTable()
          this.lookDialogVisible = false
        }).catch(err => { });
      }
    },
    // å¯¼å‡ºè¯¦æƒ…
    handleDown0(row) {
      if (!row.url) {
        this.$message.warning('暂无文件')
        return
      }
      // åŽç«¯ä¸‹è½½
      this.$download.saveAs(row.url, row.month + ' æ ·å“å¤„理申请表');
    },
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        delProcessDeal({ id: row.id }).then((res) => {
          this.$message.success("删除成功");
          this.getList();
         });
      }).catch(() => { });
    },
  },
}
</script>
<style scoped>
>>>.el-dialog__body {
  padding-top: 10px;
}
</style>
src/views/CNAS/process/disposal/sampleReceipt/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,321 @@
<template>
  <div class="capacity-scope">
    <div style="display: flex;justify-content: space-between;align-items: flex-start">
      <el-form :model="queryParams0" ref="queryParams0" size="small" :inline="true">
        <el-form-item label="收样日期" prop="receiveDate">
          <el-date-picker v-model="queryParams0.receiveDate" type="date" placeholder="选择日期" format="yyyy-MM-dd"
                          value-format="yyyy-MM-dd" size="small" @change="refreshTable()">
          </el-date-picker>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" size="mini" @click="refreshTable">查询</el-button>
          <el-button size="mini" @click="refresh">重置</el-button>
        </el-form-item>
      </el-form>
      <el-button size="small" @click="handleDown0">导出</el-button>
    </div>
    <div class="table">
      <lims-table :tableData="tableData0" :column="column0" :tableLoading="tableLoading0"
                  key="tableData0"
                  :height="'calc(100vh - 240px)'" :page="page0" @pagination="pagination0">
        <div slot="action" slot-scope="scope">
          <el-button type="text" @click="handleAdd(scope.row)">编辑</el-button>
          <el-button type="text" @click="delRow(scope.row)">
            <span style="color: #F56C6C">删除</span>
          </el-button>
        </div>
      </lims-table>
    </div>
    <!-- æ–°å¢žæ ·å“ -->
    <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px">
      <el-row>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">样品名称:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.sampleName"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">样品编号:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.sampleCode"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">供样单位:</div>
            <div class="search_input">
              <el-select v-model="addInfo.sampleSupplier" size="small">
                <el-option :label="item.company" :value="item.company" v-for="(item, index) in customPageList"
                           :key="item.id"></el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">数量:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.num"></el-input>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">处理方式:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable
                                                v-model="addInfo.dealMethod"></el-input></div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">时间:</div>
            <div class="search_input">
              <el-date-picker v-model="addInfo.dealTime" type="date" size="small" placeholder="选择日期" format="yyyy-MM-dd"
                              value-format="yyyy-MM-dd" style="width: 100%;">
              </el-date-picker>
            </div>
          </div>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-button @click="addDialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitAdd" :loading="addLoading">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <!-- è¯¦æƒ…/下载/审核/批准 -->
    <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="800px" :class="{ downPdf: title0 == '下载' }"
               :modal="title0 != '下载'" top="5vh">
      <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.url" :currentFile="{}"
                   style="max-height: 70vh;overflow-y: auto;" />
      <span slot="footer" class="dialog-footer" v-if="title0 == '审核' || title0 == '批准'">
        <el-button @click="submitCheck('不通过')" :loading="noCheckLoading">不通过</el-button>
        <el-button type="primary" @click="submitCheck('通过')" :loading="checkLoading">通 è¿‡</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import limsTable from "@/components/Table/lims-table.vue";
import filePreview from "@/components/Preview/filePreview.vue";
import { selectCustomPageList } from "@/api/system/customer";
import {
  pageProcessSample,
  delProcessSample,
  addProcessSample,
  exportProcessSample
} from "@/api/cnas/process/sampleDisposal";
import {exportInconsistentDistribution} from "@/api/cnas/process/nonconformingWork";
export default {
  name: 'SampleReceipt',
  components: {
    limsTable,
    filePreview,
  },
  data() {
    return {
      activeName: '填写',
      title: '新增',
      addDialogVisible: false,
      addLoading: false,
      outLoading: false,
      editDialogVisible: false,
      lookDialogVisible: false,
      title0: '查看',
      noCheckLoading: false,
      checkLoading: false,
      // åŽ†å²åˆ—è¡¨
      addInfo: {},//新增样品
      customPageList: [],
      currentInfo: {
        arr: []
      },//查看的详情
      queryParams0: {
        receiveDate: ''
      },
      tableLoading0: false,
      tableData0: [],
      column0: [
        {
          label: "收样日期",
          prop: "receiveDate",
        },
        {
          label: "样品编号",
          prop: "sampleCode",
        },
        {
          label: "样品名称",
          prop: "sampleName",
        },
        {
          label: "样品数量",
          prop: "num",
        },
        {
          label: "来样单位",
          prop: "sampleSupplier",
        },
        {
          label: "留样日期",
          prop: "leaveDate",
        },
        {
          label: "样品状态",
          prop: "sampleState",
        },
        {
          label: "退样签收/处理日期",
          prop: "dealTime",
        },
        {
          dataType: "slot",
          slot: "action",
          label: "操作",
        }
      ],
      page0: {
        total: 0,
        size: 10,
        current: 0,
      },
    };
  },
  mounted() {
    this.getList0()
  },
  methods: {
    // èŽ·å–é€æ ·å•ä½åˆ—è¡¨
    getCustomPageList() {
      selectCustomPageList({
        current: -1,
        size: -1
      }).then(res => {
        this.customPageList = res.data.records
      }).catch(err => { });
    },
    refresh() {
      this.queryParams0 = {};
      this.page0.current = 1;
      this.getList0();
    },
    refreshTable() {
      this.page0.current = 1;
      this.getList0();
    },
    // æŸ¥è¯¢è¡¨æ ¼æ•°æ®
    getList0() {
      this.tableLoading0 = true;
      let param = { ...this.queryParams0, ...this.page0 };
      delete param.total;
      pageProcessSample({ ...param })
        .then((res) => {
          this.tableLoading0 = false;
          if (res.code === 200) {
            this.tableData0 = res.data.records;
            this.page0.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading0 = false;
        });
    },
    pagination0({ page, limit }) {
      this.page0.current = page;
      this.page0.size = limit;
      this.getList0();
    },
    // æ‰“开编辑弹框
    handleAdd(row) {
      this.addInfo = this.HaveJson(row)
      this.title = '编辑'
      this.addDialogVisible = true
      this.getCustomPageList()
    },
    delRow(row) {
      this.$confirm("是否删除该条数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          delProcessSample({ id: row.id }).then(res => {
            if (res.code == 200) {
              this.$message.success("删除成功");
              this.refreshTable();
            }
          }).catch(err => { });
        })
        .catch(() => { });
    },
    // æäº¤æ–°å¢ž
    submitAdd() {
      // ç¼–辑
      this.addLoading = true
      addProcessSample({
        ...this.addInfo
      }).then(res => {
        this.addLoading = false
        this.addDialogVisible = false
        this.$message({
          type: 'success',
          message: '编辑成功!'
        });
        this.page0.current = 1;
        this.refreshTable();
      }).catch(err => { });
    },
    // å¯¼å‡ºè¯¦æƒ…
    handleDown0() {
      exportProcessSample({ receiveDate: this.queryParams0.receiveDate }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '样品接收' + '.docx');
      })
    },
  },
}
</script>
<style scoped>
.search_thing {
  width: 350px;
  display: flex;
  align-items: center;
}
.search_label {
  width: 110px;
  font-size: 14px;
  text-align: right;
}
.search_input {
  width: calc(100% - 110px);
}
.downPdf {
  opacity: 0 !important;
}
.tables td {
  height: 40px;
  width: 100px;
  text-align: center;
  font-size: 14px;
  word-wrap: break-word;
  white-space: normal;
}
.user-info .el-button {
  margin: 0;
}
>>>.el-tabs__content {
  height: 100%;
}
</style>
src/views/CNAS/process/ensureResults/qualityControlPlan/components/processingSheet.vue
@@ -461,18 +461,6 @@
        this.personList = data;
      });
    },
    // getSupervisedUserList () {
    //   this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => {
    //     let data = []
    //     res.data.forEach(a => {
    //       data.push({
    //         label: a.name,
    //         value: a.id
    //       })
    //     })
    //     this.supervisedUserList = data
    //   })
    // },
  }
};
</script>
src/views/CNAS/process/sampleDisposal/index.vue
ÎļþÒÑɾ³ý
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
@@ -248,7 +248,6 @@
  methods: {
    // æ–°å¢ž
    openAdd() {
      // this.$refs.ValueTable.openAddDia(this.$api.manageRecordIssueRecycle.addManageRecordIssueRecycle);
      this.addInfo = {}
      this.title = '新增'
      this.addDialogVisible = true;
src/views/business/inspectionTask/index.vue
@@ -61,9 +61,10 @@
                )"
                       @click="handleConnect(scope.row)">交接</el-button>
            <el-button type="text" size="small" @click="viewInspectInfo(scope.row)">原始记录</el-button>
            <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
            <el-popover placement="bottom" trigger="hover" style="margin-left: 6px" :disabled="(scope.row.insState != 3 || scope.row.userName == null ||(scope.row.userName && !scope.row.userName.includes(nickName)))">
              <template #reference>
                <el-button link type="text" size="small">更多</el-button>
                <el-button link type="text" size="small" :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
                  (scope.row.userName && !scope.row.userName.includes(nickName)))">更多</el-button>
              </template>
              <div>
                <el-button :disabled="(scope.row.insState != 3 || scope.row.userName == null ||
src/views/business/inspectionTask/inspection.vue
@@ -1641,20 +1641,6 @@
        this.comparisonList = this.dictToValue(response.data);
      });
    },
    // èŽ·å–æ£€éªŒå€¼ä¸ºä¸‹æ‹‰æ—¶çš„ä¸‹æ‹‰åˆ—è¡¨
    // selectEnumByCategoryOfSelect(val) {
    //   this.enumList = [];
    //   if (val === undefined || val === null) {
    //     return;
    //   }
    //   this.$axios
    //     .post(this.$api.enums.selectEnumByCategory, {
    //       category: val,
    //     })
    //     .then((res) => {
    //       this.enumList = res.data;
    //     });
    // },
    tableRowClassName({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
src/views/business/inspectionView/index.vue
@@ -1639,20 +1639,6 @@
        this.comparisonList = this.dictToValue(response.data);
      });
    },
    // èŽ·å–æ£€éªŒå€¼ä¸ºä¸‹æ‹‰æ—¶çš„ä¸‹æ‹‰åˆ—è¡¨
    // selectEnumByCategoryOfSelect(val) {
    //   this.enumList = [];
    //   if (val === undefined || val === null) {
    //     return;
    //   }
    //   this.$axios
    //     .post(this.$api.enums.selectEnumByCategory, {
    //       category: val,
    //     })
    //     .then((res) => {
    //       this.enumList = res.data;
    //     });
    // },
    tableRowClassName({ row, rowIndex }) {
      row.index = rowIndex + 1;
    },
src/views/business/materialOrder/copperOrder.vue
@@ -1496,19 +1496,6 @@
      })
      // this.searchTemList()
    },
    // searchTemList () {
    //   this.temperatureList = []
    //   this.$axios.post(this.$api.enums.selectEnumByCategory, {
    //     category: "电力温度循环检验"
    //   }).then(res => {
    //     if (res.data.length > 0) {
    //       this.temperatureEngList = res.data
    //       res.data.forEach(item => {
    //         this.temperatureList.push(item.label)
    //       })
    //     }
    //   })
    // },
    changeModel() {
      this.sampleList.forEach(a => {
        let obj = this.sampleIds.find(b => b == a.id)
src/views/business/materialOrder/copperView.vue
@@ -1495,19 +1495,6 @@
      })
      // this.searchTemList()
    },
    // searchTemList () {
    //   this.temperatureList = []
    //   this.$axios.post(this.$api.enums.selectEnumByCategory, {
    //     category: "电力温度循环检验"
    //   }).then(res => {
    //     if (res.data.length > 0) {
    //       this.temperatureEngList = res.data
    //       res.data.forEach(item => {
    //         this.temperatureList.push(item.label)
    //       })
    //     }
    //   })
    // },
    changeModel() {
      this.sampleList.forEach(a => {
        let obj = this.sampleIds.find(b => b == a.id)
src/views/business/materialOrderComponents/materialOrder/showInfo.vue
@@ -34,12 +34,6 @@
  methods: {
    getInfo (id) {
      console.log('id----', id)
      this.$axios.get(this.$api.rawMaterialOrder.getIndustryChain + '?id=' + id).then(res => {
        if (res.code === 200 && res.data !== null) {
          this.infoLIst = JSON.parse(res.data)
          console.log('this.infoLIst----', this.infoLIst)
        }
      })
    }
  },
}
src/views/business/reportPreparation/index.vue
@@ -187,7 +187,7 @@
          <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
        </el-upload>
      </div>
      <lims-table :tableData="tableDataFile" :column="columnFile" height="500px"
      <lims-table :tableData="tableDataFile" :column="columnFile" height="600px"
        key="tableDataFile" :tableLoading="tableLoadingFile"></lims-table>
    </el-dialog>
  </div>
@@ -525,7 +525,7 @@
    // æŸ¥è¯¢é™„件查看列表回调
    getFileList() {
      this.tableLoadingFile = true
      getFileList({ insOrderId: this.filesLookInfo.insOrderId }).then(res => {
      getFileList({ insOrderId: this.filesLookInfo.insOrderId,current: -1, size: -1 }).then(res => {
        this.tableLoadingFile = false
        if (res.code === 200) {
          this.tableDataFile = res.data.records