UNPKG

@ywfe/materials-design

Version:
947 lines (946 loc) 28.7 kB
"use strict"; exports.__esModule = true; exports["default"] = void 0; var _index = require("./index"); var _jsonFormBaseProps = require("./json-form-base-props"); var _utils = require("../_utils"); var historyProps = [{ display: 'block', title: { label: '按钮文字', tip: 'btnText | 按钮文字' }, name: 'btnText', description: '按钮文字', supportVariable: false, setter: { componentName: 'StringSetter', initialValue: '按钮', props: { placeholder: '请输入' } } }, { display: 'block', title: { label: '按钮类型', tip: 'btnType | 按钮类型' }, supportVariable: false, name: 'btnType', description: '按钮类型', defaultValue: 'default', setter: { componentName: 'RadioGroupSetter', props: { options: [{ label: '主按钮', value: 'primary' }, { label: '次按钮', value: 'default' }, { label: '自定义按钮', value: '' }] }, initialValue: 'primary' } }, { display: 'block', title: { label: '跳转地址', tip: '_url | 跳转地址 如 /a/b/c, ' }, name: '_url', setter: { componentName: 'MixedSetter', props: { setters: [{ componentName: 'StringSetter' }, { componentName: 'VariableSetter' }] } }, extraProps: { getValue: function getValue(target, value) { return value || '/'; }, setValue: function setValue(target, v) { var type = (0, _utils.getPropValueWithPath)(target, '.__optionType'); var value = v.value || "'" + v + "'"; var func = { HistoryPush: "function (){this.props.appHelper.history.push(" + value + ")}", HistoryOpen: "function (){this.props.appHelper.history.open(" + value + ")}" }; target.parent.setPropValue('onClick', { type: 'JSExpression', value: func[type] }); } } }]; var tableButtonsProps = { title: '数据操作区配置', name: 'buttons', // display: 'accordion', supportVariable: false, setter: { componentName: 'ArraySetter', props: { itemSetter: { componentName: 'ObjectSetter', props: { descriptor: 'primaryKey', config: { items: [_jsonFormBaseProps.primaryKeyConfig, { name: '__optionType', display: 'block', title: { label: '操作类型', tip: '__optionType | 操作类型' }, supportVariable: false, setter: { componentName: 'SelectSetter', isRequired: true, defaultValue: 'Button', props: { options: [{ label: '普通按钮', value: 'Button' }, { label: '页面跳转(当前页)', value: 'HistoryPush' }, { label: '页面跳转(新开页面)', value: 'HistoryOpen' }, { label: '新建数据(弹窗)', value: 'DataAddDialog' }, { label: '数据记录(表格弹窗)', value: 'TableDialog' }, { label: '批量操作', value: 'Batch' }, { label: '导入数据(开发中)', value: 'ConfirmModal' }, { label: '导出数据(开发中)', value: 'ConfirmModal' }, { label: '导入记录(开发中)', value: 'ConfirmModal' }, { label: '自定义操作', value: '' }] } }, extraProps: { setValue: function setValue(target, v) { switch (v) { case 'HistoryPush': target.parent.setPropValue('btnText', '页面跳转'); target.parent.setPropValue('children', null); target.parent.setPropValue('btnType', 'default'); target.parent.setPropValue('type', 'action'); break; case 'HistoryOpen': target.parent.setPropValue('btnText', '页面跳转'); target.parent.setPropValue('children', null); target.parent.setPropValue('btnType', 'default'); target.parent.setPropValue('type', 'action'); break; case 'Batch': target.parent.setPropValue('btnText', '批量操作'); target.parent.setPropValue('children', null); target.parent.setPropValue('btnType', 'default'); target.parent.setPropValue('type', 'batch'); break; case 'DataAddDialog': target.parent.setPropValue('type', 'action'); target.parent.setPropValue('children', { type: 'JSSlot', // params: ['initialValues', 'index', 'reload'], value: [{ componentName: 'DataAddDialog', props: { btnText: '新增', btnType: 'primary', title: '新增数据', reload: { type: 'JSExpression', value: 'this.reload' }, items: [{ component: 'Input', title: '表单项', name: "input_" + (0, _utils.uuid)() }] } }] }); break; case 'TableDialog': target.parent.setPropValue('type', 'action'); target.parent.setPropValue('children', { type: 'JSSlot', value: [{ componentName: 'YwTableDialog', props: { btnText: '查看记录', btnType: 'primary', title: '查看记录', reload: { type: 'JSExpression', value: 'this.reload' } } }] }); break; case 'Button': target.parent.setPropValue('type', 'action'); target.parent.setPropValue('btnType', 'default'); target.parent.setPropValue('btnText', '按钮'); target.parent.setPropValue('children', null); break; default: break; } } } }, { display: 'block', name: 'visible', title: { label: '是否显示', tip: 'visible | 是否显示' }, setter: { componentName: 'MixedSetter', props: { setters: ['VariableSetter'] } } }, { title: '操作类型', name: 'type', setter: { componentName: 'SelectSetter', props: { options: [{ label: '批量类(左侧)', value: 'batch' }, { label: '新增类(右侧)', value: 'action' } // { // label: '过滤条件', // value: 'filter', // }, ] }, initialValue: 'action' }, condition: function condition(target) { return !(0, _utils.getPropValueWithPath)(target, '.__optionType'); } }].concat((0, _utils.getPropsByDependence)(historyProps, ['HistoryPush', 'HistoryOpen'], '.__optionType'), (0, _utils.getPropsByDependence)(_index.YwButtonBaseProps, ['Button'], '.__optionType'), (0, _utils.getPropsByDependence)(_index.YwButtonBaseProps, ['Batch'], '.__optionType'), [{ name: 'onClick', // 新增类事件 title: '点击事件', display: 'block', supportVariable: false, setter: { componentName: 'SchemaFunctionSetter', props: { title: 'onClick', async: true, properties: { body: { type: 'array', items: [{ type: 'Function', properties: { template: 'SetStateFunction', extraProps: { state: 'visible', value: '{{true}}' } } }] } }, required: ['body'] } }, condition: function condition(target) { return (0, _utils.getPropValueWithPath)(target, '.btnType') !== '' && !(0, _utils.getPropValueWithPath)(target, '.children') && ['action'].includes((0, _utils.getPropValueWithPath)(target, '.type')); } }, { name: 'onClick', // 批量操作类事件 title: '点击事件', supportVariable: false, setter: function setter(target) { var ref = (0, _utils.getPropValueWithPath)(target, '...ref'); return { componentName: 'SchemaFunctionSetter', props: { title: 'onBatchClick', async: true, properties: { input: { type: 'object', properties: { keys: { type: 'array' }, data: { type: 'array' } }, required: ['keys', 'data'] }, body: { type: 'array', items: [{ type: 'Function', properties: { template: 'RequestFunction', variable: 'requestRes', extraProps: {} } }, { type: 'Function', properties: { template: 'DispatchFunction', extraProps: { path: ref, type: 'batch', data: '{{undefined}}' } } }] } }, required: ['input', 'body'] } }; }, condition: function condition(target) { return (0, _utils.getPropValueWithPath)(target, '.btnType') !== '' && !(0, _utils.getPropValueWithPath)(target, '.children') && ['batch'].includes((0, _utils.getPropValueWithPath)(target, '.type')); } }, { name: 'children', title: { label: '自定义操作', tip: 'children | 自定义操作按钮' }, propType: 'func', setter: { componentName: 'SlotSetter', title: '自定义操作按钮', props: { hideParams: true }, initialValue: { type: 'JSSlot', hideParams: true, value: [] } }, condition: function condition(target) { return !(0, _utils.getPropValueWithPath)(target, '.__optionType'); } }]) } }, initialValue: { __optionType: 'Button' } } } } }; var TableBaseProps = [(0, _utils.getRefConfig)('table', [{ type: 'reload' }]), { name: 'columns', title: { label: '表格列', tip: '表格列的配置描述,具体项见下表' }, supportVariable: false, display: 'accordion', setter: { componentName: 'ArraySetter', props: { itemSetter: { componentName: 'ObjectSetter', props: { descriptor: 'title', config: { items: [{ display: 'block', name: 'title', title: { label: '标题', tip: 'title | 列头显示文字' }, supportVariable: false, propType: { type: 'oneOfType', value: ['string', 'func'] }, isRequired: true, setter: { componentName: 'StringSetter', props: { placeholder: '请输入列头名称' } } }, { display: 'block', name: 'dataIndex', title: { label: '字段', tip: 'dataIndex | 列数据在数据项中对应的路径,支持通过数组查询嵌套路径' }, propType: 'string', // isRequired: true, supportVariable: false, defaultValue: 'id', setter: 'StringSetter', extraProps: { setValue: function setValue(target, value) { if (value) { target.parent.parent.getProps().setPropValue("columns." + target.parent.name + ".key", value); target.parent.parent.getProps().setPropValue("columns." + target.parent.name + ".dataIndex", value); } } } }, { display: 'block', name: 'width', supportVariable: false, title: { label: '宽度', tip: 'width | 列的宽度,建议区间 80 ~ 150' }, propType: { type: 'oneOfType', value: ['number', 'string'] }, setter: 'NumberSetter' }, { display: 'block', name: 'component', title: { label: '渲染组件', tip: 'component | 提供简单类型的内容渲染模板,复杂类型请自定义' }, supportVariable: false, propType: 'string', setter: { componentName: 'SelectSetter', isRequired: false, props: { options: [{ label: '序号 | IndexCol', value: 'IndexCol' }, { label: '缺省占位 | EmptyCol', value: 'EmptyCol' }, { label: '价格 | Price', value: 'Price' }, { label: '可复制 | CopyCol', value: 'CopyCol' }, { label: '时间 | Time', value: 'Time' }, // { // label: '表单项 | YwJsonForm', // todo 渲染有问题 暂时不透出 // value: 'YwJsonForm', // }, { label: '自定义渲染', value: '' }] }, initialValue: 'EmptyCol' } // condition: (target) => !!getPropValue(target, '.dataIndex'), // condition: { // type: 'JSFunction', // value: // 'target => !!target.parent.parent.getProps().getPropValue(`columns.${target.parent.name}.dataIndex`)', // }, }, // { // title: { label: '组件配置项', tip: 'componentProps | 组件配置项' }, // name: 'componentProps', // display: 'accordion', // setter: { // componentName: 'ObjectSetter', // props: { // config: { // items: tableFormItemProps, // }, // }, // }, // condition: (target: any) => // ['YwJsonForm'].includes(getPropValueWithPath(target, '.component')), // }, { display: 'block', name: '_render', title: { label: '自定义组件', tip: 'render | 选择组件库-基础组件-表格子元素内的模块' }, propType: 'func', supportVariable: false, setter: { componentName: 'SlotSetter', title: '表格内容插槽', hideParams: true, initialValue: { type: 'JSSlot', params: ['text', 'record', 'index', 'tableRef'], value: [] } }, condition: { type: 'JSFunction', value: 'target => !target.parent.parent.getProps().getPropValue(`columns.${target.parent.name}.component`)' } }, { display: 'block', name: 'fixed', supportVariable: false, title: { label: '列是否固定', tip: 'fixed | 列是否固定' }, description: '(IE 下无效)列是否固定,可选 true (等效于 left) left right', defaultValue: '', propType: { type: 'oneOf', value: ['', 'left', 'right'] }, setter: { componentName: 'RadioGroupSetter', props: { options: [{ title: '不固定', value: '' }, { title: '固定在左侧', value: 'left' }, { title: '固定在右侧', value: 'right' }] } } }] } }, initialValue: { title: '表头名称', dataIndex: (0, _utils.uuid)(), component: 'EmptyCol' } // component改为IndexCol,解决初始化切换数据字段setter时找不到dataIndex和key的报错 } } } }, { name: 'tableDataSource', title: '数据源', type: 'group', display: 'entry', items: [{ display: 'block', name: 'rowKey', supportVariable: false, title: { label: '主键', tip: 'rowKey | 数据唯一标识' }, setter: { componentName: 'StringSetter', props: { placeholder: '请输入' }, isRequired: true, initialValue: 'id' } }, { display: 'block', name: 'getTableData', title: '数据请求', supportVariable: false, setter: { componentName: 'SchemaFunctionSetter', props: { title: 'getTableData', async: true, properties: { input: { type: 'object', properties: { values: { type: 'object' } }, required: ['values'] }, body: { type: 'array', items: [{ type: 'Function', properties: { template: 'RequestFunction', variable: 'result', extraProps: { // apiId: 'API_344_77522_323217f643c3e3f1fe7532e72ac01bb0748c97be', params: '{{values}}', apiType: 5 } } }] }, output: 'result' }, required: ['input', 'body', 'output'] } } }, { display: 'block', name: 'dataSource', title: { label: '静态数据源', tip: 'dataSource | 静态数据源' }, setter: { componentName: 'MixedSetter', props: { setters: ['VariableSetter'] } } }, { display: 'block', name: 'filterProps', title: '查询参数', setter: { componentName: 'MixedSetter', props: { setters: ['VariableSetter'] } }, defaultValue: { type: 'JSExpression', value: 'this.state.filterProps' } }] }, tableButtonsProps, { name: 'rowSelectConfig', title: '行选择器配置', display: 'entry', type: 'group', items: [{ display: 'block', name: 'rowSelection', title: { label: '行选择', tip: 'rowSelection | 行选择' }, setter: 'BoolSetter', defaultValue: false, extraProps: { setValue: function setValue(target, value) { if (value) { target.parent.setPropValue('rowSelection', { type: 'checkbox' }); } } } }, { display: 'block', name: 'rowSelection.type', title: { label: '行选择类型', tip: 'rowSelection.type | 多选/单选' }, propType: { type: 'oneOf', value: ['checkbox', 'radio'] }, supportVariable: false, setter: { componentName: 'RadioGroupSetter', props: { options: [{ title: '多选', value: 'checkbox' }, { title: '单选', value: 'radio' }] }, initialValue: 'checkbox' }, condition: { type: 'JSFunction', value: 'target => !!target.getProps().getPropValue("rowSelection")' } }, { display: 'block', name: 'rowSelection.getCheckboxProps', title: { label: '其他属性配置', tip: 'rowSelection.getCheckboxProps | 选择框的其他属性配置' }, propType: 'func', setter: [{ componentName: 'FunctionSetter', props: { template: 'getCheckboxProps(record,${extParams}){\n// 选择框的默认属性配置\nreturn { disabled: false };\n}' } } // 'VariableSetter', ], condition: { type: 'JSFunction', value: 'target => !!target.getProps().getPropValue("rowSelection")' } }, { display: 'block', title: { label: '隐藏所选总数', tip: 'rowSelection.hideSelectTotal | 隐藏所选总数' }, name: 'rowSelection.hideSelectTotal', setter: { componentName: 'BoolSetter' }, supportVariable: false, condition: { type: 'JSFunction', value: 'target => !!target.getProps().getPropValue("rowSelection")' } }] }, { name: 'scroll', title: '滚动条', display: 'entry', type: 'group', items: [{ name: 'scroll.x', display: 'block', title: { label: '横向滚动', tip: 'scroll.x | 一般为1500 ~ 2000,开启后建议固定头尾列' }, supportVariable: false, setter: { componentName: 'NumberSetter', props: { placeholder: '横向滚动距离,单位px' } }, extraProps: { setValue: function setValue(target, value) { target.parent.setPropValue('sticky', !!value); } } }, { name: 'scroll.y', display: 'block', title: { label: '纵向滚动', tip: 'scroll.y | 一般不建议开启' }, supportVariable: false, setter: { componentName: 'NumberSetter', props: { placeholder: '纵向滚动距离,单位px' } } }] }, { name: 'otherConfig', title: '其它属性', display: 'entry', type: 'group', items: [ // { // display: 'block', // name: 'ref', // title: { // label: '组件标识', // tip: "ref | 通过 this.$('xxx') 获取到组件实例", // }, // setter: { // initialValue: `table_${uuid()}`, // componentName: 'StringSetter', // props: { // placeholder: '请输入', // }, // }, // supportVariable: false, // extraProps: { // setValue: (target, value) => { // registerActions(target, [ // { // path: value, // type: 'reload', // }, // ]); // }, // }, // }, { display: 'block', title: { label: '总条数', tip: 'showTotal | 是否显示总条数' }, supportVariable: false, setter: { componentName: 'BoolSetter', initialValue: true } }, { display: 'block', title: { label: '行对齐', tip: 'rowAlign | 行对齐方式' }, supportVariable: false, name: 'rowAlign', setter: { componentName: 'RadioGroupSetter', props: { options: [{ label: '顶部对齐', value: 'top' }, { label: '居中对齐', value: 'middle' }] }, initialValue: 'top' } }, { display: 'block', title: { label: '表格类型', tip: 'rowSelection.tableType | 表格类型' }, supportVariable: false, name: 'tableType', description: '类型', setter: { componentName: 'RadioGroupSetter', props: { options: [{ label: '默认表格', value: 'default' }, { label: '分组表格', value: 'group' }] }, initialValue: 'default' } }, { display: 'block', title: { label: '虚拟列表', tip: 'useVirtual | 是否开启虚拟列表' }, name: 'useVirtual', description: '开启虚拟列表', supportVariable: false, setter: { componentName: 'BoolSetter', isRequired: false, initialValue: false } }, { display: 'block', title: { label: '分页器', tip: '是否展示分页器' }, name: 'pagination', description: '是否展示分页器', supportVariable: false, setter: { componentName: 'MixedSetter', props: { setters: [{ componentName: 'ObjectSetter', props: { config: { items: [{ name: 'pageSize', title: { label: '每页条数', tip: 'pageSize | 每页条数' }, setter: 'NumberSetter', supportVariable: false }, { name: 'showQuickJumper', title: { label: '是否可以快速跳转至某页', tip: 'showQuickJumper | 是否可以快速跳转至某页' }, setter: 'BoolSetter', supportVariable: false }] } } }, { componentName: 'BoolSetter', initialValue: true }] }, isRequired: false, initialValue: false } }, { display: 'block', title: { label: '表格合计', tip: 'summary | 表格合计' }, name: 'summary', description: '表格合计', supportVariable: false, setter: { componentName: 'SlotSetter', title: '表格合计', initialValue: { type: 'JSSlot', params: ['pageData'], value: [] } } }] }]; var _default = exports["default"] = TableBaseProps;