Commit 42013e8a authored by 罗林杰's avatar 罗林杰

Merge remote-tracking branch 'origin/master'

parents 80dffd56 d32c110e
......@@ -118,11 +118,11 @@ export const DataWarehousePlanningRoute: AppRouteRecordRaw = {
},
children: [
{
path: 'logicalModel/edit',
path: 'logicalModel/detail',
name: 'logicalModel',
component: () => import('@/views/dataWarehousePlanning/logicalModel/modelEdit/index.vue'),
component: () => import('@/views/dataWarehousePlanning/logicalModel/modelDetail/index.vue'),
meta: {
title: '编辑逻辑模型',
title: '逻辑模型详情',
icon: '',
},
},
......
......@@ -52,12 +52,11 @@ export const columns: BasicColumn[] = [
export const searchFormSchema: FormSchema[] = [
{
field: 'name',
label: '名称',
component: 'Input',
componentProps: {
placeholder: '搜索主题域名称、英文名',
placeholder: '输入关键字搜索',
},
colProps: { span: 7 },
colProps: { span: 4 },
},
];
export const searchFormTwoSchema: FormSchema[] = [
......@@ -84,11 +83,10 @@ export const modelFormSchema: any[] = [
},
getPopupContainer: () => document.body,
},
required: true,
},
{
field: 'name',
label: '元模型名称',
label: '文件名称',
component: 'Input',
colProps: { lg: 24, md: 24 },
rules: [
......@@ -98,6 +96,17 @@ export const modelFormSchema: any[] = [
},
],
},
{
field: 'type',
label: '文件类型',
component: 'Input',
componentProps: {
defaultValue: '逻辑模型',
disabled: true,
readOnly: true,
},
colProps: { lg: 24, md: 24 },
},
];
export const editFormSchema: any[] = [
{
......
......@@ -15,7 +15,7 @@
import { nextTick, onMounted, ref, unref } from 'vue';
import { BasicTree, TreeActionType, TreeItem } from '@/components/Tree';
import { Nullable } from '@vben/types';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelEdit/modelData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
defineOptions({ name: 'DeptTree' });
......
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { ConnectionModelFormSchema } from './model.data';
defineOptions({ name: 'ModelModal' });
const isUpdate = ref(false);
const isMove = ref(false);
const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100,
baseColProps: { lg: 12, md: 24 },
schemas: ConnectionModelFormSchema,
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 ? '编辑关联' : '新建关联'));
/**确定按钮*/
async function handleSubmit() {
await validate();
closeModal();
}
</script>
<template>
<div>
<span class="table-title" style="font-size: 18px; margin: 12px 10px 0">实体关联关系</span>
<BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #toolbar>
<a-button type="primary" v-if="editFlag">批量删除</a-button>
<a-button type="primary" v-if="editFlag" @click="handleConnectionModel">新建关联</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
// 编辑
icon: 'clarity:note-edit-line',
onClick: handleConnectionEditModel.bind(null, record),
},
{
// 删除
icon: 'ant-design:delete-outlined',
color: 'error',
},
]"
/>
</template>
</template>
</BasicTable>
<ConnectionModel @register="connectionModal" @success="connectionSuccess" />
</div>
</template>
<script lang="ts" setup>
import {reactive, onMounted, ref, defineProps} from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { connectionFormSchema, connectionTable } from './model.data';
import { useFilterStore } from '@/store/modules/filterData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelData';
import { connectionData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { useModal } from '@/components/Modal';
import ConnectionModel from './connectionModel.vue';
defineOptions({ name: 'AccountManagement' });
const props = defineProps({
editFlag: Boolean
})
const filterStore = useFilterStore();
const route = useRoute();
const searchInfo = reactive<Recordable>({});
const tableData = ref([]);
// 模态框
const [connectionModal, { openModal }] = useModal();
// 实体新增
function handleConnectionModel() {
openModal(true, {
isUpdate: false,
});
}
// 实体编辑
function handleConnectionEditModel(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
});
}
function connectionSuccess({ isUpdate, values }) {
if (isUpdate) {
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
//修改表单的值
const result = updateTableDataRecord(values.businessId, values);
reload();
} else {
tableData.value.push(values);
reload();
}
}
const [
registerTable,
{ reload, updateTableDataRecord, getSearchInfo, getForm, getRowSelection },
] = useTable({
title: '',
// 定高
scroll: { y: 150 },
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: connectionData.length,
code: '',
message: '',
data: connectionData,
};
return { ...response };
},
rowKey: 'businessId',
// 列
columns: connectionTable,
rowSelection: true,
// 搜索
formConfig: {
labelWidth: 120,
schemas: connectionFormSchema,
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>
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { ConnectionModelFormSchema } from './model.data';
defineOptions({ name: 'ModelModal' });
const isUpdate = ref(false);
const isMove = ref(false);
const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100,
baseColProps: { lg: 12, md: 24 },
schemas: ConnectionModelFormSchema,
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 ? '编辑跨模型实体关联关系' : '新建跨模型实体关联关系',
);
/**确定按钮*/
async function handleSubmit() {
await validate();
closeModal();
}
</script>
<template>
<div>
<BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #toolbar>
<a-button type="primary"><DeleteTwoTone />批量删除</a-button>
<a-button type="primary" @click="handleCrossModel"
><PlusCircleTwoTone />新增关联关系</a-button
>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:note-edit-line',
onClick: handleCrossEditModel.bind(null, record),
},
{
icon: 'ant-design:delete-outlined',
color: 'error',
},
]"
/>
</template>
</template>
</BasicTable>
<CrossModel @register="crossModal" @success="crossSuccess" />
</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 { crossFormSchema, crossTable } from './model.data';
import { useFilterStore } from '@/store/modules/filterData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelData';
import { crossData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { DeleteTwoTone, PlusCircleTwoTone } from '@ant-design/icons-vue';
import CrossModel from './crossModel.vue';
import { useModal } from '@/components/Modal';
defineOptions({ name: 'AccountManagement' });
const filterStore = useFilterStore();
const route = useRoute();
const searchInfo = reactive<Recordable>({});
const tableData = ref([]);
// 模态框
const [crossModal, { openModal }] = useModal();
// 实体新增
function handleCrossModel() {
openModal(true, {
isUpdate: false,
});
}
// 实体编辑
function handleCrossEditModel(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
});
}
// 模态框保存
function crossSuccess({ isUpdate, values }) {
if (isUpdate) {
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
//修改表单的值
const result = updateTableDataRecord(values.businessId, values);
reload();
} else {
tableData.value.push(values);
reload();
}
}
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: crossData.length,
code: '',
message: '',
data: crossData,
};
return { ...response };
},
rowKey: 'businessId',
// 列
columns: crossTable,
rowSelection: true,
// 搜索
formConfig: {
labelWidth: 120,
schemas: crossFormSchema,
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>
<template>
<BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" />
</BasicModal>
</template>
<script lang="ts" setup>
import { ref, computed, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import { EntityModelFormSchema } from './model.data';
defineOptions({ name: 'ModelModal' });
const isUpdate = ref(false);
const isMove = ref(false);
const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100,
baseColProps: { lg: 12, md: 24 },
schemas: EntityModelFormSchema,
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 ? '编辑实体' : '新建实体'));
/**确定按钮*/
async function handleSubmit() {
await validate();
closeModal();
}
</script>
<template>
<div>
<span class="table-title" style="font-size: 18px; margin: 12px 10px 0">实体信息</span>
<BasicTable @register="registerTable" :searchInfo="searchInfo">
<template #toolbar>
<a-button type="primary" v-if="editFlag">编辑ER图</a-button>
<a-button type="primary" v-if="editFlag">批量删除</a-button>
<a-button type="primary" v-if="editFlag" @click="handleEntityModel">新建实体</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
icon: 'clarity:contract-line',
onClick: handleEntityEditModel.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<EntityModel @register="entityModal" @success="entitySuccess" />
</div>
</template>
<script lang="ts" setup>
import {reactive, onMounted, ref, defineProps} from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { entityColumns, entityFormSchema } from './model.data';
import { useFilterStore } from '@/store/modules/filterData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelData';
import { entityData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import EntityModel from './entityModel.vue';
import { useModal } from '@/components/Modal';
defineOptions({ name: 'AccountManagement' });
const props = defineProps({
editFlag: Boolean
})
// 模态框
const [entityModal, { openModal }] = useModal();
// 实体新增
function handleEntityModel() {
openModal(true, {
isUpdate: false,
});
}
// 实体编辑
function handleEntityEditModel(record: Recordable) {
// 跳转到详情
}
function entitySuccess({ isUpdate, values }) {
if (isUpdate) {
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
//修改表单的值
const result = updateTableDataRecord(values.businessId, values);
reload();
} else {
tableData.value.push(values);
reload();
}
}
const filterStore = useFilterStore();
const route = useRoute();
const searchInfo = reactive<Recordable>({});
const tableData = ref([]);
const [
registerTable,
{ reload, updateTableDataRecord, getSearchInfo, getForm, getRowSelection },
] = useTable({
title: '',
// 定高
scroll: { y: 150 },
// 数据
api: async (params) => {
console.log('params:', params);
const response = {
pageNu: '1',
pageSize: '10',
pages: '1',
total: entityData.length,
code: '',
message: '',
data: entityData,
};
return { ...response };
},
rowKey: 'businessId',
// 列
columns: entityColumns,
rowSelection: true,
// 搜索
formConfig: {
labelWidth: 120,
schemas: entityFormSchema,
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>
<template>
<PageWrapper :title="modelName" contentBackground headerSticky>
<template #extra>
<a-button type="primary" v-if="!editFlag" :disabled="!info">转物理模型</a-button>
<a-button type="primary" v-if="!editFlag">版本管理</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="handleEdit">编辑</a-button>
<a-button type="primary" v-if="!editFlag">删除</a-button>
<a-button type="primary" v-if="editFlag">设为待发布</a-button>
<a-button type="primary" v-if="editFlag">发布</a-button>
<a-button type="primary" v-if="editFlag" @click="handleSave">保存</a-button>
<a-button type="primary" v-if="editFlag" @click="handleCancel">取消</a-button>
</template>
<template #footer>
<Tabs v-model:activeKey="tabsKey">
<Tabs.TabPane key="1" tab="基本信息">
<Descriptions v-if="info" title="基本信息" style="margin: 10px 12px" :column="2">
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">模型描述:</span
><a-input v-if="editFlag" v-model:value="info.txt" /><span v-else>{{
info.txt
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">实体数量:</span>
<a-input v-if="editFlag" disabled v-model:value="info.num" /><span v-else>{{
info.num
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">创建时间:</span>
<a-input v-if="editFlag" disabled v-model:value="info.createTime" /><span v-else>{{
info.createTime
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">更新时间:</span>
<a-input v-if="editFlag" disabled v-model:value="info.updateTime" /><span v-else>{{
info.updateTime
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">发布时间:</span>
<a-input v-if="editFlag" disabled v-model:value="info.uploadTime" /><span v-else>{{
info.uploadTime
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">创建者:</span>
<a-input v-if="editFlag" disabled v-model:value="info.createBy" /><span v-else>{{
info.createBy
}}</span>
</Descriptions.Item>
<Descriptions.Item style="padding-left: 40px"
><span class="span-label">发布者:</span>
<a-input v-if="editFlag" disabled v-model:value="info.uploadBy" /><span v-else>{{
info.uploadBy
}}</span>
</Descriptions.Item>
</Descriptions>
<div
v-if="!info"
style="width: 100%; height: 200px; text-align: center; padding-top: 80px"
>
<span>该逻辑模型未发布版本暂无内容</span>
</div>
<!-- <BasicForm-->
<!-- autoFocusFirstItem-->
<!-- :labelWidth="100"-->
<!-- :schemas="schemas"-->
<!-- :actionColOptions="{-->
<!-- span: 24,-->
<!-- }"-->
<!-- />-->
</Tabs.TabPane>
<Tabs.TabPane key="2" tab="实体" style="overflow-y: hidden">
<EntityTable :editFlag="editFlag" />
<ConnectionTable :editFlag="editFlag" />
</Tabs.TabPane>
<Tabs.TabPane key="3" v-if="!editFlag" tab="跨模型实体关联关系">
<CrossTable />
</Tabs.TabPane>
</Tabs>
</template>
</PageWrapper>
</template>
<script lang="ts" setup>
import { reactive, onMounted, ref, nextTick } from 'vue';
import { PageWrapper } from '@/components/Page';
import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData';
import { Descriptions, Tabs } from 'ant-design-vue';
import EntityTable from './entityTable.vue';
import ConnectionTable from './connectionTable.vue';
import CrossTable from './crossTable.vue';
import { infoData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { FormSchema } from '@/components/Form';
import { useModal } from '@/components/Modal';
const [registerModal, { openModal }] = useModal();
defineOptions({ name: 'AccountManagement' });
const tableRefresh = ref(true);
const filterStore = useFilterStore();
const route = useRoute();
const searchInfo = reactive<Recordable>({});
const modelName = route.query.modelName;
/**
* 属性定义
*/
const tabsKey = ref('1');
const info = reactive({ ...infoData });
let editFlag = ref(false);
const schemas: FormSchema[] = [
{
field: 'txt',
component: 'Input',
defaultValue: info.txt,
label: '模型描述:',
colProps: {
span: 12,
},
},
{
field: 'num',
component: 'Input',
defaultValue: info.num,
label: '实体数量:',
colProps: {
span: 12,
},
},
{
field: 'createTime',
component: 'Input',
defaultValue: info.createTime,
label: '创建时间:',
colProps: {
span: 12,
},
},
{
field: 'updateTime',
component: 'Input',
defaultValue: info.updateTime,
label: '更新时间:',
colProps: {
span: 12,
},
},
{
field: 'uploadTime',
component: 'Input',
defaultValue: info.uploadTime,
label: '发布时间:',
colProps: {
span: 12,
},
},
{
field: 'createBy',
component: 'Input',
defaultValue: info.createBy,
label: '创建者:',
colProps: {
span: 12,
},
},
{
field: 'uploadBy',
component: 'Input',
defaultValue: info.uploadBy,
label: '发布者:',
colProps: {
span: 12,
},
},
];
/**
* 导出
*/
function handleExport() {
console.log('导出');
}
/**
* 编辑
*/
function handleEdit() {
editFlag.value = true;
tabsKey.value = '1';
tableRefresh.value = false;
nextTick(() => {
tableRefresh.value = true;
});
console.log('被调用', editFlag);
}
/**
* 保存
*/
function handleSave() {
editFlag.value = false;
tabsKey.value = '1';
}
/**
* 取消
*/
function handleCancel() {
editFlag.value = false;
tabsKey.value = '1';
}
onMounted(() => {
const path = route.path;
if (filterStore.getSearchParams[path]) {
if (JSON.parse(String(filterStore.getSearchParams[path] !== {}))) {
const params = JSON.parse(filterStore.getSearchParams[path]);
searchInfo.institutionId = params.institutionId;
}
}
});
onBeforeRouteLeave((to, from, next) => {
next(); // 允许导航
});
</script>
<style scoped>
.span-label {
display: inline-block;
margin-right: 10px;
width: 70px;
text-align: right;
}
</style>
......@@ -59,15 +59,158 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 7 },
},
];
export const searchFormTwoSchema: FormSchema[] = [
export const entityColumns: BasicColumn[] = [
{
title: '实体名称',
dataIndex: 'name',
width: 150,
// onEditRow: true,
},
{
title: '实体描述',
dataIndex: 'txt',
width: 150,
// onEditRow: true,
},
{
title: '实体英文名',
dataIndex: 'engName',
width: 150,
// onEditRow: true,
},
{
title: '资产责任人',
dataIndex: 'person',
width: 150,
// onEditRow: true,
},
{
title: '所属部门',
dataIndex: 'deptName',
width: 150,
},
];
export const entityFormSchema: FormSchema[] = [
{
field: 'name',
component: 'Input',
componentProps: {
placeholder: '输入实体名称搜索',
},
colProps: { span: 4 },
},
];
export const connectionTable: BasicColumn[] = [
{
title: '名称',
dataIndex: 'name',
width: 150,
// onEditRow: true,
},
{
title: '父实体名称',
dataIndex: 'fatherName',
width: 150,
// onEditRow: true,
},
{
title: '父实体属性PK',
dataIndex: 'fatherPK',
width: 150,
// onEditRow: true,
},
{
title: '父端基数',
dataIndex: 'fatherNum',
width: 150,
// onEditRow: true,
},
{
title: '子实体名称',
dataIndex: 'sonName',
width: 150,
},
{
title: '子实体属性PK',
dataIndex: 'sonPK',
width: 150,
},
{
title: '子端基数',
dataIndex: 'sonNum',
width: 150,
},
];
export const connectionFormSchema: FormSchema[] = [
{
field: 'name',
component: 'Input',
componentProps: {
placeholder: '输入关联关系名称搜索',
},
colProps: { span: 4 },
},
];
export const crossTable: BasicColumn[] = [
{
title: '名称',
dataIndex: 'name',
width: 150,
// onEditRow: true,
},
{
title: '父逻辑模型名称',
dataIndex: 'fatherModelName',
width: 150,
// onEditRow: true,
},
{
title: '父实体名称',
dataIndex: 'fatherName',
width: 150,
// onEditRow: true,
},
{
title: '父实体属性PK',
dataIndex: 'fatherPK',
width: 150,
// onEditRow: true,
},
{
title: '父端基数',
dataIndex: 'fatherNum',
width: 150,
// onEditRow: true,
},
{
title: '子逻辑模型名称',
dataIndex: 'sonModelName',
width: 150,
},
{
title: '子实体名称',
dataIndex: 'sonName',
width: 150,
},
{
title: '子实体属性PK',
dataIndex: 'sonPK',
width: 150,
},
{
title: '子端基数',
dataIndex: 'sonNum',
width: 150,
},
];
export const crossFormSchema: FormSchema[] = [
{
field: 'name',
label: '名称',
component: 'Input',
componentProps: {
placeholder: '输入关键字搜索主题域名称、英文名',
placeholder: '输入关联关系名称搜索',
},
colProps: { span: 10 },
colProps: { span: 4 },
},
];
export const modelFormSchema: any[] = [
......@@ -152,7 +295,7 @@ export const editFormSchema: any[] = [
component: 'Input',
colProps: { lg: 12, md: 12 },
},
]
];
/**移动*/
export const MoveFormSchema: any[] = [
{
......@@ -170,3 +313,89 @@ export const MoveFormSchema: any[] = [
required: true,
},
];
// entityModel
export const EntityModelFormSchema: any[] = [
{
field: 'name',
label: '实体名称',
component: 'Input',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'txt',
label: '实体描述',
component: 'Input',
colProps: { lg: 24, md: 24 },
},
{
field: 'engName',
label: '英文实体名',
component: 'Input',
colProps: { lg: 24, md: 24 },
},
{
field: 'person',
label: '资产责任人',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
{
field: 'deptName',
label: '所属部门',
component: 'Select',
colProps: { lg: 24, md: 24 },
},
];
// connectionModel
export const ConnectionModelFormSchema: any[] = [
{
field: 'name',
label: '名称',
component: 'Input',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'fatherName',
label: '父实体名称',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'fatherPK',
label: '父实体属性PK',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'fatherNum',
label: '父端基数',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'sonName',
label: '子实体名称',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'sonPK',
label: '子实体属性PK',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
{
field: 'sonNum',
label: '子端基数',
component: 'Select',
required: true,
colProps: { lg: 24, md: 24 },
},
];
export const infoData = {
txt: 'DW层的数仓模型',
num: '2',
createTime: '2023-06-15 15:11:56',
updateTime: '2023-06-15 15:11:56',
uploadTime: '2023-06-15 15:43:09',
createBy: 'admin',
uploadBy: 'admin',
};
export const entityData: any[] = [
{
businessId: '1',
name: 'dw_产品合约行情历史',
txt: 'dw_产品合约行情历史',
engName: 'dw_prd_contract_quot_h_s',
person: 'admin',
deptName: '机构管理/数据平台治理部',
},
{
businessId: '2',
name: 'dw_合约',
txt: 'dw_合约',
engName: 'dw_prd_contract_f',
person: 'admin',
deptName: '机构管理/数据平台治理部',
},
];
export const connectionData: any[] = [
{
name: '合约_行情',
fatherName: 'dw_合约',
fatherPK: '合约号',
fatherNum: '1',
sonName: 'dw_产品合约行情历史',
sonPK: '合约号',
sonNum: '1',
},
{
name: '合约_行情',
fatherName: 'dw_合约',
fatherPK: '合约号',
fatherNum: '1',
sonName: 'dw_产品合约行情历史',
sonPK: '合约号',
sonNum: '1',
},
{
name: '合约_行情',
fatherName: 'dw_合约',
fatherPK: '合约号',
fatherNum: '1',
sonName: 'dw_产品合约行情历史',
sonPK: '合约号',
sonNum: '1',
},
{
name: '合约_行情',
fatherName: 'dw_合约',
fatherPK: '合约号',
fatherNum: '1',
sonName: 'dw_产品合约行情历史',
sonPK: '合约号',
sonNum: '1',
},
{
name: '合约_行情',
fatherName: 'dw_合约',
fatherPK: '合约号',
fatherNum: '1',
sonName: 'dw_产品合约行情历史',
sonPK: '合约号',
sonNum: '1',
},
];
export const crossData: any[] = [
{
name: '合约_行情',
fatherModelName: 'SDM_DM数仓模型',
fatherName: 'dm_会员客户合约盈亏每日深汇',
fatherPK: '合约号',
fatherNum: '1',
sonModelName: 'SDM_DM数仓模型',
sonName: 'dw_合约',
sonPK: '合约号',
sonNum: '1',
},
];
......@@ -7,8 +7,8 @@
@ok="handleSubmit"
>
<Tabs v-model:activeKey="planType" size="large" @change="clickTab">
<a-tab-pane key="基本信息" tab="基本信息"></a-tab-pane>
<a-tab-pane key="实体" tab="实体"></a-tab-pane>
<a-tab-pane key="基本信息" tab="基本信息" />
<a-tab-pane key="实体" tab="实体" />
</Tabs>
<BasicForm @register="registerForm" />
</BasicModal>
......@@ -18,7 +18,7 @@
import { Tabs } from 'ant-design-vue';
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import {editFormSchema, modelFormSchema} from './model.data';
import { editFormSchema, modelFormSchema } from './model.data';
import { useMessage } from '@/hooks/web/useMessage';
import { TreeData } from '@/views/metaModel/knowledgeModel/modelData';
import { router } from '@/router';
......@@ -30,7 +30,7 @@
const isUpdate = ref(true);
const isMove = ref(false);
const rowId = ref('');
const planType = ref('基本信息')
const planType = ref('基本信息');
//获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
......@@ -57,8 +57,7 @@
});
}
});
async function clickTab(value){
}
async function clickTab(value) {}
const getTitle = computed(() => '编辑文件夹');
/**确定按钮*/
......@@ -72,4 +71,3 @@
closeModal();
}
</script>
......@@ -15,7 +15,7 @@
import { BasicForm, useForm } from '@/components/Form';
import { modelFormSchema } from './model.data';
import { useMessage } from '@/hooks/web/useMessage';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelEdit/modelData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelDetail/modelData';
import { router } from '@/router';
defineOptions({ name: 'ModelModal' });
......
<template>
<PageWrapper dense contentFullHeight fixedHeight contentClass="flex">
<ModelTree class="w-1/4 xl:w-1/5" @select="handleSelect" />
<BasicTable @register="registerTable" class="w-3/4 xl:w-4/5" :searchInfo="searchInfo">
<template #toolbar>
<a-button type="primary" @click="handleImport">导入</a-button>
<a-button type="primary" @click="handleExport">导出</a-button>
<a-button type="primary" @click="handleCreateFile">新建文件夹</a-button>
<a-button type="primary" @click="handleCreateModel">新建文件</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
// icon: 'clarity:note-edit-line',
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
color: 'error',
label: '删除',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
{
label: '移动',
onClick: handleMove.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<ModelModal @register="registerModal" :modelData="modelData" @success="handleSuccess" />
<ModelEdit @register="registerModelEdit" @success="handleSuccess" />
</PageWrapper>
</template>
<script lang="ts" setup>
import { reactive, onMounted, ref } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { PageWrapper } from '@/components/Page';
import ModelTree from './ModelTree.vue';
import { useMessage } from '@/hooks/web/useMessage';
import { useModal } from '@/components/Modal';
import ModelModal from './modelModal.vue';
import ModelEdit from './ModelEdit.vue';
import { useRouter } from 'vue-router';
import {columns, searchFormSchema, searchFormTwoSchema} from './model.data';
import { useGo } from '@/hooks/web/usePage';
import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData';
import { TreeData } from '@/views/dataWarehousePlanning/logicalModel/modelEdit/modelData';
defineOptions({ name: 'AccountManagement' });
const modelData = ref({
titel:''
});
const { createMessage } = useMessage();
const filterStore = useFilterStore();
const route = useRoute();
const go = useGo();
const { push } = useRouter();
const [registerModal, { openModal }] = useModal();
const [registerModelEdit, { openModal: openEditUserModal }] = useModal();
const [registerAddUserModal, { openModal: addUserModal }] = useModal();
const [registerMoveUser, { openModal: openMoveUserModal }] = useModal();
const searchInfo = reactive<Recordable>({});
const tableData = ref([]);
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: tableData.value.length,
code: '',
message: '',
data: [],
};
//过滤data中的数据,取出等于params.deptId的数据
var data = [];
//按照部门筛选 如果有进行过滤相应部门的 没有就赋值全部
var data = [];
data = tableData.value.filter((item) => item.businessId !== 100);
return { ...response, data: data };
},
rowKey: 'businessId',
columns,
rowSelection: true,
formConfig: {
labelWidth: 120,
schemas: searchFormTwoSchema,
autoSubmitOnEnter: true,
resetFunc: () => {
searchInfo.modelId = '';
},
},
useSearchForm: true,
showTableSetting: false,
bordered: true,
handleSearchInfoFn(info) {
return info;
},
actionColumn: {
width: 150,
title: '操作',
dataIndex: 'action',
},
});
function handleImport(){
console.log("导入")
}
function handleExport(){
console.log("导出")
}
/** 新增文件*/
function handleCreateModel() {
modelData.value.titel = "新增文件"
openModal(true, {
titel: "新增文件",
isUpdate: false,
});
}
/** 新增文件夹*/
function handleCreateFile() {
modelData.value.titel = "新增文件夹"
openModal(true, {
titel: "新增文件夹",
isUpdate: false,
});
}
/** 移动按钮*/
function handleMove(record: Recordable) {
openMoveUserModal(true, {
record,
isMove: true,
});
}
/** 编辑按钮*/
function handleEdit(record: Recordable) {
openEditUserModal(true, {
record,
isUpdate: true,
});
}
/** 删除按钮*/
function handleDelete(record: Recordable) {
tableData.value.splice(
tableData.value.findIndex((item) => item.businessId === record.businessId),
1,
);
createMessage.success('删除成功!');
reload();
}
/** 新增/编辑成功*/
function handleSuccess({ isUpdate, values }) {
if (isUpdate) {
// 注意:updateTableDataRecord要求表格的rowKey属性为string并且存在于每一行的record的keys中
//修改表单的值
const result = updateTableDataRecord(values.businessId, values);
reload();
} else {
tableData.value.push(values);
reload();
}
}
/** 进入二级主题域 */
function showDetails(record) {
push({
path: '/monthlyPlan/monthlyPlanEdit',
query: record.modelName,
});
}
/** 移动*/
function handleMoveSuccess({ isMove, values }) {
const rowSelection = getRowSelection().selectedRowKeys;
if (rowSelection.length > 0) {
//批量移动
for (let i = 0; i < rowSelection.length; i++) {
const result = updateTableDataRecord(values[i].institutionId, values[i]);
}
} else {
//单个移动
const result = updateTableDataRecord(values.businessId, values);
}
reload();
}
/** 部门树的select*/
function handleSelect(modelId = '') {
searchInfo.modelId = modelId;
reload();
}
function handleView(record: Recordable) {
go('/system/account_detail/' + record.id);
}
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) => {
const params = Object.assign({}, getSearchInfo(), getForm().getFieldsValue());
filterStore.setSearchParams({
path: from.path,
param: {
...params,
},
});
next(); // 允许导航
});
</script>
import { getAllRoleList } from '@/api/system/role/role';
import { BasicColumn, FormSchema } from '@/components/Table';
import { h } from 'vue';
import { Tag, Switch } from 'ant-design-vue';
import { useMessage } from '@/hooks/web/useMessage';
import { changeFlagApi } from '@/api/system/user/user';
// 引入开关组件
type CheckedType = boolean | string | number;
export const TreeData: any[] = [
{
delFlag: '0',
flag: '1',
businessId: 100,
modelName: '知识库模型',
parentId: 0,
'code:': '001',
ancestors: '0',
orderNum: 0,
holder: 'admin',
createDate: '2024-10-24 10:04:04',
updateDate: '2024-10-24 10:04:04',
// "children" : [ ],
selectType: null,
},
{
delFlag: '0',
flag: '1',
businessId: 101,
modelName: '知识库模型1',
EngName:'modelOne',
describe:'知识库模型1,数据多',
workArea:'默认工作组',
parentId: 100,
'code:': '002',
ancestors: '0,100',
orderNum: 1,
// "children" : [ ],
selectType: null,
holder: 'admin',
createDate: '2024-10-24 10:04:04',
updateDate: '2024-10-24 10:04:04',
},
{
delFlag: '0',
flag: '1',
businessId: 102,
modelName: '知识库模型2',
EngName:'modelTwo',
describe:'知识库模型2,数据少',
workArea:'默认工作组',
parentId: 100,
'code:': '002',
ancestors: '0,100',
orderNum: 1,
// "children" : [ ],
selectType: null,
holder: 'admin',
createDate: '2024-10-24 10:04:04',
updateDate: '2024-10-24 10:04:04',
},
{
delFlag: '0',
flag: '1',
businessId: 103,
modelName: '知识库模型3',
EngName:'modelThree',
describe:'知识库模型3,数据很多',
workArea:'默认工作组',
parentId: 100,
'code:': '002',
ancestors: '0,100',
orderNum: 1,
// "children" : [ ],
selectType: null,
holder: 'admin',
createDate: '2024-10-24 10:04:04',
updateDate: '2024-10-24 10:04:04',
},
];
export const modelData: any[] = [
{
delFlag: '0',
flag: '1',
businessId: 309,
username: 'yonghu1',
nickName: '测试用户1',
userType: '1',
name: '测试用户1',
createDate: '2024-10-24 10:04:04',
institutionId: 105,
institutionName: '财务部门',
code: '123f',
identity: '1',
roleIds: null,
roleNames: '三级用户',
roleList: null,
menuList: [],
},
{
delFlag: '0',
flag: '1',
businessId: 310,
username: 'yonghu2',
nickName: '测试用户2',
userType: '1',
name: '测试用户2',
createDate: '2024-10-25 10:05:05',
sex: '0',
institutionId: 105,
institutionName: '财务部门',
code: '123a',
identity: '1',
roleIds: null,
roleNames: null,
roleList: null,
menuList: [],
},
{
delFlag: '0',
flag: '1',
businessId: 317,
username: 'yonghu3',
nickName: '测试用户3',
userType: '1',
name: '测试用户3',
createDate: '2024-10-26 10:06:06',
sex: '1',
institutionId: 102,
institutionName: '研发部门',
code: '123c',
identity: '1',
roleIds: null,
roleNames: '超级管理员',
roleList: null,
menuList: [],
},
{
delFlag: '0',
flag: '1',
businessId: 318,
username: 'yonghu4',
nickName: '测试用户4',
userType: '1',
name: '测试用户4',
createDate: '2024-10-26 10:06:06',
sex: '1',
institutionId: 102,
institutionName: '研发部门',
code: '123b',
identity: '1',
roleIds: null,
roleNames: '超级管理员',
roleList: null,
menuList: [],
},
{
delFlag: '0',
flag: '1',
businessId: 319,
username: 'yonghu5',
nickName: '测试用户5',
userType: '1',
name: '测试用户5',
createDate: '2024-10-26 10:06:06',
sex: '1',
institutionId: 102,
institutionName: '研发部门',
code: '123x',
identity: '1',
roleIds: null,
roleNames: '超级管理员',
roleList: null,
menuList: [],
},
];
export const editTableData: any[] = [
{
businessId: 1,
name: '数据源',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '库名',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '表名',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '资产类型',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '表类型',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '表注释',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '存储类型',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '是否为事务表',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '创建时间',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '创建者',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '发布时间',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '发布者',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
];
export const editColumnData: any[] = [
{
businessId: 1,
name: '列名',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '字段类型',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '字段类型参数',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '长度',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '精度',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '是否可为空',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '字段注释',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
];
export const editBucketData: any[] = [
{
businessId: 1,
name: '分桶数',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '分桶字段',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '排序字段',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '排序方式',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
];
export const editAreaData: any[] = [
{
businessId: 1,
name: '分区类型',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '分区字段',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '分区名',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
{
businessId: 1,
name: '分区值',
description: '',
englishName: '',
isWrite: 0,
isShow: 0,
type: '',
},
];
......@@ -63,7 +63,7 @@
]);
});
const getTitle = computed(() => '新建元模型');
const getTitle = computed(() => '新建文件');
function handleTree(data, id, parentId, children, rootId) {
id = id || 'id';
......
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