7a8fa58a by xukangle

fix

1 parent 52790e07
...@@ -840,3 +840,14 @@ export const getFidldEnName = (data) => request({ ...@@ -840,3 +840,14 @@ export const getFidldEnName = (data) => request({
840 method: 'post', 840 method: 'post',
841 data 841 data
842 }) 842 })
843
844 /**
845 * 数据库目录-查询字段分类分级
846 * @param {Object}
847 * @path /db-dir/field/get-classify-and-grade
848 */
849 export const getFieldClassifyAndGrade = (data) => request({
850 url: `${import.meta.env.VITE_APP_CHECK_BASEURL}/db-dir/field/get-classify-and-grade`,
851 method: 'post',
852 data
853 })
......
...@@ -99,10 +99,16 @@ const onClickOutside = (e: any) => { ...@@ -99,10 +99,16 @@ const onClickOutside = (e: any) => {
99 }; 99 };
100 100
101 const getDrawerConRef = (refName) => { 101 const getDrawerConRef = (refName) => {
102 console.log(refName, '----------')
102 if (refName == 'drawerTableRef') { 103 if (refName == 'drawerTableRef') {
103 const dtf = drawerTableRef.value[0] || drawerTableRef.value 104 const dtf = drawerTableRef.value[0] || drawerTableRef.value
104 return dtf?.tableRef 105 return dtf?.tableRef
105 } 106 }
107 // const drawerForm = drawerFormRef.value[0] || drawerFormRef.value;
108 if (refName == 'drawerFormRef') {
109 const drawerForm = drawerFormRef.value[0] || drawerFormRef.value;
110 return drawerForm
111 }
106 } 112 }
107 113
108 defineExpose({ 114 defineExpose({
......
...@@ -924,6 +924,7 @@ const classEditFormItems = ref<any>([{ ...@@ -924,6 +924,7 @@ const classEditFormItems = ref<any>([{
924 type: 'input', 924 type: 'input',
925 placeholder: '请输入', 925 placeholder: '请输入',
926 field: 'startValue', 926 field: 'startValue',
927 default: '',
927 clearable: true, 928 clearable: true,
928 required: false, 929 required: false,
929 min: 1, 930 min: 1,
...@@ -933,6 +934,7 @@ const classEditFormItems = ref<any>([{ ...@@ -933,6 +934,7 @@ const classEditFormItems = ref<any>([{
933 type: 'input', 934 type: 'input',
934 placeholder: '请输入', 935 placeholder: '请输入',
935 field: 'endValue', 936 field: 'endValue',
937 default: '',
936 clearable: true, 938 clearable: true,
937 min: 1, 939 min: 1,
938 required: false, 940 required: false,
...@@ -971,7 +973,7 @@ const classEditFormItems = ref<any>([{ ...@@ -971,7 +973,7 @@ const classEditFormItems = ref<any>([{
971 { 973 {
972 label: '是否必填', 974 label: '是否必填',
973 type: "select", 975 type: "select",
974 field: "notNull", 976 field: "isNotNull",
975 disabled: false, 977 disabled: false,
976 default: '', 978 default: '',
977 options: [ 979 options: [
...@@ -1037,7 +1039,7 @@ const drawerBtnClick = async (btn, info) => { ...@@ -1037,7 +1039,7 @@ const drawerBtnClick = async (btn, info) => {
1037 } else { 1039 } else {
1038 btn.loading = true; 1040 btn.loading = true;
1039 console.log('drawerBtnClick', info); 1041 console.log('drawerBtnClick', info);
1040 const { orderNumLength, orderNum, startNumber, endNumber, fieldValueRange, startValue, endValue, fieldPrecision, dictionaryGuid, isUnique, notNull } = info; 1042 const { orderNumLength, orderNum, startNumber, endNumber, fieldValueRange, startValue, endValue, fieldPrecision, dictionaryGuid, isUnique, isNotNull } = info;
1041 // 判断长度orderNumLength,orderNum 要么都有值,要么都没有值,不能只有一个有值,一个没有值精确提醒 1043 // 判断长度orderNumLength,orderNum 要么都有值,要么都没有值,不能只有一个有值,一个没有值精确提醒
1042 let fieldLengthCondition: any = ''; 1044 let fieldLengthCondition: any = '';
1043 if ((orderNumLength === 'between' && !startNumber) || (orderNumLength === 'between' && !endNumber)) { 1045 if ((orderNumLength === 'between' && !startNumber) || (orderNumLength === 'between' && !endNumber)) {
...@@ -1075,10 +1077,10 @@ const drawerBtnClick = async (btn, info) => { ...@@ -1075,10 +1077,10 @@ const drawerBtnClick = async (btn, info) => {
1075 // 根据是否有 fieldValueRange 来决定如何构建参数对象 1077 // 根据是否有 fieldValueRange 来决定如何构建参数对象
1076 if (fieldValueRange) { 1078 if (fieldValueRange) {
1077 param = { 1079 param = {
1078 fieldPrecision: fieldPrecision || '', 1080 fieldPrecision,
1079 dictionaryGuid, 1081 dictionaryGuid,
1080 isUnique, 1082 isUnique,
1081 notNull, 1083 isNotNull,
1082 fieldLengthCondition, 1084 fieldLengthCondition,
1083 fieldValueRange, 1085 fieldValueRange,
1084 fieldGuid: item, 1086 fieldGuid: item,
...@@ -1086,10 +1088,10 @@ const drawerBtnClick = async (btn, info) => { ...@@ -1086,10 +1088,10 @@ const drawerBtnClick = async (btn, info) => {
1086 }; 1088 };
1087 } else { 1089 } else {
1088 param = { 1090 param = {
1089 fieldPrecision: fieldPrecision || '', 1091 fieldPrecision,
1090 dictionaryGuid, 1092 dictionaryGuid,
1091 isUnique, 1093 isUnique,
1092 notNull, 1094 isNotNull,
1093 fieldLengthCondition, 1095 fieldLengthCondition,
1094 fieldGuid: item, 1096 fieldGuid: item,
1095 execGuid: execGuidInfo.value.execGuid, 1097 execGuid: execGuidInfo.value.execGuid,
...@@ -1136,8 +1138,9 @@ const isValidParam = (param) => { ...@@ -1136,8 +1138,9 @@ const isValidParam = (param) => {
1136 return Object.values(rest).some(value => value !== null && value !== undefined && value !== ''); 1138 return Object.values(rest).some(value => value !== null && value !== undefined && value !== '');
1137 } 1139 }
1138 1140
1141 const drawerRef = ref<any>();
1139 const drawerSelectChange = (val, row, info) => { 1142 const drawerSelectChange = (val, row, info) => {
1140 console.log('drawerSelectChange', val, row, info); 1143 const tempInfo = drawerRef.value.getDrawerConRef('drawerFormRef').formInline;
1141 if (val === 'between') { 1144 if (val === 'between') {
1142 classEditFormItems.value.forEach(item => { 1145 classEditFormItems.value.forEach(item => {
1143 if (item.field === 'orderNum') { 1146 if (item.field === 'orderNum') {
...@@ -1166,6 +1169,34 @@ const drawerSelectChange = (val, row, info) => { ...@@ -1166,6 +1169,34 @@ const drawerSelectChange = (val, row, info) => {
1166 }); 1169 });
1167 } 1170 }
1168 } 1171 }
1172 classEditFormItems.value.forEach(item => {
1173 if (item.field === 'orderNum') {
1174 item.default = tempInfo.orderNum;
1175 }
1176 if (item.field === 'dictionaryGuid') {
1177 item.default = tempInfo.dictionaryGuid;
1178 }
1179 if (item.field === 'isNotNull') {
1180 item.default = tempInfo.isNotNull;
1181 }
1182 if (item.field === 'isUnique') {
1183 item.default = tempInfo.isUnique;
1184 }
1185 if (item.field === 'fieldValueRange' && item.children) {
1186 item.children.forEach(item => {
1187 if (item.field === 'startValue') {
1188 item.default = tempInfo.startValue;
1189 }
1190 if (item.field === 'endValue') {
1191 item.default = tempInfo.endValue;
1192 }
1193 });
1194 }
1195 if (item.field === 'fieldValueRange' && !item.children) {
1196 item.default = tempInfo.fieldValueRange;
1197 }
1198 });
1199
1169 } 1200 }
1170 1201
1171 // tab切换 1202 // tab切换
...@@ -1984,7 +2015,7 @@ watchEffect(() => { ...@@ -1984,7 +2015,7 @@ watchEffect(() => {
1984 <Table :tableInfo="tableFieldsDataInfo" @tablePageChange="dataFieldTablePageChange" /> 2015 <Table :tableInfo="tableFieldsDataInfo" @tablePageChange="dataFieldTablePageChange" />
1985 </div> 2016 </div>
1986 </div> 2017 </div>
1987 <Drawer :drawerInfo="drawerInfo" @drawerBtnClick="drawerBtnClick" class="v-drawer" 2018 <Drawer :drawerInfo="drawerInfo" @drawerBtnClick="drawerBtnClick" class="v-drawer" ref="drawerRef"
1988 @drawerSelectChange="drawerSelectChange" /> 2019 @drawerSelectChange="drawerSelectChange" />
1989 2020
1990 </div> 2021 </div>
......
...@@ -167,18 +167,19 @@ const editRow = (row) => { ...@@ -167,18 +167,19 @@ const editRow = (row) => {
167 tempRowData.value.push({ ...row }); 167 tempRowData.value.push({ ...row });
168 } 168 }
169 if (row.fieldLengthCondition) { 169 if (row.fieldLengthCondition) {
170 const arr = row.fieldLengthCondition.split('#') 170 const arr = row.fieldLengthCondition.split('#'); // 按 '#' 分割
171 // 遍历找到arr中是否存在等于between 171
172 arr.forEach((item) => { 172 // 判断数组中是否包含 'between'
173 if (item === 'between') { 173 if (arr.includes('between')) {
174 row.lengthSymbol = 'between' 174 // 如果包含 'between',则将对应的 start 和 end 值赋给相应的字段
175 row.numberRangeStart = arr[1] 175 row.lengthSymbol = 'between';
176 row.numberRangeEnd = arr[2] 176 row.numberRangeStart = arr[1]; // start value
177 row.numberRangeEnd = arr[2]; // end value
177 } else { 178 } else {
178 row.lengthSymbol = arr[0] 179 // 否则处理其他符号条件,如 '>=', '<=', '>', '<', '=' 等
179 row.lengthValue = arr[1] 180 row.lengthSymbol = arr[0]; // 符号(如 '>', '<=', 等)
181 row.lengthValue = arr[1]; // 值(如 10,20 等)
180 } 182 }
181 })
182 } 183 }
183 if (row.fieldValueRange && !isSingleInput(row.fieldType)) { 184 if (row.fieldValueRange && !isSingleInput(row.fieldType)) {
184 const arr = row.fieldValueRange.split('#') 185 const arr = row.fieldValueRange.split('#')
...@@ -191,6 +192,7 @@ const editRow = (row) => { ...@@ -191,6 +192,7 @@ const editRow = (row) => {
191 192
192 // 保存数据 193 // 保存数据
193 const saveRow = (row) => { 194 const saveRow = (row) => {
195 console.log('保存:', row);
194 if (row.lengthSymbol === 'between') { 196 if (row.lengthSymbol === 'between') {
195 // 校验不能为空,其中一个为空则提示 197 // 校验不能为空,其中一个为空则提示
196 if (!row.numberRangeStart || !row.numberRangeStart) { 198 if (!row.numberRangeStart || !row.numberRangeStart) {
...@@ -205,6 +207,7 @@ const saveRow = (row) => { ...@@ -205,6 +207,7 @@ const saveRow = (row) => {
205 proxy.$ElMessage.error('请输入完整的长度范围'); 207 proxy.$ElMessage.error('请输入完整的长度范围');
206 return 208 return
207 } 209 }
210 console.log(row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd)
208 row.fieldLengthCondition = row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd 211 row.fieldLengthCondition = row.lengthSymbol + '#' + row.numberRangeStart + '#' + row.numberRangeEnd
209 } else { 212 } else {
210 if (!row.lengthValue && row.lengthSymbol) { 213 if (!row.lengthValue && row.lengthSymbol) {
...@@ -215,8 +218,6 @@ const saveRow = (row) => { ...@@ -215,8 +218,6 @@ const saveRow = (row) => {
215 proxy.$message.error('请输入完整的长度范围'); 218 proxy.$message.error('请输入完整的长度范围');
216 return; 219 return;
217 } 220 }
218 }
219
220 if (!row.lengthSymbol && !row.lengthValue) { 221 if (!row.lengthSymbol && !row.lengthValue) {
221 row.fieldLengthCondition = '' 222 row.fieldLengthCondition = ''
222 } 223 }
...@@ -224,6 +225,9 @@ const saveRow = (row) => { ...@@ -224,6 +225,9 @@ const saveRow = (row) => {
224 console.log('row.lengthSymbol', row.lengthSymbol + '#' + row.lengthValue) 225 console.log('row.lengthSymbol', row.lengthSymbol + '#' + row.lengthValue)
225 row.fieldLengthCondition = row.lengthSymbol + '#' + row.lengthValue 226 row.fieldLengthCondition = row.lengthSymbol + '#' + row.lengthValue
226 } 227 }
228 }
229
230
227 // 字段范围 双文本情况 231 // 字段范围 双文本情况
228 232
229 if (!isSingleInput(row.fieldType)) { 233 if (!isSingleInput(row.fieldType)) {
...@@ -232,76 +236,6 @@ const saveRow = (row) => { ...@@ -232,76 +236,6 @@ const saveRow = (row) => {
232 } 236 }
233 row.isEdit = false 237 row.isEdit = false
234 } 238 }
235 const data = [
236 {
237 value: '1',
238 label: 'Level one 1',
239 children: [
240 {
241 value: '1-1',
242 label: 'Level two 1-1',
243 children: [
244 {
245 value: '1-1-1',
246 label: 'Level three 1-1-1',
247 },
248 ],
249 },
250 ],
251 },
252 {
253 value: '2',
254 label: 'Level one 2',
255 children: [
256 {
257 value: '2-1',
258 label: 'Level two 2-1',
259 children: [
260 {
261 value: '2-1-1',
262 label: 'Level three 2-1-1',
263 },
264 ],
265 },
266 {
267 value: '2-2',
268 label: 'Level two 2-2',
269 children: [
270 {
271 value: '2-2-1',
272 label: 'Level three 2-2-1',
273 },
274 ],
275 },
276 ],
277 },
278 {
279 value: '3',
280 label: 'Level one 3',
281 children: [
282 {
283 value: '3-1',
284 label: 'Level two 3-1',
285 children: [
286 {
287 value: '3-1-1',
288 label: 'Level three 3-1-1',
289 },
290 ],
291 },
292 {
293 value: '3-2',
294 label: 'Level two 3-2',
295 children: [
296 {
297 value: '3-2-1',
298 label: 'Level three 3-2-1',
299 },
300 ],
301 },
302 ],
303 },
304 ]
305 239
306 const loading = ref(false) 240 const loading = ref(false)
307 const saveData = async () => { 241 const saveData = async () => {
...@@ -357,7 +291,7 @@ const saveData = async () => { ...@@ -357,7 +291,7 @@ const saveData = async () => {
357 if (allFieldsEmpty) { 291 if (allFieldsEmpty) {
358 inParams = []; 292 inParams = [];
359 } 293 }
360 294 try {
361 const res: any = await saveBizRuleConfig(inParams) 295 const res: any = await saveBizRuleConfig(inParams)
362 if (res.code === proxy.$passCode) { 296 if (res.code === proxy.$passCode) {
363 loading.value = false 297 loading.value = false
...@@ -370,6 +304,9 @@ const saveData = async () => { ...@@ -370,6 +304,9 @@ const saveData = async () => {
370 loading.value = false 304 loading.value = false
371 proxy.$message.error(res.msg) 305 proxy.$message.error(res.msg)
372 } 306 }
307 } catch (error) {
308 loading.value = false
309 }
373 } 310 }
374 311
375 312
...@@ -401,19 +338,25 @@ const isSingleInput = (fieldType: string) => { ...@@ -401,19 +338,25 @@ const isSingleInput = (fieldType: string) => {
401 return singleInputTypes.includes(fieldType) || !fieldType; // 如果fieldType为空,默认为单文本框 338 return singleInputTypes.includes(fieldType) || !fieldType; // 如果fieldType为空,默认为单文本框
402 }; 339 };
403 340
404 // 验证是否为大于0的整数
405 const validatePositiveInteger = (row: any, field: string) => { 341 const validatePositiveInteger = (row: any, field: string) => {
406 const value = row[field]; 342 let value = row[field];
407 343
408 // 将输入值转为整数并检查是否大于0 344 // 如果输入值为0,则将其设置为1
409 if (value && !/^\d+$/.test(value)) { 345 if (value === '0') {
410 // 如果不是整数或是负数,将值清空或者给出提示 346 row[field] = '1';
347 return;
348 }
349
350 // 判断输入是否符合正整数且在1到9999之间
351 if (value && !/^\d{1,4}$/.test(value)) {
352 // 如果不是1到4位的正整数,清空输入值
411 row[field] = ''; 353 row[field] = '';
412 } else if (value && parseInt(value) <= 0) { 354 } else if (value && (parseInt(value) < 1 || parseInt(value) > 9999)) {
413 // 如果小于或等于0,也清空 355 // 如果数字小于1或大于9999,清空输入
414 row[field] = ''; 356 row[field] = '';
415 } 357 }
416 }; 358 };
359
417 function parseFieldLengthCondition(condition) { 360 function parseFieldLengthCondition(condition) {
418 // 如果 condition 为 null 或 undefined,直接返回默认值 361 // 如果 condition 为 null 或 undefined,直接返回默认值
419 if (!condition) { 362 if (!condition) {
...@@ -421,7 +364,7 @@ function parseFieldLengthCondition(condition) { ...@@ -421,7 +364,7 @@ function parseFieldLengthCondition(condition) {
421 } 364 }
422 if (condition.includes('between')) { 365 if (condition.includes('between')) {
423 const parts = condition.split('#').filter(Boolean); // 按 '#' 分割并去掉空值 366 const parts = condition.split('#').filter(Boolean); // 按 '#' 分割并去掉空值
424 return `${parts[1]}-${parts[2]}`; // 显示为 "10-20" 367 return `介于${parts[1]}-${parts[2]}`; // 显示为 "10-20"
425 } 368 }
426 let symbol = ''; 369 let symbol = '';
427 let value = ''; 370 let value = '';
...@@ -513,7 +456,7 @@ function parseFieldLengthCondition(condition) { ...@@ -513,7 +456,7 @@ function parseFieldLengthCondition(condition) {
513 </template> 456 </template>
514 </el-table-column> 457 </el-table-column>
515 <!-- 字段类型fieldType (不可编辑) --> 458 <!-- 字段类型fieldType (不可编辑) -->
516 <el-table-column prop="fieldType" label="字段类型" width="120" align="center"> 459 <el-table-column prop="fieldType" label="字段类型" width="120" align="center" show-overflow-tooltip>
517 <template #default="scope"> 460 <template #default="scope">
518 {{ 461 {{
519 462
...@@ -524,14 +467,14 @@ function parseFieldLengthCondition(condition) { ...@@ -524,14 +467,14 @@ function parseFieldLengthCondition(condition) {
524 </el-table-column> 467 </el-table-column>
525 468
526 <!-- 长度列 fieldLengthCondition: '>#10',--> 469 <!-- 长度列 fieldLengthCondition: '>#10',-->
527 <el-table-column prop="fieldLengthCondition" label="长度" width="340" align="center"> 470 <el-table-column prop="fieldLengthCondition" label="长度" width="270" align="left" show-overflow-tooltip>
528 <template #default="scope"> 471 <template #default="scope">
529 <span v-if="!scope.row.isEdit"> 472 <span v-if="!scope.row.isEdit">
530 {{ parseFieldLengthCondition(scope.row.fieldLengthCondition) || '--' }} 473 {{ parseFieldLengthCondition(scope.row.fieldLengthCondition) || '--' }}
531 </span> 474 </span>
532 <div v-else> 475 <div v-else>
533 <div style="display: flex; align-items: center;"> 476 <div style="display: flex; align-items: center;">
534 <el-select v-model="scope.row.lengthSymbol" placeholder="请选择" style="width: 50%;margin-right: 8px;" 477 <el-select v-model="scope.row.lengthSymbol" placeholder="请选择" style="width: 70%;margin-right: 8px;"
535 clearable> 478 clearable>
536 <el-option label="大于" value=">"></el-option> 479 <el-option label="大于" value=">"></el-option>
537 <el-option label="等于" value="="></el-option> 480 <el-option label="等于" value="="></el-option>
...@@ -545,15 +488,15 @@ function parseFieldLengthCondition(condition) { ...@@ -545,15 +488,15 @@ function parseFieldLengthCondition(condition) {
545 <!-- 当选择"介于"时,显示两个输入框 --> 488 <!-- 当选择"介于"时,显示两个输入框 -->
546 <div v-if="scope.row.lengthSymbol === 'between'" style="display: flex; gap: 5px; align-items: center;"> 489 <div v-if="scope.row.lengthSymbol === 'between'" style="display: flex; gap: 5px; align-items: center;">
547 <el-input v-model="scope.row.numberRangeStart" placeholder="请输入" style="width: 45%;" type="number" 490 <el-input v-model="scope.row.numberRangeStart" placeholder="请输入" style="width: 45%;" type="number"
548 clearable @input="validatePositiveInteger(scope.row, 'rangeStart')" /> 491 clearable @input="validatePositiveInteger(scope.row, 'numberRangeStart')" />
549 <span>-</span> 492 <span>-</span>
550 <el-input v-model="scope.row.numberRangeEnd" placeholder="请输入" style="width: 45%;" type="number" 493 <el-input v-model="scope.row.numberRangeEnd" placeholder="请输入" style="width: 45%;" type="number"
551 clearable @input="validatePositiveInteger(scope.row, 'rangeEnd')" /> 494 clearable @input="validatePositiveInteger(scope.row, 'numberRangeEnd')" />
552 </div> 495 </div>
553 496
554 <!-- 其他符号时显示一个输入框 --> 497 <!-- 其他符号时显示一个输入框 -->
555 <div v-else> 498 <div v-else>
556 <el-input v-model="scope.row.lengthValue" placeholder="请输入" style="width: 90%;" clearable 499 <el-input v-model="scope.row.lengthValue" placeholder="请输入" style="width: 70%;" clearable
557 @input="validatePositiveInteger(scope.row, 'lengthValue')" type="number" /> 500 @input="validatePositiveInteger(scope.row, 'lengthValue')" type="number" />
558 </div> 501 </div>
559 </div> 502 </div>
...@@ -561,18 +504,18 @@ function parseFieldLengthCondition(condition) { ...@@ -561,18 +504,18 @@ function parseFieldLengthCondition(condition) {
561 </template> 504 </template>
562 </el-table-column> 505 </el-table-column>
563 506
564 <el-table-column prop="fieldPrecision" label="精度" width="120" align="center"> 507 <el-table-column prop="fieldPrecision" label="精度" width="120" align="center" show-overflow-tooltip>
565 <template #default="scope"> 508 <template #default="scope">
566 <!-- 判断是否是浮点型,并且当前行是否可编辑 --> 509 <!-- 判断是否是浮点型,并且当前行是否可编辑 -->
567 <span v-if="!scope.row.isEdit || !editableFields.fieldPrecision || scope.row.fieldType !== 'float'"> 510 <span v-if="!scope.row.isEdit || !editableFields.fieldPrecision || scope.row.fieldType !== 'float'">
568 {{ scope.row.fieldPrecision ? scope.row.fieldPrecision : '--' }} 511 {{ scope.row.fieldPrecision ? scope.row.fieldPrecision : '--' }}
569 </span> 512 </span>
570 <el-input v-else v-model="scope.row.fieldPrecision" placeholder="请输入精度" clearable /> 513 <el-input v-else v-model="scope.row.fieldPrecision" placeholder="请输入精度" clearable maxlength="2" />
571 </template> 514 </template>
572 </el-table-column> 515 </el-table-column>
573 516
574 <!-- 关联字典(可编辑)el-tree-select 形式下拉形式 --> 517 <!-- 关联字典(可编辑)el-tree-select 形式下拉形式 -->
575 <el-table-column prop="dictionaryGuid" label="关联字典" width="150" align="center"> 518 <el-table-column prop="dictionaryGuid" label="关联字典" width="150" align="left" show-overflow-tooltip>
576 <template #default="scope"> 519 <template #default="scope">
577 <span v-if="!scope.row.isEdit">{{ scope.row.dictionaryGuid 520 <span v-if="!scope.row.isEdit">{{ scope.row.dictionaryGuid
578 ? dictionaryList.find((item: any) => item.guid === scope.row.dictionaryGuid)?.chName : '--' }}</span> 521 ? dictionaryList.find((item: any) => item.guid === scope.row.dictionaryGuid)?.chName : '--' }}</span>
...@@ -584,7 +527,7 @@ function parseFieldLengthCondition(condition) { ...@@ -584,7 +527,7 @@ function parseFieldLengthCondition(condition) {
584 </el-table-column> 527 </el-table-column>
585 528
586 <!-- 数据是否唯一(可编辑) --> 529 <!-- 数据是否唯一(可编辑) -->
587 <el-table-column prop="isUnique" label="数据是否唯一" width="150" align="center"> 530 <el-table-column prop="isUnique" label="数据是否唯一" width="150" align="left" show-overflow-tooltip>
588 <template #default="scope"> 531 <template #default="scope">
589 <span v-if="!scope.row.isEdit || !editableFields.isUnique">{{ scope.row.isUnique ? (scope.row.isUnique === 532 <span v-if="!scope.row.isEdit || !editableFields.isUnique">{{ scope.row.isUnique ? (scope.row.isUnique ===
590 'Y' ? '是' : '否') : '--' 533 'Y' ? '是' : '否') : '--'
...@@ -596,7 +539,7 @@ function parseFieldLengthCondition(condition) { ...@@ -596,7 +539,7 @@ function parseFieldLengthCondition(condition) {
596 </template> 539 </template>
597 </el-table-column> 540 </el-table-column>
598 <!-- 是否必填(可编辑) --> 541 <!-- 是否必填(可编辑) -->
599 <el-table-column prop="notNull" label="是否必填" width="120" align="center"> 542 <el-table-column prop="notNull" label="是否必填" width="120" align="left" show-overflow-tooltip>
600 <template #default="scope"> 543 <template #default="scope">
601 <span v-if="!scope.row.isEdit">{{ scope.row.notNull ? (scope.row.notNull === 'Y' ? '是' : '否') : '--' 544 <span v-if="!scope.row.isEdit">{{ scope.row.notNull ? (scope.row.notNull === 'Y' ? '是' : '否') : '--'
602 }}</span> 545 }}</span>
...@@ -608,7 +551,7 @@ function parseFieldLengthCondition(condition) { ...@@ -608,7 +551,7 @@ function parseFieldLengthCondition(condition) {
608 </el-table-column> 551 </el-table-column>
609 552
610 <!-- 字段取值范围 fieldValueRange(可编辑)--> 553 <!-- 字段取值范围 fieldValueRange(可编辑)-->
611 <el-table-column prop="fieldValueRange" label="字段取值范围" width="260" align="center"> 554 <el-table-column prop="fieldValueRange" label="字段取值范围" width="260" align="left" show-overflow-tooltip>
612 <template #default="scope"> 555 <template #default="scope">
613 <!-- 非编辑模式,展示取值范围 --> 556 <!-- 非编辑模式,展示取值范围 -->
614 <span v-if="!scope.row.isEdit"> 557 <span v-if="!scope.row.isEdit">
...@@ -620,20 +563,22 @@ function parseFieldLengthCondition(condition) { ...@@ -620,20 +563,22 @@ function parseFieldLengthCondition(condition) {
620 <!-- 判断字段类型并渲染对应的输入框 --> 563 <!-- 判断字段类型并渲染对应的输入框 -->
621 <template v-if="isSingleInput(scope.row.fieldType)"> 564 <template v-if="isSingleInput(scope.row.fieldType)">
622 <!-- 单文本框:字符型、大字段型、单字符型、JSON类型、布尔类型 --> 565 <!-- 单文本框:字符型、大字段型、单字符型、JSON类型、布尔类型 -->
623 <el-input v-model="scope.row.fieldValueRange" placeholder="请输入" clearable /> 566 <el-input v-model="scope.row.fieldValueRange" placeholder="请输入" clearable maxlength="500" />
624 </template> 567 </template>
625 <template v-else> 568 <template v-else>
626 <!-- 双文本框:整型、日期型、日期时间型、时间戳、浮点型、一字节整型、时间类型 --> 569 <!-- 双文本框:整型、日期型、日期时间型、时间戳、浮点型、一字节整型、时间类型 -->
627 <el-input v-model="scope.row.startValue" placeholder="请输入开始值" style="width: 45%;" clearable /> 570 <el-input v-model="scope.row.startValue" placeholder="请输入开始值" style="width: 45%;" clearable
571 maxlength="200" />
628 <span>-</span> 572 <span>-</span>
629 <el-input v-model="scope.row.endValue" placeholder="请输入结束值" style="width: 45%;" clearable /> 573 <el-input v-model="scope.row.endValue" placeholder="请输入结束值" style="width: 45%;" clearable
574 maxlength="200" />
630 </template> 575 </template>
631 </div> 576 </div>
632 </template> 577 </template>
633 </el-table-column> 578 </el-table-column>
634 579
635 <!-- 操作列 --> 580 <!-- 操作列 -->
636 <el-table-column label="操作" width="120" align="center" fixed="right"> 581 <el-table-column label="操作" width="120" align="center" fixed="right" show-overflow-tooltip>
637 <template #default="scope"> 582 <template #default="scope">
638 <span class="text_btn" v-if="!scope.row.isEdit" @click="editRow(scope.row)">编辑</span> 583 <span class="text_btn" v-if="!scope.row.isEdit" @click="editRow(scope.row)">编辑</span>
639 <span v-else> 584 <span v-else>
......
...@@ -1008,7 +1008,7 @@ onActivated(() => { ...@@ -1008,7 +1008,7 @@ onActivated(() => {
1008 <el-button @click="batchDelete">批量删除</el-button> 1008 <el-button @click="batchDelete">批量删除</el-button>
1009 <el-button @click="createNewSql">生成建表语句</el-button> 1009 <el-button @click="createNewSql">生成建表语句</el-button>
1010 </div> 1010 </div>
1011 <div class="bottom_table"> 1011 <div class="bottom_table" v-if="route.query.editOpt === '1'">
1012 <el-table :data="tableDataDetailInfo" v-loading="tableFieldsLoading" :highlight-current-row="true" stripe 1012 <el-table :data="tableDataDetailInfo" v-loading="tableFieldsLoading" :highlight-current-row="true" stripe
1013 border height="100%" row-key="guid" @selection-change="selectionFieldsChange" tooltip-effect="light" :style="{ 1013 border height="100%" row-key="guid" @selection-change="selectionFieldsChange" tooltip-effect="light" :style="{
1014 width: '100%', 1014 width: '100%',
...@@ -1209,6 +1209,199 @@ onActivated(() => { ...@@ -1209,6 +1209,199 @@ onActivated(() => {
1209 </el-table-column> 1209 </el-table-column>
1210 </el-table> 1210 </el-table>
1211 </div> 1211 </div>
1212 <div class="bottom_table" v-else>
1213 <el-table :data="tableDataDetailInfo" v-loading="tableFieldsLoading" :highlight-current-row="true" stripe
1214 border height="100%" row-key="guid" @selection-change="selectionFieldsChange" tooltip-effect="light" :style="{
1215 width: '100%',
1216 'max-height': 'calc(100% - 16px)',
1217 display: 'inline-block',
1218 }">
1219 <el-table-column type="selection" :width="32" align="center" />
1220 <!-- 排序列(不可编辑) -->
1221 <el-table-column type="index" label="排序" width="80" align="center" />
1222 <!-- 字段中文名(可编辑)fieldChName -->
1223 <el-table-column prop="fieldChName" label="字段中文名" width="150" show-overflow-tooltip>
1224 <!-- 可以编辑 -->
1225 <template #default="scope">
1226 <span v-if="!scope.row.isEdit || !editableFields.fieldChName">{{
1227 scope.row.fieldChName ?
1228 scope.row.fieldChName
1229 : '--' }}</span>
1230 <el-input v-else v-model="scope.row.fieldChName" placeholder="请输入" />
1231 </template>
1232
1233 </el-table-column>
1234 <!-- 字段英文名(可编辑) -->
1235 <el-table-column prop="fieldName" label="字段英文名" width="150" show-overflow-tooltip>
1236 <template #default="scope">
1237 <span v-if="!scope.row.isEdit || !editableFields.fieldName">{{
1238 scope.row.fieldName ?
1239 scope.row.fieldName
1240 : '--' }}</span>
1241 <el-input v-else v-model="scope.row.fieldName" placeholder="必填"
1242 @input="inputLengthKeyUp(/[^a-zA-Z0-9_]/g, scope, 'fieldName')" />
1243 </template>
1244 </el-table-column>
1245 <!-- 源数据库 -->
1246 <el-table-column prop="sourceDatabase" label="源数据库" width="150" show-overflow-tooltip
1247 v-if="route.query.editOpt != '1'">
1248 <template #default="scope">
1249 {{ scope.row.sourceDatabase ? scope.row.sourceDatabase : '--' }}
1250 </template>
1251 </el-table-column>
1252 <!-- 源数据表 -->
1253 <el-table-column prop="sourceTableName" label="源数据表" width="150" show-overflow-tooltip
1254 v-if="route.query.editOpt != '1'">
1255 <template #default="scope">
1256 {{ scope.row.sourceTableName ? scope.row.sourceTableName : '--' }}
1257 </template>
1258 </el-table-column>
1259 <!-- 源字段中文 -->
1260 <el-table-column prop="sourceFieldName" label="源字段中文" width="150" show-overflow-tooltip
1261 v-if="route.query.editOpt != '1'">
1262 <template #default="scope">
1263 {{ scope.row.sourceFieldName ? scope.row.sourceFieldName : '--' }}
1264 </template>
1265 </el-table-column>
1266 <!-- 源字段英文 -->
1267 <el-table-column prop="sourceFieldChName" label="源字段英文" width="120" show-overflow-tooltip
1268 v-if="route.query.editOpt != '1'">
1269 <template #default="scope">
1270 <!-- {{ scope.row.sourceFieldName ? scope.row.sourceFieldName : '--' }} -->
1271
1272 <span>{{ scope.row.sourceFieldChName ?
1273 scope.row.sourceFieldChName : '--' }}</span>
1274 </template>
1275 </el-table-column>
1276 <!-- 源端字段 fieldType fieldTypeProps-->
1277 <el-table-column prop="fieldType" label="字段类型" width="120">
1278 <template #default="scope">
1279 <div v-if="scope.row.isEdit">
1280 <el-select v-model="scope.row.fieldType" placeholder="选择类型" clearable filterable
1281 :props="fieldTypeProps">
1282 <el-option v-for="(item, index) in fieldData" :key="index" :label="item.label"
1283 :value="item.value"></el-option>
1284 </el-select>
1285 </div>
1286 <div v-else>
1287 {{ fieldData ? fieldData.find(item => item.value === scope.row.fieldType)?.label : '--' }}
1288 </div>
1289 </template>
1290 </el-table-column>
1291
1292 <!-- 长度(可编辑) -->
1293 <el-table-column prop="fieldLength" label="长度" width="100" align="left">
1294 <template #default="scope">
1295 <!-- 非编辑状态 -->
1296 <span v-if="!scope.row.isEdit">
1297 {{ ['varchar', 'decimal', 'char'].includes(scope.row.fieldType) ? scope.row.fieldLength || '--' : '--'
1298 }}
1299 </span>
1300 <!-- 编辑状态 -->
1301 <div v-else>
1302 <el-input v-if="['varchar', 'decimal', 'char'].includes(scope.row.fieldType)"
1303 v-model="scope.row.fieldLength" placeholder="请输入长度"
1304 @input="inputLengthKeyUp(/\D/g, scope, 'fieldLength', 2000, 1)" />
1305 <span v-else>--</span>
1306 </div>
1307 </template>
1308 </el-table-column>
1309
1310 <!-- 精度(可编辑) -->
1311 <el-table-column prop="fieldPrecision" label="精度" width="100" align="left">
1312 <template #default="scope">
1313 <!-- 非编辑状态 -->
1314 <span v-if="!scope.row.isEdit">
1315 {{ scope.row.fieldType === 'decimal' ? scope.row.fieldPrecision || '--' : '--' }}
1316 </span>
1317 <!-- 编辑状态 -->
1318 <div v-else>
1319 <el-input v-if="scope.row.fieldType === 'decimal'" v-model="scope.row.fieldPrecision"
1320 placeholder="请输入精度" @input="inputLengthKeyUp(/\D/g, scope, 'fieldPrecision', 30, 1)" />
1321 <span v-else>--</span>
1322 </div>
1323 </template>
1324 </el-table-column>
1325 <!-- 关联字典(可编辑)el-tree-select 形式下拉形式 -->
1326 <el-table-column prop="dictionaryGuid" label="关联字典" width="120" align="left">
1327 <template #default="scope">
1328 <span v-if="!scope.row.isEdit">{{ scope.row.dictionaryGuid
1329 ? dictionaryList.find((item: any) => item.guid === scope.row.dictionaryGuid)?.chName : '--' }}</span>
1330 <el-select v-else v-model="scope.row.dictionaryGuid" placeholder="请选择">
1331 <el-option v-for="item in dictionaryList" :key="item?.guid" :label="item.chName" :value="item.guid" />
1332 </el-select>
1333 </template>
1334
1335 </el-table-column>
1336
1337 <!-- 数据是否唯一(可编辑) -->
1338 <el-table-column prop="isPrimary" label="是否主键" width="100" align="left">
1339 <template #default="scope">
1340 <span v-if="!scope.row.isEdit || !editableFields.isPrimary">{{
1341 scope.row.isPrimary || '--' }}</span>
1342 <el-select v-else v-model="scope.row.isPrimary" placeholder="请选择">
1343 <el-option label="Y" value="Y" />
1344 <el-option label="N" value="N" />
1345 </el-select>
1346 </template>
1347 </el-table-column>
1348 <!-- 是否必填(可编辑) -->
1349 <el-table-column prop="notNull" label="是否必填" width="100" align="left">
1350 <template #default="scope">
1351 <span v-if="!scope.row.isEdit">{{
1352 scope.row.notNull || '--' }}</span>
1353 <el-select v-else v-model="scope.row.notNull" placeholder="请选择">
1354 <el-option label="Y" value="Y" />
1355 <el-option label="N" value="N" />
1356 </el-select>
1357 </template>
1358 </el-table-column>
1359
1360 <!-- 分类(不可编辑)classifyName -->
1361
1362 <el-table-column prop="classifyDetailNameRoutes" label="分类" width="150" show-overflow-tooltip>
1363 <template #default="scope">
1364 <!-- 如果当前行是编辑状态,显示 tree-select -->
1365 <div v-if="scope.row.isEdit">
1366 <el-tree-select v-model="scope.row.classifyDetailGuid" :data="treeSelectOptions"
1367 :props="treeSelectProps" placeholder="请选择分类" clearable filterable
1368 @change="(value) => handleClassifyChange(scope.row, value)"
1369 @node-click="(node, data) => handleNodeClick(scope.row, node, data)">
1370 </el-tree-select>
1371 </div>
1372 <!-- 否则直接显示分类名称 -->
1373 <div v-else>
1374 {{ Array.isArray(scope.row?.classifyDetailNameRoutes) ? scope.row.classifyDetailNameRoutes.join('/') :
1375 '--' }}
1376 </div>
1377 </template>
1378 </el-table-column>
1379 <!-- 分级(不可编辑) -->
1380 <el-table-column prop="gradeDetailGuid" label="分级" width="100" align="left">
1381 <template #default="scope">
1382 <div v-if="scope.row.isEdit">
1383 <el-select v-model="scope.row.gradeDetailGuid" placeholder="请选择分级" clearable filterable
1384 :props="gradeSelectProps" @change="handleGradeChange(scope.row)">
1385 <el-option v-for="(item, index) in scope.row.gradeOptions || []" :key="index" :label="item.name"
1386 :value="item.guid"></el-option>
1387 </el-select>
1388 </div>
1389 <div v-else>
1390 {{ scope.row.gradeDetailName || '--' }}
1391 </div>
1392 </template>
1393 </el-table-column>
1394 <!-- 操作列 -->
1395 <el-table-column label="操作" width="100" align="center" fixed="right">
1396 <template #default="scope">
1397 <span class="text_btn" v-if="!scope.row.isEdit" @click="editRow(scope.row)">编辑</span>
1398 <span class="text_btn" v-else @click="saveRow(scope.row)">保存</span>
1399 <el-divider direction="vertical" />
1400 <span class="text_btn" @click="deleteRow(scope.$index)">删除</span>
1401 </template>
1402 </el-table-column>
1403 </el-table>
1404 </div>
1212 </div> 1405 </div>
1213 </div> 1406 </div>
1214 <div class="bottom_tool_wrap" v-show="!(route.query.editOpt && route.query.editOpt === '1')"> 1407 <div class="bottom_tool_wrap" v-show="!(route.query.editOpt && route.query.editOpt === '1')">
......
...@@ -33,7 +33,7 @@ import { ...@@ -33,7 +33,7 @@ import {
33 getSubjectTableDetail, 33 getSubjectTableDetail,
34 checkSubjectTableData 34 checkSubjectTableData
35 } from "@/api/modules/dataCatalogService"; 35 } from "@/api/modules/dataCatalogService";
36 import { getDictionaryAll, getFidldEnName, getGradeList, getNewDataTypeList, getTaskExeTreeList, saveDbDirTable } from "@/api/modules/dataInventory"; 36 import { getDictionaryAll, getFidldEnName, getGradeList, getNewDataTypeList, getTaskExeTreeList, saveDbDirTable, getFieldClassifyAndGrade } from "@/api/modules/dataInventory";
37 import { useDefault } from "@/hooks/useDefault"; 37 import { useDefault } from "@/hooks/useDefault";
38 import uploadExcelFile from "./components/uploadExcelFile.vue"; 38 import uploadExcelFile from "./components/uploadExcelFile.vue";
39 import { add } from "lodash-es"; 39 import { add } from "lodash-es";
...@@ -115,7 +115,7 @@ const uploadFileRef = ref(); ...@@ -115,7 +115,7 @@ const uploadFileRef = ref();
115 115
116 const getSubjectField = () => { 116 const getSubjectField = () => {
117 tableFieldsLoading.value = true; 117 tableFieldsLoading.value = true;
118 getFidldEnName(fileTableFields.value.map(f => f.chName)).then((res: any) => { 118 getFidldEnName(fileTableFields.value.map(f => f.chName)).then(async (res: any) => {
119 tableFieldsLoading.value = false; 119 tableFieldsLoading.value = false;
120 if (res.code == proxy.$passCode) { 120 if (res.code == proxy.$passCode) {
121 tableCreateInfo.value.tableFields = res.data?.map((field, i) => { 121 tableCreateInfo.value.tableFields = res.data?.map((field, i) => {
...@@ -125,6 +125,55 @@ const getSubjectField = () => { ...@@ -125,6 +125,55 @@ const getSubjectField = () => {
125 !field.notNull && (field.notNull = 'N'); 125 !field.notNull && (field.notNull = 'N');
126 return field; 126 return field;
127 }) || []; 127 }) || [];
128 console.log(tableCreateInfo.value.tableFields, '7897987');
129 // 遍历 tableCreateInfo.value.tableFields,找到item.fieldName,组合成入参
130 let tempFileNames: any = []
131 tableCreateInfo.value.tableFields.forEach((item: any) => {
132 tempFileNames.push(item.fieldName);
133 });
134 const classify: any = await getFieldClassifyAndGrade({
135 fieldName: tempFileNames,
136 execGuid: execGuid.value,
137 type: 'C'
138 })
139 const grade: any = await getFieldClassifyAndGrade({
140 fieldName: tempFileNames,
141 execGuid: execGuid.value,
142 type: 'G'
143 })
144 // 通过分类数据和分级数据赋值给 tableFields 的每一项
145 tableCreateInfo.value.tableFields.forEach((item: any) => {
146 // 在分类数据中查找对应 fieldName 的项
147 const classifyItem = classify.find((classify: any) => classify.fieldName === item.fieldName);
148
149 // 在分级数据中查找对应 fieldName 的项
150 const gradeItem = grade.find((grade: any) => grade.fieldName === item.fieldName);
151
152 // 如果找到对应的分类数据,赋值给 tableFields 的相应项
153 if (classifyItem) {
154 item.classifyDetailGuid = classifyItem.classifyDetailGuid || null;
155 item.classifyDetailName = classifyItem.classifyDetailName || null;
156 item.classifyDetailGuidRoutes = classifyItem.classifyDetailGuidRoutes || null;
157 item.classifyDetailNameRoutes = classifyItem.classifyDetailNameRoutes || null;
158 }
159
160 // 如果找到对应的分级数据,赋值给 tableFields 的相应项
161 if (gradeItem) {
162 item.gradeDetailGuid = gradeItem.gradeDetailGuid || null;
163 item.gradeDetailName = gradeItem.gradeDetailName || null;
164 }
165 });
166
167 } else {
168 ElMessage.error(res.msg);
169 }
170 });
171 }
172
173 const getGradeClassifyInfo = (params) => {
174 getFieldClassifyAndGrade(params).then((res: any) => {
175 if (res.code === proxy.$passCode) {
176
128 } else { 177 } else {
129 ElMessage.error(res.msg); 178 ElMessage.error(res.msg);
130 } 179 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!