diff --git a/README.md b/README.md index cd3887b..74ffd44 100644 --- a/README.md +++ b/README.md @@ -21,16 +21,16 @@ > 前端项目分为通用资源(resource),业务内容(butterfly),大厅应用(shell),大厅管理平台(michael)四个并列文件夹 ### 业务抽象组件 -* [工单列表组件](https://github.com/the8th/vue-ccssoft/wiki/%E5%B7%A5%E5%8D%95%E5%88%97%E8%A1%A8%E7%BB%84%E4%BB%B6) -* [工单详情组件](https://github.com/the8th/vue-ccssoft/wiki/%E5%B7%A5%E5%8D%95%E8%AF%A6%E6%83%85%E7%BB%84%E4%BB%B6) -* [工单操作组件](https://github.com/the8th/vue-ccssoft/wiki/%E5%B7%A5%E5%8D%95%E6%93%8D%E4%BD%9C%E7%BB%84%E4%BB%B6) -* [信息查询组件](https://github.com/the8th/vue-ccssoft/wiki/%E4%BF%A1%E6%81%AF%E6%9F%A5%E8%AF%A2%E7%BB%84%E4%BB%B6) +* [工单列表组件](工单列表组件.md) +* [工单详情组件](工单详情组件.md) +* [工单操作组件](工单操作组件.md) +* [信息查询组件](信息查询组件.md) ### 基础组件 -* [通用表单组件](https://github.com/the8th/vue-ccssoft/wiki/%E9%80%9A%E7%94%A8%E8%A1%A8%E5%8D%95%E7%BB%84%E4%BB%B6) -* [通用信息提示组件](https://github.com/the8th/vue-ccssoft/wiki/%E9%80%9A%E7%94%A8%E4%BF%A1%E6%81%AF%E6%8F%90%E7%A4%BA%E7%BB%84%E4%BB%B6) -* [通用名值对串显示组件](https://github.com/the8th/vue-ccssoft/wiki/%E9%80%9A%E7%94%A8%E5%90%8D%E5%80%BC%E5%AF%B9%E4%B8%B2%E6%98%BE%E7%A4%BA%E7%BB%84%E4%BB%B6) +* [通用表单组件](通用表单组件.md) +* [通用信息提示组件](通用信息提示组件.md) +* [通用名值对串显示组件](通用名值对串显示组件.md) * 其他组件 * 工具函数 diff --git a/信息查询组件.md b/信息查询组件.md new file mode 100644 index 0000000..0ff664e --- /dev/null +++ b/信息查询组件.md @@ -0,0 +1,56 @@ +###信息查询组件对应有三种接口: +1. 查询项列表(非必需) +2. 查询项配置 +3. 查询结果配置 +### 查询项列表 +> 查询项列表目的是将查询项目与项目编号关联起来,方便用户自行选择进入查询项。格式如下: +> 相关组件(butterfly\infoService\List.js) +> + [ + { + "name":"ITMS", + "code":"IDM_APP_NETOP_ITMS", + "value":[ + {"name":"数据自助下发","code":"IDM_APP_NETOP_ITMS_DONE"}, + {"name":"用户设备绑定","code":"IDM_APP_NETOP_ITMS_BIND"}, + {"name":"用户设备解绑","code":"IDM_APP_NETOP_ITMS_RELEASE"}, + {"name":"终端重启","code":"IDM_APP_NETOP_ITMS_REBOOT"}, + {"name":"桥接和路由修改","code":"IDM_APP_NETOP_ITMS_BRIDGETOROUT"}, + ... + ] + }, + { + "name":"固网3A", + "code":"IDM_APP_NETOP_AIOBS", + "value":[] + }, + { + "name":"PON", + "code":"IDM_APP_NETOP_PON", + "value":[] + } + ] +### 查询项配置 +> 查询项配置简单配置一些诸如标题,表单项,查询接口等信息。 其中表单格式见通用表单组件。 +> 根据该配置,界面会自动生成查询表单,用户点击查询时,会自动将表单内容提交到action所指向到的接口。然后根据返回内容进行下一步 +> 相关组件(butterfly\infoService\Detail.js) +> + { + "title":"数据自助下发", + "ifCode":"itms_serviceDone", + "action":"/mop/proxyIda/ida30/xxxxx", + "operationType":"change",//查询类型。表示该次查询是查询/更改(search,change)。如果为change,在点击查询按钮时会要求确认 + "form":[] + } +### 查询结果配置 +>查询结果接口即是查询项配置中的action接口。 +>返回值有三种处理方式。 +1. 返回结果状态码不为200,将提示操作失败 +2. 返回结果状态码为200,但数据为空,将直接提示操作成功 +3. 返回结果有数据。此时需要指定用哪个组件来展示数据。这时根据不同业务将有不同变化。暂时只支持map这一种类型,调用了DetailView组件 +> + { + map : [ + ..... + ] + } diff --git a/工单列表组件.md b/工单列表组件.md new file mode 100644 index 0000000..93eb397 --- /dev/null +++ b/工单列表组件.md @@ -0,0 +1,58 @@ +### 调用 +> + +* source可以为一个url,或一个方法。如果是url,直接从该url请求数据。如果是一个方法,该方法接收一个param参数,包含页码等信息。方法必须返回一个promise对象,resolve一个指定格式的列表数据 + +### 工单列表组件的数据由三部分组成 +1. 查询表单 +2. 列表项 +3. 页码信息 +### 基础的数据格式如下: +> 工单列表页渲染组件(\resource\components\mobile\bill\ListView.js) +> + { + "queryForm":[],//工单查询条件,详见[列表表单组件] + "resultList":[],//工单列表数据,详见列表项数据格式 + "totalCount":48,//工单总条目数 + "pageCount":3//工单总页数 + } +### 列表项数据格式如下: +> 列表项渲染组件(\resource\components\mobile\bill\ListItem.js) +> + { + "title":"451000201815",//工单标题 + "subTitle":"",//工单副标题 + "icon":"resource/images/openBills/open_01.png",//工单显示图标 + "tags":[//工单的属性标记 type:normal,warn,error 分别为绿色,黄色,红色 value:true显示,false不显示 + {"name":"待回单","type":"normal","value":"true"}, + {"name":"催装0次","type":"warn","value":"false"} + ], + "props":[//工单属性列表,icon样式见font-awesome + {"icon":"fa fa-home","value":"哈尔滨市香坊区鼎园明府小区2号楼2单元802室"} + ], + "extend":[//工单扩展属性列表 + {"key":"上门","value":""}, + {"key":"预约","value":"2017-05-16 14:58:56"}, + {"key":"截至","value":"2017-05-17 23:59:59"} + ], + "methods":{//工单操作,分三类:tel:拨打电话 map:打开地图定位 menu:打开菜单 + "tel":"18004667853",//电话号码 + "map":"xxxxxx",//客户地址 + "menu":"xxxxxx"//菜单项接口地址。 菜单配置 详见[工单菜单配置] + }, + "detail":"/openBill/detail?DispatchSn=xxxxxxxx&MainSn=xxxxxxxx",//工单详情地址 + "data":{//工单原始数据 + "DispatchSn":"xxxxxxxx", + "MainSn":"xxxxxxxx", + "ClogCode":"xxxxxxxx", + "NativeNetId":"xxxxxxxx", + "WorkType":"新装", + "WorkAction":"装", + "SpecialtyId":"xxxxxxxx", + "Contactor":"xxxxxxxx", + "ContactPhone":"xxxxxxxx", + "Applytime":"2017-05-15 09:34:18", + "ReqRepairTime":"2017-05-17 23:59:59", + "InstAddress":"xxxxxxxx" + } + } \ No newline at end of file diff --git a/工单操作组件.md b/工单操作组件.md new file mode 100644 index 0000000..e1e2bd3 --- /dev/null +++ b/工单操作组件.md @@ -0,0 +1,79 @@ +# 分别对应列表操作项[common/bill/ListMethods]和详情操作项[common/bill/DetailMenu] + +> + [ + //flow属性代表在详情中渲染为一个大按钮 + //具有value属性,表示将执行该js方法 + //组件将向上冒泡一个通知 + //业务层需要监听该通知,然后自行触发该方法(方法需要自己实现) + {"name":"拍照","value":"ev_photo","flow":"","code":"IDE_APP_OPEN_PHOTO"}, + {"name":"材料使用","value":"ev_usecircsmate","flow":"","code":"IDE_APP_OPEN_USECIRCSMATE"}, + {"name":"回单","value":"ev_return","flow":"true","code":"IDE_APP_OPEN_RETURN"}, + //以下为自动处理的操作 + + //直接向接口提交数据即可完成的操作 + //action为submit + //paramter为一个逗号分隔的键名,组件自动获取到工单的相关键值,发送到指定接口 + { + "paramter":"DispatchSn", + "name":"接单", + "action":"submit", + "flow":"true", + "code":"IDE_APP_OPEN_ACCEPT", + "url":"/mop/proxyIda/ida30/h5/app/AppPublicAction.do?method=service&ifCode=open_accept" + }, + //需要显示一个交互表单的操作 + //action为form + //url为获取form定义的接口名 + { + "paramter":"DispatchSn", + "name":"挂起", + "action":"form", + "flow":"", + "code":"IDE_APP_OPEN_HANDUP", + "url":"/mop/proxyIda/ida30/h5/app/AppPublicAction.do?method=getFormDefine&formCode=open_hungUp_page" + } + ] + +# 表单格式 +> + //title为交互窗显示的标题 + //action为form提交地址 + //form为通用表单格式 + //onSuccess定义表单提交后的后续动作 + //目前规定为4种: + //1.refreshList 刷新工单列表 在列表时直接刷新列表数据 在详情时返回 + //2.refreshBill 刷新工单数据(含菜单) + //3.refreshMenu 刷新菜单 + //4. "" nothing 什么都不干 + + //可以配置一个onSubmit属性,值为一个js方法。 + //在这种情况下表单将派发一个execute事件给业务组件。 + //此时业务组件需要实现此方法,获取的入参为表单值。 + //业务方法需要返回一个promise对象 + + //将通过一个commonMethod事件将动作向上冒泡,业务代码捕获到后自行处理 + { + "title":"解挂", + "action":"/mop/proxyIda/ida30/h5/app/AppPublicAction.do?method=service&ifCode=open_unhangup&DispatchSn=20170501212484", + "onSuccess":"refreshBill", + "form":[] + } + +#业务页面处理后续动作的示例代码 +> + events : { + commonMethod : function(method,component,callback){ + if(method==="refreshList"){ + this.reload() + return callback() + } + if(method==="refreshBill"){ + return this.refreshBill(component).then(callback) + } + if(method==="refreshMenu"){ + return this.refreshMethods(component).then(callback) + } + return callback() + } + } \ No newline at end of file diff --git a/工单详情组件.md b/工单详情组件.md new file mode 100644 index 0000000..9d32108 --- /dev/null +++ b/工单详情组件.md @@ -0,0 +1,111 @@ +### 工单详情组件由一个tab和若干组件拼接而成 + +* pageList值为一个数组,category表示tab标题,content可由多个组件堆砌而成,type表示显示的组件类型,data为组件数据 +* data为工单原始数据 +* menuUrl为菜单接口url +* +> + { + "pageList":[ + { + "category":"工单信息", + //content内容调用了MultipleView,详细格式参考common.MultipleView.js + "content":[ + { + "component":"detailview", + data":[xxxxx] + } + ] + }, + { + "category":"用户资料", + "content":[] + }, + { + "category":"线路信息", + "content":[] + }, + { + "category":"处理步骤", + "content":[] + } + ], + "data":{ + "DispatchSn":"20170501358807", + "MainSn":"2017051500000431", + "ClogCode":"451000201815", + ... + }, + "menuUrl":"/ida30/h5/app/xxxxx" + } + +> 以下为旧版格式,目前仍然兼容 +* 目前可以在详情页作为tab展现的组件有DetailView,FlowView +> + { + "pageList":[ + { + "category":"工单信息", + "content":[ + { + "type":"listView", + data":[ + {"name":"订单编号","value":"51000000000097365066","prop":""}, + {"name":"申请时间","value":"2017-5-15 9:34:18","prop":""}, + {"name":"产品名称","value":"智慧家庭"}, + {"name":"工单状态","value":"待回单","prop":""}, + {"name":"施工类型","value":"新装","prop":""}, + {"name":"施工动作","value":"装","prop":""}, + {"name":"局向","value":"香坊区","prop":""}, + {"name":"业务号码(障碍标识)","value":"451000201815","prop":""}, + {"name":"预约开始时间","value":"2017-5-17 17:00:00","prop":""}, + {"name":"预约结束时间","value":"2017-5-17 19:00:00","prop":""}, + {"name":"先装后付","value":"否","prop":""} + ] + } + ] + }, + { + "category":"用户资料", + "content":[ + { + "type":"listView", + "data":[] + } + ] + }, + { + "category":"线路信息", + "content":[ + { + "type":"listView", + "data":[] + } + ] + }, + {"category":"处理步骤", + "content":[ + { + "type":"flowView", + "data":[ + { + "actionType":"受理", + "operator":"SysPc", + "operatorGroup":"", + "dealInfo":"", + "operateEndtime":"05-15 09:34" + }, + .... + ] + } + ] + } + ], + "data":{ + "DispatchSn":"20170501358807", + "MainSn":"2017051500000431", + "ClogCode":"451000201815", + ... + }, + "menuUrl":"/ida30/h5/app/xxxxx" + } \ No newline at end of file diff --git a/通用信息提示组件.md b/通用信息提示组件.md new file mode 100644 index 0000000..e1a44bd --- /dev/null +++ b/通用信息提示组件.md @@ -0,0 +1,11 @@ +> \resource\components\mobile\Panel.js + +* 一个基础的面板组件 +* 用于显示一些简单的提示信息 +* 根据状态不同,提示 成功,警告,失败,普通 等状态 +> + + + + + diff --git a/通用名值对串显示组件.md b/通用名值对串显示组件.md new file mode 100644 index 0000000..272e950 --- /dev/null +++ b/通用名值对串显示组件.md @@ -0,0 +1,28 @@ +> \resource\components\mobile\DetailView.js + +> + //展示一个名值对集合 + /* + 集合成员: + { + hideIfEmpty : true, //值为空时是否隐藏,默认不隐藏 + name : name, //名称 + value : value, //值 + prop : prop || "", //属性 + important表示值用红色加粗表示 + divider表示本行是一个分隔行,只显示名称 + map表示点击后用地图打开 + telephone表示点击后拨打电话 + url表示点击后打开一个新界面(本地路由) + dateLimit表示剩余时间 + portRate将一个以kb为单位的数字转为mb为单位的字符串 + colord表示着色,参数为颜色值 + boolean表示是一个是否值(是,否,Y,N) + html表示值是html + largeText表示大文本 + newValue表示是一个新旧值对比,新值在value里,旧值在extend里 + + extend : ""//扩展属性,视prop的值不同,格式不同 + } + */ +> 如: {name:"红色",value:"我是红色字",prop:"colord",extend:"red"} \ No newline at end of file diff --git a/通用表单组件.md b/通用表单组件.md new file mode 100644 index 0000000..205e44c --- /dev/null +++ b/通用表单组件.md @@ -0,0 +1,157 @@ +# 通用表单组件 + +> + 将表单抽象为配置数据,再使用本组件进行还原 + 用例:\resource\components\testCase\mobile\common.formComponents.Form.js + 可使用 /test/common.FormComponents.Form 路由在项目中查看 +> 组件显示为三种样式 +* common/formComonents/Form //在模态窗使用 +* common/formComonents/FormInPage //在普通页面使用 +* common/formComonents/FormInGrid //在回单页面使用 +### 支持表单类型 + +* text +* password +* radio +* select +* checkbox +* textarea +* date +* datetime +* range +* tree +* scan +* photo +* locate +* custom +### 通用属性 +* label 表单项显示名称 +* value 表单项值 +* valid 表单项验证规则 +* show 表单项显示条件 +text,password,date,datetime,tree 具有的属性 + name,placeholder,maxlength,readonly,disabled + + +### date,datetime允许设置一个valueTemplate属性来格式化日期 +* 默认 date: yyyy-MM-dd +* 默认 dateTime : yyyy-MM-dd hh:mm:ss + +### select,radio,checkbox具有的属性 +* options: Array +* value : String +* label : String +* selected : Boolean +> 如果组件本身具有value,则抛弃option的selected属性 +* 支持异步获取options +* 当表单项本身没有配置options,且配置了config时触发异步加载options +> + { + "name":"ChangeOper", + "label":"改派人员", + "type":"select", + "valid":"required", + "config":{ + "url":"/mop/xxxx/xxx?xxx=xxx", + "name":"UserName", + "value":"UserId" + } + } + +### tree具有的属性 +* root : 根节点ID +* url : 树url +* idKey : 主键字段名 +* pidKey : 父节点字段名 default:parentId +* valueKey : 供显示的名字 default:name +* isLeaf : 是否叶子节点判断 Function,入参节点数据,返回true false +* async : 是否异步树 +* 如果是异步树,控件会自动将idKey指定的值作为参数查询下级节点,不需要拼在url上 +* 如果确实需要默认查一个节点,请设置root属性的值 +> 例: +> + { + "name":"ChangeOper", + "label":"转派人员", + "type":"tree", + "valid":"required", + //配置一个模板,提交的值为模板生成的数据.否则直接取idKey所表示的数据 + //是一句js表达式,可使用item对象访问当前节点数据 + "valueTemplate":"item.ParentOrgId+'#'+item.OrgId+'#'+item.OrgName", + "config":{ + "url":"/url/urlxxxx?ccc=bbb&orgid=长沙", + "idKey":"OrgId", + "pidKey":"ParentOrgId", + "valueKey":"OrgName", + "async":true, + "isLeaf":"item.OrgType==='USER'" + } + } + +# 表单的交互方法 +### 可向表单组件广播以下事件 +* getValue(callback) 返回表单数据,不验证 +* validate(callback,errorCallback) 验证表单,Promise方法,全部验证通过则resolve表单数据,否则reject错误 +* setAttr(name,attr,value) +> + name : 表单项name + attr : 表单项属性 + value : 表单项属性的值 + 如 + this.$broadcast("username","value","sa") + 除非很清楚自己在干什么,否则不要使用 + +### 可监听表单组件冒泡的事件 +* change(form) +> 当表单发生变化时冒泡该事件 + +* changeValue(name,oldValue,newValue) +> 当有表单项值发生改变时冒泡该事件。配合setAttr可实现表单项关联 + +# 自定义表单项 类型为custom +* 允许自行实现一个组件,作为表单项的选择窗口 +* 组件可以配置一些props获得当前表单的一些上下文信息 +* getFormValues:Function 返回当前表单的值 +* getConfig 返回当前表单项配置 +* getDialog 返回当前模态窗实例 + +* 如果配置了按钮(默认有按钮),组件需要实现一个submit方法,返回一个promise,返回值是一个包含 name,value 字段的对象 +* 如果没有配置按钮,组件需要调模态窗的close方法,将返回值传入。如:this.getDialog().close({name:"1",value:"2"}) + +> + { + "name" : "test", + "label" : "自定义表单项", + "type" : "custom", + "component" : "./../resource/components/testCase/mobile/ExampleFormMemberComponent" + }, + { + "name" : "test1", + "label" : "选择地址", + "type" : "custom", + "component" : "./openBill/SelectResAddressForm",//自定义组件地址 + "config" : { + "showBtn" : false,//弹出窗是否显示提交按钮 + "btnText" : "确定选择",//弹出窗按钮文字 + "selectText" : "选择地址"//选择按钮文字 + }, + "data" : { + "SpecialtyId" : "11111111" + } + } + +### 表单验证属性规则: +* url +* base64 +* ip +* email +* numeric +* integer +* required +* regex(%5E((http%7Chttps%7Cftp%7Cvm)%3A%2F%2F)) //自定义正则 因正则特殊字符较多难以处理,需要先encodeURIComponent处理 +* range(7,8)//长度在7-8 +* async('/xxxx.do')//异步验证 + +>支持管道式组合验证 如 +>valid:"required|url|range(7,8)|async('/xxxx.do')" +