update:参数库审核

This commit is contained in:
2025-11-28 14:56:37 +08:00
parent d6d93d7aac
commit 6d305fa228
10 changed files with 143 additions and 76 deletions

View File

@@ -149,7 +149,7 @@ export const addLibraryCategoryObjectApi = (params: any) => {
* @returns * @returns
*/ */
export const deleteSimulationParameterApi = (params: any) => { export const deleteSimulationParameterApi = (params: any) => {
return get(`${PREFIX}simulationParameterLibrary/deleteSimulationParameter`, params); return post(`${PREFIX}simulationParameterLibrary/deleteSimulationParameter`, params);
}; };
/** /**

View File

@@ -2,6 +2,7 @@
<template v-if="item.inputMode !== 'slot'"> <template v-if="item.inputMode !== 'slot'">
<el-input <el-input
v-if="item.inputMode === 'input'" v-if="item.inputMode === 'input'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
:placeholder="(item.disabled && showDisabled) ? '' : '请输入'" :placeholder="(item.disabled && showDisabled) ? '' : '请输入'"
clearable clearable
@@ -10,6 +11,7 @@
/> />
<el-input <el-input
v-if="item.inputMode === 'textarea'" v-if="item.inputMode === 'textarea'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
type="textarea" type="textarea"
autosize autosize
@@ -19,6 +21,7 @@
/> />
<el-input-number <el-input-number
v-if="item.inputMode === 'inputNumber'" v-if="item.inputMode === 'inputNumber'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
:placeholder="(item.disabled && showDisabled) ? '' : '请输入'" :placeholder="(item.disabled && showDisabled) ? '' : '请输入'"
:min="0" :min="0"
@@ -29,6 +32,7 @@
/> />
<el-select <el-select
v-if="item.inputMode === 'select'" v-if="item.inputMode === 'select'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
:placeholder="(item.disabled && showDisabled) ? '' : '请选择'" :placeholder="(item.disabled && showDisabled) ? '' : '请选择'"
clearable clearable
@@ -38,6 +42,7 @@
></el-select> ></el-select>
<el-radio-group <el-radio-group
v-if="item.inputMode === 'radio'" v-if="item.inputMode === 'radio'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@change="(val: any) => changeFun(item.key, val)" @change="(val: any) => changeFun(item.key, val)"
@@ -46,6 +51,7 @@
</el-radio-group> </el-radio-group>
<el-checkbox-group <el-checkbox-group
v-if="item.inputMode === 'checkbox'" v-if="item.inputMode === 'checkbox'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
:disabled="item.disabled && showDisabled" :disabled="item.disabled && showDisabled"
@change="(val: any) => changeFun(item.key, val)" @change="(val: any) => changeFun(item.key, val)"
@@ -61,6 +67,7 @@
/> />
<el-date-picker <el-date-picker
v-if="item.inputMode === 'date'" v-if="item.inputMode === 'date'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
type="datetime" type="datetime"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
@@ -72,6 +79,7 @@
/> />
<el-date-picker <el-date-picker
v-if="item.inputMode === 'daterange'" v-if="item.inputMode === 'daterange'"
v-bind="attrs"
v-model="formData[item.key]" v-model="formData[item.key]"
type="datetimerange" type="datetimerange"
start-placeholder="开始时间" start-placeholder="开始时间"
@@ -84,6 +92,7 @@
/> />
<el-upload <el-upload
v-if="item.inputMode === 'choseFile'" v-if="item.inputMode === 'choseFile'"
v-bind="attrs"
v-model:file-list="formData[item.key]" v-model:file-list="formData[item.key]"
class="upload-btn" class="upload-btn"
:limit="item.limit" :limit="item.limit"
@@ -149,12 +158,14 @@ interface Props {
item: any; item: any;
form: any; form: any;
showDisabled?: boolean; showDisabled?: boolean;
attrs?: any;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
item: {}, item: {},
form: {}, form: {},
showDisabled: false, showDisabled: false,
attrs: {},
}); });
watch(() => props.form, (val: any) => { watch(() => props.form, (val: any) => {

View File

@@ -10,6 +10,7 @@
:item="item" :item="item"
:form="formData" :form="formData"
:showDisabled="showDisabled" :showDisabled="showDisabled"
:attrs="formAttrs[item.key]"
@change="(val) => changeFun(val)" @change="(val) => changeFun(val)"
@remove="(val) => removeFun(val)" @remove="(val) => removeFun(val)"
> >
@@ -32,7 +33,6 @@ import FormItem from './formItem.vue';
import { getFormConfigureApi } from '@/api/system/systemData'; import { getFormConfigureApi } from '@/api/system/systemData';
import { isPhone, isEmail, hasNoSpecialChar, length20, length100 } from '@/utils/validate'; import { isPhone, isEmail, hasNoSpecialChar, length20, length100 } from '@/utils/validate';
import { formOptionsFormat } from './lib'; import { formOptionsFormat } from './lib';
import { cloneDeep } from 'lodash-es';
const emit = defineEmits(['change', 'remove', 'load']); const emit = defineEmits(['change', 'remove', 'load']);
@@ -42,6 +42,7 @@ interface Props {
showDisabled?: boolean; showDisabled?: boolean;
ruleData?: any; ruleData?: any;
data?: any; data?: any;
formAttrs?: any;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
@@ -50,6 +51,7 @@ const props = withDefaults(defineProps<Props>(), {
showDisabled: false, showDisabled: false,
ruleData: {}, ruleData: {},
data: {}, data: {},
formAttrs: {},
}); });
watch(() => props.data, (data: any) => { watch(() => props.data, (data: any) => {
@@ -61,12 +63,11 @@ onMounted(() => {
}); });
const formatDataFun = (data: any) => { const formatDataFun = (data: any) => {
const formatData = cloneDeep(data);
data.extras?.forEach((item: any) => { data.extras?.forEach((item: any) => {
const { propertyName, propertyValue } = item; const { propertyName, propertyValue } = item;
formatData[propertyName] = propertyValue; data[propertyName] = propertyValue;
}); });
return formatData; return data;
}; };
const formData = ref<any>(formatDataFun(props.data)); const formData = ref<any>(formatDataFun(props.data));

View File

@@ -201,7 +201,7 @@ const editData = ref<any>({});
const chosenData = ref<any>([]); const chosenData = ref<any>([]);
const BaseTableRef = ref(); const BaseTableRef = ref();
const fileData = ref<any>({}); const fileData = ref<any>({});
const nodeType = ref(''); const nodeType = ref<any>('');
onMounted(() => { onMounted(() => {
getAllTemplateFun(); getAllTemplateFun();
@@ -331,7 +331,7 @@ const searchFileFun = (data: any) => {
}; };
const addNodeFun = (data: any) => { const addNodeFun = (data: any) => {
if (nodeType.value === NODE_TYPE.CATEGORY) { if ([NODE_TYPE.CATEGORY, NODE_TYPE.WORKSPACE].includes(nodeType.value)) {
addClassFun(data); addClassFun(data);
} }
if (nodeType.value === NODE_TYPE.TASK) { if (nodeType.value === NODE_TYPE.TASK) {

View File

@@ -0,0 +1,54 @@
<template>
<div class="content">
<div class="table">
<BaseTable ref="baseTableRef" tableName="PARAMETER_LIST" hidePagination />
</div>
<div class="info">
<el-descriptions class="info-content-descriptions" :column="1" label-width="100px" border>
<el-descriptions-item v-if="baseInfo?.parameterLibraryCategoryObjectName" label="对象名称">{{ baseInfo?.parameterLibraryCategoryObjectName }}</el-descriptions-item>
<el-descriptions-item label="所属库">{{ baseInfo?.parameterLibraryName }}</el-descriptions-item>
<el-descriptions-item v-if="baseInfo?.parameterLibraryCategoryName" label="所属分类">{{ baseInfo?.parameterLibraryCategoryName }}</el-descriptions-item>
<el-descriptions-item v-if="baseInfo?.createTime" label="创建时间">{{ baseInfo?.createTime }}</el-descriptions-item>
</el-descriptions>
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import BaseTable from '@/components/common/table/baseTable.vue';
interface Props {
data: any;
}
const props = withDefaults(defineProps<Props>(), {
data: {},
});
const baseTableRef = ref<any>();
const baseInfo = ref<any>({});
onMounted(() => {
const approveContents = JSON.parse(props.data.approveContents);
const { paramData = {} } = approveContents;
const { parameterJsonValue = [] } = paramData;
baseTableRef.value.setDataFun(parameterJsonValue);
baseInfo.value = paramData;
});
</script>
<style lang="scss" scoped>
.content {
display: flex;
.table {
flex: 1;
padding-right: 20px;
margin-right: 20px;
border-right: solid 1px var(--el-border-color);
}
.info {
width: 300px;
}
}
</style>

View File

@@ -5,6 +5,7 @@
<Knowledge v-else-if="data.approveType === 2" :data="data" /> <Knowledge v-else-if="data.approveType === 2" :data="data" />
<FlowView type="approve" v-else-if="data.approveType === 3" :data="data" /> <FlowView type="approve" v-else-if="data.approveType === 3" :data="data" />
<DeliverableFile v-else-if="data.approveType === 4" :data="data" /> <DeliverableFile v-else-if="data.approveType === 4" :data="data" />
<Parameter v-else-if="data.approveType === 5" :data="data" />
<div v-else>其他审核预览{{ data.cidFlowId }}</div> <div v-else>其他审核预览{{ data.cidFlowId }}</div>
</div> </div>
</div> </div>
@@ -18,6 +19,7 @@ import TaskPool from './components/taskPool.vue';
import Knowledge from './components/knowledge.vue'; import Knowledge from './components/knowledge.vue';
import FlowView from '@/components/common/flow/flowView.vue'; import FlowView from '@/components/common/flow/flowView.vue';
import DeliverableFile from './components/deliverableFile.vue'; import DeliverableFile from './components/deliverableFile.vue';
import Parameter from './components/parameter.vue';
const w: any = window; const w: any = window;
const $wujie: any = w.$wujie; const $wujie: any = w.$wujie;

View File

@@ -27,7 +27,7 @@ import { ref } from 'vue';
import Dialog from '@/components/common/dialog/index.vue'; import Dialog from '@/components/common/dialog/index.vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
const emits = defineEmits(['close', 'createFn']); const emits = defineEmits(['close', 'createFun']);
const visible = ref(true); const visible = ref(true);
@@ -44,7 +44,7 @@ const onConfirmFun = () => {
ElMessage.warning('请输入参数库名称!'); ElMessage.warning('请输入参数库名称!');
return; return;
} else { } else {
emits('createFn', formData.value); emits('createFun', formData.value);
} }
}; };
</script> </script>

View File

@@ -3,38 +3,33 @@
v-model="visible" v-model="visible"
show-footer show-footer
diaTitle="新增参数对象" diaTitle="新增参数对象"
:width="400" :width="450"
@close="closeFun" @close="closeFun"
> >
<template #default> <template #default>
<el-form :model="formData" labelWidth="auto"> <TableForm
<el-form-item label="参数库名称" > ref="tableFormRef"
<el-input v-model="formData.parameterLibraryName" disabled></el-input> tableName="PARAMETER_LIBRARY_FORM"
</el-form-item> :data="formData"
<el-form-item label="分类名称"> showDisabled
<el-input v-model="formData.parameterLibraryCategoryName" disabled></el-input> @change="changeFun"
</el-form-item> :formAttrs="{
<el-form-item label="参数对象名称"> files: {
<el-input v-model="formData.parameterLibraryCategoryObjectName" ></el-input> accept: '.json'
</el-form-item> }
<el-form-item label="参数文件"> }"
<el-tooltip />
placement="top" <div class="tip">
content="例:[{'parameterName': 'parameterName','parameterValue': 'parameterValue', 'unit': 'unit', 'description': 'description'}]" <el-tooltip
> placement="top"
<div class="tip">参数对象上传的JSON文件格式必须遵守格式要求否则无法解析</div> content="例:[{'parameterName': 'parameterName','parameterValue': 'parameterValue', 'unit': 'unit', 'description': 'description'}]"
</el-tooltip> >
<el-tag v-if="formData.fileName" closable @close="deleteParamFile"> {{ formData.fileName }}</el-tag> <el-icon class="icon" :size="16">
<el-upload <Warning />
v-else </el-icon>
:show-file-list="false" </el-tooltip>
:before-upload="beforeUploadFun" <span>参数对象上传的JSON文件格式必须遵守格式要求否则无法解析</span>
accept=".json" </div>
>
<el-button type="primary">上传参数文件</el-button>
</el-upload>
</el-form-item>
</el-form>
</template> </template>
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
@@ -46,53 +41,45 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, reactive } from 'vue'; import { ref, onMounted } from 'vue';
import Dialog from '@/components/common/dialog/index.vue'; import Dialog from '@/components/common/dialog/index.vue';
import { ElMessage } from 'element-plus'; import TableForm from '@/components/common/table/tableForm.vue';
import { Warning } from '@element-plus/icons-vue';
const emits = defineEmits(['close', 'createFn']); const emits = defineEmits(['close', 'createFun']);
const props = defineProps(['libTypeInfo']); const props = defineProps(['libTypeInfo']);
const visible = ref(true); const visible = ref(true);
const formData = reactive<any>({ const tableFormRef = ref<any>();
parameterLibraryName: '', const formData = ref<any>({});
parameterLibraryCategoryName: '',
parameterLibraryCategoryObjectName: '',
file: {},
fileName: '',
});
const closeFun = () => { const closeFun = () => {
emits('close'); emits('close');
}; };
const onConfirmFun = () => { const onConfirmFun = async() => {
if (!formData.parameterLibraryCategoryObjectName) { const valid = await tableFormRef.value?.validateFun();
ElMessage.warning('请输入参数类型名称!'); if (valid) {
return; emits('createFun', formData.value);
} else if (!formData.fileName) {
ElMessage.warning('请请上传对应参数文件');
return;
} else {
emits('createFn', formData);
} }
}; };
const beforeUploadFun = (file: any) => { const changeFun = (data: any) => {
formData.file = file; const { key, val } = data;
formData.fileName = file.name; if (key === 'files') {
}; formData.value.file = val.raw;
formData.value.fileName = val.name;
const deleteParamFile = () => { }
formData.fileName = ''; if (key === 'templateId') {
formData.file = {}; formData.value.templateName = val.label;
}
}; };
onMounted(() => { onMounted(() => {
if (props.libTypeInfo) { if (props.libTypeInfo) {
formData.parameterLibraryName = props.libTypeInfo.libName; formData.value.parameterLibraryName = props.libTypeInfo.libName;
formData.parameterLibraryCategoryName = props.libTypeInfo.name; formData.value.parameterLibraryCategoryName = props.libTypeInfo.name;
formData.parameterLibraryId = props.libTypeInfo.libId; formData.value.parameterLibraryId = props.libTypeInfo.libId;
formData.parameterLibraryCategoryId = props.libTypeInfo.id; formData.value.parameterLibraryCategoryId = props.libTypeInfo.id;
} }
}); });
</script> </script>
@@ -109,9 +96,19 @@ onMounted(() => {
justify-content: flex-end; justify-content: flex-end;
} }
.tip { .tip {
display: flex;
align-items: center;
justify-content: flex-end;
padding-bottom: 10px; padding-bottom: 10px;
font-size: 12px; font-size: 12px;
line-height: 14px; line-height: 14px;
color: var(--el-text-color-secondary); color: var(--el-text-color-secondary);
.icon {
color: var(--el-color-danger);
cursor: pointer;
}
span {
padding-left: 4px;
}
} }
</style> </style>

View File

@@ -30,7 +30,7 @@ import { ref, onMounted } from 'vue';
import Dialog from '@/components/common/dialog/index.vue'; import Dialog from '@/components/common/dialog/index.vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
const emits = defineEmits(['close', 'createFn']); const emits = defineEmits(['close', 'createFun']);
const props = defineProps(['libInfo']); const props = defineProps(['libInfo']);
const visible = ref(true); const visible = ref(true);
const formData = ref({ const formData = ref({
@@ -47,7 +47,7 @@ const onConfirmFun = () => {
ElMessage.warning('请输入参数类型名称!'); ElMessage.warning('请输入参数类型名称!');
return; return;
} else { } else {
emits('createFn', { emits('createFun', {
parameterLibraryCategoryName: formData.value.parameterLibraryCategoryName, parameterLibraryCategoryName: formData.value.parameterLibraryCategoryName,
parameterLibraryId: props.libInfo.id, parameterLibraryId: props.libInfo.id,
}); });

View File

@@ -62,19 +62,19 @@
<addParamLib <addParamLib
v-if="showParamLibVisible" v-if="showParamLibVisible"
@close="showParamLibVisible = false" @close="showParamLibVisible = false"
@create-fn="createLibFun" @createFun="createLibFun"
/> />
<addParamType <addParamType
v-if="showParamTypeVisible" v-if="showParamTypeVisible"
@close="showParamTypeVisible = false" @close="showParamTypeVisible = false"
:lib-info="currentNode" :lib-info="currentNode"
@create-fn="createLibTypeFun" @createFun="createLibTypeFun"
/> />
<addParamObject <addParamObject
v-if="showParamObjVisible" v-if="showParamObjVisible"
@close="showParamObjVisible = false" @close="showParamObjVisible = false"
:lib-type-info="currentNode" :lib-type-info="currentNode"
@create-fn="creatLibParamObjFun" @createFun="creatLibParamObjFun"
/> />
</div> </div>
</template> </template>
@@ -158,7 +158,7 @@ const currentChangeFun = async(data: any) => {
ObjectId: data.id, ObjectId: data.id,
}); });
if (res && res.code === 200) { if (res && res.code === 200) {
paramObjInfo.value = res.data; paramObjInfo.value = res.data || [];
paramTableRef.value.setDataFun( paramObjInfo.value.parameterJsonValue || []); paramTableRef.value.setDataFun( paramObjInfo.value.parameterJsonValue || []);
} }
} else if (data.type === 2) { } else if (data.type === 2) {
@@ -224,10 +224,12 @@ const creatLibParamObjFun = async(data: any) => {
parameterLibraryCategoryObjectName: data.parameterLibraryCategoryObjectName, parameterLibraryCategoryObjectName: data.parameterLibraryCategoryObjectName,
fileName: data.fileName, fileName: data.fileName,
file: data.file, file: data.file,
templateId: data.templateId,
templateName: data.templateName,
}); });
if (res && res.code === 200) { if (res && res.code === 200) {
ElMessage.success('新增参数对象成功'); ElMessage.success('操作成功');
const list = await getSimulationParameterTreeDAtaFun(currentNode.value); const list = await getSimulationParameterTreeDAtaFun(currentNode.value);
const node = list.find((item: any) => { const node = list.find((item: any) => {
return item.name === data.parameterLibraryCategoryObjectName; return item.name === data.parameterLibraryCategoryObjectName;