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