Main.js 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888
  1. MWF.xApplication.Collect.options.multitask = false;
  2. MWF.require("MWF.xDesktop.Access", null, false);
  3. MWF.xDesktop.requireApp("Collect", "Actions.RestActions", null, false);
  4. MWF.xApplication.Collect.Main = new Class({
  5. Extends: MWF.xApplication.Common.Main,
  6. Implements: [Options, Events],
  7. options: {
  8. "style": "default",
  9. "name": "Collect",
  10. "icon": "icon.png",
  11. "width": "400",
  12. "height": "500",
  13. "isResize": false,
  14. "isMax": false,
  15. "title": MWF.xApplication.Collect.LP.title
  16. },
  17. onQueryLoad: function(){
  18. this.lp = MWF.xApplication.Collect.LP;
  19. this.action = MWF.Actions.get("x_program_center");
  20. //this.action = new MWF.xApplication.Collect.Actions.RestActions();
  21. this.connected = false;
  22. this.login = false;
  23. this.connectChecked = false;
  24. this.loginChecked = false;
  25. },
  26. loadWindow: function(isCurrent){
  27. this.fireAppEvent("queryLoadWindow");
  28. this.window = new MWF.xDesktop.WindowTransparent(this, {"container": this.desktop.node});
  29. this.fireAppEvent("loadWindow");
  30. this.window.show();
  31. this.content = this.window.content;
  32. if (isCurrent) this.setCurrent();
  33. this.fireAppEvent("postLoadWindow");
  34. this.fireAppEvent("queryLoadApplication");
  35. this.loadApplication(function(){
  36. this.fireAppEvent("postLoadApplication");
  37. }.bind(this));
  38. },
  39. loadApplication: function(callback){
  40. if (!MWF.AC.isAdministrator()){
  41. try{
  42. this.close();
  43. }catch(e){};
  44. }else{
  45. this.node = new Element("div", {"styles": this.css.node}).inject(this.content);
  46. this.setNodeResize();
  47. this.node.addEvent("selectstart", function(e){e.target.setStyle("-webkit-user-select", "none")}.bind(this));
  48. this.loadContent();
  49. this.addEvent("queryclose", function(){
  50. if (this.registerForm){
  51. if (this.registerForm.codeNextTimer){
  52. window.clearTimeout(this.registerForm.codeNextTimer);
  53. }
  54. }
  55. }.bind(this));
  56. }
  57. },
  58. loadContent: function(){
  59. this.titleAreaNode = new Element("div", {"styles": this.css.titleAreaNode}).inject(this.node);
  60. this.backNode = new Element("div", {"styles": this.css.backNode}).inject(this.titleAreaNode);
  61. this.closeNode = new Element("div", {"styles": this.css.closeNode}).inject(this.titleAreaNode);
  62. this.closeNode.addEvent("click", this.close.bind(this));
  63. this.titleNode = new Element("div", {"styles": this.css.titleNode, "text": this.lp.title}).inject(this.titleAreaNode);
  64. this.checkContentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node);
  65. this.loginContentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node);
  66. this.modifyContentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node);
  67. this.registerContentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.node);
  68. this.check = new MWF.xApplication.Collect.Check(this);
  69. this.showContent("checkContentNode");
  70. },
  71. showContent: function(node){
  72. this.checkContentNode.setStyle("display", "none");
  73. this.loginContentNode.setStyle("display", "none");
  74. this.modifyContentNode.setStyle("display", "none");
  75. this.registerContentNode.setStyle("display", "none");
  76. this[node].setStyle("display", "block");
  77. },
  78. setNodeResize: function(){
  79. this.setNodePositionAndSizeFun = this.setNodePositionAndSize.bind(this);
  80. this.setNodePositionAndSizeFun();
  81. $(window).addEvent("resize", this.setNodePositionAndSizeFun);
  82. this.addEvent("queryClose", function(){
  83. $(window).removeEvent("resize", this.setNodePositionAndSizeFun);
  84. }.bind(this));
  85. },
  86. setNodePositionAndSize: function(){
  87. this.node.position({
  88. relativeTo: this.desktop.node,
  89. position: 'center',
  90. edge: 'center'
  91. });
  92. }
  93. });
  94. MWF.xApplication.Collect.Check = new Class({
  95. initialize: function(collect){
  96. this.collect = collect;
  97. this.lp = this.collect.lp;
  98. this.css = this.collect.css;
  99. this.contentNode = this.collect.checkContentNode;
  100. this.action = this.collect.action;
  101. this.load();
  102. },
  103. load: function(){
  104. this.connectChecked = true;
  105. this.loginChecked = false;
  106. this.statusConnectNode = new Element("div", {"styles": this.css.statusConnectNode}).inject(this.contentNode);
  107. this.setStatusConnectNode();
  108. this.statusLoginNode = new Element("div", {"styles": this.css.statusLoginNode}).inject(this.contentNode);
  109. this.setStatusLoginNode();
  110. this.actionsNode = new Element("div", {"styles": this.css.actionsNode}).inject(this.contentNode);
  111. },
  112. setActionsNode: function(){
  113. if (this.connectChecked && this.loginChecked) {
  114. this.actionsNode.empty();
  115. if (this.connected && this.login){
  116. this.setLoginInfor();
  117. }else if (this.connected && !this.login){
  118. this.setNotLoginInfor();
  119. }else if (!this.connected && !this.login){
  120. this.setDisconnectedInfor();
  121. }else{
  122. //impossible
  123. }
  124. }
  125. },
  126. setLoginInfor: function(){
  127. new Element("div", {"styles": this.css.loginInfor, "html": this.lp.connectedAndLogin}).inject(this.actionsNode);
  128. new Element("div", {"styles": this.css.loginInfor, "html": this.lp.modifyAccount}).inject(this.actionsNode);
  129. this.modifyAccountAction = new Element("div", {"styles": this.css.inforAction, "html": this.lp.modifyAccountAction}).inject(this.actionsNode);
  130. this.modifyAccountAction.addEvent("click", this.showModifyForm.bind(this));
  131. new Element("div", {"styles": this.css.loginInfor, "html": this.lp.loginAccount}).inject(this.actionsNode);
  132. this.loginAccountAction = new Element("div", {"styles": this.css.inforAction, "html": this.lp.login}).inject(this.actionsNode);
  133. this.loginAccountAction.addEvent("click", this.showLoginForm.bind(this));
  134. },
  135. setNotLoginInfor: function(){
  136. new Element("div", {"styles": this.css.notLoginInfor, "html": this.lp.notLogin}).inject(this.actionsNode);
  137. new Element("div", {"styles": this.css.notLoginInfor, "html": this.lp.notLoginInfoLogin}).inject(this.actionsNode);
  138. this.loginAction = new Element("div", {"styles": this.css.inforAction, "html": this.lp.login}).inject(this.actionsNode);
  139. new Element("div", {"styles": this.css.notLoginInfor, "html": this.lp.notLoginInfoRegister}).inject(this.actionsNode);
  140. this.registerAction = new Element("div", {"styles": this.css.inforAction, "html": this.lp.register}).inject(this.actionsNode);
  141. this.loginAction.addEvent("click", this.showLoginForm.bind(this));
  142. this.registerAction.addEvent("click", this.showRegisterForm.bind(this));
  143. //this.modifyAccountAction = new Element("div", {"styles": this.css.modifyAccountAction, "html": this.lp.modifyAccountAction}).inject(this.actionsNode);
  144. },
  145. setDisconnectedInfor: function(){
  146. new Element("div", {"styles": this.css.loginInfor, "html": this.lp.disconnect}).inject(this.actionsNode);
  147. new Element("div", {"styles": this.css.disconnectInfor, "html": this.lp.disconnectInfo}).inject(this.actionsNode);
  148. },
  149. setStatusConnectNode: function(){
  150. this.statusConnectNode.empty();
  151. this.setStatusConnectNodeContent();
  152. this.action.collectConnected(function(json){
  153. if (json.data.value){
  154. this.setStatusConnectSuccess();
  155. this.connected = true;
  156. }else{
  157. this.setStatusConnectFailure();
  158. this.connected = false;
  159. }
  160. this.connectChecked = true;
  161. this.setActionsNode();
  162. }.bind(this), function(){
  163. this.setStatusConnectFailure();
  164. this.connected = false;
  165. this.connectChecked = true;
  166. this.setActionsNode();
  167. }.bind(this));
  168. },
  169. setStatusConnectNodeContent: function(){
  170. this.statusConnectNode.empty();
  171. this.statusConnectIconsNode = new Element("div", {"styles": this.css.statusConnectIconsNode}).inject(this.statusConnectNode);
  172. this.statusConnectIconCenterNode = new Element("div", {"styles": this.css.statusConnectIconCenterNode}).inject(this.statusConnectIconsNode);
  173. this.statusConnectIconConnectNode = new Element("div", {"styles": this.css.statusConnectIconConnectNode}).inject(this.statusConnectIconsNode);
  174. this.statusConnectIconCollectNode = new Element("div", {"styles": this.css.statusConnectIconCollectNode}).inject(this.statusConnectIconsNode);
  175. this.statusConnectTextNode = new Element("div", {"styles": this.css.statusConnectTextNode, "text": this.lp.checking}).inject(this.statusConnectNode);
  176. },
  177. setStatusConnectSuccess: function(){
  178. this.statusConnectIconConnectNode.setStyles(this.css.statusConnectIconConnectedNode);
  179. this.statusConnectTextNode.set("text", this.lp.collectConnected);
  180. },
  181. setStatusConnectFailure: function(){
  182. this.statusConnectIconConnectNode.setStyles(this.css.statusConnectIconDisconnectNode);
  183. this.statusConnectTextNode.set("text", this.lp.collectDisconnect);
  184. },
  185. setStatusLoginNode: function(){
  186. this.statusLoginNode.empty();
  187. this.setStatusLoginNodeContent();
  188. this.action.collectValidate(function(json){
  189. if (json.data.value){
  190. this.setStatusLoginSuccess();
  191. this.login = true;
  192. }else{
  193. this.setStatusLoginFailure();
  194. this.login = false;
  195. }
  196. this.recheckActionNode = new Element("div", {"styles": this.css.recheckActionNode, "text": this.lp.recheck}).inject(this.statusLoginTextNode, "before");
  197. this.recheckActionNode.addEvent("click", function(){this.recheck();}.bind(this));
  198. this.loginChecked = true;
  199. this.setActionsNode();
  200. }.bind(this), function(){
  201. this.setStatusLoginFailure();
  202. this.login = false;
  203. this.recheckActionNode = new Element("div", {"styles": this.css.recheckActionNode, "text": this.lp.recheck}).inject(this.statusLoginTextNode, "before");
  204. this.recheckActionNode.addEvent("click", function(){this.recheck();}.bind(this));
  205. this.loginChecked = true;
  206. this.setActionsNode();
  207. }.bind(this));
  208. },
  209. setStatusLoginNodeContent: function(){
  210. this.statusLoginIconsNode = new Element("div", {"styles": this.css.statusLoginIconsNode}).inject(this.statusLoginNode);
  211. this.statusLoginIconCenterNode = new Element("div", {"styles": this.css.statusLoginIconCenterNode}).inject(this.statusLoginIconsNode);
  212. this.statusLoginIconConnectNode = new Element("div", {"styles": this.css.statusLoginIconConnectNode}).inject(this.statusLoginIconsNode);
  213. this.statusLoginIconCollectNode = new Element("div", {"styles": this.css.statusLoginIconCollectNode}).inject(this.statusLoginIconsNode);
  214. this.statusLoginTextNode = new Element("div", {"styles": this.css.statusLoginTextNode, "text": this.lp.checking}).inject(this.statusLoginNode);
  215. },
  216. setStatusLoginSuccess: function(){
  217. this.statusLoginIconConnectNode.setStyles(this.css.statusLoginIconConnectedNode);
  218. this.statusLoginTextNode.set("text", this.lp.collectLogin);
  219. },
  220. setStatusLoginFailure: function(){
  221. this.statusLoginIconConnectNode.setStyles(this.css.statusLoginIconDisconnectNode);
  222. this.statusLoginTextNode.set("text", this.lp.collectNotLogin);
  223. },
  224. recheck: function(){
  225. this.contentNode.empty();
  226. this.load();
  227. },
  228. showModifyForm: function(){
  229. if (!this.collect.modifyForm){
  230. this.collect.modifyForm = new MWF.xApplication.Collect.ModifyForm(this.collect);
  231. }
  232. this.collect.modifyForm.show();
  233. },
  234. showLoginForm: function(){
  235. if (!this.collect.loginForm){
  236. this.collect.loginForm = new MWF.xApplication.Collect.LoginForm(this.collect);
  237. }
  238. this.collect.loginForm.show();
  239. },
  240. showRegisterForm: function(){
  241. if (!this.collect.registerForm){
  242. this.collect.registerForm = new MWF.xApplication.Collect.RegisterForm(this.collect);
  243. }
  244. this.collect.registerForm.show();
  245. }
  246. });
  247. MWF.xApplication.Collect.LoginForm = new Class({
  248. initialize: function(collect){
  249. this.collect = collect;
  250. this.lp = this.collect.lp;
  251. this.css = this.collect.css;
  252. this.contentNode = this.collect.loginContentNode;
  253. this.action = this.collect.action;
  254. this.load();
  255. },
  256. load: function(){
  257. this.usernameNode = new Element("div", {"styles": this.css.loginUsernameNode}).inject(this.contentNode);
  258. var icon = new Element("div", {"styles": this.css.loginUsernameIconNode}).inject(this.usernameNode);
  259. var inputArea = new Element("div", {"styles": this.css.loginInputAreaNode}).inject(this.usernameNode);
  260. this.usernameInput = new Element("input", {"styles": this.css.loginInputNode, "type": "text", "value": this.lp.username}).inject(inputArea);
  261. var errorNode = new Element("div", {"styles": this.css.loginErrorNode}).inject(this.contentNode);
  262. this.passwordNode = new Element("div", {"styles": this.css.loginPasswordNode}).inject(this.contentNode);
  263. icon = new Element("div", {"styles": this.css.loginPasswordIconNode}).inject(this.passwordNode);
  264. inputArea = new Element("div", {"styles": this.css.loginInputAreaNode}).inject(this.passwordNode);
  265. this.passwordInput = new Element("input", {"styles": this.css.loginInputNode, "type": "password", "value": this.lp.password}).inject(inputArea);
  266. errorNode = new Element("div", {"styles": this.css.loginErrorNode}).inject(this.contentNode);
  267. this.setInputEvent();
  268. this.setDefaultValue();
  269. this.loginActionNode = new Element("div", {"styles": this.css.loginActionNode, "text": this.lp.login}).inject(this.contentNode);
  270. this.loginActionNode.addEvent("click", this.login.bind(this));
  271. this.otherActionNode = new Element("div", {"styles": this.css.loginOtherActionNode}).inject(this.contentNode);
  272. this.registerActionNode = new Element("div", {"styles": this.css.loginRegisterActionNode, "text": this.lp.register}).inject(this.otherActionNode);
  273. this.forgetActionNode = new Element("div", {"styles": this.css.loginForgetActionNode, "text": this.lp.forget}).inject(this.otherActionNode);
  274. this.setOtherActionEvent();
  275. this.errorNode = new Element("div", {"styles": this.css.loginErrorNode}).inject(this.contentNode);
  276. },
  277. login: function(){
  278. if (!this.isLogining){
  279. this.loginActionNode.set("text", this.lp.logining);
  280. this.isLogining = true;
  281. this.errorNode.set("text", "");
  282. var user = this.usernameInput.get("value");
  283. var pass = this.passwordInput.get("value");
  284. var errorText = "";
  285. this.checkLogin = true;
  286. if (!user || user==this.lp.username) this.errorUsername(this.lp.errorUsername);
  287. if (!pass || pass==this.lp.password) this.errorPassword(this.lp.errorPassword);
  288. if (this.checkLogin){
  289. this.action.collectValidateInput({"name": user, "password": pass}, function(json){
  290. if (json.data.value){
  291. this.action.updateCollect({"name": user, "password": pass, "enable": true}, function(json){
  292. this.loginCanceled();
  293. this.collect.showContent("checkContentNode");
  294. this.collect.backNode.setStyle("display", "none");
  295. this.check.recheck();
  296. }.bind(this), function(xhr, text, error){
  297. var errorText = error+":"+text;
  298. if (xhr) errorText = xhr.responseText;
  299. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  300. this.loginCanceled();
  301. }.bind(this));
  302. }else{
  303. this.errorNode.set("text", this.lp.loginError);
  304. this.loginCanceled();
  305. }
  306. }.bind(this), function(xhr, text, error){
  307. if (xhr){
  308. var json = JSON.decode(xhr.responseText);
  309. this.errorNode.set("text", json.message);
  310. }else{
  311. var errorText = error+":"+text;
  312. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  313. }
  314. this.loginCanceled();
  315. }.bind(this));
  316. }
  317. }
  318. },
  319. loginCanceled: function(){
  320. this.loginActionNode.set("text", this.lp.login);
  321. this.isLogining = false;
  322. },
  323. errorUsername: function(text){
  324. if (text){
  325. this.usernameNode.setStyles(this.css.loginUsernameNode_error);
  326. this.checkLogin = false;
  327. }else{
  328. this.usernameNode.setStyles(this.css.loginUsernameNode);
  329. }
  330. this.usernameNode.getNext().set("text", text);
  331. },
  332. errorPassword: function(text){
  333. if (text){
  334. this.passwordNode.setStyles(this.css.loginPasswordNode_error);
  335. this.checkLogin = false;
  336. }else{
  337. this.passwordNode.setStyles(this.css.loginPasswordNode);
  338. }
  339. this.passwordNode.getNext().set("text", text);
  340. },
  341. show: function(){
  342. this.collect.showContent("loginContentNode");
  343. this.collect.backNode.setStyle("display", "block");
  344. this.collect.backNode.removeEvents("click");
  345. this.collect.backNode.addEvent("click", function(){
  346. this.collect.showContent("checkContentNode");
  347. this.collect.backNode.setStyle("display", "none");
  348. }.bind(this));
  349. this.setDefaultValue();
  350. },
  351. setInputEvent: function(){
  352. this.usernameInput.addEvents({
  353. "focus": function(){
  354. this.errorUsername("");
  355. this.usernameNode.setStyles(this.css.loginUsernameNode_over);
  356. if (this.usernameInput.get("value")==this.lp.username){
  357. this.usernameInput.set("value", "");
  358. }
  359. }.bind(this),
  360. "blur": function(){
  361. this.usernameNode.setStyles(this.css.loginUsernameNode);
  362. if (!this.usernameInput.get("value")){
  363. this.usernameInput.set("value", this.lp.username);
  364. this.errorUsername(this.lp.errorUsername);
  365. }
  366. }.bind(this),
  367. "selectstart": function(e){e.stopPropagation();}
  368. });
  369. this.passwordInput.addEvents({
  370. "focus": function(){
  371. this.errorPassword("");
  372. this.passwordNode.setStyles(this.css.loginPasswordNode_over);
  373. if (this.passwordInput.get("value")==this.lp.password){
  374. this.passwordNode.getNext().set("text", "");
  375. this.passwordInput.set("value", "");
  376. }
  377. }.bind(this),
  378. "blur": function(){
  379. this.passwordNode.setStyles(this.css.loginPasswordNode);
  380. if (!this.passwordInput.get("value")){
  381. this.errorPassword(this.lp.errorPassword);
  382. this.passwordInput.set("value", this.lp.password);
  383. }
  384. }.bind(this),
  385. "selectstart": function(e){e.stopPropagation();}
  386. });
  387. },
  388. setDefaultValue: function(){
  389. this.action.getCollectConfig(function(json){
  390. if (json.data.name) this.usernameInput.set("value", json.data.name);
  391. if (json.data.password) this.passwordInput.set("value", json.data.password);
  392. }.bind(this));
  393. },
  394. setOtherActionEvent: function(){
  395. this.registerActionNode.addEvents({
  396. "mouseover": function(){this.registerActionNode.setStyles(this.css.loginRegisterActionNode_over);}.bind(this),
  397. "mouseout": function(){this.registerActionNode.setStyles(this.css.loginRegisterActionNode);}.bind(this),
  398. "click": this.showRegisterForm.bind(this)
  399. });
  400. this.forgetActionNode.addEvents({
  401. "mouseover": function(){this.forgetActionNode.setStyles(this.css.loginForgetActionNode_over);}.bind(this),
  402. "mouseout": function(){this.forgetActionNode.setStyles(this.css.loginForgetActionNode);}.bind(this),
  403. "click": this.showModifyForm.bind(this)
  404. });
  405. },
  406. showModifyForm: function(){
  407. if (!this.collect.modifyForm){
  408. this.collect.modifyForm = new MWF.xApplication.Collect.ModifyForm(this.collect);
  409. }
  410. this.collect.modifyForm.show();
  411. },
  412. showRegisterForm: function(){
  413. if (!this.collect.registerForm){
  414. this.collect.registerForm = new MWF.xApplication.Collect.RegisterForm(this.collect);
  415. }
  416. this.collect.registerForm.show();
  417. }
  418. });
  419. MWF.xApplication.Collect.RegisterForm = new Class({
  420. initialize: function(collect){
  421. this.collect = collect;
  422. this.lp = this.collect.lp;
  423. this.css = this.collect.css;
  424. this.contentNode = this.collect.registerContentNode;
  425. this.action = this.collect.action;
  426. this.load();
  427. },
  428. createNode: function(iconCss, text, type){
  429. var node = new Element("div", {"styles": this.css.registerAreaNode}).inject(this.contentNode);
  430. var icon = new Element("div", {"styles": this.css[iconCss]}).inject(node);
  431. var inputCheckArea = new Element("div", {"styles": this.css.registerCheckIconNode}).inject(node);
  432. var inputArea = new Element("div", {"styles": this.css.registerInputAreaNode}).inject(node);
  433. var inputNode = new Element("input", {"styles": this.css.registerInputNode, "type": type || "text", "value": this.lp[text]}).inject(inputArea);
  434. var errorNode = new Element("div", {"styles": this.css.registerErrorNode}).inject(this.contentNode);
  435. return node;
  436. },
  437. load: function(){
  438. this.contentNode.setStyle("padding-top", "30px");
  439. this.usernameNode = this.createNode("registerUsernameIconNode", "username");
  440. this.usernameInput = this.usernameNode.getElement("input");
  441. this.mobileNode = this.createNode("registerMobileIconNode", "mobile");
  442. this.mobileInput = this.mobileNode.getElement("input");
  443. this.codeNode = this.createNode("registerCodeIconNode", "code");
  444. this.codeInput = this.codeNode.getElement("input");
  445. this.passwordNode = this.createNode("registerPasswordIconNode", "password", "password");
  446. this.passwordInput = this.passwordNode.getElement("input");
  447. this.setInputEvent();
  448. this.registerActionNode = new Element("div", {"styles": this.css.registerActionNode, "text": this.lp.register}).inject(this.contentNode);
  449. this.registerActionNode.addEvent("click", this.register.bind(this));
  450. //this.otherActionNode = new Element("div", {"styles": this.css.loginOtherActionNode}).inject(this.contentNode);
  451. //this.registerActionNode = new Element("div", {"styles": this.css.loginRegisterActionNode, "text": this.lp.register}).inject(this.otherActionNode);
  452. //this.forgetActionNode = new Element("div", {"styles": this.css.loginForgetActionNode, "text": this.lp.forget}).inject(this.otherActionNode);
  453. //this.setOtherActionEvent();
  454. this.errorNode = new Element("div", {"styles": this.css.registerErrorNode}).inject(this.contentNode);
  455. },
  456. errorInput: function(node, text){
  457. if (text){
  458. node.setStyles(this.css.registerAreaNode_error);
  459. this.checkRegister = false;
  460. }else{
  461. node.setStyles(this.css.registerAreaNode_normal);
  462. }
  463. node.getNext().set("text", text);
  464. },
  465. setInputNodeEvent: function(node, input, text, errorText, name){
  466. input.addEvents({
  467. "focus": function(){
  468. this.errorInput(node, "");
  469. node.setStyles(this.css.registerAreaNode_over);
  470. if (input.get("value")==text) input.set("value", "");
  471. }.bind(this),
  472. "blur": function(){
  473. node.setStyles(this.css.registerAreaNode_normal);
  474. if (!input.get("value")) input.set("value", text);
  475. this[name+"Verification"]();
  476. //if (!input.get("value")){
  477. // input.set("value", text);
  478. // this.errorInput(node, errorText);
  479. //}
  480. }.bind(this),
  481. "selectstart": function(e){e.stopPropagation();}
  482. });
  483. },
  484. resetCodeNode: function(){
  485. this.codeAreaNode = new Element("div", {"styles": this.css.registerCodeAreaNode}).inject(this.codeNode, "before");
  486. this.codeNode.getNext().inject(this.codeAreaNode);
  487. this.codeNode.inject(this.codeAreaNode, "top");
  488. this.codeNode.setStyles({
  489. "width": "auto",
  490. "margin": "0px 160px 0px 0px"
  491. });
  492. this.getCodeAtionNode = new Element("div", {"styles": this.css.registerGetCodeAtionNode, "text": this.lp.getCodeAtion}).inject(this.codeAreaNode, "top");
  493. this.getCodeAtionNode.addEvent("click", this.getCode.bind(this));
  494. },
  495. getCodeNext: function(){
  496. this.getCodeAtionNode.setStyles(this.css.registerGetCodeAtionNode_next);
  497. this.getCodeAtionNode.set("text", this.lp.getCodeNext+"(60)");
  498. this.getCodeAtionNode.removeEvents("click");
  499. this.codeNextTimerCount = 60;
  500. },
  501. getCodeNextTimer: function(){
  502. this.codeNextTimerCount--;
  503. if (this.codeNextTimerCount>0){
  504. this.getCodeAtionNode.set("text", this.lp.getCodeNext+"("+this.codeNextTimerCount+")");
  505. this.codeNextTimer = window.setTimeout(function(){
  506. this.getCodeNextTimer();
  507. }.bind(this), 1000);
  508. }else{
  509. this.regetCode();
  510. }
  511. },
  512. regetCode: function(){
  513. this.getCodeAtionNode.setStyles(this.css.registerGetCodeAtionNode);
  514. this.getCodeAtionNode.set("text", this.lp.getCodeAtion);
  515. this.getCodeAtionNode.addEvent("click", this.getCode.bind(this));
  516. this.codeNextTimer = null;
  517. },
  518. getCode: function(){
  519. if (this.mobileVerification()){
  520. this.getCodeNext();
  521. this.action.getCode(this.mobileInput.get("value"), function(json){
  522. this.codeNextTimer = window.setTimeout(function(){
  523. this.getCodeNextTimer();
  524. }.bind(this), 1000);
  525. }.bind(this), function(xhr, text, error){
  526. if (xhr){
  527. var json = JSON.decode(xhr.responseText);
  528. this.errorNode.set("text", json.message);
  529. }else{
  530. var errorText = error+":"+text;
  531. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  532. }
  533. this.regetCode();
  534. }.bind(this));
  535. }
  536. },
  537. setInputEvent: function(){
  538. this.setInputNodeEvent(this.usernameNode, this.usernameInput, this.lp.username, this.lp.errorUsername, "username");
  539. this.setInputNodeEvent(this.passwordNode, this.passwordInput, this.lp.password, this.lp.errorPassword, "password");
  540. this.setInputNodeEvent(this.mobileNode, this.mobileInput, this.lp.mobile, this.lp.errorMobile, "mobile");
  541. this.setInputNodeEvent(this.codeNode, this.codeInput, this.lp.code, this.lp.errorCode, "code");
  542. this.resetCodeNode();
  543. },
  544. show: function(){
  545. this.collect.showContent("registerContentNode");
  546. this.collect.backNode.setStyle("display", "block");
  547. this.collect.backNode.removeEvents("click");
  548. this.collect.backNode.addEvent("click", function(){
  549. this.collect.showContent("checkContentNode");
  550. this.collect.backNode.setStyle("display", "none");
  551. }.bind(this));
  552. },
  553. registering: function(){
  554. this.registerActionNode.removeEvents("click");
  555. this.registerActionNode.set("text", this.lp.registering);
  556. },
  557. registered: function(){
  558. this.registerActionNode.addEvent("click", this.register.bind(this));
  559. this.registerActionNode.set("text", this.lp.register);
  560. },
  561. register: function(){
  562. var user = this.usernameInput.get("value");
  563. var mobile = this.mobileInput.get("value");
  564. var code = this.codeInput.get("value");
  565. var password = this.passwordInput.get("value");
  566. if (this.usernameVerification() & this.mobileVerification() & this.codeVerification() & this.passwordVerification()){
  567. this.registering();
  568. var data = {
  569. codeAnswer: code,
  570. mobile: mobile,
  571. name: user,
  572. password: password
  573. };
  574. this.action.createCollect(data, function(){
  575. this.action.updateCollect({"name": user, "password": password, "enable": true}, function(json){
  576. this.registered();
  577. this.collect.showContent("checkContentNode");
  578. this.collect.backNode.setStyle("display", "none");
  579. window.setTimeout(function(){
  580. this.check.recheck();
  581. }.bind(this), 1000);
  582. }.bind(this), function(xhr, text, error){
  583. var errorText = error+":"+text;
  584. if (xhr) errorText = xhr.responseText;
  585. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  586. this.registered();
  587. }.bind(this));
  588. }.bind(this), function(xhr, text, error){
  589. if (xhr){
  590. var json = JSON.decode(xhr.responseText);
  591. this.errorNode.set("text", json.message);
  592. }else{
  593. var errorText = error+":"+text;
  594. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  595. }
  596. this.registered();
  597. }.bind(this));
  598. }
  599. },
  600. passwordVerification: function(){
  601. var password = this.passwordInput.get("value");
  602. if (!password || password==this.lp.password){
  603. this.errorInput(this.passwordNode, this.lp.errorPassword);
  604. return false;
  605. }
  606. var flag = "";
  607. this.action.passwordValidate({"password": password}, function(json){
  608. if (json.data.value<4){
  609. flag = this.lp.errorPasswordRule;
  610. }
  611. }.bind(this), function(xhr, text, error){
  612. }.bind(this), false);
  613. if (flag){
  614. this.errorInput(this.passwordNode, flag);
  615. return false;
  616. }
  617. return true;
  618. },
  619. codeVerification: function(){
  620. var code = this.codeInput.get("value");
  621. if (!code || code==this.lp.mobile){
  622. this.errorInput(this.codeNode, this.lp.errorCode);
  623. return false;
  624. }
  625. return true;
  626. },
  627. usernameVerification: function(){
  628. var user = this.usernameInput.get("value");
  629. if (!user || user==this.lp.username){
  630. this.errorInput(this.usernameNode, this.lp.errorUsername);
  631. return false;
  632. }
  633. var flag = "";
  634. this.action.nameExist(user, function(json){
  635. if (json.data.value){
  636. flag = this.lp.usernameExisted;
  637. }
  638. }.bind(this), function(xhr, text, error){
  639. if (xhr){
  640. var json = JSON.decode(xhr.responseText);
  641. flag = json.message;
  642. //this.errorNode.set("text", json.message);
  643. }else{
  644. var errorText = error+":"+text;
  645. flag = this.lp.requestError+errorText;
  646. //MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  647. }
  648. }.bind(this), false);
  649. if (flag){
  650. this.errorInput(this.usernameNode, flag);
  651. return false;
  652. }
  653. return true;
  654. },
  655. mobileVerification: function(){
  656. var mobile = this.mobileInput.get("value");
  657. if (!mobile || mobile==this.lp.mobile){
  658. this.errorInput(this.mobileNode, this.lp.errorMobile);
  659. return false;
  660. }
  661. if (mobile.length!=11){
  662. this.errorInput(this.mobileNode, this.lp.errorMobile);
  663. return false;
  664. }
  665. return true;
  666. }
  667. });
  668. MWF.xApplication.Collect.ModifyForm = new Class({
  669. Extends: MWF.xApplication.Collect.RegisterForm,
  670. initialize: function(collect){
  671. this.collect = collect;
  672. this.lp = this.collect.lp;
  673. this.css = this.collect.css;
  674. this.contentNode = this.collect.modifyContentNode;
  675. this.action = this.collect.action;
  676. this.load();
  677. },
  678. load: function(){
  679. this.contentNode.setStyle("padding-top", "30px");
  680. this.usernameNode = this.createNode("registerUsernameIconNode", "username");
  681. this.usernameInput = this.usernameNode.getElement("input");
  682. this.mobileNode = this.createNode("registerMobileIconNode", "mobile");
  683. this.mobileInput = this.mobileNode.getElement("input");
  684. this.codeNode = this.createNode("registerCodeIconNode", "code");
  685. this.codeInput = this.codeNode.getElement("input");
  686. this.passwordNode = this.createNode("registerPasswordIconNode", "password", "password");
  687. this.passwordInput = this.passwordNode.getElement("input");
  688. this.setInputEvent();
  689. this.nextActionNode = new Element("div", {"styles": this.css.registerActionNode, "text": this.lp.modifyNextStep}).inject(this.contentNode);
  690. this.nextActionNode.addEvent("click", this.nextStep.bind(this));
  691. //this.otherActionNode = new Element("div", {"styles": this.css.loginOtherActionNode}).inject(this.contentNode);
  692. //this.registerActionNode = new Element("div", {"styles": this.css.loginRegisterActionNode, "text": this.lp.register}).inject(this.otherActionNode);
  693. //this.forgetActionNode = new Element("div", {"styles": this.css.loginForgetActionNode, "text": this.lp.forget}).inject(this.otherActionNode);
  694. //this.setOtherActionEvent();
  695. this.errorNode = new Element("div", {"styles": this.css.registerErrorNode}).inject(this.contentNode);
  696. this.passwordNode.setStyle("display", "none");
  697. this.passwordNode.getNext().setStyle("display", "none");
  698. this.setDefaultValue();
  699. },
  700. setDefaultValue: function(){
  701. this.action.getCollectConfig(function(json){
  702. if (json.data.name) this.usernameInput.set("value", json.data.name);
  703. }.bind(this));
  704. },
  705. nextStepWait: function(){
  706. this.nextActionNode.removeEvents("click");
  707. this.nextActionNode.set("text", this.lp.nextStepWait);
  708. this.errorNode.empty();
  709. },
  710. nextStepWaited: function(){
  711. this.nextActionNode.addEvent("click", this.nextStep.bind(this));
  712. this.nextActionNode.set("text", this.lp.modifyNextStep);
  713. },
  714. firstStep: function(){
  715. this.nextActionNode.addEvent("click", this.nextStep.bind(this));
  716. this.nextActionNode.set("text", this.lp.modifyNextStep);
  717. this.passwordNode.setStyle("display", "none");
  718. this.passwordNode.getNext().setStyle("display", "none");
  719. this.usernameNode.setStyle("display", "block");
  720. this.usernameNode.getNext().setStyle("display", "block");
  721. this.mobileNode.setStyle("display", "block");
  722. this.mobileNode.getNext().setStyle("display", "block");
  723. this.codeNode.getParent().setStyle("display", "block");
  724. this.codeNode.getNext().setStyle("display", "block");
  725. this.errorNode.empty();
  726. },
  727. nextStep: function(){
  728. var user = this.usernameInput.get("value");
  729. var mobile = this.mobileInput.get("value");
  730. var code = this.codeInput.get("value");
  731. if (this.usernameVerification() & this.mobileVerification() & this.codeVerification()){
  732. this.nextStepWait();
  733. this.action.codeValidate({"codeAnswer": code, "mobile": mobile}, function(json){
  734. if (json.data.value){
  735. this.nextActionNode.removeEvents("click");
  736. this.nextActionNode.set("text", this.lp.modifyPassword);
  737. this.nextActionNode.addEvent("click", this.modifyPassword.bind(this));
  738. this.passwordNode.setStyle("display", "block");
  739. this.passwordNode.getNext().setStyle("display", "block");
  740. this.usernameNode.setStyle("display", "none");
  741. this.usernameNode.getNext().setStyle("display", "none");
  742. this.mobileNode.setStyle("display", "none");
  743. this.mobileNode.getNext().setStyle("display", "none");
  744. this.codeNode.getParent().setStyle("display", "none");
  745. this.codeNode.getNext().setStyle("display", "none");
  746. this.errorNode.empty();
  747. }else{
  748. this.errorInput(this.codeNode, this.lp.errorCode);
  749. }
  750. }.bind(this), function(xhr, text, error){
  751. if (xhr){
  752. var json = JSON.decode(xhr.responseText);
  753. this.errorInput(this.codeNode, json.message);
  754. }else{
  755. var errorText = error+":"+text;
  756. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  757. }
  758. this.nextStepWaited();
  759. }.bind(this));
  760. }
  761. },
  762. modifyPassword: function(){
  763. var user = this.usernameInput.get("value");
  764. var mobile = this.mobileInput.get("value");
  765. var code = this.codeInput.get("value");
  766. var password = this.passwordInput.get("value");
  767. if (this.usernameVerification() & this.mobileVerification() & this.codeVerification() & this.passwordVerification()){
  768. this.nextStepWait();
  769. var data = {
  770. codeAnswer: code,
  771. mobile: mobile,
  772. name: user,
  773. password: password
  774. };
  775. this.action.resetPassword(data, function(){
  776. this.action.updateCollect({"name": user, "password": password, "enable": true}, function(json){
  777. this.firstStep();
  778. this.collect.showContent("checkContentNode");
  779. this.collect.backNode.setStyle("display", "none");
  780. this.check.recheck();
  781. }.bind(this), function(xhr, text, error){
  782. var errorText = error+":"+text;
  783. if (xhr) errorText = xhr.responseText;
  784. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  785. this.firstStep();
  786. }.bind(this));
  787. }.bind(this), function(xhr, text, error){
  788. if (xhr){
  789. var json = JSON.decode(xhr.responseText);
  790. this.errorNode.set("text", json.message);
  791. }else{
  792. var errorText = error+":"+text;
  793. MWF.xDesktop.notice("error", {x: "right", y:"top"}, "request json error: "+errorText);
  794. }
  795. this.firstStep();
  796. }.bind(this));
  797. }
  798. },
  799. usernameVerification: function(){
  800. var user = this.usernameInput.get("value");
  801. if (!user || user==this.lp.username){
  802. this.errorInput(this.usernameNode, this.lp.errorUsername);
  803. return false;
  804. }
  805. return true;
  806. },
  807. show: function(){
  808. this.collect.showContent("modifyContentNode");
  809. this.collect.backNode.setStyle("display", "block");
  810. this.collect.backNode.removeEvents("click");
  811. this.collect.backNode.addEvent("click", function(){
  812. this.firstStep();
  813. this.collect.showContent("checkContentNode");
  814. this.collect.backNode.setStyle("display", "none");
  815. }.bind(this));
  816. }
  817. });