From d07d2fc28e73e10310e9e974696e7b975bc67f20 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期五, 20 十二月 2024 14:51:02 +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 1e8d34a..f13909c 100644
--- a/src/assets/api/controller.js
+++ b/src/assets/api/controller.js
@@ -575,6 +575,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