import React from 'react'; import { condition, getBizComponent, getBizComponentNameList, getRunTimeBizComponent, } from '../util/util'; import { getJSExpressionPrototype } from '@/common/manager/common-style'; import isPlainObject from 'lodash/isPlainObject'; import './cell.scss'; import uniq from 'lodash/uniq'; import { __dataSource__, getCommonBoolDataSource, } from '@/common/util/expr-const'; import { DisplayPosition } from '@/type/display-position'; const { CnTooltip } = window.CNUI || {}; function renderEnumOne(enumMap, value) { if (value !== undefined) { const label = enumMap[value]; if (label !== undefined) { return label; } } else { return ''; } return value; } function renderUserOne(value) { if (isPlainObject(value)) { let nameDom; let nickNameDom; let workNoDom; const { name, nickName, workNo } = value; if (name) { nameDom = name; } if (nickName) { nickNameDom = `(${nickName})`; } if (workNo) { workNoDom = workNo; } const dom = (
{nameDom} {nickNameDom}
); if (workNoDom) { return ( {workNoDom} ); } else { return dom; } } } const tag = { title: '标签', position: DisplayPosition.tableCell, componentName: 'tag', // component: (props) => { // const { cellConfig, value, record, index } = props; // let temp = value; // function renderOne(item) { // const itemProps = { // type: 'normal', // color: 'blue', // }; // let children = item; // if (is.object(item)) { // const { text, type } = item; // itemProps.color = presetTagMap[type] || 'blue'; // children = text; // } // return {children}; // } // if (!is.array(temp)) { // temp = [value]; // } // return temp.map((item) => { // return renderOne(item); // }); // }, }; const enumeration = { componentName: 'enumeration', title: '枚举', position: DisplayPosition.tableCell, component: (props) => { let result; const { value, enumMap = {} } = props; if (Array.isArray(value)) { result = value .map((item) => renderEnumOne(enumMap, item)) .filter((item) => item !== undefined && item !== '') .join(', '); } else { result = renderEnumOne(enumMap, value); } return
{result}
; }, getDefaultProps: () => { return { enumDataOrigin: 'request', }; }, getPrototypeList: () => { return [ { name: 'enumDataOrigin', title: '数据来源', display: 'inline', setter: { componentName: 'RadioGroupSetter', props: { options: [ { title: '远程请求', value: 'request' }, { title: '静态数据', value: 'static' }, ], }, }, }, { name: 'enumRequestConfig', title: '查询服务', display: 'inline', setter: { componentName: 'ServiceChoiceSetter', props: { mockDataTemplate: { success: true, data: [ { label: '选项一', value: 'first', }, { label: '选项二', value: 'second', }, ], }, paramTitleDom:
请求参数配置:
, buttonText: '选择请求API', params: { env: 'pre', pageSize: 999, // serviceType: 'HSF', }, paramSetter: { componentName: 'MixedSetter', props: { setters: [ { componentName: 'ParamSelectSetter', props: { dataKey: 'aa', labelKey: 'aa', valueKey: 'aa', groupName: 'aa', }, title: '选择参数', }, { componentName: 'StringSetter', title: '字符串', }, getJSExpressionPrototype({ type: 'formRequest' }), ], }, }, resultProcessFuncTemplate: `function(res) { // 需要返回的如下的数据结构 // return { // success: true, // data: [ // { // label:"xx", // value:"xx", // } // ] // } return res; }`, }, }, condition(prop) { return ( condition(prop, 'enumeration', 'format') && prop?.parent?.getPropValue?.('enumDataOrigin') === 'request' ); }, }, { name: 'enumDataSource', title: '编辑静态数据', display: 'plain', tip: '编辑静态展示数据', // initialValue: [], setter: { 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: 'CnSelectSetter', props: { options: getCommonBoolDataSource(), selectProps: { hasClear: true, }, }, title: '布尔(true/false)', }, ], }, }, }, ], }, }, }, }, }, { componentName: 'ParamSelectSetter', props: { configList: [ { groupName: '其他数据', groupExprName: __dataSource__, needSecondParam: true, }, ], }, title: '从数据源选择', }, getJSExpressionPrototype({ type: 'select' }), ], }, }, condition(prop) { return ( condition(prop, 'enumeration', 'format') && prop?.parent?.getPropValue?.('enumDataOrigin') === 'static' ); }, }, ]; }, }; const user = { componentName: 'user', title: '人员', position: DisplayPosition.tableCell, component: (props) => { const { value } = props; let result = value; if (Array.isArray(value)) { result = value.map((item) => { return renderUserOne(item); }); } else if (isPlainObject(value)) { result = renderUserOne(value); } return
{result}
; }, }; export const allCellMap = { text: { componentName: 'text', title: '文本', position: DisplayPosition.tableCell, }, ellipsis: { componentName: 'ellipsis', title: '文本-溢出省略', position: DisplayPosition.tableCell, }, number: { componentName: 'number', title: '数字', position: DisplayPosition.tableCell, }, currency: { componentName: 'currency', title: '金额展示', position: DisplayPosition.tableCell, }, 'currency-with-unit': { componentName: 'currency-with-unit', title: '金额展示(带币种)', position: DisplayPosition.tableCell, }, percent: { componentName: 'percent', title: '百分比', position: DisplayPosition.tableCell, }, bank: { componentName: 'bank', title: '银行卡号', position: DisplayPosition.tableCell, }, date: { componentName: 'date', title: '日期', position: DisplayPosition.tableCell, }, 'date-time': { componentName: 'date-time', title: '时间', position: DisplayPosition.tableCell, }, tag, progress: { componentName: 'progress', title: '进度条', position: DisplayPosition.tableCell, }, enumeration, user, 'multiple-text': { componentName: 'multiple-text', title: '多行文本', position: DisplayPosition.tableCell, }, 'image-text': { componentName: 'image-text', title: '图文', position: DisplayPosition.tableCell, }, }; // 获取cell列表 export function getCellList() { const defaultCellList = Object.keys(allCellMap); const bizComponentNameList = getBizComponentNameList(); const allCellList = uniq([...defaultCellList, ...bizComponentNameList]); const result = []; allCellList.forEach((name) => { const component = getCell(name); if (component) { const { bizInfo = [] } = component; if (bizInfo.length > 0) { bizInfo.forEach((item) => { const { label, value } = item; const existGroup = result.find((item2) => item2.value === value); if (existGroup) { existGroup?.children.push(component); } else { result.push({ title: label, value, children: [component], }); } }); return; } result.push(component); } }); return result; } export function getCell(format, propKey) { let result; if (format) { let item = allCellMap[format]; if (!item) { item = getBizComponent(format, DisplayPosition.tableCell); } if (item) { if (!item.label) { item.label = item.title; } if (!item.value) { item.value = item.componentName; } if (propKey) { result = item[propKey]; } else { result = item; } } } return result; } // 获取button的node export function getRunTimeCell(format) { let result; if (format) { result = allCellMap[format]; if (!result) { result = getRunTimeBizComponent(format); } } return result; }