/** * */ package com.jcommerce.gwt.client.panels.member; 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.CheckBoxSelectionModel; 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.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.Window; 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.IUser; import com.jcommerce.gwt.client.model.IUserRank; import com.jcommerce.gwt.client.panels.data.ImportPanel.State; import com.jcommerce.gwt.client.panels.goods.NewBrand; import com.jcommerce.gwt.client.resources.Resources; import com.jcommerce.gwt.client.service.Condition; import com.jcommerce.gwt.client.service.Criteria; import com.jcommerce.gwt.client.service.DeleteService; import com.jcommerce.gwt.client.service.ListService; 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.service.WaitService; import com.jcommerce.gwt.client.widgets.ActionCellRenderer; import com.jcommerce.gwt.client.widgets.ColumnPanel; /** * @author dell * */ public class MemberLevelList extends ContentWidget { ColumnPanel contentPanel = new ColumnPanel(); PagingToolBar toolBar; Criteria criteria = new Criteria(); private int userUpdatedSize = 0; public static class State extends PageState { public String getPageClassName() { return MemberLevelList.class.getName(); } public String getMenuDisplayName() { return "会员等级"; } } public State getCurState() { if (curState == null ) { curState = new State(); } return (State)curState; } /** * */ public MemberLevelList() { add(contentPanel); initJS(this); } /* * (non-Javadoc) * * @see com.jcommerce.gwt.client.ContentWidget#getDescription() */ @Override public String getDescription() { return ""; } /* * (non-Javadoc) * * @see com.jcommerce.gwt.client.ContentWidget#getName() */ @Override public String getName() { return "会员等级"; } public String getButtonText() { return "添加会员等级"; } protected void buttonClicked() { NewMemberLevel.State state = new NewMemberLevel.State(); state.execute(); } protected void onRender(Element parent, int index) { super.onRender(parent, index); BasePagingLoader loader = new PagingListService().getLoader( ModelNames.USERRANK, 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>(); final CheckBoxSelectionModel<BeanObject> smRowSelection = new CheckBoxSelectionModel<BeanObject>(); columns.add(smRowSelection.getColumn()); columns.add(new ColumnConfig(IUserRank.NAME, "会员等级名称", 100)); columns.add(new ColumnConfig(IUserRank.MINPOINTS, "积分下限", 70)); columns.add(new ColumnConfig(IUserRank.MAXPOINTS, "积分上限", 70)); columns.add(new ColumnConfig(IUserRank.DISCOUNT, "初始折扣率", 70)); // columns.add(new CheckColumnConfig(IUserRank.SPECIAL, "特殊会员组", 120)); // columns.add(new CheckColumnConfig(IUserRank.SHOWPRICE, "显示价格", 80)); ColumnConfig actcol = new ColumnConfig("Action", Resources.constants .GoodsList_action(), 120); columns.add(actcol); ColumnModel cm = new ColumnModel(columns); Grid<BeanObject> grid = new EditorGrid<BeanObject>(store, cm); grid.setLoadMask(true); grid.setBorders(true); grid.setSelectionModel(smRowSelection); ActionCellRenderer render = new ActionCellRenderer(grid); ActionCellRenderer.ActionInfo act = new ActionCellRenderer.ActionInfo(); act = new ActionCellRenderer.ActionInfo(); act.setImage("icon_edit.gif"); act.setAction("updateMemberAction($id)"); act.setTooltip("编辑"); render.addAction(act); act = new ActionCellRenderer.ActionInfo(); act.setImage("icon_trash.gif"); act.setAction("deleteMemberAction($id)"); act.setTooltip("删除"); render.addAction(act); actcol.setRenderer(render); final 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.setHeight(500); panel.setWidth("100%"); panel.setBottomComponent(toolBar); // panel.setButtonAlign(HorizontalAlignment.CENTER); // panel.addButton(new com.extjs.gxt.ui.client.widget.button.Button( // "添加会员级别", new SelectionListener<ButtonEvent>() { // public void componentSelected(ButtonEvent ce) { // NewMemberLevel.State state = new NewMemberLevel.State(); // state.execute(); // } // })); add(panel); Window.addResizeHandler(new ResizeHandler() { public void onResize(ResizeEvent event) { int w = event.getWidth() - 300; panel.setWidth(w + "px"); } }); } private native void initJS(MemberLevelList me) /*-{ $wnd.deleteMemberAction = function (id) { me.@com.jcommerce.gwt.client.panels.member.MemberLevelList::deleteMemberAndRefrsh(Ljava/lang/String;)(id); }; $wnd.updateMemberAction = function (id) { me.@com.jcommerce.gwt.client.panels.member.MemberLevelList::updateMemberAndRefrsh(Ljava/lang/String;)(id); }; }-*/; private void deleteMemberAndRefrsh(final String id) { final Listener<MessageBoxEvent> deleteListener = new Listener<MessageBoxEvent>() { public void handleEvent(MessageBoxEvent ce) { Button btn = ce.getButtonClicked(); if (btn.getText().equals("是")) { Criteria orderCriteria = new Criteria(); orderCriteria.addCondition(new Condition(IUser.RANK, Condition.EQUALS, id)); new ListService().listBeans(ModelNames.USER, orderCriteria, new ListService.Listener(){ public void onSuccess(final List<BeanObject> beans) { BeanObject user = new BeanObject(ModelNames.USER); userUpdatedSize = beans.size(); for(int i=0; i<beans.size(); i++) { user = beans.get(i); user.set(IUser.RANK, null); final UpdateListener listener = new UpdateListener(); new UpdateService().updateBean(user.getString(IUser.ID), user, listener); new WaitService(new WaitService.Job() { public boolean isReady() { return listener.isFinished(); } public void run() { userUpdatedSize--; } }); } } }); new WaitService(new WaitService.Job() { public boolean isReady() { return userUpdatedSize == 0; } public void run() { new DeleteService().deleteBean(ModelNames.USERRANK, id, new DeleteService.Listener() { public void onSuccess(Boolean success) { toolBar.refresh(); MemberLevelList.State state = new MemberLevelList.State(); state.execute(); } }); } }); } } }; MessageBox.confirm("Confirm", "Are you sure you want to do that?", deleteListener); } private void updateMemberAndRefrsh(final String id) { new ReadService().getBean(ModelNames.USERRANK, id, new ReadService.Listener() { public void onSuccess(BeanObject bean) { NewMemberLevel.State state = new NewMemberLevel.State(); state.setMemberLevel(bean); state.execute(); } }); } public void refresh() { toolBar.refresh(); } 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; } } }