From 3aa0f70b9639cfd7a4520a2bd47ae793a6a4a291 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 24 二月 2025 19:50:48 +0800
Subject: [PATCH] 标准物质领用

---
 src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue       |  146 ++++++++++++++
 src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue           |  230 +++++++++++++++++++++++
 src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue |  201 ++++++++++++++++++++
 3 files changed, 577 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue b/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue
new file mode 100644
index 0000000..9d91405
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterailRequistion/index.vue
@@ -0,0 +1,146 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+          <el-form-item label="鏍囧噯鐗╄川鍚嶇О" prop="name">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.name"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item label="瑙勬牸鍨嬪彿" prop="factoryManufacturer">
+            <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="searchForm.model"
+                      @keyup.enter.native="searchList"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button size="medium"  @click="resetSearchForm">閲� 缃�</el-button>
+            <el-button size="medium" type="primary" @click="searchList">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+  </div>
+</template>
+
+<script>
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+  getPageSubstanceRecord
+} from '@/api/cnas/resourceDemand/standardMaterailRequistion/standardMaterailRequistion'
+
+export default {
+  components: {
+    limsTable
+    // TableCard,
+    // ZTTable,
+  },
+  data() {
+    return {
+      searchForm: {
+        name: '',
+        factoryManufacturer: '',
+      },
+      tableColumn: [
+        {
+          label: '鏍囧噯鐗╄川鍚嶇О',
+          prop: 'name',
+          minWidth: '120'
+        },
+        {
+          label: '瑙勬牸鍨嬪彿',
+          prop: 'model',
+          minWidth: '100'
+        },
+        {
+          label: '鍑哄巶缂栧彿',
+          prop: 'factoryNum',
+          minWidth: '100'
+        },
+        {
+          label: '鏁伴噺',
+          prop: 'factoryNum',
+          minWidth: '100'
+        },
+        {
+          label: '棰嗙敤浜�',
+          prop: 'borrowUser',
+          minWidth: '100'
+        },
+        {
+          label: '棰嗙敤鏃ユ湡',
+          prop: 'borrowDate',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕浜�',
+          prop: 'returnIntegrity',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕鏃ユ湡',
+          prop: 'returnDate',
+          minWidth: '100'
+        },
+        {
+          label: '褰掕繕鏃剁姸鎬�',
+          prop: 'returnIntegrity',
+          minWidth: '100'
+        }
+      ],
+      tableData: [],
+      tableLoading: false,
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      total: 0,
+      formDia: false,
+      borrowDia: false,
+      returnDia: false,
+    }
+  },
+  mounted() {
+    this.searchList()
+  },
+  methods :{
+    // 鏌ヨ鍒楄〃
+    searchList () {
+      this.tableLoading = true
+      getPageSubstanceRecord({
+        ...this.page,
+        ...this.searchForm
+      }).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
+      })
+    },
+    // 閲嶇疆鏌ヨ鏉′欢
+    resetSearchForm () {
+      this.searchForm.name = '';
+      this.searchForm.model = '';
+      this.searchList()
+    },
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.searchList();
+    },
+  }
+}
+</script>
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue
new file mode 100644
index 0000000..c1f26ad
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/component/Step1.vue
@@ -0,0 +1,201 @@
+<!--<template>-->
+<!--    <el-card class="card">-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鍘傚浠h〃">-->
+<!--                <el-input v-model="model.acceptance.producer"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鐩稿叧闄勪欢">-->
+<!--                <div class="table-between">-->
+<!--                    <el-input v-model="model.acceptance.file" style="width: 82%;"></el-input>-->
+<!--                    <el-upload-->
+<!--                        ref="upload"-->
+<!--                        style="float: left; margin: 0 12px 0 20px;"-->
+<!--                        :action="action"-->
+<!--                        :show-file-list="false"-->
+<!--                        :on-success="onSuccess"-->
+<!--                    >-->
+<!--                        <el-button type="primary">-->
+<!--                            闄勪欢涓婁紶-->
+<!--                        </el-button>-->
+<!--                    </el-upload>-->
+<!--                </div>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鎺ユ敹浜�">-->
+<!--                <el-input v-model="model.acceptance.recipient"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鎺ュ彈绛惧瓧">-->
+<!--                <el-input v-model="model.acceptance.signature"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="楠屾敹鎯呭喌">-->
+<!--                <el-input v-model="model.acceptance.situation"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="瀹夎璋冭瘯鎯呭喌">-->
+<!--                <el-input v-model="model.acceptance.installation"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="娓呭崟" prop="substanceId" required>-->
+<!--                <el-select v-model="model.acceptance.substanceId" placeholder="璇烽�夋嫨" style="width: 100%">-->
+<!--                    <el-option-->
+<!--                        v-for="item in options"-->
+<!--                        :key="item.value"-->
+<!--                        :label="item.name"-->
+<!--                        :value="item.id">-->
+<!--                    </el-option>-->
+<!--                </el-select>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="鍒拌揣鏃ユ湡">-->
+<!--                <el-date-picker-->
+<!--                    v-model="model.acceptance.arriveDate"-->
+<!--                    align="right"-->
+<!--                    type="date"-->
+<!--                    placeholder="閫夋嫨鏃ユ湡"-->
+<!--                    style="width: 100%"-->
+<!--                    value-format="yyyy-MM-dd"-->
+<!--                >-->
+<!--                </el-date-picker>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="12">-->
+<!--            <el-form-item label="缁翠慨鍗曚綅">-->
+<!--                <el-input v-model="model.acceptance.maintenanceUnit"></el-input>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="24">-->
+<!--            <el-form-item label="澶囦欢纭">-->
+<!--                <el-button type="primary" style="float: right;" @click="addSpareTable">澧炲姞琛�</el-button>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--        <el-col :span="24">-->
+<!--            <el-form-item>-->
+<!--                <ZTTable-->
+<!--                    style="margin-bottom: 20px;"-->
+<!--                    :column="spareColumns"-->
+<!--                    :table-data="model.list"-->
+<!--                >-->
+<!--                    <template slot="name" slot-scope="{ row, index }">-->
+<!--                        <el-input v-if="row.isEdit" size="small" v-model="row.name"></el-input>-->
+<!--                        <span v-else>{{ row.name }}</span>-->
+<!--                    </template>-->
+<!--                    <template slot="number" slot-scope="{ row, index }">-->
+<!--                        <el-input v-if="row.isEdit" size="small" v-model="row.number"></el-input>-->
+<!--                        <span v-else>{{ row.number }}</span>-->
+<!--                    </template>-->
+<!--                    <template slot="action" slot-scope="{ row, index }">-->
+<!--                        <div v-if="row.isEdit">-->
+<!--                            <el-button type="text" @click="save(index)">淇濆瓨</el-button>-->
+<!--                            <el-button type="text">鍙栨秷</el-button>-->
+<!--                        </div>-->
+<!--                        <div v-else>-->
+<!--                            <el-button type="text" @click="edit(index)">淇敼</el-button>-->
+<!--                        </div>-->
+<!--                    </template>-->
+<!--                </ZTTable>-->
+<!--            </el-form-item>-->
+<!--        </el-col>-->
+<!--    </el-card>-->
+<!--</template>-->
+
+<!--<script>-->
+<!--import ZTTable from '@/components/caorui/ZTTable/index.vue';-->
+<!--import { getStandardSubstanceAll } from "@/assets/api/api";-->
+<!--import axios from 'axios';-->
+
+<!--export default {-->
+<!--    components: {-->
+<!--        ZTTable-->
+<!--    },-->
+<!--    props: {-->
+<!--        model: {-->
+<!--            type: Object,-->
+<!--            default: () => {}-->
+<!--        }-->
+<!--    },-->
+<!--    data() {-->
+<!--        return {-->
+<!--            spareColumns: [-->
+<!--                {-->
+<!--                    label: "鍚嶇О",-->
+<!--                    prop: "name",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "name",-->
+<!--                }, {-->
+<!--                    label: "鏁伴噺",-->
+<!--                    prop: "number",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "number",-->
+<!--                }, {-->
+<!--                    label: "鎿嶄綔",-->
+<!--                    align: "center",-->
+<!--                    dataType: "slot",-->
+<!--                    slot: "action",-->
+<!--                    width: 150-->
+<!--                }-->
+<!--            ],-->
+<!--            options: []-->
+<!--        }-->
+<!--    },-->
+<!--    computed: {-->
+<!--        action() {-->
+<!--            return `${this.javaApi}/${this.$api.personnel.saveCNASFile}`-->
+<!--        }-->
+<!--    },-->
+<!--    mounted() {-->
+<!--        this.getStand()-->
+<!--    },-->
+<!--    methods: {-->
+<!--        async getStand() {-->
+<!--            const { code, data } = await axios({-->
+<!--                url: getStandardSubstanceAll,-->
+<!--                method: 'get'-->
+<!--            })-->
+<!--            this.options = data-->
+<!--        },-->
+<!--        addSpareTable() {-->
+<!--            this.model.list.push({-->
+<!--                acceptanceId: this.model.acceptance.id,-->
+<!--                name: '',-->
+<!--                number: '',-->
+<!--                isEdit: true-->
+<!--            })-->
+<!--        },-->
+<!--        onSuccess(response) {-->
+<!--            this.model.acceptance.file = response.data-->
+<!--            this.$emit('update:model', this.model)-->
+<!--        },-->
+<!--        save(index) {-->
+<!--            this.model.list[index].isEdit = false-->
+<!--            this.$emit('update:model', this.model)-->
+<!--        },-->
+<!--        edit(index) {-->
+<!--            this.model.list[index].isEdit = true-->
+<!--        }-->
+<!--    }-->
+<!--}-->
+<!--</script>-->
+
+<!--<style scoped>-->
+<!--.card {-->
+<!--    margin-top: 1em;-->
+<!--    height: 56vh;-->
+<!--    overflow-y: scroll;-->
+<!--}-->
+<!--.table-between {-->
+<!--    display: flex;-->
+<!--    justify-content: space-between;-->
+<!--}-->
+<!--</style>-->
diff --git a/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
new file mode 100644
index 0000000..b6bb91f
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
@@ -0,0 +1,230 @@
+<template>
+  <div class="capacity-scope">
+    <div class="search">
+      <div>
+        <el-form :model="form" ref="form" size="small" :inline="true">
+          <el-form-item label="鐗╄川鍚嶇О">
+            <el-input v-model="form.search"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="reset">閲� 缃�</el-button>
+            <el-button type="primary" @click="getTableData">鏌� 璇�</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+      <div>
+        <el-button icon="el-icon-plus" size="small" type="primary" @click="openDialog">娣诲姞楠屾敹</el-button>
+        <el-button size="small" type="primary" @click="exportExcel">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <div class="table">
+      <lims-table :tableData="tableData" :column="columns" :height="'calc(100vh - 250px)'" @pagination="pagination"
+                  :page="page" :tableLoading="tableLoading"></lims-table>
+    </div>
+    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>
+  </div>
+
+<!--    <div class="tables">-->
+<!--      <ZTTable-->
+<!--        :column="columns"-->
+<!--        :table-data="tableData"-->
+<!--      >-->
+<!--        <template slot="action" slot-scope="{ row }">-->
+<!--          <el-button type="text" @click="edit(row)">缂栬緫</el-button>-->
+<!--        </template>-->
+<!--      </ZTTable>-->
+<!--      <div class="pagination">-->
+<!--        <div></div>-->
+<!--        <el-pagination-->
+<!--          :page-size="pagination.pageSize"-->
+<!--          :page-sizes="[10, 20, 30, 40]"-->
+<!--          :total="pagination.total"-->
+<!--          layout="total, sizes, prev, pager, next, jumper"-->
+<!--          @current-change="handleCurrent"-->
+<!--          @size-change="handleSize"-->
+<!--        >-->
+<!--        </el-pagination>-->
+<!--      </div>-->
+<!--    </div>-->
+<!--    <AddRecord ref="addRecordRef" @submit="submit"></AddRecord>-->
+</template>
+
+<script>
+// import axios from "axios";
+// import { getPageAcceptance, addAcceptance, updateAcceptance, getAcceptanceDetails, exportAcceptance } from "@/assets/api/api";
+// import ZTTable from '@/components/caorui/ZTTable/index.vue';
+// import AddRecord from './components/AddRecord.vue';
+
+import limsTable from '@/components/Table/lims-table.vue'
+import {
+  getPageAcceptance,
+  updateAcceptanc,
+  addAcceptance
+} from '@/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept'
+export default {
+  components: {
+    limsTable
+
+  },
+  data() {
+    return {
+      form: {
+        search: undefined
+      },
+      columns: [
+        {
+          label: "鍑哄満缂栧彿",
+          prop: "factoryNum"
+        },
+        {
+          label: "鏈夋晥鏈�",
+          prop: "effectiveDate"
+        },
+        {
+          label: "鐢熶骇鍘傚",
+          prop: "factoryManufacturer"
+        },
+        {
+          label: "鏂囨。缂栧彿",
+          prop: "fileNum"
+        },
+        {
+          label: "鏍囧噯鐗╄川鍚嶇О",
+          prop: "name"
+        },
+        {
+          label: "瑙勬牸鍨嬪彿",
+          prop: "model"
+        },
+        {
+          label: "绠$悊缂栧彿",
+          prop: "manageNum"
+        },
+        {
+          label: "瀛樻斁浣嶇疆",
+          prop: "position"
+        },
+        // {
+        //     label: "搴忓垪鍙�",
+        //     prop: "manageNum"
+        // },
+        {
+          label: "鎻愪氦鏃ユ湡",
+          prop: "acquisitionDate"
+        },
+        {
+          label: "鏁伴噺",
+          prop: "quantity"
+        },
+        {
+          fixed: "right",
+          label: "鎿嶄綔",
+          align: "center",
+          dataType: "slot",
+          slot: "action",
+        },
+      ],
+      tableData: [],
+      page: {
+        total: 0,
+        size: 10,
+        current: 1
+      },
+      tableLoading: false,
+    }
+  },
+  mounted() {
+    this.getTableData()
+  },
+  methods: {
+    async getTableData() {
+      const res = await  getPageAcceptance(this.form);
+      if(res.code === 200){
+        this.tableData = res.data.records;
+        this.page.total = res.data.total;
+      }
+
+    },
+    openDialog() {
+      this.$refs.addRecordRef.openDialog()
+    },
+    async submit(form) {
+
+      const {code} = await form.acceptance.id ? updateAcceptanc(this.form):addAcceptance((this.form));
+      if(code == 200) {
+        this.$message.success(`${form.acceptance.id ? '缂栬緫':'娣诲姞'}鎴愬姛`)
+        this.getTableData()
+      }
+    },
+    async edit(row) {
+      const res = await this.getDetail(row.id)
+      this.$refs.addRecordRef.openDialog({
+        acceptance: res.acceptance,
+        list: res.list
+      })
+    },
+    async getDetail(id) {
+      const { code, data } = await axios({
+        method: 'get',
+        url: getAcceptanceDetails,
+        params: { id }
+      })
+      if(code == 200) {
+        return data;
+      }
+    },
+    reset() {
+      this.form.search = undefined
+      this.getTableData()
+    },
+    async exportExcel() {
+      const res = await axios({
+        method: "get",
+        url: `${exportAcceptance}`,
+        responseType: "blob"
+      })
+      const blob = new Blob([res], {type: 'application/octet-stream'});
+      //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+      let reader = new FileReader();
+      reader.readAsText(blob, 'utf-8');
+      reader.onload = () => {
+        try {
+          let result = JSON.parse(reader.result);
+          if (result.message) {
+            this.$message.error(result.message);
+          } else {
+            const url = URL.createObjectURL(blob);
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
+            link.click();
+            this.$message.success('瀵煎嚭鎴愬姛')
+          }
+        } catch (err) {
+          console.log(err);
+          const url = URL.createObjectURL(blob);
+          const link = document.createElement('a');
+          link.href = url;
+          link.download = '鏍囧噯鐗╄川楠屾敹.xlsx';
+          link.click();
+          this.$message.success('瀵煎嚭鎴愬姛')
+        }
+      }
+    },
+
+    // 鍒嗛〉鍒囨崲
+    pagination(page) {
+      this.page.size = page.limit
+      this.getTableData()
+    },
+  }
+}
+</script>
+
+<style scoped>
+.search {
+  height: 46px;
+  display: flex;
+  justify-content: space-between;
+}
+</style>

--
Gitblit v1.9.3