| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624 |
- <!-- 用户编辑弹窗 -->
- <template>
- <ele-modal
- width="1000px"
- :visible="visible"
- :append-to-body="true"
- :close-on-click-modal="false"
- custom-class="ele-dialog-form"
- :title="isUpdate ? '修改质检项' : '新建质检项'"
- @update:visible="updateVisible"
- :maxable="true"
- >
- <header-title title="基本信息"></header-title>
- <el-form ref="form" :model="form" :rules="rules" label-width="100px">
- <el-row>
- <el-col :span="12">
- <el-form-item label="标准名称:" prop="qualityStandardId">
- <el-select
- v-model="form.qualityStandardId"
- placeholder="请选择"
- filterable
- style="width: 100%"
- >
- <el-option
- :label="item.name"
- v-for="item in qualityStandardList"
- :key="item.id"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="参数编码:" prop="inspectionCode">
- <el-input
- clearable
- disabled
- v-model="form.inspectionCode"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="参数名称:" prop="inspectionName">
- <el-input
- v-model="form.inspectionName"
- clearable
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="参数类型:" prop="textType">
- <el-select
- v-model="form.textType"
- placeholder="请选择"
- class="ele-block"
- style="width: 100%"
- @change="textTypeChange"
- >
- <el-option label="数值" :value="'1'" />
- <el-option label="选择" :value="'2'" />
- <el-option label="上下限" :value="'3'" />
- <el-option label="规格" :value="'4'" />
- <el-option label="时间" :value="'5'" />
- <el-option label="范围" :value="'6'" />
- <el-option label="文本" :value="'7'" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col
- :span="12"
- v-if="
- form.textType == 1 ||
- form.textType == 3 ||
- form.textType == 4 ||
- form.textType == 5
- "
- >
- <el-form-item label="默认值:">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.symbol"
- ></DictSelection>
- <el-input
- v-model="form.defaultValue"
- :placeholder="form.textType == '1' ? '请输入数字' : '请输入'"
- style="width: calc(100% - 100px)"
- @input="defaultInput"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24" v-if="form.textType == 7">
- <el-form-item label="默认值:" prop="defaultValue">
- <el-input v-model="form.defaultValue" type="textarea"> </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType == 2">
- <el-form-item label="默认值:" prop="defaultValue">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.symbol"
- ></DictSelection>
- <el-select
- v-model="form.defaultValue"
- placeholder="请选择"
- class="ele-block"
- >
- <!-- style="width: calc(100% - 100px)" -->
- <el-option label="TRUE" :value="'TRUE'" />
- <el-option label="FALSE" :value="'FALSE'" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType == 6">
- <el-form-item label="默认值:">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.symbol"
- ></DictSelection>
- <el-input
- v-model="form.defaultValue"
- placeholder="案例: 12.7≤IC<19.05 ;IC<12.7"
- style="width: calc(100% - 100px)"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType == 3">
- <el-form-item label="参数上限:">
- <el-input placeholder="请输入" v-model="form.maxValue" />
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType == 3">
- <el-form-item label="参数下限:">
- <el-input placeholder="请输入" v-model="form.minValue" />
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType != 2 && form.textType != 5">
- <el-form-item
- label="参数单位:"
- prop="unitName"
- :rules="[
- {
- required: form.textType == 7 ? false : true,
- message: '请选择参数单位',
- trigger: 'change'
- }
- ]"
- >
- <DictSelection
- dictName="工艺参数单位"
- clearable
- filterable
- v-model="form.unitName"
- >
- </DictSelection>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.textType == 5">
- <el-form-item label="参数单位:" prop=""> h(小时) </el-form-item>
- </el-col>
- <!-- <el-col :span="24" v-if="form.textType != 7">
- <el-form-item label="文本描述:" prop="inspectionStandard">
- <el-input v-model="form.inspectionStandard" type="textarea">
- </el-input>
- </el-form-item>
- </el-col> -->
- <!-- <el-col :span="12">
- <el-form-item label="单位:" prop="unit">
- <DictSelection
- clearable
- dictName="质检项标准单位"
- v-model="form.unit"
- ></DictSelection>
- </el-form-item>
- </el-col> -->
- <el-col :span="12">
- <el-form-item label="状态:" prop="status">
- <el-select
- v-model="form.status"
- placeholder="请选择"
- style="width: 100%"
- >
- <el-option label="停用" :value="0" />
- <el-option label="启用" :value="1" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="质检阶段:" prop="qualityStage">
- <el-select
- v-model="form.qualityStage"
- placeholder="请选择"
- filterable
- style="width: 100%"
- >
- <el-option
- :label="item.label"
- v-for="item in qualityStageList"
- :key="item.value"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="备注:" prop="inspectionRemark">
- <el-input
- placeholder="请输入"
- v-model="form.inspectionRemark"
- type="textarea"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="附件:" prop="imgUrl">
- <fileUpload v-model="form.imgUrl" type="add" />
- </el-form-item>
- </el-col>
- </el-row>
- <headerTitle title="质检工具">
- <el-button type="primary" size="small" @click="handleAdd"
- >新增</el-button
- >
- </headerTitle>
- <el-table
- ref="multipleTable"
- :data="form.toolList"
- tooltip-effect="dark"
- style="width: 100%"
- stripe
- :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
- >
- <el-table-column label="设备名称" prop="code" min-width="120">
- <template slot-scope="{ row }">
- {{ row.name }}
- </template></el-table-column
- >
- <el-table-column label="设备编码" prop="code" min-width="120">
- <template slot-scope="{ row }">
- {{ row.code }}
- </template></el-table-column
- >
- <el-table-column label="牌号" prop="brandNum" min-width="120">
- <template slot-scope="{ row }">
- {{ row.brandNum }}
- </template></el-table-column
- >
- <el-table-column label="型号" prop="modelType" min-width="120">
- <template slot-scope="{ row }">
- {{ row.modelType }}
- </template></el-table-column
- >
- <el-table-column label="操作" fixed="right">
- <template slot-scope="{ $index, row }">
- <el-button type="text" @click="removeItem($index, row)"
- >删除设备</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- <headerTitle title="注意事项">
- <el-button type="primary" size="small" @click="addPostscript"
- >新增</el-button
- >
- </headerTitle>
- <el-table
- ref="multipleTable"
- :data="form.postscriptList"
- tooltip-effect="dark"
- style="width: 100%"
- stripe
- :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
- >
- <el-table-column label="排序" prop="" width="140">
- <template slot-scope="{ row }">
- <el-input
- placeholder="请输入"
- type="number"
- v-model.number="row.sort"
- clearable
- ></el-input> </template
- ></el-table-column>
- <el-table-column label="注意事项" prop="" min-width="120">
- <template slot-scope="{ row }">
- <el-input
- placeholder="请输入"
- type="textarea"
- :rows="1"
- v-model="row.content"
- clearable
- ></el-input> </template
- ></el-table-column>
- <el-table-column label="操作" fixed="right" width="100">
- <template slot-scope="{ $index, row }">
- <el-button type="text" @click="removePostscript($index, row)"
- >删除</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- </el-form>
- <template v-slot:footer>
- <el-button @click="updateVisible(false)">取消</el-button>
- <el-button type="primary" :loading="loading" @click="save">
- 保存
- </el-button>
- </template>
- <ProductModal ref="productRefs" @chooseModal="chooseModal" />
- </ele-modal>
- </template>
- <script>
- import { save, update, getById } from '@/api/inspectionProject';
- import { getCode } from '@/api/login';
- import { getList } from '@/api/inspectionStandard';
- import ProductModal from './ProductModal.vue';
- import fileUpload from '@/components/addDoc/index.vue';
- export default {
- components: {
- ProductModal,
- fileUpload
- },
- props: {
- // 弹窗是否打开
- visible: Boolean,
- // 修改回显的数据
- data: Object
- },
- data() {
- const defaultForm = {
- id: null,
- qualityStandardId: '',
- inspectionCode: '',
- inspectionName: '',
- textType: '1',
- qualityStage: '',
- defaultValue: '',
- maxValue: '',
- minValue: '',
- unitName: '',
- status: 1,
- inspectionStandard: '',
- unit: '',
- symbol: '',
- inspectionRemark: '',
- imgUrl: [],
- toolList: [],
- postscriptList: [],
- toolRemoveIds: [],
- postscriptRemoveIds: []
- };
- return {
- defaultForm,
- // 表单数据
- form: { ...defaultForm },
- qualityStandardList: [],
- // 表单验证规则
- rules: {
- qualityStandardId: [
- { required: true, message: '请选择质检标准', trigger: 'blur' }
- ],
- inspectionName: [
- { required: true, message: '请输入质检名称', trigger: 'blur' }
- ],
- inspectionCode: [
- { required: true, message: '请输入质检编码', trigger: 'blur' }
- ],
- // unitName:
- textType: [
- { required: true, message: '请选择参数类型', trigger: 'blur' }
- ],
- inspectionStandard: [
- {
- required: true,
- message: '请输入',
- trigger: 'blur'
- }
- ]
- },
- // 提交状态
- loading: false,
- // 是否是修改
- isUpdate: false
- };
- },
- computed: {
- // 是否开启响应式布局
- styleResponsive() {
- return this.$store.state.theme.styleResponsive;
- },
- qualityStageList() {
- return [
- { value: 1, label: 'FAI' },
- { value: 2, label: 'IQC' },
- { value: 3, label: 'FQC' },
- { value: 4, label: 'OQC' }
- ];
- }
- },
- created() {
- this.getListFn();
- },
- methods: {
- textTypeChange() {
- this.form.maxValue = '';
- this.form.minValue = '';
- },
- defaultInput(value) {
- console.log(this.form.symbol, '0000 symbol');
- if (this.form.textType !== '1') {
- return;
- }
- // 1. 过滤非法字符(只保留数字、负号和小数点)
- let filteredValue = value.replace(/[^0-9.-]/g, '');
- // 2. 处理负号规则
- const minusIndex = filteredValue.indexOf('-');
- if (minusIndex > 0) {
- // 负号不在首位则删除所有负号
- filteredValue = filteredValue.replace(/-/g, '');
- } else if (minusIndex === 0) {
- // 保留首位的负号并移除其他负号
- filteredValue = '-' + filteredValue.substring(1).replace(/-/g, '');
- }
- // 3. 处理小数点规则
- const dotIndex = filteredValue.indexOf('.');
- if (dotIndex !== -1) {
- // 只保留第一个小数点,移除后续小数点
- const parts = filteredValue.split('.');
- filteredValue = parts[0] + '.' + parts.slice(1).join('');
- }
- // 4. 更新绑定值
- this.form.defaultValue = filteredValue;
- },
- /* 保存编辑 */
- save() {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- return false;
- }
- this.loading = true;
- if (!this.isUpdate) {
- delete this.form.id;
- }
- const saveOrUpdate = this.isUpdate ? update : save;
- const defaultValue = Number(this.form.defaultValue);
- const maxValue = Number(this.form.maxValue);
- const minValue = Number(this.form.minValue);
- if ((defaultValue != '') & (maxValue != '')) {
- if (defaultValue > maxValue || defaultValue == maxValue) {
- this.loading = false;
- return this.$message.warning('默认值应小于参数上限');
- }
- }
- if ((defaultValue != '') & (minValue != '')) {
- if (defaultValue < minValue || defaultValue == minValue) {
- this.loading = false;
- return this.$message.warning('默认值应大于参数下限');
- }
- }
- if ((maxValue != '') & (minValue != '')) {
- if (maxValue < minValue || maxValue == minValue) {
- this.loading = false;
- return this.$message.warning('参数上限应大于参数下限');
- }
- }
- if (this.form.textType == 5) {
- this.form.unitName = 'h';
- }
- saveOrUpdate(this.form)
- .then((msg) => {
- this.loading = false;
- this.form = {};
- const info = this.isUpdate ? '修改成功' : '新增成功';
- this.$message.success(info);
- this.updateVisible(false);
- this.$emit('done');
- })
- .catch((e) => {
- this.loading = false;
- });
- });
- },
- /* 更新visible */
- updateVisible(value) {
- this.$emit('update:visible', value);
- },
- getListFn() {
- let param = {
- pageNum: 1,
- size: -1
- };
- getList(param).then((res) => {
- this.qualityStandardList = res.list;
- });
- },
- handleAdd() {
- this.$refs.productRefs.open(this.form.toolList);
- },
- chooseModal(data) {
- this.form.toolList = [...this.form.toolList, ...data];
- },
- removeItem(idx, row) {
- this.$confirm(`是否删除这个设备?`).then(async () => {
- this.form.toolList.splice(idx, 1);
- if (row.id) {
- this.form.toolRemoveIds.push(row.id);
- }
- });
- },
- addPostscript() {
- this.form.postscriptList.push({ sort: null, content: '' });
- },
- removePostscript(idx, row) {
- this.$confirm(`是否删除这个注意事项?`).then(async () => {
- this.form.postscriptList.splice(idx, 1);
- if (row.id) {
- this.form.postscriptRemoveIds.push(row.id);
- }
- });
- }
- },
- watch: {
- async visible(visible) {
- if (visible) {
- if (this.data) {
- const res = await getById(this.data.id);
- this.$util.assignObject(this.form, {
- ...res.data
- });
- this.isUpdate = true;
- } else {
- const code = await getCode('inspection_code');
- this.form.inspectionCode = code;
- this.isUpdate = false;
- }
- } else {
- this.$refs.form.clearValidate();
- this.form = { ...this.defaultForm };
- }
- }
- }
- };
- </script>
- <style lang="scss" scoped>
- .btn_case {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin: 6px 0;
- span {
- display: inline-block;
- margin: 0 10px;
- font-size: 18px;
- cursor: pointer;
- }
- }
- ::v-deep .el-form-item__content {
- display: flex !important;
- }
- </style>
|