vue+iview 开发后台系统问题总结html
项目参考了iview-adminvue
splice(0,1)
主要是openName 这个props问题,即展开的menu name,采起的在根组件watch $route 根据router 的相应name 改变openNamegit
表单有相应的验证问题,在FormItem 添加相应的ref 而后在脚本里自定义验证规则github
const validatesuffix = (rule, value, callback) => { if (value == "") { callback(new Error("标识不能为空")); } else { let testReg = /^[a-zA-Z][a-zA-Z0-9]{1,5}$/; if (!testReg.test(value)) { callback(new Error("2~6位,只能输入英文数字(字母开头)")); } else { checkExit({ suffix: { role: "10", suffix: value } }).then(res => { if (res.code == 0) { if (res.payload == true) { callback(); } else { callback(new Error("标识不可用,请从新输入")); } } }); } } };
项目用了不少table, iview 的table用render渲染列,不像element,模板比较简洁vuex
<Table :columns="columns" :data="showData" size="small"></Table>
简单状况以下:缓存
render: (h, params) => { let arr = this.child; let count = 0; for (let item of arr) { count += item.betCount; } if (params.row.role == "1") { return h("span", count); } else { return h("span", params.row.betCount); } }
复杂状况:Poptip组件里再渲染tableiview
render: (h, params) => { let column = [ { title: "游戏", key: "name" }, { title: "占成", key: "rate" } ]; let data = []; let gameList = params.row.gameList; let len = gameList.length; for (let item of gameList) { let obj = {}; obj.rate = item.rate + "%"; obj.name = item.name; data.push(obj); } return h( "Poptip", { props: { trigger: "hover" } }, [ h( "span", { style: { cursor: "pointer", color: "#20a0ff" } }, len + "款游戏" ), h("Table", { props: { columns: column, data: data, border: true, size: "small", width: 250 }, slot: "content" }) ] ); }
事件处理:函数
return h( "Button", { props: { type: "text", size: "small" }, style: { color: "#20a0ff" }, on: { click: () => { let userId = params.row.userId; let displayName = params.row.displayName; let username = params.row.username; let parent = params.row.parent; this.$router.push({ path: "/dealerDetail", query: { userId, displayName, username, parent } }); } } }, "查看" );
问题2,给循环处理的table,导出数据测试
<div class="childList" v-for="(item,index) in reportChild" :key="index"> <p class="title"> ({{item.length > 0 && item[0].parentDisplayName ? item[0].parentDisplayName : ''}}) 下级列表 <Button type="ghost" @click="exportdata(index)">导出数据</Button> </p> <Table :columns="columns1" :data="item" size="small" :ref="'table'+index"></Table> </div>
绑定的ref加上index,已得到当前表格,说到这个循环,想起另一问题this
<div class="childList" v-for="(item,index) in agentChild" :key="index"> <p class="title"> ({{item.childItem.length > 0 && item.childItem[0].parentDisplayName ? item.childItem[0].parentDisplayName : parentNameChild}}) 下级列表 <RadioGroup v-model="item.isTest" v-if="level==0" class="radioGroup" type="button" @on-change='changeChildType(item)'> <Radio label="正式"></Radio> <Radio label="测试"></Radio> <Radio label="所有"></Radio> </RadioGroup> </p> <Table :columns="columns1" :data="item.childItem" size="small"></Table> </div>
给循环的table 绑定RadioGroup v-model绑定成item.isTest
,on-change是传入item这样就能使每一个循环出来的数据独立,当初就在想,在data里初始化的话,根本不知道有多少个循环出来的表格,一度认为这个没法实现
整体来讲iview比较简洁(相比element),风格和设计也很不错.由于是全局引入,iview比较大