Commit 2230dbf5 authored by baiyinhao's avatar baiyinhao

修改质量任务

parent 3bfc9e79
<template> <template>
<div class="m-4 mr-0 overflow-hidden bg-white"> <div class="m-4 mr-0 overflow-hidden bg-white">
<BasicTree <BasicTree
title="主体" title="质量任务树"
ref="treeRef" ref="treeRef"
toolbar toolbar
search search
...@@ -15,11 +15,12 @@ ...@@ -15,11 +15,12 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {nextTick, onMounted, ref, unref} from 'vue'; import { nextTick, onMounted, ref, unref } from 'vue';
import {BasicTree, TreeActionType, TreeItem} from '@/components/Tree'; import { BasicTree, TreeActionType, TreeItem } from '@/components/Tree';
import { getDeptList } from '@/api/system/dept/dept'; import { getDeptList } from '@/api/system/dept/dept';
import {Nullable} from "@vben/types"; import { Nullable } from '@vben/types';
import {treeDataList} from "./mock"; import { treeDataList } from './mock';
defineOptions({ name: 'DeptTree' }); defineOptions({ name: 'DeptTree' });
const emit = defineEmits(['select']); const emit = defineEmits(['select']);
...@@ -27,21 +28,19 @@ import {nextTick, onMounted, ref, unref} from 'vue'; ...@@ -27,21 +28,19 @@ import {nextTick, onMounted, ref, unref} from 'vue';
const treeData = ref<TreeItem[]>([]); const treeData = ref<TreeItem[]>([]);
const treeRef = ref<Nullable<TreeActionType>>(null); const treeRef = ref<Nullable<TreeActionType>>(null);
async function fetch() {
async function fetch() { treeData.value = treeDataList;
treeData.value = treeDataList
await nextTick(() => { await nextTick(() => {
getTree().expandAll(true) getTree().expandAll(true);
}) });
} }
function getTree() { function getTree() {
const tree = unref(treeRef); const tree = unref(treeRef);
if (!tree) { if (!tree) {
throw new Error('tree is null!'); throw new Error('tree is null!');
} }
return tree; return tree;
} }
function handleSelect(keys) { function handleSelect(keys) {
emit('select', keys[0]); emit('select', keys[0]);
......
<template> <template>
<BasicModal width="40%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit"> <BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" /> <BasicForm @register="registerForm" />
<div class="modalRow">
<div>可见范围</div>
<div class="right">
<div class="clearAll"> 清空 </div>
<div>
<a-button type="primary">添加工作组</a-button>
</div>
</div>
</div>
<div class="addDialogBG">
<div style="float: right">
<Icon icon="ant-design:delete-outlined" :size="25" :color="'#ED6F6F'" />
</div>
<TreeTwo class="w-1/4 xl:w-1/5" @select="handleSelect" />
</div>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref, reactive} from 'vue'; import { ref, computed, unref } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { formSchema } from './mainBody.data'; import { formSchemaNewFolder } from './tempalte.data';
import {treeDataList} from './mock' import TreeTwo from './treeTwo.vue';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import {getMenuList} from "@/api/system/menu/menu"; import { treeDataList } from '@/views/dataQuality/template/mock';
defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']); defineOptions({ name: 'AccountModal' });
const { createMessage } = useMessage();
const isUpdate = ref(true); const emit = defineEmits(['success', 'register']);
const rowId = ref(''); const { createMessage } = useMessage();
//获取接口数据并放在下拉框里(这里是打开了一个弹框) const isUpdate = ref(true);
//初始化表单 const rowId = ref('');
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({ //获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100, labelWidth: 100,
baseColProps: { lg: 24, md: 24 }, baseColProps: { lg: 24, md: 24 },
schemas: formSchema, schemas: formSchemaNewFolder,
showActionButtonGroup: false, showActionButtonGroup: false,
actionColOptions: { actionColOptions: {
span: 23, span: 23,
}, },
}); });
//初始化弹框 //初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
console.log('1111111111111111111111111111111')
resetFields(); resetFields();
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate; isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) { if (unref(isUpdate)) {
// 通过id获取行详情信息 // 通过id获取行详情信息
// 塞值 // 塞值
setFieldsValue({ setFieldsValue({
...data.record, ...data.record,
}); });
} }
updateSchema({ updateSchema({
field: 'path', field: 'path',
componentProps: { treeData:treeDataList }, componentProps: { treeData: treeDataList },
});
}); });
});
const getTitle = computed(() => ('新建文件夹'));
const getTitle = computed(() => (!unref(isUpdate) ? '新建主体' : '编辑主体'));
async function handleSubmit() { async function handleSubmit() {
try { try {
const values = await validate(); const values = await validate();
setModalProps({ confirmLoading: true }); setModalProps({ confirmLoading: true });
...@@ -61,5 +81,33 @@ async function handleSubmit() { ...@@ -61,5 +81,33 @@ async function handleSubmit() {
} finally { } finally {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>
<style lang="scss" scoped>
.modalRow {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
.clearAll {
padding-right: 10px;
font-size: 16px;
}
.right {
display: flex;
align-items: center;
justify-content: space-between;
}
}
.addDialogBG {
width: 98%;
height: 400px;
margin: 10px;
padding: 20px;
border-radius: 10px;
background-color: #e8ecf7;
}
</style>
<template> <template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit" minHeight="150"> <BasicModal
<div style="display:flex;align-items: center"> v-bind="$attrs"
<div type="info" style="font-size:12px;cursor: pointer" @click="importTemplate">下载模板</div> @register="registerModal"
:title="getTitle"
@ok="handleSubmit"
minHeight="150"
>
<div style="display: flex; align-items: center">
<div type="info" style="font-size: 12px; cursor: pointer" @click="importTemplate"
>下载模板</div
>
</div> </div>
<div slot="tip" class="el-upload__tip" style="color:red">提示:仅允许导入“xls”或“xlsx”格式文件!</div> <template #tip>
<div class="el-upload__tip" style="color: red">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
</template>
<BasicUpload <BasicUpload
:maxSize="20" :maxSize="20"
:maxNumber="1" :maxNumber="1"
...@@ -15,48 +25,45 @@ ...@@ -15,48 +25,45 @@
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref, reactive} from 'vue'; import { ref, computed, unref, reactive } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicUpload } from '@/components/Upload'; import { BasicUpload } from '@/components/Upload';
import { downloadByData } from '@/utils/file/download'; import { downloadByData } from '@/utils/file/download';
import { Tag, Row, Col, Upload, Button,Checkbox } from 'ant-design-vue'; import { Tag, Row, Col, Upload, Button, Checkbox } from 'ant-design-vue';
import {downImportTemplate,userImport} from '@/api/system/user/user' import { downImportTemplate, userImport } from '@/api/system/user/user';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']); defineOptions({ name: 'AccountModal' });
const { createMessage } = useMessage();
const isUpdate = ref(true);
const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage();
const isUpdate = ref(true);
//初始化弹框 //初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
}); });
const getTitle = computed(() => ('主体导入')); const getTitle = computed(() => '质量任务导入');
/** 下载模板*/ /** 下载模板*/
function importTemplate() { function importTemplate() {}
} function handleChange(list: string[]) {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', list);
function handleChange(list: string[]) {
console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',list)
createMessage.success(`文件上传成功`); createMessage.success(`文件上传成功`);
} }
async function handleSubmit() { async function handleSubmit() {
try { try {
// const values = await validate(); // const values = await validate();
setModalProps({ confirmLoading: true }); setModalProps({ confirmLoading: true });
// TODO custom api // TODO custom api
closeModal(); closeModal();
emit('success'); emit('success');
} finally { } finally {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>
...@@ -3,11 +3,27 @@ ...@@ -3,11 +3,27 @@
<DeptTree class="w-1/4 xl:w-1/5" @select="handleSelect" /> <DeptTree 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 :disabled="getRowSelection().selectedRowKeys <=0" type="primary" @click="handleDeleteIds">删除</a-button> <a-scrollbar>
<a-button :disabled="getRowSelection().selectedRowKeys <=0" type="primary" >导出</a-button> <a-button
:disabled="getRowSelection().selectedRowKeys <= 0"
type="primary"
@click="handleDeleteIds"
>删除</a-button
>
<a-button :disabled="getRowSelection().selectedRowKeys <= 0" type="primary"
>导出</a-button
>
<a-button type="primary" @click="handleImport">导入</a-button> <a-button type="primary" @click="handleImport">导入</a-button>
<a-button type="primary" @click="handleAdd" >新增文件夹</a-button> <a-button type="primary" @click="handleAdd">新增文件夹</a-button>
<a-button type="primary" @click="handleAddMainBody" >新增主体</a-button> <a-button type="primary" @click="handleAddMainBody">新增质量任务文件</a-button>
<a-button type="primary" @click="handleQualityTaskSetting">配置质量任务文件</a-button>
<a-button type="primary" @click="handleQualityTaskRunSetting">配置运行</a-button>
<a-button type="primary" @click="handleQualityTaskRun">运行</a-button>
<a-button type="primary" @click="handleQualityTaskRunLog">查看报告</a-button>
<a-button type="primary" @click="handleQualityTaskOnline" v-if="true">上线</a-button>
<a-button type="primary" @click="handleQualityTaskOffline" v-if="false">下线</a-button>
<a-button type="primary" @click="handleQualityTaskService">跳转运维</a-button>
</a-scrollbar>
</template> </template>
<template #name="{ text, record }"> <template #name="{ text, record }">
<a @click="showDetails(record)"> {{ text }}</a> <a @click="showDetails(record)"> {{ text }}</a>
...@@ -39,56 +55,59 @@ ...@@ -39,56 +55,59 @@
</template> </template>
</BasicTable> </BasicTable>
<importModal @register="registerImport" @success="handleImportSuccess" /> <importModal @register="registerImport" @success="handleImportSuccess" />
<addFolder @register="register"/> <AddFolder @register="register" />
<remove-modal @register="registerRemove"/> <remove-modal @register="registerRemove" />
<main-body-modal @register="registerMain"/> <main-body-modal @register="registerMain" />
</PageWrapper> </PageWrapper>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive,unref,onDeactivated,onMounted } from 'vue'; import { reactive, unref, onDeactivated, onMounted } from 'vue';
import { BasicTable, useTable, TableAction } from '@/components/Table'; import { BasicTable, useTable, TableAction } from '@/components/Table';
import addFolder from "@/views/mainBody/addFolder.vue";
import { PageWrapper } from '@/components/Page'; import { PageWrapper } from '@/components/Page';
import DeptTree from './DeptTree.vue'; import DeptTree from './DeptTree.vue';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import { useModal } from '@/components/Modal'; import { useModal } from '@/components/Modal';
import ImportModal from './importModal.vue'; import ImportModal from './importModal.vue';
import {tableList} from "./mock"; import { tableList } from './mock';
import { columns, searchFormSchema } from './mainBody.data'; import { columns, searchFormSchema } from './mainBody.data';
import { useGo } from '@/hooks/web/usePage'; import { useGo } from '@/hooks/web/usePage';
import { downloadByData } from '@/utils/file/download'; import { downloadByData } from '@/utils/file/download';
import { useRoute,onBeforeRouteLeave } from 'vue-router'; import { useRoute, onBeforeRouteLeave } from 'vue-router';
import { useFilterStore } from '@/store/modules/filterData'; import { useFilterStore } from '@/store/modules/filterData';
import {useUserStore} from "@/store/modules/user"; import { useUserStore } from '@/store/modules/user';
import {router} from "@/router"; import { router } from '@/router';
import AddFolder from "@/views/mainBody/addFolder.vue"; import AddFolder from '@/views/dataQuality/task/addFolder.vue';
import RemoveModal from "@/views/mainBody/removeModal.vue"; import RemoveModal from '@/views/dataQuality/task/removeModal.vue';
import MainBodyModal from "@/views/mainBody/mainBodyModal.vue"; import MainBodyModal from '@/views/dataQuality/task/mainBodyModal.vue';
defineOptions({ name: 'AccountManagement' }); defineOptions({ name: 'AccountManagement' });
const { createMessage,createConfirm } = useMessage(); const { createMessage, createConfirm } = useMessage();
const filterStore = useFilterStore(); const filterStore = useFilterStore();
const route = useRoute(); const route = useRoute();
const go = useGo(); const go = useGo();
const [register, { openModal }] = useModal(); const [register, { openModal }] = useModal();
const [registerImport, { openModal: openImportModal }] = useModal(); const [registerImport, { openModal: openImportModal }] = useModal();
const [registerRemove, { openModal: openRemoveModal}] = useModal(); const [registerRemove, { openModal: openRemoveModal }] = useModal();
const [registerMain, { openModal: openMainModal}] = useModal(); const [registerMain, { openModal: openMainModal }] = useModal();
const searchInfo = reactive<Recordable>({}); const searchInfo = reactive<Recordable>({});
const [registerTable, { reload, updateTableDataRecord, getSearchInfo,getForm,getRowSelection }] = useTable({ const [
title: '主体管理列表', registerTable,
{ reload, updateTableDataRecord, getSearchInfo, getForm, getRowSelection },
] = useTable({
title: '质量任务列表',
api: async (params) => { api: async (params) => {
console.log('tableList',tableList) console.log('tableList', tableList);
const response = { const response = {
pageNu: "1", pageNu: '1',
pageSize: "10", pageSize: '10',
pages: "1", pages: '1',
total: tableList.length, total: tableList.length,
code:'', code: '',
message:'', message: '',
data: tableList, data: tableList,
}; };
return { ...response}; return { ...response };
}, },
rowKey: 'businessId', rowKey: 'businessId',
rowSelection: true, rowSelection: true,
...@@ -98,7 +117,7 @@ ...@@ -98,7 +117,7 @@
schemas: searchFormSchema, schemas: searchFormSchema,
autoSubmitOnEnter: true, autoSubmitOnEnter: true,
resetFunc: () => { resetFunc: () => {
searchInfo.deptId='' searchInfo.deptId = '';
}, },
}, },
useSearchForm: true, useSearchForm: true,
...@@ -116,7 +135,6 @@ ...@@ -116,7 +135,6 @@
}, },
}); });
function showDetails(record) { function showDetails(record) {
router.push({ router.push({
path: '/mainBody/details', path: '/mainBody/details',
...@@ -124,28 +142,56 @@ ...@@ -124,28 +142,56 @@
} }
/** 导入按钮*/ /** 导入按钮*/
function handleImport() { function handleImport() {
openImportModal(true,{ openImportModal(true, {});
})
} }
/** 新建文件夹*/ /** 新建文件夹*/
function handleAdd() { function handleAdd() {
openModal(true,{ openModal(true, {});
});
} }
function handleRemove() { function handleRemove() {
openRemoveModal(true,{}) openRemoveModal(true, {});
} }
/** 新建质量任务文件*/
function handleAddMainBody() { function handleAddMainBody() {
openMainModal(true,{ openMainModal(true, {
isUpdate: false, isUpdate: false,
}) });
}
/** 配置质量任务 未完成 应为弹窗 */
function handleQualityTaskSetting() {
go('/dataQuality/task');
}
/** 配置运行 未完成 应为弹窗*/
function handleQualityTaskRunSetting() {
go('/dataQuality/task');
}
/** 任务运行 未完成 应为弹窗*/
function handleQualityTaskRun() {
go('/dataQuality/task');
}
/** 查看报告 未完成 应为弹窗*/
function handleQualityTaskRunLog() {
go('/dataQuality/task');
}
/** 上线 未完成 应为弹窗*/
function handleQualityTaskOnline() {
go('/dataQuality/task');
}
/** 下线 未完成 应为弹窗*/
function handleQualityTaskOffline() {
go('/dataQuality/task');
} }
/** 跳转运维 未完成 应为弹窗*/
function handleQualityTaskService() {
go('/dataQuality/task');
}
/** 编辑按钮*/
function handleEdit(record: Recordable) { function handleEdit(record: Recordable) {
openMainModal(true,{ openMainModal(true, {
record, record,
isUpdate: true, isUpdate: true,
}) });
} }
function handleDeleteIds() { function handleDeleteIds() {
createConfirm({ createConfirm({
...@@ -164,9 +210,7 @@ ...@@ -164,9 +210,7 @@
reload(); reload();
} }
/** 导出按钮*/ /** 导出按钮*/
async function handleExport() { async function handleExport() {}
}
/** 导入成功*/ /** 导入成功*/
function handleImportSuccess() { function handleImportSuccess() {
reload(); reload();
...@@ -193,33 +237,31 @@ ...@@ -193,33 +237,31 @@
go('/system/account_detail/' + record.id); go('/system/account_detail/' + record.id);
} }
onMounted(() => { onMounted(() => {
const path = route.path const path = route.path;
if(filterStore.getSearchParams[path]) { if (filterStore.getSearchParams[path]) {
if(JSON.parse(filterStore.getSearchParams[path] !== {})){ if (JSON.parse(filterStore.getSearchParams[path] !== {})) {
const params = JSON.parse(filterStore.getSearchParams[path]) const params = JSON.parse(filterStore.getSearchParams[path]);
console.log('11111111111111111111111111111',params) console.log('11111111111111111111111111111', params);
getForm().setFieldsValue({ getForm().setFieldsValue({
page: params.page, page: params.page,
pageSize: params.pageSize, pageSize: params.pageSize,
username: params.username, username: params.username,
flag: params.flag, flag: params.flag,
}) });
searchInfo.deptId = params.deptId searchInfo.deptId = params.deptId;
} }
} }
}); });
onBeforeRouteLeave((to, from, next) => { onBeforeRouteLeave((to, from, next) => {
const params = Object.assign({},getSearchInfo(),getForm().getFieldsValue()); const params = Object.assign({}, getSearchInfo(), getForm().getFieldsValue());
console.log('path',from.path) console.log('path', from.path);
console.log('params',params) console.log('params', params);
filterStore.setSearchParams( filterStore.setSearchParams({
{
path: from.path, path: from.path,
param: { param: {
...params ...params,
} },
} });
)
next(); // 允许导航 next(); // 允许导航
}); });
</script> </script>
import {getAllRoleList} from '@/api/system/role/role'; import { getAllRoleList } from '@/api/system/role/role';
import { BasicColumn, FormSchema } from '@/components/Table'; import { BasicColumn, FormSchema } from '@/components/Table';
import {h} from "vue"; import { h } from 'vue';
import {Tag} from "ant-design-vue"; import { Tag, Switch } from 'ant-design-vue';
import { Switch } from 'ant-design-vue'; import { useMessage } from '@/hooks/web/useMessage';
import {useMessage} from "@/hooks/web/useMessage"; import { changeFlagApi } from '@/api/system/user/user';
import {changeFlagApi} from "@/api/system/user/user"; // 引入开关组件 import { s } from 'node_modules/vite/dist/node/types.d-aGj9QkWt';
// 引入开关组件
type CheckedType = boolean | string | number; type CheckedType = boolean | string | number;
/** /**
* transform mock data * transform mock data
...@@ -29,36 +30,66 @@ export const deptMap = (() => { ...@@ -29,36 +30,66 @@ export const deptMap = (() => {
})(); })();
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
// {
// title: '质量规则',
// dataIndex: 'name',
// width: 120,
// slots: { customRender: 'name' },
// },
{
title: '质量规则',
dataIndex: 'qualityRule',
width: 120,
},
{ {
title: '主体名称', title: '数据源',
dataIndex: 'name', dataIndex: 'dataSource',
width: 120, width: 120,
slots: { customRender: 'name' }, sorter: true,
}, },
{ {
title: '描述', title: '目录',
dataIndex: 'des', dataIndex: 'catalog',
width: 120, width: 120,
sorter: true,
}, },
{ {
title: '来源', title: '数据库',
dataIndex: 'from', dataIndex: 'database',
width: 120, width: 120,
sorter: true,
}, },
{ {
title: '创建者', title: '数据表',
dataIndex: 'creator', dataIndex: 'dataTable',
width: 120, width: 120,
sorter: true,
}, },
{ {
title: '创建时间', title: '字段',
dataIndex: 'createDate', dataIndex: 'fields',
width: 200, width: 120,
sorter: true,
}, },
{ {
title: '更新时间', title: '质量模板',
dataIndex: 'updateDate', dataIndex: 'qualityTemplate',
width: 200, width: 150,
},
{
title: '规则组',
dataIndex: 'ruleGroup',
width: 150,
},
{
title: '质量通过率',
dataIndex: 'qualityPassRate',
width: 120,
edit: true,
editable: true,
editComponentProps: {
suffix: '%',
},
}, },
]; ];
...@@ -81,7 +112,7 @@ export const formSchemaRemove: any = [ ...@@ -81,7 +112,7 @@ export const formSchemaRemove: any = [
getPopupContainer: () => document.body, getPopupContainer: () => document.body,
}, },
}, },
] ];
export const formSchemaMain: any = [ export const formSchemaMain: any = [
{ {
field: 'path', field: 'path',
...@@ -127,7 +158,7 @@ export const formSchemaMain: any = [ ...@@ -127,7 +158,7 @@ export const formSchemaMain: any = [
defaultValue: '主体管理', defaultValue: '主体管理',
colProps: { span: 8 }, colProps: { span: 8 },
componentProps: { componentProps: {
readOnly:true, readOnly: true,
disabled: true, disabled: true,
placeholder: '输入描述', placeholder: '输入描述',
}, },
...@@ -139,7 +170,7 @@ export const formSchemaMain: any = [ ...@@ -139,7 +170,7 @@ export const formSchemaMain: any = [
defaultValue: '资源自定义', defaultValue: '资源自定义',
colProps: { span: 8 }, colProps: { span: 8 },
componentProps: { componentProps: {
readOnly:true, readOnly: true,
disabled: true, disabled: true,
placeholder: '输入描述', placeholder: '输入描述',
}, },
...@@ -152,12 +183,10 @@ export const formSchemaMain: any = [ ...@@ -152,12 +183,10 @@ export const formSchemaMain: any = [
colProps: { span: 8 }, colProps: { span: 8 },
componentProps: { componentProps: {
placeholder: '输入描述', placeholder: '输入描述',
options: [ options: [{ label: '默认工作组', value: '默认工作组' }],
{ label: '默认工作组', value: '默认工作组' },
],
}, },
}, },
] ];
export const formSchema: any = [ export const formSchema: any = [
{ {
field: 'name', field: 'name',
...@@ -186,7 +215,7 @@ export const formSchema: any = [ ...@@ -186,7 +215,7 @@ export const formSchema: any = [
getPopupContainer: () => document.body, getPopupContainer: () => document.body,
}, },
}, },
] ];
export const searchFormSchema: FormSchema[] = [ export const searchFormSchema: FormSchema[] = [
{ {
...@@ -204,9 +233,7 @@ export const searchFormSchema: FormSchema[] = [ ...@@ -204,9 +233,7 @@ export const searchFormSchema: FormSchema[] = [
component: 'Select', component: 'Select',
componentProps: { componentProps: {
placeholder: '按来源过滤', placeholder: '按来源过滤',
options: [ options: [{ label: '指标汇总表', value: '1' }],
{ label: '指标汇总表', value: '1' },
],
}, },
colProps: { span: 8 }, colProps: { span: 8 },
}, },
...@@ -222,14 +249,14 @@ export const resetPasswordFormSchema: any[] = [ ...@@ -222,14 +249,14 @@ export const resetPasswordFormSchema: any[] = [
required: true, required: true,
// ifShow: false, // ifShow: false,
}, },
] ];
const passwordCheck = (rule, value, callback) => { const passwordCheck = (rule, value, callback) => {
const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/ const pattern = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;
if (!pattern.test(value)) { if (!pattern.test(value)) {
callback(new Error('新密码必须为数字与字母的组合')) callback(new Error('新密码必须为数字与字母的组合'));
} }
callback() callback();
} };
export const accountFormSchema: any[] = [ export const accountFormSchema: any[] = [
{ {
field: 'username', field: 'username',
...@@ -255,21 +282,19 @@ export const accountFormSchema: any[] = [ ...@@ -255,21 +282,19 @@ export const accountFormSchema: any[] = [
{ min: 8, max: 16, message: '长度在 8 到 16 个字符', trigger: 'blur' }, { min: 8, max: 16, message: '长度在 8 到 16 个字符', trigger: 'blur' },
{ {
validator: passwordCheck, validator: passwordCheck,
trigger: 'blur' trigger: 'blur',
} },
], ],
}, },
{ {
field: 'name', field: 'name',
label: '姓名', label: '姓名',
component: 'Input', component: 'Input',
}, },
{ {
field: 'nickName', field: 'nickName',
label: '昵称', label: '昵称',
component: 'Input', component: 'Input',
}, },
{ {
field: 'sex', field: 'sex',
...@@ -291,8 +316,8 @@ export const accountFormSchema: any[] = [ ...@@ -291,8 +316,8 @@ export const accountFormSchema: any[] = [
{ {
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: '请输入正确的手机号码', message: '请输入正确的手机号码',
trigger: 'blur' trigger: 'blur',
} },
], ],
}, },
{ {
...@@ -303,9 +328,9 @@ export const accountFormSchema: any[] = [ ...@@ -303,9 +328,9 @@ export const accountFormSchema: any[] = [
{ {
required: false, required: false,
message: '请输入身份证号', message: '请输入身份证号',
trigger: 'blur' trigger: 'blur',
}, },
{ min: 18, max: 18, message: '长度18字符', trigger: 'blur' } { min: 18, max: 18, message: '长度18字符', trigger: 'blur' },
], ],
}, },
{ {
...@@ -317,8 +342,8 @@ export const accountFormSchema: any[] = [ ...@@ -317,8 +342,8 @@ export const accountFormSchema: any[] = [
{ {
type: 'email', type: 'email',
message: '请输入正确的邮箱地址', message: '请输入正确的邮箱地址',
trigger: ['blur', 'change'] trigger: ['blur', 'change'],
} },
], ],
}, },
{ {
...@@ -359,12 +384,11 @@ export const accountFormSchema: any[] = [ ...@@ -359,12 +384,11 @@ export const accountFormSchema: any[] = [
api: getAllRoleList, api: getAllRoleList,
labelField: 'roleName', labelField: 'roleName',
valueField: 'businessId', valueField: 'businessId',
resultField:'data', resultField: 'data',
}, },
required: true, required: true,
}, },
{ {
label: '备注', label: '备注',
field: 'remarks', field: 'remarks',
......
<template> <template>
<BasicModal width="40%" v-bind="$attrs" @register="registerModal" :title="getTitle" @ok="handleSubmit"> <BasicModal
width="40%"
v-bind="$attrs"
@register="registerModal"
:title="getTitle"
@ok="handleSubmit"
>
<BasicForm @register="registerForm" /> <BasicForm @register="registerForm" />
<div class="modalRow"> <div class="modalRow">
<div>可见范围</div> <div>可见范围</div>
<div class="right"> <div class="right">
<div class="clearAll"> <div class="clearAll"> 清空 </div>
清空
</div>
<div> <div>
<a-button type="primary">添加工作组</a-button> <a-button type="primary">添加工作组</a-button>
</div> </div>
...@@ -21,23 +25,24 @@ ...@@ -21,23 +25,24 @@
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref, reactive} from 'vue'; import { ref, computed, unref, reactive } from 'vue';
import { BasicModal, useModalInner } from '@/components/Modal'; import { BasicModal, useModalInner } from '@/components/Modal';
import { BasicForm, useForm } from '@/components/Form'; import { BasicForm, useForm } from '@/components/Form';
import { formSchemaMain } from './mainBody.data'; import { formSchemaMain } from './mainBody.data';
import TreeTwo from './treeTwo.vue'; import TreeTwo from './treeTwo.vue';
import { useMessage } from '@/hooks/web/useMessage'; import { useMessage } from '@/hooks/web/useMessage';
import {getMenuList} from "@/api/system/menu/menu"; import { getMenuList } from '@/api/system/menu/menu';
import {treeDataList} from "@/views/mainBody/mock"; import { treeDataList } from '@/views/dataQuality/task/mock';
defineOptions({ name: 'AccountModal' });
defineOptions({ name: 'AccountModal' });
const emit = defineEmits(['success', 'register']); const emit = defineEmits(['success', 'register']);
const { createMessage } = useMessage(); const { createMessage } = useMessage();
const isUpdate = ref(true); const isUpdate = ref(true);
const rowId = ref(''); const rowId = ref('');
//获取接口数据并放在下拉框里(这里是打开了一个弹框) //获取接口数据并放在下拉框里(这里是打开了一个弹框)
//初始化表单 //初始化表单
const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({ const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = useForm({
labelWidth: 100, labelWidth: 100,
baseColProps: { lg: 24, md: 24 }, baseColProps: { lg: 24, md: 24 },
schemas: formSchemaMain, schemas: formSchemaMain,
...@@ -45,15 +50,13 @@ const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] = ...@@ -45,15 +50,13 @@ const [registerForm, { setFieldsValue, updateSchema, resetFields, validate }] =
actionColOptions: { actionColOptions: {
span: 23, span: 23,
}, },
}); });
//初始化弹框 //初始化弹框
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
resetFields(); resetFields();
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate; isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) { if (unref(isUpdate)) {
// 通过id获取行详情信息 // 通过id获取行详情信息
// 塞值 // 塞值
setFieldsValue({ setFieldsValue({
...@@ -63,16 +66,13 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data ...@@ -63,16 +66,13 @@ const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data
updateSchema({ updateSchema({
field: 'path', field: 'path',
componentProps: { treeData:treeDataList }, componentProps: { treeData: treeDataList },
});
}); });
}); const getTitle = computed(() => (!unref(isUpdate) ? '新建质量任务' : '编辑质量任务'));
const getTitle = computed(() => (!unref(isUpdate) ? '新建主体' : '编辑主体'));
async function handleSubmit() { async function handleSubmit() {
try { try {
const values = await validate(); const values = await validate();
setModalProps({ confirmLoading: true }); setModalProps({ confirmLoading: true });
...@@ -82,30 +82,33 @@ async function handleSubmit() { ...@@ -82,30 +82,33 @@ async function handleSubmit() {
} finally { } finally {
setModalProps({ confirmLoading: false }); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.modalRow{ .modalRow {
padding: 0 20px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.clearAll{ padding: 0 20px;
.clearAll {
padding-right: 10px; padding-right: 10px;
font-size: 16px; font-size: 16px;
} }
.right{
.right {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
} }
.addDialogBG{
margin: 10px; .addDialogBG {
border-radius: 10px;
padding: 20px;
background-color: #E8ECF7;
width: 98%; width: 98%;
height: 400px; height: 400px;
} margin: 10px;
padding: 20px;
border-radius: 10px;
background-color: #e8ecf7;
}
</style> </style>
import { data } from '@/views/demo/excel/data';
export const tableList: any[] = [ export const tableList: any[] = [
{ {
businessId: 1, businessId: 1,
...@@ -7,6 +9,15 @@ export const tableList: any[] = [ ...@@ -7,6 +9,15 @@ export const tableList: any[] = [
creator: 'admin', creator: 'admin',
createDate: '2024-10-25 10:04:05', createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05', updateDate: '2024-10-25 10:04:05',
qualityRule: 'grantee_type_1',
dataSource: 'mysql_1',
catalog: '-',
database: 'employees',
dataTable: 'departments',
fields: 'department_name',
qualityTemplate: '非空检查',
ruleGroup: 'bingtest',
qualityPassRate: '100',
}, },
{ {
businessId: 2, businessId: 2,
...@@ -16,6 +27,15 @@ export const tableList: any[] = [ ...@@ -16,6 +27,15 @@ export const tableList: any[] = [
creator: 'admin', creator: 'admin',
createDate: '2024-10-25 10:04:05', createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05', updateDate: '2024-10-25 10:04:05',
qualityRule: 'grantee_type_2',
dataSource: 'Trino-test',
catalog: 'jmx',
database: 'information_data',
dataTable: 'applicable_roles_table',
fields: 'grantee_type',
qualityTemplate: '主键唯一',
ruleGroup: 'bingtest',
qualityPassRate: '100',
}, },
{ {
businessId: 3, businessId: 3,
...@@ -25,6 +45,15 @@ export const tableList: any[] = [ ...@@ -25,6 +45,15 @@ export const tableList: any[] = [
creator: 'admin', creator: 'admin',
createDate: '2024-10-25 10:04:05', createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05', updateDate: '2024-10-25 10:04:05',
qualityRule: 'grantee_type_2',
dataSource: 'Trino-test',
catalog: 'jmx',
database: 'information_data',
dataTable: 'applicable_roles_table',
fields: 'grantee_type',
qualityTemplate: '主键唯一',
ruleGroup: 'Trinotest',
qualityPassRate: '100',
}, },
{ {
businessId: 4, businessId: 4,
...@@ -34,49 +63,37 @@ export const tableList: any[] = [ ...@@ -34,49 +63,37 @@ export const tableList: any[] = [
creator: 'admin', creator: 'admin',
createDate: '2024-10-25 10:04:05', createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05', updateDate: '2024-10-25 10:04:05',
qualityRule: 'grantee_type_2',
dataSource: 'Trino-test',
catalog: 'jmx',
database: 'information_data',
dataTable: 'applicable_roles_table',
fields: 'grantee_type',
qualityTemplate: '主键唯一',
ruleGroup: 'Trinotest',
qualityPassRate: '100',
}, },
{ ];
businessId: 5,
name: '指标导入',
des: '--------',
from: '指标汇总表',
creator: 'admin',
createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05',
},
{
businessId: 6,
name: '指标导入',
des: '--------',
from: '指标汇总表',
creator: 'admin',
createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05',
},
{
businessId: 7,
name: '指标导入',
des: '--------',
from: '指标汇总表',
creator: 'admin',
createDate: '2024-10-25 10:04:05',
updateDate: '2024-10-25 10:04:05',
},
]
export const treeDataList = [ export const treeDataList = [
{ {
label: '主体管理', label: '主体管理',
businessId: 1, businessId: 1,
children: [ children: [
{ label: 'admin_个人工作区', businessId: 2 }, {
label: 'admin_个人工作区',
businessId: 2,
children: [
{ label: '个人工作区1', businessId: 6 },
{ label: '个人工作区2', businessId: 7 },
],
},
{ label: '共享工作区', businessId: 3 }, { label: '共享工作区', businessId: 3 },
{ label: '商城工作区', businessId: 4 }, { label: '商城工作区', businessId: 4 },
{ label: '指标工作区', businessId: 5 }, { label: '指标工作区', businessId: 5 },
], ],
}, },
] ];
export const treeDataListTwo = [ export const treeDataListTwo = [
{ {
label: '默认工作组', label: '默认工作组',
...@@ -88,4 +105,4 @@ export const treeDataListTwo = [ ...@@ -88,4 +105,4 @@ export const treeDataListTwo = [
{ label: '默认工作组04', businessId: 5 }, { label: '默认工作组04', businessId: 5 },
], ],
}, },
] ];
import { getAllRoleList } from '@/api/system/role/role';
import { BasicColumn, FormSchema } from '@/components/Table';
export const columns: BasicColumn[] = [
{
title: '名称',
dataIndex: 'name',
width: 120,
slots: { customRender: 'name' },
},
{
title: '数据源',
dataIndex: 'dataSource',
slots: { customRender: 'dataSource' },
width: 150,
},
{
title: '模板编号',
dataIndex: 'templateNumber',
width: 120,
},
{
title: '创建时间',
dataIndex: 'createTime',
width: 150,
},
{
title: '更新时间',
dataIndex: 'updateTime',
width: 150,
},
{
title: '拥有者',
dataIndex: 'owner',
width: 100,
},
{
title: '权属工作组',
dataIndex: 'workgroup',
width: 120,
},
];
export const searchFormSchema: FormSchema[] = [
{
field: 'name',
label: ' ',
component: 'Input',
colProps: { span: 8 },
componentProps: {
placeholder: '输入关键字搜索',
},
},
];
/**移动*/
export const MoveFormSchema: any[] = [
{
field: 'taskId',
label: '路径',
component: 'TreeSelect',
colProps: { lg: 24, md: 24 },
componentProps: {
// border: 'none',
fieldNames: {
label: 'fileName',
value: 'businessId',
},
getPopupContainer: () => document.body,
},
required: true,
},
];
export const formSchemaNewFolder: any = [
{
field: 'path',
label: '路径',
component: 'TreeSelect',
rules: [
{
required: true,
message: '请选择上级菜单',
},
],
componentProps: {
fieldNames: {
label: 'label',
value: 'businessId',
},
getPopupContainer: () => document.body,
},
},
{
field: 'name',
label: '文件夹名称',
component: 'Input',
colProps: { span: 8 },
componentProps: {
placeholder: '输入文件夹名称',
},
},
{
field: 'fileType',
label: '权限模式',
component: 'RadioGroup',
defaultValue: '本级定义',
colProps: { span: 8 },
componentProps: {
options: [
{ label: '本级定义', value: '本级定义' },
{ label: '资源自定义', value: '资源自定义' },
],
placeholder: '输入描述',
},
},
{
field: 'group',
label: '权属工作组',
component: 'Select',
defaultValue: '默认工作组',
colProps: { span: 8 },
componentProps: {
placeholder: '输入描述',
options: [{ label: '默认工作组', value: '默认工作组' }],
},
},
];
export const formSchemaTemplate: any = [
{
field: 'path',
label: '路径',
component: 'TreeSelect',
rules: [
{
required: true,
message: '请选择上级菜单',
},
],
componentProps: {
fieldNames: {
label: 'label',
value: 'businessId',
},
getPopupContainer: () => document.body,
},
},
{
field: 'name',
label: '文件名称',
component: 'Input',
colProps: { span: 8 },
componentProps: {
placeholder: '输入文件夹名称',
},
required: true,
},
{
field: 'fileType',
label: '文件类型',
component: 'Input',
defaultValue: '质量模板',
colProps: { span: 8 },
componentProps: {
readonly: true,
style: {
border: 'none',
backgroundColor: 'transparent',
},
},
},
{
field: 'dataSource',
label: '支持数据源',
component: 'Select',
colProps: { span: 8 },
componentProps: {
options: [
{ label: 'INCEPTOR', value: 'INCEPTOR' },
{ label: 'IMPALA', value: 'IMPALA' },
{ label: 'MYSQL', value: 'MYSQL' },
],
},
required: true,
},
{
field: 'model',
label: '目录权属模式',
component: 'RadioGroup',
defaultValue: '本级定义',
colProps: { span: 8 },
componentProps: {
options: [
{ label: '本级定义', value: '本级定义' },
{ label: '资源自定义', value: '资源自定义' },
],
},
},
{
field: 'group',
label: '权属工作组',
component: 'Select',
defaultValue: '默认工作组',
colProps: { span: 8 },
componentProps: {
placeholder: '输入描述',
options: [{ label: '默认工作组', value: '默认工作组' }],
},
},
];
export const importFormSchema: any[] = [
{
field: 'fileMethods',
label: '导入文件选择',
slot: 'fileMethods',
colProps: { lg: 24, md: 24, offset: 3 },
},
{
field: 'fileRename',
label: '文件重名',
component: 'RadioGroup',
required: true,
colProps: { lg: 24, md: 24, offset: 3 },
componentProps: {
options: [
{ label: '全部放弃', value: '1' },
{ label: '全部替换', value: '2' },
{ label: '自动重命名', value: '3' },
],
},
},
];
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