user.js
上传用户:ouhalaa
上传日期:2016-03-17
资源大小:10210k
文件大小:17k
源码类别:

Web服务器

开发平台:

Java

  1. // 用户管理
  2. var User = Ext.data.Record.create([
  3. {name : 'userId',mapping : 'userId',type : 'int'}, 
  4. {name : 'emplName',mapping : 'emplName',type : 'string'}, 
  5. {name : 'emplNo',mapping : 'emplNo',type : 'string'}, 
  6. {name : 'mobilePhone',mapping : 'mobilePhone',type : 'string'}, 
  7. {name : 'sex',mapping : 'sex',type : 'string'}, 
  8. {name : 'age',mapping : 'age',type : 'int'}, 
  9. {name : 'userName',mapping : 'userName',type : 'string'}, 
  10. {name : 'password',mapping : 'password',type : 'string'}, 
  11. {name : 'userId',mapping : 'userId',type : 'int'}, 
  12. {name : 'userName',mapping : 'userName',type : 'string'}, 
  13. {name : 'deptId',mapping : 'deptId',type : 'int'}, 
  14. {name : 'deptName',mapping : 'deptName',type : 'string'}, 
  15. {name : 'dutyId',mapping : 'dutyId',type : 'int'}, 
  16. {name : 'dutyName',mapping : 'dutyName',type : 'string'}, 
  17. {name : 'manager',mapping : 'manager',type : 'bool'}, 
  18. {name : 'remark',mapping : 'remark',type : 'string'}]);
  19. var ds_duty_select = new Ext.data.Store({
  20. url : 'findAllDuty.action',
  21. reader : new Ext.data.JsonReader({root : 'root'}, 
  22. [{name : 'dutyId'}, {name : 'dutyName'}])
  23. });
  24. var ds_dept_select = new Ext.data.Store({
  25. url : 'findDeptByCompany.action',
  26. reader : new Ext.data.JsonReader({root : 'root'}, 
  27. [{name : 'deptId'}, {name : 'deptName'}])
  28. });
  29. Ext.grid.CheckColumn = function(config) {
  30. Ext.apply(this, config);
  31. if (!this.id) {
  32. this.id = Ext.id();
  33. }
  34. this.renderer = this.renderer.createDelegate(this);
  35. };
  36. Ext.grid.CheckColumn.prototype = {
  37. init : function(grid) {
  38. this.grid = grid;
  39. this.grid.on('render', function() {
  40. var view = this.grid.getView();
  41. view.mainBody.on('mousedown', this.onMouseDown, this);
  42. }, this);
  43. },
  44. onMouseDown : function(e, t) {
  45. if (t.className && t.className.indexOf('x-grid3-cc-' + this.id) != -1) {
  46. e.stopEvent();
  47. var index = this.grid.getView().findRowIndex(t);
  48. var cindex = this.grid.getView().findCellIndex(t);
  49. var record = this.grid.store.getAt(index);
  50. var field = this.grid.colModel.getDataIndex(cindex);
  51. var e = {
  52. grid : this.grid,
  53. record : record,
  54. field : field,
  55. originalValue : record.data[this.dataIndex],
  56. value : !record.data[this.dataIndex],
  57. row : index,
  58. column : cindex,
  59. cancel : false
  60. };
  61. if (this.grid.fireEvent("validateedit", e) !== false && !e.cancel) {
  62. delete e.cancel;
  63. record.set(this.dataIndex, !record.data[this.dataIndex]);
  64. this.grid.fireEvent("afteredit", e);
  65. }
  66. }
  67. },
  68. renderer : function(v, p, record) {
  69. p.css += ' x-grid3-check-col-td';
  70. return '<div class="x-grid3-check-col' + (v ? '-on' : '') + ' x-grid3-cc-' + this.id + '">&#160;</div>';
  71. }
  72. };
  73. var checkColumn = new Ext.grid.CheckColumn({
  74. header : "管理员?",
  75. dataIndex : 'manager',
  76. width : 55
  77. });
  78. var cm_user = new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), {
  79. header : '用户名',
  80. width : 85,
  81. dataIndex : 'userName'
  82. }, {
  83. header : '密码',
  84. width : 85,
  85. dataIndex : 'password',
  86. sortable : false,
  87. menuDisabled : true,
  88. editor : new Ext.form.TextField({
  89. allowBlank : false,
  90. minLength : 6,
  91. maxLength : 20
  92. })
  93. }, {
  94. header : '用户姓名',
  95. sortable : false,
  96. menuDisabled : true,
  97. width : 90,
  98. dataIndex : 'emplName',
  99. editor : new Ext.form.TextField({
  100. allowBlank : false,
  101. maxLength : 20
  102. })
  103. }, {
  104. header : '用户编码',
  105. width : 85,
  106. dataIndex : 'emplNo',
  107. hidden : true,
  108. menuDisabled : true,
  109. editor : new Ext.form.TextField({
  110. maxLength : 20
  111. })
  112. }, {
  113. header : '手机号码',
  114. width : 85,
  115. dataIndex : 'mobilePhone',
  116. menuDisabled : true,
  117. editor : new Ext.form.TextField({
  118. maxLength : 20
  119. })
  120. }, {
  121. header : '性别',
  122. width : 60,
  123. dataIndex : 'sex',
  124. hidden : true,
  125. sortable : false,
  126. menuDisabled : true,
  127. editor : new Ext.form.ComboBox({
  128. mode : 'local',
  129. editable : false,
  130. store : new Ext.data.SimpleStore({
  131. data : [['男', '男'], ['女', '女']],
  132. fields : ['text', 'value']
  133. }),
  134. displayField : 'text',
  135. valueField : 'value',
  136. mode : 'local',
  137. triggerAction : 'all'
  138. })
  139. }, {
  140. header : '年龄',
  141. width : 40,
  142. dataIndex : 'age',
  143. sortable : false,
  144. hidden : true,
  145. menuDisabled : true,
  146. editor : new Ext.form.NumberField({
  147. decimalPrecision : 1,
  148. fieldLabel : '年龄',
  149. maxLength : 3,
  150. maxLengthText : '年龄不符合实际',
  151. maxValue : 120,
  152. maxText : '最大允许年龄为120岁'
  153. })
  154. }, {
  155. header : '所属分公司',
  156. width : 85,
  157. sortable : false,
  158. dataIndex : 'companyName',
  159. menuDisabled : true,
  160. editor : new Ext.form.ComboBox({
  161. store : ds_company_select,
  162. displayField : 'companyName',
  163. valueField : 'companyName',
  164. mode : 'remote',
  165. allowBlank : false,
  166. editable : false,
  167. triggerAction : 'all',
  168. listWidth : 130,
  169. listeners : {
  170. 'select' : function(combo, record) {
  171. companyId = record.data.companyId;
  172. ds_dept_select.baseParams.companyId = companyId;
  173. ds_dept_select.reload();
  174. }
  175. }
  176. })
  177. }, {
  178. header : '所属部门',
  179. width : 85,
  180. dataIndex : 'deptName',
  181. sortable : false,
  182. menuDisabled : true,
  183. editor : new Ext.form.ComboBox({
  184. valueField : 'deptName',
  185. displayField : 'deptName',
  186. mode : 'remote',
  187. store : ds_dept_select,
  188. editable : false,
  189. allowBlank : false,
  190. triggerAction : 'all',
  191. listWidth : 130,
  192. listeners : {
  193. 'select' : function(combo, record) {// 当选择部门后,获得部门的id保存到全局
  194. deptId = record.data.deptId;
  195. },
  196. 'beforequery' : function(queryEvent) {// 在执行下拉查询时,先判断是否参数companyId(单击行时被附值,更换分公司也被赋值)是否存在
  197. if (!companyId) {
  198. queryEvent.cancel = true;
  199. }
  200. },
  201. 'focus' : function() {
  202. // 当获得焦点时,设置查询参数,重新加载数据,注意:如果不是每次参数都有可能不一样,不推荐使用这个监听器
  203. // 因为它每次都要重新加载数据
  204. ds_dept_select.baseParams.companyId = companyId;
  205. ds_dept_select.reload();
  206. }
  207. }
  208. })
  209. }, {
  210. header : '职称',
  211. width : 85,
  212. dataIndex : 'dutyName',
  213. menuDisabled : true,
  214. sortable : false,
  215. editor : new Ext.form.ComboBox({
  216. store : ds_duty_select,
  217. displayField : 'dutyName',
  218. valueField : 'dutyName',
  219. mode : 'remote',
  220. allowBlank : false,
  221. editable : false,
  222. triggerAction : 'all',
  223. listWidth : 100,
  224. listeners : {
  225. 'select' : function(combo, record) {
  226. dutyId = record.data.dutyId;
  227. }
  228. }
  229. })
  230. }, checkColumn, {
  231. header : '备注',
  232. id : 'remark',
  233. dataIndex : 'remark',
  234. menuDisabled : true,
  235. sortable : false,
  236. editor : new Ext.form.TextField({
  237. maxLength : 200
  238. })
  239. }]);
  240. cm_user.defaultSortable = true;
  241. var btn_add_user = new Ext.Button({
  242. text : '添加用户',
  243. iconCls : 'icon-add',
  244. handler : function() {
  245. window_add_user.show();
  246. }
  247. });
  248. var btn_del_user = new Ext.Button({
  249. text : '删除用户',
  250. iconCls : 'icon-del',
  251. handler : function() {
  252. var record = grid_user.getSelectionModel().getSelected();
  253. if (record) {
  254. Ext.Msg.confirm('确认删除', '你确定删除该条记录?', function(btn) {
  255. if (btn == 'yes') {
  256. Ext.Ajax.request({
  257. url : 'deleteUser.action',
  258. params : {userId : record.data.userId},
  259. success : function() {grid_user.getStore().remove(record);},
  260. failure : function() {
  261. Ext.Msg.show({
  262. title : '错误提示',
  263. msg : '删除时发生错误!',
  264. buttons : Ext.Msg.OK,
  265. icon : Ext.Msg.ERROR
  266. });
  267. }
  268. });
  269. }
  270. });
  271. }
  272. }
  273. });
  274. var text_search_user = new Ext.form.TextField({
  275. name : 'textSearchUser',
  276. width : 200,
  277. emptyText : '多条件可用逗号或者空格隔开!',
  278. listeners : {
  279. 'specialkey' : function(field, e) {
  280. if (e.getKey() == Ext.EventObject.ENTER) {
  281. searchUser();
  282. }
  283. }
  284. }
  285. });
  286. var searchUser = function() {
  287. ds_user.baseParams.conditions = text_search_user.getValue(); 
  288. ds_user.load({params : {start : 0,limit : 20}});
  289. }
  290. var btn_search_user = new Ext.Button({
  291. text : '查询',
  292. iconCls : 'icon-search',
  293. handler : searchUser
  294. });
  295. var ds_user = new Ext.data.Store({
  296. url : 'findAllUser.action',
  297. reader : new Ext.data.JsonReader({totalProperty : 'totalProperty',root : 'root'}, 
  298. [{name : 'userId',type : 'int'}, 
  299. {name : 'userName',type : 'string'}, 
  300. {name : 'password',type : 'string'}, 
  301. {name : 'mobilePhone',type : 'string'}, 
  302. {name : 'emplName',type : 'string'}, 
  303. {name : 'emplNo',type : 'string'}, 
  304. {name : 'sex',type : 'string'}, 
  305. {name : 'age',type : 'int'},
  306. {name : 'companyId',type : 'int'},
  307. {name : 'companyName',type : 'string'},
  308. {name : 'deptId',type : 'int'},
  309. {name : 'deptName',type : 'string'},
  310. {name : 'dutyId',type : 'int'},
  311. {name : 'dutyName',type : 'string'},
  312. {name : 'manager',type : 'bool'},
  313. {name : 'remark',type : 'string'}])
  314. });
  315. var companyId, dutyId, deptId;
  316. var grid_user = new Ext.grid.EditorGridPanel({
  317. title : '用户管理',
  318. iconCls : 'icon-grid',
  319. loadMask : {msg : '数据加载中...'},
  320. region : 'center',
  321. cm : cm_user,
  322. ds : ds_user,
  323. plugins : checkColumn,
  324. sm : new Ext.grid.RowSelectionModel({singleSelect : true}),
  325. enableColumnMove : false,
  326. trackMouseOver : false,
  327. frame : true,
  328. autoExpandColumn : 'remark',
  329. clicksToEdit : 1,
  330. tbar : [btn_add_user, '-', btn_del_user, '-',text_search_user, btn_search_user],
  331. bbar : new Ext.PagingToolbar({
  332. pageSize : 20,
  333. store : ds_user,
  334. displayInfo : true,
  335. displayMsg : '第 {0} - {1} 条  共 {2} 条',
  336. emptyMsg : "没有记录"
  337. }),
  338. listeners : {
  339. 'afteredit' : function(e) {
  340. Ext.Ajax.request({
  341. url : 'updateUser.action',
  342. params : {
  343. fieldName : e.field,
  344. fieldValue : e.value,
  345. companyId : e.field == 'companyName' ? companyId : null,
  346. deptId : e.field == 'deptName' ? deptId : null,
  347. dutyId : e.field == 'dutyName' ? dutyId : null,
  348. userId : e.record.data.userId
  349. },
  350. success : function() {
  351. if (e.field == 'companyName') {// 如果公司修改成功则同步当前显示修改记录的公司id
  352. e.record.set('companyId', companyId);
  353. }
  354. },
  355. failure : function() {
  356. Ext.Msg.show({
  357. title : '错误提示',
  358. msg : '修改数据发生错误,操作将被回滚!',
  359. fn : function() {e.record.set(e.field, e.originalValue);},
  360. buttons : Ext.Msg.OK,
  361. icon : Ext.Msg.ERROR
  362. });
  363. }
  364. });
  365. },
  366. 'cellclick' : function(grid, rowIndex) { // 为了部门下拉能够提取到分公司id的参数
  367. companyId = grid.getStore().getAt(rowIndex).data.companyId;
  368. }
  369. }
  370. });
  371. var window_add_user = new Ext.Window({
  372. title : '添加用户',
  373. width : 320,
  374. resizable : false,
  375. autoHeight : true,
  376. modal : true,
  377. closeAction : 'hide',
  378. listeners : {
  379. 'hide' : function() {
  380. this.setTitle('添加用户');
  381. this.findById('user.userName').ownerCt.form.reset();
  382. }
  383. },
  384. items : [new Ext.FormPanel({
  385. border : false,
  386. baseCls : 'x-plain',
  387. bodyStyle : 'padding:5px 5px 0',
  388. labelAlign : 'right',
  389. labelWidth : 70,
  390. url : 'saveUser.action',
  391. defaults : {anchor : '93%',msgTarget : 'side'},
  392. defaultType : 'textfield',
  393. items : [{
  394. fieldLabel : '用户名',
  395. id : 'user.userName',
  396. name : 'user.userName',
  397. allowBlank : false,
  398. maxLength : 30
  399. }, {
  400. fieldLabel : '密码',
  401. id : 'password1',
  402. name : 'user.password',
  403. allowBlank : false,
  404. minLength : 6,
  405. maxLength : 30
  406. }, {
  407. xtype : 'combo',
  408. fieldLabel : '所属分公司',
  409. id : 'company',
  410. hiddenName : 'user.companyId',
  411. valueField : 'companyId',
  412. displayField : 'companyName',
  413. mode : 'remote',
  414. store : ds_company_select,
  415. selectOnFocus : true,
  416. editable : false,
  417. allowBlank : false,
  418. triggerAction : 'all',
  419. loadingText : '加载中...',
  420. emptyText : '公司名称',
  421. listeners : {
  422. 'select' : function(combo, record, index) {
  423. this.ownerCt.findById('dept').reset(); // 可以通过findById来获得同一个表单中的ComboBox
  424. ds_dept_select.baseParams.companyId = this.ownerCt.form.findField('user.companyId').getValue();
  425. ds_dept_select.reload();
  426. this.ownerCt.form.findField('user.companyName').setValue(record.data.companyName);
  427. }
  428. }
  429. }, {
  430. xtype : 'hidden',
  431. name : 'user.companyName'
  432. }, {
  433. xtype : 'combo',
  434. fieldLabel : '所属部门',
  435. id : 'dept',
  436. hiddenName : 'user.deptId',
  437. valueField : 'deptId',
  438. displayField : 'deptName',
  439. mode : 'remote',
  440. store : ds_dept_select,
  441. selectOnFocus : true,
  442. editable : false,
  443. allowBlank : false,
  444. triggerAction : 'all',
  445. loadingText : '加载中...',
  446. emptyText : '部门名称',
  447. listeners : {
  448. 'select' : function(combo, record, index) {
  449. this.ownerCt.form.findField('user.deptName').setValue(record.data.deptName);
  450. },
  451. 'beforequery' : function(queryEvent) {
  452. if (!this.ownerCt.form.findField('user.companyId').getValue()) {
  453. queryEvent.cancel = true;
  454. }
  455. }
  456. }
  457. }, {xtype : 'hidden',name : 'user.deptName'}, 
  458.    {xtype : 'combo',
  459. fieldLabel : '职称',
  460. id : 'duty',
  461. hiddenName : 'user.dutyId',
  462. valueField : 'dutyId',
  463. displayField : 'dutyName',
  464. mode : 'remote',
  465. store : ds_duty_select,
  466. selectOnFocus : true,
  467. editable : false,
  468. allowBlank : false,
  469. triggerAction : 'all',
  470. loadingText : '加载中...',
  471. emptyText : '请选择职称',
  472. listeners : {
  473. 'select' : function(combo, record, index) {
  474. this.ownerCt.form.findField('user.dutyName').setValue(record.data.dutyName);
  475. }
  476. }
  477. }, {xtype : 'hidden',name : 'user.dutyName'}, 
  478.    {fieldLabel : '用户编码',name : 'user.emplNo',maxLength : 20}, 
  479.    {fieldLabel : '用户姓名',name : 'user.emplName',allowBlank : false,maxLength : 20}, 
  480.    {xtype : 'combo',
  481. fieldLabel : '性别',
  482. mode : 'local',
  483. name : 'user.sex',
  484. editable : false,
  485. store : new Ext.data.SimpleStore({
  486. data : [['男', '男'], ['女', '女']],
  487. fields : ['text', 'value']
  488. }),
  489. displayField : 'text',
  490. valueField : 'value',
  491. mode : 'local',
  492. triggerAction : 'all',
  493. emptyText : '请选择性别'
  494. }, {
  495. xtype : 'numberfield',
  496. decimalPrecision : 1,
  497. fieldLabel : '年龄',
  498. maxLength : 3,
  499. maxLengthText : '年龄不符合实际',
  500. maxValue : 120,
  501. maxText : '最大允许年龄为120岁',
  502. name : 'user.age'
  503. }, {fieldLabel : '联系电话',name : 'user.mobilePhone',allowBlank : false,maxLength : 20}, 
  504.    {fieldLabel : '备注',name : 'user.remark',xtype : 'textarea',maxLength : 100}
  505. ],
  506. buttonAlign : 'right',
  507. minButtonWidth : 60,
  508. buttons : [{
  509. text : '添加',
  510. handler : function(btn) {
  511. var frm = this.ownerCt.form;
  512. if (frm.isValid()) {
  513. btn.disable();
  514. var unfield = frm.findField('user.userName');
  515. frm.submit({
  516. waitTitle : '请稍候',
  517. waitMsg : '正在提交表单数据,请稍候...',
  518. success : function(form, action) {
  519. var store = grid_user.getStore();
  520. if (store.data.length <= 20) {
  521. var user = new User({
  522. userId : action.result.userId,
  523. userName : unfield.getValue(),
  524. companyId : form.findField('user.companyId').getValue(),
  525. companyName : Ext.get('company').dom.value,
  526. deptId : form.findField('user.deptId').getValue(),
  527. deptName : Ext.get('dept').dom.value,
  528. dutyId : form.findField('user.dutyId').getValue(),
  529. dutyName : Ext.get('duty').dom.value,
  530. emplName : form.findField('user.emplName').getValue(),
  531. emplNo : form.findField('user.emplNo').getValue(),
  532. sex : form.findField('user.sex').getValue(),
  533. age : form.findField('user.age').getValue(),
  534. password : form.findField('user.password').getValue(),
  535. mobilePhone : form.findField('user.mobilePhone').getValue(),
  536. remark : form.findField('user.remark').getValue()
  537. });
  538. store.insert(0, [user]);
  539. if (store.data.length > 20) {
  540. store.remove(store.getAt(store.data.length - 1));
  541. }
  542. }
  543. window_add_user.setTitle('[ ' + unfield.getValue() + ' ]   添加成功!!');
  544. unfield.reset();
  545. btn.enable();
  546. },
  547. failure : function() {
  548. Ext.Msg.show({
  549. title : '错误提示',
  550. msg : '"' + unfield.getValue() + '" ' + '名称可能已经存在!',
  551. buttons : Ext.Msg.OK,
  552. fn : function() {
  553. unfield.focus(true);
  554. btn.enable();
  555. },
  556. icon : Ext.Msg.ERROR
  557. });
  558. }
  559. });
  560. }
  561. }
  562. }, {text : '重置',handler : function() {this.ownerCt.form.reset();}
  563. }, {text : '取消',handler : function() {this.ownerCt.ownerCt.hide();}
  564. }]
  565. })]
  566. });
  567. var p_user = {
  568. id : 'user-panel',
  569. border : false,
  570. layout : 'border',
  571. items : [grid_user]
  572. };