| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563 |
- <!-- 用户编辑弹窗 -->
- <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="name">
- <el-input v-model="form.name" clearable placeholder="请输入" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="参数编码:">
- <el-input
- clearable
- disabled
- v-model="form.code"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="参数类型:" prop="paramType">
- <el-select
- v-model="form.paramType"
- placeholder="请选择"
- class="ele-block"
- style="width: 100%"
- @change="changeTextChange"
- >
- <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-option label="枚举" :value="'8'" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col
- :span="12"
- v-if="
- form.paramType == 1 || form.paramType == 4 || form.paramType == 5
- "
- >
- <el-form-item label="默认值:">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.numberOperator"
- ></DictSelection>
- <el-input
- v-model="form.defaultVal"
- :placeholder="form.paramType == '1' ? '请输入数字' : '请输入'"
- style="width: calc(100% - 100px)"
- @input="defaultInput"
- ></el-input>
- </el-form-item>
- </el-col>
- <el-col :span="24" v-if="form.paramType == 7">
- <el-form-item label="默认值:" prop="defaultVal">
- <el-input v-model="form.defaultVal" type="textarea"> </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.paramType == 2">
- <el-form-item label="默认值:" prop="defaultVal">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.numberOperator"
- ></DictSelection>
- <el-select
- v-model="form.defaultVal"
- placeholder="请选择"
- class="ele-block"
- >
- <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.paramType == 6">
- <el-form-item label="默认值:">
- <DictSelection
- style="width: 100px"
- clearable
- dictName="数学字符"
- v-model="form.numberOperator"
- ></DictSelection>
- <el-input
- v-model="form.defaultVal"
- 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.paramType == 3">
- <el-form-item label="参数上限:">
- <el-input placeholder="请输入" v-model="form.upperLimit" />
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.paramType == 3">
- <el-form-item label="参数下限:">
- <el-input placeholder="请输入" v-model="form.lowerLimit" />
- </el-form-item>
- </el-col>
- <el-col
- :span="12"
- v-if="
- form.paramType != 2 && form.paramType != 5 && form.paramType != 8
- "
- >
- <el-form-item
- label="参数单位:"
- prop="paramUnit"
- :rules="[
- {
- required: form.paramType == 7 ? false : true,
- message: '请选择参数单位',
- trigger: 'change'
- }
- ]"
- >
- <DictSelection
- dictName="工艺参数单位"
- clearable
- filterable
- v-model="form.paramUnit"
- >
- </DictSelection>
- </el-form-item>
- </el-col>
- <el-col :span="12" v-if="form.paramType == 5">
- <el-form-item label="参数单位:" prop=""> h(小时) </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="状态:" prop="enable">
- <el-select
- v-model="form.enable"
- placeholder="请选择"
- style="width: 100%"
- >
- <el-option label="停用" :value="false" />
- <el-option label="启用" :value="true" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="24">
- <el-form-item label="备注:" prop="remarks ">
- <el-input
- placeholder="请输入"
- v-model="form.remarks"
- type="textarea"
- />
- </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.tools"
- tooltip-effect="dark"
- style="width: 100%"
- stripe
- :header-cell-style="{ background: '#EEEEEE', border: 'none' }"
- >
- <el-table-column label="设备名称" prop="name" 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.model }}
- </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.notes"
- 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.sortOrder"
- 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" @click="save"> 保存 </el-button>
- </template>
- <ProductModal ref="productRefs" @chooseModal="chooseModal" />
- </ele-modal>
- </template>
- <script>
- import ProductModal from './toolModal.vue';
- export default {
- components: {
- ProductModal
- },
- props: {
- // 弹窗是否打开
- visible: Boolean,
- // 修改回显的数据
- data: Object,
- dataIndex: {
- type: Number,
- default: null
- }
- },
- data() {
- const defaultForm = {
- id: null,
- // code: '',
- name: '',
- paramType: '8',
- defaultVal: '',
- upperLimit: '',
- lowerLimit: '',
- paramUnit: '',
- enable: true,
- numberOperator: '',
- remarks: '',
- tools: [],
- notes: []
- };
- return {
- defaultForm,
- // 表单数据
- form: { ...defaultForm },
- qualityStandardList: [],
- // 表单验证规则
- rules: {
- name: [
- { required: true, message: '请输入质检名称', trigger: 'blur' }
- ],
- fillTypes: [
- { required: true, message: '请选择填写类型', trigger: 'change' }
- ],
- paramType: [
- { required: true, message: '请选择参数类型', trigger: 'change' }
- ]
- },
- // 记录类型
- recordList: [
- {
- value: '1',
- label: '工艺参数类'
- },
- {
- value: '2',
- label: '生产检查类'
- },
- {
- value: '3',
- label: '合同文档类'
- },
- {
- value: '4',
- label: '环境检查类'
- },
- {
- value: '5',
- label: '质量检验类'
- },
- {
- value: '6',
- label: '资质证照类'
- },
- {
- value: '7',
- label: '设备监测类'
- }
- ],
- // 提交状态
- loading: false,
- // 是否是修改
- isUpdate: false
- };
- },
- computed: {
- // 是否开启响应式布局
- styleResponsive() {
- return this.$store.state.theme.styleResponsive;
- },
- fillType() {
- return [
- { value: 1, label: '枚举' },
- { value: 2, label: '文本' }
- ];
- }
- },
- created() {
- this.getListFn();
- },
- methods: {
- changeTextChange() {
- this.form.numberOperator = '';
- this.form.defaultVal = '';
- this.form.upperLimit = '';
- this.form.lowerLimit = '';
- this.form.paramUnit = '';
- },
- recordChange(val) {
- let data = this.recordList.find((el) => el.value === val);
- this.form.recordName = data.label;
- },
- changeFill(val) {
- let data = this.fillType.find((el) => el.value === val);
- this.form.fillTypeName = data.label;
- },
- defaultInput(value) {
- if (this.form.paramType !== '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.defaultVal = filteredValue;
- },
- /* 保存编辑 */
- save() {
- this.$refs.form.validate((valid) => {
- if (!valid) {
- return false;
- }
- if (!this.isUpdate) {
- delete this.form.id;
- }
- const defaultVal = Number(this.form.defaultVal);
- const upperLimit = Number(this.form.upperLimit);
- const lowerLimit = Number(this.form.lowerLimit);
- if ((defaultVal != '') & (upperLimit != '')) {
- if (defaultVal > upperLimit || defaultVal == upperLimit) {
- return this.$message.warning('默认值应小于参数上限');
- }
- }
- if ((defaultVal != '') & (lowerLimit != '')) {
- if (defaultVal < lowerLimit || defaultVal == lowerLimit) {
- return this.$message.warning('默认值应大于参数下限');
- }
- }
- if ((upperLimit != '') & (lowerLimit != '')) {
- if (upperLimit < lowerLimit || upperLimit == lowerLimit) {
- return this.$message.warning('参数上限应大于参数下限');
- }
- }
- if (this.form.paramType == 5) {
- this.form.paramUnit = 'h';
- }
- let data = JSON.parse(JSON.stringify(this.form));
- this.form = {};
- this.updateVisible(false);
- this.$emit('done', data, this.dataIndex);
- });
- },
- /* 更新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.tools);
- },
- chooseModal(data) {
- console.log(data);
- let list = data.map((item) => {
- return {
- name: item.name,
- code: item.code,
- brandNumber: item.brandNum,
- model: item.modelType,
- toolId: item.categoryId
- };
- });
- this.form.tools = [...this.form.tools, ...list];
- },
- removeItem(idx, row) {
- this.$confirm(`是否删除这个设备?`).then(async () => {
- this.form.tools.splice(idx, 1);
- if (row.id) {
- this.form.toolRemoveIds.push(row.id);
- }
- });
- },
- addPostscript() {
- this.form.notes.push({ sortOrder: null, content: '' });
- },
- removePostscript(idx, row) {
- this.$confirm(`是否删除这个注意事项?`).then(async () => {
- this.form.notes.splice(idx, 1);
- if (row.id) {
- this.form.postscriptRemoveIds.push(row.id);
- }
- });
- },
- init() {}
- },
- watch: {
- async visible(visible) {
- if (visible) {
- if (this.data && this.data.name) {
- this.$util.assignObject(this.form, {
- ...this.data
- });
- this.isUpdate = true;
- } else {
- 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>
|