| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760 |
- <!-- 用户编辑弹窗 -->
- <template>
- <div>
- <ele-pro-table
- :needPage="false"
- :columns="workColumns"
- :datasource="[form]"
- >
-
- <template v-slot:craftFiles="{ row }">
- <el-link type="primary" :underline="false" @click="craftFiles(row)"
- >工艺文件</el-link
- >
- </template>
- <template v-slot:isRequired="{ column }">
- <span class="is-required">{{ column.label }}</span>
- </template>
- <template v-slot:qualityType="{ row }">
- {{ getDictValue('质检计划类型', row.qualityType) }}
- </template>
- <template v-slot:qualityMode="{ row }">
- {{ getDictValue('取样类型', row.qualityMode) }}
- </template>
- <template v-slot:hours="{ row }">
- <el-input
- v-model="row.hours"
- placeholder="请输入"
- type="number"
- disabled
- >
- </el-input>
- </template>
- <template v-slot:accessory="{ row }">
- <fileMain v-model="row.accessory" type="view"></fileMain>
- </template>
- <template v-slot:sampleQuantity="{ row }">
- <el-input
- v-model="row.sampleQuantity"
- placeholder="请输入"
- type="number"
- disabled
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:sampleNoQualifiedNumber="{ row }">
- <el-input
- v-model="row.sampleNoQualifiedNumber"
- placeholder="请输入"
- type="number"
- disabled
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- </ele-pro-table>
- <ele-pro-table
- :needPage="false"
- :columns="tableColumns"
- :datasource="tableData"
- >
- <template v-slot:qualityStandardType="{ row }">
- {{ getDictValue('质检标准类型', row.qualityStandardType) }}
- </template>
- <template v-slot:executionMethod="{ row }">
- <el-select v-model="row.executionMethod" style="width: 100%" disabled>
- <el-option :value="1" label="常规检验"></el-option>
- <el-option :value="2" label="实验"></el-option>
- </el-select>
- </template>
- <template v-slot:useTools="{ row }">
- <toolButtom v-model="row.useTools" :type="type" :sList="row.toolList" />
- </template>
- <template v-slot:qualityResultContent="{ row }">
- <el-input
- v-model="row.qualityResultContent"
- placeholder="请输入内容"
- disabled
- >
- <template slot="append" v-if="row.unitName">
- {{ row.unitName }}
- </template>
- </el-input>
- </template>
- <template v-slot:sampleQuantity="{ row, $index }">
- <el-input
- v-model="row.sampleQuantity"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:qualifiedQuantity="{ row, $index }">
- <el-input
- v-model="row.qualifiedQuantity"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:noQualifiedQuantity="{ row, $index }">
- <el-input
- v-model="row.noQualifiedQuantity"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:lossNumber="{ row, $index }">
- <el-input
- v-model="row.lossNumber"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:lossNumberUnqualified="{ row, $index }">
- <el-input
- v-model="row.lossNumberUnqualified"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:retainedSampleQuantity="{ row, $index }">
- <el-input
- v-model="row.retainedSampleQuantity"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:retainedSampleUnqualified="{ row, $index }">
- <el-input
- v-model="row.retainedSampleUnqualified"
- placeholder="请输入"
- disabled
- type="number"
- >
- <template slot="append">{{ form.measureUnit }}</template>
- </el-input>
- </template>
- <template v-slot:qualityResults="{ row, $index }">
- <el-select
- v-model="row.qualityResults"
- placeholder="请选择"
- style="width: 100%"
- disabled
- >
- <el-option
- v-for="item in qualityResultsList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </template>
- <template v-slot:inspectImage="{ row, $index }">
- <fileMain v-model="row.inspectImage" type="view"></fileMain>
- </template>
- <template v-slot:imgUrl="{ row, $index }">
- <fileMain v-model="row.imgUrl" type="view"></fileMain>
- </template>
- <template v-slot:defaultValue="{ row }">
- <div style="display: flex; justify-content: center; color: #409eff">
- <span v-if="row.textType != 8">{{ row.symbol }}</span>
- <span v-if="row.textType == 3">
- {{ row.minValue }}-{{ row.maxValue }}
- </span>
- <span v-else-if="row.textType == 8">
- 标准值:{{ row.defaultValue }}{{ row.unitName || '' }} 下限:{{
- row.minValue || 0
- }}{{ row.unitName || '' }} 上限:{{ row.maxValue || 0
- }}{{ row.unitName || '' }}
- </span>
- <span v-else>
- <span>{{ row.defaultValue }}</span>
- </span>
- <span v-if="row.textType != 8">
- {{ row.unitName }}
- </span>
- </div>
- </template>
- <template v-slot:inspectionName="{ row }">
- <span style="color: #409eff">{{ row.inspectionName }}</span>
- </template>
- <template v-slot:isRequired="{ column }">
- <span class="is-required">{{ column.label }}</span>
- </template>
- <template v-slot:action="{ row }">
- <el-link
- type="primary"
- :underline="false"
- @click="experimentReport(row, 'view')"
- v-if="row.executionMethod == 2"
- >
- 实验
- </el-link>
- </template>
- </ele-pro-table>
- <experimentReport
- ref="experimentReport"
- @done="experimentReportDone"
- :pageName="pageName"
- ></experimentReport>
- <wokePopup ref="wokePopupRef"></wokePopup>
- </div>
- </template>
- <script>
- import dictMixins from '@/mixins/dictMixins';
- import detailMixins from '../mixins/detailMixins';
- import toolButtom from './toolButtom.vue';
- import experimentReport from './experimentReport.vue';
- import wokePopup from '@/components/workList/wokePopup.vue';
- import { parameterGetByCode } from '@/api/main/index';
- import { craftFiles, mesCraftFiles } from '@/api/inspectionWork';
- export default {
- mixins: [dictMixins, detailMixins],
- components: { toolButtom, experimentReport, wokePopup },
- data() {
- return {
- form: {},
- tableData: [],
- rowIndex: [],
- curretNum: 0,
- qms_qualityResultContent: 1,
- workColumns: [
- {
- minWidth: 150,
- prop: 'code',
- align: 'center',
- label: '检测项工单号',
- showOverflowTooltip: true
- },
- {
- minWidth: 150,
- prop: 'code',
- align: 'center',
- label: '检测工单编码',
- showOverflowTooltip: true
- },
- {
- minWidth: 150,
- prop: 'name',
- align: 'center',
- label: '检测工单名称',
- showOverflowTooltip: true
- },
-
- {
- minWidth: 100,
- prop: 'qualityType',
- slot: 'qualityType',
- align: 'center',
- label: '类型',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- slot: 'qualityMode',
- prop: 'qualityMode',
- align: 'center',
- label: '检测方式',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'productCode',
- align: 'center',
- label: '编码',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'productName',
- align: 'center',
- label: '名称',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'batchNo',
- align: 'center',
- label: '批次号',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'specification',
- align: 'center',
- label: '规格',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'brandNo',
- align: 'center',
- label: '牌号',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'produceTaskName',
- align: 'center',
- label: '工序名称',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'total',
- align: 'center',
- label: '总数量',
- formatter: (row) => {
- if (row.total) {
- return row.total + this.form.measureUnit || '';
- }
- },
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'sampleQuantity',
- headerSlot: 'isRequired',
- slot: 'sampleQuantity',
- align: 'center',
- label: '样品数',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'sampleNoQualifiedNumber',
- slot: 'sampleNoQualifiedNumber',
- align: 'center',
- label: '样品不合格数',
- showOverflowTooltip: true
- },
- {
- minWidth: 140,
- prop: 'sampleQualifiedNumber',
- headerSlot: 'isRequired',
- slot: 'sampleQualifiedNumber',
- align: 'center',
- formatter: (row) => {
- if (row.sampleQualifiedNumber) {
- return (
- row.sampleQualifiedNumber + (this.form.measureUnit || '')
- );
- }
- },
- label: '样品合格数',
- showOverflowTooltip: true
- },
- {
- minWidth: 140,
- prop: 'lossNumber',
- slot: 'lossNumber',
- align: 'center',
- formatter: (row) => {
- if (row.lossNumber) {
- return row.lossNumber + (this.form.measureUnit || '');
- }
- },
- label: '损耗数(合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 140,
- prop: 'lossNumberUnqualified',
- slot: 'lossNumberUnqualified',
- align: 'center',
- formatter: (row) => {
- if (row.lossNumberUnqualified) {
- return (
- row.lossNumberUnqualified + (this.form.measureUnit || '')
- );
- }
- },
- label: '损耗数(不合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 140,
- prop: 'retainedSampleQuantity',
- slot: 'retainedSampleQuantity',
- align: 'center',
- formatter: (row) => {
- if (row.retainedSampleQuantity) {
- return (
- row.retainedSampleQuantity + (this.form.measureUnit || '')
- );
- }
- },
- label: '留样数(合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 140,
- prop: 'retainedSampleUnqualified',
- slot: 'retainedSampleUnqualified',
- align: 'center',
- formatter: (row) => {
- if (row.retainedSampleUnqualified) {
- return (
- row.retainedSampleUnqualified + (this.form.measureUnit || '')
- );
- }
- },
- label: '留样数(不合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'hours',
- slot: 'hours',
- align: 'center',
- label: '工时',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'accessory',
- slot: 'accessory',
- align: 'center',
- label: '附件',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'qualityNames',
- slot: 'qualityNames',
- align: 'center',
- label: '检测人',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'qualityTimeEnd',
- slot: 'qualityTimeEnd',
- align: 'center',
- label: '检测时间',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'craftFiles',
- slot: 'craftFiles',
- align: 'center',
- label: '工艺文件',
- fixed: 'right',
- showOverflowTooltip: true
- }
- ],
- qualityResultsList: [
- {
- value: 1,
- label: '合格'
- },
- {
- value: 2,
- label: '不合格'
- },
- {
- value: 3,
- label: '让步接收'
- }
- ],
- sList: [] //质检工具筛选
- };
- },
- computed: {
- tableColumns() {
- return [
- {
- width: 45,
- type: 'index',
- columnKey: 'index',
- align: 'center',
- fixed: 'left'
- },
- {
- minWidth: 150,
- prop: 'qualitySchemeTemplateCode',
- align: 'center',
- label: '检测方案编码',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'qualitySchemeTemplateName',
- align: 'center',
- label: '检测方案名称',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'categoryLevelClassName',
- align: 'center',
- label: '检测类型',
- showOverflowTooltip: true
- },
- {
- minWidth: 130,
- prop: 'inspectionCode',
- align: 'center',
- label: '检测项编码',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'inspectionName',
- slot: 'inspectionName',
- align: 'center',
- label: '检测项名称',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'qualityStandardType',
- slot: 'qualityStandardType',
- align: 'center',
- label: '执行标准',
- showOverflowTooltip: true
- },
- {
- minWidth: 320,
- slot: 'defaultValue',
- prop: 'defaultValue',
- align: 'center',
- label: '工艺参数',
- showOverflowTooltip: true
- },
- {
- minWidth: 130,
- prop: 'executionMethod',
- slot: 'executionMethod',
- align: 'center',
- label: '执行方法',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'useTools',
- slot: 'useTools',
- align: 'center',
- label: '检测工具',
- showOverflowTooltip: true
- },
- {
- minWidth: 200,
- prop: 'qualityResultContent',
- align: 'center',
- slot: 'qualityResultContent',
- headerSlot: this.qms_qualityResultContent == 1 ? 'isRequired' : '',
- label: '检测内容',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'sampleQuantity',
- slot: 'sampleQuantity',
- headerSlot: 'isRequired',
- align: 'center',
- label: '样品数',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'qualifiedQuantity',
- align: 'center',
- slot: 'qualifiedQuantity',
- label: '合格数',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'noQualifiedQuantity',
- slot: 'noQualifiedQuantity',
- align: 'center',
- label: '不合格数',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'lossNumber',
- slot: 'lossNumber',
- align: 'center',
- label: '损耗数(合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'lossNumberUnqualified',
- slot: 'lossNumberUnqualified',
- align: 'center',
- label: '损耗数(不合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'retainedSampleQuantity',
- slot: 'retainedSampleQuantity',
- align: 'center',
- label: '留样数(合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 180,
- prop: 'retainedSampleUnqualified',
- slot: 'retainedSampleUnqualified',
- align: 'center',
- label: '留样数(不合格品)',
- showOverflowTooltip: true
- },
- {
- minWidth: 130,
- prop: 'qualityResults',
- slot: 'qualityResults',
- align: 'center',
- label: '检测结果',
- showOverflowTooltip: true,
- fixed: 'right'
- },
- {
- minWidth: 150,
- prop: 'experimentCode',
- align: 'center',
- label: '实验编号',
- showOverflowTooltip: true
- },
- {
- minWidth: 120,
- prop: 'inspectImage',
- slot: 'inspectImage',
- align: 'center',
- label: '检验图片',
- showOverflowTooltip: true
- },
- {
- minWidth: 100,
- prop: 'imgUrl',
- slot: 'imgUrl',
- align: 'center',
- label: '附件',
- showOverflowTooltip: true
- },
- {
- columnKey: 'action',
- label: '操作',
- width: 120,
- align: 'center',
- resizable: false,
- slot: 'action',
- showOverflowTooltip: true,
- fixed: 'right'
- }
- ];
- },
- getSampleQuantityCount() {
- return this.form.sampleQuantity;
- }
- },
- created() {
- this.requestDict('质检计划类型');
- this.requestDict('取样类型');
- this.requestDict('质检标准类型');
- parameterGetByCode({
- code: 'qms_qualityResultContent'
- }).then((res) => {
- this.qms_qualityResultContent = res?.value;
- });
- },
- methods: {
- async craftFiles(row) {
- const res = await parameterGetByCode({
- code: 'mes_craft_file_by_category_code'
- });
- const byCategory = res?.value === '1';
- if (byCategory) {
- this.$refs.wokePopupRef.openTwo(row);
- } else {
- const data = row.qualityWorkOrderId
- ? await craftFiles(row.qualityWorkOrderId)
- : await mesCraftFiles({
- taskId: row.produceTaskId,
- workOrderId: row.mesWorkOrderId,
- productCode: row.productCode
- });
- this.$refs.wokePopupRef.open(data.map((item) => item.id));
- }
- },
- experimentReport(row, type) {
- this.$refs.experimentReport.open(
- {
- ...row,
- batchNo: this.form.batchNo,
- qualityWorkOrderId: this.form.qualityWorkOrderId,
- getSampleQuantityCount: this.form.sampleQuantity
- },
- type
- );
- },
- async init({ workData, list }) {
- this.tableData = [];
- this.$set(this, 'form', JSON.parse(JSON.stringify(workData)));
- this.$set(
- this.form,
- 'sampleNoQualifiedNumber',
- this.form.sampleNoQualifiedNumber || 0
- );
- this.$set(
- this.form,
- 'sampleQualifiedNumber',
- this.form.sampleQualifiedNumber ||
- this.form.sampleQuantity - this.form.sampleNoQualifiedNumber ||
- 0
- );
- this.tableData = JSON.parse(JSON.stringify(list));
- }
- }
- };
- </script>
- <style scoped lang="scss">
- ::v-deep .warn {
- color: red;
- .el-input__inner {
- color: red;
- }
- }
- </style>
|