From 2a43cb4d91827fa6e2ce9a20fb788f40b94448ce Mon Sep 17 00:00:00 2001 From: licp <lichunping@guanfang.com.cn> Date: 星期四, 26 十二月 2024 14:33:08 +0800 Subject: [PATCH] 完成标准物质验收迁移 --- src/components/view/a6-quantity-value-traceability-plan.vue | 3 src/components/do/a6-standard-material-accep/components/Step/Step1.vue | 201 ++++++++++++++++++++ src/components/do/a6-standard-material-accep/index.vue | 230 +++++++++++++++++++++++ src/components/view/a6-standard-material-accep.vue | 30 +++ src/assets/api/controller.js | 1 src/components/do/a6-standard-material-accep/components/AddRecord.vue | 99 +++++++++ 6 files changed, 563 insertions(+), 1 deletions(-) diff --git a/src/assets/api/controller.js b/src/assets/api/controller.js index 67662df..03ba2aa 100644 --- a/src/assets/api/controller.js +++ b/src/assets/api/controller.js @@ -577,6 +577,7 @@ // 6.2 浜哄憳 const personnel = { selectCNSAPersonTree: '/personBasicInfo/selectCNSAPersonTree', // 鏌ヨCNAS浜哄憳渚ц竟鏍� + saveCNASFile: '/personBasicInfo/saveCNASFile', // 鍏叡鏂囦欢淇濆瓨鎺ュ彛 } // 8.3 瀹㈡埛婊℃剰搴﹁皟鏌� diff --git a/src/components/do/a6-standard-material-accep/components/AddRecord.vue b/src/components/do/a6-standard-material-accep/components/AddRecord.vue new file mode 100644 index 0000000..2d8b525 --- /dev/null +++ b/src/components/do/a6-standard-material-accep/components/AddRecord.vue @@ -0,0 +1,99 @@ +<template> + <el-dialog :visible.sync="dialogVisible" title="鏍囧噯鐗╄川楠屾敹璁板綍" width="70%"> + <!-- <el-steps :active="currentStep" finish-status="success"> + <el-step class="cursor-pointer" v-for="(item, index) in steps" :key="index" :title="item"> + </el-step> + </el-steps> --> + <el-form :model="model" label-width="140px" size="small"> + <Step1 :model.sync="model"></Step1> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="dialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="submit">淇� 瀛�</el-button> + </span> + </el-dialog> +</template> + +<script> +import Step1 from './Step/Step1.vue' +export default { + components: { + Step1 + }, + data() { + return { + dialogVisible: false, + currentStep: 0, // 姝ラ鏉℃樉绀虹鍑犳 + // steps: ['鎻愪氦', '寮�绠遍獙鏀跺鏍�', '瀹夎楠屾敹妫�鏌�', '瀹夎楠屾敹澶嶆牳', '楠屾敹鏍告煡', '楠屾敹鏍告煡瀹℃牳'], + model: { + acceptance: { + id: undefined, + producer: undefined, // 鍘傚浠h〃 + file: undefined, // 鐩稿叧闄勪欢 + recipient: undefined, // 鎺ユ敹浜� + signature: undefined, // 鎺ュ彈绛惧瓧 + situation: undefined, // 楠屾敹鎯呭喌 + installation: undefined, // 瀹夎璋冭瘯鎯呭喌 + substanceId: undefined, // 娓呭崟 + arriveDate: undefined, // 鍒拌揣鏃ユ湡 + maintenanceUnit: undefined, // 缁翠慨鍗曚綅 + }, + list: [] + } + } + }, + watch: { + model(newVal) { + this.model = newVal + } + }, + methods: { + clearForm() { + this.model.acceptance.id = undefined + this.model.acceptance.producer = undefined + this.model.acceptance.file = undefined + this.model.acceptance.recipient = undefined + this.model.acceptance.signature = undefined + this.model.acceptance.situation = undefined + this.model.acceptance.installation = undefined + this.model.acceptance.substanceId = undefined + this.model.acceptance.arriveDate = undefined + this.model.acceptance.maintenanceUnit = undefined + this.model.list = [] + }, + openDialog(form) { + console.log(form) + if(form) { + this.model.acceptance.id = form.acceptance.id + this.model.acceptance.producer = form.acceptance.producer + this.model.acceptance.file = form.acceptance.file + this.model.acceptance.recipient = form.acceptance.recipient + this.model.acceptance.signature = form.acceptance.signature + this.model.acceptance.situation = form.acceptance.situation + this.model.acceptance.installation = form.acceptance.installation + this.model.acceptance.substanceId = form.acceptance.substanceId + this.model.acceptance.arriveDate = form.acceptance.arriveDate + this.model.acceptance.maintenanceUnit = form.acceptance.maintenanceUnit + this.model.list = form.list + } else { + this.clearForm() + } + this.dialogVisible = true + }, + closeDialog() { + this.dialogVisible = false + }, + submit() { + this.$emit('submit', this.model) + this.closeDialog() + } + } +} + +</script> + +<style scoped> +.cursor-pointer { + cursor: pointer; +} +</style> \ No newline at end of file diff --git a/src/components/do/a6-standard-material-accep/components/Step/Step1.vue b/src/components/do/a6-standard-material-accep/components/Step/Step1.vue new file mode 100644 index 0000000..3ca4831 --- /dev/null +++ b/src/components/do/a6-standard-material-accep/components/Step/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="娓呭崟"> + <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/components/do/a6-standard-material-accep/index.vue b/src/components/do/a6-standard-material-accep/index.vue new file mode 100644 index 0000000..26fd235 --- /dev/null +++ b/src/components/do/a6-standard-material-accep/index.vue @@ -0,0 +1,230 @@ +<template> + <div> + <div class="view-title"> + <span>鏍囧噯鐗╄川楠屾敹</span> + </div> + <div class="search"> + <el-form :inline="true" :model="form" size="small"> + <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> + <el-button type="primary" icon="el-icon-plus" size="small" @click="openDialog"> + 娣诲姞楠屾敹 + </el-button> + <el-button type="primary" size="small" @click="exportExcel">瀵煎嚭</el-button> + </div> + </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-sizes="[10, 20, 30, 40]" + :page-size="pagination.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="pagination.total" + @current-change="handleCurrent" + @size-change="handleSize" + > + </el-pagination> + </div> + </div> + <AddRecord ref="addRecordRef" @submit="submit"></AddRecord> + </div> +</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'; + +export default { + components: { + ZTTable, AddRecord + }, + 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: [], + pagination: { + current: 1, + pageSize: 20, + total: 0 + }, + } + }, + mounted() { + this.getTableData() + }, + methods: { + async getTableData() { + const { code, data } = await axios({ + method: 'get', + url: getPageAcceptance, + params: { + name: this.form.search + } + }) + if(code == 200) { + this.tableData = data.records; + } + }, + handleCurrent(val) { + this.pagination.current = val; + this.getTableData() + }, + handleSize(size) { + this.pagination.pageSize = size; + this.getTableData() + }, + openDialog() { + this.$refs.addRecordRef.openDialog() + }, + async submit(form) { + const {code} = await axios({ + method: 'post', + url: form.acceptance.id ? updateAcceptance:addAcceptance, + data: form, + noQs: true + }) + 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" + }) + 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(); + } + } +} +</script> + +<style scoped> + .view-title { + display: flex; + justify-content: space-between; + align-items: center; + height: 60px; + padding-left: 20px; + } + .search { + display: flex; + justify-content: space-between; + padding: 20px 20px 0 20px; + background: #fff; + border-radius: 5px; + } + .tables { + margin-top: 20px; + padding: 18px; + background: #fff; + border-radius: 5px; + } + .pagination { + padding-top: 15px; + padding-right: 10px; + display: flex; + justify-content: space-between + } +</style> diff --git a/src/components/view/a6-quantity-value-traceability-plan.vue b/src/components/view/a6-quantity-value-traceability-plan.vue index d1cc5ac..429dc22 100644 --- a/src/components/view/a6-quantity-value-traceability-plan.vue +++ b/src/components/view/a6-quantity-value-traceability-plan.vue @@ -209,7 +209,8 @@ exportFun() { this.outLoading = true this.$axios.post(this.$api.feCalibrationSchedule.exportOfValueTraceabilityPlan, { - instrumentName: this.searchForm.instrumentName + instrumentName: this.searchForm.instrumentName, + managementNumber:this.searchForm.managementNumber, }, {responseType: "blob"}).then(res => { this.outLoading = false this.$message.success('瀵煎嚭鎴愬姛') diff --git a/src/components/view/a6-standard-material-accep.vue b/src/components/view/a6-standard-material-accep.vue new file mode 100644 index 0000000..bbbe4e4 --- /dev/null +++ b/src/components/view/a6-standard-material-accep.vue @@ -0,0 +1,30 @@ +<template> + <div class="container"> + <StandMaterialAccept></StandMaterialAccept> + </div> +</template> + +<script> + import StandMaterialAccept from "@/components/do/a6-standard-material-accep"; + export default { + components: { + StandMaterialAccept + }, + data(){ + return { + } + }, + mounted() { + + }, + methods:{ + + } + } +</script> + +<style scoped> +.container { + padding-top: 10px; +} +</style> \ No newline at end of file -- Gitblit v1.9.3