百度amis框架经验分享

365bet怎么注册 📅 2025-11-01 23:10:11 ✍️ admin 👁️ 2813 ❤️ 547
百度amis框架经验分享

百度amis框架经验分享

官方文档

amis - 低代码前端框架

这篇文章讲了amis的设计

为什么说百度AMIS框架是一个优秀的设计_百度前端框架-CSDN博客

学习方法:

最好的学习方法就是GPT+官方文档

不要去很大力气通读官方文档,大概浏览一遍就行, 以你自己的任务为导向, 不懂的先让GPT帮你生成配置文件,然后看不懂的对照官方文档去理解。

有几个坑要注意:

0) VUE框架里面不要通过npm install来使用amis,那样会把当前项目的环境搞乱。因为amis依赖很多包。 最好的方式是通过sdk的方式来使用。 本文档最后会给一个最佳实践,将sdk包放入到前端项目/public目录下就可以。

https://github.com/baidu/amis/releases/download/6.8.0/jssdk.tar.gz

1) 控制 AMIS 组件的显示状态

visible: 静态布尔值控制显隐。

visibleOn: 基于表达式动态控制显示。

hiddenOn: 基于表达式动态控制隐藏。

如果在表格中使用visibleOn,要确保字段在界面上有展示(隐藏也算)

"api": `delete:${prefix2}/sz/info/`+"${id}",

如果要对表的字段做引用就用${xx},把这个当一个字符串对待,如果要引用外部变量,那就要放在``表达式里面。

2)批量删除按钮,记得在

"headerToolbar": [

{

"type": "bulkActions"

}

]里面加上,

还有

"bulkActions": [

{

"label": "批量删除",

"visible": true,

"actionType": "ajax",

"api": `delete:${prefix2}/sz/info/`,

"confirmText": "确定要批量删除选中的记录吗?"

}

],

3) 如果是父子表,注意看业务情况是否要关闭 "canAccessSuperData": false

4) 修改表单的时候,需要2个URL,分别是api和initapi , api参数还可以拆分,

"type": "form",

"api": `put:${prefix2}/sz/info`,

"initApi": `get:${prefix2}/sz/info/`+"${id}",

"canAccessSuperData":false,

5) crud上方的检索条件,不要用定义在外面的表单来实现,要不检索的时候,会重新刷页面。

crud上方的检索条件,用自带的filter就可以实现。

6) crud 默认是跟地址栏联动,如果要做请关闭同步地址栏 syncLocation: false

7) 配置一下下拉列表

{

"label": "选项",

"type": "select",

"name": "select",

"source": "/amis/api/mock2/form/getOptions?waitSeconds=1"

}

8) 有父子关系的表格,在返回的列表数据json串里面加上children,就可以形成父子关系,就可以做成树形表。

9) 表格展示的时候,如果某个值需要翻译怎么处理?

{

"name": "isShow",

"label": "是否展示",

"type": "mapping",

"map": {

"1": "展示",

"2": "隐藏"

}

},

还可以远程拉取字典

{

"type": "mapping",

"name": "type",

"label": "映射",

"source": "/amis/api/mapping"

}

帮助文档里面专门将这个的,有很多例子: https://aisuda.bce.baidu.com/amis/zh-CN/components/mapping

10) 关于文件上传,有专门的图片上传type='input-image'

{'type': 'input-text','name': 'fileId' ,'visible':false},

{'type': 'input-image', 'name': 'files',"frameImage":'${fileId}', "fileField":"files",'initAutoFill':false, "accept": "image/*", "receiver": `${FILEBASEURL}/uploadOneFile` ,'label': '头像', "autoFill": {"fileId": "${url}"}},

name的默认值是file,但如果服务器是通过files字段来接收,那么就要加上 "fileField":"files"来指示。

frameImage属性代表修改的时候,底图会是上次上传的图片。

initAutoFill属性很有用,修改页面这个要设置为false,要不然修改的时候看不到图片,因为默认进来没有图片,autoFill填充会被冲掉。

官网文档有检索功能,不知道的功能可以通过检索查找。 不要小看数据映射。

数据映射支持用户通过${xxx}或$xxx获取当前数据链中某个变量的值,实现灵活的数据配置功能,主要用于模板字符串、 自定义 api 请求数据体格式等场景。

path: 指定筛选的模板,默认为&,即返回原数据

11 下拉列表的格式,在table里面的source也可以使用这个格式,字典将自动翻译。

/res/basic/getResList2返回值

{

"msg": "",

"data": [

{

"label": "花溪公园",

"value": "123"

}, ],

"status": 0

}

{"type": "mapping", 'label':'公园名称' ,'name':'resCode' , 'source': `${prefix2}/res/basic/getResList2`},

12) 如果是一个复杂的逻辑要处理,使用模板引擎来解析,不要使用render,render试了一下,还是不能达到效果。

{ 'type': 'tpl', 'name': 'fileIds', 'label': '培训计划附件' , "tpl": `

<%

console.log(data.fileIds);

if (data.fileIds) {

var urlArray = data.fileIds.split(',');

for (var i = 0; i < urlArray.length; i++) { %>

<%= urlArray[i].split('/').pop() %>

<% }

} %>

`},

13 如果select下拉有偏移,跑到其他地方了。 类似以下这种。

加上这个属性

"className": "isshow-dropdown",

"popOverContainerSelector": '.isshow-dropdown'

14 如果要修改请求前或者请求后的数据格式,那么请用requestAdaptor或者adaptor。 这个在和apijson框架对接比较有用

"requestAdaptor": function (data, ctx) {

console.log(data,ctx)

},

"adaptor": (payload: any) => {

console.log('-------222-----',payload);

return

}

以下一个最佳实践的例子

assessment-plan-crud.vue

assessment-plan-crud.ts

import getprefix2 from '@/views/manage/sz/util/common'

const prefix2 = getprefix2()

const crudjson ={

"type": "page",

"body": [

{

"type": "crud",

"id": "mytable",

"name": "mytable",

"syncLocation": false,

"filter": {

"title": "",

"type": "flex",

"justify": "start", // 控制对齐方式

"body": [

{

"type": "select",

"name": "resCode",

"label": "水库名称",

"placeholder": "请输入水库名称",

"clearable": true,

"source": `${prefix2}/res/basic/getResList2`,

},

{

"type": "input-text",

"name": "assessmentPlanName",

"label": "考核计划名称",

"placeholder": "请输入考核计划名称",

"clearable": true

},

{

"type": "input-text",

"name": "assessmentUnit",

"label": "考核单位",

"placeholder": "请输入考核单位",

"clearable": true

},

{

"type": "select",

"name": "isShow",

"label": "是否展示",

"options": [

{

"label": "展示",

"value": "1"

},

{

"label": "隐藏",

"value": "2"

}

],

"placeholder": "请选择展示隐藏",

"clearable": true

},

{

"type": "button",

"label": "查询",

"level": "primary",

"actionType": "submit",

"className": "ml-2"

},

{

"type": "button",

"label": "重置",

"actionType": "reset",

"className": "ml-2"

}

]

},

"bulkActions": [

{

"label": "批量删除",

"visible": true,

"actionType": "ajax",

"api": `delete:${prefix2}/sz/assessmentPlan/`+"${ids}",

"confirmText": "确定要批量删除选中的记录吗?"

}

],

"headerToolbar": [

{

"type": "button",

"label": "新增",

"level": "primary",

"actionType": "dialog",

"dialog": {

"title": "新增考核",

"body": {

"type": "form",

"api": `post:${prefix2}/sz/assessmentPlan`,

"controls": [

{

"type": "select",

"name": "resCode",

"label": "水库名称",

"clearable": true,

"source": `${prefix2}/res/basic/getResList2`,

},

{

"type": "text",

"name": "assessmentPlanName",

"label": "考核计划名称"

},

{

"type": "number",

"name": "assessmentPlanPassPerson",

"label": "考核通过人数"

},

{

"type": "number",

"name": "assessmentPlanFailedPerson",

"label": "考核未通过人数"

},

{

"type": "input-text",

"name": "assessmentUnit",

"label": "考核单位"

},

{

"type": "text",

"name": "id",

"visible": false,

"value": "${id}",

"label": "id"

}

]

}

}

},

"export-excel", "bulkActions", "pagination"

],

"api": {

"url": `${prefix2}/sz/assessmentPlan/list`,

"method": "get"

},

"columns": [

{

"name": "index",

"label": "序号",

"type": "tpl",

"tpl": "${index + 1}",

"fixed": "left",

"width": 50

},

{

"name": "assessmentPlanName",

"label": "考核计划名称",

"type": "text"

},

{

"name": "assessmentPlanPassPerson",

"label": "考核计划通过人数",

"type": "text"

},

{

"name": "assessmentPlanFailedPerson",

"label": "考核计划未通过人数",

"type": "text",

},

{

"name": "assessmentUnit",

"label": "考核单位",

"type": "text"

},

{

"type": "text",

"visible":false,

"name": "id",

"label": "id",

},

{

"type": "operation",

"label": "操作",

"buttons": [

{

"type": "button",

"label": "修改",

"actionType": "dialog",

"dialog": {

"title": "修改考核",

"body": {

"type": "form",

"api": `put:${prefix2}/sz/assessmentPlan`,

"initApi": `get:${prefix2}/sz/assessmentPlan/`+"${id}",

"canAccessSuperData":false,

"controls": [

{

"type": "select",

"name": "resCode",

"label": "水库名称",

"clearable": true,

"source": `${prefix2}/res/basic/getResList2`,

},

{

"type": "text",

"name": "assessmentPlanName",

"label": "考核计划名称"

},

{

"type": "number",

"name": "assessmentPlanPassPerson",

"label": "考核通过人数"

},

{

"type": "number",

"name": "assessmentPlanFailedPerson",

"label": "考核未通过人数"

},

{

"type": "input-text",

"name": "assessmentUnit",

"label": "考核单位"

},

{

"type": "text",

"name": "id",

"visible": false,

"value": "${id}",

"label": "id"

}

]

}

}

},

{

"type": "button",

"label": "删除",

"level": "danger",

"actionType": "ajax",

"confirmText": "确定要删除该条记录吗?",

"api": `delete:${prefix2}/sz/assessmentPlan/`+"${id}",

}

]

}

]

}

]

}

export default crudjson

相关推荐

上位 第一集
365体育推荐

上位 第一集

📅 08-22 👁️ 586
神将世界卡怎么办(为什么我玩神将世界很卡)
365体育推荐

神将世界卡怎么办(为什么我玩神将世界很卡)

📅 10-20 👁️ 5518