7daf9d9d by xukangle

Merge branch 'develop' into dev_20241202_xukangle

2 parents ae2ab82f b4f46b1b
This diff could not be displayed because it is too large.
...@@ -76,7 +76,7 @@ export const updateRuleBizState = (params) => request({ ...@@ -76,7 +76,7 @@ export const updateRuleBizState = (params) => request({
76 76
77 /** 获取数据库表列表 */ 77 /** 获取数据库表列表 */
78 export const getDatabase = (params) => request({ 78 export const getDatabase = (params) => request({
79 url: `${import.meta.env.VITE_APP_API_BASEURL}/data-source/get-source-list`, 79 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/get-source-list`,
80 method: 'post', 80 method: 'post',
81 data: params 81 data: params
82 }) 82 })
...@@ -138,23 +138,20 @@ export const getRuleTypeList = () => request({ ...@@ -138,23 +138,20 @@ export const getRuleTypeList = () => request({
138 138
139 // 获取规则大类的接口 139 // 获取规则大类的接口
140 export const getLargeCategoryList = () => request({ 140 export const getLargeCategoryList = () => request({
141 url:`${import.meta.env.VITE_APP_API_BASEURL}/data-dict/get-data-list`, 141 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType?dictType=${'规则大类'}`,
142 method: 'post', 142 method: 'get',
143 data: { paramCode: "LARGE-CATEGORY" }
144 }) 143 })
145 144
146 // 获取规则小类的接口 145 // 获取规则小类的接口
147 export const getSmallCategoryList = () => request({ 146 export const getSmallCategoryList = () => request({
148 url:`${import.meta.env.VITE_APP_API_BASEURL}/data-dict/get-data-list`, 147 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType?dictType=${'规则小类'}`,
149 method: 'post', 148 method: 'get',
150 data: { paramCode: "SMALL-CATEGORY" }
151 }) 149 })
152 150
153 // 获取规范性检验规则。 151 // 获取规范性检验规则。
154 export const getCheckRulesList = () => request({ 152 export const getCheckRulesList = () => request({
155 url:`${import.meta.env.VITE_APP_API_BASEURL}/data-dict/get-data-list`, 153 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType?dictType=${'正则校验'}`,
156 method: 'post', 154 method: 'get',
157 data: { paramCode: "REGULAR_RULE" }
158 }) 155 })
159 156
160 // 根据规则guid获取规则的详情信息。 157 // 根据规则guid获取规则的详情信息。
......
...@@ -23,6 +23,7 @@ export const parseAndDecodeUrl = (url:string) => { ...@@ -23,6 +23,7 @@ export const parseAndDecodeUrl = (url:string) => {
23 23
24 // 返回去掉主机信息和开头斜杠后的解码部分以及最后一个斜杠后面的内容 24 // 返回去掉主机信息和开头斜杠后的解码部分以及最后一个斜杠后面的内容
25 return { 25 return {
26 fileName: pathname,
26 decodedPath: pathname + search + hash, 27 decodedPath: pathname + search + hash,
27 lastPart: lastPart 28 lastPart: lastPart
28 }; 29 };
......
...@@ -27,8 +27,7 @@ export const refreshToken = (params) => { ...@@ -27,8 +27,7 @@ export const refreshToken = (params) => {
27 27
28 export const getSystemMenu = (params) => { 28 export const getSystemMenu = (params) => {
29 return request({ 29 return request({
30 url: `${ 30 url: `${import.meta.env.VITE_APP_AUTH_URL
31 import.meta.env.VITE_APP_AUTH_URL
32 }/product-menu-permission/tenant/get-product-menu?tenantGuid=${params.tenantGuid}&platformSystemGuid=32774fcfdf5e43e8b866660374d8bced`, 31 }/product-menu-permission/tenant/get-product-menu?tenantGuid=${params.tenantGuid}&platformSystemGuid=32774fcfdf5e43e8b866660374d8bced`,
33 method: "get", 32 method: "get",
34 }); 33 });
...@@ -217,3 +216,62 @@ export const exportDictionary = (params) => request({ ...@@ -217,3 +216,62 @@ export const exportDictionary = (params) => request({
217 data: params, 216 data: params,
218 responseType: 'blob' 217 responseType: 'blob'
219 }) 218 })
219
220 /**
221 * 数据源管理
222 **/
223 // 分页查询
224 export const getDataSourceList = (params) => request({
225 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/list`,
226 method: "post",
227 data: params,
228 });
229
230 // 获取数据源列表
231 export const getDataSource = (params) => request({
232 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/get-source-list`,
233 method: "post",
234 data: params,
235 });
236 // 新增
237 export const addDataSource = (params) => request({
238 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/save`,
239 method: "post",
240 data: params,
241 });
242 // 删除
243 export const deleteDataSource = (params) => request({
244 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/delete`,
245 method: "delete",
246 data: params,
247 });
248 // 修改
249 export const updateDataSource = (params) => request({
250 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/update`,
251 method: "put",
252 data: params,
253 });
254 // 查看数据源详情
255 export const getDataSourceDetail = (params) => request({
256 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/detail/${params}`,
257 method: "get",
258 });
259 // 连通检测
260 export const checkDataSourceConnect = (params) => request({
261 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/check-connect`,
262 method: "post",
263 params,
264 });
265 // 连接测试
266 export const checkDataSourceConnectTest = (params) => request({
267 url: `${import.meta.env.VITE_APP_DATA_SOURCE_URL}/data-source/check-connect-test`,
268 method: "post",
269 data: params,
270 });
271
272 // 获取所有参数列表
273 export const getAllFlowData = (params) => request({
274 url: `${import.meta.env.VITE_APP_CONFIG_URL}/dict/data/get-by-dictType`,
275 method: 'get',
276 params
277 })
......
...@@ -337,7 +337,8 @@ const handlePictureCardPreview = (file, item) => { ...@@ -337,7 +337,8 @@ const handlePictureCardPreview = (file, item) => {
337 const onUploadFilePreview = async (file, item) => { 337 const onUploadFilePreview = async (file, item) => {
338 let f = formInline.value[item.field].find(i => i.name == file.name); 338 let f = formInline.value[item.field].find(i => i.name == file.name);
339 let url = f.url; 339 let url = f.url;
340 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).decodedPath); 340 let fileName: string = parseAndDecodeUrl(url).fileName;
341 const refSignInfo: any = await getDownFileSignByUrl(fileName);
341 if (!refSignInfo?.data) { 342 if (!refSignInfo?.data) {
342 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); 343 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
343 return; 344 return;
...@@ -360,7 +361,7 @@ const onUploadFilePreview = async (file, item) => { ...@@ -360,7 +361,7 @@ const onUploadFilePreview = async (file, item) => {
360 } 361 }
361 362
362 const downloadTemplate = async (url) => { 363 const downloadTemplate = async (url) => {
363 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).decodedPath); 364 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName);
364 if (!refSignInfo?.data) { 365 if (!refSignInfo?.data) {
365 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); 366 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
366 return; 367 return;
...@@ -379,7 +380,7 @@ const downloadTemplate = async (url) => { ...@@ -379,7 +380,7 @@ const downloadTemplate = async (url) => {
379 380
380 const onUploadFileDownload = async (file, item) => { 381 const onUploadFileDownload = async (file, item) => {
381 let url = file.url; 382 let url = file.url;
382 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).decodedPath); 383 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(url).fileName);
383 if (!refSignInfo?.data) { 384 if (!refSignInfo?.data) {
384 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); 385 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
385 return; 386 return;
......
...@@ -63,7 +63,7 @@ const routes: RouteRecordRaw[] = [ ...@@ -63,7 +63,7 @@ const routes: RouteRecordRaw[] = [
63 to.meta.title = `${to.query.name}-${to.query.status == 'Y'?'查看结果':'结果确认'}`; 63 to.meta.title = `${to.query.name}-${to.query.status == 'Y'?'查看结果':'结果确认'}`;
64 to.meta.editPage = to.query.status == 'Y'? false: true; 64 to.meta.editPage = to.query.status == 'Y'? false: true;
65 } else { 65 } else {
66 to.meta.title = `${to.query.name}-${to.query.type == 'confirm'?'结果确认':'结果修改'}`; 66 to.meta.title = `${to.query.name}-${to.query.status == 'Y'?'结果修改':'结果确认'}`;
67 to.meta.editPage = true; 67 to.meta.editPage = true;
68 } 68 }
69 } 69 }
...@@ -282,6 +282,27 @@ const routes: RouteRecordRaw[] = [ ...@@ -282,6 +282,27 @@ const routes: RouteRecordRaw[] = [
282 }, 282 },
283 ], 283 ],
284 }, 284 },
285 {
286 path: '/data-inventory/data-source',
287 component: Layout,
288 meta: {
289 title: '数据源管理',
290 icon: 'sidebar-videos',
291 },
292 children: [
293 {
294 path: '',
295 name: 'dataSource',
296 component: () => import('@/views/data_inventory/dataSource.vue'),
297 meta: {
298 title: '数据源管理',
299 sidebar: false,
300 breadcrumb: false,
301 cache: true
302 },
303 },
304 ],
305 },
285 ] 306 ]
286 307
287 export default routes 308 export default routes
......
...@@ -9,6 +9,7 @@ import { ElMessage, ElMessageBox } from 'element-plus'; ...@@ -9,6 +9,7 @@ import { ElMessage, ElMessageBox } from 'element-plus';
9 import { useRouter, useRoute } from "vue-router"; 9 import { useRouter, useRoute } from "vue-router";
10 import { MoreFilled } from "@element-plus/icons-vue"; 10 import { MoreFilled } from "@element-plus/icons-vue";
11 import { 11 import {
12 changeNum,
12 tagMethod, 13 tagMethod,
13 tagType, 14 tagType,
14 } from "@/utils/common"; 15 } from "@/utils/common";
...@@ -34,6 +35,13 @@ const route = useRoute(); ...@@ -34,6 +35,13 @@ const route = useRoute();
34 const { proxy } = getCurrentInstance() as any; 35 const { proxy } = getCurrentInstance() as any;
35 const path = route.path; 36 const path = route.path;
36 37
38 const loading = ref(false);
39 const defaultItemLogo = new URL('@/assets/images/home-finance-product.png', import.meta.url).href
40 const demandListData: any = ref([
41 { companyName: '北数所', listedNum: 16, processNum: 1235 },
42 { companyName: '深数所', listedNum: 16, processNum: 1235 },
43 { companyName: '苏数所', listedNum: 16, processNum: 1235 },
44 ]);
37 const searchItemList = ref([ 45 const searchItemList = ref([
38 { 46 {
39 type: "input", 47 type: "input",
...@@ -167,6 +175,9 @@ const getTableBtns = (row, includeDetail = true) => { ...@@ -167,6 +175,9 @@ const getTableBtns = (row, includeDetail = true) => {
167 175
168 const currTableData: any = ref({}); 176 const currTableData: any = ref({});
169 177
178 const btnClick = (btn) => {
179 }
180
170 const tableBtnClick = (scope, btn) => { 181 const tableBtnClick = (scope, btn) => {
171 const type = btn.value; 182 const type = btn.value;
172 const row = scope.row; 183 const row = scope.row;
...@@ -486,7 +497,33 @@ const createBtnVisible = computed(() => { ...@@ -486,7 +497,33 @@ const createBtnVisible = computed(() => {
486 </script> 497 </script>
487 498
488 <template> 499 <template>
489 <div class="container_wrap"> 500 <div class="container_wrap" v-loading="loading">
501 <div class="list-content">
502 <div class="card-content" v-for="item in demandListData" :key="item.guid">
503 <div class="header">
504 <img class="left-img" :src="(item.picUrl && typeof item.picUrl == 'string') ? item.picUrl : defaultItemLogo"
505 alt="" />
506 <div class="right-main">
507 <div class="title">{{ item.companyName ?? '--' }}</div>
508 <div class="count-group">
509 <div class="count-item">
510 <div class="item-label">已上架产品数</div>
511 <div class="item-num">{{ changeNum(item.listedNum) }}</div>
512 </div>
513 <div class="count-item">
514 <div class="item-label">审批中产品数</div>
515 <div class="item-num">{{ changeNum(item.processNum) }}</div>
516 </div>
517 </div>
518 </div>
519 </div>
520 <div class="operator-btn">
521 <div class="left-btn borderRight" @click="btnClick(item)">更新模板</div>
522 <div class="left-btn" @click="btnClick(item)">资产登记</div>
523 </div>
524 </div>
525 </div>
526 <div class="content_main_wrap">
490 <div class="table_tool_wrap"> 527 <div class="table_tool_wrap">
491 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" /> 528 <TableTools :searchItems="searchItemList" :searchId="'register-data-search'" @search="toSearch" />
492 <div class="tools_btns"> 529 <div class="tools_btns">
...@@ -554,6 +591,7 @@ const createBtnVisible = computed(() => { ...@@ -554,6 +591,7 @@ const createBtnVisible = computed(() => {
554 <Table v-else :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" /> 591 <Table v-else :tableInfo="tableInfo" @tableBtnClick="tableBtnClick" />
555 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" /> 592 <PageNav :class="[pageInfo.type]" :pageInfo="pageInfo" @pageChange="pageChange" />
556 </div> 593 </div>
594 </div>
557 <Dialog :dialogInfo="passDialogInfo" @btnClick="passDialogBtnClick" /> 595 <Dialog :dialogInfo="passDialogInfo" @btnClick="passDialogBtnClick" />
558 <Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" /> 596 <Dialog :dialogInfo="rejectDialogInfo" @btnClick="rejectDialogBtnClick" />
559 </div> 597 </div>
...@@ -561,7 +599,13 @@ const createBtnVisible = computed(() => { ...@@ -561,7 +599,13 @@ const createBtnVisible = computed(() => {
561 599
562 <style scoped lang="scss"> 600 <style scoped lang="scss">
563 .container_wrap { 601 .container_wrap {
564 padding: 0 16px; 602 padding: 16px 16px 0;
603 display: flex;
604 flex-direction: column;
605 }
606
607 .content_main_wrap {
608 flex: 1;
565 } 609 }
566 610
567 .table_panel { 611 .table_panel {
...@@ -696,4 +740,83 @@ const createBtnVisible = computed(() => { ...@@ -696,4 +740,83 @@ const createBtnVisible = computed(() => {
696 } 740 }
697 } 741 }
698 } 742 }
743
744 .list-content {
745 display: flex;
746 justify-content: space-between;
747 flex-wrap: wrap;
748 margin-bottom: 8px;
749
750 .card-content {
751 width: calc(33.33% - 10px);
752 padding: 16px;
753 box-shadow: 0 0 0 1px #d9d9d9;
754
755 .header {
756 display: flex;
757 margin-bottom: 16px;
758
759 img {
760 width: 80px;
761 margin-right: 16px;
762 }
763
764 .title {
765 font-size: 16px;
766 color: #212121;
767 font-weight: 600;
768 margin-bottom: 8px;
769 }
770
771 .right-main {
772 width: calc(100% - 96px);
773 display: flex;
774 flex-direction: column;
775 justify-content: space-between;
776
777 .count-group {
778 display: flex;
779 justify-content: space-between;
780
781 .item-num {
782 font-size: 20px;
783 font-weight: 600;
784 color: #212121;
785 margin-top: 8px;
786 }
787 }
788 }
789 }
790
791 .operator-btn {
792 display: flex;
793 justify-content: space-between;
794 align-items: center;
795 box-shadow: 0 0 0 1px #d9d9d9;
796 position: relative;
797
798 &::after {
799 content: '';
800 width: 0;
801 height: 100%;
802 border-left: 1px solid #d9d9d9;
803 position: absolute;
804 left: 50%;
805 transform: translateX(-50%);
806 }
807
808 >.left-btn {
809 width: 50%;
810 height: 40px;
811 line-height: 40px;
812 text-align: center;
813 cursor: pointer;
814
815 &:hover {
816 color: #4fa1a4;
817 }
818 }
819 }
820 }
821 }
699 </style> 822 </style>
......
...@@ -48,8 +48,7 @@ const treeInfo = ref({ ...@@ -48,8 +48,7 @@ const treeInfo = ref({
48 expandOnNodeClick: false, 48 expandOnNodeClick: false,
49 data: [], 49 data: [],
50 }); 50 });
51 const toolH = ref(82) 51
52 const toolRef = ref();
53 const expand1 = ref(true) 52 const expand1 = ref(true)
54 const expand2 = ref(true) 53 const expand2 = ref(true)
55 54
...@@ -154,7 +153,24 @@ const metadataTableInfo = ref({ ...@@ -154,7 +153,24 @@ const metadataTableInfo = ref({
154 }, 153 },
155 }) 154 })
156 155
156 /**
157 * 传入多个promise对象,当全部结束时取消Loading
158 * @param promises 传入多个promise对象,当全部结束时取消Loading
159 */
160 const promiseList = async (...promises: Promise<void>[]) => {
161 // loading方法全局封装成一个组件
162 loading.value = true;
163 try {
164 await Promise.all(promises);
165 } catch (e) {
166 loading.value = false;
167 } finally {
168 loading.value = false;
169 }
170 };
171
157 const getTaskDetail = (data) => { 172 const getTaskDetail = (data) => {
173 loading.value = true;
158 getCgTaskDetail(data).then((res: any) => { 174 getCgTaskDetail(data).then((res: any) => {
159 if (res.code == proxy.$passCode) { 175 if (res.code == proxy.$passCode) {
160 const data = res.data || {}; 176 const data = res.data || {};
...@@ -163,28 +179,31 @@ const getTaskDetail = (data) => { ...@@ -163,28 +179,31 @@ const getTaskDetail = (data) => {
163 item.default = data[item.field] || ''; 179 item.default = data[item.field] || '';
164 }) 180 })
165 selectRowData.value = data.metaGuids || []; 181 selectRowData.value = data.metaGuids || [];
166 getPermissionList({}); 182 promiseList(
167 getMetaTableData(); 183 getPermissionList(),
184 getMetaTableData()
185 )
168 } 186 }
187 }).catch(() => {
188 loading.value = false;
169 }) 189 })
170 } 190 }
171 191
172 const nodeClick = (data) => { 192 const nodeClick = (data) => {
173 searchItemValue.value.classifyGuid = templateInfo.value.guid; 193 searchItemValue.value.classifyGuid = templateInfo.value.guid;
174 searchItemValue.value.detailGuid = data.guid; 194 searchItemValue.value.detailGuid = data.guid;
175 getTableData(); 195 promiseList(
196 getTableData()
197 )
176 } 198 }
177 199
178 // 获取标签数据 200 // 获取标签数据
179 const getTableData = () => { 201 const getTableData = () => {
180 tableInfo.value.loading = true; 202 const params = Object.assign({}, searchItemValue.value, {
181 getCgLabelPageList(
182 Object.assign({}, searchItemValue.value, {
183 pageIndex: page.value.curr, 203 pageIndex: page.value.curr,
184 pageSize: page.value.limit, 204 pageSize: page.value.limit,
185 }) 205 })
186 ).then((res: any) => { 206 return getCgLabelPageList(params).then((res: any) => {
187 tableInfo.value.loading = false;
188 if (res.code == proxy.$passCode) { 207 if (res.code == proxy.$passCode) {
189 tableInfo.value.data = res.data.records || []; 208 tableInfo.value.data = res.data.records || [];
190 tableInfo.value.page.curr = res.data.pageIndex; 209 tableInfo.value.page.curr = res.data.pageIndex;
...@@ -193,7 +212,6 @@ const getTableData = () => { ...@@ -193,7 +212,6 @@ const getTableData = () => {
193 } 212 }
194 }) 213 })
195 .catch((res) => { 214 .catch((res) => {
196 tableInfo.value.loading = false;
197 }); 215 });
198 }; 216 };
199 217
...@@ -215,7 +233,9 @@ const tablePageChange = (info) => { ...@@ -215,7 +233,9 @@ const tablePageChange = (info) => {
215 page.value.limit = Number(info.limit); 233 page.value.limit = Number(info.limit);
216 tableInfo.value.page.limit = page.value.limit; 234 tableInfo.value.page.limit = page.value.limit;
217 tableInfo.value.page.curr = page.value.curr; 235 tableInfo.value.page.curr = page.value.curr;
218 getTableData(); 236 promiseList(
237 getTableData()
238 )
219 } else { 239 } else {
220 240
221 } 241 }
...@@ -223,8 +243,7 @@ const tablePageChange = (info) => { ...@@ -223,8 +243,7 @@ const tablePageChange = (info) => {
223 243
224 // 获取元数据表格 244 // 获取元数据表格
225 const getMetaTableData = () => { 245 const getMetaTableData = () => {
226 getMetaTableCollectList({}).then((res: any) => { 246 return getMetaTableCollectList({}).then((res: any) => {
227 metadataTableInfo.value.loading = false;
228 if (res.code == proxy.$passCode) { 247 if (res.code == proxy.$passCode) {
229 const data = res.data.records || []; 248 const data = res.data.records || [];
230 metadataTableInfo.value.data = data; 249 metadataTableInfo.value.data = data;
...@@ -236,16 +255,18 @@ const getMetaTableData = () => { ...@@ -236,16 +255,18 @@ const getMetaTableData = () => {
236 }) 255 })
237 } 256 }
238 } 257 }
258 }).catch(() => {
259
239 }) 260 })
240 } 261 }
241 262
242 const querySearch = (queryString: string) => { 263 const querySearch = (queryString: string) => {
243 listLoading.value = true 264 loading.value = true;
244 const results = queryString 265 const results = queryString
245 ? currpermissionList.value.filter(item => item.dataPermissionName.indexOf(queryString) > -1) 266 ? currpermissionList.value.filter(item => item.dataPermissionName.indexOf(queryString) > -1)
246 : permissionList.value; 267 : permissionList.value;
247 currpermissionList.value = results 268 currpermissionList.value = results
248 listLoading.value = false 269 loading.value = false;
249 } 270 }
250 271
251 const btnClick = async (btn, bType = null) => { 272 const btnClick = async (btn, bType = null) => {
...@@ -332,7 +353,7 @@ const submitForm = (formEl, info) => { ...@@ -332,7 +353,7 @@ const submitForm = (formEl, info) => {
332 const handleScroll = () => { 353 const handleScroll = () => {
333 if (listPage.value.curr < listPage.value.totalPages) { 354 if (listPage.value.curr < listPage.value.totalPages) {
334 listPage.value.curr++ 355 listPage.value.curr++
335 getPermissionList({}) 356 getPermissionList()
336 } 357 }
337 } 358 }
338 359
...@@ -340,20 +361,21 @@ const handleScroll = () => { ...@@ -340,20 +361,21 @@ const handleScroll = () => {
340 const listClick = (row) => { 361 const listClick = (row) => {
341 selectIndex.value = row.guid; 362 selectIndex.value = row.guid;
342 templateInfo.value = row; 363 templateInfo.value = row;
343 getClassifyTree();
344 searchItemValue.value.classifyGuid = row.guid; 364 searchItemValue.value.classifyGuid = row.guid;
345 searchItemValue.value.detailGuid = ''; 365 searchItemValue.value.detailGuid = '';
346 getTableData(); 366 promiseList(
367 getClassifyTree(),
368 getTableData()
369 )
347 }; 370 };
348 371
349 // 获取分类列表 372 // 获取分类列表
350 const getPermissionList = (val, init = true) => { 373 const getPermissionList = (val = {}, init = true) => {
351 let params: any = val ? { ...val } : {} 374 let params: any = val ? { ...val } : {}
352 params.pageIndex = listPage.value.curr; 375 params.pageIndex = listPage.value.curr;
353 params.pageSize = listPage.value.limit; 376 params.pageSize = listPage.value.limit;
354 params.type = 'C'; 377 params.type = 'C';
355 listLoading.value = true 378 return getClassifyGradList(params).then((res: any) => {
356 getClassifyGradList(params).then((res: any) => {
357 if (res.code == proxy.$passCode) { 379 if (res.code == proxy.$passCode) {
358 const data = res.data?.records || [] 380 const data = res.data?.records || []
359 if (init) { 381 if (init) {
...@@ -366,18 +388,14 @@ const getPermissionList = (val, init = true) => { ...@@ -366,18 +388,14 @@ const getPermissionList = (val, init = true) => {
366 tempInfo = data.filter(item => item.guid == taskDetail.value.classifyGuid)[0] 388 tempInfo = data.filter(item => item.guid == taskDetail.value.classifyGuid)[0]
367 } 389 }
368 listClick(tempInfo); 390 listClick(tempInfo);
369 nextTick(() => {
370 toolH.value = toolRef.value.offsetHeight
371 })
372 } 391 }
373 } else { 392 } else {
374 permissionList.value.push(...JSON.parse(JSON.stringify(data))) 393 permissionList.value.push(...JSON.parse(JSON.stringify(data)))
375 querySearch(asideSearchInput.value) 394 querySearch(asideSearchInput.value)
376 } 395 }
377 } 396 }
378 listLoading.value = false
379 }).catch(() => { 397 }).catch(() => {
380 listLoading.value = false 398
381 }) 399 })
382 } 400 }
383 401
...@@ -386,16 +404,13 @@ const getClassifyTree = () => { ...@@ -386,16 +404,13 @@ const getClassifyTree = () => {
386 const params = { 404 const params = {
387 classifyGradeGuid: templateInfo.value.guid 405 classifyGradeGuid: templateInfo.value.guid
388 } 406 }
389 treeInfo.value.loading = true; 407 return getClassifyTreeList(params).then((res: any) => {
390 getClassifyTreeList(params).then((res: any) => {
391 treeInfo.value.loading = false;
392 if (res.code == proxy.$passCode) { 408 if (res.code == proxy.$passCode) {
393 const data = res.data || []; 409 const data = res.data || [];
394 treeInfo.value.data = data; 410 treeInfo.value.data = data;
395 treeInfoRef.value.setCurrentKey(''); 411 treeInfoRef.value.setCurrentKey('');
396 } 412 }
397 }).catch(() => { 413 }).catch(() => {
398 treeInfo.value.loading = false;
399 }) 414 })
400 } 415 }
401 416
...@@ -412,15 +427,14 @@ onBeforeMount(() => { ...@@ -412,15 +427,14 @@ onBeforeMount(() => {
412 if (route.query.type == 'edit') { 427 if (route.query.type == 'edit') {
413 getTaskDetail({ guid: route.query.guid }) 428 getTaskDetail({ guid: route.query.guid })
414 } else { 429 } else {
415 getPermissionList({}); 430 promiseList(
416 getMetaTableData(); 431 getPermissionList(),
432 getMetaTableData()
433 )
417 } 434 }
418 }) 435 })
419 436
420 onMounted(() => { 437 onMounted(() => {
421 window.addEventListener('resize', function () {
422 toolH.value = toolRef.value.offsetHeight
423 })
424 }) 438 })
425 439
426 </script> 440 </script>
...@@ -433,14 +447,14 @@ onMounted(() => { ...@@ -433,14 +447,14 @@ onMounted(() => {
433 <el-input v-model.trim="asideSearchInput" placeholder="请输入关键字" :prefix-icon="Search" clearable 447 <el-input v-model.trim="asideSearchInput" placeholder="请输入关键字" :prefix-icon="Search" clearable
434 @change="querySearch" /> 448 @change="querySearch" />
435 </div> --> 449 </div> -->
436 <div class="aside_list" v-loading="listLoading" v-infinite-scroll="handleScroll"> 450 <div class="aside_list" v-infinite-scroll="handleScroll">
437 <div class="list_item" v-for="(item, i) in currpermissionList" :class="{ active: selectIndex == item.guid }" 451 <div class="list_item" v-for="(item, i) in currpermissionList" :class="{ active: selectIndex == item.guid }"
438 @click="listClick(item);" v-preReClick>{{ item.name }}</div> 452 @click="listClick(item);" v-preReClick>{{ item.name }}</div>
439 </div> 453 </div>
440 </div> 454 </div>
441 <div class="main_wrap" :class="{ full: step == 1 }"> 455 <div class="main_wrap" :class="{ full: step == 1 }">
442 <div class="content_main" v-show="step == 0"> 456 <div class="content_main" v-show="step == 0">
443 <div class="template_panel" ref="toolRef"> 457 <div class="template_panel">
444 <div class="title_item"> 458 <div class="title_item">
445 <span class="title_label">分类标准:</span> 459 <span class="title_label">分类标准:</span>
446 <span class="title_text">{{ templateInfo.name || '--' }}</span> 460 <span class="title_text">{{ templateInfo.name || '--' }}</span>
...@@ -454,7 +468,7 @@ onMounted(() => { ...@@ -454,7 +468,7 @@ onMounted(() => {
454 <span class="title_text">{{ templateInfo.description || '--' }}</span> 468 <span class="title_text">{{ templateInfo.description || '--' }}</span>
455 </div> 469 </div>
456 </div> 470 </div>
457 <div class="panel_content" :style="{ height: 'calc(100% - ' + toolH + 'px)' }"> 471 <div class="panel_content">
458 <div class="box_left"> 472 <div class="box_left">
459 <Tree ref="treeInfoRef" :treeInfo="treeInfo" @nodeClick="nodeClick" /> 473 <Tree ref="treeInfoRef" :treeInfo="treeInfo" @nodeClick="nodeClick" />
460 </div> 474 </div>
...@@ -563,6 +577,7 @@ onMounted(() => { ...@@ -563,6 +577,7 @@ onMounted(() => {
563 display: flex; 577 display: flex;
564 flex-wrap: wrap; 578 flex-wrap: wrap;
565 padding: 16px 16px 8px; 579 padding: 16px 16px 8px;
580 min-height: 82px;
566 581
567 .title_item { 582 .title_item {
568 display: flex; 583 display: flex;
...@@ -597,14 +612,15 @@ onMounted(() => { ...@@ -597,14 +612,15 @@ onMounted(() => {
597 612
598 .panel_content { 613 .panel_content {
599 height: 100%; 614 height: 100%;
600 display: flex;
601 flex: 1; 615 flex: 1;
602 border-top: 1px solid #d9d9d9; 616 border-top: 1px solid #d9d9d9;
617 position: relative;
603 618
604 .box_left { 619 .box_left {
605 width: 200px; 620 width: 200px;
606 height: 100%; 621 height: 100%;
607 border-right: 1px solid #d9d9d9; 622 border-right: 1px solid #d9d9d9;
623 position: absolute;
608 624
609 .aside_title { 625 .aside_title {
610 padding: 0 8px; 626 padding: 0 8px;
...@@ -622,7 +638,10 @@ onMounted(() => { ...@@ -622,7 +638,10 @@ onMounted(() => {
622 638
623 .box_right { 639 .box_right {
624 width: calc(100% - 200px); 640 width: calc(100% - 200px);
641 height: 100%;
625 padding-top: 8px; 642 padding-top: 8px;
643 position: absolute;
644 right: 0;
626 645
627 .el-breadcrumb { 646 .el-breadcrumb {
628 padding: 0 12px; 647 padding: 0 12px;
......
...@@ -107,7 +107,7 @@ const toPath = (type) => { ...@@ -107,7 +107,7 @@ const toPath = (type) => {
107 guid: currTableData.value.taskGuid, 107 guid: currTableData.value.taskGuid,
108 name: currTableData.value.taskName, 108 name: currTableData.value.taskName,
109 status: currTableData.value.status, 109 status: currTableData.value.status,
110 type: currTableData.value.status == 'Y'? 'modify':'confirm' 110 type: currTableData.value.status == 'Y'? 'detail':'confirm'
111 }, 111 },
112 }); 112 });
113 } 113 }
......
...@@ -8,10 +8,14 @@ import { ElMessage, ElMessageBox } from "element-plus"; ...@@ -8,10 +8,14 @@ import { ElMessage, ElMessageBox } from "element-plus";
8 import Table from '@/components/Table/index.vue' 8 import Table from '@/components/Table/index.vue'
9 import TableTools from '@/components/Tools/table_tools.vue' 9 import TableTools from '@/components/Tools/table_tools.vue'
10 import {getAnalysisReportList,delAnalysisRepor,updateAnalysisRepor} from "@/api/modules/dataMetaService" 10 import {getAnalysisReportList,delAnalysisRepor,updateAnalysisRepor} from "@/api/modules/dataMetaService"
11 import { getImageContent } from "@/api/modules/queryService";
12 import Dialog from '@/components/Dialog/index.vue' 11 import Dialog from '@/components/Dialog/index.vue'
13 import { getDownloadUrl, download } from "@/utils/common"; 12 import { getDownloadUrl, download } from "@/utils/common";
14 import { useRouter } from 'vue-router'; 13 import { useRouter } from 'vue-router';
14 import {
15 parseAndDecodeUrl,
16 getDownFileSignByUrl,
17 obsDownloadRequest
18 } from "@/api/modules/obsService";
15 const router = useRouter() 19 const router = useRouter()
16 const page = ref({ 20 const page = ref({
17 limit: 50, 21 limit: 50,
...@@ -119,20 +123,25 @@ const tableSearchItemList: any = ref([{ ...@@ -119,20 +123,25 @@ const tableSearchItemList: any = ref([{
119 placeholder: '血缘关系名称', 123 placeholder: '血缘关系名称',
120 clearable: true 124 clearable: true
121 }]); 125 }]);
122 const tableBtnClick = (scope, btn) => { 126 const tableBtnClick = async (scope, btn) => {
123 const type = btn.value; 127 const type = btn.value;
124 let row = scope.row; 128 let row = scope.row;
125 rowData.value = row 129 rowData.value = row
126 currTableData.value = row; 130 currTableData.value = row;
127 if (type == 'view') { 131 if (type == 'view') {
128 getImageContent(row.analysisReportUrl).then((res: any) => { 132 let fileName: string = parseAndDecodeUrl(row.analysisReportUrl).fileName;
133 const refSignInfo: any = await getDownFileSignByUrl(fileName);
134 if (!refSignInfo?.data) {
135 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
136 return;
137 }
138 obsDownloadRequest(refSignInfo?.data).then((res: any) => {
129 if (res && !res.msg) { 139 if (res && !res.msg) {
130 let name = row.analysisReportUrl; 140 var fileSuffix = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : '';
131 var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : '';
132 if (fileSuffix === 'png') { //浏览器可以支持图片和pdf预览 141 if (fileSuffix === 'png') { //浏览器可以支持图片和pdf预览
133 let fileUrl = getDownloadUrl(res, name, fileSuffix); 142 let fileUrl = <string>getDownloadUrl(res, name, fileSuffix);
134 let win = window.open(fileUrl, name); 143 let win = window.open(fileUrl, row.analysisReportName + fileSuffix);
135 win && (win.document.title = name); 144 win && (win.document.title = row.analysisReportName + fileSuffix);
136 } else { 145 } else {
137 download(res, row.analysisReportName, fileSuffix); 146 download(res, row.analysisReportName, fileSuffix);
138 } 147 }
...@@ -141,10 +150,16 @@ const tableBtnClick = (scope, btn) => { ...@@ -141,10 +150,16 @@ const tableBtnClick = (scope, btn) => {
141 } 150 }
142 }); 151 });
143 } else if (type == 'export') { 152 } else if (type == 'export') {
144 getImageContent(row.analysisReportUrl).then((res: any) => { 153 let fileName: string = parseAndDecodeUrl(row.analysisReportUrl).fileName;
154 const refSignInfo: any = await getDownFileSignByUrl(fileName);
155 if (!refSignInfo?.data) {
156 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
157 return;
158 }
159 obsDownloadRequest(refSignInfo?.data).then((res: any) => {
145 if (res && !res.msg) { 160 if (res && !res.msg) {
146 let name = row.analysisReportUrl; 161 // let name = row.analysisReportUrl;
147 var fileSuffix = name ? name.substring(name.lastIndexOf('.') + 1) : ''; 162 var fileSuffix = fileName ? fileName.substring(fileName.lastIndexOf('.') + 1) : '';
148 download(res, row.analysisReportName, fileSuffix); 163 download(res, row.analysisReportName, fileSuffix);
149 } else { 164 } else {
150 res?.msg && ElMessage.error(res?.msg); 165 res?.msg && ElMessage.error(res?.msg);
......
...@@ -22,7 +22,11 @@ import { ...@@ -22,7 +22,11 @@ import {
22 delLineAge, 22 delLineAge,
23 checkTableData 23 checkTableData
24 } from '@/api/modules/dataMetaService'; 24 } from '@/api/modules/dataMetaService';
25 import { getFileUrl } from "@/api/modules/queryService" 25 import {
26 parseAndDecodeUrl,
27 getUpFileSignByUrl,
28 obsUploadRequest
29 } from "@/api/modules/obsService";
26 import { useRouter, useRoute } from "vue-router"; 30 import { useRouter, useRoute } from "vue-router";
27 import useDataMetaStore from "@/store/modules/dataMeta" 31 import useDataMetaStore from "@/store/modules/dataMeta"
28 import { cloneDeep } from 'lodash-es' 32 import { cloneDeep } from 'lodash-es'
...@@ -857,17 +861,23 @@ const pageSave = () => { ...@@ -857,17 +861,23 @@ const pageSave = () => {
857 return 861 return
858 } 862 }
859 863
860 let formData = new FormData(); 864 dialogInfo1.value.footer.btns[1].loading = true;
861 formData.append('file', file.value); 865 return getUpFileSignByUrl({ fileName: `${analysisReportName}.png` })
862 formData.append('fileName', `${analysisReportName}.png`); 866 .then((res: any) => {
863 getFileUrl(formData).then((res) => { 867 obsUploadRequest({
868 signedUrl: res.data.signedUrl,
869 file: file.value,
870 actualSignedRequestHeaders: res.data.actualSignedRequestHeaders
871 }).then(() => {
872 if (res.code == '00000') {
864 saveMetaReportAnalysis({ 873 saveMetaReportAnalysis({
865 table: lastClickNode.value.tableName, 874 table: lastClickNode.value.tableName,
866 database: lastClickNode.value.databaseName, 875 database: lastClickNode.value.databaseName,
867 analysisReportUrl: res.data, 876 analysisReportUrl: res.data?.signedUrl,
868 analysisReportName: analysisReportName, 877 analysisReportName: analysisReportName,
869 databaseChName: lastClickNode.value.databaseChName 878 databaseChName: lastClickNode.value.databaseChName
870 }).then((res: any) => { 879 }).then((res: any) => {
880 dialogInfo1.value.footer.btns[1].loading = false;
871 if (res.code == proxy.$passCode) { 881 if (res.code == proxy.$passCode) {
872 ElMessage({ 882 ElMessage({
873 type: "success", 883 type: "success",
...@@ -883,9 +893,19 @@ const pageSave = () => { ...@@ -883,9 +893,19 @@ const pageSave = () => {
883 }) 893 })
884 } 894 }
885 }) 895 })
896 } else {
897 ElMessage({
898 type: "error",
899 message: res.msg,
900 appendTo: lineageGraph.value.containerRef
901 })
902 }
886 }).catch((res) => { 903 }).catch((res) => {
887 ElMessage.error(res.msg) 904 ElMessage.error(res.msg)
888 }) 905 });
906 }).catch((res) => {
907 ElMessage.error(res.msg)
908 });
889 } 909 }
890 910
891 const formItems1: any = ref([ 911 const formItems1: any = ref([
...@@ -933,7 +953,7 @@ const dialogInfo1 = ref({ ...@@ -933,7 +953,7 @@ const dialogInfo1 = ref({
933 footer: { 953 footer: {
934 btns: [ 954 btns: [
935 { type: "default", label: "取消", value: "cancel" }, 955 { type: "default", label: "取消", value: "cancel" },
936 { type: "primary", label: "保存", value: "submit" }, 956 { type: "primary", label: "保存", value: "submit", loading: false },
937 ], 957 ],
938 }, 958 },
939 }); 959 });
......
...@@ -144,7 +144,7 @@ const getMetaChangeTableData = () => { ...@@ -144,7 +144,7 @@ const getMetaChangeTableData = () => {
144 } 144 }
145 145
146 146
147 const activeTabName = ref('task'); 147 const activeTabName = ref('meta');
148 148
149 watch(() => activeTabName.value, (val) => { 149 watch(() => activeTabName.value, (val) => {
150 if(val==="task"){ 150 if(val==="task"){
...@@ -420,9 +420,7 @@ const metaChangeTableInfo = ref({ ...@@ -420,9 +420,7 @@ const metaChangeTableInfo = ref({
420 // { label: "状态", field: "changeTime", width: 180, }, 420 // { label: "状态", field: "changeTime", width: 180, },
421 // { label: "操作时间", field: "changeTime", width: 180, }, 421 // { label: "操作时间", field: "changeTime", width: 180, },
422 ], 422 ],
423 data: [{ 423 data: [],
424 guid: 1
425 }],
426 page: { 424 page: {
427 type: "normal", 425 type: "normal",
428 rows: 0, 426 rows: 0,
...@@ -486,6 +484,7 @@ onBeforeMount(() => { ...@@ -486,6 +484,7 @@ onBeforeMount(() => {
486 </div> 484 </div>
487 <div class="main_wrap"> 485 <div class="main_wrap">
488 <el-tabs v-model="activeTabName"> 486 <el-tabs v-model="activeTabName">
487 <!--
489 <el-tab-pane label="同步任务变更记录" name="task"> 488 <el-tab-pane label="同步任务变更记录" name="task">
490 <div class="table_tool_wrap"> 489 <div class="table_tool_wrap">
491 <TableTools :searchItems="tableSearchItemList" :init="false" searchId="detect-table-search" 490 <TableTools :searchItems="tableSearchItemList" :init="false" searchId="detect-table-search"
...@@ -496,6 +495,7 @@ onBeforeMount(() => { ...@@ -496,6 +495,7 @@ onBeforeMount(() => {
496 @tablePageChange="taskChangeTablePageChange" /> 495 @tablePageChange="taskChangeTablePageChange" />
497 </div> 496 </div>
498 </el-tab-pane> 497 </el-tab-pane>
498 -->
499 <el-tab-pane label="元数据变更记录" name="meta"> 499 <el-tab-pane label="元数据变更记录" name="meta">
500 <div class="table_tool_wrap"> 500 <div class="table_tool_wrap">
501 <TableTools :searchItems="metaTableSearchItemList" :init="false" searchId="meta-detect-table-search" 501 <TableTools :searchItems="metaTableSearchItemList" :init="false" searchId="meta-detect-table-search"
......
...@@ -26,9 +26,13 @@ import { ...@@ -26,9 +26,13 @@ import {
26 saveMetaReportAnalysis, 26 saveMetaReportAnalysis,
27 checkTableData 27 checkTableData
28 } from '@/api/modules/dataMetaService'; 28 } from '@/api/modules/dataMetaService';
29 import { getFileUrl } from "@/api/modules/queryService"
30 import useDataMetaStore from "@/store/modules/dataMeta" 29 import useDataMetaStore from "@/store/modules/dataMeta"
31 import { TableColumnWidth } from '@/utils/enum'; 30 import { TableColumnWidth } from '@/utils/enum';
31 import {
32 parseAndDecodeUrl,
33 getUpFileSignByUrl,
34 obsUploadRequest
35 } from "@/api/modules/obsService";
32 36
33 const { proxy } = getCurrentInstance() as any; 37 const { proxy } = getCurrentInstance() as any;
34 const router = useRouter(); 38 const router = useRouter();
...@@ -556,18 +560,24 @@ const pageSave = () => { ...@@ -556,18 +560,24 @@ const pageSave = () => {
556 }) 560 })
557 return 561 return
558 } 562 }
559 let formData = new FormData();
560 formData.append('file', file.value);
561 formData.append('fileName', `${analysisReportName}.png`);
562 console.log(formInline1.value.pageName) 563 console.log(formInline1.value.pageName)
563 getFileUrl(formData).then((res) => { 564 dialogInfo1.value.footer.btns[1].loading = true;
565 getUpFileSignByUrl({ fileName: `${analysisReportName}.png` })
566 .then((res: any) => {
567 obsUploadRequest({
568 signedUrl: res.data.signedUrl,
569 file: file.value,
570 actualSignedRequestHeaders: res.data.actualSignedRequestHeaders
571 }).then(() => {
572 if (res.code == '00000') {
564 saveMetaReportAnalysis({ 573 saveMetaReportAnalysis({
565 table: sheetInfo.value.tableName, 574 table: sheetInfo.value.tableName,
566 database: sheetInfo.value.databaseName, 575 database: sheetInfo.value.databaseName,
567 analysisReportUrl: res.data, 576 analysisReportUrl: res.data?.signedUrl,
568 analysisReportName: analysisReportName, 577 analysisReportName: analysisReportName,
569 databaseChName: sheetInfo.value.databaseChName 578 databaseChName: sheetInfo.value.databaseChName
570 }).then((res: any) => { 579 }).then((res: any) => {
580 dialogInfo1.value.footer.btns[1].loading = false;
571 if (res.code == proxy.$passCode) { 581 if (res.code == proxy.$passCode) {
572 // ElMessage.success("保存成功") 582 // ElMessage.success("保存成功")
573 ElMessage({ 583 ElMessage({
...@@ -584,13 +594,19 @@ const pageSave = () => { ...@@ -584,13 +594,19 @@ const pageSave = () => {
584 }) 594 })
585 } 595 }
586 }) 596 })
587 }).catch((res) => { 597 } else {
588 ElMessage({ 598 ElMessage({
589 type: "error", 599 type: "error",
590 message: res.msg, 600 message: res.msg,
591 appendTo: lineageGraph.value[0].containerRef 601 appendTo: lineageGraph.value.containerRef
592 })
593 }) 602 })
603 }
604 }).catch((res) => {
605 ElMessage.error(res.msg)
606 });
607 }).catch((res) => {
608 ElMessage.error(res.msg)
609 });
594 } 610 }
595 611
596 const formItems1: any = ref([ 612 const formItems1: any = ref([
...@@ -638,7 +654,7 @@ const dialogInfo1 = ref({ ...@@ -638,7 +654,7 @@ const dialogInfo1 = ref({
638 footer: { 654 footer: {
639 btns: [ 655 btns: [
640 { type: "default", label: "取消", value: "cancel" }, 656 { type: "default", label: "取消", value: "cancel" },
641 { type: "primary", label: "保存", value: "submit" }, 657 { type: "primary", label: "保存", value: "submit", loading: false },
642 ], 658 ],
643 }, 659 },
644 }); 660 });
......
...@@ -238,12 +238,12 @@ const rulesDetailTableBtnClick = (scope, btn) => { ...@@ -238,12 +238,12 @@ const rulesDetailTableBtnClick = (scope, btn) => {
238 label: row.ruleName 238 label: row.ruleName
239 }]; 239 }];
240 smallCategoryList.value = [{ 240 smallCategoryList.value = [{
241 paramValue: detailInfo.value.smallCategory, 241 value: detailInfo.value.smallCategory,
242 paramName: row.smallCategory 242 label: row.smallCategory
243 }]; 243 }];
244 largeCategoryList.value = [{ 244 largeCategoryList.value = [{
245 paramValue: detailInfo.value.largeCategory, 245 value: detailInfo.value.largeCategory,
246 paramName: row.largeCategory 246 label: row.largeCategory
247 }]; 247 }];
248 oneRulesDetailDialogVisible.value = true; 248 oneRulesDetailDialogVisible.value = true;
249 } else { 249 } else {
...@@ -268,12 +268,12 @@ const rulesDetailTableBtnClick = (scope, btn) => { ...@@ -268,12 +268,12 @@ const rulesDetailTableBtnClick = (scope, btn) => {
268 label: row.ruleName 268 label: row.ruleName
269 }]; 269 }];
270 smallCategoryList.value = [{ 270 smallCategoryList.value = [{
271 paramValue: detailInfo.value.smallCategory, 271 value: detailInfo.value.smallCategory,
272 paramName: row.smallCategory 272 label: row.smallCategory
273 }]; 273 }];
274 largeCategoryList.value = [{ 274 largeCategoryList.value = [{
275 paramValue: detailInfo.value.largeCategory, 275 value: detailInfo.value.largeCategory,
276 paramName: row.largeCategory 276 label: row.largeCategory
277 }]; 277 }];
278 } else { 278 } else {
279 ElMessage.error(res.msg); 279 ElMessage.error(res.msg);
......
...@@ -135,18 +135,18 @@ const rulesListByType: any = computed(() => { ...@@ -135,18 +135,18 @@ const rulesListByType: any = computed(() => {
135 return {}; 135 return {};
136 } 136 }
137 return { 137 return {
138 char: checkRulesList.value.filter(r => r.paramValue == 'length_rule' || r.paramValue == 'ch_rule' || r.paramValue == 'en_rule' || r.paramValue == 'num_value_rule' || r.paramValue == 'custom_regular_rule'), 138 char: checkRulesList.value.filter(r => r.value == 'length_rule' || r.value == 'ch_rule' || r.value == 'en_rule' || r.value == 'num_value_rule' || r.value == 'custom_regular_rule'),
139 varchar: checkRulesList.value.filter(r => r.paramValue == 'length_rule' || r.paramValue == 'id_card_rule' || r.paramValue == 'phone_number_rule' || r.paramValue == 'ch_rule' || r.paramValue == 'en_rule' || r.paramValue == 'num_value_rule' || r.paramValue == 'custom_regular_rule'), 139 varchar: checkRulesList.value.filter(r => r.value == 'length_rule' || r.value == 'id_card_rule' || r.value == 'phone_number_rule' || r.value == 'ch_rule' || r.value == 'en_rule' || r.value == 'num_value_rule' || r.value == 'custom_regular_rule'),
140 int: checkRulesList.value.filter(r => r.paramValue == 'length_rule' || r.paramValue == 'num_value_rule' || r.paramValue == 'custom_regular_rule'), 140 int: checkRulesList.value.filter(r => r.value == 'length_rule' || r.value == 'num_value_rule' || r.value == 'custom_regular_rule'),
141 date: checkRulesList.value.filter(r => r.paramValue == 'date_format_rule' || r.paramValue == 'custom_regular_rule'), 141 date: checkRulesList.value.filter(r => r.value == 'date_format_rule' || r.value == 'custom_regular_rule'),
142 datetime: checkRulesList.value.filter(r => r.paramValue == 'date_format_rule' || r.paramValue == 'custom_regular_rule'), 142 datetime: checkRulesList.value.filter(r => r.value == 'date_format_rule' || r.value == 'custom_regular_rule'),
143 timestamp: checkRulesList.value.filter(r => r.paramValue == 'custom_regular_rule' || r.paramValue == 'custom_regular_rule'), 143 timestamp: checkRulesList.value.filter(r => r.value == 'custom_regular_rule' || r.value == 'custom_regular_rule'),
144 // text: checkRulesList.value.filter(r => r.paramValue == ''), 144 // text: checkRulesList.value.filter(r => r.value == ''),
145 decimal: checkRulesList.value.filter(r => r.paramValue == 'length_rule' || r.paramValue == 'precision_rule' || r.paramValue == 'num_value_rule' || r.paramValue == 'custom_regular_rule'), 145 decimal: checkRulesList.value.filter(r => r.value == 'length_rule' || r.value == 'precision_rule' || r.value == 'num_value_rule' || r.value == 'custom_regular_rule'),
146 // json: checkRulesList.value.filter(r => r.paramValue == ''), 146 // json: checkRulesList.value.filter(r => r.value == ''),
147 tinyint: checkRulesList.value.filter(r => r.paramValue == 'length_rule' || r.paramValue == 'num_value_rule' || r.paramValue == 'custom_regular_rule'), 147 tinyint: checkRulesList.value.filter(r => r.value == 'length_rule' || r.value == 'num_value_rule' || r.value == 'custom_regular_rule'),
148 time: checkRulesList.value.filter(r => r.paramValue == 'custom_regular_rule'), 148 time: checkRulesList.value.filter(r => r.value == 'custom_regular_rule'),
149 bit: checkRulesList.value.filter(r => r.paramValue == 'ch_rule' || r.paramValue == 'en_rule' || r.paramValue == 'custom_regular_rule'), 149 bit: checkRulesList.value.filter(r => r.value == 'ch_rule' || r.value == 'en_rule' || r.value == 'custom_regular_rule'),
150 } 150 }
151 }); 151 });
152 152
...@@ -238,8 +238,8 @@ const panelList: any = ref([ ...@@ -238,8 +238,8 @@ const panelList: any = ref([
238 default: '1', 238 default: '1',
239 options: props.largeCategoryList, 239 options: props.largeCategoryList,
240 props: { 240 props: {
241 label: 'paramName', 241 label: 'label',
242 value: 'paramValue' 242 value: 'value'
243 }, 243 },
244 required: true, 244 required: true,
245 visible: true 245 visible: true
...@@ -249,8 +249,8 @@ const panelList: any = ref([ ...@@ -249,8 +249,8 @@ const panelList: any = ref([
249 placeholder: '请选择', 249 placeholder: '请选择',
250 field: 'smallCategory', 250 field: 'smallCategory',
251 props: { 251 props: {
252 label: 'paramName', 252 label: 'label',
253 value: 'paramValue' 253 value: 'value'
254 }, 254 },
255 default: '', 255 default: '',
256 options: props.smallCategoryList.slice(6), 256 options: props.smallCategoryList.slice(6),
...@@ -1006,7 +1006,7 @@ const setPanelListValue = (item, isSelectChange = false, init = false, radioGrou ...@@ -1006,7 +1006,7 @@ const setPanelListValue = (item, isSelectChange = false, init = false, radioGrou
1006 } 1006 }
1007 } 1007 }
1008 if (isSelectChange) { 1008 if (isSelectChange) {
1009 val['smallCategory'] = panelList.value[2].options[0]?.paramValue; 1009 val['smallCategory'] = panelList.value[2].options[0]?.value;
1010 } else if (!val['smallCategory']) { 1010 } else if (!val['smallCategory']) {
1011 val['smallCategory'] = getDefaultSmallCategory(formItems.value[0].default); 1011 val['smallCategory'] = getDefaultSmallCategory(formItems.value[0].default);
1012 } else if (radioGroupChange && !init) {//切换规则类型。 1012 } else if (radioGroupChange && !init) {//切换规则类型。
...@@ -2306,8 +2306,8 @@ defineExpose({ ...@@ -2306,8 +2306,8 @@ defineExpose({
2306 <template #default="scope"> 2306 <template #default="scope">
2307 <el-select v-if="!props.readonly || (scope.row.dataType == 'text' || scope.row.dataType == 'json')" 2307 <el-select v-if="!props.readonly || (scope.row.dataType == 'text' || scope.row.dataType == 'json')"
2308 v-model="scope.row['checkRule']" placeholder="请选择" filterable clearable> 2308 v-model="scope.row['checkRule']" placeholder="请选择" filterable clearable>
2309 <el-option v-for="opt in rulesListByType[scope.row.dataType]" :key="opt['paramValue']" 2309 <el-option v-for="opt in rulesListByType[scope.row.dataType]" :key="opt['value']"
2310 :label="opt['paramName']" :value="opt['paramValue']" /> 2310 :label="opt['label']" :value="opt['value']" />
2311 </el-select> 2311 </el-select>
2312 <span v-else>{{ scope.row.checkRuleName ?? '--' }}</span> 2312 <span v-else>{{ scope.row.checkRuleName ?? '--' }}</span>
2313 </template> 2313 </template>
......
...@@ -16,6 +16,9 @@ import { ...@@ -16,6 +16,9 @@ import {
16 getSmallCategoryList, 16 getSmallCategoryList,
17 getLargeCategoryList, 17 getLargeCategoryList,
18 } from '@/api/modules/dataQuality'; 18 } from '@/api/modules/dataQuality';
19 import {
20 getMetaTreeData
21 } from '@/api/modules/dataMetaService';
19 import ruleForm from "../data_quality/ruleForm.vue"; 22 import ruleForm from "../data_quality/ruleForm.vue";
20 import useUserStore from "@/store/modules/user"; 23 import useUserStore from "@/store/modules/user";
21 import useDataQualityStore from "@/store/modules/dataQuality"; 24 import useDataQualityStore from "@/store/modules/dataQuality";
...@@ -60,7 +63,7 @@ const toSubjectTables: any = ref([]); ...@@ -60,7 +63,7 @@ const toSubjectTables: any = ref([]);
60 63
61 const getSubjectTableTreeData = () => { 64 const getSubjectTableTreeData = () => {
62 dsFromTreeDataLoading.value = true; 65 dsFromTreeDataLoading.value = true;
63 getSubjectTableTree({}).then((res: any) => { 66 getMetaTreeData({}).then((res: any) => {
64 dsFromTreeDataLoading.value = false; 67 dsFromTreeDataLoading.value = false;
65 if (res.code == proxy.$passCode) { 68 if (res.code == proxy.$passCode) {
66 dsFromTreeData.value = res.data?.map(d => { 69 dsFromTreeData.value = res.data?.map(d => {
...@@ -428,17 +431,17 @@ const save = () => { ...@@ -428,17 +431,17 @@ const save = () => {
428 <div class="operator_panel is-block"> 431 <div class="operator_panel is-block">
429 <div class="panel_title"> 432 <div class="panel_title">
430 <div class="title_text"> 433 <div class="title_text">
431 <span>选择主题</span> 434 <span>选择表</span>
432 <span class="tips_text">选择需要添加质检规则的主题表</span> 435 <span class="tips_text">选择需要添加质检规则的表,请确保数据库为脱产环境,避免数据质检影响您的生产环境,且允许在该脱产环境建脏数据的库,请知晓!</span>
433 </div> 436 </div>
434 </div> 437 </div>
435 <TreeTransfer mode="transfer" :title="['主题表', '已选表']" pid="parentGuid" 438 <TreeTransfer mode="transfer" :title="['可选表', '已选表']" pid="parentGuid"
436 :from-tree-data-loading="dsFromTreeDataLoading" :lazy="true" :checkOnClickNode="true" 439 :from-tree-data-loading="dsFromTreeDataLoading" :checkOnClickNode="true"
437 :from_checked_all="false" :from_data="dsFromTreeData" :to_data="dsToTreeData" node_key="guid" 440 :from_checked_all="false" :from_data="dsFromTreeData" :to_data="dsToTreeData" node_key="guid"
438 :transferOpenNode="true" width="70%" :defaultProps="{ 441 :transferOpenNode="true" width="70%" :defaultProps="{
439 label: 'name', 442 label: 'name',
440 value: 'guid' 443 value: 'guid'
441 }" :lazyFn="handleSubjectTableLazyFn" @left-check-change="handleSubjectCheckedChange" 444 }"
442 height="calc(100% - 64px)"> 445 height="calc(100% - 64px)">
443 </TreeTransfer> 446 </TreeTransfer>
444 </div> 447 </div>
......
...@@ -221,7 +221,7 @@ const tableBtnClick = async (scope, btn) => { ...@@ -221,7 +221,7 @@ const tableBtnClick = async (scope, btn) => {
221 const row = scope.row; 221 const row = scope.row;
222 currTableData.value = row; 222 currTableData.value = row;
223 if (type == "export_file") { 223 if (type == "export_file") {
224 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(row.filePath).decodedPath); 224 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(row.filePath).fileName);
225 if (!refSignInfo?.data) { 225 if (!refSignInfo?.data) {
226 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); 226 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
227 return; 227 return;
...@@ -236,7 +236,7 @@ const tableBtnClick = async (scope, btn) => { ...@@ -236,7 +236,7 @@ const tableBtnClick = async (scope, btn) => {
236 //downFile(row.filePath, row.fileName) 236 //downFile(row.filePath, row.fileName)
237 } else if (type == 'export_abnormal_data') { 237 } else if (type == 'export_abnormal_data') {
238 //downFile(row.errorFilePath, '') 238 //downFile(row.errorFilePath, '')
239 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(row.errorFilePath).decodedPath); 239 const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(row.errorFilePath).fileName);
240 if (!refSignInfo?.data) { 240 if (!refSignInfo?.data) {
241 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg); 241 refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
242 return; 242 return;
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!