143 lines
4.2 KiB
Vue
143 lines
4.2 KiB
Vue
<template>
|
|
<j-modal visible :title="type === 'add' ? '新增' : '编辑'" @cancel="close" @ok="submitData" :maskClosable="false"
|
|
:confirmLoading="loading">
|
|
<j-form :model="form" layout="vertical" :rules="rules" ref="formRef">
|
|
<j-form-item label="name" name="name">
|
|
<j-input placeholder="con_type" v-model:value="form.name"></j-input>
|
|
</j-form-item>
|
|
<j-form-item label="value" name="value">
|
|
<j-input placeholder="con_type" v-model:value="form.value"></j-input>
|
|
</j-form-item>
|
|
<j-form-item label="text" name="text">
|
|
<j-input placeholder="连接失败" v-model:value="form.text"></j-input>
|
|
</j-form-item>
|
|
</j-form>
|
|
</j-modal>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { isInput } from '@/utils/regular';
|
|
import type { Rule } from 'ant-design-vue/es/form';
|
|
import { saveDicItem, verifyValue } from '@/api/system/dictionary';
|
|
import { onlyMessage } from '@/utils/comm';
|
|
import { validateValueType } from '@/views/device/components/Metadata/Base/Edit/validator';
|
|
import { cloneDeep } from 'lodash-es';
|
|
const props = defineProps({
|
|
type: {
|
|
type: String,
|
|
default: 'add'
|
|
},
|
|
dicId: {
|
|
type: String,
|
|
default: ''
|
|
},
|
|
sort: {
|
|
type: Number,
|
|
default: 1
|
|
},
|
|
data: {
|
|
type: Object,
|
|
default: {}
|
|
}
|
|
})
|
|
const emit = defineEmits(['closeModal', 'refresh'])
|
|
const form: any = ref({
|
|
dictId: '',
|
|
name: '',
|
|
value: '',
|
|
text: '',
|
|
ordinal: 0,
|
|
searchCode:''
|
|
})
|
|
const lastValue = ref()
|
|
const loading = ref(false)
|
|
const formRef = ref()
|
|
/*
|
|
* 校验name
|
|
*/
|
|
const validateInput = async (_rule: Rule, value: string) => {
|
|
if (value) {
|
|
if (!isInput(value)) {
|
|
return Promise.reject('请输入英文或者数字或者-或者_');
|
|
}
|
|
} else {
|
|
return Promise.resolve();
|
|
}
|
|
};
|
|
/**
|
|
* 校验value唯一
|
|
*/
|
|
const validateValue = async (_rule: Rule, value: string) => {
|
|
if (value && lastValue.value !== value) {
|
|
const res:any = await verifyValue({
|
|
terms: [
|
|
{
|
|
terms: [
|
|
{
|
|
value: value,
|
|
termType: "eq",
|
|
column: "value"
|
|
},
|
|
{
|
|
value: form.value.dictId,
|
|
termType: "eq",
|
|
column: "dictId"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
})
|
|
if (res.status === 200 && res.result) {
|
|
return Promise.reject('value重复');
|
|
} else {
|
|
return Promise.resolve();
|
|
}
|
|
} else {
|
|
return Promise.resolve();
|
|
}
|
|
}
|
|
const rules = {
|
|
name: [
|
|
{ required: true, message: '请输入name' },
|
|
{ validator: validateInput, trigger: 'change' },
|
|
{ max: 64, message: '最多可输入64位字符', trigger: 'change' },
|
|
],
|
|
value: [
|
|
{ required: true, message: '请输入value', trigger: 'blur' },
|
|
{ max: 64, message: '最多可输入64位字符', trigger: 'change' },
|
|
{ validator: validateValue, trigger: 'blur' }
|
|
],
|
|
text: [
|
|
{ required: true, message: '请输入text', trigger: 'blur' },
|
|
{ max: 64, message: '最多可输入64位字符', trigger: 'change' },
|
|
]
|
|
}
|
|
const submitData = () => {
|
|
formRef.value.validate().then(async () => {
|
|
loading.value = true
|
|
form.value.searchCode = form.value.name + ':' + form.value.value + ':' + form.value.text
|
|
const res = await saveDicItem(form.value)
|
|
if (res.status === 200) {
|
|
onlyMessage('操作成功!')
|
|
emit('refresh')
|
|
} else {
|
|
onlyMessage('操作失败!', 'error')
|
|
}
|
|
loading.value = false
|
|
})
|
|
}
|
|
const close = () => {
|
|
emit('closeModal')
|
|
}
|
|
|
|
onMounted(() => {
|
|
if (props.type === 'add') {
|
|
form.value.dictId = props.dicId
|
|
form.value.ordinal = props.sort
|
|
} else {
|
|
form.value = cloneDeep(props.data)
|
|
lastValue.value = props.data.value
|
|
}
|
|
})
|
|
</script>
|
|
<style lang="less" scoped></style> |