feat:Add model management mock (#1795)

This commit is contained in:
lichunn 2026-03-31 19:04:09 +08:00 committed by GitHub
parent ab2f9baac2
commit 06b9cd8bfe
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 211 additions and 54 deletions

View File

@ -0,0 +1,2 @@
{"_id":1,"id":5,"createdBy":"1","lastUpdatedBy":"1","tenantId":null,"renterId":null,"siteId":null,"appId":null,"platformId":1,"nameCn":"员工","nameEn":"staff","version":"1.0.0","modelUrl":"https://agent-alpha.opentiny.design/platform-center/api/model-data","parameters":[{"prop":"id","isModel":false,"type":"Number","required":true,"description":"主键","_RID":"row_1"},{"prop":"name","isModel":false,"type":"String","required":true,"description":"姓名","_RID":"row_2"},{"prop":"status","isModel":false,"type":"Enum","options":"[{\"value\":\"1\",\"label\":\"已转正\"},{\"value\":\"0\",\"label\":\"未转正\"}]","required":true,"description":"状态","_RID":"row_3"},{"prop":"test","type":"String","required":false,"description":"","isModel":false,"_RID":"row_4"}],"method":[{"name":"新增方法","nameEn":"insertApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"params","type":"Object","children":[{"prop":"id","isModel":false,"type":"Number","required":true,"description":"主键"},{"prop":"name","isModel":false,"type":"String","required":true,"description":"姓名"},{"prop":"status","isModel":false,"type":"Enum","options":"[{\"value\":\"1\",\"label\":\"已转正\"},{\"value\":\"0\",\"label\":\"未转正\"}]","required":true,"description":"状态"},{"prop":"test","type":"String","required":false,"description":""}]}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"修改方法","nameEn":"updateApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"data","type":"Object","children":[{"prop":"id","isModel":false,"type":"Number","required":true,"description":"主键"},{"prop":"name","isModel":false,"type":"String","required":true,"description":"姓名"},{"prop":"status","isModel":false,"type":"Enum","options":"[{\"value\":\"1\",\"label\":\"已转正\"},{\"value\":\"0\",\"label\":\"未转正\"}]","required":true,"description":"状态"},{"prop":"test","type":"String","required":false,"description":""}]},{"prop":"params","type":"Object","children":[{"prop":"id","isModel":false,"type":"Number","required":true,"description":"主键"},{"prop":"name","isModel":false,"type":"String","required":true,"description":"姓名"},{"prop":"status","isModel":false,"type":"Enum","options":"[{\"value\":\"1\",\"label\":\"已转正\"},{\"value\":\"0\",\"label\":\"未转正\"}]","required":true,"description":"状态"},{"prop":"test","type":"String","required":false,"description":""}]}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"查询方法","nameEn":"queryApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"currentPage","type":"Number"},{"prop":"pageSize","type":"Number"},{"prop":"nameCn","type":"String"},{"prop":"params","type":"Object","children":[{"prop":"id","isModel":false,"type":"Number","required":true,"description":"主键"},{"prop":"name","isModel":false,"type":"String","required":true,"description":"姓名"},{"prop":"status","isModel":false,"type":"Enum","options":"[{\"value\":\"1\",\"label\":\"已转正\"},{\"value\":\"0\",\"label\":\"未转正\"}]","required":true,"description":"状态"},{"prop":"test","type":"String","required":false,"description":""}]}],"responseParameters":[{"prop":"total","type":"Number"},{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"删除方法","nameEn":"deleteApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"id","type":"Number"}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]}],"description":"1112","created_at":"2026-01-27 10:41:10","updated_at":"2026-01-27 10:41:10"}
{"_id":2,"id":6,"createdBy":"11","lastUpdatedBy":"11","tenantId":null,"renterId":null,"siteId":null,"appId":null,"platformId":1,"nameCn":"用户","nameEn":"user","version":"1.0.0","modelUrl":"https://agent-alpha.opentiny.design/platform-center/api","parameters":[{"prop":"name","type":"String","required":false,"description":""},{"prop":"age","type":"Number","required":false,"description":""}],"method":[{"name":"新增方法","nameEn":"insertApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"params","type":"Object","children":[{"prop":"name","type":"String","required":false,"description":""},{"prop":"age","type":"Number","required":false,"description":""}]}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"修改方法","nameEn":"updateApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"data","type":"Object","children":[{"prop":"name","type":"String","required":false,"description":""},{"prop":"age","type":"Number","required":false,"description":""}]},{"prop":"params","type":"Object","children":[{"prop":"name","type":"String","required":false,"description":""},{"prop":"age","type":"Number","required":false,"description":""}]}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"查询方法","nameEn":"queryApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"currentPage","type":"Number"},{"prop":"pageSize","type":"Number"},{"prop":"nameCn","type":"String"},{"prop":"params","type":"Object","children":[{"prop":"name","type":"String","required":false,"description":""},{"prop":"age","type":"Number","required":false,"description":""}]}],"responseParameters":[{"prop":"total","type":"Number"},{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]},{"name":"删除方法","nameEn":"deleteApi","requestParameters":[{"prop":"nameEn","type":"String"},{"prop":"id","type":"Number"}],"responseParameters":[{"prop":"code","type":"Number"},{"prop":"message","type":"String"},{"prop":"data","type":"Enum"}]}],"description":"","created_at":"2026-01-29 03:00:21","updated_at":"2026-01-29 03:00:21"}

View File

@ -10,22 +10,51 @@
* *
*/ */
import { getResponseData } from '../tool/Common' import DateStore from '@seald-io/nedb'
import modelList from '../assets/json/model.json' import { getDatabasePath, getResponseData } from '../tool/Common'
const defaultModel = { const defaultModel = {
createdBy: '86', createdBy: '1',
lastUpdatedBy: '86', lastUpdatedBy: '1',
tenantId: null, tenantId: null,
renterId: null, renterId: null,
siteId: null, siteId: null,
appId: null, appId: null,
platformId: 1, platformId: 1,
nameCn: 'test', nameCn: '',
nameEn: 'test', nameEn: '',
version: '1.0.0', version: '1.0.0',
modelUrl: '1', modelUrl: 'https://agent-alpha.opentiny.design/platform-center/api/model-data',
parameters: [], parameters: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
],
method: [ method: [
{ {
name: '新增方法', name: '新增方法',
@ -33,13 +62,41 @@ const defaultModel = {
requestParameters: [ requestParameters: [
{ {
prop: 'nameEn', prop: 'nameEn',
type: 'String', type: 'String'
children: null
}, },
{ {
prop: 'params', prop: 'params',
type: 'Object', type: 'Object',
children: [] children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
} }
], ],
responseParameters: [ responseParameters: [
@ -63,18 +120,75 @@ const defaultModel = {
requestParameters: [ requestParameters: [
{ {
prop: 'nameEn', prop: 'nameEn',
type: 'String', type: 'String'
children: null
}, },
{ {
prop: 'data', prop: 'data',
type: 'Object', type: 'Object',
children: [] children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
}, },
{ {
prop: 'params', prop: 'params',
type: 'Object', type: 'Object',
children: [] children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
} }
], ],
responseParameters: [ responseParameters: [
@ -98,28 +212,53 @@ const defaultModel = {
requestParameters: [ requestParameters: [
{ {
prop: 'nameEn', prop: 'nameEn',
type: 'String', type: 'String'
children: null
}, },
{ {
prop: 'currentPage', prop: 'currentPage',
type: 'Number', type: 'Number'
children: null
}, },
{ {
prop: 'pageSize', prop: 'pageSize',
type: 'Number', type: 'Number'
children: null
}, },
{ {
prop: 'nameCn', prop: 'nameCn',
type: 'String', type: 'String'
children: null
}, },
{ {
prop: 'params', prop: 'params',
type: 'Object', type: 'Object',
children: [] children: [
{
prop: 'id',
isModel: false,
type: 'Number',
required: true,
description: '主键'
},
{
prop: 'name',
isModel: false,
type: 'String',
required: true,
description: '姓名'
},
{
prop: 'status',
isModel: false,
type: 'Enum',
options: '[{"value":"1","label":"已转正"},{"value":"0","label":"未转正"}]',
required: true,
description: '状态'
},
{
prop: 'test',
type: 'String',
required: false,
description: ''
}
]
} }
], ],
responseParameters: [ responseParameters: [
@ -147,13 +286,11 @@ const defaultModel = {
requestParameters: [ requestParameters: [
{ {
prop: 'nameEn', prop: 'nameEn',
type: 'String', type: 'String'
children: null
}, },
{ {
prop: 'id', prop: 'id',
type: 'Number', type: 'Number'
children: null
} }
], ],
responseParameters: [ responseParameters: [
@ -172,49 +309,56 @@ const defaultModel = {
] ]
} }
], ],
description: '', description: ''
created_at: '2026-01-30 04:34:25',
updated_at: '2026-01-30 04:34:25'
} }
export default class AppsService { export default class ModelService {
constructor() { constructor() {
this.modelList = modelList this.db = new DateStore({
filename: getDatabasePath('model.db'),
autoload: true
})
this.db.ensureIndex({
fieldName: '_id',
unique: true
})
this.modelList = []
} }
async create(params) { async create(params) {
let mockId = let mockId = this.modelList.length > 0 ? Math.max(...this.modelList.map((item) => item.id)) + 1 : 3
this.modelList.data.records.length > 0 ? Math.max(...this.modelList.data.records.map((item) => item.id)) + 1 : 3
const newModel = { const newModel = {
...defaultModel, ...defaultModel,
id: mockId++, id: mockId++,
created_at: new Date().toISOString(),
updated_at: new Date().toISOString(),
...params ...params
} }
this.modelList.data.records.push(newModel)
return getResponseData(newModel) this.db.insert(newModel)
this.modelList.push(newModel)
return getResponseData({ records: this.modelList })
} }
async delete(id) { async delete(id) {
this.modelList.data.records = this.modelList.data.records.filter((item) => Number(item.id) !== Number(id)) const result = await this.db.findOneAsync({ id: Number(id) })
await this.db.removeAsync({ id: Number(id) })
return getResponseData(this.modelList.data) return getResponseData(result)
} }
async list() { async list() {
return getResponseData(this.modelList.data) this.modelList = await this.db.findAsync()
return getResponseData({ records: this.modelList })
} }
async update(id, params) { async update(id, params) {
const index = this.modelList.data.records.findIndex((item) => Number(item.id) === Number(id)) await this.db.updateAsync({ id: Number(id) }, { $set: params })
if (index === -1) { const result = await this.db.findOneAsync({ id: Number(id) })
return getResponseData({ success: false, message: '未找到应用' })
}
this.modelList.data.records[index] = { return getResponseData(result)
...this.modelList.data.records[index],
...params
}
return getResponseData(this.modelList.data.records[index])
} }
} }

View File

@ -277,7 +277,7 @@ export default {
.life-cycle-tips { .life-cycle-tips {
color: var(--te-component-common-text-color-weaken); color: var(--te-component-common-text-color-weaken);
margin: 4px 0 0; margin: 4px 0 0;
height: 16px; height: 30px;
line-height: 16px; line-height: 16px;
} }
.life-cycle-content-list { .life-cycle-content-list {

View File

@ -61,8 +61,8 @@
</block-event> </block-event>
</div> </div>
</tiny-collapse-item> </tiny-collapse-item>
<tiny-collapse-item title="生命周期设置" name="lifeCycle"> <tiny-collapse-item class="life-cycles-container" title="生命周期设置" name="lifeCycle">
<div class="life-cycles-container"> <div>
<life-cycles :isPage="false" :bindLifeCycles="state.bindLifeCycles" @bind="bindLifeCycles"></life-cycles> <life-cycles :isPage="false" :bindLifeCycles="state.bindLifeCycles" @bind="bindLifeCycles"></life-cycles>
</div> </div>
</tiny-collapse-item> </tiny-collapse-item>
@ -380,4 +380,9 @@ export default {
padding: 0 12px 12px; padding: 0 12px 12px;
} }
} }
.life-cycles-container {
:deep(.tiny-collapse-item__content) {
margin-bottom: 4px;
}
}
</style> </style>

View File

@ -498,4 +498,10 @@ export default {
padding: 0 12px 12px; padding: 0 12px 12px;
} }
} }
.input-output {
:deep(.tiny-collapse-item__content) {
margin-bottom: 4px;
}
}
</style> </style>