From 0d11525aa58ec5e35ea22ff4b0d6d5863d73649b Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 04 三月 2025 16:43:52 +0800
Subject: [PATCH] Merge branch 'master' of http://114.132.189.42:9002/r/center-lims-before-ruoyi

---
 src/views/CNAS/process/sampleDisposal/index.vue |  609 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 609 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/process/sampleDisposal/index.vue b/src/views/CNAS/process/sampleDisposal/index.vue
new file mode 100644
index 0000000..f56ae44
--- /dev/null
+++ b/src/views/CNAS/process/sampleDisposal/index.vue
@@ -0,0 +1,609 @@
+<template>
+  <div class="sample-disposal">
+    <el-tabs type="border-card" v-model="activeName" style="height: 100%;" @tab-click="queryParams.totaldealId = ''">
+      <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;" :key="1">
+        <el-button size="small" type="primary" @click="handleAdd0" style="margin-left: 20px;">鏂板</el-button>
+        <div class="table" style="height: calc(100% - 200px)" v-if="activeName == '濉啓'">
+          <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading"
+            :height="'calc(100vh - 290px)'" :page="page" @pagination="pagination"></lims-table>
+        </div>
+      </el-tab-pane>
+      <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;" :key="2">
+        <div class="search">
+          <div class="search_thing">
+            <div class="search_label">骞存湀锛�</div>
+            <div class="search_input">
+              <el-date-picker v-model="queryParams0.month" type="month" placeholder="閫夋嫨鏈�" format="yyyy-MM"
+                value-format="yyyy-MM" size="small" @change="refreshTable()">
+              </el-date-picker>
+            </div>
+          </div>
+          <div class="search_thing" style="padding-left: 30px;">
+            <el-button size="small" @click="refresh()">閲� 缃�</el-button>
+            <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+          </div>
+        </div>
+        <div class="table">
+          <lims-table :tableData="tableData0" :column="column0" :tableLoading="tableLoading"
+            :height="'calc(100vh - 300px)'" :page="page0" @pagination="pagination0"></lims-table>
+        </div>
+      </el-tab-pane>
+    </el-tabs>
+    <!-- 鏂板鏍峰搧 -->
+    <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 {
+  doProcessDeal,
+  addProcessDeal,
+  submitProcessTotaldeal,
+  pageProcessDeal,
+  checkProcessTotaldeal,
+  ratifyProcessTotaldeal,
+  delProcessDeal,
+  pageProcessTotaldeal,
+} from "@/api/cnas/process/sampleDisposal";
+export default {
+  components: {
+    limsTable,
+    filePreview,
+  },
+  name: "SampleDisposal",
+  data() {
+    return {
+      activeName: '濉啓',
+      title: '鏂板',
+      addDialogVisible: false,
+      addLoading: false,
+      outLoading: false,
+      editDialogVisible: false,
+      lookDialogVisible: false,
+      title0: '鏌ョ湅',
+      noCheckLoading: false,
+      checkLoading: false,
+      // 鍘嗗彶鍒楄〃
+      addInfo: {},//鏂板鏍峰搧
+      customPageList: [],
+      currentInfo: {
+        arr: []
+      },//鏌ョ湅鐨勮鎯�
+      outPower: false,
+      addPower: false,
+      queryParams: {},
+      tableData: [],
+      column: [
+        { label: "鏍峰搧鍚嶇О", prop: "sampleName" },
+        { label: "鏍峰搧缂栧彿", prop: "sampleCode" },
+        { label: "渚涙牱鍗曚綅", prop: "sampleSupplier" },
+        { label: "鏁伴噺", prop: "num" },
+        { label: "澶勭悊鏂瑰紡", prop: "dealMethod" },
+        { label: "鏃堕棿", prop: "dealTime" },
+        {
+          dataType: "action",
+          fixed: "right",
+          label: "鎿嶄綔",
+          operation: [
+            {
+              name: "缂栬緫",
+              type: "text",
+              clickFun: (row) => {
+                this.handleAdd0(row);
+              },
+            },
+            {
+              name: "鍒犻櫎",
+              type: "text",
+              clickFun: (row) => {
+                this.handleDelete(row);
+              },
+            },
+          ],
+        },
+      ],
+      page: {
+        total: 0,
+        size: 10,
+        current: 0,
+      },
+      tableLoading: false,
+      queryParams0: {},
+      tableData0: [],
+      column0: [
+        { label: "鏈堜唤", prop: "month" },
+        { label: "鎬绘暟閲�", prop: "totalNum" },
+        { label: "鎻愪氦浜�", prop: "submitUserName" },
+        { label: "瀹℃牳浜�", prop: "examineUserName" },
+        { label: "鎵瑰噯浜�", prop: "ratifyUserName" },
+        {
+          dataType: "action",
+          fixed: "right",
+          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: 10,
+        current: 0,
+      },
+    };
+  },
+  mounted() {
+    // this.entityCopy = this.HaveJson(this.componentData.entity);
+    this.getCustomPageList()
+    this.getList()
+    this.getList0()
+  },
+  methods: {
+    getPower() {
+      let power = JSON.parse(sessionStorage.getItem('power'))
+      let add = false
+      let out = false
+      let submitProcessTotaldeal = false
+      let checkProcessTotaldeal = false
+      let ratifyProcessTotaldeal = false
+      for (var i = 0; i < power.length; i++) {
+        if (power[i].menuMethod == 'addProcessDeal') {
+          add = true
+        }
+        // if (power[i].menuMethod == 'exportProcessEvaluate') {
+        //   out = true
+        // }
+        if (power[i].menuMethod == 'submitProcessTotaldeal') {
+          submitProcessTotaldeal = true
+        }
+        if (power[i].menuMethod == 'checkProcessTotaldeal') {
+          checkProcessTotaldeal = true
+        }
+        if (power[i].menuMethod == 'ratifyProcessTotaldeal') {
+          ratifyProcessTotaldeal = true
+        }
+      }
+      if (!ratifyProcessTotaldeal) {
+        this.componentData.do.splice(4, 1)
+      }
+      if (!checkProcessTotaldeal) {
+        this.componentData.do.splice(3, 1)
+      }
+      if (!submitProcessTotaldeal) {
+        this.componentData.do.splice(2, 1)
+      }
+      if (!add) {
+        this.componentData0.do.splice(1, 1)
+        this.componentData0.do.splice(0, 1)
+      }
+      this.addPower = add
+    },
+    // 鑾峰彇閫佹牱鍗曚綅鍒楄〃
+    getCustomPageList() {
+      selectCustomPageList({
+        current: -1,
+        size: -1
+      }).then(res => {
+        this.customPageList = res.data.records
+      }).catch(err => { });
+    },
+    handleDown() { },
+    getList() {
+      this.tableLoading = true;
+      let param = { ...this.queryParams, ...this.page };
+      delete param.total;
+      pageProcessDeal({ ...param })
+        .then((res) => {
+          this.tableLoading = false;
+          if (res.code === 200) {
+            this.tableData = res.data.records;
+            this.page.total = res.data.total;
+          }
+        })
+        .catch((err) => {
+          this.tableLoading = false;
+        });
+    },
+    pagination({ page, limit }) {
+      this.page.current = page;
+      this.page.size = limit;
+      this.getList();
+    },
+    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.page };
+      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();
+    },
+    // 濉啓
+    // handleAdd(row){
+    //   this.componentData0.entity.totaldealId = row.id
+    //   this.editDialogVisible = true
+    // },
+    // 鎵撳紑鏂板鐣岄潰
+    handleAdd0(row) {
+      if (row) {
+        this.addInfo = this.HaveJson(row)
+        this.title = '缂栬緫'
+      } else {
+        this.title = '鏂板'
+        this.addInfo = {}
+      }
+      this.addDialogVisible = true
+    },
+    // 鎻愪氦鏂板
+    submitAdd() {
+      if (this.addInfo.id) {
+        // 缂栬緫
+        this.addLoading = true
+        doProcessDeal({
+          totaldealId: this.queryParams.totaldealId,
+          ...this.addInfo
+        }).then(res => {
+          this.addLoading = false
+          if (res.code === 201) return
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '缂栬緫鎴愬姛!'
+          });
+          this.page.current = 0;
+          this.getList();
+        }).catch(err => { });
+      } else {
+        // 鏂板
+        this.addLoading = true
+        addProcessDeal({
+          totaldealId: this.queryParams.totaldealId,
+          ...this.addInfo
+        }).then(res => {
+          this.addLoading = false
+          if (res.code === 201) return
+          this.addDialogVisible = false
+          this.$message({
+            type: 'success',
+            message: '鏂板鎴愬姛!'
+          });
+          this.page.current = 0;
+          this.getList();
+        }).catch(err => { });
+      }
+    },
+    // 鎻愪氦
+    handleSubmit(row) {
+      this.$confirm('鏄惁鎻愪氦 ' + row.month + ' 鏈堜唤鐨勬暟鎹�', '鎻愪氦', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        submitProcessTotaldeal({
+          id: row.id
+        }).then(res => {
+          if (res.code === 201) return
+          this.$message({
+            type: 'success',
+            message: '鎻愪氦鎴愬姛!'
+          });
+          this.refreshTable()
+        }).catch(err => { });
+      })
+    },
+    // 鏌ョ湅
+    handleLook(row) {
+      // console.log(row)
+      // this.title0 = '鏌ョ湅'
+      // this.commonFun(row)
+      this.activeName = '濉啓'
+      this.queryParams.totaldealId = row.id
+      this.$nextTick(() => {
+        this.page.current = 0;
+        this.getList();
+      })
+    },
+    commonFun(row, callbanck) {
+      this.currentInfo = row
+      this.queryParams.totaldealId = row.id
+      pageProcessDeal({
+        current: -1,
+        size: -1, ...this.queryParams
+      }).then(res => {
+        this.lookDialogVisible = true
+        this.currentInfo.arr = res.data.records
+        if (callbanck) {
+          callbanck()
+        }
+      }).catch(err => { });
+    },
+    // 瀹℃牳
+    handleCheck(row) {
+      this.title0 = '瀹℃牳'
+      this.commonFun(row)
+    },
+    // 鎵瑰噯
+    handleApproval(row) {
+      this.title0 = '鎵瑰噯'
+      this.commonFun(row)
+    },
+    // 鎻愪氦瀹℃牳/鎵瑰噯
+    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
+          if (res.code === 201) return
+          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
+          if (res.code === 201) return
+          this.$message({
+            type: 'success',
+            message: '鎿嶄綔鎴愬姛!'
+          });
+          this.refreshTable()
+          this.lookDialogVisible = false
+        }).catch(err => { });
+      }
+    },
+    // 瀵煎嚭璇︽儏
+    handleDown0(row) {
+      // 鍚庣涓嬭浇
+      let url = this.javaApi + '/word/' + row.url
+      this.$download.saveAs(url, row.month + ' 鏍峰搧澶勭悊鐢宠琛�');
+    },
+    handleDelete(row) {
+      this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        type: "warning",
+      })
+        .then(() => {
+          delProcessDeal({ id: row.id }).then((res) => {
+            if (res.code == 201) return;
+            this.$message.success("鍒犻櫎鎴愬姛");
+            this.refresh();
+          });
+        })
+        .catch(() => { });
+    },
+  },
+}
+</script>
+
+<style scoped>
+.title {
+  height: 60px;
+  line-height: 60px;
+}
+
+.search {
+  background-color: #fff;
+  height: 40px;
+  display: flex;
+  align-items: center;
+  position: relative;
+}
+
+.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);
+}
+
+.table {
+  background-color: #fff;
+  height: calc(100% - 60px - 140px);
+  padding: 20px;
+}
+
+.downPdf {
+  opacity: 0 !important;
+}
+
+.tables {
+  table-layout: fixed;
+  width: 100%;
+}
+
+.tables td {
+  height: 40px;
+  width: 100px;
+  text-align: center;
+  font-size: 14px;
+  word-wrap: break-word;
+  white-space: normal;
+}
+
+.en {
+  font-size: 12px;
+  word-break: break-word;
+  /* 鑷姩鏂 */
+  overflow-wrap: break-word;
+  /* 闃叉婧㈠嚭 */
+  white-space: normal;
+  /* 榛樿鎹㈣ */
+}
+
+.user-info {
+  display: flex;
+  align-items: center;
+  justify-content: space-evenly;
+  margin-top: 20px;
+}
+
+.user-info .el-button {
+  margin: 0;
+}
+
+>>>.el-tabs__content {
+  height: 100%;
+}
+</style>

--
Gitblit v1.9.3