Main.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  1. MWF.xApplication.Profile.options.multitask = false;
  2. MWF.xApplication.Profile.Main = new Class({
  3. Extends: MWF.xApplication.Common.Main,
  4. Implements: [Options, Events],
  5. options: {
  6. "style": "default",
  7. "name": "Profile",
  8. "icon": "icon.png",
  9. "width": "800",
  10. "height": "600",
  11. "isResize": false,
  12. "isMax": false,
  13. "title": MWF.xApplication.Profile.LP.title
  14. },
  15. onQueryLoad: function(){
  16. this.lp = MWF.xApplication.Profile.LP;
  17. },
  18. loadApplication: function(callback){
  19. this.loadTitle();
  20. this.loadContent();
  21. },
  22. loadTitle: function(){
  23. this.loadTitleBar();
  24. this.loadTitleUserNode();
  25. this.loadTitleTextNode();
  26. },
  27. loadTitleBar: function(){
  28. this.titleBar = new Element("div", {
  29. "styles": this.css.titleBar
  30. }).inject(this.content);
  31. },
  32. loadTitleUserNode: function(){
  33. this.titleUserNode = new Element("div", {
  34. "styles": this.css.titleUserNode
  35. }).inject(this.titleBar);
  36. this.titleUserIconNode = new Element("div", {
  37. "styles": this.css.titleUserIconNode
  38. }).inject(this.titleUserNode);
  39. this.titleUserTextNode = new Element("div", {
  40. "styles": this.css.titleUserTextNode,
  41. "text": this.desktop.session.user.name
  42. }).inject(this.titleUserNode);
  43. },
  44. loadTitleTextNode: function(){
  45. this.taskTitleTextNode = new Element("div", {
  46. "styles": this.css.titleTextNode,
  47. "text": this.lp.title
  48. }).inject(this.titleBar);
  49. },
  50. loadContent: function(){
  51. this.contentNode = new Element("div", {"styles": this.css.contentNode}).inject(this.content);
  52. MWF.require("MWF.widget.Tab", function(){
  53. this.tab = new MWF.widget.Tab(this.contentNode, {"style": "profile"});
  54. this.tab.load();
  55. this.loadInforConfigNode();
  56. this.loadLayoutConfigNode();
  57. this.loadIdeaConfigNode();
  58. this.loadPasswordConfigNode();
  59. this.inforConfigPage = this.tab.addTab(this.inforConfigNode, this.lp.inforConfig);
  60. this.layoutConfigPage = this.tab.addTab(this.layoutConfigNode, this.lp.layoutConfig);
  61. this.ideaConfigPage = this.tab.addTab(this.ideaConfigNode, this.lp.ideaConfig);
  62. this.passwordConfigPage = this.tab.addTab(this.passwordConfigNode, this.lp.passwordConfig);
  63. if (this.options.tab){
  64. this[this.options.tab].showIm();
  65. }else{
  66. this.inforConfigPage.showIm();
  67. }
  68. }.bind(this));
  69. },
  70. loadInforConfigNode: function(){
  71. this.inforConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  72. this.inforConfigAreaNode = new Element("div", {"styles": this.css.inforConfigAreaNode}).inject(this.inforConfigNode);
  73. this.getAction(function(){
  74. this.action.getPerson(function(json){
  75. this.personData = json.data;
  76. var icon = json.data.icon;
  77. if (!icon){
  78. if (json.data.genderType=="f"){
  79. icon = "/x_component_Profile/$Main/"+this.options.style+"/female.png";
  80. }else{
  81. icon = "/x_component_Profile/$Main/"+this.options.style+"/man.png";
  82. }
  83. }else{
  84. icon = "data:image/png;base64,"+icon;
  85. }
  86. //var html = "<table width='100%' border='0' cellpadding='5px'>" +
  87. // "<tr><td>头像:</td><td><img src='"+icon+"' style='width:72px; height: 72px; border:0px; float:left'/>" +
  88. // "<div style='margin: 20px 10px; cursor: pointer; float: left; border: 1px solid #999; padding: 3px 5px'>更换头像</div></td></tr>" +
  89. // "<tr><td>姓名:</td><td>"+json.data.name+"</td></tr>" +
  90. // "<tr><td>工号:</td><td>"+json.data.employee+"</td></tr>" +
  91. // "<tr><td>邮件:</td><td></td></tr>" +
  92. // "<tr><td>微信:</td><td>"+json.data.employee+"</td></tr>" +
  93. // "<tr><td>手机:</td><td>"+json.data.employee+"</td></tr>" +
  94. // "<tr><td>QQ:</td><td>"+json.data.employee+"</td></tr>" +
  95. // "</table>"
  96. //this.inforConfigAreaNode.set("html", html);
  97. var _self = this;
  98. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  99. var titleNode = new Element("div", {"styles": this.css.inforIconTitleNode, "text": this.lp.icon}).inject(lineNode);
  100. var contentNode = new Element("div", {"styles": this.css.inforIconContentNode}).inject(lineNode);
  101. this.contentImgNode = new Element("img", {"styles": this.css.inforIconContentImgNode, "src": icon}).inject(contentNode);
  102. var actionNode = new Element("div", {"styles": this.css.inforChangeIconNode, "text": this.lp.changeIcon, "events": {
  103. "click": function(){this.changeIcon();}.bind(this)
  104. }}).inject(lineNode);
  105. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  106. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.name}).inject(lineNode);
  107. var contentNode = new Element("div", {"styles": this.css.inforContentNode, "text": json.data.name}).inject(lineNode);
  108. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  109. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.display}).inject(lineNode);
  110. var contentNode = new Element("div", {"styles": this.css.inforContentNode, "text": json.data.employee}).inject(lineNode);
  111. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  112. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.display}).inject(lineNode);
  113. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  114. this.displayInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.display, "events": {
  115. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  116. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  117. }}).inject(contentNode);
  118. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  119. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.mail}).inject(lineNode);
  120. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  121. this.mailInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.mail, "events": {
  122. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  123. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  124. }}).inject(contentNode);
  125. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  126. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.mobile}).inject(lineNode);
  127. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  128. this.mobileInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.mobile, "events": {
  129. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  130. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  131. }}).inject(contentNode);
  132. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  133. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.weixin}).inject(lineNode);
  134. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  135. this.weixinInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.weixin, "events": {
  136. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  137. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  138. }}).inject(contentNode);
  139. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  140. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.QQ}).inject(lineNode);
  141. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  142. this.qqInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.qq, "events": {
  143. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  144. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  145. }}).inject(contentNode);
  146. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  147. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.signature}).inject(lineNode);
  148. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  149. this.signatureInputNode = new Element("input", {"styles": this.css.inforContentInputNode, "value": json.data.signature, "events": {
  150. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  151. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  152. }}).inject(contentNode);
  153. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.inforConfigAreaNode);
  154. this.saveAction = new Element("div", {"styles": this.css.saveAction, "text": this.lp.saveInfor}).inject(lineNode);
  155. this.saveAction.addEvent("click", function(){
  156. this.savePersonInfor();
  157. }.bind(this));
  158. }.bind(this), null, this.desktop.session.user.name)
  159. }.bind(this));
  160. },
  161. changeIcon: function(){
  162. if (!this.uploadFileAreaNode){
  163. this.uploadFileAreaNode = new Element("div");
  164. var html = "<input name=\"file\" type=\"file\"/>";
  165. this.uploadFileAreaNode.set("html", html);
  166. this.fileUploadNode = this.uploadFileAreaNode.getFirst();
  167. this.fileUploadNode.addEvent("change", function(){
  168. var files = fileNode.files;
  169. if (files.length){
  170. for (var i = 0; i < files.length; i++) {
  171. var file = files.item(i);
  172. var formData = new FormData();
  173. formData.append('file', file);
  174. //formData.append('name', file.name);
  175. //formData.append('folder', folderId);
  176. this.action.changeIcon(function(){
  177. this.action.getPerson(function(json){
  178. if (json.data){
  179. this.personData = json.data;
  180. if (this.personData.icon){
  181. this.contentImgNode.set("src", "data:image/png;base64,"+this.personData.icon);
  182. }
  183. }
  184. }.bind(this))
  185. }.bind(this), null, formData, file);
  186. }
  187. }
  188. }.bind(this));
  189. }
  190. var fileNode = this.uploadFileAreaNode.getFirst();
  191. fileNode.click();
  192. },
  193. savePersonInfor: function(){
  194. this.personData.display = this.displayInputNode.get("value");
  195. this.personData.mail = this.mailInputNode.get("value");
  196. this.personData.mobile = this.mobileInputNode.get("value");
  197. this.personData.weixin = this.weixinInputNode.get("value");
  198. this.personData.qq = this.qqInputNode.get("value");
  199. this.personData.signature = this.signatureInputNode.get("value");
  200. this.action.updatePerson(this.personData, function(){
  201. this.notice(this.lp.saveInforOk, "success");
  202. }.bind(this));
  203. },
  204. loadLayoutConfigNode: function(){
  205. this.layoutConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);
  206. this.clearDataAction = new Element("div", {"styles": this.css.clearDataAction, "text": this.lp.clear}).inject(this.layoutConfigNode);
  207. this.clearDataAction.addEvent("click", function(){
  208. MWF.require("MWF.widget.UUID", function(){
  209. MWF.UD.putData("layout", {}, function(){
  210. this.notice(this.lp.clearok, "success");
  211. this.desktop.notRecordStatus = true;
  212. }.bind(this));
  213. }.bind(this));
  214. }.bind(this));
  215. if (MWF.AC.isAdministrator()){
  216. this.defaultDataAction = new Element("div", {"styles": this.css.setDefaultDataAction, "text": this.lp.setDefault}).inject(this.layoutConfigNode);
  217. this.defaultDataAction.addEvent("click", function(){
  218. MWF.require("MWF.widget.UUID", function(){
  219. var text = this.lp.setDefaultOk;
  220. this.close();
  221. var status = layout.desktop.getLayoutStatusData();
  222. MWF.UD.putPublicData("defaultLayout", status, function(){
  223. MWF.xDesktop.notice("success", {"x": "right", "y": "top"}, text, layout.desktop.desktopNode);
  224. }.bind(this));
  225. }.bind(this));
  226. }.bind(this));
  227. }
  228. },
  229. loadIdeaConfigNode: function(){
  230. this.ideaConfigNode = new Element("div", {"styles": this.css.configNode}).inject(this.content);;
  231. this.ideasArea = new Element("textarea", {"styles": this.css.ideasArea}).inject(this.ideaConfigNode);
  232. this.ideasSaveAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdea}).inject(this.ideaConfigNode);
  233. if (MWF.AC.isAdministrator()){
  234. this.ideasSaveDefaultAction = new Element("div", {"styles": this.css.ideasSaveAction, "text": this.lp.saveIdeaDefault}).inject(this.ideaConfigNode);
  235. this.ideasSaveDefaultAction.addEvent("click", function(){
  236. MWF.require("MWF.widget.UUID", function(){
  237. var data = {};
  238. data.ideas = this.ideasArea.get("value").split("\n");
  239. MWF.UD.putPublicData("idea", data, function(){
  240. this.notice(this.lp.ideaSaveOk, "success");
  241. }.bind(this));
  242. }.bind(this));
  243. }.bind(this))
  244. }
  245. MWF.require("MWF.widget.UUID", function(){
  246. MWF.UD.getDataJson("idea", function(json){
  247. if (json){
  248. if (json.ideas) this.ideasArea.set("value", json.ideas.join("\n"));
  249. }
  250. }.bind(this));
  251. }.bind(this));
  252. this.ideasSaveAction.addEvent("click", function(){
  253. MWF.require("MWF.widget.UUID", function(){
  254. var data = {};
  255. data.ideas = this.ideasArea.get("value").split("\n");
  256. MWF.UD.putData("idea", data, function(){
  257. this.notice(this.lp.ideaSaveOk, "success");
  258. }.bind(this));
  259. }.bind(this));
  260. }.bind(this))
  261. },
  262. loadPasswordConfigNode: function(){
  263. this.passwordConfigNode = new Element("div", {"styles": this.css.configNode});
  264. this.passwordConfigAreaNode = new Element("div", {"styles": this.css.inforConfigAreaNode}).inject(this.passwordConfigNode);
  265. var _self = this;
  266. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  267. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.oldPassword}).inject(lineNode);
  268. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  269. this.oldPasswordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  270. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  271. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  272. }}).inject(contentNode);
  273. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  274. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.password}).inject(lineNode);
  275. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  276. this.passwordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  277. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  278. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  279. }}).inject(contentNode);
  280. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  281. var titleNode = new Element("div", {"styles": this.css.inforTitleNode, "text": this.lp.morePassword}).inject(lineNode);
  282. var contentNode = new Element("div", {"styles": this.css.inforContentNode}).inject(lineNode);
  283. this.morePasswordInputNode = new Element("input", {"type": "password", "styles": this.css.inforContentInputNode, "events": {
  284. "blur": function(){this.setStyles(_self.css.inforContentInputNode);},
  285. "focus": function(){this.setStyles(_self.css.inforContentInputNode_focus);}
  286. }}).inject(contentNode);
  287. var lineNode = new Element("div", {"styles": this.css.inforLineNode}).inject(this.passwordConfigAreaNode);
  288. this.saveAction = new Element("div", {"styles": this.css.saveAction, "text": this.lp.passwordConfig}).inject(lineNode);
  289. this.saveAction.addEvent("click", function(){
  290. this.changePassword();
  291. }.bind(this));
  292. },
  293. changePassword: function(){
  294. var oldPassword = this.oldPasswordInputNode.get("value");
  295. var password = this.passwordInputNode.get("value");
  296. var morePassword = this.morePasswordInputNode.get("value");
  297. if (password!=morePassword){
  298. this.notice(this.lp.passwordNotMatch, "error");
  299. this.passwordInputNode.setStyles(this.css.inforContentInputNode_error);
  300. this.morePasswordInputNode.setStyles(this.css.inforContentInputNode_error);
  301. }else{
  302. this.action.changePassword(oldPassword, password, morePassword, function(){
  303. this.oldPasswordInputNode.set("value", "");
  304. this.passwordInputNode.set("value", "");
  305. this.morePasswordInputNode.set("value", "");
  306. this.notice(this.lp.changePasswordOk, "success");
  307. }.bind(this));
  308. if (layout.config.mail){
  309. var url = "http://"+layout.config.mail+"//names.nsf?changepassword&password="+encodeURIComponent(oldPassword)+"&passwordnew="+encodeURIComponent(password)+"&passwordconfirm="+encodeURIComponent(password);
  310. var iframe = new Element("iframe", {"styles": {"display": "none"}}).inject(this.desktop.desktopNode);
  311. iframe.set("src", url);
  312. window.setTimeout(function(){
  313. iframe.destroy();
  314. }.bind(this), 2000);
  315. }
  316. }
  317. },
  318. getAction: function(callback){
  319. if (!this.acrion){
  320. MWF.xDesktop.requireApp("Profile", "Actions.RestActions", function(){
  321. this.action = new MWF.xApplication.Profile.Actions.RestActions();
  322. if (callback) callback();
  323. }.bind(this));
  324. }else{
  325. if (callback) callback();
  326. }
  327. }
  328. });