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