Main.js 40 KB

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