|
@@ -39,6 +39,7 @@
|
|
|
check-strictly
|
|
check-strictly
|
|
|
node-key="id"
|
|
node-key="id"
|
|
|
filterable
|
|
filterable
|
|
|
|
|
+ multiple
|
|
|
placeholder="请选择soc类型"
|
|
placeholder="请选择soc类型"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -80,7 +81,8 @@ const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
const formData = ref({
|
|
const formData = ref({
|
|
|
project: undefined,
|
|
project: undefined,
|
|
|
observationDate: undefined,
|
|
observationDate: undefined,
|
|
|
- socClass: undefined,
|
|
|
|
|
|
|
+
|
|
|
|
|
+ socClass: [],
|
|
|
userName: undefined,
|
|
userName: undefined,
|
|
|
post: undefined,
|
|
post: undefined,
|
|
|
deptId: undefined,
|
|
deptId: undefined,
|
|
@@ -88,6 +90,7 @@ const formData = ref({
|
|
|
})
|
|
})
|
|
|
const formRules = reactive({
|
|
const formRules = reactive({
|
|
|
observationDate: [{ required: true, message: '观察日期不能为空', trigger: 'blur' }],
|
|
observationDate: [{ required: true, message: '观察日期不能为空', trigger: 'blur' }],
|
|
|
|
|
+
|
|
|
socClass: [{ required: true, message: 'soc类型不能为空', trigger: 'blur' }],
|
|
socClass: [{ required: true, message: 'soc类型不能为空', trigger: 'blur' }],
|
|
|
className: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }],
|
|
className: [{ required: true, message: '类型名称不能为空', trigger: 'blur' }],
|
|
|
deptId: [{ required: true, message: '队伍不能为空', trigger: 'change' }],
|
|
deptId: [{ required: true, message: '队伍不能为空', trigger: 'change' }],
|
|
@@ -102,11 +105,20 @@ const open = async (type: string, id?: number) => {
|
|
|
dialogTitle.value = t('action.' + type)
|
|
dialogTitle.value = t('action.' + type)
|
|
|
formType.value = type
|
|
formType.value = type
|
|
|
resetForm()
|
|
resetForm()
|
|
|
|
|
+ if (!socList.value.length) {
|
|
|
|
|
+ const data = await IotSocApi.getSocList({})
|
|
|
|
|
+ socList.value = handleTree(data)
|
|
|
|
|
+ }
|
|
|
// 修改时,设置数据
|
|
// 修改时,设置数据
|
|
|
if (id) {
|
|
if (id) {
|
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
|
try {
|
|
try {
|
|
|
- formData.value = await IotSocSummaryApi.getIotSocSummary(id)
|
|
|
|
|
|
|
+ const data = await IotSocSummaryApi.getIotSocSummary(id)
|
|
|
|
|
+ formData.value = {
|
|
|
|
|
+ ...data,
|
|
|
|
|
+
|
|
|
|
|
+ socClass: normalizeSocClasses(data.socClass, socList.value)
|
|
|
|
|
+ }
|
|
|
} finally {
|
|
} finally {
|
|
|
formLoading.value = false
|
|
formLoading.value = false
|
|
|
}
|
|
}
|
|
@@ -122,7 +134,12 @@ const submitForm = async () => {
|
|
|
// 提交请求
|
|
// 提交请求
|
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
|
try {
|
|
try {
|
|
|
- const data = formData.value
|
|
|
|
|
|
|
+ const data = {
|
|
|
|
|
+ ...formData.value,
|
|
|
|
|
+
|
|
|
|
|
+ socClasses: formData.value.socClass,
|
|
|
|
|
+ socClass: undefined
|
|
|
|
|
+ }
|
|
|
if (formType.value === 'create') {
|
|
if (formType.value === 'create') {
|
|
|
await IotSocSummaryApi.createIotSocSummary(data)
|
|
await IotSocSummaryApi.createIotSocSummary(data)
|
|
|
message.success(t('common.createSuccess'))
|
|
message.success(t('common.createSuccess'))
|
|
@@ -151,7 +168,8 @@ const resetForm = () => {
|
|
|
id: undefined,
|
|
id: undefined,
|
|
|
project: undefined,
|
|
project: undefined,
|
|
|
observationDate: undefined,
|
|
observationDate: undefined,
|
|
|
- socClass: undefined,
|
|
|
|
|
|
|
+
|
|
|
|
|
+ socClass: [],
|
|
|
className: undefined,
|
|
className: undefined,
|
|
|
userName: undefined,
|
|
userName: undefined,
|
|
|
post: undefined,
|
|
post: undefined,
|
|
@@ -162,6 +180,44 @@ const resetForm = () => {
|
|
|
formRef.value?.resetFields()
|
|
formRef.value?.resetFields()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+const normalizeSocClasses = (value: unknown, tree: Tree[] = []): (string | number)[] => {
|
|
|
|
|
+ const values = Array.isArray(value)
|
|
|
|
|
+ ? value
|
|
|
|
|
+ : typeof value === 'string'
|
|
|
|
|
+ ? value
|
|
|
|
|
+ .split(',')
|
|
|
|
|
+ .map((item) => item.trim())
|
|
|
|
|
+ .filter(Boolean)
|
|
|
|
|
+ : value === null || value === undefined || value === ''
|
|
|
|
|
+ ? []
|
|
|
|
|
+ : [value as string | number]
|
|
|
|
|
+
|
|
|
|
|
+ const idMap = new Map<string, string | number>()
|
|
|
|
|
+ const stack = [...tree]
|
|
|
|
|
+ while (stack.length) {
|
|
|
|
|
+ const node = stack.shift() as any
|
|
|
|
|
+ if (!node) continue
|
|
|
|
|
+ idMap.set(String(node.id), node.id)
|
|
|
|
|
+ if (Array.isArray(node.children) && node.children.length) {
|
|
|
|
|
+ stack.push(...node.children)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return values.map((item) => idMap.get(String(item)) ?? item)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const serializeSocClasses = (value: unknown): string => {
|
|
|
|
|
+ if (Array.isArray(value)) {
|
|
|
|
|
+ return value
|
|
|
|
|
+ .map((item) => String(item).trim())
|
|
|
|
|
+ .filter(Boolean)
|
|
|
|
|
+ .join(',')
|
|
|
|
|
+ }
|
|
|
|
|
+ if (typeof value === 'string') return value
|
|
|
|
|
+ if (value === null || value === undefined) return ''
|
|
|
|
|
+ return String(value)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
|
deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
|
|
deptList2.value = handleTree(await DeptApi.getSimpleDeptList())
|
|
|
|
|
|