From 169f6cd29a0d3add4fe2cf35c3579b45fa83c0d4 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期二, 14 十一月 2023 00:02:45 +0800 Subject: [PATCH] 2023-11-14 --- src/utils/utils-custom.js | 316 +++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 263 insertions(+), 53 deletions(-) diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js index 9ad1446..44a9750 100644 --- a/src/utils/utils-custom.js +++ b/src/utils/utils-custom.js @@ -1,11 +1,12 @@ import md5 from 'md5' +import { notification } from 'antd' export default class MenuUtils { /** * @description 鑾峰彇涓嬬骇妯″潡 * @return {String} selfId 褰撳墠缁勪欢id */ - static getSubModules (components, selfId, supId) { + static getSubModules (components, selfId, supId, has) { let modules = [] components.forEach(item => { if (item.uuid === selfId || item.type === 'navbar') { @@ -16,6 +17,17 @@ label: item.name, disabled: supId === item.uuid }) + + if (item.type === 'form' && item.subtype === 'simpleform' && item.wrap.refocus && supId !== item.uuid) { + modules.push({ + value: item.uuid + '$focus-refresh', + label: item.name + '锛堝埛鏂�-鑱氱劍锛�', + }) + modules.push({ + value: item.uuid + '$focus-nofresh', + label: item.name + '锛堜笉鍒锋柊-鑱氱劍锛�', + }) + } } else if (item.type === 'tabs') { if (item.subtype === 'tabletabs') { item.subtabs.forEach(tab => { @@ -37,7 +49,7 @@ type: 'tab', value: f_tab.uuid, label: f_tab.label, - children: this.getSubModules(f_tab.components, selfId, supId) + children: this.getSubModules(f_tab.components, selfId, supId, has) } if (subItem.children.length === 0) { @@ -558,6 +570,13 @@ } item.cols = loopCol(item.cols) + + if (item.colsCtrls) { + item.colsCtrls = item.colsCtrls.map(col => { + col.cols = col.cols.map(f => md5(commonId + f)) + return col + }) + } } else if (item.type === 'form') { item.subcards = item.subcards.map(cell => { cell.uuid = this.getuuid() @@ -664,11 +683,23 @@ } if (btn.syncComponent && btn.syncComponent[0] === 'multiComponent' && btn.syncComponents) { btn.syncComponents = btn.syncComponents.map(m => { - m.syncComId = m.syncComId.map(n => md5(commonId + n)) + m.syncComId = m.syncComId.map(n => { + if (/\$focus/.test(n)) { + return md5(commonId + n.split('$')[0]) + '$' + n.split('$')[1] + } + + return md5(commonId + n) + }) return m }) } else if (btn.syncComponent && btn.syncComponent.length > 0) { - btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m)) + btn.syncComponent = btn.syncComponent.map(m => { + if (/\$focus/.test(m)) { + return md5(commonId + m.split('$')[0]) + '$' + m.split('$')[1] + } + + return md5(commonId + m) + }) } } @@ -851,6 +882,13 @@ } item.cols = loopCol(item.cols) + + if (item.colsCtrls) { + item.colsCtrls = item.colsCtrls.map(col => { + col.cols = col.cols.map(f => md5(commonId + f)) + return col + }) + } } else if (item.type === 'form') { item.subcards = item.subcards.map(cell => { cell.uuid = this.getuuid() @@ -919,6 +957,13 @@ if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') { item.setting.supModule = '' } + + if (item.wrap && item.wrap.supType === 'multi') { + item.wrap.supType = 'single' + + delete item.supNodes + } + if (item.wrap && item.wrap.supModule) { item.wrap.supModule = '' } @@ -962,7 +1007,11 @@ if (item.type === 'date') { value = '1949-10-01 00:00:00.000' } else if (item.type === 'datemonth') { - value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000' + if (item.match === '=') { + value = '1949-10' + } else { + value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000' + } } else if (item.type === 'dateweek') { value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000' } else if (item.type === 'daterange') { @@ -1014,9 +1063,16 @@ searchText.push(`('${item.value}' ${item.match} '%'+${item.key}+'%')`) } else if (item.type === 'date') { searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')') - } else if (item.type === 'datemonth' || item.type === 'dateweek' || item.type === 'range') { + } else if (item.type === 'dateweek' || item.type === 'range') { let val = item.value.split(',') searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')') + } else if (item.type === 'datemonth') { + if (item.match === '=') { + searchText.push('(' + item.key + ' = \'' + item.value + '\')') + } else { + let val = item.value.split(',') + searchText.push('(' + item.key + ' >= \'' + val[0] + '\' AND ' + item.key + ' < \'' + val[1] + '\')') + } } else if (item.type === 'daterange') { let val = item.value.split(',') @@ -1034,7 +1090,7 @@ } }) - return searchText.join(' AND ') + return searchText.length > 0 ? 'where ' + searchText.join(' AND ') : '' } /** @@ -1059,7 +1115,8 @@ value: `'${item.value}'` }) } - } else if (['dateweek', 'datemonth', 'range'].includes(item.type)) { + + } else if (['dateweek', 'range'].includes(item.type)) { let val = item.value.split(',') options.push({ reg: new RegExp('@' + item.key + '@', 'ig'), @@ -1068,6 +1125,22 @@ reg: new RegExp('@' + item.key + '1@', 'ig'), value: `'${val[1]}'` }) + } else if (item.type === 'datemonth') { + if (item.match === '=') { + options.push({ + reg: new RegExp('@' + item.key + '@', 'ig'), + value: `'${item.value}'` + }) + } else { + let val = item.value.split(',') + options.push({ + reg: new RegExp('@' + item.key + '@', 'ig'), + value: `'${val[0]}'` + }, { + reg: new RegExp('@' + item.key + '1@', 'ig'), + value: `'${val[1]}'` + }) + } } else if (item.type === 'daterange') { let val = item.value.split(',') let _skey = item.key @@ -1546,6 +1619,11 @@ } else if (card.type !== 'balcony' && !card.setting.supModule) { // 鎮诞妗嗕笂绾х粍浠堕渶鍗曠嫭璁剧疆 errors.push({ level: 0, detail: '鏈缃笂绾х粍浠讹紒'}) } + if (card.subtype === 'dualdatacard' && card.subColumns) { + card.subColumns.forEach(col => { + columns.push(col.field) + }) + } } else if ((card.type === 'balcony' || card.type === 'card') && card.wrap.datatype === 'public') { columns = card.columns.map(c => c.field) } @@ -1553,6 +1631,31 @@ let doubleClick = '' if (card.type === 'table') { doubleClick = card.wrap.doubleClick || '' + } + + let checkBtn = (cell) => { + if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { + if (!cell.modal || cell.modal.fields.length === 0) { + errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) + } + } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { + errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) + } else if (cell.OpenType === 'excelOut') { + if (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0) { + errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) + } else if (cell.intertype === 'system' && cell.verify.dataType !== 'custom' && card.$c_ds && columns.length > 0) { + let cols = [] + cell.verify.columns.forEach(col => { + if (col.output === 'false' || col.Column === '$Index') return + if (!columns.includes(col.Column)) { + cols.push(col.Column) + } + }) + if (cols.length) { + errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楋紙${cols.join('銆�')}锛夊湪瀛楁闆嗕腑涓嶅瓨鍦紒`}) + } + } + } } if (card.$c_ac) { @@ -1565,15 +1668,7 @@ // errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑寮圭獥鏍囩鏈惎鐢╜}) // } // } - if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { - if (!cell.modal || cell.modal.fields.length === 0) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) - } - } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) - } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) - } + checkBtn(cell) if (doubleClick === cell.uuid) { doubleClick = '' } @@ -1586,15 +1681,7 @@ item.elements.forEach(cell => { if (cell.eleType === 'button') { if (cell.hidden === 'true') return - if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { - if (!cell.modal || cell.modal.fields.length === 0) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) - } - } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) - } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) - } + checkBtn(cell) if (linkbtn && linkbtn === cell.uuid) { linkbtn = '' } @@ -1607,15 +1694,7 @@ item.backElements.forEach(cell => { if (cell.eleType === 'button') { if (cell.hidden === 'true') return - if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { - if (!cell.modal || cell.modal.fields.length === 0) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) - } - } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) - } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) - } + checkBtn(cell) if (linkbtn && linkbtn === cell.uuid) { linkbtn = '' } @@ -1639,15 +1718,7 @@ card.elements.forEach(cell => { if (cell.eleType === 'button') { if (cell.hidden === 'true') return - if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { - if (!cell.modal || cell.modal.fields.length === 0) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) - } - } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) - } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) - } + checkBtn(cell) } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) { errors.push({ level: 1, detail: `鍗$墖涓姩鎬佸瓧娈碘��${cell.field}鈥濇棤鏁坄}) } @@ -1660,15 +1731,8 @@ col.elements.forEach(cell => { if (cell.eleType === 'button') { if (cell.hidden === 'true') return - if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { - if (!cell.modal || cell.modal.fields.length === 0) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑琛ㄥ崟灏氭湭娣诲姞`}) - } - } else if (cell.OpenType === 'excelIn' && (!cell.verify || !cell.verify.sheet || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎叆鍒楁湭璁剧疆锛乣}) - } else if (cell.OpenType === 'excelOut' && (!cell.verify || !cell.verify.columns || cell.verify.columns.length === 0)) { - errors.push({ level: 0, detail: `鎸夐挳鈥�${cell.label}鈥濅腑瀵煎嚭鍒楁湭璁剧疆锛乣}) - } + + checkBtn(cell) if (doubleClick === cell.uuid) { doubleClick = '' @@ -1690,4 +1754,150 @@ } return errors +} + +/** + * @description 妫�娴媠ql + */ +export function checkSQL(sql, type) { + if (!sql) return true + + let label = '鏁版嵁婧愪腑' + if (type === 'customscript') { + label = '鑷畾涔塻ql璇彞涓�' + } + + let _quot = sql.match(/'{1}/g) + let _lparen = sql.match(/\({1}/g) + let _rparen = sql.match(/\){1}/g) + + _quot = _quot ? _quot.length : 0 + _lparen = _lparen ? _lparen.length : 0 + _rparen = _rparen ? _rparen.length : 0 + + if (_quot % 2 !== 0) { + notification.warning({ + top: 92, + message: 'sql涓璡'蹇呴』鎴愬鍑虹幇', + duration: 5 + }) + return false + } else if (_lparen !== _rparen) { + notification.warning({ + top: 92, + message: 'sql涓�()蹇呴』鎴愬鍑虹幇', + duration: 5 + }) + return false + } else if (/--/ig.test(sql)) { + let lines = [] + sql.split(/\n/).forEach((s, i) => { + if (/--/ig.test(s)) { + lines.push(i + 1) + } + }) + + lines = lines.join('銆�') + lines = lines ? '(绗�' + lines + '琛�)' : '' + + notification.warning({ + top: 92, + message: label + `${lines}锛屼笉鍙嚭鐜板瓧绗� -- 锛屾敞閲婅鐢� /*鍐呭*/`, + duration: 5 + }) + return false + } else if (/,,/ig.test(sql)) { + let lines = [] + sql.split(/\n/).forEach((s, i) => { + if (/,,/ig.test(s)) { + lines.push(i + 1) + } + }) + + lines = lines.join('銆�') + lines = lines ? '(绗�' + lines + '琛�)' : '' + + notification.warning({ + top: 92, + message: label + `${lines}锛屼笉鍙嚭鐜拌繛缁殑鑻辨枃閫楀彿,,`, + duration: 5 + }) + return false + } else if (/鈥榺鈥�/ig.test(sql)) { + let lines = [] + sql.split(/\n/).forEach((s, i) => { + if (/鈥榺鈥�/ig.test(s)) { + lines.push(i + 1) + } + }) + + lines = lines.join('銆�') + lines = lines ? '(绗�' + lines + '琛�)' : '' + + notification.warning({ + top: 92, + message: label + `${lines}锛屼笉鍙嚭鐜颁腑鏂囧崟寮曞彿`, + duration: 5 + }) + return false + } else if (type === 'customscript' && /\son\s+[a-z0-9_]+\.[a-z0-9_]+\s*=\s*[a-z0-9_]+\.[a-z0-9_]+/ig.test(sql)) { + let list = sql.match(/\son\s+[a-z0-9_]+\.[a-z0-9_]+\s*=\s*[a-z0-9_]+\.[a-z0-9_]+/ig) + let errors = [] + list.forEach(str => { + str = str.replace(/^\s/, '') + let strs = str.match(/(\s|=)[a-z0-9_]+\./ig) + if (strs.length === 2 && (strs[0].replace(/\s|\./g, '') === strs[1].replace(/\s|\./g, ''))) { + errors.push(str) + } + }) + + if (errors.length > 0) { + notification.warning({ + top: 92, + message: '涓嶅彲浣跨敤鍚屼竴涓〃瀛楁杩涜鍏宠仈锛�' + errors.join('銆�'), + duration: 5 + }) + return false + } + } + + let error = '' + let chars = [ + {key: 'create', reg: /(^|\s|\(|\))create\s/ig}, + {key: 'insert', reg: /(^|\s|\(|\))insert\s/ig}, + {key: 'delete', reg: /(^|\s|\(|\))delete\s/ig}, + {key: 'update', reg: /(^|\s|\(|\))update\s/ig}, + {key: 'set', reg: /(^|\s|\(|\))set\s/ig}, + {key: 'drop', reg: /(^|\s|\(|\))drop\s/ig}, + {key: 'alter', reg: /(^|\s|\(|\))alter\s/ig}, + {key: 'truncate', reg: /(^|\s|\(|\))truncate\s/ig}, + {key: 'if', reg: /(^|\s|\(|\))if\s/ig}, + {key: 'exec', reg: /(^|\s|\(|\))exec(\s|\()/ig}, + {key: 'OBJECT', reg: /(^|\s|\(|\))object(\s|\()/ig}, + {key: 'sys.', reg: /(^|\s|\(|\))sys\./ig}, + {key: 'kill', reg: /(^|\s|\(|\))kill\s/ig} + ] + + if (type === 'customscript') { + chars = chars.filter(char => !['create', 'insert', 'delete', 'update', 'set', 'drop', 'if', 'exec'].includes(char.key)) + } + + sql = sql.replace(/sys\.fn_/ig, '') // 璺宠繃sys.fn_楠岃瘉 + + chars.forEach(char => { + if (!error && char.reg.test(sql)) { + error = char.key + } + }) + + if (error) { + notification.warning({ + top: 92, + message: 'sql涓笉鍙娇鐢�' + error, + duration: 5 + }) + return false + } + + return true } \ No newline at end of file -- Gitblit v1.8.0