UNPKG

cloud-ui.vusion

Version:
362 lines (337 loc) 12.9 kB
## 表单布局 ### 基本用法 ``` html <u-form gap="large"> <u-form-item label="计费方式" required> <u-radios value="0"> <u-radio label="0">包年包月</u-radio> <u-radio label="1">按量付费</u-radio> </u-radios> </u-form-item> <u-form-item label="实例名称" required> <u-input size="huge" maxlength="63" placeholder="由1-63个小写字母,数字,中划线组成,以字母开头,字母或数字结尾"></u-input> </u-form-item> <u-form-item label=" " required> <u-input size="huge" maxlength="63" placeholder="label为空的必填项"></u-input> </u-form-item> <u-form-item label="规格"> <u-capsules value="0101"> <u-capsule value="0101">1核 1GB</u-capsule> <u-capsule value="0102">1核 2GB</u-capsule> <u-capsule value="0204">2核 4GB</u-capsule> <u-capsule value="0408">4核 8GB</u-capsule> <u-capsule value="0816">8核 16GB</u-capsule> <u-capsule value="0832">8核 32GB</u-capsule> <u-capsule value="1664">16核 64GB</u-capsule> </u-capsules> </u-form-item> <u-form-item label="类型" description="高性能 SSD 云盘不支持快照功能" layout="block"> <u-capsules value="SSD"> <u-capsule value="SSD">SSD 云盘</u-capsule> <u-capsule value="HSSD">高性能 SSD 云盘</u-capsule> </u-capsules> </u-form-item> <u-form-item label="端口号" required> <u-input size="huge medium" maxlength="5" placeholder="1150-65535" value="3306"></u-input> </u-form-item> <u-form-item label="公网带宽"> <u-combo-slider :step="10" unit="Mbps"></u-combo-slider> </u-form-item> <u-form-item label="详情" layout="block"> <u-textarea size="huge"></u-textarea> </u-form-item> <u-form-item> <u-button color="primary">立即创建</u-button> </u-form-item> </u-form> ``` ### 行内 ``` html <u-form layout="inline" label-size="auto"> <u-form-item label="状态"> <u-select auto-select> <u-select-item>认证中</u-select-item> </u-select> </u-form-item> <u-form-item label="用户名"> <u-input maxlength="63" placeholder="请输入用户名"></u-input> </u-form-item> <u-form-item label="联系号码"> <u-input maxlength="63" placeholder="请输入联系号码"></u-input> </u-form-item> <u-form-item> <u-button color="primary">查询</u-button> </u-form-item> </u-form> ``` ### 栅格布局 使用栅格布局可以使多行表单对齐美观,设置 `repeat` 划分栅格数量,设置 `span` 占用对应空间。 ``` html <u-form repeat="3"> <u-form-item label="状态"> <u-select auto-select> <u-select-item>认证中</u-select-item> </u-select> </u-form-item> <u-form-item label="备案类型"> <u-select auto-select> <u-select-item>全部</u-select-item> </u-select> </u-form-item> <u-form-item label="备案号"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item label="用户名"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item label="单位名称"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item span="3"> <u-button color="primary">查询</u-button> </u-form-item> </u-form> ``` ### 标签块级布局 ``` html <u-linear-layout direction="vertical"> <u-panel title="结合默认布局"> <u-form label-layout="block"> <u-form-item label="计费方式" required> <u-radios value="0"> <u-radio label="0">包年包月</u-radio> <u-radio label="1">按量付费</u-radio> </u-radios> </u-form-item> <u-form-item label="实例名称" required description="高性能 SSD 云盘不支持快照功能"> <u-input size="huge" maxlength="63" placeholder="由1-63个小写字母,数字,中划线组成,以字母开头,字母或数字结尾"></u-input> </u-form-item> <u-form-item> <u-button color="primary">查询</u-button> </u-form-item> </u-form> </u-panel> <u-panel title="结合栅格布局"> <u-form repeat="3" label-layout="block"> <u-form-item label="状态"> <u-select auto-select> <u-select-item>认证中</u-select-item> </u-select> </u-form-item> <u-form-item label="备案类型"> <u-select auto-select> <u-select-item>全部</u-select-item> </u-select> </u-form-item> <u-form-item label="备案号"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item label="用户名"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item label="单位名称"> <u-input maxlength="63"></u-input> </u-form-item> <u-form-item span="3"> <u-button color="primary">查询</u-button> </u-form-item> </u-form> </u-panel> </u-linear-layout> ``` ### 插槽 - 通过`slot="label"`插槽自定义左侧内容 - 通过`slot="description"`插槽自定义描述内容 - 通过`slot='extra'`插槽自定义`label`右侧额外内容 ``` html <u-form ref="form"> <u-form-item required layout="block"> <span slot="label"> 用户名 </span> <div slot="description">描述描述</div> <u-icon-tooltip slot="extra" content="请输入正确格式的中文汉字"></u-icon-tooltip> <u-input maxlength="4" maxlength-message="不超过4个字符" placeholder="不超过4个字符"></u-input> </u-form-item> </u-form> ``` ## 数据收集与提交 推荐将各表单控件使用`v-model`绑定的数据,统一收集到`data`里的`model`对象中。 ``` vue <template> <u-form gap="large"> <u-form-item label="计费方式" required> <u-radios v-model="model.chargeType"> <u-radio label="0">包年包月</u-radio> <u-radio label="1">按量付费</u-radio> </u-radios> </u-form-item> <u-form-item label="实例名称" required> <u-input v-model="model.name" size="huge" maxlength="63" placeholder="由1-63个小写字母,数字,中划线组成,以字母开头,字母或数字结尾"></u-input> </u-form-item> <u-form-item label="规格"> <u-capsules v-model="model.spec"> <u-capsule value="0101">1核 1GB</u-capsule> <u-capsule value="0102">1核 2GB</u-capsule> <u-capsule value="0204">2核 4GB</u-capsule> <u-capsule value="0408">4核 8GB</u-capsule> <u-capsule value="0816">8核 16GB</u-capsule> <u-capsule value="0832">8核 32GB</u-capsule> <u-capsule value="1664">16核 64GB</u-capsule> </u-capsules> </u-form-item> <u-form-item label="类型" description="高性能 SSD 云盘不支持快照功能" layout="block"> <u-capsules v-model="model.type"> <u-capsule value="SSD">SSD 云盘</u-capsule> <u-capsule value="HSSD">高性能 SSD 云盘</u-capsule> </u-capsules> </u-form-item> <u-form-item label="端口号" required> <u-input v-model.number="model.port" size="huge normal" maxlength="5" placeholder="1150-65535"></u-input> </u-form-item> <u-form-item label="公网带宽"> <u-combo-slider v-model="model.bandwidth" :step="10" unit="Mbps"></u-combo-slider> </u-form-item> <u-form-item label="描述" layout="block"> <u-textarea v-model="model.description" size="huge"></u-textarea> </u-form-item> <u-form-item> <u-button color="primary" @click="submit()">立即创建</u-button> </u-form-item> </u-form> </template> <script> export default { data() { return { model: { chargeType: '0', name: '', spec: '0101', type: 'SSD', port: '', bandwidth: 10, description: '', }, }; }, methods: { submit() { console.log(this.model); this.$toast.show('没有验证,直接提交成功!'); }, }, }; </script> ``` ### 数据转换 有时 UI 中的数据与向后端提交的数据不完全一致,可以将`v-model`分解为一个`:value`属性绑定 + `@input`事件,做临时转换。 对于需要保持数字类型的,可以直接使用 Vue 的 `v-model` 的 `.number` 修饰符。 ``` vue <template> <u-form gap="large"> <u-form-item label="超时时长" required> <u-input size="huge normal" maxlength="5" placeholder="300-10000" :value="model.timeout / 1000" @input="model.timeout = $event * 1000"></u-input> </u-form-item> <u-form-item label="端口号" required> <u-input v-model.number="model.port" size="huge normal" maxlength="5" placeholder="1150-65535"></u-input> </u-form-item> <u-form-item> <u-button color="primary" @click="submit()">立即创建</u-button> </u-form-item> </u-form> </template> <script> export default { data() { return { model: { timeout: 900000, port: '', }, }; }, methods: { submit() { console.log(this.model); this.$toast.show('没有验证,直接提交成功!'); }, }, }; </script> ``` ### 表单验证 需要在`<u-form-item>`的`rules`属性添加验证规则,输入和失焦会自动触发验证,点击提交按钮时,需要手动调用 form 的`validate`方法。 可以根据`@validate`事件监听表单的验证状态。 关于验证规则的详细使用,参见 [UValidator](#components/u-validator)。 ```vue <template> <u-form ref="form" gap="large"> <u-form-item label="计费方式" required> <u-radios v-model="model.chargeType"> <u-radio label="0">包年包月</u-radio> <u-radio label="1">按量付费</u-radio> </u-radios> </u-form-item> <u-form-item label="实例名称" required rules="required | ^az | az09$ | ^az09-$ | rangeLength(1,63)" validateMessage="错误"> <u-input v-model="model.name" size="huge" maxlength="63" placeholder="由1-63个小写字母,数字,中划线组成,以字母开头,字母或数字结尾"></u-input> </u-form-item> <u-form-item label="规格"> <u-capsules v-model="model.spec"> <u-capsule value="0101">1核 1GB</u-capsule> <u-capsule value="0102">1核 2GB</u-capsule> <u-capsule value="0204">2核 4GB</u-capsule> <u-capsule value="0408">4核 8GB</u-capsule> <u-capsule value="0816">8核 16GB</u-capsule> <u-capsule value="0832">8核 32GB</u-capsule> <u-capsule value="1664">16核 64GB</u-capsule> </u-capsules> </u-form-item> <u-form-item label="类型" description="高性能 SSD 云盘不支持快照功能" layout="block"> <u-capsules v-model="model.type"> <u-capsule value="SSD">SSD 云盘</u-capsule> <u-capsule value="HSSD">高性能 SSD 云盘</u-capsule> </u-capsules> </u-form-item> <u-form-item label="端口号" required rules="required | integer | range(1150,65535)"> <u-input v-model.number="model.port" size="huge normal" maxlength="5" placeholder="1150-65535"></u-input> </u-form-item> <u-form-item label="公网带宽"> <u-combo-slider v-model="model.bandwidth" :step="10" unit="Mbps"></u-combo-slider> </u-form-item> <u-form-item label="描述" layout="block" rules="minLength(8)"> <u-textarea v-model="model.description" size="huge"></u-textarea> </u-form-item> <u-form-item> <u-button color="primary" @click="submit">立即创建</u-button> </u-form-item> </u-form> </template> <script> export default { data() { return { model: { chargeType: '0', name: '', spec: '0101', type: 'SSD', port: '', bandwidth: 10, description: '', }, }; }, methods: { async submit() { const result = await this.$refs.form.validate(); if (result.valid) this.$toast.show('验证通过,提交成功!'); else this.$toast.show('验证失败!'); }, }, }; </script> ```