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