diff --git a/packages/app/src/components/views/Field/index.tsx b/packages/app/src/components/views/Field/index.tsx index 96b719a695..97a7809ede 100644 --- a/packages/app/src/components/views/Field/index.tsx +++ b/packages/app/src/components/views/Field/index.tsx @@ -115,13 +115,16 @@ export function DataSourceField(props: any) { export function RealtionField(props: any) { const { schema: { labelField }, value } = props; if (!value) { - return; + return null; } - console.log(labelField, value); const items = Array.isArray(value) ? value : [value]; - return items.map(item => ( - {get(item, labelField)} - )); + return ( + <> + {items.map(item => ( + {get(item, labelField)} + ))} + + ); } registerFieldComponents({ diff --git a/packages/plugin-collections/src/collections/fields.ts b/packages/plugin-collections/src/collections/fields.ts index 5cac327937..4766879ec9 100644 --- a/packages/plugin-collections/src/collections/fields.ts +++ b/packages/plugin-collections/src/collections/fields.ts @@ -15,7 +15,6 @@ export default { name: 'sort', scope: ['collection'], title: '排序', - defaultValue: 1, component: { type: 'sort', className: 'drag-visible', @@ -57,6 +56,7 @@ export default { type: 'string', name: 'interface', title: '字段类型', + required: true, dataSource: options, createOnly: true, component: { @@ -90,6 +90,16 @@ export default { "target": "timeFormat", "condition": "{{ ['time'].indexOf($self.value) !== -1 }}" }, + { + "type": "value:visible", + "target": "component.showInForm", + "condition": "{{ ['createdAt', 'updatedAt', 'createdBy', 'updatedBy'].indexOf($self.value) === -1 }}" + }, + { + "type": "value:visible", + "target": "required", + "condition": "{{ ['createdAt', 'updatedAt', 'createdBy', 'updatedBy'].indexOf($self.value) === -1 }}" + }, ], }, }, diff --git a/packages/plugin-collections/src/interfaces/index.ts b/packages/plugin-collections/src/interfaces/index.ts index 63361dfcb4..27d886bacb 100644 --- a/packages/plugin-collections/src/interfaces/index.ts +++ b/packages/plugin-collections/src/interfaces/index.ts @@ -6,6 +6,7 @@ export * as types from './types'; export const options = [ { + key: 'basic', title: '基本类型', children: [ types.string, @@ -17,6 +18,7 @@ export const options = [ ], }, { + key: 'media', title: '多媒体类型', children: [ types.wysiwyg, @@ -24,6 +26,7 @@ export const options = [ ], }, { + key: 'choices', title: '选择类型', children: [ types.boolean, @@ -34,6 +37,7 @@ export const options = [ ], }, { + key: 'datetime', title: '日期和时间', children: [ types.datetime, @@ -41,6 +45,7 @@ export const options = [ ], }, { + key: 'relation', title: '关系类型', children: [ types.subTable, @@ -48,15 +53,17 @@ export const options = [ ], }, { + key: 'systemInfo', title: '系统信息', children: [ types.createdAt, - types.createdBy, types.updatedAt, + types.createdBy, types.updatedBy, ], }, { + key: 'developerMode', title: '开发者模式', children: [ types.primaryKey, @@ -66,7 +73,8 @@ export const options = [ types.icon, ], } -].map(({title, children}: any) => ({ +].map(({key, title, children}: any) => ({ + key, label: title, children: children.map(child => ({ label: child.title, diff --git a/packages/plugin-collections/src/interfaces/types.ts b/packages/plugin-collections/src/interfaces/types.ts index e36141403f..3769584fcc 100644 --- a/packages/plugin-collections/src/interfaces/types.ts +++ b/packages/plugin-collections/src/interfaces/types.ts @@ -338,30 +338,13 @@ export const linkTo = { }, }; -export const createdBy = { - title: '创建者', - // disabled: true, - options: { - interface: 'createdBy', - type: 'createdBy', - name: 'createdBy', - filterable: true, - target: 'users', - labelField: 'nickname', - foreignKey: 'created_by_id', - appends: true, - component: { - type: 'drawerSelect', - }, - }, -}; - export const createdAt = { title: '创建时间', options: { interface: 'createdAt', type: 'date', - name: 'created_at', + // name: 'created_at', + field: 'created_at', showTime: true, dateFormat: 'YYYY/MM/DD', timeFormat: 'HH:mm:ss', @@ -374,12 +357,49 @@ export const createdAt = { }, }; +export const updatedAt = { + title: '修改时间', + options: { + interface: 'updatedAt', + type: 'date', + // name: 'updated_at', + field: 'updated_at', + showTime: true, + dateFormat: 'YYYY/MM/DD', + timeFormat: 'HH:mm:ss', + required: true, + filterable: true, + sortable: true, + component: { + type: 'date', + }, + }, +}; + +export const createdBy = { + title: '创建人', + // disabled: true, + options: { + interface: 'createdBy', + type: 'createdBy', + // name: 'createdBy', + filterable: true, + target: 'users', + labelField: 'nickname', + foreignKey: 'created_by_id', + appends: true, + component: { + type: 'drawerSelect', + }, + }, +}; + export const updatedBy = { - title: '更新人', + title: '修改人', // disabled: true, options: { interface: 'updatedBy', - name: 'updatedBy', + // name: 'updatedBy', type: 'updatedBy', filterable: true, target: 'users', @@ -392,24 +412,6 @@ export const updatedBy = { }, }; -export const updatedAt = { - title: '更新时间', - options: { - interface: 'updatedAt', - type: 'date', - name: 'updated_at', - showTime: true, - dateFormat: 'YYYY/MM/DD', - timeFormat: 'HH:mm:ss', - required: true, - filterable: true, - sortable: true, - component: { - type: 'date', - }, - }, -}; - /** * 字段分组(暂缓) * diff --git a/packages/plugin-pages/src/actions/getView.ts b/packages/plugin-pages/src/actions/getView.ts index 4a2541dac8..5088c5a262 100644 --- a/packages/plugin-pages/src/actions/getView.ts +++ b/packages/plugin-pages/src/actions/getView.ts @@ -32,6 +32,10 @@ const transforms = { title: field.title||field.name, ...(field.component||{}), } + if (field.get('name') === 'interface' && ctx.state.developerMode === false) { + const dataSource = field.get('dataSource').filter(item => item.key !== 'developerMode'); + field.set('dataSource', dataSource); + } if (field.get('name') === 'filter' && field.get('collection_name') === 'views') { const { values } = ctx.action.params; const all = await Field.findAll({ @@ -76,7 +80,7 @@ const transforms = { set(prop, 'x-component-props.mode', 'multiple'); } if (['radio', 'select', 'multipleSelect', 'checkboxes'].includes(interfaceType)) { - prop.enum = get(field.options, 'dataSource', []); + prop.enum = field.get('dataSource'); } schema[field.name] = { ...prop,