7166760b by xukangle

Merge branch 'develop' into dev_20241202_xukangle

2 parents 433bc83b c2785dc2
......@@ -24,7 +24,8 @@ const props = defineProps({
const emits = defineEmits(["expand"]);
const isExpanded = ref(true);
// const isExpanded = ref(true);
const isExpanded = ref(props.isExpand);
watch(
() => props.isExpand,
......@@ -46,14 +47,10 @@ const expandSwicthHandler = () => {
</script>
<template>
<ElCard
class="v-content-wrap"
shadow="never"
:body-style="{
padding: `0px`,
height: `${isExpanded ? contentHeight + 28 : 0}px`,
}"
>
<ElCard class="v-content-wrap" shadow="never" :body-style="{
padding: `0px`,
height: `${isExpanded ? contentHeight + 28 : 0}px`,
}">
<template v-if="title" #header>
<div class="card-title" @click="expandSwicthHandler">
<span v-if="expandSwicth" style="padding-right: 5px; cursor: pointer">
......
......@@ -15,7 +15,7 @@ const { required, orderNum } = useValidator();
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
const fullPath = route.query.fullPath;
const fullPath = route.fullPath;
const userStore = useUserStore();
const fullscreenLoading = ref(false);
......@@ -501,6 +501,7 @@ const saveUpdate = async () => {
});
saveLoading.value = false;
} else {
saveLoading.value = false;
proxy.$ElMessage.error(res.msg);
}
}
......@@ -517,6 +518,8 @@ const changeShowMethod = () => {
}
const cancel = () => {
console.log(userStore.tabbar);
console.log(fullPath);
proxy.$openMessageBox("当前页面尚未保存,确定放弃修改吗?", () => {
userStore.setTabbar(userStore.tabbar.filter((tab: any) => tab.fullPath !== fullPath));
router.push({
......@@ -673,7 +676,7 @@ const initGraph = () => {
},
getHGap: function getHGap() {
return 80;
}
},
}
});
graph.data(shapeTreeListData.value[0]);
......@@ -799,12 +802,16 @@ onMounted(() => {
// });
})
const isExpand = ref<boolean>(router.currentRoute.value.query.isExpand == 'true');
</script>
<template>
<div class="container_wrap" v-loading="fullscreenLoading">
<div class="content_main">
<ContentWrap id="id-baseInfo" title="基础信息" description="" style="margin-top: 8px;">
<ContentWrap id="id-baseInfo" title="基础信息" description="" style="margin-top: 8px;" :expandSwicth="true"
:isExpand="isExpand">
<Form ref="formRef" :itemList="classStandardFormItems" formId="main-model-edit" col="col3" />
</ContentWrap>
<ContentWrap id="id-classStandard" class="detail-content" title="分类标准" description=""
......@@ -852,6 +859,7 @@ onMounted(() => {
.content_main {
height: calc(100% - 44px);
padding: 10px 16px;
overflow: auto;
}
.bottom_tool_wrap {
......@@ -870,6 +878,7 @@ onMounted(() => {
.card-body-content {
height: 100%;
overflow: auto;
}
}
}
......@@ -885,11 +894,11 @@ onMounted(() => {
}
.shape-main {
height: calc(100% - 160px);
height: calc(100% - 44px);
}
.table_panel {
height: calc(100% - 160px) !important;
height: calc(100% - 44px) !important;
}
.node-details-popup {
......
......@@ -10,7 +10,7 @@ import { saveGrade, getGradeList, deleteGrade, getLargeCategoryList, updateGrade
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const route = useRoute();
const fullPath = route.query.fullPath;
const fullPath = route.fullPath;
onBeforeMount(() => {
getGradeListData();
getDataGrade();
......@@ -114,7 +114,7 @@ const tableInfo = ref({
multiple: true,
fields: [
{ label: "序号", type: 'index', width: 56, align: "center" },
{ label: "排序", field: 'orderNum', width: 56, align: "center" },
// { label: "排序", field: 'orderNum', width: 56, align: "center" },
{
label: "数据级别", field: "dataGrade", width: 120, getName: (scope) => {
let dataGrade = scope.row.dataGrade;
......@@ -140,7 +140,7 @@ const tableInfo = ref({
console.log(scope);
filterDataGradeEdit(scope.row.dataGrade);
newCreateGradeStandardDialogInfo.value.visible = true;
newCreateGradeStandardDialogInfo.value.title = '编辑分类';
newCreateGradeStandardDialogInfo.value.title = '编辑标准';
newCreateGradeFormItems.value.forEach(item => {
item.default = scope.row[item.field];
})
......@@ -231,7 +231,7 @@ const newCreateGradeFormItems = ref([{
visible: true,
},
{
label: '序号',
label: '序号',
type: 'input',
maxlength: 19,
placeholder: '请输入',
......@@ -268,7 +268,7 @@ const newCreateGradeFormRules = ref({
const newCreateGradeStandardDialogInfo = ref({
visible: false,
size: 860,
title: "添加分类",
title: "新增标准",
type: "",
formInfo: {
id: "grade-form",
......@@ -281,9 +281,8 @@ const newCreateGradeStandardDialogInfo = ref({
newCreateGradeStandardDialogInfo.value.visible = false;
},
submit: async (btn, info) => {
console.log(info, guid);
newCreateGradeStandardDialogInfo.value.submitBtnLoading = true;
if (newCreateGradeStandardDialogInfo.value.title === '编辑分类') {
if (newCreateGradeStandardDialogInfo.value.title === '编辑标准') {
const params = {
...info,
guid: editClassifyGradeGuid.value,
......@@ -294,7 +293,7 @@ const newCreateGradeStandardDialogInfo = ref({
if (res.code == proxy.$passCode) {
proxy.$ElMessage({
type: 'success',
message: '修改分类成功'
message: '编辑标准成功'
})
getGradeListData();
newCreateGradeStandardDialogInfo.value.submitBtnLoading = false;
......@@ -312,7 +311,7 @@ const newCreateGradeStandardDialogInfo = ref({
if (res.code == proxy.$passCode) {
proxy.$ElMessage({
type: 'success',
message: '新增分类成功'
message: '新增标准成功'
})
getGradeListData();
newCreateGradeStandardDialogInfo.value.submitBtnLoading = false;
......@@ -369,6 +368,7 @@ const saveUpdate = async () => {
});
saveLoading.value = false;
} else {
saveLoading.value = false;
proxy.$ElMessage.error(res.msg);
}
}
......@@ -417,6 +417,7 @@ const cancel = () => {
.content_main {
height: calc(100% - 44px);
padding: 10px 16px;
overflow: auto;
.table-top-btns {
margin-bottom: 12px;
......
......@@ -5,18 +5,12 @@
<script lang="ts" setup name="taskConfig">
import { ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import useDataAssetStore from "@/store/modules/dataAsset";
import { filterVal, getCgTaskPageList, cgTaskDelete, runExecTask } from "@/api/modules/dataInventory";
import { TableColumnWidth } from '@/utils/enum';
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData);
const assetStore = useDataAssetStore();
const loading = ref(false);
const page = ref({
......@@ -159,7 +153,7 @@ const toPath = (type) => {
query: {
guid: currTableData.value.guid,
name: currTableData.value.taskName,
detail: JSON.stringify(currTableData.value),
execGuid: currTableData.value.execGuid,
type
},
});
......
......@@ -5,13 +5,12 @@
<script lang="ts" setup name="taskDetail">
import { ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import { Search, Warning } from "@element-plus/icons-vue";
import { setItemsDisabled, tagMethod, tagType, changeNum, } from "@/utils/common";
import useDataAssetStore from "@/store/modules/dataAsset";
import { tagMethod, tagType, changeNum } from "@/utils/common";
import TableTools from '@/components/Tools/table_tools.vue';
import {
getCgTaskDetail,
getTaskExeTreeList,
getTaskFieldCount,
execTaskFieldList,
......@@ -26,22 +25,17 @@ import {
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData);
const assetStore = useDataAssetStore();
const detailData = JSON.parse(route.query.detail);
const loading = ref(false);
const gradeList = ref([]);
const treeData = ref([
{
classifyName: "全部",
guid: "all",
children: [
{ classifyName: '未分类', guid: 'unclassified' }
],
classifyDetailGuid: "all",
children: [],
},
]);
const currTreeNode = ref({ classifyName: "全部", guid: "all" })
const currTreeNode = ref({ classifyName: "全部", classifyDetailGuid: "all" })
const treeInfoRef = ref();
const treeInfo: any = ref({
id: "data-pickup-tree",
......@@ -50,9 +44,9 @@ const treeInfo: any = ref({
queryPlaceholder: "输入组织名称搜索",
props: {
label: "classifyName",
value: "guid",
value: "classifyDetailGuid",
},
nodeKey: 'guid',
nodeKey: 'classifyDetailGuid',
expandedKey: [],
expandOnNodeClick: false,
data: [],
......@@ -69,6 +63,7 @@ const tabsInfo = ref({
});
const cascaderRef = ref();
const sheetParams = ref({});
const sheetSearchRef = ref();
const sheetItemList = ref([
{
type: "select",
......@@ -99,6 +94,7 @@ const sheetItemList = ref([
},
]);
const fieldParams = ref({});
const fieldSearchRef = ref();
const fieldItemList = ref([
{
type: "select",
......@@ -165,7 +161,7 @@ const fieldItemList = ref([
checkStrictly: true,
expandTrigger: "hover",
label: "classifyName",
value: "guid",
value: "classifyDetailGuid",
},
filterable: true,
clearable: true,
......@@ -250,7 +246,7 @@ const fieldTableInfo = ref({
checkStrictly: false,
expandTrigger: "hover",
label: "classifyName",
value: "guid",
value: "classifyDetailGuid",
},
filterable: true,
clearable: true,
......@@ -301,7 +297,7 @@ const formItems = ref([
checkStrictly: false,
expandTrigger: "hover",
label: "classifyName",
value: "guid",
value: "classifyDetailGuid",
},
filterable: true,
clearable: true,
......@@ -363,6 +359,29 @@ const dialogInfo: any = ref({
},
})
// 获取任务详情
const getTaskDetail = (param) => {
loading.value = true;
getCgTaskDetail(param).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
taskDetail.value = res.data || {};
getFieldCount()
getSheetFieldList({ type: 1 });
getFieldTree()
getGradeData();
nextTick(() => {
getSheetTableData();
getFieldTableData();
})
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
})
}
// 获取字段统计
const getFieldCount = () => {
getTaskFieldCount({ execGuid: taskDetail.value.execGuid }).then((res: any) => {
......@@ -398,13 +417,16 @@ const getFieldTree = () => {
treeInfo.value.loading = false;
if (res.code == proxy.$passCode) {
const data = res.data || [];
treeData.value[0].children.splice(1);
treeData.value[0].children.push(...data);
const children: any = [
{ classifyName: '未分类', classifyDetailGuid: 'unclassified' },
...data
]
treeData.value[0].children = children;
treeInfo.value.data = treeData.value;
treeInfo.value.expandedKey = ['all'];
treeInfoRef.value.setCurrentKey('all');
formItems.value[0].options = JSON.parse(JSON.stringify(data));
fieldItemList.value[4].options = JSON.parse(JSON.stringify(data));
fieldItemList.value[4].options = JSON.parse(JSON.stringify(children));
fieldTableInfo.value.fields[4].options = JSON.parse(JSON.stringify(data));
} else {
ElMessage.error(res.msg);
......@@ -444,25 +466,26 @@ const tabChange = (val) => {
tabsInfo.value.activeName = val;
}
const nodeClick = (data) => {
const nodeClick = (data, node) => {
currTreeNode.value = data;
if (data.guid == 'all') {
getFieldTableData({ isClassify: '' })
} else if (data.guid == 'unclassified') {
getFieldTableData({ isClassify: 'N' })
if (data.classifyDetailGuid == 'all') {
fieldItemList.value[4].default = [];
getFieldTableData()
} else {
getFieldTableData({ isClassify: 'Y', classifyDetail: data.guid });
const parentGuids = data.parentGuids || [];
parentGuids.push(data.guid)
parentGuids.push(data.classifyDetailGuid)
fieldItemList.value[4].default = parentGuids;
console.log('tree', parentGuids)
getFieldTableData();
}
}
// 获取库表数据
const getSheetTableData = () => {
sheetTableInfo.value.loading = true;
const sheetParams = sheetSearchRef.value.toolSearch.formInline || {};
execTaskSheetList(
Object.assign({}, { ...sheetParams.value }, {
Object.assign({}, { ...sheetParams }, {
execGuid: taskDetail.value.execGuid,
pageIndex: sheetTableInfo.value.page.curr,
pageSize: sheetTableInfo.value.page.limit,
......@@ -484,15 +507,20 @@ const getSheetTableData = () => {
};
// 获取字段表格数据
const getFieldTableData = (param: any = {}) => {
const getFieldTableData = () => {
fieldTableInfo.value.loading = true;
const fieldParams = fieldSearchRef.value.toolSearch.formInline || {};
let params: any = {
...fieldParams.value,
...param,
...fieldParams,
execGuid: taskDetail.value.execGuid,
pageIndex: fieldTableInfo.value.page.curr,
pageSize: fieldTableInfo.value.page.limit,
}
const classifyName = params.classifyName?.at(-1) || undefined;
params.isClassify = classifyName === undefined ? '' : classifyName == 'unclassified' ? 'N' : 'Y';
if (classifyName && classifyName != 'unclassified') {
params.classifyDetail = classifyName;
}
delete params.classifyName
execTaskFieldList(params).then((res: any) => {
fieldTableInfo.value.loading = false;
......@@ -542,7 +570,7 @@ const tableBtnClick = (scope, btn) => {
treeInfo.value.expandedKey = ['all'];
treeInfoRef.value.setCurrentKey('all');
getSheetFieldList({ type: 2, databaseGuid: row.databaseGuid }, row.tableGuid);
getFieldTableData({ databaseGuid: row.databaseGuid, tableGuid: row.tableGuid });
getFieldTableData();
} else if (type == "edit") {
row.STATE = 'Running';
} else if (type == 'save') {
......@@ -573,8 +601,8 @@ const tablePageChange = (info) => {
sheetTableInfo.value.page.curr = Number(info.curr);
getSheetTableData();
} else {
fieldTableInfo.value.page.limit = page.value.limit;
fieldTableInfo.value.page.curr = page.value.curr;
fieldTableInfo.value.page.limit = Number(info.limit);
fieldTableInfo.value.page.curr = Number(info.curr);
getFieldTableData();
}
};
......@@ -602,27 +630,35 @@ const btnClick = async (btn, bType = null) => {
// 保存字段
const saveFields = (params, isBatch = false) => {
loading.value = true;
execFieldConfirm(params).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
ElMessage.success('保存成功');
isBatch && getFieldTableData();
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
})
}
// 任务确认
const saveTask = () => {
loading.value = true;
execTaskConfirm({ execGuid: taskDetail.value.execGuid }).then((res: any) => {
loading.value = false;
if (res.code == proxy.$passCode) {
ElMessage.success('保存成功');
ElMessage.success('变更成功');
router.push({
name: "taskConfig",
});
} else {
ElMessage.error(res.msg);
}
}).catch(() => {
loading.value = false;
})
}
......@@ -644,7 +680,10 @@ const searchField = (val: any, clear: boolean = false) => {
};
const cascaderChange = (val, row) => {
console.log(val, row);
treeInfoRef.value.expandedKey = val || ['all'];
treeInfoRef.value.setCurrentKey(val?.at(-1) || 'all');
console.log('cascader', val)
getFieldTableData();
};
const selectChange = (val, item, scope = null) => {
......@@ -716,28 +755,30 @@ onActivated(() => {
})
onBeforeMount(() => {
taskDetail.value = detailData;
getFieldCount()
getSheetFieldList({ type: 1 });
getFieldTree()
getSheetTableData();
getFieldTableData();
getGradeData();
if (route.query.type == 'log') {
getTaskDetail({ guid: route.query.guid, execGuid: route.query.execGuid });
} else {
getTaskDetail({ guid: route.query.guid });
}
})
onMounted(() => {
})
</script>
<template>
<div class="container_wrap full flex">
<div class="container_wrap full flex" v-loading="loading">
<div class="main_wrap full">
<div class="content_main panel">
<div class="template_panel">
<div class="panel_title">
<div class="title_wrap">
<span class="title_text">{{ taskDetail.taskName }}</span>
<el-tag :type="taskDetail.confirmStatus == 'Y' ? 'success' : 'warning'">{{
filterVal(taskDetail.confirmStatus,
'confirmStatus') }}</el-tag>
<el-tag :type="taskDetail.confirmStatus == 'Y' ? 'success' : 'warning'">
{{ filterVal(taskDetail.confirmStatus, 'confirmStatus') }}
</el-tag>
</div>
</div>
<div class="title_desc">
......@@ -749,17 +790,17 @@ onBeforeMount(() => {
</div>
<div class="desc_item">
<span class="desc_label">执行时间:</span>
<span class="desc_value">{{ taskDetail.cgDirName || '--' }}</span>
<span class="desc_value">{{ taskDetail.updateTime || '--' }}</span>
</div>
</div>
<div class="desc_group">
<div class="desc_item">
<span class="desc_label">分类:</span>
<span class="desc_value text_btn">{{ taskDetail.classifyName || '--' }}</span>
<span class="desc_value">{{ taskDetail.classifyName || '--' }}</span>
</div>
<div class="desc_item">
<span class="desc_label">分级:</span>
<span class="desc_value text_btn">{{ taskDetail.gradeName || '--' }}</span>
<span class="desc_value">{{ taskDetail.gradeName || '--' }}</span>
</div>
<div class="desc_item">
<span class="desc_label">元数据名称:</span>
......@@ -787,7 +828,7 @@ onBeforeMount(() => {
<Tabs class="panel_tabs" :tabs-info="tabsInfo" @tab-change="tabChange" />
<div class="panel" v-show="tabsInfo.activeName == 'sheet'">
<div class="table_tool_wrap">
<TableTools :searchItems="sheetItemList" :searchId="'sheet-search'" :init="false"
<TableTools ref="sheetSearchRef" :searchItems="sheetItemList" :searchId="'sheet-search'" :init="false"
@selectChange="selectChange" @search="searchSheet" />
</div>
<div class="table_panel_wrap">
......@@ -800,7 +841,7 @@ onBeforeMount(() => {
</div>
<div class="box_right">
<div class="table_tool_wrap">
<TableTools :searchItems="fieldItemList" :searchId="'field-search'" :init="false"
<TableTools ref="fieldSearchRef" :searchItems="fieldItemList" :searchId="'field-search'" :init="false"
@selectChange="selectChange" @cascaderChange="cascaderChange" @search="searchField" />
<div class="tools_btns">
<div class="btns">
......
......@@ -5,18 +5,13 @@
<script lang="ts" setup name="taskEdit">
import { ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import { Search } from "@element-plus/icons-vue";
import useDataAssetStore from "@/store/modules/dataAsset";
import { getCgTaskDetail, getClassifyGradList, getClassifyTreeList, getCgLabelPageList, getMetaTableCollectList, cgTaskSave, cgTaskUpdate } from "@/api/modules/dataInventory";
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData);
const assetStore = useDataAssetStore();
const step = ref(0);
const selectIndex = ref(0);
......
......@@ -5,20 +5,13 @@
<script lang="ts" setup name="taskLog">
import { ref, onMounted } from "vue";
import { useRouter, useRoute } from "vue-router";
import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import useDataAssetStore from "@/store/modules/dataAsset";
import { getTaskExecPageList, filterVal } from "@/api/modules/dataInventory";
import { TableColumnWidth } from '@/utils/enum';
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
const userStore = useUserStore();
const userData = JSON.parse(userStore.userData);
const assetStore = useDataAssetStore();
const loading = ref(false);
const page = ref({
limit: 50,
......@@ -71,12 +64,11 @@ const tableInfo = ref({
actionInfo: {
label: "操作",
type: "btn",
width: 100,
width: 90,
btns: (scope) => {
let row = scope.row, btnArr: any = [
{ label: "查看结果", value: "path" },
return [
{ label: "查看结果", value: "log" },
];
return btnArr;
},
},
});
......@@ -107,7 +99,7 @@ const tableBtnClick = (scope, btn) => {
const type = btn.value;
const row = scope.row;
currTableData.value = row;
if (type == "path") {
if (type == "log") {
toPath(type);
}
};
......@@ -116,8 +108,9 @@ const toPath = (type) => {
router.push({
name: "taskDetail",
query: {
guid: currTableData.value.guid,
name: currTableData.value.damName,
guid: currTableData.value.taskGuid,
name: currTableData.value.taskName,
execGuid: currTableData.value.guid,
type
},
});
......
......@@ -158,7 +158,8 @@ const handleClassDataClick = (item, des = '') => {
type: des === '' ? '配置' : des,
classStandardName: item.name,
refGradeGuid: item.refGradeGuid,
description: item.description
description: item.description,
isExpand: item.isExpand || false
}
});
}
......@@ -276,7 +277,8 @@ const newCreateClassStandardDialogInfo = ref({
name: item.name,
guid: item.guid,
refGradeGuid: item.refGradeGuid,
description: item.description
description: item.description,
isExpand: true
}
handleClassDataClick(params, '');
}
......@@ -312,6 +314,7 @@ const newCreateClassStandardDialogInfo = ref({
})
const newCreateClass = () => {
newCreateClassStandardDialogInfo.value.submitBtnLoading = false;
newCreateClassStandardDialogInfo.value.visible = true;
classStandardFormItems.value.forEach(item => item.default = '');
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!