import { getJSExpressionPrototype, getParamSetterPrototype, } from '@/common/manager/common-style'; import { ButtonPosition } from '@/common/manager/position/button-position'; import { getArrayTableFieldList, getDialogTitle, getNodeById, handleI18nLabel, handleOriginList, isArrayNotEmpty, isRecursionComponent, } from '@/common/util/util'; import { CnTooltip, Select } from '@cainiaofe/cn-ui'; import { __arrayTableCurrentRow__, __dataSource__, __extraParam__, formDialogStateLabel, getCommonBoolDataSource, getFormExprNameByPosition, getOpenDialogModeEnum, openDialogModeLabel, } from '@/common/util/expr-const'; import { createButtonListSetters, createFilterSelectSetters, createTableSelectSetters, getButtonListByPosition, getButtonPrototypeListByPosition, } from '@/common/manager/button'; import { DisplayPosition } from '@/common/manager/position/display-position'; import ExprSetter from '@/common/setter/expr-setter'; import IdSetter from '@/common/setter/id-setter'; import { createEventSetters } from './event'; import { dataOriginRequest, dataOriginStatic, } from '@/common/util/const'; const { ActionSetter } = window.VisualEngineUtils || {}; export function getStringSetter() { return { componentName: 'StringSetter', title: '字符串', }; } const getTableOperateRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'table', prototypeConfig: config }), getStringSetter(), getJSExpressionPrototype({ type: 'tableRequest', prototypeConfig: config, }), ], }, }; }; const getTableOperateUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'table', prototypeConfig: config }), getJSExpressionPrototype({ type: 'tableRequest', prototypeConfig: config, }), ], }, }; }; const getTableToolAreaUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'filter', prototypeConfig: config }), getJSExpressionPrototype({ type: 'formRequest', prototypeConfig: config, }), ], }, }; }; const getTableToolAreaRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'filter', prototypeConfig: config }), getStringSetter(), getJSExpressionPrototype({ type: 'tableBatchArea', prototypeConfig: config, }), ], }, }; }; const getTableToolAreaRequestParamSetter2 = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'filter' }), getStringSetter(), getJSExpressionPrototype({ type: 'formRequest', }), ], }, }; }; // 带表格当前页信息请求参数的setter const getTableToolAreaRequestParamSetter3 = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'filterWithPagination' }), getStringSetter(), getJSExpressionPrototype({ type: 'formRequest', }), ], }, }; }; const getFormRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'form', prototypeConfig: config }), getStringSetter(), getJSExpressionPrototype({ type: 'formRequest', prototypeConfig: config, }), ], }, }; }; const getFormUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'form', prototypeConfig: config }), getJSExpressionPrototype({ type: 'formRequest', }), ], }, }; }; const getFormDialogRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'formDialog', prototypeConfig: config, }), getStringSetter(), getJSExpressionPrototype({ type: 'tableBatchArea', prototypeConfig: config, }), ], }, }; }; const getArrayTableOperateRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'arrayTable' }), getStringSetter(), getJSExpressionPrototype({ type: 'tableRequest', }), ], }, }; }; const getArrayTableItemEventRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'arrayTableItemEvent' }), getStringSetter(), getJSExpressionPrototype({ type: 'tableRequest', }), ], }, }; }; // 自增卡片中子卡片请求参数setter const getArrayCardSubcardRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'arrayCardSubCardButton', prototypeConfig: config, }), getStringSetter(), getJSExpressionPrototype({ type: 'arrayTableCurrentRowRequest', prototypeConfig: config, }), ], }, }; }; const getArrayTableOperateUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'arrayTable' }), getJSExpressionPrototype({ type: 'tableRequest', }), ], }, }; }; const getStepRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'base', prototypeConfig: config }), getStringSetter(), getJSExpressionPrototype({ type: 'base', prototypeConfig: config, }), ], }, }; }; const getListOperateRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getJSExpressionPrototype({ type: 'tableRequest', }), ], }, }; }; const getStepUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'base' }), getJSExpressionPrototype({ type: 'base', }), ], }, }; }; const getTabUrlSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getStringSetter(), getParamSetterPrototype({ type: 'base' }), getJSExpressionPrototype({ type: 'tab', }), ], }, }; }; const getTabRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'base' }), getStringSetter(), getJSExpressionPrototype({ type: 'tab', }), ], }, }; }; const getTreeEventRequestParamSetter = (config) => { return { componentName: 'MixedSetter', props: { setters: [ getParamSetterPrototype({ type: 'tree', prototypeConfig: config }), getStringSetter(), getJSExpressionPrototype({ type: 'base', prototypeConfig: config, }), ], }, }; }; export function getSetterSnippet(config) { const { position, optType, additionalPosition } = config || {}; let urlSetter; let requestParamSetter; if (position && optType) { switch (optType) { case 'link': switch (position) { case ButtonPosition.listItemRightButton: urlSetter = getListOperateRequestParamSetter(config); requestParamSetter = getListOperateRequestParamSetter(config); break; case ButtonPosition.tableOperate: case ButtonPosition.tableCell: urlSetter = getTableOperateUrlSetter(config); requestParamSetter = getTableOperateRequestParamSetter(config); break; case ButtonPosition.tableToolArea: case ButtonPosition.tableBatchArea: case ButtonPosition.tableToolAreaAfterRequestSuccess: urlSetter = getTableToolAreaUrlSetter(config); requestParamSetter = getTableToolAreaRequestParamSetter(config); break; case ButtonPosition.form: case ButtonPosition.formDialog: case ButtonPosition.filterItemEvent: case ButtonPosition.formItemEvent: case ButtonPosition.formDialogItemEvent: case ButtonPosition.formSubmitAfterRequestSuccess: case ButtonPosition.cardAction: case ButtonPosition.subCardAction: case DisplayPosition.form: case DisplayPosition.formDialog: case ButtonPosition.formItemRightButton: urlSetter = getFormUrlSetter(config); if (additionalPosition === DisplayPosition.cnArraySubAreaCard) { requestParamSetter = getArrayCardSubcardRequestParamSetter(config); } else { requestParamSetter = getFormRequestParamSetter(config); } break; case ButtonPosition.arrayTableOperate: case ButtonPosition.arrayTableCell: urlSetter = getArrayTableOperateUrlSetter(config); requestParamSetter = getArrayTableOperateRequestParamSetter(config); break; case ButtonPosition.tabEvent: case ButtonPosition.entryPointEvent: case ButtonPosition.listItemEvent: case ButtonPosition.statisticCardRightButton: urlSetter = getTabUrlSetter(config); requestParamSetter = getTabRequestParamSetter(config); break; case ButtonPosition.arraySubAreaCardOperate: requestParamSetter = getArrayTableItemEventRequestParamSetter(config); break; default: urlSetter = getStepUrlSetter(config); requestParamSetter = getStepRequestParamSetter(config); break; } break; case 'request': switch (position) { case ButtonPosition.tableOperate: case ButtonPosition.tableCell: requestParamSetter = getTableOperateRequestParamSetter(config); break; case ButtonPosition.tableToolArea: case ButtonPosition.tableBatchArea: requestParamSetter = getTableToolAreaRequestParamSetter2(config); break; case ButtonPosition.form: case ButtonPosition.formDialog: case ButtonPosition.cardAction: case ButtonPosition.subCardAction: case ButtonPosition.formItemEvent: case ButtonPosition.formDialogItemEvent: case ButtonPosition.filterEvent: case ButtonPosition.filterItemEvent: case ButtonPosition.formItemRightButton: requestParamSetter = getFormRequestParamSetter(config); break; case ButtonPosition.arrayTableOperate: requestParamSetter = getArrayTableOperateRequestParamSetter(config); break; case ButtonPosition.cnArrayTableItemEvent: case ButtonPosition.arraySubAreaCardOperate: case ButtonPosition.cnArraySubAreaCardItemEvent: requestParamSetter = getArrayTableItemEventRequestParamSetter(config); break; case ButtonPosition.dialog: case ButtonPosition.step: case ButtonPosition.treeNode: case ButtonPosition.result: case ButtonPosition.stepEvent: case ButtonPosition.tabEvent: case ButtonPosition.pageDidMount: case ButtonPosition.blockButton: requestParamSetter = getStepRequestParamSetter(config); break; case ButtonPosition.treeEvent: requestParamSetter = getTreeEventRequestParamSetter(config); break; } break; case 'batch': requestParamSetter = getTableToolAreaRequestParamSetter(config); break; case 'submit': switch (position) { case ButtonPosition.form: case ButtonPosition.cardAction: requestParamSetter = getFormRequestParamSetter(config); break; case ButtonPosition.formDialog: requestParamSetter = getFormDialogRequestParamSetter(config); break; } break; case 'download': switch (position) { case ButtonPosition.cardAction: case ButtonPosition.subCardAction: requestParamSetter = getFormRequestParamSetter(config); break; case ButtonPosition.tableBatchArea: requestParamSetter = getTableToolAreaRequestParamSetter3(config); break; } break; case 'export': switch (position) { case ButtonPosition.tableOperate: requestParamSetter = getTableOperateRequestParamSetter(config); break; case ButtonPosition.tableBatchArea: case ButtonPosition.tableToolArea: requestParamSetter = getTableToolAreaRequestParamSetter2(config); break; } break; } } return { urlSetter, requestParamSetter, }; } export function getStaticDataSourceSnippet(config) { const { extraArraySetterItems = [], jsExpressionSetter } = config || {}; const realJsExpressionSetter = jsExpressionSetter || getJSExpressionPrototype({ type: 'select', offlineTip: '动态控制数据推荐使用「JS代码编辑」设置该属性', }); return { componentName: 'MixedSetter', props: { setters: [ { componentName: 'ArraySetter', title: '设置静态数据', props: { mode: 'list', itemSetter: { componentName: 'ObjectSetter', initialValue: { label: '名称', value: 'jack', }, props: { config: { items: [ { name: 'label', display: 'inline', title: '标签', isRequired: true, setter: 'CnI18nSetter', }, { name: 'value', display: 'inline', title: '值', isRequired: true, setter: { componentName: 'MixedSetter', props: { setters: [ { componentName: 'StringSetter', title: '字符串', }, { componentName: 'NumberSetter', title: '数字', }, { componentName: 'BoolSetter', title: '布尔(true/false)', }, ], }, }, }, ...extraArraySetterItems, ], }, }, }, }, }, { componentName: 'JsonSetter', title: 'JSON编辑器', }, { componentName: 'ParamSelectSetter', props: { dataKey: 'aa', labelKey: 'aa', valueKey: 'aa', groupName: '参数列表', }, title: '从数据源选择', }, { componentName: ( ), title: 'JS代码编辑', }, realJsExpressionSetter, { componentName:'VariableSetter', } ], }, }; } export function getSelectDialogSnippet(config) { return { title: '关联弹窗', name: '_bindDialog', description: '选择将要打开的弹窗', setter(prop) { // // 兼容Vision低版本 // const nodeDocument = this.getNode().document || this.getNode().page; // const NodeCache = nodeDocument.getRootNodeVisitor( // 'NodeCache', // ); // const { nodeList } = NodeCache // const options = nodeList // .filter(x => { // // 新方案:props 里的 isTable 来标记是否是表格类型,需要做联动 // return x.getPropValue('isCnDialog'); // }) // .map(x => { // let id = x.id || ''; // let title = id; // if(title.slice(0,4) === 'node'){ // title = title.replace('node','对话框') // } // return { // title, // value: id, // } // }); const options = []; prop?.getNode?.()?.document?.nodesMap?.forEach((item) => { if (item.getPropValue('isCnDialog')) { const isCnFormDialog = item.getPropValue('isCnFormDialog'); const id = item.id || ''; // 二次确认 const current = prop.getNode?.()?.document?.getNode?.(id); if (current) { const title = getDialogTitle(current); options.push({ title, value: id, }); } // let title = id; // if (title.slice(0, 4) === 'node') { // title = title.replace('node', '弹窗'); // } } }); return { componentName: 'CnSelectSetter', props: { options: [...options], hasClear: true, selectProps: { autoWidth: true, }, }, }; }, ...config, }; } export function getJSXTemplate(config) { if (config) { const { position } = config || {}; const temp = { componentName: 'CnJSXSetter', props: { usePopup: true, enableFullscreen: true, theme: 'vs', }, title: 'React JSX代码', }; if ( [ButtonPosition.tableToolArea, ButtonPosition.tableBatchArea].includes( position, ) ) { temp.initialValue = { type: 'js', source: 'function content(formValue, state, selectedRowKeys, selectedRowRecords) { \n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(formValue, state, selectedRowKeys, selectedRowRecords) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ( [ButtonPosition.formDialog, ButtonPosition.form].includes(position) ) { temp.initialValue = { type: 'js', source: 'function content(formValue, state) { \n // formValue: 当前表单的所有数据\n // state: 全部组件的数据\n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(formValue, state) {\n // formValue: 当前表单的所有数据\n // state: 全部组件的数据\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ( [ ButtonPosition.dialog, ButtonPosition.result, ButtonPosition.step, ButtonPosition.pageRightButton, DisplayPosition.detailInfoDescriptionRender, ].includes(position) ) { temp.initialValue = { type: 'js', source: 'function content(arg, state) { \n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(arg, state) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ([DisplayPosition.tableTopSlot].includes(position)) { temp.initialValue = { type: 'js', source: 'function content(selectedRowKeys, selectedRowRecords, dataSource, tableInfo, state) { \n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(selectedRowKeys, selectedRowRecords, dataSource, tableInfo, state) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ([DisplayPosition.arrayTableSummary].includes(position)) { temp.initialValue = { type: 'js', source: 'function summary(dataSource, Summary, state) { \n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function summary(dataSource, Summary, state) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ([DisplayPosition.tabItem].includes(position)) { temp.initialValue = { type: 'js', source: 'function content(currentItem, state) { \n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(currentItem, state) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ([DisplayPosition.tableCell].includes(position)) { temp.initialValue = { type: 'js', source: 'function content(value, index, record) { \n return {value} \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(value, index, record) {\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ([ButtonPosition.cardAction].includes(position)) { temp.initialValue = { type: 'js', source: 'function content(formValue, state) { \n // formValue: 当前表单的所有数据\n // state: 全部组件的数据\n \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function content(formValue, state) {\n // formValue: 当前表单的所有数据\n // state: 全部组件的数据\n \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } else if ( [ DisplayPosition.listItemContentRender, DisplayPosition.listItemDescriptionRender, ].includes(position) ) { temp.initialValue = { type: 'js', source: 'function itemContentRender(record, index, state) { \n return null; \n}', compiled: 'function main(){\n \n "use strict";\n\nvar __compiledFunc__ = function itemContentRender(record, index, state) {\n return null; \n};\n return __compiledFunc__.apply(this, arguments);\n }', error: {}, }; } return temp; } } export function getRequestWhenFocusSetterSnippet() { return { name: 'requestWhenFocus', title: '获得焦点时重新发请求', display: 'inline', defaultValue: true, setter: { componentName: 'RadioGroupSetter', props: { options: getCommonBoolDataSource(), }, }, }; } export function getFormStateSetterSnippet(config) { const { title, children, extraConfig = {} } = config || {}; const ds = getOpenDialogModeEnum({}); return { groupExprName: __extraParam__, handleCustomGroup: () => { return { label: title || formDialogStateLabel, children: children || [ { label: openDialogModeLabel, value: `${__extraParam__}.openDialogMode`, }, ], }; }, renderTypeDom: () => { return null; }, renderValueDom: (props) => { const { value, onChange } = props || {}; return (