73b16ac8 by xukangle

Merge branch 'develop' into dev_20241202_xukangle

2 parents a04a7e36 6181cbd2
...@@ -19,9 +19,9 @@ VITE_SERVE_BASE = / ...@@ -19,9 +19,9 @@ VITE_SERVE_BASE = /
19 # 流程设计访问地址 19 # 流程设计访问地址
20 VITE_BPMN_URL = https://workflow-swzl-test.csbr.cn 20 VITE_BPMN_URL = https://workflow-swzl-test.csbr.cn
21 # 数据标准、元数据、数据目录 接口地址 21 # 数据标准、元数据、数据目录 接口地址
22 VITE_APP_PLAN_BASEURL = ms-daop-zcgl-data-plan-service 22 VITE_APP_PLAN_BASEURL = ms-daop-jgjf-data-plan-service
23 #数据质量接口地址 23 #数据质量接口地址
24 VITE_APP_QUALITY_BASEURL = ms-daop-zcgl-data-quality-service 24 VITE_APP_QUALITY_BASEURL = ms-daop-data-quality-service
25 25
26 #数据盘点接口地址 26 #数据盘点接口地址
27 VITE_APP_CHECK_BASEURL = ms-daop-zcgl-data-inventory 27 VITE_APP_CHECK_BASEURL = ms-daop-zcgl-data-inventory
......
...@@ -18,9 +18,9 @@ VITE_SERVE_BASE = / ...@@ -18,9 +18,9 @@ VITE_SERVE_BASE = /
18 # 流程设计访问地址 18 # 流程设计访问地址
19 VITE_BPMN_URL = https://workflow.zgsjzc.com 19 VITE_BPMN_URL = https://workflow.zgsjzc.com
20 # 数据标准、元数据、数据目录 接口地址 20 # 数据标准、元数据、数据目录 接口地址
21 VITE_APP_PLAN_BASEURL = ms-daop-zcgl-data-plan-service 21 VITE_APP_PLAN_BASEURL = ms-daop-jgjf-data-plan-service
22 #数据质量接口地址 22 #数据质量接口地址
23 VITE_APP_QUALITY_BASEURL = ms-daop-zcgl-data-quality-service 23 VITE_APP_QUALITY_BASEURL = ms-daop-data-quality-service
24 24
25 #门户接口 25 #门户接口
26 VITE_API_PORTALURL = https://www.zgsjzc.com/portal 26 VITE_API_PORTALURL = https://www.zgsjzc.com/portal
......
...@@ -175,28 +175,23 @@ export const deleteImportData = (params) => request({ ...@@ -175,28 +175,23 @@ export const deleteImportData = (params) => request({
175 }) 175 })
176 // 数据导入-分页查询 176 // 数据导入-分页查询
177 export const getImportData = (params) => request({ 177 export const getImportData = (params) => request({
178 url: `${import.meta.env.VITE_APP_ADD_FILE}/import-data/list`, 178 url: `${import.meta.env.VITE_APP_ADD_FILE}/import-data/page-list`,
179 method: 'post', 179 method: 'post',
180 data: params, 180 data: params,
181 }) 181 })
182 182
183 // 导出数据字典模板 183 // 导出采集任务分类模板。
184 export const exportDictionary = (params) => request({ 184 export const exportCollectTask = (params) => request({
185 url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/export/data-dictionary/schema`, 185 url: `${import.meta.env.VITE_APP_ADD_FILE}/import-config/export-more-sheet-template`,
186 method: 'post', 186 method: 'post',
187 data: params, 187 data: params,
188 responseType: 'blob' 188 responseType: 'blob'
189 }) 189 })
190 190
191 /** 获取树形结构的标准集列表 */ 191 // 导出数据字典模板
192 export const getStandardSetTree = () => request({ 192 export const exportDictionary = (params) => request({
193 url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/data-standard-set/list-tree`, 193 url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/export/data-dictionary/schema`,
194 method: 'get'
195 })
196
197 // 数据字典树形数据
198 export const getDictionaryTree = (params) => request({
199 url: `${import.meta.env.VITE_APP_PLAN_BASEURL}/data-dictionary-general/tree-list`,
200 method: 'post', 194 method: 'post',
201 params 195 data: params,
196 responseType: 'blob'
202 }) 197 })
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -162,7 +162,7 @@ onBeforeMount(() => { ...@@ -162,7 +162,7 @@ onBeforeMount(() => {
162 }); 162 });
163 163
164 const getDefaultLargeCategory = (ruleCode) => { 164 const getDefaultLargeCategory = (ruleCode) => {
165 if (ruleCode == 'repeate_data_check' || ruleCode == 'logic_check') { 165 if (ruleCode == 'repeate_data_check' || ruleCode == 'logic_check' || ruleCode == 'value_of_range') {
166 return '3'; //准确性 166 return '3'; //准确性
167 } else if (ruleCode == 'volatility_check' || ruleCode == 'rows_check') { 167 } else if (ruleCode == 'volatility_check' || ruleCode == 'rows_check') {
168 return '5'; 168 return '5';
...@@ -176,7 +176,7 @@ const getDefaultLargeCategory = (ruleCode) => { ...@@ -176,7 +176,7 @@ const getDefaultLargeCategory = (ruleCode) => {
176 const getDefaultSmallCategory = (ruleCode) => { 176 const getDefaultSmallCategory = (ruleCode) => {
177 if (ruleCode == 'repeate_data_check') { 177 if (ruleCode == 'repeate_data_check') {
178 return '11'; //准确性 178 return '11'; //准确性
179 } else if (ruleCode == 'logic_check') { 179 } else if (ruleCode == 'logic_check' || ruleCode == 'value_of_range') {
180 return '9'; 180 return '9';
181 } else if (ruleCode == 'volatility_check' || ruleCode == 'rows_check') { 181 } else if (ruleCode == 'volatility_check' || ruleCode == 'rows_check') {
182 return '17'; 182 return '17';
...@@ -372,6 +372,17 @@ const panelList: any = ref([ ...@@ -372,6 +372,17 @@ const panelList: any = ref([
372 block: true, 372 block: true,
373 visible: false 373 visible: false
374 }, { 374 }, {
375 label: '规则设置',
376 type: 'input-dom',
377 placeholder: '请设置,可多选',
378 field: 'ruleSettings-value-range', //12
379 default: '',//描述型的字段
380 defaultValue: {},// json,key为表, 实际的值域表格数据值数组
381 readonly: true,
382 required: true,
383 block: true,
384 visible: false
385 }, {
375 label: '描述', 386 label: '描述',
376 type: 'textarea', 387 type: 'textarea',
377 placeholder: '请输入', 388 placeholder: '请输入',
...@@ -454,6 +465,9 @@ const formRules = ref({ ...@@ -454,6 +465,9 @@ const formRules = ref({
454 'ruleSettings-rows': [ 465 'ruleSettings-rows': [
455 { required: true, trigger: 'change', message: "请设置规则" } 466 { required: true, trigger: 'change', message: "请设置规则" }
456 ], 467 ],
468 'ruleSettings-value-range': [
469 { required: true, trigger: 'change', message: "请设置规则" }
470 ],
457 orangeThreshold: [ 471 orangeThreshold: [
458 { 472 {
459 trigger: 'blur', validator: (rule: any, value: any, callback: any) => { 473 trigger: 'blur', validator: (rule: any, value: any, callback: any) => {
...@@ -651,6 +665,44 @@ const formBtnClick = (btn) => { ...@@ -651,6 +665,44 @@ const formBtnClick = (btn) => {
651 differenceRange: 0 665 differenceRange: 0
652 }]; 666 }];
653 } 667 }
668 } else if (ruleType.value == 'value_of_range') {
669 valueRangeDialogVisible.value = true;
670 tableListInfo.value.data = props.toSubjectTables;
671 dialogSelectSubjectTable.value = props.toSubjectTables[0];
672 let defaultValue = panelList.value[12].defaultValue;
673 valueRangeTableListData.value[dialogSelectSubjectTable.value.enName] = [];
674 if (props.toSubjectTables[0]?.guid) {
675 valueRangeTableListLoading.value[dialogSelectSubjectTable.value.enName] = true;
676 getSubjectFields(props.toSubjectTables[0]?.guid).then((res: any) => {
677 valueRangeTableListLoading.value[dialogSelectSubjectTable.value.enName] = false;
678 if (res.code == proxy.$passCode) {
679 let data = res.data || [];
680 valueRangeTableListData.value[dialogSelectSubjectTable.value.enName] = data;
681 let valueFields = defaultValue.ruleFields?.[dialogSelectSubjectTable.value.enName] || [];
682 if (valueFields.length) {
683 valueFields.forEach(field => {
684 let fIndex = data.findIndex(d => d.enName == field.enName);
685 if (fIndex > -1) {
686 let f = valueRangeTableListData.value[dialogSelectSubjectTable.value.enName][fIndex];
687 if (field.dataRange) {
688 f.dataRange = field.dataRange;
689 }
690 if (field.startValue) {
691 if (f.dataType == 'date' || f.dataType == 'datetime') {
692 f.dateValueRange = [field.startValue, field.endValue];
693 } else {
694 f.startValue = field.startValue;
695 f.endValue = field.endValue;
696 }
697 }
698 }
699 });
700 }
701 } else {
702 ElMessage.error(res.msg);
703 }
704 })
705 }
654 } 706 }
655 } 707 }
656 708
...@@ -762,6 +814,22 @@ const setPanelListValue = (item, isSelectChange = false, init = false, radioGrou ...@@ -762,6 +814,22 @@ const setPanelListValue = (item, isSelectChange = false, init = false, radioGrou
762 } else { 814 } else {
763 p.defaultValue = []; 815 p.defaultValue = [];
764 } 816 }
817 } else if (ruleCode == 'value_of_range' && p.field == 'ruleSettings-value-range') {
818 if (!init) {
819 p.default = val[field];
820 return;
821 }
822 if (val.ruleField) {
823 p.default = val.ruleField?.map(f => f.enName)?.join(';');
824 let ruleFields = {};
825 ruleFields[val.subjectName] = val.ruleField || [];
826 p.defaultValue = {
827 ruleFields: ruleFields
828 }
829 } else {
830 p.default = '';
831 p.defaultValue = {};
832 }
765 } else if (p.field == 'largeCategory') { 833 } else if (p.field == 'largeCategory') {
766 /** 此处有歧义,若是切换规则类型,修改默认值,可能会出现,用户先修改了规则大类,但是切换类型之后,被我还原了。 */ 834 /** 此处有歧义,若是切换规则类型,修改默认值,可能会出现,用户先修改了规则大类,但是切换类型之后,被我还原了。 */
767 if (radioGroupChange && !init) { 835 if (radioGroupChange && !init) {
...@@ -805,54 +873,54 @@ const radioGroupChange = (val, inlineValue, init) => { ...@@ -805,54 +873,54 @@ const radioGroupChange = (val, inlineValue, init) => {
805 list.forEach((item, index) => { 873 list.forEach((item, index) => {
806 if (val == 'volatility_check') {//表行数波动率 874 if (val == 'volatility_check') {//表行数波动率
807 item.visible = true 875 item.visible = true
808 if (index == 7 || index == 8 || index == 9 || index == 10 || index == 11 || index === 13) {// 7是规则设置,9是联合不为空 : 9+4 876 if (index == 7 || index == 8 || index == 9 || index == 10 || index == 11 || index == 12 || index === 14) {// 7是规则设置,9是联合不为空 : 9+4
809 item.visible = false 877 item.visible = false
810 } 878 }
811 } else if (val === 'null_value_check') {//空值检查 879 } else if (val === 'null_value_check') {//空值检查
812 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 11) { 880 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 11 || index == 12) {
813 item.visible = false 881 item.visible = false
814 } else { //index为10的显示 882 } else { //index为10的显示
815 item.visible = true; 883 item.visible = true;
816 } 884 }
817 } else if (val === 'repeate_data_check') { //重复数据检查 885 } else if (val === 'repeate_data_check') { //重复数据检查
818 item.visible = false 886 item.visible = false
819 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 8 || index == 9 || index == 10 || index == 11 || index === 13) { 887 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 8 || index == 9 || index == 10 || index == 11 || index == 12 || index === 14) {
820 } else { 888 } else {
821 item.visible = true; 889 item.visible = true;
822 } 890 }
823 } else if (val === 'logic_check') { //逻辑检查 891 } else if (val === 'logic_check') { //逻辑检查
824 item.visible = false 892 item.visible = false
825 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 9 || index == 10 || index == 11 || index === 13) { 893 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 9 || index == 10 || index == 11 || index == 12 || index === 14) {
826 } else { 894 } else {
827 item.visible = true; 895 item.visible = true;
828 } 896 }
829 } else if (val === 'value_of_range') { // 值域范围 897 } else if (val === 'value_of_range') { // 值域范围
830 item.visible = false 898 item.visible = false
831 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 9 || index == 10 || index == 11 || index === 13) { 899 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 10 || index == 11 || index === 14) {
832 } else { 900 } else {
833 item.visible = true; 901 item.visible = true;
834 } 902 }
835 } else if (val === 'ref_integrality') { // 引用完整性 903 } else if (val === 'ref_integrality') { // 引用完整性
836 item.visible = false 904 item.visible = false
837 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 9 || index == 10 || index == 11 || index === 13) { 905 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 10 || index == 11 || index === 14) {
838 } else { 906 } else {
839 item.visible = true; 907 item.visible = true;
840 } 908 }
841 } else if (val === 'norm_check') { // 规范校验 909 } else if (val === 'norm_check') { // 规范校验
842 item.visible = false 910 item.visible = false
843 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 9 || index == 10 || index == 11 || index === 13) { 911 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 10 || index == 11 || index === 13) {
844 } else { 912 } else {
845 item.visible = true; 913 item.visible = true;
846 } 914 }
847 } else if (val === 'custom_sql') {//自定义sql 915 } else if (val === 'custom_sql') {//自定义sql
848 item.visible = false 916 item.visible = false
849 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 10 || index == 11 || index === 13) { 917 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 10 || index == 11 || index == 12 || index === 14) {
850 } else { 918 } else {
851 item.visible = true; 919 item.visible = true;
852 } 920 }
853 } else if (val === 'rows_check') { //表行数 921 } else if (val === 'rows_check') { //表行数
854 item.visible = false 922 item.visible = false
855 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 10 || index === 13) { 923 if (index === 3 || index === 4 || index === 5 || index === 6 || index == 7 || index == 8 || index == 9 || index == 10 || index == 12 || index === 14) {
856 } else { 924 } else {
857 item.visible = true; 925 item.visible = true;
858 } 926 }
...@@ -916,6 +984,41 @@ const listItemClick = (data) => { ...@@ -916,6 +984,41 @@ const listItemClick = (data) => {
916 ElMessage.error(res.msg); 984 ElMessage.error(res.msg);
917 } 985 }
918 }) 986 })
987 } else if (ruleType.value == 'value_of_range') {
988 if (valueRangeTableListData.value[dialogSelectSubjectTable.value.enName]?.length) {
989 return;
990 }
991 let defaultValue = panelList.value[12].defaultValue;
992 valueRangeTableListLoading.value[dialogSelectSubjectTable.value.enName] = true;
993 getSubjectFields(data.guid).then((res: any) => {
994 valueRangeTableListLoading.value[dialogSelectSubjectTable.value.enName] = false;
995 if (res.code == proxy.$passCode) {
996 let data = res.data || [];
997 valueRangeTableListData.value[dialogSelectSubjectTable.value.enName] = data;
998 let valueFields = defaultValue.ruleFields?.[dialogSelectSubjectTable.value.enName] || [];
999 if (valueFields.length) {
1000 valueFields.forEach(field => {
1001 let fIndex = data.findIndex(d => d.enName == field.enName);
1002 if (fIndex > -1) {
1003 let f = valueRangeTableListData.value[dialogSelectSubjectTable.value.enName][fIndex];
1004 if (field.dataRange) {
1005 f.dataRange = field.dataRange;
1006 }
1007 if (field.startValue) {
1008 if (f.dataType == 'date' || f.dataType == 'datetime') {
1009 f.dateValueRange = [field.startValue, field.endValue];
1010 } else {
1011 f.startValue = field.startValue;
1012 f.endValue = field.endValue;
1013 }
1014 }
1015 }
1016 });
1017 }
1018 } else {
1019 ElMessage.error(res.msg);
1020 }
1021 })
919 } 1022 }
920 } 1023 }
921 1024
...@@ -1386,6 +1489,19 @@ const getSubjectTableByDomainData = (guid) => { ...@@ -1386,6 +1489,19 @@ const getSubjectTableByDomainData = (guid) => {
1386 }) 1489 })
1387 } 1490 }
1388 1491
1492 const defaultExpandedKeys = computed(() => {
1493 return props.value && contrastSubjects.value?.length ? [contrastSubjects.value.find(c => c.children?.some(cc => cc.guid == props.value.contrastSubjectDomainGuid)).guid, props.value.contrastSubjectDomainGuid] : [];
1494 })
1495
1496 const contrastSubjectInputFilterMethod = (v, data) => {
1497 if (!v) {
1498 return true;
1499 }
1500 return data.label?.includes(v) || data.name?.includes(v) ||
1501 data.chName?.includes(v) ||
1502 data.enName?.includes(v);
1503 };
1504
1389 /** 主题表懒加载。 */ 1505 /** 主题表懒加载。 */
1390 const treeSelectLoad = (node, resolve) => { 1506 const treeSelectLoad = (node, resolve) => {
1391 if (node.level == 0) { 1507 if (node.level == 0) {
...@@ -1401,18 +1517,73 @@ const treeSelectLoad = (node, resolve) => { ...@@ -1401,18 +1517,73 @@ const treeSelectLoad = (node, resolve) => {
1401 } 1517 }
1402 } 1518 }
1403 1519
1404 const defaultExpandedKeys = computed(() => { 1520 /** --------------------- 值域范围 ----------------------------- */
1405 return props.value && contrastSubjects.value?.length ? [contrastSubjects.value.find(c => c.children?.some(cc => cc.guid == props.value.contrastSubjectDomainGuid)).guid, props.value.contrastSubjectDomainGuid] : [];
1406 })
1407 1521
1408 const contrastSubjectInputFilterMethod = (v, data) => { 1522 const valueRangeDialogVisible = ref(false);
1409 if (!v) { 1523
1410 return true; 1524 const valueRangeTableListLoading = ref({});
1525
1526 const valueRangeTableListData = ref({});
1527
1528 const cancelValueRangeDialog = () => {
1529 valueRangeDialogVisible.value = false;
1530 }
1531
1532 const submitValueRange = () => {
1533 let v: any = [];
1534 let ruleFieldsJson: any = {};
1535 for (const table in valueRangeTableListData.value) {
1536 if (!valueRangeTableListData.value[table]?.length) {
1537 continue;
1538 }
1539 let valueTableFields = valueRangeTableListData.value[table];
1540 let ruleFields: any = []
1541 for (const field of valueTableFields) {
1542 if (field.startValue != null && field.endValue == null || (field.endValue != null && field.startValue == null)) {
1543 ElMessage.error(`表【${table}】的字段【${field.enName}】设置了值域,但范围未填写完整`);
1544 return;
1411 } 1545 }
1412 return data.label?.includes(v) || data.name?.includes(v) || 1546 if (field.startValue) {
1413 data.chName?.includes(v) || 1547 ruleFields.push(field);
1414 data.enName?.includes(v); 1548 }
1415 }; 1549 if (field.dataRange) {
1550 ruleFields.push(field);
1551 }
1552 if (field.dateValueRange?.length > 0) {
1553 field.startValue = field.dateValueRange[0];
1554 field.endValue = field.dateValueRange[1];
1555 ruleFields.push(field);
1556 }
1557 if (ruleFields.length) {
1558 v.push(table);
1559 ruleFieldsJson[table] = ruleFields;
1560 }
1561 }
1562 }
1563 if (!v.length) {
1564 ElMessage.error('当前未给表字段设置值域!');
1565 return;
1566 }
1567 let index = 12;
1568 panelList.value[index].defaultValue = {
1569 ruleFields: ruleFieldsJson
1570 };
1571 let str = "";
1572 for (const key in ruleFieldsJson) {
1573 let field = ruleFieldsJson[key];
1574 str = str + (str ? ';' : '') + field.map(f => f.enName).join(',');;
1575 }
1576 let formInline = oldOriginValue.value = Object.assign({
1577 qualityModelGuids: props.toSubjectTables.map(s => s.guid),
1578 parity: 1,
1579 compareWay: 1,
1580 jointly: 'N',
1581 bizState: 'Y'
1582 }, oldOriginValue.value, ruleFormRef.value.formInline);
1583 formInline[`${panelList.value[index].field}`] = str;
1584 setPanelListValue(formInline);
1585 valueRangeDialogVisible.value = false;
1586 }
1416 1587
1417 const getFormInfo = () => { 1588 const getFormInfo = () => {
1418 let formInline = ruleFormRef.value.formInline; 1589 let formInline = ruleFormRef.value.formInline;
...@@ -1447,6 +1618,11 @@ const getFormInfo = () => { ...@@ -1447,6 +1618,11 @@ const getFormInfo = () => {
1447 rows: v, 1618 rows: v,
1448 ruleName: ruleName 1619 ruleName: ruleName
1449 }); 1620 });
1621 } else if (formInline.ruleCode == 'value_of_range') {
1622 let v = panelList.value[12].defaultValue;
1623 return Object.assign({}, formInline, v, {
1624 ruleName: ruleName
1625 });
1450 } 1626 }
1451 } 1627 }
1452 1628
...@@ -1577,7 +1753,64 @@ defineExpose({ ...@@ -1577,7 +1753,64 @@ defineExpose({
1577 </el-dialog> 1753 </el-dialog>
1578 1754
1579 <!-- 值域范围 --> 1755 <!-- 值域范围 -->
1580 <el-dialog></el-dialog> 1756 <el-dialog v-model="valueRangeDialogVisible" title="规则设置" width="850" :modal="true" :close-on-click-modal="false"
1757 destroy-on-close align-center>
1758 <div class="filter-dialog-content" :style="{ height: '500px' }">
1759 <div class="filter-table-list">
1760 <div class="left-title">质检表</div>
1761 <ListPanel class="list_unit" ref="valueCheckFormListRef" :listInfo="tableListInfo" @itemClick="listItemClick" />
1762 </div>
1763 <div class="table-field-right">
1764 <div class="left-title">字段列表详情</div>
1765 <el-table ref="rowTableRef" :data="valueRangeTableListData[dialogSelectSubjectTable.enName]" height="100%" :highlight-current-row="true" stripe
1766 v-loading="valueRangeTableListLoading[dialogSelectSubjectTable.enName]" tooltip-effect="light" border
1767 :style="{ height: 'calc(100% - 32px)', width: '100%', display: 'inline-block' }">
1768 <el-table-column prop="enName" label="字段名" width="140px" align="left" show-overflow-tooltip>
1769 </el-table-column>
1770 <el-table-column prop="chName" label="注释" width="120px" align="left" show-overflow-tooltip>
1771 </el-table-column>
1772 <el-table-column prop="dataTypeChName" label="数据类型" width="100px" show-overflow-tooltip>
1773 <template #default="scope">
1774 <span>{{ scope.row["dataTypeChName"] || '--' }}</span>
1775 </template>
1776 </el-table-column>
1777 <el-table-column label="值域" width="280px" align="left" fixed="right">
1778 <template #default="scope">
1779 <span v-if="scope.row.dataType == 'json' || scope.row.dataType == 'text' || !scope.row.dataType || scope.row.dataType == 'string'">--</span>
1780 <template v-else>
1781 <el-input v-show="scope.row.dataType == 'varchar' || scope.row.dataType == 'char' || scope.row.dataType == 'bit'" v-model.trim="scope.row.dataRange" clearable placeholder="多值按照分号;分隔"> </el-input>
1782 <div class="range-sum" v-show="scope.row.dataType == 'datetime' || scope.row.dataType == 'date'">
1783 <el-date-picker
1784 v-model="scope.row.dateValueRange"
1785 type="daterange"
1786 range-separator="至"
1787 start-placeholder="开始日期"
1788 end-placeholder="结束日期"
1789 format="YYYY-MM-DD"
1790 value-format="YYYY-MM-DD"
1791 :unlink-panels="false"
1792 :disabled="props.readonly"
1793 />
1794 </div>
1795 <div class="range-sum" v-show="scope.row.dataType == 'int' || scope.row.dataType == 'decimal' || scope.row.dataType == 'tinyint' || scope.row.dataType == 'timestamp' || scope.row.dataType == 'time'">
1796 <el-input :disabled="props.readonly" v-model.trim="scope.row.startValue" placeholder="请输入" clearable> </el-input>
1797 <span class="text"></span>
1798 <el-input :disabled="props.readonly" v-model.trim="scope.row.endValue" placeholder="请输入" clearable> </el-input>
1799 </div>
1800 </template>
1801 </template>
1802 </el-table-column>
1803 </el-table>
1804 </div>
1805 </div>
1806
1807 <template #footer v-if="!props.readonly">
1808 <div class="dialog-footer">
1809 <el-button @click="cancelValueRangeDialog" v-preReClick>取消</el-button>
1810 <el-button @click="submitValueRange" type="primary" v-preReClick>确定</el-button>
1811 </div>
1812 </template>
1813 </el-dialog>
1581 1814
1582 <!-- 表行数检查 --> 1815 <!-- 表行数检查 -->
1583 <el-dialog v-model="tableRowDialogVisible" title="规则设置" width="750" :modal="true" :close-on-click-modal="false" 1816 <el-dialog v-model="tableRowDialogVisible" title="规则设置" width="750" :modal="true" :close-on-click-modal="false"
...@@ -1655,7 +1888,7 @@ defineExpose({ ...@@ -1655,7 +1888,7 @@ defineExpose({
1655 padding-left: 8px; 1888 padding-left: 8px;
1656 } 1889 }
1657 1890
1658 .el-input { 1891 .filter-edit .el-input {
1659 margin-left: 8px; 1892 margin-left: 8px;
1660 width: calc(100% - 16px); 1893 width: calc(100% - 16px);
1661 } 1894 }
...@@ -1679,6 +1912,36 @@ defineExpose({ ...@@ -1679,6 +1912,36 @@ defineExpose({
1679 } 1912 }
1680 } 1913 }
1681 1914
1915 // 值域范围检查右边的字段
1916 .table-field-right {
1917 width: calc(100% - 200px);
1918
1919 .left-title {
1920 border-left: 1px solid #d9d9d9;
1921 }
1922
1923 :deep(.el-table) {
1924 td.el-table__cell {
1925 padding: 2px 0;
1926 height: 36px;
1927 }
1928 }
1929
1930 .range-sum {
1931 width: 100%;
1932 display: inline-flex;
1933 align-items: center;
1934
1935 .text {
1936 margin: 0px 4px;
1937 }
1938
1939 :deep(.el-input) {
1940 width: 50%;
1941 }
1942 }
1943 }
1944
1682 .empty-table-field { 1945 .empty-table-field {
1683 .left-title { 1946 .left-title {
1684 border-left: 1px solid #d9d9d9; 1947 border-left: 1px solid #d9d9d9;
......
...@@ -304,6 +304,34 @@ const transformRulesInfo = (info: any) => { ...@@ -304,6 +304,34 @@ const transformRulesInfo = (info: any) => {
304 })] 304 })]
305 })); 305 }));
306 }) 306 })
307 } else if (info.ruleCode == 'value_of_range') {
308 let subjectTables = toSubjectTables.value;
309 for (const ds in info.ruleFields) {
310 let fields = info.ruleFields[ds];
311 let tableInfo = subjectTables.find(t => t.enName === ds);
312 modelRules.push(Object.assign({}, {
313 modelGroupGuid: modelGroupGuid.value,
314 name: tableInfo.chName,
315 subjectName: tableInfo.enName,
316 subjectGuid: tableInfo.guid,
317 dataSourceGuid: tableInfo.dataSourceGuid,
318 databaseName: tableInfo.dataServerName,
319 modelRuleConfList: [Object.assign({}, info, {
320 ruleField: fields.map(f => {
321 return {
322 guid: f.guid,
323 enName: f.enName,
324 chName: f.chName,
325 dataType: f.dataType,
326 startValue: f.startValue,
327 endValue: f.endValue,
328 dataRange: f.dataRange
329 }
330 }),
331 ruleFields: ''
332 })]
333 }));
334 }
307 } 335 }
308 return modelRules; 336 return modelRules;
309 } 337 }
......
...@@ -120,6 +120,26 @@ const transformRulesInfo = (info: any) => { ...@@ -120,6 +120,26 @@ const transformRulesInfo = (info: any) => {
120 differenceRange: info.rows[0].differenceRange, 120 differenceRange: info.rows[0].differenceRange,
121 rows: '' 121 rows: ''
122 }); 122 });
123 } else if (info.ruleCode == 'value_of_range') {
124 let subjectName = detailInfo.value.subjectName;
125 let fields = info.ruleFields[subjectName];
126 return Object.assign({}, info, {
127 guid: ruleGuid,
128 qualityModelGuid: detailInfo.value.qualityModelGuid,
129 ruleCode: detailInfo.value.ruleCode,
130 ruleField: fields.map(f => {
131 return {
132 guid: f.guid,
133 enName: f.enName,
134 chName: f.chName,
135 dataType: f.dataType,
136 startValue: f.startValue,
137 endValue: f.endValue,
138 dataRange: f.dataRange
139 }
140 }),
141 ruleFields: ''
142 });
123 } 143 }
124 } 144 }
125 145
......
...@@ -116,6 +116,25 @@ const transformRulesInfo = (info) => { ...@@ -116,6 +116,25 @@ const transformRulesInfo = (info) => {
116 differenceRange: info.rows[0].differenceRange, 116 differenceRange: info.rows[0].differenceRange,
117 rows: '' 117 rows: ''
118 }); 118 });
119 } else if (info.ruleCode === 'value_of_range') {
120 let subjectName = modelDetailInfo.value.subjectName;
121 let fields = info.ruleFields[subjectName];
122 return Object.assign({}, info, {
123 qualityModelGuid: modelGuid,
124 ruleCode: info.ruleCode,
125 ruleField: fields.map(f => {
126 return {
127 guid: f.guid,
128 enName: f.enName,
129 chName: f.chName,
130 dataType: f.dataType,
131 startValue: f.startValue,
132 endValue: f.endValue,
133 dataRange: f.dataRange
134 }
135 }),
136 ruleFields: ''
137 });
119 } 138 }
120 } 139 }
121 140
......
...@@ -17,8 +17,7 @@ import { ...@@ -17,8 +17,7 @@ import {
17 deleteImportData, 17 deleteImportData,
18 getImportData, 18 getImportData,
19 exportDictionary, 19 exportDictionary,
20 getStandardSetTree, 20 exportCollectTask,
21 getDictionaryTree,
22 getImageContent 21 getImageContent
23 } from '@/api/modules/queryService'; 22 } from '@/api/modules/queryService';
24 import { commonPageConfig } from '@/utils/enum'; 23 import { commonPageConfig } from '@/utils/enum';
...@@ -347,6 +346,14 @@ const exportData = (ids: any = null) => { ...@@ -347,6 +346,14 @@ const exportData = (ids: any = null) => {
347 exportDictionary(params).then((res: any) => { 346 exportDictionary(params).then((res: any) => {
348 download(res, '数据字典模板.xlsx', 'excel') 347 download(res, '数据字典模板.xlsx', 'excel')
349 }); 348 });
349 } else if (tabsActiveName.value == 'importFile' && isfileImport == '4') {
350 exportCollectTask({
351 importTypes: [
352 "0042"
353 ]
354 }).then((res: any) => {
355 download(res, '元数据模板.xlsx', 'excel')
356 });
350 } 357 }
351 } 358 }
352 359
...@@ -360,13 +367,28 @@ const importData = (info) => { ...@@ -360,13 +367,28 @@ const importData = (info) => {
360 // dialogInfo.value.footer.btns.map((item: any) => delete item.disabled) 367 // dialogInfo.value.footer.btns.map((item: any) => delete item.disabled)
361 return 368 return
362 } 369 }
370 let paramUrl = '';
371 if (isfileImport == '2') {
363 uploadFiles.value.forEach((item: any, index: number) => { 372 uploadFiles.value.forEach((item: any, index: number) => {
364 params.append("file", item.raw); 373 params.append("file", item.raw);
365 }); 374 });
366 let paramUrl = '';
367 if (isfileImport == '2') {
368 paramUrl = `${import.meta.env.VITE_API_ASSET_BASEURL}/dam-catalog-table/excel-by-subject-guid?staffGuid=${userData.staffGuid}&subjectGuid=${route.query.bizGuid}` 375 paramUrl = `${import.meta.env.VITE_API_ASSET_BASEURL}/dam-catalog-table/excel-by-subject-guid?staffGuid=${userData.staffGuid}&subjectGuid=${route.query.bizGuid}`
376 } else if (isfileImport == '4') {
377 if (!info.collectTaskName) {
378 ElMessage({
379 type: 'error',
380 message: '请填写采集任务名称'
381 })
382 return;
383 }
384 uploadFiles.value.forEach((item: any, index: number) => {
385 params.append("uploadFile", item.raw);
386 });
387 paramUrl = `${import.meta.env.VITE_APP_PLAN_BASEURL}/meta-collect-task/meta-collect-import?staffGuid=${userData.staffGuid}&collectTaskName=${info.collectTaskName}`
369 } else { 388 } else {
389 uploadFiles.value.forEach((item: any, index: number) => {
390 params.append("file", item.raw);
391 });
370 paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}&dataType=2` 392 paramUrl = `${import.meta.env.VITE_APP_ADD_FILE}/import-data/import-common?importType=${importType.value}&staffGuid=${userData.staffGuid}&tenantGuid=${userData.tenantGuid}&dataType=2`
371 if (info && Object.keys(info).length) { 393 if (info && Object.keys(info).length) {
372 paramUrl += `&extendFields=${JSON.stringify(info)}` 394 paramUrl += `&extendFields=${JSON.stringify(info)}`
...@@ -424,6 +446,8 @@ const setUploadInfo = () => { ...@@ -424,6 +446,8 @@ const setUploadInfo = () => {
424 } else { 446 } else {
425 if (isfileImport == '2') { 447 if (isfileImport == '2') {
426 importType.value = '0034'; 448 importType.value = '0034';
449 } else if (isfileImport == '4') {
450 importType.value = '0042';
427 } else { 451 } else {
428 importType.value = '0033'; 452 importType.value = '0033';
429 } 453 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!