amis组件学习的配置介绍(一)

1,151 阅读2分钟

官网中的一些内容,需要去测试才能真正明白他的意思,这篇文章总结一下自己学习amis组件对于其中一些属性的测试。

有错误,望指出。

tasks 任务操作集合

"body": {
    "type": "tasks",
    "name": "tasks",
    // 如果通过api去获取数据并展示,data直接返回展示的列表数据即可。类型为数组
    "checkApi": "/api/test/tasks",
    // 这个api是配置当操作返回5时,再次发送数据请求的api
    reSubmitApi: "/api/test/tasks",
    // 这个是配置当操作返回0 ,1, 3, 4时,再次发送请求数据的api
    submitApi: "/api/test/tasks",
}

上面提到api返回格式

直接返回一个数组,但是需要配置好属性格式。

  res.json(
    resultType(0, '请求成功', [
      {
        "label": "hive 任务",
        "key": "hive",
        "status": 5,
        "remark": "查看详情<a target=\"_blank\" href=\"http://www.baidu.com\">日志</a>。"
      },
      {
        "label": "小流量",
        "key": "partial",
        "status": 4
      },
      {
        "label": "全量",
        "key": "full",
        "status": 4
      }
    ])
  )

wizard 向导

// 请求默认是post
"api": {
    url: "/api/test/wizard",
    method: "get"
},
// 请求组件中使用到的数据,初始化数据api
initApi: "/api/test/initwizard",
// 是否初始化请求数据initApi是否发送
// initFetch: false,
// 将数据提交给form组件,并且不会触发initApi
target: "form",


"steps": [
    {
      // 配置api可以显示保存并下一步
      api: "/api/test",
    }
 ]

其他的事件和动作也是挺好理解的,没有具体的场景,就不去测试了。

  onEvent: {
    stepSubmitFail: {
      actions: {
        actionType: "toast",
        args: {
          msg: "保存失败"
        }
      }
    },
  }

image.png 一个案例

    {
      "type": "page",
      "body":[
        {
          type: "form",
          name: "form",
          body: [
            {
              type: "input-text",
              name: "website"
            },
            {
              type: "input-text",
              name: "email"
            },
            {
              type: "input-text",
              name: "email2"
            },
          ]
        },
        {
          "type": "wizard",
          // 请求默认是post
          "api": {
            url: "/api/test/wizard",
            method: "get"
          },
          // 请求组件中使用到的数据,初始化数据api
          initApi: "/api/test/initwizard",
          // 是否初始化请求数据initApi是否发送
          // initFetch: false,
          // 将数据提交给form组件,并且不会触发initApi
          target: "form",
          "mode": "horizontal", // vertical
          "steps": [
            {
              "title": "第一步",
              "body": [
                {
                  "name": "website",
                  "label": "网址",
                  "type": "input-url",
                },
                {
                  "name": "email",
                  "label": "邮箱",
                  "type": "input-email",
                }
              ]
            },
            {
              "title": "Step 2",
              "body": [
                {
                  "name": "email2",
                  "label": "邮箱",
                  "type": "input-email",
                }
              ]
            },
            {
              "title": "Step 3",
              "body": [
                "这是最后一步了"
              ]
            }
          ]
        }
      ]
    }

wrized.gif

Toast 轻提示

轻提示就不介绍了,主要是介绍一下将amis当做组件库使用在jdk环境下如何修改全局的toast提示。

  notify(type, msg) {
    // msg是后端返回的msg字段
    // type error || success
    amisLib.toast[type](msg, {
      timeout: 1000
    });
  },

dialog 对话框

默认情况下crud内部的dialog组件都会继承crud中的数据域的,如果crud中filter表单数据中的字段和dialog中表单数据中的字段相同,可能会相互影响,这时,我们就可以通过在dialog中自己配置数据域,并将其冲突的属性删除。

 "data": {
    "&": "$$",
    "status": "__undefined"
  },

具体案例,请查看这里

dialog组件下的actions按钮行为会影响dialog内部表单的行为。

下面这里actions中配置的submit行为会将dialog中的表单提交

    "dialog": {
      "title": "在弹框中的表单",
      "actions": [
        {
          "label": "提交表单后不关闭",
          "actionType": "submit",
          "close": false,
          "primary": true,
          "type": "button"
        },
        {
          "label": "ajax请求后不关闭",
          "actionType": "ajax",
          "primary": true,
          "type": "button",
          "api": "/amis/api/mock2/form/saveForm?waitSeconds=2"
        }
      ],
      "body": {
        "type": "form",
        "api": "/amis/api/mock2/form/saveForm?waitSeconds=2",
        "body": [
          {
            "type": "input-text",
            "name": "text",
            "required": true,
            "label": "用户名",
            "placeholder": "请输入用户名"
          },
          {
            "type": "input-password",
            "name": "password",
            "label": "密码",
            "required": true,
            "placeholder": "请输入密码"
          },
          {
            "type": "checkbox",
            "name": "rememberMe",
            "label": "记住登录"
          }
        ]
      }
    }

具体演示请看这里

请注意actions属性并不是只能定义confirm 和 cancel动作的,其他相关的动作也是可以定义的,如上例。

Tpl 模板

tpl属性是支持html格式的

status 状态

在进行crud, list, table中状态展示时,我还是推荐直接使用map组件来自定义,不要使用status,因为他不能直接使用html定义。

    type: 'map',
    map: {
      "0": "<span class='text-danger'><span class='fa fa-times-circle m-1'></span>失败</span>",
      "1": "<span class='text-success'><span class='fa fa-check-circle m-1'></span>成功</span>"
    },

image.png 因为labelMap只能映射文本。

    "type": "status",
    "map": {
      "0": "fa fa-check-circle text-danger",
      "1": "fa fa-times-circle text-success"
    },
    // labelMap只能映射文本,不能解析html
    // 数据映射的时候不能使用过滤器
    // "labelMap": {
    //   "0": "${'<span class='text-danger'>失败</span>' | raw}",
    //   "1": "${'<span class='text-success'>成功</span>' | raw}"
    // },
    "labelMap": {
      "0": "<span class='text-danger'>失败</span>",
      "1": "<span class='text-success'>成功</span>"
    },

Property 属性表

label,content支持amis所有的组件。

动态内容。我们可以通过service组件结合,请求数据,通过配置source属性来展示数据。

{
  "type": "page",
  "body": {
    type: "service",
    api: "/api/test/property",
    body: {
      "type": "property",
      "title": "${title}",
      "source": "${items}"
    }
  }
}

数据格式

    {
       "title": "",
       "items": [
         {
           "label": "",
           "content": "",
           "span": 2
         }
      ]
    }

单元格中属性样式的调整

    "labelStyle": {
      // 水平方向的排布
      "textAlign": "left",
      // 垂直方方向的排布
      "verticalAlign": "middle"
    },
    "contentStyle": {
      // 水平方向的排布
      "textAlign": "left",
      // 垂直方方向的排布
      "verticalAlign": "middle"
    },

Steps 步骤条

远程拉取,基本都是通过绑定source属性。

需要注意的只是格式问题。

{
  "status": 0,
  "msg": "",
  "data": {
    "steps": [
      {
        "title": "First",
        "subTitle": "this is sub title",
        "value": "first"
      },
      {
        "title": "Secord",
        "description": "this is description",
        "value": "secord"
      },
      {
        "title": "Last",
        "value": "last"
      }
    ]
  }
}

value属性从0开始的

progress 进度条

可以通过map属性来映射不同范围内填充进度条的颜色。

0-30表示一种颜色,30以后表示另一种颜色。感觉这样划分很奇怪,30-60阶段范围很突兀。

"map": [
    {
      "value": 30,
      "color": "#007bff"
    },
    {
      "value": 60,
      "color": "#fad733"
    }
]

这个组件有一个用处就是用在列表展示中。

{
    "name": "progress", // 映射的数据
    "label": "进度",
    "type": "progress" // 指定进度条组件
}

mapping 映射

用途之一是,使用在列表项中。


{
    "name": "type",
    "label": "映射",
    "type": "mapping",
    "map": {
      "1": "<span class='label label-info'>漂亮</span>",
      "2": "<span class='label label-success'>开心</span>",
      "3": "<span class='label label-danger'>惊吓</span>",
      "4": "<span class='label label-warning'>紧张</span>",
      "*": "其他:${type}"
    }
}

该组件也可以通过source去绑定请求回来的数据做页面展示。

{
    "type": "mapping",
    "name": "type",
    "label": "映射",
    "source": "${zidian}"
    // 或者直接请求一个api
    // "source": "/amis/api/mapping"
}

json

开启json修改和增加,我们需要指定name属性,这个属性必须指定,否则不具有修改,删除,增加功能。

Images 图片集

每个图片item的属性

    Array<{
      image: string; // 小图,预览图
      src?: string; // 原图
      title?: string; // 标题
      description?: string; // 描述
      [propName: string]: any; // 还可以有其他数据
    }>;

如果数据中对应的字段无image属性,我们可以将属性映射成src

{
  "type": "page",
  "data": {
    "images": [
      {
        "img": "https://internal-amis-res.cdn.bcebos.com/images/2020-1/1578395692722/4f3cb4202335.jpeg@s_0,w_216,l_1,f_jpg,q_80",
      }
    ]
  },
  "body": {
    "type": "images",
    "source": "${images}",
    "src": "${img}"
  }
}

如果数据中对应的字段无src,来预览原图,我们可以设置originalSrc属性。

如果想要预览原图,我们还需要设置enlargeAble: true

    {
  "type": "page",
  "data": {
    "images": [
      {
        "image": "https://internal-amis-res.cdn.bcebos.com/images/2020-1/1578395692722/4f3cb4202335.jpeg@s_0,w_216,l_1,f_jpg,q_80",
        "source": "https://internal-amis-res.cdn.bcebos.com/images/2020-1/1578395692722/4f3cb4202335.jpeg",
      }
    ]
  },
  "body": {
    "type": "images",
    "source": "${images}",
    "originalSrc": "${source}",
    "enlargeAble": true
  }
}

Icon 图标

图标可以直接通过class引入,也可以通过定义icon组件来使用。

amis库主要是使用fontawesome字体图标库的。以至于对于不同版本的fontawesome,图标前缀是不同的。

// v4 用fa 表示前缀
fa fa-cloud
// v5 用 far/fas 等表示前缀
far fa-address-book
// v6 用 fa-regular / fa-solid
fa-regular fa-address-book

calendar 日历日程

主要是介绍一下自定义日程展示吧。 我们在获取日程数据的时候,获取时间的属性是time,内容字段可以自定义。

    {
      "type": "page",
      "body": {
        "type": "calendar",
        "value": "1638288000",
        // scheduleClassNames: [],
        "schedules": [
          {
            "startTime": "2021-12-11 05:14:00",
            "endTime": "2021-12-11 06:14:00",
            "content1": "这是一个日程"
          },
          {
            "startTime": "2021-12-21 05:14:00",
            "endTime": "2021-12-22 05:14:00",
            // 自定义content字段名,下面映射的数据字段也必须时这个。
            "content1": "这是一个日程2"
          }
        ],
        "scheduleAction": {
          "actionType": "drawer",
          "drawer": {
            "title": "日程",
            "body": {
              "type": "table",
              // 下面的字段必须是time, content1
              "columns": [
                {
                  "name": "time",
                  "label": "时间"
                },
                {
                  "name": "content1",
                  "label": "内容"
                }
              ],
              // 这个绑定的就是calendar组件中的值,time, content1
              "data": "${scheduleData}"
            }
          }
        }
      }
    }

scheduleClassNames属性可以设置每个日程期间展示的图标颜色。

 scheduleClassNames: ['bg-secondary', 'bg-warning', 'bg-danger', 'bg-success', 'bg-info']

image.png