package com.jcommerce.gwt.client.panels.privilege; import java.util.ArrayList; import java.util.List; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.data.BasePagingLoader; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.EditorGrid; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.TextBox; import com.jcommerce.gwt.client.ContentWidget; import com.jcommerce.gwt.client.ModelNames; import com.jcommerce.gwt.client.PageState; import com.jcommerce.gwt.client.iShop; import com.jcommerce.gwt.client.form.BeanObject; import com.jcommerce.gwt.client.model.IAdminUser; import com.jcommerce.gwt.client.panels.member.AssignRole; import com.jcommerce.gwt.client.panels.member.MemberAddresses; import com.jcommerce.gwt.client.panels.member.AssignRole.State; import com.jcommerce.gwt.client.resources.Resources; import com.jcommerce.gwt.client.service.Criteria; import com.jcommerce.gwt.client.service.DeleteService; import com.jcommerce.gwt.client.service.PagingListService; import com.jcommerce.gwt.client.service.ReadService; import com.jcommerce.gwt.client.service.UpdateService; import com.jcommerce.gwt.client.widgets.ActionCellRenderer; import com.jcommerce.gwt.client.widgets.ColumnPanel; /** * @author monkey */ public class AdminList extends ContentWidget { public static interface Constants { String AdminList_userName(); String AdminList_email(); String AdminList_title(); String AdminList_addTime(); String AdminList_lastLogin(); } ColumnPanel contentPanel = new ColumnPanel(); TextBox commentContent = new TextBox(); Criteria criteria = new Criteria(); int deleteSize = 1; PagingToolBar toolBar; public static class State extends PageState { public String getPageClassName() { return AdminList.class.getName(); } public String getMenuDisplayName() { return "管理员列表"; } } public State getCurState() { if (curState == null ) { curState = new State(); } return (State)curState; } public AdminList() { add(contentPanel); initJS(this); } public String getDescription() { return "cwBasicTextDescription"; } public String getName() { return "管理员列表"; } protected void onRender(Element parent, int index) { super.onRender(parent, index); BasePagingLoader loader = new PagingListService().getLoader( ModelNames.ADMINUSER, criteria); loader.load(0, 10); final ListStore<BeanObject> store = new ListStore<BeanObject>(loader); toolBar = new PagingToolBar(10); toolBar.bind(loader); List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); columns.add(new ColumnConfig(IAdminUser.NAME, "用户名", 120)); columns.add(new ColumnConfig(IAdminUser.EMAIL, "Email地址", 180)); columns.add(new ColumnConfig(IAdminUser.ADDTIME, "加入时间", 180)); columns.add(new ColumnConfig(IAdminUser.LASTLOGIN, "最后登录时间", 180)); ColumnConfig actcol = new ColumnConfig("Action", Resources.constants .GoodsList_action(), 140); columns.add(actcol); ColumnModel cm = new ColumnModel(columns); Grid<BeanObject> grid = new EditorGrid<BeanObject>(store, cm); grid.setLoadMask(true); grid.setBorders(true); ActionCellRenderer render = new ActionCellRenderer(grid); ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo(); act.setImage("icon_trash.gif"); act.setAction("deleteAdminAction($id)"); act.setTooltip("删除"); render.addAction(act); act = new ActionCellRenderer.ActionInfo(); act.setImage("icon_edit.gif"); act.setAction("editAdminAction($id)"); act.setTooltip("编辑"); render.addAction(act); act = new ActionCellRenderer.ActionInfo(); act.setImage("assign_role.gif"); act.setAction("assignRoleAction($id)"); act.setTooltip("分派权限"); render.addAction(act); act = new ActionCellRenderer.ActionInfo(); act.setImage("view_log.gif"); act.setAction("viewLogAction($id)"); act.setTooltip("查看日志"); render.addAction(act); actcol.setRenderer(render); ContentPanel panel = new ContentPanel(); panel.setFrame(true); panel.setCollapsible(true); panel.setAnimCollapse(false); panel.setButtonAlign(HorizontalAlignment.CENTER); panel.setIconStyle("icon-table"); panel.setHeading("管理员列表"); panel.setLayout(new FitLayout()); panel.add(grid); panel.setSize(800, 350); panel.setBottomComponent(toolBar); panel.setButtonAlign(HorizontalAlignment.CENTER); Button addAdmin = new Button("添加管理员"); addAdmin.addSelectionListener(new SelectionListener<ButtonEvent>() { public void componentSelected(ButtonEvent ce) { NewAdminUser.State state = new NewAdminUser.State(); state.execute(); } }); panel.addButton(addAdmin); add(panel); } private native void initJS(AdminList me) /*-{ $wnd.deleteAdminAction = function (id) { me.@com.jcommerce.gwt.client.panels.privilege.AdminList::deleteAdminAndRefrsh(Ljava/lang/String;)(id); }; $wnd.editAdminAction = function (id) { me.@com.jcommerce.gwt.client.panels.privilege.AdminList::editAdmin(Ljava/lang/String;)(id); }; $wnd.assignRoleAction = function (id) { me.@com.jcommerce.gwt.client.panels.privilege.AdminList::assignRole(Ljava/lang/String;)(id); }; $wnd.viewLogAction = function (id) { me.@com.jcommerce.gwt.client.panels.privilege.AdminList::viewLog(Ljava/lang/String;)(id); }; }-*/; private void assignRole(final String id) { new ReadService().getBean(ModelNames.ADMINUSER, id, new ReadService.Listener() { public synchronized void onSuccess(BeanObject result) { AssignRole.State state = new AssignRole.State(); state.setRole(result); state.execute(); } }); } private void viewLog(final String id) { AdminLog.State state = new AdminLog.State(); state.execute(); } /** * 删除管理员 * @param id */ private void deleteAdminAndRefrsh(final String id) { final Listener<MessageBoxEvent> deleteListener = new Listener<MessageBoxEvent>() { public void handleEvent(MessageBoxEvent ce) { Button btn = ce.getButtonClicked(); if (btn.getText().equals("是")) { new DeleteService().deleteBean(ModelNames.ADMINUSER, id, new DeleteService.Listener() { public void onSuccess(Boolean success) { refresh(); AdminLog.createAdminLog("删除管理员;"); } }); } } }; MessageBox.confirm("Confirm", "Are you sure you want to do that?", deleteListener); } private void editAdmin(String id) { new ReadService().getBean(ModelNames.ADMINUSER, id, new ReadService.Listener() { public void onSuccess(BeanObject bean) { NewAdminUser.State state = new NewAdminUser.State(); state.setAdminUser(bean); state.execute(); } }); } private void checkMemberAddress(String id) { MemberAddresses.State state = new MemberAddresses.State(); state.setMember(id); state.execute(); } public void refresh() { toolBar.refresh(); } class DeleteListener extends DeleteService.Listener { private boolean finished = false; public void onSuccess(Boolean sucess) { finished = true; } public void onFailure(Throwable caught) { finished = true; } boolean isFinished() { return finished; } } class UpdateListener extends UpdateService.Listener { private boolean finished = false; public void onSuccess(Boolean sucess) { finished = true; } public void onFailure(Throwable caught) { finished = true; } boolean isFinished() { return finished; } } }