UNIVPLMDataIntegration/Web/src/views/approvalFlow/component/editFormDialog.vue
2024-11-25 16:27:14 +08:00

154 lines
4.7 KiB
Vue

<template>
<div class="flow-container">
<el-dialog v-model="state.isShowDialog" :width="800" draggable :close-on-click-modal="false">
<template #header>
<div style="color: #fff">
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
<span>{{ props.title }}</span>
</div>
</template>
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="auto">
<el-row :gutter="35">
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="库定位器" prop="configId" :rules="[{ required: true, message: '库定位器不能为空', trigger: 'blur' }]">
<el-select v-model="state.ruleForm.configId" placeholder="库名" filterable @change="dbChanged()" class="w100">
<el-option v-for="item in state.dbData" :key="item.configId" :label="item.configId" :value="item.configId" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="表定位器" prop="tableName" :rules="[{ required: true, message: '表定位器不能为空', trigger: 'blur' }]">
<el-select v-model="state.ruleForm.tableName" @change="tableChanged" value-key="value" filterable clearable class="w100">
<el-option v-for="item in state.tableData" :key="item.name" :label="item.name + ' [ ' + item.description + ' ]'" :value="item.name" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
<el-form-item label="操作" prop="typeName" :rules="[{ required: true, message: '操作不能为空', trigger: 'blur' }]">
<el-select v-model="state.ruleForm.typeName" value-key="value" filterable clearable class="w100">
<el-option v-for="item in state.typeData" :key="item.name" :label="item.name + ' ( ' + item.value + ' )' + ' [ ' + item.description + ' ]'" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" @click="submit">确 定</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from 'vue';
import type { FormRules } from 'element-plus';
import { getAPI } from '/@/utils/axios-utils';
import { ApprovalFlowApi } from '/@/api-plugins/approvalFlow/api';
import { ApprovalFlowOutput, UpdateApprovalFlowInput } from '/@/api-plugins/approvalFlow/models';
import { SysDatabaseApi, SysCodeGenApi } from '/@/api-services/api';
import { DatabaseOutput, TableOutput } from '/@/api-services/models';
var props = defineProps({
title: {
type: String,
default: '',
},
});
const emit = defineEmits(['reloadTable']);
const ruleFormRef = ref();
const state = reactive({
loading: false,
isShowDialog: false,
ruleSource: {} as UpdateApprovalFlowInput,
ruleForm: {} as any,
dbData: [] as Array<DatabaseOutput>,
tableData: [] as Array<TableOutput>,
tableName: '',
typeData: [
{
name: 'Add',
value: 'add',
description: '新增',
},
{
name: 'Update',
value: 'update',
description: '更新',
},
{
name: 'Delete',
value: 'delete',
description: '删除',
},
{
name: 'Select',
value: 'select',
description: '查询',
},
{
name: 'Export',
value: 'export',
description: '导出',
},
],
});
const rules = ref<FormRules>({});
onMounted(async () => {
var resDb = await getAPI(SysCodeGenApi).apiSysCodeGenDatabaseListGet();
state.dbData = resDb.data.result;
});
const openDialog = (row: ApprovalFlowOutput) => {
state.ruleSource = row as UpdateApprovalFlowInput;
state.ruleForm = row.formJson ? JSON.parse(row.formJson) : {};
state.isShowDialog = true;
dbChanged();
};
const closeDialog = () => {
emit('reloadTable');
state.isShowDialog = false;
};
const cancel = () => {
state.isShowDialog = false;
};
const submit = async () => {
state.ruleSource.formJson = JSON.stringify(state.ruleForm);
await getAPI(ApprovalFlowApi).apiApprovalFlowUpdatePost(state.ruleSource);
closeDialog();
};
// db改变
const dbChanged = async () => {
if (state.ruleForm.configId === '') return;
var res = await getAPI(SysDatabaseApi).apiSysDatabaseTableListConfigIdGet(state.ruleForm.configId);
state.tableData = res.data.result ?? [];
};
// table改变
const tableChanged = (tableName: any) => {
var table = state.tableData.find((x) => x.tableName === tableName);
state.ruleForm.entityName = table?.entityName ?? '';
};
defineExpose({ openDialog });
</script>
<style scoped lang="scss">
:deep(.el-select),
:deep(.el-input-number) {
width: 100%;
}
</style>