Commit e69f1d8e authored by 罗林杰's avatar 罗林杰

Merge remote-tracking branch 'origin/master'

parents e69e5e8b b0a57dce
...@@ -181,6 +181,15 @@ export const DataWarehousePlanningRoute: AppRouteRecordRaw = { ...@@ -181,6 +181,15 @@ export const DataWarehousePlanningRoute: AppRouteRecordRaw = {
icon: '', icon: '',
}, },
}, },
{
path: 'logicalModel/version-manage',
name: 'logicalVersionModel',
component: () => import('@/views/dataWarehousePlanning/logicalModel/versionManage/index.vue'),
meta: {
title: '转换记录',
icon: '',
},
},
], ],
}; };
export const ModelRoute: AppRouteRecordRaw = { export const ModelRoute: AppRouteRecordRaw = {
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<ModelTree class="w-1/4 xl:w-1/5" @select="handleSelect" /> <ModelTree class="w-1/4 xl:w-1/5" @select="handleSelect" />
<BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo"> <BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo">
<template #toolbar> <template #toolbar>
<a-button type="primary">转换记录</a-button> <a-button type="primary" @click="handleVersion">转换记录</a-button>
<a-button type="primary">转物理模型</a-button> <a-button type="primary">转物理模型</a-button>
<a-button type="primary">设为待发布</a-button> <a-button type="primary">设为待发布</a-button>
<a-button type="primary">发布</a-button> <a-button type="primary">发布</a-button>
...@@ -206,6 +206,15 @@ ...@@ -206,6 +206,15 @@
go('/system/account_detail/' + record.id); go('/system/account_detail/' + record.id);
} }
/**
* 转换记录
*/
function handleVersion() {
push({
path: '/dataWarehousePlanning/logicalModel/version-manage',
});
}
onMounted(() => { onMounted(() => {
tableData.value = TreeData; tableData.value = TreeData;
const path = route.path; const path = route.path;
......
<template> <template>
<PageWrapper :title="modelName" contentBackground headerSticky> <PageWrapper :title="modelName" contentBackground headerSticky>
<template #extra> <template #extra>
<a-button type="primary" v-if="!editFlag" :disabled="!info">转物理模型</a-button> <a-button type="primary" v-if="!editFlag" :disabled="!info" @click="handleTurnModel"
<a-button type="primary" v-if="!editFlag">版本管理</a-button> >转物理模型</a-button
>
<a-button type="primary" v-if="!editFlag" @click="handleVersion">版本管理</a-button>
<a-button type="primary" v-if="!editFlag" :disabled="!info">ER图</a-button> <a-button type="primary" v-if="!editFlag" :disabled="!info">ER图</a-button>
<a-button type="primary" v-if="!editFlag" @click="handleExport">导出</a-button> <a-button type="primary" v-if="!editFlag" @click="handleExport">导出</a-button>
<a-button type="primary" v-if="!editFlag" @click="handleEdit">编辑</a-button> <a-button type="primary" v-if="!editFlag" @click="handleEdit">编辑</a-button>
...@@ -84,12 +86,13 @@ ...@@ -84,12 +86,13 @@
</Tabs.TabPane> </Tabs.TabPane>
</Tabs> </Tabs>
</template> </template>
<TurnPhysicalModel @register="turnPhysicalModal" @success="turnPhysicalSuccess" />
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, onMounted, ref, nextTick } from 'vue'; import { reactive, onMounted, ref, nextTick } from 'vue';
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
import { useRoute, onBeforeRouteLeave } from 'vue-router'; import { useRoute, onBeforeRouteLeave, useRouter } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData'; import { useFilterStore } from '@/store/modules/filterData';
import { Descriptions, Tabs } from 'ant-design-vue'; import { Descriptions, Tabs } from 'ant-design-vue';
import EntityTable from './entityTable.vue'; import EntityTable from './entityTable.vue';
...@@ -98,8 +101,10 @@ ...@@ -98,8 +101,10 @@
import { infoData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData'; import { infoData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { FormSchema } from '@/components/Form'; import { FormSchema } from '@/components/Form';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import TurnPhysicalModel from './turnPhysicalModel.vue';
const [registerModal, { openModal }] = useModal(); const { push } = useRouter();
const [turnPhysicalModal, { openModal: turnPhysical }] = useModal();
defineOptions({ name: 'AccountManagement' }); defineOptions({ name: 'AccountManagement' });
const tableRefresh = ref(true); const tableRefresh = ref(true);
const filterStore = useFilterStore(); const filterStore = useFilterStore();
...@@ -177,6 +182,22 @@ ...@@ -177,6 +182,22 @@
}, },
}, },
]; ];
/**
* 转物理模型
*/
function handleTurnModel() {
turnPhysical(true, {
sUpdate: false,
});
}
/**
* 历史记录
*/
function handleVersion() {
push({
path: '/dataWarehousePlanning/logicalModel/version-manage',
});
}
/** /**
* 导出 * 导出
*/ */
......
...@@ -399,3 +399,124 @@ export const ConnectionModelFormSchema: any[] = [ ...@@ -399,3 +399,124 @@ export const ConnectionModelFormSchema: any[] = [
colProps: { lg: 24, md: 24 }, colProps: { lg: 24, md: 24 },
}, },
]; ];
export const turnPhysicalModelFormSchema: any[] = [
{
field: 'path',
label: '存储路径',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
{
field: 'fileRename',
label: '文件重名',
component: 'RadioGroup',
componentProps: {
options: [
{ label: '全部放弃', value: '0' },
{ label: '全部替换', value: '1' },
{ label: '自动重命名', value: '2' },
],
},
colProps: { lg: 24, md: 24 },
},
{
field: 'tableInfo',
label: '表信息',
slot: 'tableInfo',
colProps: { lg: 24, md: 24 },
},
{
field: 'dataSource',
label: '数据源',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
{
field: 'databaseName',
label: '库名',
component: 'Input',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'title1',
label: '表名',
component: 'Input',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'tableType',
label: '表类型',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
{
field: 'tableTxt',
label: '表注释',
component: 'Input',
colProps: { lg: 24, md: 24 },
},
{
field: 'saveType',
label: '存储类型',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'saveType',
label: '是否为事务表',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
{
field: 'title2',
label: '管理元数据',
slot: 'tableInfo',
colProps: { lg: 24, md: 24 },
},
{
field: 'dept',
label: '主责部门',
component: 'Input',
slot: 'tableInfo',
colProps: { lg: 24, md: 24 },
},
{
field: 'secretFlag',
label: '是否加密',
component: 'RadioGroup',
componentProps: {
options: [
{ label: '否', value: '0' },
{ label: '是', value: '1' },
],
},
colProps: { lg: 24, md: 24 },
},
{
field: 'taskName',
label: '业务定义',
component: 'Input',
colProps: { lg: 24, md: 24 },
},
{
field: 'tableChName',
label: '表中文名',
component: 'Input',
colProps: { lg: 24, md: 24 },
},
{
field: 'sensitiveFlag',
label: '是否为敏感信息',
component: 'RadioGroup',
componentProps: {
options: [
{ label: '否', value: '0' },
{ label: '是', value: '1' },
],
},
colProps: { lg: 24, md: 24 },
},
];
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { turnPhysicalModelFormSchema } from './model.data';
defineOptions({ name: 'ModelModal' });
const isUpdate = ref(false);
const isMove = ref(false);
const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { getFieldsValue, setFieldsValue, updateSchema, resetFields, validate }] =
useForm({
labelWidth: 100,
baseColProps: { lg: 12, md: 24 },
schemas: turnPhysicalModelFormSchema,
showActionButtonGroup: false,
actionColOptions: {
span: 23,
},
});
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
await resetFields();
setModalProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
isMove.value = !!data?.isMove;
if (unref(isUpdate)) {
// 获取行数据的id
rowId.value = data.record.businessId;
// 塞值
await setFieldsValue({
...data.record,
});
}
});
// const getTitle = computed(() => (isUpdate.value ? '编辑实体' : '新建实体'));
const getTitle = '转物理模型';
/**确定按钮*/
async function handleSubmit() {
await validate();
closeModal();
}
</script>
<template>
<div>
<BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:contract-line',
onClick: handleVersionDetailModel.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<VersionDetail @register="versionDetailModal" @success="" />
</div>
</template>
<script lang="ts" setup>
import { reactive, onMounted, ref } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelData';
import { useModal } from '@/components/Modal';
import {
versionColumns,
versionTableFormSchema,
} from '@/views/dataWarehousePlanning/logicalModel/versionManage/version.data';
import { versionData } from '@/views/dataWarehousePlanning/logicalModel/versionManage/versionData';
import VersionDetail from './versionDetailModel.vue';
defineOptions({ name: 'AccountManagement' });
const filterStore = useFilterStore();
const route = useRoute();
const searchInfo = reactive<Recordable>({});
const tableData = ref([]);
// 模态框
const [ versionDetailModal, { openModal }] = useModal();
// 版本详情
function handleVersionDetailModel(record: RecordType) {
openModal(true, {
record,
isUpdate: false,
});
}
const [
registerTable,
{ reload, updateTableDataRecord, getSearchInfo, getForm, getRowSelection },
] = useTable({
title: '',
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: versionData.length,
code: '',
message: '',
data: versionData,
};
return { ...response };
},
rowKey: 'businessId',
// 列
columns: versionColumns,
rowSelection: true,
// 搜索
formConfig: {
labelWidth: 120,
schemas: versionTableFormSchema,
autoSubmitOnEnter: true,
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
handleSearchInfoFn(info) {
return info;
},
actionColumn: {
width: 150,
title: '操作',
dataIndex: 'action',
},
});
onMounted(() => {
tableData.value = TreeData;
const path = route.path;
if (filterStore.getSearchParams[path]) {
if (JSON.parse(filterStore.getSearchParams[path] !== {})) {
const params = JSON.parse(filterStore.getSearchParams[path]);
getForm().setFieldsValue({
page: params.page,
pageSize: params.pageSize,
username: params.username,
flag: params.flag,
});
searchInfo.institutionId = params.institutionId;
}
}
});
onBeforeRouteLeave((to, from, next) => {
next(); // 允许导航
});
</script>
<style scoped lang="scss">
.vben-basic-table-form-container {
padding: 0;
}
</style>
import { BasicColumn } from '@/components/Table';
// version
export const versionTableFormSchema: any[] = [
{
field: 'submitTime',
component: 'DatePicker',
componentProps: {
placeholder: '提交时间',
valueFormat: 'YYYY-MM-DD HH:mm:ss',
},
colProps: { span: 4 },
},
{
field: 'result',
component: 'Select',
componentProps: {
placeholder: '执行结果',
},
colProps: { span: 4 },
},
{
field: 'modelName',
component: 'Input',
componentProps: {
placeholder: '逻辑模型名称',
},
colProps: { span: 4 },
},
{
field: 'operator',
component: 'Input',
componentProps: {
placeholder: '操作者',
},
colProps: { span: 4 },
},
];
export const versionColumns: BasicColumn[] = [
{
title: '提交时间',
dataIndex: 'submitTime',
width: 150,
},
{
title: '逻辑模型',
dataIndex: 'modelName',
width: 150,
},
{
title: '逻辑模型路径',
dataIndex: 'modelPath',
width: 150,
},
{
title: '实体总数',
dataIndex: 'entityNum',
width: 150,
},
{
title: '物理模型总数',
dataIndex: 'phyModelNum',
width: 150,
},
{
title: '执行结果',
dataIndex: 'result',
width: 150,
},
{
title: '操作者',
dataIndex: 'operator',
width: 150,
},
];
// versionDetail
export const versionDetailTableFormSchema: any[] = [
{
field: 'key',
component: 'Input',
componentProps: {
placeholder: '输入关键字搜索',
},
colProps: { span: 4 },
},
{
field: 'type',
component: 'Select',
componentProps: {
placeholder: '类型',
},
colProps: { span: 4 },
},
{
field: 'flag',
component: 'Select',
componentProps: {
placeholder: '状态',
},
colProps: { span: 4 },
},
];
export const versionDetailColumns: BasicColumn[] = [
{
title: '实体',
dataIndex: 'entity',
width: 80,
},
{
title: '物理模型名称',
dataIndex: 'phyModelName',
width: 80,
},
{
title: '物理模型路径',
dataIndex: 'phyModelPath',
width: 80,
},
{
title: '状态',
dataIndex: 'flag',
width: 80,
},
{
title: '类型',
dataIndex: 'type',
width: 80,
},
];
export const versionData: any[] = [
{
submitTime: '2023/06/15 15:51:03',
modelName: 'SDM_DW数仓模型',
modelPath: '/admin-个人工作区/SDM数仓模型',
entityNum: '2',
phyModelNum: '2',
result: '成功',
operator: 'admin',
},
{
submitTime: '2023/06/15 14:38:33',
modelName: '1941',
modelPath: '/admin-个人工作区/删除测试',
entityNum: '1',
phyModelNum: '1',
result: '成功',
operator: 'admin',
},
{
submitTime: '2023/06/15 14:31:41',
modelName: '1941',
modelPath: '/admin-个人工作区/删除测试',
entityNum: '1',
phyModelNum: '1',
result: '成功',
operator: 'admin',
},
{
submitTime: '2023/06/15 14:29:28',
modelName: '1941',
modelPath: '/admin-个人工作区/删除测试',
entityNum: '1',
phyModelNum: '1',
result: '成功',
operator: 'admin',
},
{
submitTime: '2023/06/15 14:27:53',
modelName: '1941',
modelPath: '/admin-个人工作区/删除测试',
entityNum: '1',
phyModelNum: '1',
result: '成功',
operator: 'admin',
},
{
submitTime: '2023/06/15 14:26:053',
modelName: '导出',
modelPath: '/admin-个人工作区/导出测试',
entityNum: '1',
phyModelNum: '1',
result: '失败(1)',
operator: 'admin',
},
{
submitTime: '2023/06/15 12:23:22',
modelName: 'TEST_WARP-90593',
modelPath: '/admin-个人工作区/zzxczxc/TEST_WARP',
entityNum: '0',
phyModelNum: '0',
result: '失败',
operator: 'admin',
},
];
export const versionDetailData: any[] = [
{
entity: 'dw_产品合约',
phyModelName: 'dw_产品合约',
phyModelPath: 'admin-个人工作区/dw_产品合约',
flag: '成功',
type: '映射建模',
},
{
entity: 'dw_合约',
phyModelName: 'dw_合约',
phyModelPath: 'admin-个人工作区/dw_合约',
flag: '成功',
type: '映射建模',
},
];
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
// {
// icon: 'clarity:contract-line',
// onClick: handleVersionDetailModel.bind(null, record),
// },
]"
/>
</template>
</template>
</BasicTable>
</BasicModal>
</template>
<script lang="ts" setup>
import { reactive, ref } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { BasicModal, useModalInner } from '@/components/Modal';
import { versionDetailData } from '@/views/dataWarehousePlanning/logicalModel/versionManage/versionData';
import {
versionDetailColumns,
versionDetailTableFormSchema,
} from '@/views/dataWarehousePlanning/logicalModel/versionManage/version.data';
defineOptions({ name: 'ModelModal' });
const searchInfo = reactive<Recordable>({});
const isUpdate = ref(false);
const isMove = ref(false);
// table
const [
registerTable,
{ reload, updateTableDataRecord, getSearchInfo, getForm, getRowSelection },
] = useTable({
title: '',
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: versionDetailData.length,
code: '',
message: '',
data: versionDetailData,
};
return { ...response };
},
rowKey: 'businessId',
// 列
columns: versionDetailColumns,
// 搜索
formConfig: {
labelWidth: 120,
schemas: versionDetailTableFormSchema,
autoSubmitOnEnter: true,
},
showIndexColumn: false,
showTableSetting: false,
bordered: true,
handleSearchInfoFn(info) {
return info;
},
actionColumn: {
width: 80,
title: '操作',
dataIndex: 'action',
},
});
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
isUpdate.value = !!data?.isUpdate;
isMove.value = !!data?.isMove;
});
const getTitle = '转物理模型';
/**确定按钮*/
async function handleSubmit() {
closeModal();
}
</script>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment