Commit 39b3961e authored by 罗林杰's avatar 罗林杰

Merge remote-tracking branch 'origin/master'

parents d1eb1af4 32556020
<template>
<!-- 添加数据库弹窗 -->
<BasicModal
v-bind="$attrs"
@register="registerModal"
showFooter
:title="getTitle"
width="35%"
@ok="handleSubmit"
>
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
import {BasicForm, useForm} from '@/components/Form';
import {useModal, useModalInner} from '@/components/Modal';
import BasicModal from '@/components/Modal/src/BasicModal.vue';
import {useMessage} from "@/hooks/web/useMessage";
import {
addDataBaseFormSchema,
formSchema,
lookRecordFormSchema,
resetNameFormSchema
} from "@/views/dataSourceManage/connect/connect.data";
defineOptions({name: 'ResetNameModal'});
const emit = defineEmits(['success', 'register']);
const {createMessage} = useMessage();
const [registerLookRecordModal, {openModal: openLookRecordModal}] = useModal();
// 初始化弹窗
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
resetFields();
setModalProps({
showCancelBtn: false,
showOkBtn: false
});
setFieldsValue({
...data.record
})
});
const [registerForm, {resetFields, setFieldsValue, validate, setProps}] = useForm({
labelWidth: 90,
baseColProps: {span: 24},
schemas: addDataBaseFormSchema,
showActionButtonGroup: false
});
const getTitle = ref('新增数据库');
/** 确认按钮 */
function handleSubmit() {
closeModal()
}
</script>
...@@ -8,7 +8,13 @@ ...@@ -8,7 +8,13 @@
width="35%" width="35%"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm @register="registerForm"/> <BasicForm @register="registerForm">
</BasicForm>
<Alert
show-icon
message=""
description="请确保数据库账号拥有系统表的访问权限"
/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -18,6 +24,7 @@ import {useModalInner} from '@/components/Modal'; ...@@ -18,6 +24,7 @@ import {useModalInner} from '@/components/Modal';
import BasicModal from '@/components/Modal/src/BasicModal.vue'; import BasicModal from '@/components/Modal/src/BasicModal.vue';
import {useMessage} from "@/hooks/web/useMessage"; import {useMessage} from "@/hooks/web/useMessage";
import {formSchema} from "@/views/dataSourceManage/connect/connect.data"; import {formSchema} from "@/views/dataSourceManage/connect/connect.data";
import { Alert } from 'ant-design-vue';
defineOptions({name: 'ConnectDrawer'}); defineOptions({name: 'ConnectDrawer'});
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
......
...@@ -43,7 +43,6 @@ const getTitle = ref('Krb5管理'); ...@@ -43,7 +43,6 @@ const getTitle = ref('Krb5管理');
/** 确认按钮 */ /** 确认按钮 */
async function handleSubmit() { async function handleSubmit() {
const values = await validate();
createMessage.success('新增成功!') createMessage.success('新增成功!')
closeModal() closeModal()
} }
......
<template>
<!-- 查看日志弹窗 -->
<BasicModal
v-bind="$attrs"
@register="registerModal"
showFooter
:title="getTitle"
width="35%"
@ok="handleSubmit"
>
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
import {BasicForm, useForm} from '@/components/Form';
import {useModal, useModalInner} from '@/components/Modal';
import BasicModal from '@/components/Modal/src/BasicModal.vue';
import {useMessage} from "@/hooks/web/useMessage";
import {formSchema, lookRecordFormSchema, resetNameFormSchema} from "@/views/dataSourceManage/connect/connect.data";
defineOptions({name: 'ResetNameModal'});
const emit = defineEmits(['success', 'register']);
const {createMessage} = useMessage();
const [registerLookRecordModal, {openModal: openLookRecordModal}] = useModal();
// 初始化弹窗
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
resetFields();
setModalProps({
showCancelBtn: false,
showOkBtn: false
});
setFieldsValue({
...data.record
})
});
const [registerForm, {resetFields, setFieldsValue, validate, setProps}] = useForm({
labelWidth: 90,
baseColProps: {span: 24},
schemas: lookRecordFormSchema,
showActionButtonGroup: false
});
const getTitle = ref('查看日志');
/** 确认按钮 */
function handleSubmit() {
closeModal()
}
</script>
<template>
<BasicModal width="50%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit">
<Alert
show-icon
message=""
description="请先按照文件生成规范修改文件,然后上传"
/>
<div style="width: 50%">
<img src="../../../assets/images/offlineExecute.png" style="width: 195%" alt="Logo" />
</div>
<BasicTable @register="registerTable">
<template #toolbar>
<a-button type="primary" @click="handleAddButton">新增</a-button>
<BasicUpload
:maxSize="20"
:maxNumber="10"
@change="handleChange"
:api="uploadApi"
class="my-5"
:accept="['image/*']"
/>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{
label: '删除',
color: 'error',
popConfirm: {
title: '是否确认删除',
placement: 'left',
confirm: handleDelete.bind(null, record),
},
},
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
]"
/>
</template>
</template>
</BasicTable>
<!-- 新增/编辑 弹窗 -->
<AddDataBaseModal @register="registerAddDataBaseModal" @success="handleSuccess"/>
</BasicModal>
</template>
<script lang="ts" setup>
import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form';
import {reactive, unref, onDeactivated, onMounted, ref, computed} from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { useMessage } from '@/hooks/web/useMessage';
import { useModal } from '@/components/Modal';
import {columns, driveFormSchema, searchSchema} from '@/views/dataSourceManage/driveManage/drive.data.ts';
import { driveListData } from '@/views/dataSourceManage/driveManage/driveData.ts';
import DriverModal from "@/views/dataSourceManage/driveManage/DriveModal.vue";
import { Alert } from 'ant-design-vue';
import {offlineExecuteColumns, offlineExecuteSearchSchema} from "@/views/dataSourceManage/connect/connect.data";
import {offlineTableData} from "@/views/dataSourceManage/connect/connectData";
import AddDataBaseModal from "@/views/dataSourceManage/connect/AddDataBaseModal.vue";
import { BasicUpload } from '@/components/Upload';
import { uploadApi } from '@/api/sys/upload';
defineOptions({ name: 'AccountManagement' });
const { createMessage } = useMessage();
const [registerAddDataBaseModal, { openModal: openAddDataBaseModal }] = useModal();
const searchInfo = reactive<Recordable>({});
const emit = defineEmits(['success', 'register']);
const tableData = ref([])
const getTitle = computed(() => ('执行'));
const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({
title: '数据库列表',
api: async (params) => {
const response = {
pageNu: "1",
pageSize: "10",
pages: "1",
total: tableData.value.length,
code:'',
message:'',
data: tableData,
};
return { ...response, data: tableData };
},
columns:offlineExecuteColumns,
rowSelection: false,
formConfig: {
labelWidth: 100,
schemas: offlineExecuteSearchSchema,
autoSubmitOnEnter: false,
},
useSearchForm: true,
showTableSetting: false,
showIndexColumn: false,
bordered: true,
actionColumn: {
width: 100,
title: '操作',
dataIndex: 'action',
},
});
//初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false,showOkBtn: false,showCancelBtn: false });
});
/** 新增 按钮 */
async function handleAddButton(record: Recordable) {
openAddDataBaseModal(true, {
});
}
/** 删除 按钮 */
async function handleDelete(record: Recordable) {
createMessage.success('删除成功!');
}
/** 编辑 按钮 */
function handleEdit(record: Recordable) {
openDriverModal(true, {
isUpdate: true,
record: record,
});
}
onMounted(() => {
tableData.value = offlineTableData
});
</script>
...@@ -44,7 +44,11 @@ const getTitle = ref('执行'); ...@@ -44,7 +44,11 @@ const getTitle = ref('执行');
/** 确认按钮 */ /** 确认按钮 */
async function handleSubmit() { async function handleSubmit() {
const values = await validate(); const values = await validate();
createMessage.success('新增成功!') createMessage.info('正在尝试连接:');
setTimeout(() => {
createMessage.success('连接成功');
}, Math.floor(Math.random() * 2000) + 100)
closeModal() closeModal()
} }
</script> </script>
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
</template> </template>
</template> </template>
</BasicTable> </BasicTable>
<!-- 查看日志 弹窗 -->
<LookRecordModal @register="registerLookRecordModal" @success="handleSuccess"/>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive,unref,onDeactivated,onMounted,ref } from 'vue'; import { reactive,unref,onDeactivated,onMounted,ref } from 'vue';
...@@ -31,14 +33,14 @@ import { useFilterStore } from '@/store/modules/filterData'; ...@@ -31,14 +33,14 @@ import { useFilterStore } from '@/store/modules/filterData';
import { Button, Radio } from 'ant-design-vue'; import { Button, Radio } from 'ant-design-vue';
import {exportUserList} from "@/api/system/user/user"; import {exportUserList} from "@/api/system/user/user";
import {downloadByData} from "@/utils/file/download"; import {downloadByData} from "@/utils/file/download";
import LookRecordModal from "@/views/dataSourceManage/connect/LookRecordModal.vue";
defineOptions({ name: 'AccountManagement' }); defineOptions({ name: 'AccountManagement' });
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const filterStore = useFilterStore(); const filterStore = useFilterStore();
const route = useRoute(); const route = useRoute();
const go = useGo(); const go = useGo();
const [registerModal, { openModal }] = useModal(); const [registerLookRecordModal, { openModal: openLookRecordModal }] = useModal();
const [registerAddUserModal, { openModal:addUserModal }] = useModal();
const [registerMoveUser, { openModal: openMoveUserModal }] = useModal();
const searchInfo = reactive<Recordable>({}); const searchInfo = reactive<Recordable>({});
const tableData = ref([]) const tableData = ref([])
const show = ref(true); // 默认展示内容 const show = ref(true); // 默认展示内容
...@@ -82,9 +84,11 @@ function handleDelete(record: Recordable) { ...@@ -82,9 +84,11 @@ function handleDelete(record: Recordable) {
createMessage.success('删除成功!'); createMessage.success('删除成功!');
} }
/** 查看按钮*/ /** 查看日志按钮*/
function LookRecordButton() { function LookRecordButton(record: Recordable) {
openLookRecordModal(true, {
record
});
} }
/** 下载按钮*/ /** 下载按钮*/
......
...@@ -198,6 +198,7 @@ export const formSchema: FormSchema[any] = [ ...@@ -198,6 +198,7 @@ export const formSchema: FormSchema[any] = [
}, },
}, },
] ]
// 重命名表单 // 重命名表单
export const resetNameFormSchema: FormSchema[any] = [ export const resetNameFormSchema: FormSchema[any] = [
{ {
...@@ -225,7 +226,7 @@ export const kbr5FormSchema: FormSchema[any] = [ ...@@ -225,7 +226,7 @@ export const kbr5FormSchema: FormSchema[any] = [
field: 'file', field: 'file',
component: 'Upload', component: 'Upload',
label: 'Kbr5文件', label: 'Kbr5文件',
rules: [{ required: false, message: '请选择上传文件' }], rules: [{ required: true, message: '请选择上传文件' }],
componentProps: { componentProps: {
api: uploadApi, api: uploadApi,
}, },
...@@ -391,6 +392,7 @@ export const onlineCollectionFormSchema: FormSchema[any] = [ ...@@ -391,6 +392,7 @@ export const onlineCollectionFormSchema: FormSchema[any] = [
component: 'RadioGroup', component: 'RadioGroup',
label: '执行方式', label: '执行方式',
required: true, required: true,
defaultValue: '1',
componentProps: { componentProps: {
options: [ options: [
{ {
...@@ -409,3 +411,155 @@ export const onlineCollectionFormSchema: FormSchema[any] = [ ...@@ -409,3 +411,155 @@ export const onlineCollectionFormSchema: FormSchema[any] = [
}, },
}, },
] ]
// 执行离线采集表头
export const offlineExecuteColumns: BasicColumn[any] = [
{
title: '数据库名称',
dataIndex: 'dataBaseName',
width: 150,
},
{
title: '策略',
dataIndex: 'strategy',
width: 150,
},
];
// 执行离线采集搜索表头
export const offlineExecuteSearchSchema: FormSchema[any] = [
{
field: 'dataBaseName',
label: '',
component: 'Input',
colProps: {span: 7},
},
]
// 查看日志详情表单
export const lookRecordFormSchema: FormSchema[any] = [
{
field: 'dataBase',
label: '数据库',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'node',
label: '节点',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'startTime',
label: '开始时间',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'endTime',
label: '结束时间',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'consumeTime',
label: '耗时',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'collectionStatus',
label: '采集状态',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'dataTableNum',
label: '数据库表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'collectionTableNum',
label: '采集表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'addTableNum',
label: '新增表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'deleteTableNum',
label: '删除表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'updateTableNum',
label: '更新表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
{
field: 'noCollectTableNum',
label: '未采集表总数',
component: 'Input',
componentProps: {
readonly: true,
disabled: true,
}
},
]
//添加数据库表单
export const addDataBaseFormSchema: FormSchema[any] = [
{
field: 'dataBaseName',
label: '数据库',
component: 'Input',
required: true,
},
{
field: 'strategy',
label: '策略',
component: 'Input',
required: true,
},
]
...@@ -71,16 +71,16 @@ export const connectListData: any[] = [ ...@@ -71,16 +71,16 @@ export const connectListData: any[] = [
"connectType": "ORACLE", "connectType": "ORACLE",
"authStatus": "未认证", "authStatus": "未认证",
"foundDataSource": 10, "foundDataSource": 10,
"executionState": "执行成功", "executionState": "-",
"collectionType": "详细元数据", "collectionType": "不采集",
"isPeriodicCheck": "0", "isPeriodicCheck": "0",
"driveVersion": "oracle11", "driveVersion": "oracle11",
"delFlag": "0", "delFlag": "0",
"flag": "1", "flag": "1",
"createBy": "admin", "createBy": "admin",
"createDate": "2024-10-27 13:07:07", "createDate": "-",
"updateBy": "admin", "updateBy": "admin",
"updateDate": "2024-10-27 13:07:07", "updateDate": "-",
"hdfsMap":"hive", "hdfsMap":"hive",
"implementor":'admin', "implementor":'admin',
"collectionRate":'正常' "collectionRate":'正常'
...@@ -92,16 +92,16 @@ export const connectListData: any[] = [ ...@@ -92,16 +92,16 @@ export const connectListData: any[] = [
"connectType": "SQLSERVER", "connectType": "SQLSERVER",
"authStatus": "可连接", "authStatus": "可连接",
"foundDataSource": 8, "foundDataSource": 8,
"executionState": "执行成功", "executionState": "-",
"collectionType": "详细元数据", "collectionType": "离线采集",
"isPeriodicCheck": "0", "isPeriodicCheck": "0",
"driveVersion": "sqlserver4", "driveVersion": "sqlserver4",
"delFlag": "0", "delFlag": "0",
"flag": "1", "flag": "1",
"createBy": "admin", "createBy": "admin",
"createDate": "2024-10-28 14:08:08", "createDate": "-",
"updateBy": "admin", "updateBy": "admin",
"updateDate": "2024-10-28 14:08:08", "updateDate": "-",
"hdfsMap":"hive", "hdfsMap":"hive",
"implementor":'admin', "implementor":'admin',
"collectionRate":'正常' "collectionRate":'正常'
...@@ -290,3 +290,12 @@ export const recordTableData: any[] = [ ...@@ -290,3 +290,12 @@ export const recordTableData: any[] = [
"noCollectTableNum":'9', "noCollectTableNum":'9',
}, },
]; ];
// 列表数据
export const offlineTableData: any[] = [
{
"id": 1,
"dataBaseName": '',
"strategy": '',
}
];
...@@ -41,16 +41,19 @@ ...@@ -41,16 +41,19 @@
icon: 'ant-design:caret-right-filled', icon: 'ant-design:caret-right-filled',
// label: '执行', // label: '执行',
onClick: handleExecute.bind(null, record), onClick: handleExecute.bind(null, record),
ifShow: record.collectionType !== '不采集',
}, },
{ {
icon: 'ant-design:step-forward-filled', icon: 'ant-design:step-forward-filled',
// label: '停止', // label: '停止',
onClick: handleStopConnect.bind(null, record), onClick: handleStopConnect.bind(null, record),
ifShow: record.collectionType !== '不采集',
}, },
{ {
icon: 'ant-design:save-outlined', icon: 'ant-design:save-outlined',
// label: '采集详情', // label: '采集详情',
onClick: handleDetails.bind(null, record), onClick: handleDetails.bind(null, record),
ifShow: record.collectionType !== '不采集',
}, },
]" ]"
/> />
...@@ -69,8 +72,10 @@ ...@@ -69,8 +72,10 @@
<krb5Modal @register="registerKrb5Modal" @success="handleSuccess"/> <krb5Modal @register="registerKrb5Modal" @success="handleSuccess"/>
<!-- 数据源关联 弹窗 --> <!-- 数据源关联 弹窗 -->
<DataRelativeModal @register="registerDataRelativeModal" @success="handleSuccess"/> <DataRelativeModal @register="registerDataRelativeModal" @success="handleSuccess"/>
<!-- 在线执行 弹窗 --> <!-- 在线采集 弹窗 -->
<OnlineExecuteModal @register="registerOnlineExecuteModal" @success="handleSuccess"/> <OnlineExecuteModal @register="registerOnlineExecuteModal" @success="handleSuccess"/>
<!-- 离线采集 弹窗 -->
<OfflineExecuteModal @register="registerOfflineExecuteModal" @success="handleSuccess"/>
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
...@@ -93,6 +98,7 @@ ...@@ -93,6 +98,7 @@
import DataRelativeModal from "@/views/dataSourceManage/connect/DataRelativeModal.vue"; import DataRelativeModal from "@/views/dataSourceManage/connect/DataRelativeModal.vue";
import CollectRecordModal from "@/views/dataSourceManage/connect/CollectRecordModal.vue"; import CollectRecordModal from "@/views/dataSourceManage/connect/CollectRecordModal.vue";
import OnlineExecuteModal from "@/views/dataSourceManage/connect/OnlineExecuteModal.vue"; import OnlineExecuteModal from "@/views/dataSourceManage/connect/OnlineExecuteModal.vue";
import OfflineExecuteModal from "@/views/dataSourceManage/connect/OfflineExecuteModal.vue";
import {router} from "@/router"; import {router} from "@/router";
defineOptions({ name: 'AccountManagement' }); defineOptions({ name: 'AccountManagement' });
...@@ -107,6 +113,7 @@ ...@@ -107,6 +113,7 @@
const [registerKrb5Modal, {openModal: openKrb5Modal}] = useModal(); const [registerKrb5Modal, {openModal: openKrb5Modal}] = useModal();
const [registerDataRelativeModal, {openModal: openDataRelativeModal}] = useModal(); const [registerDataRelativeModal, {openModal: openDataRelativeModal}] = useModal();
const [registerOnlineExecuteModal, {openModal: openOnlineExecuteModal}] = useModal(); const [registerOnlineExecuteModal, {openModal: openOnlineExecuteModal}] = useModal();
const [registerOfflineExecuteModal, {openModal: openOfflineExecuteModal}] = useModal();
const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({ const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({
title: '', title: '',
api: async (params) => { api: async (params) => {
...@@ -149,12 +156,18 @@ ...@@ -149,12 +156,18 @@
}, },
}); });
/** 在线执行 按钮 */ /** 执行 按钮 */
function handleExecute(data) { function handleExecute(data) {
if (data.collectionType === '离线采集'){
openOfflineExecuteModal(true, {
});
}else {
openOnlineExecuteModal(true, { openOnlineExecuteModal(true, {
}); });
} }
}
/** Krb5管理 按钮 */ /** Krb5管理 按钮 */
function handleKrbFiveManage() { function handleKrbFiveManage() {
......
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