diff --git a/packages/plugin-collections/src/__tests__/models/collection.test.ts b/packages/plugin-collections/src/__tests__/models/collection.test.ts index 598e23c72..1887e4196 100644 --- a/packages/plugin-collections/src/__tests__/models/collection.test.ts +++ b/packages/plugin-collections/src/__tests__/models/collection.test.ts @@ -13,7 +13,7 @@ describe('models.collection', () => { afterEach(() => app.database.close()); - it.only('import', async () => { + it('import', async () => { await app.database.getModel('collections').import({ title: '示例', name: 'examples', diff --git a/packages/plugin-collections/src/__tests__/models/field.test.ts b/packages/plugin-collections/src/__tests__/models/field.test.ts new file mode 100644 index 000000000..395f7858f --- /dev/null +++ b/packages/plugin-collections/src/__tests__/models/field.test.ts @@ -0,0 +1,23 @@ +import { Agent, getAgent, getApp } from '../'; +import { Application } from '@nocobase/server'; +import * as types from '../../interfaces/types'; +jest.setTimeout(30000); +import { FieldModel } from '../../models'; +describe('models.field', () => { + let app: Application; + let agent: Agent; + + beforeEach(async () => { + app = await getApp(); + agent = getAgent(app); + }); + + afterEach(() => app.database.close()); + + it('updatedAt', async () => { + const Field = app.database.getModel('fields'); + const field = new Field(); + field.setInterface('updatedAt'); + expect(field.get()).toMatchObject(types.updatedAt.options) + }); +}); diff --git a/packages/plugin-collections/src/collections/fields.ts b/packages/plugin-collections/src/collections/fields.ts index 133e0d796..c326a12c5 100644 --- a/packages/plugin-collections/src/collections/fields.ts +++ b/packages/plugin-collections/src/collections/fields.ts @@ -209,6 +209,17 @@ export default { type: 'drawerSelect', }, }, + { + interface: 'boolean', + type: 'virtual', + name: 'showTime', + title: '显示时间', + defaultValue: false, + component: { + type: 'boolean', + showInForm: true, + }, + }, { interface: 'boolean', type: 'boolean', diff --git a/packages/plugin-collections/src/hooks/fields-before-validate.ts b/packages/plugin-collections/src/hooks/fields-before-validate.ts index 2235abec9..46f4a3a98 100644 --- a/packages/plugin-collections/src/hooks/fields-before-validate.ts +++ b/packages/plugin-collections/src/hooks/fields-before-validate.ts @@ -3,8 +3,9 @@ import * as types from '../interfaces/types'; import _ from 'lodash'; export default async function (model: FieldModel) { - model.generateNameIfNull(); if (model.get('interface')) { model.setInterface(model.get('interface')); } + // 生成随机 name 要放最后 + model.generateNameIfNull(); } diff --git a/packages/plugin-collections/src/interfaces/types.ts b/packages/plugin-collections/src/interfaces/types.ts index 7e5f17faf..4217f5296 100644 --- a/packages/plugin-collections/src/interfaces/types.ts +++ b/packages/plugin-collections/src/interfaces/types.ts @@ -85,7 +85,7 @@ export const percent = { sortable: true, precision: 0, component: { - type: 'number', + type: 'percent', suffix: '%', }, }, @@ -205,7 +205,7 @@ export const datetime = { options: { interface: 'datetime', type: 'date', - dateonly: false, // dateonly + showTime: false, filterable: true, sortable: true, format: 'YYYY-MM-DD HH:mm:ss', @@ -349,6 +349,8 @@ export const createdAt = { options: { interface: 'createdAt', type: 'date', + name: 'created_at', + showTime: true, required: true, filterable: true, sortable: true, @@ -375,6 +377,8 @@ export const updatedAt = { options: { interface: 'updatedAt', type: 'date', + name: 'updated_at', + showTime: true, required: true, filterable: true, sortable: true, diff --git a/packages/plugin-collections/src/models/field.ts b/packages/plugin-collections/src/models/field.ts index b86f213e0..600feb1d9 100644 --- a/packages/plugin-collections/src/models/field.ts +++ b/packages/plugin-collections/src/models/field.ts @@ -22,8 +22,16 @@ export class FieldModel extends BaseModel { setInterface(value) { const { options } = types[value]; + let args = []; + // 如果是新数据或 interface 不相等,interface options 放后 + if (this.isNewRecord || this.get('interface') !== value) { + args = [this.get(), options]; + } else { + // 已存在的数据更新,不相等,interface options 放前面 + args = [options, this.get()]; + } // @ts-ignore - const values = Utils.merge(options, this.get()); + const values = Utils.merge(...args); this.set(values); }