3ce663e6 by xukangle

Merge branch 'dev_20241202_xukangle' into develop

2 parents 720e5ba4 e3e7540e
......@@ -70,7 +70,11 @@ VITE_APP_COMMON_URL = 'ms-daop-common-service'
#门户接口
VITE_API_PORTALURL = https://swzl-test.zgsjzc.com/portal
#新门户接口
VITE_API_NEW_PORTAL = ms-daop-zcgl-asset-dam-service
#人员服务
VITE_APP_PERSONAL_URL = 'ms-daop-personel-service'
#数据资产接口地址
VITE_API_ASSET_BASEURL = ms-swzl-data-dam-service
#数据同步接口地址
......
......@@ -13,7 +13,7 @@ export const getProductList = (params) => request({
/** 获取已添加的数据产品列表 */
export const getAddedProductList = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/list-select`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/list-select`,
method: 'post',
data: params
})
......@@ -27,35 +27,43 @@ export const getListingList = (params) => request({
/** 获取数据产品上架详情 */
export const getListingDetail = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/detail`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/detail`,
method: 'get',
params
})
/** 新增数据产品上架信息 */
export const listingSave = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/save`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/save`,
method: 'post',
data: params
});
/**数据产品上架新增门户/product-grounding/save-gateway */
export const listingSavePortal = (params) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/save-gateway`,
method: 'post',
data: params
});
/** 更新数据产品上架信息 */
export const listingUpdate = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/update`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/update`,
method: 'post',
data: params
});
/** 删除数据产品上架信息 */
export const listingDelete = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/delete`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/delete`,
method: 'delete',
data: params
});
/** 更新数据产品上架状态及上架平台 */
export const listingUpdateStatus = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/product-grounding/update-grounding-pick`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/product-grounding/update-grounding-pick`,
method: 'post',
data: params
});
......@@ -65,75 +73,75 @@ export const listingUpdateStatus = (params) => request({
**/
/** 获取数据需求列表。 */
export const getDemandList = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/page-list`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/page-list`,
method: 'post',
data: params
})
/** 获取数据需求发布详情 */
export const getDemandDetail = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/detail`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/detail`,
method: 'get',
params
})
/** 新增数据需求发布信息 */
export const demandSave = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/save`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/save`,
method: 'post',
data: params
});
/** 新增竞赛需求发布 */
export const competitionSave = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/competition-save`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/competition-save`,
method: 'post',
data: params
});
/** 新增要素市场需求发布 */
export const marketSave = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/market-save`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/market-save`,
method: 'post',
data: params
});
/** 更新数据需求发布信息 */
export const demandUpdate = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/update`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/update`,
method: 'post',
data: params
});
/** 更新竞赛发布信息 */
export const competitionUpdate = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/competition-update`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/competition-update`,
method: 'post',
data: params
});
/** 更新数据要素市场发布信息 */
export const marketUpdate = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/market-update`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/market-update`,
method: 'post',
data: params
});
/** 删除数据需求发布信息 */
export const demandDelete = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/delete`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/delete`,
method: 'delete',
data: params
});
/** 更新数据需求发布状态及上架平台 */
export const demandUpdateStatus = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/update-listing-Status`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/update-listing-Status`,
method: 'post',
data: params
});
/** 验证数据需求名称唯一性 */
export const checkDemandName = (params) => request({
url: `${import.meta.env.VITE_API_ASSET_BASEURL}/demand-release/verify-data-name?dataName=${params}`,
url: `${import.meta.env.VITE_API_NEW_PORTAL}/demand-release/verify-data-name?dataName=${params}`,
method: 'get'
})
......
......@@ -6,16 +6,12 @@
import { Warning } from "@element-plus/icons-vue";
import TableTools from '@/components/Tools/table_tools.vue';
import {
getDictionary,
saveBizRuleConfig,
getDbDirTreeList,
getDbDirTablePageList,
getDbDirFieldPageList,
getExecGuidAndName,
getClassifyTreeList,
getCgLabelPageList,
execTaskFieldList,
execTaskSheetList,
getTaskExeTreeList,
getDbFieldList,
exportCgDir,
......@@ -32,6 +28,7 @@ import {
import { TableColumnWidth } from "@/utils/enum";
import router from "@/router";
import { download } from "@/utils/common";
import { da } from "element-plus/es/locale";
const currentPath = ref<string[]>([]);
......@@ -154,6 +151,25 @@ onMounted(async () => {
// getLabelListData();
getGradeData(refGradeGuid.value);
getFieldTypeData();
if (route.query.databaseGuid && route.query.tableGuid) {
activeName.value = 'second';
classifyDetailGuidInfo.value = '';
selectedA.value = route.query.databaseGuid;
selectedB.value = route.query.tableGuid;
selectedC.value = null;
optionsA.value = [];
optionsB.value = [];
optionsC.value = [];
await getDataBaseTreeData();
await getDbDirTableSelectData(1, {});
await getDataBaseTableData();
await getDataBaseFieldData();
await getDbDirTableSelectData(2, { databaseGuid: selectedA.value, condition: "2" });
}
})
......@@ -264,7 +280,7 @@ const toSearch = (val: any, clear: boolean = false) => {
pageIndex: 1,
pageSize: 50,
execGuid: execGuidInfo.value.execGuid,
tableGuid: selectedB.value || tableGuid.value || '',
tableGuid: '',
databaseGuid: selectedA.value || dataBaseGuid.value || '',
classifyDetailGuid: '',
gradeDetailGuid: '',
......@@ -275,7 +291,7 @@ const toSearch = (val: any, clear: boolean = false) => {
pageIndex: 1,
pageSize: 50,
execGuid: execGuidInfo.value.execGuid,
tableGuid: selectedB.value || tableGuid.value || '',
tableGuid: '',
databaseGuid: selectedA.value || dataBaseGuid.value || '',
fieldGuid: '',
classifyDetailGuid: val.classifyName,
......@@ -396,11 +412,8 @@ const getGradeData = async (refGradeGuid) => {
// btns-area
const checked = ref(false);
const changeCheck = (val) => {
checked.value = val;
getDataBaseTableData({
isDataAsset: val ? 'Y' : ''
});
getDataBaseTableData();
}
//下方表格配置
......@@ -973,7 +986,7 @@ const classEditFormItems = ref<any>([{
{
label: '是否必填',
type: "select",
field: "isNotNull",
field: "notNull",
disabled: false,
default: '',
options: [
......@@ -1039,7 +1052,7 @@ const drawerBtnClick = async (btn, info) => {
} else {
btn.loading = true;
console.log('drawerBtnClick', info);
const { orderNumLength, orderNum, startNumber, endNumber, fieldValueRange, startValue, endValue, fieldPrecision, dictionaryGuid, isUnique, isNotNull } = info;
const { orderNumLength, orderNum, startNumber, endNumber, fieldValueRange, startValue, endValue, fieldPrecision, dictionaryGuid, isUnique, notNull } = info;
// 判断长度orderNumLength,orderNum 要么都有值,要么都没有值,不能只有一个有值,一个没有值精确提醒
let fieldLengthCondition: any = '';
if ((orderNumLength === 'between' && !startNumber) || (orderNumLength === 'between' && !endNumber)) {
......@@ -1080,7 +1093,7 @@ const drawerBtnClick = async (btn, info) => {
fieldPrecision,
dictionaryGuid,
isUnique,
isNotNull,
notNull,
fieldLengthCondition,
fieldValueRange,
fieldGuid: item,
......@@ -1091,7 +1104,7 @@ const drawerBtnClick = async (btn, info) => {
fieldPrecision,
dictionaryGuid,
isUnique,
isNotNull,
notNull,
fieldLengthCondition,
fieldGuid: item,
execGuid: execGuidInfo.value.execGuid,
......@@ -1198,6 +1211,8 @@ const drawerSelectChange = (val, row, info) => {
});
}
// 记录切换时的信息记录
// tab切换
const activeName = ref('first');
......@@ -1224,6 +1239,10 @@ const handleClick = async (tab: any) => {
await getDataBaseTableData();
await getDataBaseFieldData();
await getDbDirTableSelectData(2, { databaseGuid: selectedA.value, condition: "2" });
// if (activeTab.value === 'word') {
// await getDbDirTableSelectData(1, {});
// await getDbDirTableSelectData(2, { databaseGuid: selectedA.value, condition: "2" });
// }
} else {
searchItemList.value[0].visible = true;
......@@ -1255,7 +1274,6 @@ const getDataBaseTreeData = async () => {
dataBaseTreeData.value = dataArray;
dataBaseTreeInfo.value.data = dataArray;
if (localStorage.getItem("shouldReloadData")) {
console.log('reload');
dataBaseTreeInfo.value.expandedKey = [];
const info = JSON.parse(localStorage.getItem("onActiveInfo") || '{}');
dataBaseTreeInfo.value.expandedKey.push(dataArray[info.dbindex].guid);
......@@ -1271,6 +1289,22 @@ const getDataBaseTreeData = async () => {
dataBaseTreeInfo.value.loading = false;
return;
}
if (route.query.databaseGuid && route.query.tableGuid) {
dataBaseTreeInfo.value.expandedKey = [];
dataBaseTreeInfo.value.expandedKey.push(route.query.tableGuid);
dataBaseTreeInfo.value.currentNodeKey = route.query.tableGuid;
dataBaseGuid.value = route.query.databaseGuid;
currentDatabasePath.value = findDDatabasePath(dataBaseTreeData.value, route.query.tableGuid);
const item = dataBaseTreeData.value.find(item => item.databaseGuid === route.query.databaseGuid);
if (item === 1) {
isShowCreateBtn.value = true;
}
if (item === 2) {
isShowCreateBtn.value = false;
}
dataBaseTreeInfo.value.loading = false;
return;
}
dataBaseTreeInfo.value.expandedKey.push(dataArray[0].guid);
dataBaseTreeInfo.value.currentNodeKey = dataArray[0].guid;
dataBaseGuid.value = dataArray[0].databaseGuid;
......@@ -1310,10 +1344,10 @@ const getDataBaseTableData = async (params = {}) => {
const dataBaseParams = {
pageIndex: dataBasePage.value.curr,
pageSize: dataBasePage.value.limit,
isDataAsset: '',
isDataAsset: checked.value ? 'Y' : 'N',
execGuid: execGuidInfo.value.execGuid,
tableGuid: tableGuid.value,
databaseGuid: dataBaseGuid.value,
tableGuid: tableGuid.value || selectedA.value || '',
databaseGuid: dataBaseGuid.value || selectedB.value || '',
fieldGuid: "",
labelGuid: "",
classifyDetailGuid: "",
......@@ -1362,8 +1396,8 @@ const getDataBaseFieldData = async (params = {}) => {
pageIndex: dataFieldPage.value.curr,
pageSize: dataFieldPage.value.limit,
execGuid: execGuidInfo.value.execGuid,
tableGuid: tableGuid.value || '',
databaseGuid: dataBaseGuid.value || '',
tableGuid: tableGuid.value || selectedA.value || '',
databaseGuid: dataBaseGuid.value || selectedB.value || '',
fieldGuid: "",
labelGuid: "",
classifyDetailGuid: "",
......@@ -1435,7 +1469,7 @@ const showTableOrDatabase = ref(true);
const isShowCreateBtn = ref(true);
// 定义tableGuid
const tableGuid = ref('');
const dataBaseGuid = ref('');
const dataBaseGuid = ref<any>('');
const dataBaseInfo = ref<any>({});
// 记录onActive的信息
......@@ -1507,7 +1541,7 @@ const dataBasenodeClick = (data: any) => {
}
const findDDatabasePath = (data: any[], targetGuid: string, path: string[] = []) => {
const findDDatabasePath = (data: any[], targetGuid: any, path: string[] = []) => {
for (const item of data) {
path.push(item.name); // 添加当前节点名称
if (item.guid === targetGuid) {
......@@ -1697,13 +1731,7 @@ const getDbDirTableSelectData = async (type, params = {}) => {
}));
}
if (type == 2) {
if (activeTab.value === 'word') {
optionsC.value = res.data.map((item) => ({
dbGuid: item.fieldName, // 字段标识
name: item.fieldName, // 字段名称
}));
return;
}
optionsB.value = res.data.map((item) => ({
dbGuid: item.tableGuid, // 表标识
name: item.tableChName, // 表名称
......@@ -1749,11 +1777,30 @@ const onAChange = async () => {
await getDbDirTableSelectData(2, { databaseGuid: selectedA.value, condition: "2" }); // 数据库搜索
}
}
// nextTick(() => {
// const nodeElement = dataBaseRef.value.treeRef.$el.querySelector(`[data-key="${String(selectedA.value)}"]`);
// if (nodeElement) {
// nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight > 0 && (dataBaseRef.value.treeRef.$el.scrollTop = nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight + 32);
// }
// });
nextTick(() => {
setTimeout(() => {
const nodeElement = dataBaseRef.value.treeRef.$el.querySelector(`[data-key="${String(selectedA.value)}"]`);
if (nodeElement) {
nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight > 0 && (dataBaseRef.value.treeRef.$el.scrollTop = nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight + 32);
const rect = nodeElement.getBoundingClientRect();
const treeRect = dataBaseRef.value.treeRef.$el.getBoundingClientRect();
const offset = rect.top - treeRect.top;
console.log('offset', rect, treeRect);
// 这里的 32 是偏移量,可以调整为你需要的距离
const targetScrollTop = dataBaseRef.value.treeRef.$el.scrollTop + offset
dataBaseRef.value.treeRef.$el.scrollTo({
top: targetScrollTop,
behavior: 'smooth'
});
}
}, 200);
});
console.log('selectedA',);
......@@ -1773,11 +1820,29 @@ const onBChange = async () => {
await getDbDirFieldSelectData(3, { tableGuid: selectedB.value, databaseGuid: selectedA.value, condition: "3" });
}
}
// nextTick(() => {
// const nodeElement = dataBaseRef.value.treeRef.$el.querySelector(`[data-key="${String(selectedB.value)}"]`);
// if (nodeElement) {
// nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight > 0 && (dataBaseRef.value.treeRef.$el.scrollTop = nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight + 32);
// }
// });
nextTick(() => {
setTimeout(() => {
const nodeElement = dataBaseRef.value.treeRef.$el.querySelector(`[data-key="${String(selectedB.value)}"]`);
if (nodeElement) {
nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight > 0 && (dataBaseRef.value.treeRef.$el.scrollTop = nodeElement.offsetTop - dataBaseRef.value.treeRef.$el.clientHeight + 32);
const rect = nodeElement.getBoundingClientRect();
const treeRect = dataBaseRef.value.treeRef.$el.getBoundingClientRect();
const offset = rect.top - treeRect.top;
console.log('offset', rect, treeRect);
// 这里的 32 是偏移量,可以调整为你需要的距离
const targetScrollTop = dataBaseRef.value.treeRef.$el.scrollTop + offset
dataBaseRef.value.treeRef.$el.scrollTo({
top: targetScrollTop,
behavior: 'smooth'
});
}
}, 200);
});
};
......@@ -1822,12 +1887,6 @@ onActivated(async () => {
const gradeTreeRef = ref<any>();
const treeSelectNodeClick = (node, item) => {
nextTick(() => {
const nodeElement = gradeTreeRef.value.treeRef.$el.querySelector(`[data-key="${String(node.classifyDetailGuid)}"]`);
if (nodeElement) {
nodeElement.offsetTop - gradeTreeRef.value.treeRef.$el.clientHeight > 0 && (gradeTreeRef.value.treeRef.$el.scrollTop = nodeElement.offsetTop - gradeTreeRef.value.treeRef.$el.clientHeight + 32);
}
});
classifyDetailGuidInfo.value = node.classifyDetailGuid;
treeInfo.value.expandedKey = [];
treeInfo.value.expandedKey.push(node.classifyDetailGuid);
......@@ -1840,8 +1899,28 @@ const treeSelectNodeClick = (node, item) => {
console.error('未找到路径');
}
if (activeName.value === 'second' && activeTab.value === 'word') {
}
nextTick(() => {
setTimeout(() => {
const nodeElement = gradeTreeRef.value.treeRef.$el.querySelector(`[data-key="${String(node.classifyDetailGuid)}"]`);
if (nodeElement) {
const rect = nodeElement.getBoundingClientRect();
const treeRect = gradeTreeRef.value.treeRef.$el.getBoundingClientRect();
const offset = rect.top - treeRect.top;
console.log('offset', rect, treeRect);
// 这里的 32 是偏移量,可以调整为你需要的距离
const targetScrollTop = gradeTreeRef.value.treeRef.$el.scrollTop + offset
gradeTreeRef.value.treeRef.$el.scrollTo({
top: targetScrollTop,
behavior: 'smooth'
});
}
}, 200);
});
}
watchEffect(() => {
......
......@@ -6,7 +6,6 @@
import { ref } from "vue";
import useUserStore from "@/store/modules/user";
import { getBizRuleConfigDetail, getDictionaryAll, getNewDataTypeList, saveBizRuleConfig, } from '@/api/modules/dataInventory'
import { el, ro } from "element-plus/es/locale";
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
const route = useRoute();
......@@ -27,6 +26,31 @@ const getBizRuleConfigDetailData = async () => {
item.isEdit = false
})
tableData.value = bizRuleConfigData.value
// 处理tableData,fieldLengthCondition,有值则不用加字段,如果没有值则加字段lengthSymbol 为''
tableData.value.forEach((item: any) => {
if (!item.fieldLengthCondition) {
item.lengthSymbol = ''
}
if (!isSingleInput(item.fieldType) && (item.startValue || item.endValue)) {
item.fieldValueRange = (item.startValue ? item.startValue : '') + '#' + (item.endValue ? item.endValue : '')
}
if (item.fieldLengthCondition) {
const arr = item.fieldLengthCondition.split('#'); // 按 '#' 分割
// 判断数组中是否包含 'between'
if (arr.includes('between')) {
// 如果包含 'between',则将对应的 start 和 end 值赋给相应的字段
item.lengthSymbol = 'between';
item.numberRangeStart = arr[1]; // start value
item.numberRangeEnd = arr[2]; // end value
} else {
// 否则处理其他符号条件,如 '>=', '<=', '>', '<', '=' 等
item.lengthSymbol = arr[0]; // 符号(如 '>', '<=', 等)
item.lengthValue = arr[1]; // 值(如 10,20 等)
}
}
})
tableFieldsLoading.value = false
} else {
proxy.$message.error(res.msg)
......@@ -161,38 +185,45 @@ const tempRowData = ref<any>([]);
// 编辑行
const editRow = (row) => {
console.log('编辑:', row);
// 暂存编辑前的数据 用于取消编辑时恢复原始数据,先判断是否已经暂存过tempRowData通过fieldGuid
if (!tempRowData.value.find((item) => item.fieldGuid === row.fieldGuid)) {
tempRowData.value.push({ ...row });
}
if (row.fieldLengthCondition) {
const arr = row.fieldLengthCondition.split('#'); // 按 '#' 分割
// console.log('编辑:', row);
// // 暂存编辑前的数据 用于取消编辑时恢复原始数据,先判断是否已经暂存过tempRowData通过fieldGuid
// if (!tempRowData.value.find((item) => item.fieldGuid === row.fieldGuid)) {
// tempRowData.value.push({ ...row });
// }
// console.log('tempRowData:', tempRowData.value);
// if (row.fieldLengthCondition) {
// const arr = row.fieldLengthCondition.split('#'); // 按 '#' 分割
// // 判断数组中是否包含 'between'
// if (arr.includes('between')) {
// // 如果包含 'between',则将对应的 start 和 end 值赋给相应的字段
// row.lengthSymbol = 'between';
// row.numberRangeStart = arr[1]; // start value
// row.numberRangeEnd = arr[2]; // end value
// } else {
// // 否则处理其他符号条件,如 '>=', '<=', '>', '<', '=' 等
// row.lengthSymbol = arr[0]; // 符号(如 '>', '<=', 等)
// row.lengthValue = arr[1]; // 值(如 10,20 等)
// }
// }
// if (row.fieldValueRange && !isSingleInput(row.fieldType)) {
// const arr = row.fieldValueRange.split('#')
// row.startValue = arr[0]
// row.endValue = arr[1]
// }
// 判断数组中是否包含 'between'
if (arr.includes('between')) {
// 如果包含 'between',则将对应的 start 和 end 值赋给相应的字段
row.lengthSymbol = 'between';
row.numberRangeStart = arr[1]; // start value
row.numberRangeEnd = arr[2]; // end value
} else {
// 否则处理其他符号条件,如 '>=', '<=', '>', '<', '=' 等
row.lengthSymbol = arr[0]; // 符号(如 '>', '<=', 等)
row.lengthValue = arr[1]; // 值(如 10,20 等)
}
}
if (row.fieldValueRange && !isSingleInput(row.fieldType)) {
const arr = row.fieldValueRange.split('#')
row.startValue = arr[0]
row.endValue = arr[1]
}
row.isEdit = true; // 进入编辑模式
};
// 保存数据
const saveRow = (row) => {
console.log('保存:', row);
const tempRow = row;
let fieldLengthCondition = ''
let fieldValueRange = ''
if (row.lengthSymbol === 'between') {
// 校验不能为空,其中一个为空则提示
if (!row.numberRangeStart || !row.numberRangeStart) {
......@@ -209,6 +240,7 @@ const saveRow = (row) => {
}
console.log(row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd)
row.fieldLengthCondition = row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd
fieldLengthCondition = row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd
} else {
if (!row.lengthValue && row.lengthSymbol) {
proxy.$message.error('请输入完整的长度范围');
......@@ -220,19 +252,36 @@ const saveRow = (row) => {
}
if (!row.lengthSymbol && !row.lengthValue) {
row.fieldLengthCondition = ''
fieldLengthCondition = ''
}
if (row.lengthSymbol && row.lengthValue) {
console.log('row.lengthSymbol', row.lengthSymbol + '#' + row.lengthValue)
row.fieldLengthCondition = row.lengthSymbol + '#' + row.lengthValue
fieldLengthCondition = row.lengthSymbol + '#' + row.lengthValue
}
}
// 字段范围 双文本情况
if (!isSingleInput(row.fieldType)) {
if (row.startValue || row.endValue) {
row.fieldValueRange = (row.startValue ? row.startValue : '') + '#' + (row.endValue ? row.endValue : '')
fieldValueRange = (row.startValue ? row.startValue : '') + '#' + (row.endValue ? row.endValue : '')
} else {
row.fieldValueRange = ''
fieldValueRange = ''
}
}
if (tableData.value.find((item: any) => item.fieldGuid === row.fieldGuid)) {
console.log('tempRowData.value')
tableData.value.forEach(item => {
if (item.fieldGuid === row.fieldGuid) {
item.fieldLengthCondition = fieldLengthCondition
item.fieldValueRange = fieldValueRange
item.fieldGuid = tempRow.fieldGuid
item.fieldPrecision = tempRow.fieldPrecision
item.isUnique = tempRow.isUnique
item.notNull = tempRow.notNull
}
});
}
row.isEdit = false
}
......@@ -241,19 +290,48 @@ const loading = ref(false)
const saveData = async () => {
loading.value = true
let inParams = [] as any
console.log('tableData.value', tableData.value)
// 遍历tableData.value,校验
for (let i = 0; i < tableData.value.length - 1; i++) {
let item = tableData.value[i]
if (item.lengthSymbol == 'between') {
if ((!item.numberRangeStart && item.numberRangeEnd) || (item.numberRangeStart && !item.numberRangeEnd) || (!item.numberRangeStart && !item.numberRangeEnd)) {
proxy.$message.error(`第${i + 1}行,请输入完整的长度范围!`);
loading.value = false
return
}
} else if (item.lengthSymbol === '>' || item.lengthSymbol === '<' || item.lengthSymbol === '=' || item.lengthSymbol === '>=' || item.lengthSymbol === '<=') {
if ((!item.lengthSymbol && item.lengthValue) || (item.lengthSymbol && !item.lengthValue)) {
proxy.$message.error(`第${i + 1}行,请输入完整的长度范围!`);
loading.value = false
return
}
}
}
console.log('tableData.value', tableData.value)
tableData.value.forEach((item: any) => {
if (item.startValue || item.endValue) {
let fieldLengthCondition = ''
if (item.lengthSymbol == 'between') {
fieldLengthCondition = item.lengthSymbol + '#' + item.numberRangeStart + '#' + item.numberRangeEnd
} else if (item.lengthSymbol === '>' || item.lengthSymbol === '<' || item.lengthSymbol === '=' || item.lengthSymbol === '>=' || item.lengthSymbol === '<=') {
fieldLengthCondition = item.lengthSymbol + '#' + item.lengthValue
} else {
fieldLengthCondition = ''
}
if (isSingleInput(item.fieldType)) {
inParams.push(
{
fieldGuid: item.fieldGuid,
execGuid: router.currentRoute.value.query.execGuid,
fieldLengthCondition: item.fieldLengthCondition,
fieldLengthCondition: fieldLengthCondition,
fieldPrecision: item.fieldPrecision,
dictionaryGuid: item.dictionaryGuid,
isUnique: item.isUnique,
notNull: item.notNull,
startValue: item.startValue,
endValue: item.endValue
fieldValueRange: item.fieldValueRange
}
)
} else {
......@@ -261,25 +339,25 @@ const saveData = async () => {
{
fieldGuid: item.fieldGuid,
execGuid: router.currentRoute.value.query.execGuid,
fieldLengthCondition: item.fieldLengthCondition,
fieldLengthCondition: fieldLengthCondition,
fieldPrecision: item.fieldPrecision,
dictionaryGuid: item.dictionaryGuid,
isUnique: item.isUnique,
notNull: item.notNull,
fieldValueRange: item.fieldValueRange
startValue: item.startValue,
endValue: item.endValue
}
)
}
})
// 克隆一份 inParams,用于遍历
// // 克隆一份 inParams,用于遍历
const cloneInParams = JSON.parse(JSON.stringify(inParams));
// 遍历 cloneInParams,检查每一项的字段
// // 遍历 cloneInParams,检查每一项的字段
let allFieldsEmpty = true; // 标记所有字段是否都为空
for (let i = 0; i < cloneInParams.length; i++) {
// 判断每项中除 fieldGuid 和 execGuid 外的字段是否都为空
const item = cloneInParams[i];
const isEmpty = !item.notNull && !item.fieldValueRange && !item.isUnique && !item.dictionaryGuid && !item.fieldLengthCondition && !item.fieldPrecision;
const isEmpty = !item.notNull && !item.fieldValueRange && !item.isUnique && !item.dictionaryGuid && !item.fieldLengthCondition && !item.fieldPrecision && !item.startValue && !item.endValue;
// 如果有有效的字段,则不清空 inParams
if (!isEmpty) {
......@@ -323,10 +401,10 @@ const cancel = () => {
// 点击取消
const cancelEdit = (row) => {
console.log('取消编辑:', row);
// 可在此恢复原始数据逻辑,要查找暂存的数据 tempRowData 中 fieldGuid 与当前行的 fieldGuid 相同的数据
const tempRow = tempRowData.value.find((item) => item.fieldGuid === row.fieldGuid);
Object.assign(row, tempRow);
// console.log('取消编辑:', row, tempRowData.value);
// // 可在此恢复原始数据逻辑,要查找暂存的数据 tempRowData 中 fieldGuid 与当前行的 fieldGuid 相同的数据
// const tempRow = tempRowData.value.find((item) => item.fieldGuid === row.fieldGuid);
// Object.assign(row, tempRow);
row.isEdit = false; // 退出编辑状态
}
......@@ -399,6 +477,21 @@ function parseFieldLengthCondition(condition) {
}
return displayText;
}
const inputLengthKeyUp = (regexp, scope, field, max: any = null, min: any = null) => {
scope.row[field] = scope.row[field].replace(regexp, '');
if (field == 'fieldLength' && scope.row.dataType == 'decimal') {
max = 65;
}
/** 最大值设置2000 */
if (max && scope.row[field] > max) {
scope.row[field] = max;
}
if (min !== null && scope.row[field] != '' && scope.row[field] <= min) {
scope.row[field] = min;
}
}
</script>
<template>
<div class="configure-rules">
......@@ -507,10 +600,11 @@ function parseFieldLengthCondition(condition) {
<el-table-column prop="fieldPrecision" label="精度" width="120" align="center" show-overflow-tooltip>
<template #default="scope">
<!-- 判断是否是浮点型,并且当前行是否可编辑 -->
<span v-if="!scope.row.isEdit || !editableFields.fieldPrecision || scope.row.fieldType !== 'float'">
<span v-if="!scope.row.isEdit || !editableFields.fieldPrecision || scope.row.fieldType !== 'decimal'">
{{ scope.row.fieldPrecision ? scope.row.fieldPrecision : '--' }}
</span>
<el-input v-else v-model="scope.row.fieldPrecision" placeholder="请输入精度" clearable maxlength="2" />
<el-input v-else v-model="scope.row.fieldPrecision" placeholder="请输入精度" clearable
@input="inputLengthKeyUp(/\D/g, scope, 'fieldPrecision', 30, 1)" />
</template>
</el-table-column>
......
......@@ -1087,7 +1087,7 @@ onActivated(() => {
</el-select>
</div>
<div v-else>
{{ fieldData ? fieldData.find(item => item.value === scope.row.fieldType)?.label : '--' }}
{{ fieldData ? (fieldData.find(item => item.value === scope.row.fieldType)?.label || '--') : '--' }}
</div>
</template>
</el-table-column>
......@@ -1096,7 +1096,8 @@ onActivated(() => {
<el-table-column prop="fieldLength" label="长度" width="100" align="left">
<template #default="scope">
<!-- 非编辑状态 -->
<span v-if="!scope.row.isEdit || (scope.row.isPrimary === 'Y' && route.query.editOpt === '1')">
<span
v-if="!scope.row.isEdit || (scope.row.isPrimary === 'Y' && route.query.editOpt === '1' && route.query.state != '0')">
{{ ['varchar', 'decimal', 'char'].includes(scope.row.fieldType) ? scope.row.fieldLength || '--' : '--'
}}
</span>
......
......@@ -215,7 +215,8 @@ const toPatn = (type) => {
router.push({
name: "productListingDetail",
query: {
type
type,
groundingPick: '门户数据专区'
},
});
} else {
......
......@@ -15,7 +15,7 @@ import { changeNum } from '@/utils/common';
import { onUploadFilePreview, onUploadFileDownload } from '@/api/modules/common';
import { getAreaData, getServiceTenants } from "@/api/modules/queryService";
import { getApproveList, getTenantApprove, registerApproveAllow, registerApproveBackup, getSubjectDoaminList, getServiceDetail } from "@/api/modules/dataAsset";
import { getProductList, getAddedProductList, getListingDetail, listingSave, listingUpdate, getParamsDataList } from "@/api/modules/dataProduct";
import { getProductList, getAddedProductList, getListingDetail, listingSave, listingUpdate, listingSavePortal, getParamsDataList } from "@/api/modules/dataProduct";
import { getMatchDetail } from "@/api/modules/dataFinance";
import { useValidator } from '@/hooks/useValidator';
......@@ -153,15 +153,15 @@ const formInfo = ref({
clearable: true,
required: true,
}, {
label: "产品类型",
label: "资产类型",
type: "select",
placeholder: "请选择",
field: "damType",
default: '',
options: damTypes.value,
props: {
value: 'paramValue',
label: 'paramName'
value: 'value',
label: 'label'
},
disabled: true,
required: true,
......@@ -214,7 +214,7 @@ const formInfo = ref({
maxlength: 19,
regexp: /\D/g,
default: '',
disabled: true,
disabled: false,
required: true
}, {
label: '病例总数(例)',
......@@ -222,7 +222,7 @@ const formInfo = ref({
placeholder: '请输入',
field: 'caseNumber',
default: '',
disabled: true,
disabled: false,
required: false
}, {
label: '数据覆盖地域',
......@@ -300,6 +300,7 @@ const formInfo = ref({
field: 'productPrice',
default: '',
disabled: false,
inputType: 'moneyNumber',
required: true
},
{
......@@ -788,11 +789,17 @@ const submitForm = (btn, formEl, tosub = false) => {
// if (params.content) {
// params.productDesc = truncateHTML(params.content, 400);
// }
params.dataScale = formInfo.value.items.at(4).defaultValue;
params.caseNumber = formInfo.value.items.at(5).defaultValue;
console.log(params, formInfo.value.items.at(4).defaultValue, formInfo.value, '-----------------');
params.dataScale = formInfo.value.items.at(4).defaultValue || formInfo.value.items.at(4).default;
params.caseNumber = formInfo.value.items.at(5).defaultValue || formInfo.value.items.at(4).default;
params.timeAreaStart = params.dateRange ? params.dateRange[0] : '';
params.timeAreaEnd = params.dateRange ? params.dateRange[1] : '';
params.groundingPick = [route.query.groundingPick];
// 删除dateRange字段
delete params.dateRange;
flowDetailLoading.value = true;
if (detailType == 'add') {
listingSave(params).then((res: any) => {
listingSavePortal(params).then((res: any) => {
if (res.code == proxy.$passCode) {
ElMessage({
type: "success",
......@@ -1136,7 +1143,7 @@ onBeforeMount(() => {
}
}
getApproveData();
getParamsDataList({ dictType: '字段类型' }).then((res: any) => {
getParamsDataList({ dictType: '资产类型' }).then((res: any) => {
if (res.code == proxy.$passCode) {
damTypes.value = res.data || [];
let item = formInfo.value.items.find(item => item.field == 'damType');
......@@ -1148,9 +1155,8 @@ onBeforeMount(() => {
getParamsDataList({ dictType: '交付方式' }).then((res: any) => {
if (res.code == proxy.$passCode) {
deliveryWayList.value = res.data || [];
// let item = formInfo.value.items.find(item => item.field == 'deliveryWay');
// item && (item.options = deliveryWayList.value);
formInfo.value.items[6].options = res.data || [];
let item = formInfo.value.items.find(item => item.field == 'deliveryWay');
item && (item.options = deliveryWayList.value);
} else {
proxy.$ElMessage.error(res.msg);
}
......@@ -1158,10 +1164,8 @@ onBeforeMount(() => {
getParamsDataList({ dictType: '定价方式' }).then((res: any) => {
if (res.code == proxy.$passCode) {
pricingMethodList.value = res.data || [];
formInfo.value.items[7].options = res.data || [];
// let item = formInfo.value.items.find(item => item.field == 'deliveryWay');
// item && (item.options = deliveryWayList.value);
// formInfo.value.items[7].options = res.data || [];
let item = formInfo.value.items.find(item => item.field == 'pricingWay');
item && (item.options = pricingMethodList.value);
} else {
proxy.$ElMessage.error(res.msg);
}
......@@ -1169,10 +1173,8 @@ onBeforeMount(() => {
getParamsDataList({ dictType: '价格单位' }).then((res: any) => {
if (res.code == proxy.$passCode) {
priceUnitList.value = res.data || [];
formInfo.value.items[9].options = res.data || [];
// let item = formInfo.value.items.find(item => item.field == 'deliveryWay');
// item && (item.options = deliveryWayList.value);
// formInfo.value.items[7].options = res.data || [];
let item = formInfo.value.items.find(item => item.field == 'priceUnit');
item && (item.options = priceUnitList.value);
} else {
proxy.$ElMessage.error(res.msg);
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!