licp
2024-12-20 2a43cb4d91827fa6e2ce9a20fb788f40b94448ce
完成标准物质验收迁移
已修改2个文件
已添加4个文件
564 ■■■■■ 文件已修改
src/assets/api/controller.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/a6-standard-material-accep/components/AddRecord.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/a6-standard-material-accep/components/Step/Step1.vue 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/do/a6-standard-material-accep/index.vue 230 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a6-quantity-value-traceability-plan.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/view/a6-standard-material-accep.vue 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/api/controller.js
@@ -577,6 +577,7 @@
// 6.2 äººå‘˜
const personnel = {
  selectCNSAPersonTree: '/personBasicInfo/selectCNSAPersonTree', // æŸ¥è¯¢CNAS人员侧边栏
  saveCNASFile: '/personBasicInfo/saveCNASFile', // å…¬å…±æ–‡ä»¶ä¿å­˜æŽ¥å£
}
// 8.3 å®¢æˆ·æ»¡æ„åº¦è°ƒæŸ¥
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, // åŽ‚å®¶ä»£è¡¨
                    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>
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="厂家代表">
                <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>
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>
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('导出成功')
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>