1 /** 2 * 3 * 业务流组件 4 * @fileOverView core/process 5 * @author <a href="mailto:zhang.gd@foxmail.com">Zhang Guangda</a> 6 * @date 2012-10-25 7 */ 8 define("core/process", function() { 9 /** 10 * 公用储存数据 11 * @type {Object} 12 */ 13 var processData = {}; 14 15 /** 16 * @class 流程组件 17 */ 18 $we.process = { 19 /** 20 * 设置数据 21 * @param {string} name 数据名称 22 * @param {mixed} data 数据 23 */ 24 setData: function(name, data) { 25 processData[name] = data; 26 }, 27 /** 28 * 获取数据 29 * @param {string} name 数据名称 30 * @return {mixed} 数据 31 */ 32 getData: function(name) { 33 return processData[name]; 34 }, 35 /** 36 * 清空数据 37 */ 38 clearData: function() { 39 processData = {}; 40 }, 41 /** 42 * 通过ajax请求获取需要的业务数据 43 * @param {array} needData 业务数据的名称,数组 44 * @param {function} 回调函数 45 */ 46 getFromAjax: function(needData, cb) { 47 if (!$.isArray(needData) || needData.length == 0) { 48 cb(); 49 return; 50 } 51 52 if (this.bGettingFromAjax) return; 53 this.bGettingFromAjax = true; 54 55 var me = this, 56 reqData = { 57 attr: needData.join(",") 58 }; 59 if ($we.process.getData("sdid")) { 60 reqData.sdid = $we.process.getData("sdid"); 61 } 62 $we.utils.request($we.conf.ENV.__ACCOUNT_INFO_API, reqData, 63 function(data) { 64 var bAllGot = false; 65 if (data && typeof data.data == "object") { 66 bAllGot = true; 67 for (var i=0, len=needData.length; i<len; ++i) { 68 if (typeof data.data[needData[i]] != "undefined") { 69 $we.process.setData(needData[i], data.data[needData[i]]); 70 } else { 71 bAllGot = false; 72 } 73 } 74 } 75 if (!bAllGot) { 76 $we.comp.alert("系统繁忙,请稍后再试!"); 77 me.bGettingFromAjax = false; 78 return; 79 } 80 cb(); 81 me.bGettingFromAjax = false; 82 }, function(data) { 83 $we.comp.alert(data.msg); 84 me.bGettingFromAjax = false; 85 }, "GET", true); 86 }, 87 /** 88 * 是否是关键流程 89 * @param {string} url 请求url 90 * @return {boolean} true/false 91 */ 92 inKeyProcess: function(url) { 93 url = url.replace(/http:\/\/.*?\/([^\?]*)\??.*/, '$1'); 94 if ($.inArray(url, [ 95 'ajaxVcode/checkMobile' 96 ]) !== -1) return true; 97 return false; 98 }, 99 /** 100 * 使用某个流程 101 * @param {String} name 流程名称 102 * @param {Object} data 流程传参 103 * @param {Function} cb 回调函数 104 * @param {Object} processConf 流程配置 105 */ 106 use: function(name, data, cb, processConf) { 107 if (!$we.process.config[name]) return; 108 var biz = $.extend(true, {}, $we.process.config[name]), 109 confInit = biz.init || $we.emptyFunction, 110 dataNeedsAjax = []; 111 if (typeof data == "object") { 112 // 将组件调用时传入的数据写入业务流数据中 113 for (var i in data) { 114 if (typeof $we.process.dataConfig[i] != "undefined") 115 $we.process.setData(i, data[i]); 116 } 117 } else { 118 data = {}; 119 } 120 // 多账号体系下传递进来的sdid 121 if (data.sdid) $we.process.setData("sdid", data.sdid); 122 // 流程组件的展示方式,默认不传 123 if (processConf) { 124 for (var i in processConf) { 125 biz.config[i] = processConf[i]; 126 } 127 } 128 129 if (typeof cb === "function") 130 biz.success = cb; 131 132 if (!biz.success) 133 biz.success = $we.emptyFunction; 134 135 // 整理一下processes 136 if ($.isArray(biz.processes)) { 137 var p_params = biz.processes[biz.processes.length - 1].params; 138 if (p_params) { 139 if (!p_params.success) 140 p_params.success = function() {biz.success(); }; 141 } else { 142 biz.processes[biz.processes.length - 1].params = { 143 success: function() {biz.success(); } 144 }; 145 } 146 } 147 148 /** 149 * 设置流程的id 150 */ 151 $we.process.setData("id", $we.conf.RUNTIME.__RANDOMSEED.toString() + (+new Date).toString()); 152 /** 153 * 设置流程名称 154 */ 155 $we.process.setData("flow", biz.config.flow); 156 157 // 判断所需要的数据中,是否存在 组件未传入,且页面中不存在的数据 158 // 如果有这种数据,将它列入需要ajax请求获得的数组中 159 for (var i = 0; i < biz.data.length; ++i) { 160 if (!data[biz.data[i]] && typeof $we.process.getData(biz.data[i]) == "undefined") 161 dataNeedsAjax.push(biz.data[i]); 162 } 163 164 // 请求ajax接口,成功后回调 165 $we.process.getFromAjax(dataNeedsAjax, function() { 166 confInit(biz); 167 $we.widget.add("process.ui", biz.processes, biz.config).start(); 168 }); 169 } 170 }; 171 172 /** 173 * accountInfo的ajax中支持的数据字段 174 * @type {Object} 175 */ 176 $we.process.dataConfig = { 177 "phone": 1, // 单账号体系下,当前登录账号所绑定的安全手机 178 "phone_passed": 1, // 单账号体系下,当前登录账号的安全手机是否已经通过验证期 179 "email": 1, // 单账号体系下,当前登录账号所绑定的邮箱 180 "safety_verify": 1, // 单账号体系下,当前登录账号是否绑定了安全设备 181 "new_comer": 1, // 单账号体系下,是否是新来的,(DEPRECATED,不要使用) 182 "is_mobile_acc": 1, // 单账号体系下,当前登录账号的是否手机账号; 多账号体系下,根据sdid获取该账号是否手机账号 183 "is_last_account": 1, // 多账号体系下,根据sdid获取该账号是否是该群最后一个账号 184 "display_name": 1, // 单账号体系下,当前登录账号的display_name; 多账号体系下,根据sdid获取该账号的display_name 185 "alias": 1, // 单账号体系下,当前登录账号的别名; 多账号体系下,根据sdid获取该账号的别名 186 "check_change_mobile": 1, // 单账号体系下,是否允许该账号更换手机 187 "captcha_key": 1, // 风控验证码session key 188 "group": 1, // 多账号体系下,账号群的手机号码; 多账号体系下,根据sdid获取该账号是否是该群最后的一个账号 189 "group_check_bind_account": 1, // 多账号体系下,是否允许该群绑定账号 190 "group_check_change_mobile": 1, // 多账号体系下,是否允许该群更换手机 191 "volume":1,//SDID下的点劵余额 192 "group_transfer_upper":1,//SDID所在群的当日转账上限 193 "group_transfer_quota":1//SDID所在群当日转账剩余额度 194 }; 195 196 /** 197 * process config 198 * @type {Object} 199 */ 200 $we.process.config = {}; 201 202 return $we.process; 203 204 });