Vue 组件库

vue 组件库

因为测试平台中有一些常见的可以模块化的 UI 界面, 使用 Vue 框架之后,将其抽象出来,成为单一的组件。以下是测试平台常用的组件列表。css 文件引用的是 bootstrap.min.css。

select 组件

select
  • 用法
<z-select :options= "options" v-model='optionVal'  ></z-select>
<script>
import Select from 'select.vue'
export default {
         data: function(){
             return {
                  options: [
               {
                   text: '全部状态',
                   value: ''
               },
               {
                   text: '待执行',
                   value: '0'
               },
               {
                   text: '执行中',
                   value: '1'
               },
               {
                   text: '成功',
                   value: '2'
               },
               {
                   text: '失败',
                   value: '-1'
               },
               {
                   text: '取消执行',
                   value: '-2'
               },
               {
                   text: '异常结束',
                   value: '-3'
               },
               {
                   text: '没有执行过',
                   value: '-4'
               },
           ]
                optionVal: ''
                 
             }
         },
         components: {
           "z-select": Select
         },
}
</script> 
  • 属性
属性名 描述 类型
title select元素的标题 String
width 控制select元素的宽度 Number
spanWidth 控制标题的长度 Number
height 控制select元素的高度 Number
value select的当前option的value [String,Number]
options 选项列表 Array
disabled 是否disabled当前select,默认值为false Boolean
  • 事件
事件名 描述
switchOption 当option发生改变时触发,回传的值是options的元单元
  • 说明

如果你想实现的是,当option发生改变时,调ajax或者其他,可以这样写

<z-select :options="select.options" :width="200" v-model="selectVal"></z-select>

import Select from 'select.vue'
export default {
          data: function(){
              return {
                  options:[
                    {
                      text: '张三',
                      value: 'zhangsan'
                    },
                    {
                        text: '李四',
                        value: 'lisi'
                    }
                  ],
                  selectVal: ''
                  
              }
          },
          components: {
            "h-select": Select
          },
          watch: {
              selectVal: {
                    handler: function(newval ,oldVal){
                        //ajax请求
                    }
                     deep: true  //这个选项会监测selecVal每个key值的变化
             }       
            
          },
}

参考链接:

How do I watch all keys in a data object in Vue 2
vue2中watch的官方文档

ZeusDatePicker的用法

datepicker.png
  • 用法
<z-datepicker @choosed="datePicker"></z-datepicker>
<script>
   import ZeusDatePicker from '../../../components/zeusDatePicker.vue'
   export default {

       methods:{
           datePicker: function(dateInfo) {
               console.log(dateInfo) //数据格式{startDate: '2017-08-23', endDate: '2017-08-23'}
           }
       }
   }
</script>
  • 属性

  • 事件
事件名 描述
choosed 选择日期时触发

table的用法

特殊一点。可以合并单元格。

合并单元格的table
普通table
  • 普通table的用法
<z-table :data="tableData" :data-render="tableHead" :border="true"
:need-page="true" :total-count="total"></z-table>
<script>
import Table from 'table/table.vue';
    export default {
        components: {
            'z-table': Table
        },
        data: function() {
            return {
                    total: 14,
                tableHead:  [
                    {
                        head: "ID",
                        key: "buildNumber"
            
                    },
                    {
                        head: "开始时间",
                        key: "startTime"
            
                    },
                    {
                        head: "构建人",
                        key: "authorRealName"
                    },
                    {
                        head: "构建用时",
                        key: "duration"
                    },
                    {
                        head: "执行状态",
                        key: "statusName"
                    },
                    {
                        head: "用例通过率",
                        key: "passRate"
                    },
                    {
                        head: "用例总数",
                        key: "cases"
                    },
                    {
                        head: "报告",
                        key: "report"
                    },
                 ],
                tableData: [
                    {
                            buildNumber: 0,
                            startTime: "2017-07-16 10:00:00",
                            authorRealName: "songke",
                            duration: "20秒",
                            status: 0,
                            statusName: "成功",
                            passRate: "90.99%",
                            cases: 100,
                            mobileTaskUri: "mobile/doneReport?taskId=597",
                            jenkinsLogUrl: "http://autotest.vdian.net/job/job_id/build_id/consoleBuild"
                        },
                        {
                            buildNumber: 1,
                            startTime: "2017-07-16 10:00:00",
                            authorRealName: "songke",
                            duration: "20秒",
                            status: 1,
                            statusName: "成功",
                            passRate: "90.99%",
                            cases: 100,                                 mobileTaskUri: "mobile/doneReport?taskId=597",
                            jenkinsLogUrl: "http://autotest.vdian.net/job/job_id/build_id/consoleBuild"
                        },
                ],
            }
        },
    }
</script>
  • 合并单元格table的用法

唯一的不同是tableData 属性,每一条记录需要在增加rowspan属性,

tableData: [
  {
     ....
    rowspan: {
       appName: {
          stopRowSpan: false,  //需要合并的列是appName,从本条记录开始合并,合并 crossLine 行
          crossLine: 2
       }
     },
 {
     ....
    rowspan: {
       appName: {
          stopRowSpan: true,  //本条记录的appName列被上一条记录合并
          crossLine: 0
       },
     }
  },
{
     ....
    rowspan: {
       appName: {
          stopRowSpan:false,  //从本条记录开始,
          crossLine: 0
       },
     }
  },
]
<z-table :data="tableData" :data-render="tableHead" :border="true":merge-cell="true"></z-table>
<script>
import Table from 'table/table.vue';
    export default {
        components: {
            'z-table': Table
        },
        data: function() {
            return {
                    total: 14,
                tableHead:  [
                    {
                        head: "ID",
                        key: "buildNumber"
            
                    },
                    {
                        head: "开始时间",
                        key: "startTime"
            
                    },
                    {
                        head: "构建人",
                        key: "authorRealName"
                    },
                    {
                        head: "构建用时",
                        key: "duration"
                    },
                    {
                        head: "执行状态",
                        key: "statusName"
                    },
                    {
                        head: "用例通过率",
                        key: "passRate"
                    },
                    {
                        head: "用例总数",
                        key: "cases"
                    },
                    {
                        head: "报告",
                        key: "report"
                    },
                 ],
                tableData: [
                    {
                            buildNumber: 0,
                            startTime: "2017-07-16 10:00:00",
                            authorRealName: "songke",
                            duration: "20秒",
                            status: 0,
                            statusName: "成功",
                            passRate: "90.99%",
                            cases: 100,
                            mobileTaskUri: "mobile/doneReport?taskId=597",
                            jenkinsLogUrl: "http://autotest.vdian.net/job/job_id/build_id/consoleBuild",
                             rowspan : {
                                    'appName':{stopRowSpan: true, crossLine: 1},
                            }
                        },
                        {
                            buildNumber: 1,
                            startTime: "2017-07-16 10:00:00",
                            authorRealName: "songke",
                            duration: "20秒",
                            status: 1,
                            statusName: "成功",
                            passRate: "90.99%",
                            cases: 100,                                 mobileTaskUri: "mobile/doneReport?taskId=597",
                            jenkinsLogUrl: "http://autotest.vdian.net/job/job_id/build_id/consoleBuild",
                             rowspan : {
                                    'appName':{stopRowSpan: false, crossLine:   
                        1},  /
                        },
                ],
            }
        },
    }
</script>
  • 属性
属性名 描述 类型
mergeCell 是否合并单元格。默认false Boolean
dataRender 表格头部信息,包含头部标题和index Array
data 表格数据信息 Array
needPage 是否需要分页 Boolean
totalCount table的总数据 Number
countPerPage 一页显示多少行数据 Number
needExpand 有展开的效果,设置该属性为true时,不能合并单元格 Boolean
expandHeadKey 第几列被点击时,会显示或者隐藏下一列 String
widthUnit thead的宽度,默认值是% String
  • 事件

page组件

page组件
  • 用法
<z-pagination :total="50"></z-pagination>

<script>
  import pagination from 'page.vue'
  export default {
    components: {
      'z-pagination': pagination
    }
  }
</script>
  • 属性
属性名 描述 类型
size 是否合并单元格。默认false Boolean
page-size 每页多少条数据 Number
total 一共多少条数据 Number
  • 事件
事件名 描述
currentPage 当页面发生改变时,事件触发

zeusReverseTable组件

reverseTable.png
  • 用法
 <z-reverseTable :table-data="jobInfo" :head-data="jobHead"
                            custom-class="zeus-tableless" th-width="100px">

</z-reverseTable>

<script>
  import zeusReverseTable from 'zeusReverseTable/zeusReverseTable.vue'
  export default {
    components: {
      'z-reverseTable': zeusReverseTable,
    },
    data() {
        return {
            jobHead:[
               {
                   key: "testTypeName",
                   head: "测试类型",
               },
              {
                   key: "authorRealName",
                   head: "创建人"
              },
             {
                 key: "triggerConfig",
                  head: "执行规则"
             },
            ],
            jobInfo: {
              testTypeName: '接口测试',
              authorRealName: ''fdsfdsf",
              triggerConfig:"环境部署(应用:xxxx;环境:日常;分支:dev,master)"
          }
        }
    }
  }
</script>
  • 属性
属性名 描述 类型
tableData table的数据 Array
headData table的标题 Array
border table的样式,是否需要边界,默认false Boolean
customClass 自定义table的样式 String
thWidth table标题栏的宽度,自带单位,如'150px','10%' String
  • 事件

zeusSwitchTab组件

zeusSwitchTab.png
  • 用法
<z-tab :navs="navInfos" v-model='initNav'></z-tab>

import zeusSwitchTab from '../../components/zeusSwitchTab.vue'
export default {
    components: {
                'z-tab': zeusSwitchTab,
      },
     data: function() {
        navInfos: [
            {
                text: '接口测试',
                value: 0
            },
            {
                text: 'UI测试',
                value: 1
            },
        ],
        initVal:0
     }
}
  • 属性
属性名 描述 类型
navInfos 见用法 Array
value 获取当前active的tab的value String,Number
  • 事件

zeusSearch组件

zeusSearch
  • 用法
 <z-search v-model="searchVal" @search="searchCaseName"></z-search>
 <script>
  import zeusSearch from 'zeusSearch/zeusSearch.vue'
  
  export default {
       components:{
           'z-search': zeusSearch
       },
       data: function() {
           return  {
               searchVal: ''
           }
       },
       methods:{
           searchCaseName: function() {
               console.log("from parent " + this.searchVal)
           }
       }
   }
 </script>
  • 属性
属性名 描述 类型
placeholder input框的placehoder String
value 获取当前input框的值,可以不传 String
searchTitle search组件的标题 String
width 控制input框的长度 Number
  • 事件
事件名 描述
search 当输入框按下enter或者点击搜索按钮,即可触发

如果某个组件依赖了别的组件,是不是需要package.json,把它下下来。

alert组件

alert.png
  • 用法
 <h-alert :type="alert.type"  v-model="alert.show"  
 :text="alert.text"
              custom-class="alert-center" :timeout="2000" ></h-alert>
 <script>
  import alert from 'Alert/Alert.vue'
  
  export default {
       components:  {
           'h-alert': alert
       },
       data: function() {
           return  {
               alert: {
                       type: "success",
                       show: false,
                       text: '谢谢'
              }
           }
       },
       
   }
 </script>
  • 属性
属性名 描述 类型
type 类型,info,danger等等 String
v-model 控制当前alert显示或者不显示 String
text alert显示的提示文案 String
custom-class 自定义class String
timeout 多长时间alert自动消失,单位毫秒 Number
  • 事件

zeusInput组件

zeusInput.png
 <z-input   input-label="Job名"
             v-model="jobName"  :disable-when-not-empty="true" ></z-input>
  import zeusInput from 'zeusInput/zeusInput.vue';
  
  export default {
       components:  {
           'z-input': zeusInput,
       },
       data: function() {
           return  {
               jobName: 'testng接口测试Job',
               
           }
       },
       
   }
 </script>
  • 属性
属性名 描述 类型
inputLabel 输入框的标题 String
value 输入框的值 String
width 输入框的长度 Number
spanWidth 标题的长度 Number
disableWhenNotEmpty 当输入框的初始值不为空时,disable掉这个input Boolean
clear 为true时,清除input框 Boolean
hasHelp 为true时,显示问号 Boolean
  • 事件
事件名 描述
helped 点击help图标时,触发该事件

zeusRadios组件

radios.png
<z-radios label-for-radios="应用平台" :radios="radios" v-model="chooseRadioVal"></z-radios>

  import zeusRadios from 'zeusRadios/zeusRadios.vue';
  
  export default {
       components:  {
           'z-radios': zeusRadios,
       },
       data: function() {
           return  {
               radios: [
                     {
                         text:'Java', 
                          value: 'Java'
                     },
                     {
                         text:'NodeJS', 
                         value: 'NodeJS'
                     },
                    {
                       text:'Android', 
                       value: 'Android'
                     },
                     {
                       text:'iOS', 
                       value: 'iOS'
                     }
],
               chooseRadioVal: "Java"
           }
       },
       
   }
 </script>
  • 属性
属性名 描述 类型
labelForRadios 单选项列表的标题 String
radios 单选项列表,数据格式见上面的类型 Array
value 单选项列表,当前被选的radio的值 String,Number,Boolean
spanWidth 单选项列表的标题的长度 Number
disabled disabled 单选项,默认false Boolean
neccessary 是否需要必填的标识符,默认值false Boolean
  • 事件

zeusTextarea

zeusTextarea.png
<z-textarea v-model="commands" title="构建命令"  :neccessary= "neccessary" :width="elementWidth" ></z-textarea>
 
    import zeusTextarea from 'zeusTextarea/zeusTextarea.vue'
   
   export default {
        components:  {
            'z-textarea': zeusTextarea
        },
        data: function() {
            return  {
              commands: "mvn clean test 命令换行",
              title: '构建命令',
              neccessary: true,
            }
        },
    }
  </script>
  • 属性
属性名 描述 类型
title textarea的标题 String
spanWidth 标题的长度 Number
value textarea的值 String
width textarea的长度 Number
placeholder textarea的placeholder String
neccessary 是否显示必填的标识符,默认为false,不显示 Boolean
disabled 是否disabled掉textarea,默认为false,不disabled Boolean
  • 事件

zeusCheckboxes

zeusCheckbox
<z-checkboxes :checkboxes="checkboxes"  
                v-model="currentCheckbox" directions="vertical">
 </z-checkboxes>
                
   //其中slot和checkboxes属性的value保持一致
 
 import zeusCheckboxes from 'zeusCheckboxes/zeusCheckboxes.vue'
   
   export default {
        components:  {
            'z-checkboxes': zeusCheckboxes
        },
        data: function() {
            //value 返回值1
            return  {
              checkboxes: ["定时"],
              currentCheckbox:["定时"]
            }
            
           //value 返回值2
           return {
            checkboxes: [
                {value: 1,text: 'alice'},
                {value: 2,text: 'lily'},
                {value: 3,text: 'bob'},
            ],
              currentCheckbox: {
                  1: "true",
                  2: "false",
                  3: ""
            }
           }  
        },
        
    }
  </script>
  • 属性
属性名 描述 类型
labelForCheckBoxes checkboxes的标题 String
directions checkbox水平排列,还是垂直排列 String,默认值'horizontal',vertical
checkboxes checkbox的选项值 Array([1,2,3]或者[{value: 123,text: number}]
neccessary 该group是否是必填性 Boolean,默认值true
value checkboxes的值,是数组或者object,由变量returnArrayOrJson 决定 Array或者Object.其中
returnArrayOrJson 返回值是array还是json,默认是array Boolean
  • 事件

multiSelect 组件

支持ajax实时更新option

multi-select
 <m-select v-model="recipients" :options="users" :multiple="true" :neccessary="false" :internal-search="false" title="通知人"
    @search-change="searchForUsers" label="realName">
</m-select>

import multiSelect from 'vue-multiSelect/Multiselect.vue'
export default{
     components: {
         'm-select': multiSelect
     },
     data(){
        return {
          recipients:[] ,//数据格式和users一样
          users:[] 
      }
    },
    methods: {
        searchForUsers: function(search) {
              axios.get(API.searchForUsers, {
                          params: {
                              search: search
                          }
                      })
              .then(res => {
                  this.users =  res.data  //res.data的数据格式
[
                //   {
                //     userName: "zhangsan",
                //     realName: "张三"
                //   },
                //   {
                //     userName: "lisi",
                //     realName: "李四"
                //   }
                // ],
              })
              .catch(e => {
//                  this.alert = JSON.parse(JSON.stringify(CONFIG.internalErrorMsg));
              })
        }
    }
}
  • 属性
属性名 描述 类型
value 输入框的值 Array
options 所有可供选择的筛选项 String
multiple 支持多选 Boolean
neccessary 是否显示必填项的标识符, 默认false Boolean
title 标题 String
width 输入框长度 Number
disabled 是否disabled输入框,默认false Boolean
spanWidth 标题长度 Number
clear 为true时,清除select框中所有选项,默认false Boolean
label 输入框中展示的是options属性中的哪个键值,比如上面例子中显示的是realName String
  • 事件
事件名 描述
searchChange 当用户输入的值发生变化时,该事件触发

zeusBreadcrumb

zeusBreadcrumb.png
  • js代码
<z-breadcrumb :crumb-list="crumbInfos"></z-breadcrumb>

<script>
 import zeusBreadcrumb from '../../components/zeusBreadCrumb.vue'

export default {
 components:  {
            'z-breadcrumb': zeusBreadcrumb
        },
  data() {
      return {
         crumbInfos:  [
                            {
                                text: '目录测试-1',
                                href: `/ci/businessLine#/1/目录测试-1`
                            },
                            {
                                text: '测试应用1',
                                href: `/ci/appDetail#/3`
                            },
                            {
                                text: 'testng接口测试Job',
                                href: `/ci/jobReport#/3`
                            },
                        ]
      }
}
}
</script>
  • 属性
属性名 描述 类型
crumbList 面包屑数据,格式如上述例子 Array
  • 事件

图表

之前在 echart 的基础上二次封装一些图表组件,包括柱折混合图,水滴图等。后来发现,一旦引用封装后的图表组件,会使编译后的 js 文件十分大,影响性能, 因此不展示图表组件。但是有兴趣的同学,可以和我联系,代码可发你一份。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容