|
|
@ -1,35 +1,81 @@ |
|
|
|
<template> |
|
|
|
<el-dialog width="500px" append-to-body :title="isShow?'查看数据标准':isEdit ? '修改数据标准' : '新增数据标准'" v-model="visible" @close="handleClose"> |
|
|
|
<el-form :model="formData" ref="formRef" label-width="120px" :rules="formRules"> |
|
|
|
|
|
|
|
|
|
|
|
<el-dialog |
|
|
|
width="500px" |
|
|
|
append-to-body |
|
|
|
:title="isShow ? '查看数据标准' : isEdit ? '修改数据标准' : '新增数据标准'" |
|
|
|
v-model="visible" |
|
|
|
@close="handleClose" |
|
|
|
> |
|
|
|
<el-form |
|
|
|
:model="formData" |
|
|
|
ref="formRef" |
|
|
|
label-width="120px" |
|
|
|
:rules="formRules" |
|
|
|
> |
|
|
|
<el-form-item label="标准编号" prop="dataStdNo"> |
|
|
|
<el-input v-model="formData.dataStdNo" :disabled="isEdit" placeholder="请输入标准编号" clearable /> |
|
|
|
<el-input |
|
|
|
v-model="formData.dataStdNo" |
|
|
|
:disabled="isEdit || isShow" |
|
|
|
placeholder="请输入标准编号" |
|
|
|
clearable |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="标准中文名" prop="dataStdCnName"> |
|
|
|
<el-input v-model="formData.dataStdCnName" placeholder="请输入标准中文名" clearable /> |
|
|
|
<el-input |
|
|
|
v-model="formData.dataStdCnName" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请输入标准中文名" |
|
|
|
clearable |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="标准英文名" prop="dataStdNo"> |
|
|
|
<el-input v-model="formData.dataStdNo" placeholder="请输入标准英文名" clearable /> |
|
|
|
|
|
|
|
<el-form-item label="标准英文名" prop="dataStdEngName"> |
|
|
|
<el-input |
|
|
|
v-model="formData.dataStdEngName" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请输入标准英文名" |
|
|
|
clearable |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="标准业务定义" prop="dataStdBusiDefn"> |
|
|
|
<el-input v-model="formData.dataStdBusiDefn" placeholder="请输入标准业务定义" clearable /> |
|
|
|
<el-input |
|
|
|
v-model="formData.dataStdBusiDefn" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请输入标准业务定义" |
|
|
|
clearable |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="标准类型" prop="dataStdType"> |
|
|
|
<el-select v-model="formData.dataStdType" placeholder="请输入标准类型"> |
|
|
|
<el-select |
|
|
|
v-model="formData.dataStdType" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择标准类型" |
|
|
|
> |
|
|
|
<el-option label="基础数据" value="0" /> |
|
|
|
<el-option label="指标数据" value="1" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="标准来源" prop="stdSrc"> |
|
|
|
<el-select v-model="formData.stdSrc" placeholder="请选择标准来源"> |
|
|
|
|
|
|
|
<el-form-item label="标准来源" prop="dataStdSrc"> |
|
|
|
<el-select |
|
|
|
v-model="formData.dataStdSrc" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择标准来源" |
|
|
|
> |
|
|
|
<el-option label="行业标准" value="行业标准" /> |
|
|
|
<el-option label="自建标准" value="自建标准" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="数据类别" prop="dataClas"> |
|
|
|
<el-select v-model="formData.dataClas" placeholder="请选择数据类别"> |
|
|
|
<el-select |
|
|
|
v-model="formData.dataClas" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择数据类别" |
|
|
|
> |
|
|
|
<el-option label="日期类" value="日期类" /> |
|
|
|
<el-option label="文本类" value="文本类" /> |
|
|
|
<el-option label="数值类" value="数值类" /> |
|
|
@ -39,86 +85,106 @@ |
|
|
|
<el-option label="码值类" value="码值类" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="来源系统" prop="srcSys"> |
|
|
|
<el-select |
|
|
|
v-model="formData.sourceSystem" |
|
|
|
v-model="formData.srcSys" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择来源系统" |
|
|
|
maxlength="30" |
|
|
|
@change="dataChange" |
|
|
|
@change="handleSystemChange" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="dict in dbResourceOldList" |
|
|
|
:key="dict.id" |
|
|
|
:label="dict.name" |
|
|
|
:value="dict.name" |
|
|
|
></el-option> |
|
|
|
:value="dict.id" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="安全等级" prop="securityLevel"> |
|
|
|
<el-select v-model="formData.securityLevel" placeholder="请选择安全等级"> |
|
|
|
<el-option label="1" value="1" /> |
|
|
|
<el-option label="2" value="2" /> |
|
|
|
<el-option label="3" value="3" /> |
|
|
|
<el-option label="4" value="4" /> |
|
|
|
<el-select |
|
|
|
v-model="formData.securityLevel" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择安全等级" |
|
|
|
> |
|
|
|
<el-option label="1级" value="1" /> |
|
|
|
<el-option label="2级" value="2" /> |
|
|
|
<el-option label="3级" value="3" /> |
|
|
|
<el-option label="4级" value="4" /> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="代码编号" prop="cdNo"> |
|
|
|
|
|
|
|
<el-form-item label="代码编号" prop="cdId"> |
|
|
|
<el-input |
|
|
|
v-model="formData.cdNo" |
|
|
|
placeholder="请输入代码编号" |
|
|
|
placeholder="代码编号" |
|
|
|
clearable |
|
|
|
style="width: 80%;" |
|
|
|
:disabled="true" |
|
|
|
/> |
|
|
|
<el-button |
|
|
|
|
|
|
|
icon="Edit" |
|
|
|
:disabled="single" |
|
|
|
:disabled="isShow" |
|
|
|
@click="codeVisible = true" |
|
|
|
style="margin-left: 5px;" |
|
|
|
v-hasPermi="['meta:metaSecurityCol:edit']" |
|
|
|
></el-button> |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="业务认责部门" prop="dataStdBusiOwnershipDept"> |
|
|
|
<el-tree-select |
|
|
|
v-model="formData.dataStdBusiOwnershipDept" |
|
|
|
:data="deptOptions" |
|
|
|
:props="{ value: 'id', label: 'label', children: 'children' }" |
|
|
|
:props="{ value: 'label', label: 'label', children: 'children' }" |
|
|
|
value-key="id" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择业务认责部门" |
|
|
|
check-strictly /> |
|
|
|
check-strictly |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="业务认责人员" prop="dataStdBusiOwnershipPrsn"> |
|
|
|
<el-select v-model="formData.dataStdBusiOwnershipPrsn" placeholder="请选择业务认责人员"> |
|
|
|
<el-select |
|
|
|
v-model="formData.dataStdBusiOwnershipPrsn" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择业务认责人员" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="dict in userList" |
|
|
|
:key="dict.id" |
|
|
|
:label="dict.userName" |
|
|
|
:value="dict.userName" |
|
|
|
></el-option> |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="技术认责部门" prop="dataStdItOwnershipDept"> |
|
|
|
<el-tree-select |
|
|
|
v-model="formData.dataStdItOwnershipDept" |
|
|
|
:data="deptOptions" |
|
|
|
:props="{ value: 'id', label: 'label', children: 'children' }" |
|
|
|
:props="{ value: 'label', label: 'label', children: 'children' }" |
|
|
|
value-key="id" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择技术认责部门" |
|
|
|
check-strictly /> |
|
|
|
check-strictly |
|
|
|
/> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item label="技术认责人员" prop="dataStdItOwnershipPrsn"> |
|
|
|
<el-select v-model="formData.dataStdItOwnershipPrsn" placeholder="技术认责人员"> |
|
|
|
<el-select |
|
|
|
v-model="formData.dataStdItOwnershipPrsn" |
|
|
|
:disabled="isShow" |
|
|
|
placeholder="请选择技术认责人员" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="dict in userList" |
|
|
|
:key="dict.id" |
|
|
|
:label="dict.userName" |
|
|
|
:value="dict.userName" |
|
|
|
></el-option> |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<!-- 底部按钮区域 --> |
|
|
|
<el-row justify="center" style="margin-top: 20px;" v-if="!isShow"> |
|
|
|
<el-col :span="4" style="padding-right: 10px;"> |
|
|
|
<el-button @click="handleClose" style="width: 100%" plain>取消</el-button> |
|
|
@ -127,155 +193,152 @@ |
|
|
|
<el-button type="primary" @click="handleSubmit" style="width: 100%">保存</el-button> |
|
|
|
</el-col> |
|
|
|
</el-row> |
|
|
|
|
|
|
|
|
|
|
|
</el-form> |
|
|
|
<el-dialog title="选择代码" v-model="codeVisible" width="1000px"> |
|
|
|
<!-- 引入第二个页面组件 --> |
|
|
|
|
|
|
|
<el-dialog title="选择代码" v-model="codeVisible" width="1000px" append-to-body> |
|
|
|
<code-components ref="showCodeDialog" v-if="codeVisible" /> |
|
|
|
<template #footer > |
|
|
|
<el-button |
|
|
|
@click="codeCancel">取消</el-button> |
|
|
|
<el-button |
|
|
|
type="primary" @click="codeSave">确定</el-button> |
|
|
|
<template #footer> |
|
|
|
<el-button @click="codeVisible = false">取消</el-button> |
|
|
|
<el-button type="primary" @click="handleCodeSelect">确定</el-button> |
|
|
|
</template> |
|
|
|
</el-dialog> |
|
|
|
</el-dialog> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script setup> |
|
|
|
import { ref, watch } from 'vue'; |
|
|
|
import { updateStdMain, addStdMain } from '@/api/datastd/std'; // 确保接口存在 |
|
|
|
import { listUser, deptTreeSelect } from "@/api/system/user"; |
|
|
|
import codeComponents from '../../stdcode/codeComponents.vue'; |
|
|
|
import { ref, watch, computed } from 'vue' |
|
|
|
import { ElMessage } from 'element-plus' |
|
|
|
import { updateStdMain, addStdMain } from '@/api/datastd/std' |
|
|
|
import { listUser, deptTreeSelect } from "@/api/system/user" |
|
|
|
import codeComponents from '../../stdcode/codeComponents.vue' |
|
|
|
|
|
|
|
const { proxy } = getCurrentInstance(); |
|
|
|
const { std_code_status,std_code_appr } = proxy.useDict("std_code_status","std_code_appr"); |
|
|
|
const { proxy } = getCurrentInstance() |
|
|
|
const emit = defineEmits(['update:visible', 'refresh']) |
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
data: { |
|
|
|
type: Object, |
|
|
|
required: false, |
|
|
|
}, |
|
|
|
isEdit: { |
|
|
|
type: Boolean, |
|
|
|
}, |
|
|
|
isShow: { |
|
|
|
type: Boolean, |
|
|
|
default:false |
|
|
|
}, |
|
|
|
dbResourceOldList: { |
|
|
|
type: Object, |
|
|
|
}, |
|
|
|
visible: { |
|
|
|
type: Boolean, |
|
|
|
}, |
|
|
|
dbResourceOldList: { |
|
|
|
type: Object, |
|
|
|
}, |
|
|
|
}); |
|
|
|
|
|
|
|
// 定义表单校验规则 |
|
|
|
data: { type: Object, default: () => ({}) }, |
|
|
|
isEdit: { type: Boolean, default: false }, |
|
|
|
isShow: { type: Boolean, default: false }, |
|
|
|
visible: { type: Boolean, required: true }, |
|
|
|
dbResourceOldList: { type: Array, default: () => [] } |
|
|
|
}) |
|
|
|
|
|
|
|
// 表单数据(完整映射所有数据库字段) |
|
|
|
|
|
|
|
const formData = ref({ ...props.data }); |
|
|
|
|
|
|
|
// 初始化表单数据 |
|
|
|
watch(() => props.data, (newVal) => { |
|
|
|
if (newVal) { |
|
|
|
formData.value=props.data |
|
|
|
} |
|
|
|
}, { immediate: true }) |
|
|
|
|
|
|
|
// 表单验证规则 |
|
|
|
const formRules = ref({ |
|
|
|
dataStdNo: [{ required: true, message: '请输入标准编号', trigger: 'blur' }], |
|
|
|
dataStdCnName: [{ required: true, message: '请输入标准中文名', trigger: 'blur' }], |
|
|
|
dataStdType: [{ required: true, message: '请选择标准类型', trigger: 'change' }], |
|
|
|
stdSrc: [{ required: true, message: '请选择标准来源', trigger: 'change' }], |
|
|
|
dataStdSrc: [{ required: true, message: '请选择标准来源', trigger: 'change' }], |
|
|
|
dataClas: [{ required: true, message: '请选择数据类别', trigger: 'change' }], |
|
|
|
dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'blur' }], |
|
|
|
dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'blur' }], |
|
|
|
dataStdBusiOwnershipPrsn: [{ required: true, message: '请输入业务认责人', trigger: 'blur' }], |
|
|
|
dataStdItOwnershipPrsn: [{ required: true, message: '请输入技术认责人', trigger: 'blur' }], |
|
|
|
}); |
|
|
|
const codeCancel = () => { |
|
|
|
codeVisible.value = false; |
|
|
|
}; |
|
|
|
const codeSave = () => { |
|
|
|
const child = proxy.$refs.showCodeDialog; |
|
|
|
const mapList=child.selections |
|
|
|
if(mapList.length!=1){ |
|
|
|
proxy.$modal.msgWarning("请选择一条代码进行映射"); |
|
|
|
|
|
|
|
}else{ |
|
|
|
const mapCodeItem=child.selections[0] |
|
|
|
|
|
|
|
formData.value.cdNo=mapCodeItem.cdNo |
|
|
|
formData.value.codeId=mapCodeItem.id |
|
|
|
dataStdBusiOwnershipDept: [{ required: true, message: '请选择业务认责部门', trigger: 'change' }], |
|
|
|
dataStdItOwnershipDept: [{ required: true, message: '请选择技术认责部门', trigger: 'change' }] |
|
|
|
}) |
|
|
|
|
|
|
|
codeVisible.value = false; |
|
|
|
// 组件状态 |
|
|
|
const visible = computed({ |
|
|
|
get: () => props.visible, |
|
|
|
set: (val) => emit('update:visible', val) |
|
|
|
}) |
|
|
|
const codeVisible = ref(false) |
|
|
|
const deptOptions = ref([]) |
|
|
|
const userList = ref([]) |
|
|
|
|
|
|
|
proxy.$modal.msgSuccess("代码引用成功"); |
|
|
|
|
|
|
|
}}; |
|
|
|
// 初始化部门树和用户列表 |
|
|
|
const initData = async () => { |
|
|
|
try { |
|
|
|
const [deptRes, userRes] = await Promise.all([ |
|
|
|
deptTreeSelect(), |
|
|
|
listUser({ pageSize: 1000, pageNum: 1 }) |
|
|
|
]) |
|
|
|
deptOptions.value = deptRes.data |
|
|
|
userList.value = userRes.rows |
|
|
|
} catch (error) { |
|
|
|
ElMessage.error('初始化数据失败') |
|
|
|
console.error(error) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const showSys = ref(false); |
|
|
|
const codeVisible = ref(false); |
|
|
|
const emit = defineEmits(['update:visible', 'refresh']); |
|
|
|
const userList = ref([]); |
|
|
|
const formData = ref({ ...props.data }); |
|
|
|
const visible = ref(props.visible); // 使用 prop 传入的 visible |
|
|
|
function dataChange(data) { |
|
|
|
// 从 dbResourceOldList 中查找对应的 name |
|
|
|
const selectedItem = props.dbResourceOldList.find(item => item.id === data); |
|
|
|
if (selectedItem) { |
|
|
|
// 如果找到对应的项,将 name 赋值给 formData.value.dbRName |
|
|
|
formData.value.sysName = selectedItem.name; |
|
|
|
} else { |
|
|
|
// 如果未找到,清空 formData.value.dbRName |
|
|
|
formData.value.sysName = ''; |
|
|
|
// 系统选择变化处理 |
|
|
|
const handleSystemChange = (id) => { |
|
|
|
const system = props.dbResourceOldList.find(item => item.id === id) |
|
|
|
if (system) { |
|
|
|
formData.value.sysName = system.name |
|
|
|
} |
|
|
|
} |
|
|
|
// 监听 props.visible 的变化,确保同步到 local visible |
|
|
|
watch(() => props.visible, (newVal) => { |
|
|
|
visible.value = newVal; |
|
|
|
formData.value = { ...props.data } |
|
|
|
}); |
|
|
|
|
|
|
|
function getList() { |
|
|
|
listUser({pageSize:1000,pageNum:1}).then(res => { |
|
|
|
userList.value = res.rows; |
|
|
|
}); |
|
|
|
}; |
|
|
|
const handleClose = () => { |
|
|
|
emit('update:visible', false); // 关闭弹框 |
|
|
|
}; |
|
|
|
const deptOptions = ref(undefined); |
|
|
|
|
|
|
|
function getDeptTree() { |
|
|
|
deptTreeSelect().then(response => { |
|
|
|
deptOptions.value = response.data; |
|
|
|
}); |
|
|
|
}; |
|
|
|
function changeCodeType(data) { |
|
|
|
if (data != "company") { |
|
|
|
showSys.value = true; |
|
|
|
formData.value.sysName = ""; |
|
|
|
formData.value.sysId = undefined; |
|
|
|
} else { |
|
|
|
showSys.value = false; |
|
|
|
formData.value.sysName = "公司级"; |
|
|
|
formData.value.sysId = 10000; |
|
|
|
// 代码选择处理 |
|
|
|
const handleCodeSelect = () => { |
|
|
|
const selectedCodes = proxy.$refs.showCodeDialog?.selections || [] |
|
|
|
if (selectedCodes.length !== 1) { |
|
|
|
ElMessage.warning('请选择一条代码') |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
const code = selectedCodes[0] |
|
|
|
formData.value.cdId = code.onum |
|
|
|
formData.value.cdNo = code.cdNo || code.onum |
|
|
|
codeVisible.value = false |
|
|
|
ElMessage.success('代码选择成功') |
|
|
|
} |
|
|
|
getDeptTree(); |
|
|
|
getList(); |
|
|
|
|
|
|
|
// 表单提交 |
|
|
|
const handleSubmit = () => { |
|
|
|
const formRef = proxy.$refs.formRef; |
|
|
|
formRef.validate((valid) => { |
|
|
|
if (valid) { |
|
|
|
const apiCall = props.isEdit ? updateStdMain(formData.value) : addStdMain(formData.value); |
|
|
|
apiCall |
|
|
|
.then((response) => { |
|
|
|
if (response.success) { |
|
|
|
proxy.$refs.formRef.validate(async (valid) => { |
|
|
|
if (!valid) return; |
|
|
|
|
|
|
|
try { |
|
|
|
// 直接使用驼峰命名的表单数据,不进行下划线转换 |
|
|
|
const submitData = { ...formData.value }; |
|
|
|
|
|
|
|
// 处理特殊字段类型转换 |
|
|
|
submitData.srcSys = Number(submitData.srcSys) || null; |
|
|
|
submitData.beltDataStdContent = Number(submitData.beltDataStdContent) || null; |
|
|
|
|
|
|
|
// 确保必填字段有值(特别是技术认责人员和业务认责人员) |
|
|
|
submitData.dataStdItOwnershipPrsn = submitData.dataStdItOwnershipPrsn || ''; |
|
|
|
submitData.dataStdBusiOwnershipPrsn = submitData.dataStdBusiOwnershipPrsn || ''; |
|
|
|
|
|
|
|
// 根据模式调用API |
|
|
|
const api = props.isEdit ? updateStdMain : addStdMain; |
|
|
|
const res = await api(submitData); |
|
|
|
|
|
|
|
if (res.code === 200) { |
|
|
|
ElMessage.success(props.isEdit ? '修改成功' : '新增成功'); |
|
|
|
emit('refresh'); |
|
|
|
handleClose(); |
|
|
|
} else { |
|
|
|
proxy.$message.error(response.data || '操作失败,请稍后重试'); |
|
|
|
ElMessage.error(res.msg || '操作失败'); |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.error('提交失败:', error); |
|
|
|
ElMessage.error(`请求失败: ${error.message}`); |
|
|
|
|
|
|
|
// 特定错误处理(如数据库约束错误) |
|
|
|
if (error.message.includes('cannot be null')) { |
|
|
|
const column = error.message.match(/Column '(.*?)'/)[1]; |
|
|
|
ElMessage.warning(`字段 ${column} 不能为空`); |
|
|
|
} |
|
|
|
}) |
|
|
|
} else { |
|
|
|
console.log('表单验证失败'); |
|
|
|
return false; |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
// 关闭弹窗 |
|
|
|
const handleClose = () => { |
|
|
|
proxy.$refs.formRef.resetFields() |
|
|
|
visible.value = false |
|
|
|
} |
|
|
|
|
|
|
|
// 初始化 |
|
|
|
initData() |
|
|
|
</script> |