Commit 2230dbf5 authored by baiyinhao's avatar baiyinhao

修改质量任务

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