| | |
| | | import md5 from 'md5' |
| | | |
| | | export default class MenuUtils { |
| | | /** |
| | | * @description 获取下级模块 |
| | |
| | | } else if (item.type === 'tabs') { |
| | | if (item.subtype === 'tabletabs') { |
| | | item.subtabs.forEach(tab => { |
| | | if (tab.components[0].uuid === selfId) return |
| | | |
| | | modules.push({ |
| | | value: tab.components[0].uuid, |
| | | label: tab.label, |
| | |
| | | |
| | | if (interfaces && interfaces.length > 0) { |
| | | interfaces.forEach(item => { |
| | | if (item.uuid === selfId) return |
| | | modules.push({ |
| | | value: item.uuid, |
| | | label: item.name |
| | |
| | | } |
| | | |
| | | return modules |
| | | } |
| | | |
| | | /** |
| | | * @description 获取上级模块 |
| | | * @return {String} selfId 当前组件id |
| | | */ |
| | | static checkSupModules (modules, supId) { |
| | | let has = false |
| | | |
| | | let check = (list) => { |
| | | list.forEach(m => { |
| | | if (has) return |
| | | if (supId === m.value) { |
| | | has = true |
| | | return |
| | | } |
| | | if (m.children) { |
| | | check(m.children) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | check(modules) |
| | | |
| | | return has |
| | | } |
| | | |
| | | /** |
| | |
| | | * @description 重置菜单配置,页面整体复制 |
| | | * @return {String} components 配置信息 |
| | | */ |
| | | static resetConfig = (components, uuids = {}, clear = false) => { |
| | | static resetConfig = (components, commonId, clear = false) => { |
| | | return components.map(item => { |
| | | if (item.type === 'navbar') { |
| | | return item |
| | |
| | | item.type = 'card' |
| | | } |
| | | |
| | | uuids[item.uuid] = this.getuuid() |
| | | item.uuid = uuids[item.uuid] |
| | | item.uuid = md5(commonId + item.uuid) |
| | | |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | uuids[tab.uuid] = this.getuuid() |
| | | tab.uuid = uuids[tab.uuid] |
| | | tab.uuid = md5(commonId + tab.uuid) |
| | | |
| | | tab.components = this.resetConfig(tab.components, uuids, clear) |
| | | tab.components = this.resetConfig(tab.components, commonId, clear) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | item.components = this.resetConfig(item.components, uuids, clear) |
| | | item.components = this.resetConfig(item.components, commonId, clear) |
| | | } else if (item.type === 'menubar') { |
| | | item.subMenus = item.subMenus.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | |
| | | return cell |
| | | }) |
| | | } else if (['card', 'carousel', 'timeline'].includes(item.type)) { |
| | | if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) { |
| | | item.wrap.publicId = uuids[item.wrap.publicId] |
| | | if (item.wrap.datatype === 'public' && item.wrap.publicId) { |
| | | item.wrap.publicId = md5(commonId + item.wrap.publicId) |
| | | } |
| | | if (item.wrap.autoExec) { |
| | | item.wrap.autoExec = md5(commonId + item.wrap.autoExec) |
| | | } |
| | | |
| | | if (item.supNodes && item.supNodes.length > 0) { |
| | | item.supNodes = item.supNodes.map(cell => { |
| | | cell.nodes = cell.nodes.map(n => md5(commonId + n)) |
| | | cell.componentId = cell.nodes[cell.nodes.length - 1] |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | | |
| | | item.subcards.forEach(card => { |
| | |
| | | } |
| | | } |
| | | |
| | | if (card.setting.click === 'button' && card.setting.linkbtn) { |
| | | card.setting.linkbtn = md5(commonId + card.setting.linkbtn) |
| | | } |
| | | |
| | | if (card.elements) { |
| | | card.elements = card.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | |
| | | return cell |
| | |
| | | } |
| | | if (card.backElements) { |
| | | card.backElements = card.backElements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | |
| | | return cell |
| | |
| | | } |
| | | }) |
| | | } else if (item.type === 'balcony') { |
| | | if (item.wrap.datatype === 'public' && uuids[item.wrap.publicId]) { |
| | | item.wrap.publicId = uuids[item.wrap.publicId] |
| | | if (item.wrap.datatype === 'public' && item.wrap.publicId) { |
| | | item.wrap.publicId = md5(commonId + item.wrap.publicId) |
| | | } |
| | | if (item.wrap.linkbtn) { |
| | | item.wrap.linkbtn = md5(commonId + item.wrap.linkbtn) |
| | | } |
| | | if (item.elements) { |
| | | item.elements = item.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | |
| | | if (clear && cell.eleType === 'button' && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | this.resetBtn(cell, commonId) |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | | } else if (item.type === 'table' && item.cols) { |
| | | let loopCol = (col) => { |
| | | col.subcols = col.subcols.map(c => { |
| | | c.uuid = this.getuuid() |
| | | let loopCol = (cols) => { |
| | | return cols.map(col => { |
| | | if (col.type === 'action') { |
| | | col.type = 'custom' |
| | | } |
| | | |
| | | col.uuid = md5(commonId + col.uuid) |
| | | |
| | | if (c.type === 'colspan' && c.subcols) { |
| | | c = loopCol(c) |
| | | } else if (c.type === 'custom' && c.elements) { |
| | | c.elements = c.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col.subcols = loopCol(col.subcols) |
| | | } else if (col.type === 'custom' && col.elements) { |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | |
| | | return cell |
| | | }) |
| | | } else if (c.type === 'action' && c.elements) { |
| | | c.elements = c.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | if (cell.eleType === 'button') { |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | this.resetBtn(cell, commonId) |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | | } else if (col.editable === 'true' && col.enter && col.enter !== '$next' && col.enter !== '$sub') { |
| | | if (/\$next_/.test(col.enter)) { |
| | | col.enter = '$next_' + md5(commonId + col.enter.split('_')[1]) |
| | | } else { |
| | | col.enter = md5(commonId + col.enter) |
| | | } |
| | | } |
| | | return c |
| | | }) |
| | | |
| | | return col |
| | | } |
| | | let _uuids = {} |
| | | item.cols = item.cols.map(col => { |
| | | let uuid = this.getuuid() |
| | | |
| | | _uuids[col.uuid] = uuid |
| | | col.uuid = uuid |
| | | |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col = loopCol(col) |
| | | } else if (col.type === 'custom' && col.elements) { |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | return cell |
| | | }) |
| | | } else if (col.type === 'action' && col.elements) { |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | return cell |
| | | }) |
| | | } |
| | | return col |
| | | }) |
| | | |
| | | if (item.subtype === 'editable') { |
| | | item.cols = item.cols.map(col => { |
| | | if (col.editable === 'true' && col.enter && _uuids[col.enter]) { |
| | | col.enter = _uuids[col.enter] |
| | | } |
| | | return col |
| | | }) |
| | | } |
| | | |
| | | item.cols = loopCol(item.cols) |
| | | } else if (item.type === 'form') { |
| | | item.subcards = item.subcards.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | |
| | | |
| | | return m |
| | | }) |
| | | |
| | | if (cell.subButton) { |
| | | this.resetBtn(cell.subButton, commonId) |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | item.btnlog = null |
| | | } |
| | | |
| | | let oriUids = {} |
| | | if (item.action) { |
| | | item.action = item.action.map(cell => { |
| | | let _uuid = this.getuuid() |
| | | |
| | | oriUids[cell.uuid] = _uuid |
| | | cell.uuid = _uuid |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | |
| | | if (clear && cell.pageTemplate === 'linkpage' && cell.linkmenu) { |
| | | cell.pageTemplate = '' |
| | | cell.linkmenu = '' |
| | | } |
| | | |
| | | this.resetBtn(cell, commonId) |
| | | |
| | | return cell |
| | | }) |
| | |
| | | } |
| | | |
| | | if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') { |
| | | let em = false |
| | | item.setting.supModule = item.setting.supModule.map(c => { |
| | | if (!uuids[c]) { |
| | | em = true |
| | | } |
| | | return uuids[c] || '' |
| | | return md5(commonId + c) |
| | | }) |
| | | if (em) { |
| | | item.setting.supModule = '' |
| | | if (item.wrap && item.wrap.supModule) { |
| | | item.wrap.supModule = item.setting.supModule |
| | | } |
| | | } |
| | | |
| | | if (item.wrap && item.wrap.doubleClick) { |
| | | item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || '' |
| | | item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick) |
| | | } |
| | | |
| | | return item |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * @description 按钮重置 |
| | | */ |
| | | static resetBtn (btn, commonId) { |
| | | if (btn.OpenType === 'pop' || (btn.OpenType === 'funcbutton' && btn.execMode === 'pop')) { |
| | | if (btn.modal && btn.modal.fields.length > 0) { |
| | | btn.modal.fields = btn.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | if (btn.switchTab && btn.switchTab.length > 0) { |
| | | btn.switchTab = btn.switchTab.map(m => md5(commonId + m)) |
| | | } |
| | | if (btn.anchors && btn.anchors.length > 0) { |
| | | btn.anchors = btn.anchors.map(m => md5(commonId + m)) |
| | | } |
| | | if (btn.syncComponent && btn.syncComponent[0] === 'multiComponent' && btn.syncComponents) { |
| | | btn.syncComponents = btn.syncComponents.map(m => { |
| | | m.syncComId = m.syncComId.map(n => md5(commonId + n)) |
| | | return m |
| | | }) |
| | | } else if (btn.syncComponent && btn.syncComponent.length > 0) { |
| | | btn.syncComponent = btn.syncComponent.map(m => md5(commonId + m)) |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | * @description 重置组件配置 |
| | | * @return {String} item 组件信息 |
| | | */ |
| | | static resetComponentConfig = (item, uuids = {}) => { |
| | | static resetComponentConfig = (item, appType) => { |
| | | if (item.type === 'navbar') { |
| | | return item |
| | | } |
| | |
| | | item.type = 'card' |
| | | } |
| | | |
| | | let _uuid = this.getuuid() |
| | | |
| | | uuids[item.uuid] = _uuid |
| | | |
| | | item.uuid = _uuid |
| | | item.uuid = this.getuuid() |
| | | let commonId = this.getuuid() |
| | | |
| | | // 重置组件名称 |
| | | let sign = this.getSignName() |
| | | if (item.plot) { // 图表 |
| | | item.plot.name = item.plot.name + sign |
| | | item.plot.name = (item.plot.name || '') + sign |
| | | item.name = item.plot.name |
| | | } else if (item.wrap) { // 通用 |
| | | item.wrap.name = item.wrap.name + sign |
| | | item.wrap.name = (item.wrap.name || '') + sign |
| | | item.name = item.wrap.name |
| | | } else if (item.setting) { // 分组、标签页等 |
| | | item.setting.name = item.setting.name + sign |
| | | item.setting.name = (item.setting.name || '') + sign |
| | | item.name = item.setting.name |
| | | } |
| | | |
| | |
| | | return cell |
| | | }) |
| | | } else if (['card', 'carousel', 'timeline'].includes(item.type)) { |
| | | if (item.wrap.autoExec) { |
| | | item.wrap.autoExec = md5(commonId + item.wrap.autoExec) |
| | | } |
| | | |
| | | if (appType !== 'mob') { |
| | | if (item.wrap.pagestyle === 'slide') { |
| | | item.wrap.pagestyle = 'page' |
| | | } |
| | | } else { |
| | | if (item.wrap.pagestyle === 'switch') { |
| | | item.wrap.pagestyle = 'page' |
| | | } |
| | | } |
| | | |
| | | item.subcards.forEach(card => { |
| | | card.uuid = this.getuuid() |
| | | |
| | | if (card.setting.click === 'button' && card.setting.linkbtn) { |
| | | card.setting.linkbtn = md5(commonId + card.setting.linkbtn) |
| | | } |
| | | |
| | | if (card.elements) { |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | card.elements = card.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton') |
| | | } |
| | | card.elements = card.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | |
| | | if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { |
| | | if (cell.modal && cell.modal.fields.length > 0) { |
| | | cell.modal.fields = cell.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | card.elements = card.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton') |
| | | } |
| | | card.backElements = card.backElements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { |
| | | if (cell.modal && cell.modal.fields.length > 0) { |
| | | cell.modal.fields = cell.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | return cell |
| | | }) |
| | | } |
| | |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | item.elements = item.elements.filter(b => b.OpenType !== 'popview' && b.OpenType !== 'funcbutton') |
| | | } |
| | | if (item.wrap.linkbtn) { |
| | | item.wrap.linkbtn = md5(commonId + item.wrap.linkbtn) |
| | | } |
| | | item.elements = item.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | if (cell.eleType === 'button') { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { |
| | | if (cell.modal && cell.modal.fields.length > 0) { |
| | | cell.modal.fields = cell.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | } else { |
| | | cell.uuid = this.getuuid() |
| | | } |
| | | return cell |
| | | }) |
| | | } |
| | | } else if (item.type === 'table' && item.cols) { |
| | | let loopCol = (col) => { |
| | | col.subcols = col.subcols.map(c => { |
| | | c.uuid = this.getuuid() |
| | | let loopCol = (cols) => { |
| | | return cols.map(col => { |
| | | if (col.type === 'action') { |
| | | col.type = 'custom' |
| | | } |
| | | |
| | | if (c.type === 'colspan' && c.subcols) { |
| | | c = loopCol(c) |
| | | } else if (c.type === 'custom' && c.elements) { |
| | | c.elements = c.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | col.uuid = md5(commonId + col.uuid) |
| | | |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col.subcols = loopCol(col.subcols) |
| | | } else if (col.type === 'custom' && col.elements) { |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | col.elements = col.elements.filter(c => c.eleType !== 'button' || (c.OpenType !== 'popview' && c.OpenType !== 'funcbutton')) |
| | | } |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (cell.eleType === 'button') { |
| | | if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { |
| | | if (cell.modal && cell.modal.fields.length > 0) { |
| | | cell.modal.fields = cell.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | return cell |
| | | }) |
| | | } else if (col.editable === 'true' && col.enter && col.enter !== '$next' && col.enter !== '$sub') { // 可编辑表 |
| | | if (/\$next_/.test(col.enter)) { |
| | | col.enter = '$next_' + md5(commonId + col.enter.split('_')[1]) |
| | | } else { |
| | | col.enter = md5(commonId + col.enter) |
| | | } |
| | | } |
| | | return c |
| | | }) |
| | | |
| | | return col |
| | | } |
| | | |
| | | let _uuids = {} |
| | | item.cols = item.cols.map(col => { |
| | | let uuid = this.getuuid() |
| | | |
| | | _uuids[col.uuid] = uuid |
| | | col.uuid = uuid |
| | | |
| | | if (col.type === 'colspan' && col.subcols) { |
| | | col = loopCol(col) |
| | | } else if (col.type === 'custom' && col.elements) { |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | return cell |
| | | }) |
| | | } else if (col.type === 'action' && col.elements) { |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | col.elements = col.elements.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton') |
| | | } |
| | | col.elements = col.elements.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | | return cell |
| | | }) |
| | | } |
| | | return col |
| | | }) |
| | | |
| | | if (item.subtype === 'editable') { |
| | | item.cols = item.cols.map(col => { |
| | | if (col.editable === 'true' && col.enter && _uuids[col.enter]) { |
| | | col.enter = _uuids[col.enter] |
| | | } |
| | | return col |
| | | }) |
| | | } |
| | | |
| | | item.cols = loopCol(item.cols) |
| | | } else if (item.type === 'form') { |
| | | item.subcards = item.subcards.map(cell => { |
| | | cell.uuid = this.getuuid() |
| | |
| | | |
| | | delete item.btnlog |
| | | |
| | | let oriUids = {} |
| | | if (item.action) { |
| | | if (sessionStorage.getItem('editMenuType') === 'popview') { |
| | | item.action = item.action.filter(c => c.OpenType !== 'popview' && c.OpenType !== 'funcbutton') |
| | | } |
| | | item.action = item.action.map(cell => { |
| | | let _uuid = this.getuuid() |
| | | |
| | | oriUids[cell.uuid] = _uuid |
| | | |
| | | cell.uuid = _uuid |
| | | cell.uuid = md5(commonId + cell.uuid) |
| | | if (cell.OpenType === 'pop' || (cell.OpenType === 'funcbutton' && cell.execMode === 'pop')) { |
| | | if (cell.modal && cell.modal.fields.length > 0) { |
| | | cell.modal.fields = cell.modal.fields.map(m => { |
| | | m.uuid = this.getuuid() |
| | | return m |
| | | }) |
| | | } |
| | | } |
| | | |
| | | return cell |
| | | }) |
| | |
| | | } |
| | | |
| | | if (item.setting && item.setting.supModule && item.setting.supModule[0] !== 'empty') { |
| | | let em = false |
| | | item.setting.supModule = item.setting.supModule.map(c => { |
| | | if (!uuids[c]) { |
| | | em = true |
| | | } |
| | | return uuids[c] || '' |
| | | }) |
| | | if (em) { |
| | | item.setting.supModule = '' |
| | | } |
| | | item.setting.supModule = '' |
| | | } |
| | | if (item.wrap && item.wrap.supModule) { |
| | | item.wrap.supModule = '' |
| | | } |
| | | |
| | | if (item.wrap && item.wrap.doubleClick) { |
| | | item.wrap.doubleClick = oriUids[item.wrap.doubleClick] || '' |
| | | item.wrap.doubleClick = md5(commonId + item.wrap.doubleClick) |
| | | } |
| | | |
| | | return item |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @description 格式化搜索条件 |
| | | */ |
| | | export function formatSearch (searches) { |
| | | if (!searches) return [] |
| | | |
| | | let newsearches = [] |
| | | searches.forEach(item => { |
| | | if (!item.field) return |
| | | |
| | | if (item.type === 'group') { |
| | | newsearches.push({ |
| | | key: item.field, |
| | | match: '', |
| | | type: item.type, |
| | | value: 'customized', |
| | | forbid: true |
| | | }, { |
| | | key: item.datefield, |
| | | match: 'between', |
| | | type: 'daterange', |
| | | value: '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000', |
| | | forbid: item.query === 'false' |
| | | }) |
| | | } else { |
| | | let value = item.initval |
| | | let type = item.type |
| | | |
| | | 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' |
| | | } 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') { |
| | | value = '1949-10-01 00:00:00.000,1949-10-02 00:00:00.000' |
| | | } else if (item.type === 'range') { |
| | | value = `${item.minValue},${item.maxValue}` |
| | | } else if (item.type === 'multiselect' || (item.type === 'checkcard' && item.multiple === 'true')) { |
| | | type = 'multi' |
| | | value = '0' |
| | | } else { |
| | | value = '0' |
| | | } |
| | | newsearches.push({ |
| | | key: item.field, |
| | | match: item.match, |
| | | type: type, |
| | | value: value, |
| | | precision: item.precision || 'day', |
| | | forbid: item.query === 'false' |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | return newsearches |
| | | } |
| | | |
| | | /** |
| | | * @description 拼接where条件 |
| | | */ |
| | | export function joinMainSearchkey (searches) { |
| | | if (!searches || searches.length === 0) return '' |
| | | |
| | | let searchText = [] |
| | | searches.forEach(item => { |
| | | if (item.forbid) return |
| | | |
| | | if (item.type === 'text' || item.type === 'select') { // 综合搜索,文本或下拉,所有字段拼接 |
| | | let str = item.match === 'like' || item.match === 'not like' ? '%' : '' |
| | | let fields = item.key.split(',').map(field => { |
| | | return field + ' ' + item.match + ' \'' + str + item.value + str + '\'' |
| | | }) |
| | | |
| | | searchText.push('(' + fields.join(' OR ') + ')') |
| | | } else if (item.type === 'checkcard') { |
| | | let str = item.match === 'like' || item.match === 'not like' ? '%' : '' |
| | | |
| | | searchText.push('(' + item.key + ' ' + item.match + ' \'' + str + item.value + str + '\')') |
| | | } else if (item.type === 'multi') { |
| | | 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') { |
| | | 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(',') |
| | | |
| | | let _skey = item.key |
| | | let _ekey = item.key |
| | | |
| | | if (/,/.test(item.key)) { |
| | | _skey = item.key.split(',')[0] |
| | | _ekey = item.key.split(',')[1] |
| | | } |
| | | |
| | | searchText.push('(' + _skey + ' >= \'' + val[0] + '\' AND ' + _ekey + ' < \'' + val[1] + '\')') |
| | | } else { |
| | | searchText.push('(' + item.key + ' ' + item.match + ' \'' + item.value + '\')') |
| | | } |
| | | }) |
| | | |
| | | return searchText.join(' AND ') |
| | | } |
| | | |
| | | /** |
| | | * @description 获取搜索正则替换 |
| | | */ |
| | | export function getSearchRegs (searches) { |
| | | if (!searches) return [] |
| | | |
| | | let options = [] |
| | | let fieldmap = new Map() |
| | | searches.forEach(item => { |
| | | if (item.type === 'date') { |
| | | if (fieldmap.has(item.key)) { |
| | | options.push({ |
| | | reg: new RegExp('@' + item.key + '1@', 'ig'), |
| | | value: `'${item.value}'` |
| | | }) |
| | | } else { |
| | | fieldmap.set(item.key, true) |
| | | options.push({ |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | }) |
| | | } |
| | | } else if (['dateweek', 'datemonth', 'range'].includes(item.type)) { |
| | | 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 |
| | | let _ekey = item.key + '1' |
| | | |
| | | if (/,/.test(item.key)) { |
| | | _skey = item.key.split(',')[0] |
| | | _ekey = item.key.split(',')[1] |
| | | } |
| | | |
| | | options.push({ |
| | | reg: new RegExp('@' + _skey + '@', 'ig'), |
| | | value: `'${val[0]}'` |
| | | }, { |
| | | reg: new RegExp('@' + _ekey + '@', 'ig'), |
| | | value: `'${val[1]}'` |
| | | }) |
| | | } else if (item.type === 'text' || item.type === 'select') { |
| | | item.key.split(',').forEach(field => { |
| | | options.push({ |
| | | reg: new RegExp('@' + field + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | }) |
| | | }) |
| | | } else { |
| | | options.push({ |
| | | reg: new RegExp('@' + item.key + '@', 'ig'), |
| | | value: `'${item.value}'` |
| | | }) |
| | | } |
| | | }) |
| | | |
| | | return options |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | /** |
| | | * @description 获取图表高度 |
| | | */ |
| | | export function getHeight (val) { |
| | | if (typeof(val) === 'string') { |
| | | if (val.indexOf('px') > -1) { |
| | | val = parseFloat(val) |
| | | } else if (val.indexOf('vw') > -1) { |
| | | val = parseFloat(val) |
| | | val = document.body.clientWidth * val / 100 |
| | | } else if (val.indexOf('vh') > -1) { |
| | | val = parseFloat(val) |
| | | val = document.body.clientHeight * val / 100 |
| | | } |
| | | } |
| | | |
| | | return parseInt(val || 400) - 30 |
| | | } |
| | | |
| | | /** |
| | | * @description 获取表名 |
| | | */ |
| | | export function getTables (config, pops) { |
| | | let tables = [] |
| | | let cuts = [] |
| | | let cutreg = /(from|update|insert\s+into)\s+(@db@)?[a-z_]+/ig |
| | | let cutreg = /(from|update|insert\s+into)\s+(@db@)?[a-z0-9_]+/ig |
| | | let trimreg = /(from|update|insert\s+into)\s+(@db@)?/ig |
| | | |
| | | if (config.setting && (!config.wrap || !config.wrap.datatype || config.wrap.datatype === 'dynamic')) { |
| | | if (config.setting.interType === 'system') { |
| | | if (config.setting.execute !== 'false') { |
| | | if (config.setting.execute !== 'false' && config.setting.dataresource) { |
| | | let tbs = config.setting.dataresource.match(cutreg) |
| | | tbs && cuts.push(...tbs) |
| | | } |
| | |
| | | if (cell.eleType !== 'button') return |
| | | if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | | pops.push({...cell, parentId: config.uuid}) |
| | |
| | | if (cell.eleType !== 'button') return |
| | | if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | | pops.push({...cell, parentId: config.uuid}) |
| | |
| | | }) |
| | | } |
| | | |
| | | config.cols && config.cols.forEach(col => { |
| | | if (col.type === 'action') { |
| | | col.elements.forEach(cell => { |
| | | if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | | pops.push({...cell, parentId: config.uuid}) |
| | | } else if (cell.config && cell.config.$tables) { |
| | | tables.push(...cell.config.$tables) |
| | | } |
| | | if (config.cols) { |
| | | let loopCol = (cols) => { |
| | | cols.forEach(col => { |
| | | if (col.type === 'colspan') { |
| | | loopCol(col.subcols) |
| | | } else if (col.type === 'custom') { |
| | | col.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | | pops.push({...cell, parentId: config.uuid}) |
| | | } else if (cell.config && cell.config.$tables) { |
| | | tables.push(...cell.config.$tables) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | loopCol(config.cols) |
| | | } |
| | | |
| | | config.elements && config.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | if (['form', 'pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | |
| | | |
| | | config.action && config.action.forEach(cell => { |
| | | if (['pop', 'prompt', 'exec', 'excelIn', 'excelOut'].includes(cell.OpenType)) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'funcbutton' && cell.funcType === 'print' && cell.verify) { |
| | | action.push(cell) |
| | | } else if (cell.OpenType === 'popview') { |
| | | if (pops) { |
| | |
| | | } |
| | | if (btn.intertype === 'system' && btn.verify.scripts) { |
| | | btn.verify.scripts.forEach(script => { |
| | | if (script.status === 'false') return |
| | | let tbs = script.sql.match(cutreg) |
| | | tbs && cuts.push(...tbs) |
| | | }) |
| | | } |
| | | } else if (btn.OpenType === 'funcbutton') { |
| | | if (btn.intertype !== 'system' || !btn.verify || !btn.verify.setting) return |
| | | if (btn.verify.dataType === 'custom') { |
| | | if (btn.verify.setting.defaultSql !== 'false') { |
| | | let tbs = btn.verify.setting.dataresource.match(cutreg) |
| | | tbs && cuts.push(...tbs) |
| | | } |
| | | btn.verify.scripts && btn.verify.scripts.forEach(script => { |
| | | if (script.status === 'false') return |
| | | let tbs = script.sql.match(cutreg) |
| | | tbs && cuts.push(...tbs) |
| | |
| | | |
| | | cuts = cuts.map(item => item.replace(trimreg, '')) |
| | | tables.push(...cuts) |
| | | tables = tables.filter(Boolean) |
| | | tables = tables.filter(tb => tb && tb !== 'dbo' && tb.length > 1) |
| | | tables = Array.from(new Set(tables)) |
| | | |
| | | return tables |
| | | } |
| | | |
| | | /** |
| | | * @description 获取接口及函数 |
| | | */ |
| | | export function getFuncsAndInters (config) { |
| | | let inters = 'false' |
| | | |
| | | let filterBtn = (cell) => { |
| | | if ((cell.intertype === 'outer' && cell.sysInterface !== 'true') || cell.intertype === 'custom') { |
| | | inters = 'true' |
| | | } |
| | | } |
| | | |
| | | let traversal = (components) => { |
| | | if (!components || inters === 'true') return |
| | | |
| | | components.forEach(item => { |
| | | if (item.type === 'tabs') { |
| | | item.subtabs.forEach(tab => { |
| | | traversal(tab.components) |
| | | }) |
| | | } else if (item.type === 'group') { |
| | | traversal(item.components) |
| | | } else { |
| | | if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') { |
| | | inters = 'true' |
| | | } |
| | | |
| | | if (item.action) { |
| | | item.action.forEach(cell => { |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config) { |
| | | traversal(cell.config.components) |
| | | } |
| | | } else { |
| | | filterBtn(cell) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (item.type === 'card' || item.type === 'carousel' || item.type === 'timeline') { |
| | | item.subcards.forEach(card => { |
| | | card.elements && card.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config) { |
| | | traversal(cell.config.components) |
| | | } |
| | | } else { |
| | | filterBtn(cell) |
| | | } |
| | | }) |
| | | card.backElements && card.backElements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config) { |
| | | traversal(cell.config.components) |
| | | } |
| | | } else { |
| | | filterBtn(cell) |
| | | } |
| | | }) |
| | | }) |
| | | } else if (item.type === 'balcony') { |
| | | item.elements && item.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config) { |
| | | traversal(cell.config.components) |
| | | } |
| | | } else { |
| | | filterBtn(cell) |
| | | } |
| | | }) |
| | | } else if (item.type === 'table') { |
| | | let loopCol = (cols) => { |
| | | cols.forEach(col => { |
| | | if (col.type === 'colspan') { |
| | | loopCol(col.subcols) |
| | | } else if (col.type === 'custom') { |
| | | col.elements.forEach(cell => { |
| | | if (cell.eleType !== 'button') return |
| | | |
| | | if (cell.OpenType === 'popview') { |
| | | if (cell.config) { |
| | | traversal(cell.config.components) |
| | | } |
| | | } else { |
| | | filterBtn(cell) |
| | | } |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | loopCol(item.cols) |
| | | } else if (item.type === 'form') { |
| | | item.subcards.forEach(group => { |
| | | filterBtn(group.subButton) |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (config.interfaces) { |
| | | config.interfaces.forEach(item => { |
| | | if (item.setting && item.setting.interType === 'outer' && item.setting.sysInterface !== 'true') { |
| | | inters = 'true' |
| | | } |
| | | }) |
| | | } |
| | | |
| | | traversal(config.components) |
| | | |
| | | return inters |
| | | } |
| | | |
| | | /** |
| | | * @description 检测组件内容 |
| | | */ |
| | | export function checkComponent (card) { |
| | | let errors = [] |
| | | let columns = [] |
| | | |
| | | if (card.$c_ds) { |
| | | columns = card.columns.map(c => c.field) |
| | | if (card.setting.interType === 'system' && card.setting.execute !== 'false' && !card.setting.dataresource) { |
| | | errors.push({ level: 0, detail: '未设置数据源!'}) |
| | | } else if (card.setting.interType === 'system' && card.setting.execute === 'false' && card.scripts.filter(script => script.status !== 'false').length === 0) { |
| | | errors.push({ level: 0, detail: '数据源中无可用脚本!'}) |
| | | } else if (!card.setting.primaryKey) { |
| | | errors.push({ level: 0, detail: '未设置主键!'}) |
| | | } else if (!columns.includes(card.setting.primaryKey)) { |
| | | errors.push({ level: 0, detail: '主键已失效!'}) |
| | | } else if (card.subtype === 'dualdatacard') { // 双重卡 |
| | | if (!card.setting.subKey) { |
| | | errors.push({ level: 0, detail: '未设置子表主键!'}) |
| | | } else if (!card.setting.subBID) { |
| | | errors.push({ level: 0, detail: '未设置子表BID!'}) |
| | | } else if (!card.setting.supModule) { |
| | | errors.push({ level: 0, detail: '未设置上级组件!'}) |
| | | } |
| | | } else if (card.type === 'card' && card.subtype === 'datacard') { // 数据卡,可能有多上级 |
| | | if (card.wrap.supType !== 'multi' && !card.setting.supModule) { |
| | | errors.push({ level: 0, detail: '未设置上级组件!'}) |
| | | } |
| | | } else if (card.type !== 'balcony' && !card.setting.supModule) { // 悬浮框上级组件需单独设置 |
| | | errors.push({ level: 0, detail: '未设置上级组件!'}) |
| | | } |
| | | } else if ((card.type === 'balcony' || card.type === 'card') && card.wrap.datatype === 'public') { |
| | | columns = card.columns.map(c => c.field) |
| | | } |
| | | |
| | | let doubleClick = '' |
| | | if (card.type === 'table') { |
| | | doubleClick = card.wrap.doubleClick || '' |
| | | } |
| | | |
| | | if (card.$c_ac) { |
| | | card.action.forEach(cell => { |
| | | if (cell.hidden === 'true' || cell.origin) return |
| | | // if (cell.OpenType === 'popview') { |
| | | // if (!cell.config) { |
| | | // errors.push({ level: 0, detail: `按钮“${cell.label}”中弹窗标签尚未设置`}) |
| | | // } else if (!cell.config.enabled) { |
| | | // 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}”中导出列未设置!`}) |
| | | } |
| | | if (doubleClick === cell.uuid) { |
| | | doubleClick = '' |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (card.$c_sc) { |
| | | card.subcards.forEach((item, i) => { |
| | | let linkbtn = item.setting.linkbtn || '' |
| | | 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}”中导出列未设置!`}) |
| | | } |
| | | if (linkbtn && linkbtn === cell.uuid) { |
| | | linkbtn = '' |
| | | } |
| | | } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) { |
| | | errors.push({ level: 1, detail: `卡片中动态字段“${cell.field}”无效`}) |
| | | } |
| | | }) |
| | | |
| | | if (card.subtype === 'dualdatacard' || (item.setting.type === 'multi' && item.backElements && sessionStorage.getItem('appType') !== 'mob')) { |
| | | 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}”中导出列未设置!`}) |
| | | } |
| | | if (linkbtn && linkbtn === cell.uuid) { |
| | | linkbtn = '' |
| | | } |
| | | } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) { |
| | | errors.push({ level: 1, detail: `卡片中动态字段“${cell.field}”无效`}) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (linkbtn) { |
| | | errors.push({ level: 1, detail: `第${i + 1}张卡片中绑定按钮已删除`}) |
| | | } |
| | | }) |
| | | |
| | | if (card.subcards.length === 0) { |
| | | errors.push({ level: 0, detail: '卡片不可为空!'}) |
| | | } |
| | | } |
| | | |
| | | if (card.$c_el) { |
| | | 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}”中导出列未设置!`}) |
| | | } |
| | | } else if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) { |
| | | errors.push({ level: 1, detail: `卡片中动态字段“${cell.field}”无效`}) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | if (card.$c_cl) { |
| | | card.cols.forEach(col => { |
| | | if (col.type === 'custom') { |
| | | 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}”中导出列未设置!`}) |
| | | } |
| | | |
| | | if (doubleClick === cell.uuid) { |
| | | doubleClick = '' |
| | | } |
| | | } else { |
| | | if (cell.datatype === 'dynamic' && cell.field && !columns.includes(cell.field)) { |
| | | errors.push({ level: 1, detail: `显示列“${col.label}”中动态字段“${cell.field}”无效`}) |
| | | } |
| | | } |
| | | }) |
| | | } else if (col.field && !columns.includes(col.field)) { |
| | | errors.push({ level: 1, detail: `显示列“${col.label}”中字段“${col.field}”无效`}) |
| | | } |
| | | }) |
| | | |
| | | if (doubleClick) { |
| | | errors.push({ level: 1, detail: `绑定的双击按钮已删除`}) |
| | | } |
| | | } |
| | | |
| | | return errors |
| | | } |