




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一得到选中的表体行数,列数等内容(总行数和当前选中的行数)2二设置初始化界面时的默认值3三表单默认执行方法以及常用的操作3四在报表中显示合计行4五在UI类中设置小数位数5六将表体数据清空5七设置字段是否可编辑的状态5八在UI类中编写方法打印查询条件6九弹出提示框6十在报表中得到查询面板的值6十一.比较时间的开始与结束时间7十二.设置编辑公式7十三.清空缓冲数数据getBufferData().clear();7十四. 在UI类中设置查询对话框的默认值7十五. 管理型界面单据各个类的继承关系8十六.是否显示行号,合计行,数组按钮,隐藏列8十七. 根据单据的不同状态来控制按钮的可用性。9十八. U
2、I工厂开发单据模式下如何自定义按钮?10十九.需要设置动作脚本的六个按钮11二十. 单据界面设置某些字段的显示与隐藏11二十一. 单据开发的一般步骤:11二十二. 界面数据访问12二十三.导出与导入数据库12二十四.list map set的操作12二十五. 改变焦点自动显示表头金额的值13二十六.设置行选中的状态13二十七,初始进入时默认显示卡片界面或列表界面14二十八,在MyEventHandler类中,在onBoSave()中验证必输项14二十九.多页签得到某一页签到的行数15三十,判断日期的前后15三十一.验证表头的必输项不能为空16三十二,执行表体编辑公式16三十三,ECLIPSE中
3、代码不显示行号17三十四,在ECLIPSE中添加反编译17三十五,编辑后事件的处理17三十六,编辑前事件的处理17三十七。编辑事件设某一个字段不能编辑18三十八.在保存的时候,验证表体不能为空/18三十九.删除表体某一行触发的事件18四十,UI类中初始化设置18四十一,YES OR NO 对话框19四十二.得到选中的行数与得到选中行数的行号的数组,数组以0开头19四十三.对VO的操作,聚合VO,得到表体,表体某一个页签的VO19四十四.添加一个自定义的按钮20四十五.取得某一个页签下的记录的行数21四十六. 修改的时候,清空批号想要保存到数据库必须设置行的状态21四十七.执行表头的公式21四十
4、八.根据不同的条件,过滤不同的参照记录21四十九,获取表体当前操作页签22五十,输入开始和结束日期,从开始到结束日期每天都列出来22五十一,在列表状态下,根据单据的状态,确定按钮是否可用23五十二,不管在是列表还是卡片面下取得表头或表体的值23五十三,UFDouble型的数据变成两位小数的字符型,或零位小数24五十四,系统按钮的操作24五十五,SQL查询时将字符转换成小数型24五十六,删除单页签表体删除行,以及增行24五十七,多页签表体删除行,增行25五十八,得到月份,年份25五十九,如何得到多页签到指定的子VO25六十:删除表体行25六十一.传过一个主键的数组,如何组装成主键,主键的形式25
5、六十二.导出TXT文本26六十三,删除表体的记录行29六十四.确定某一列在模板上位置29六十五.单据添加复选,判断选中的记录行29六十六,判断按钮的状态是否可用30一得到选中的表体行数,列数等内容(总行数和当前选中的行数)/得到选中的列数selCol=getBillCardPanelWrapper().getBillCardPanel().getBillTable().getSelectedColumn();/得到当前选中列的索引colIndex=getBillCardPanel().getBillTable().convertColumnIndexToModel(selCol);/得到选中的
6、行号从0开始 iSelRow= getBillCardPanel().getBillTable().getSelectedRow();/得到当前选中的行i = getReportBase().getBillTable().getSelectedRow();/得到表体一共有多少行/this.getBillCardPanel().getRowCount();/判断是否选中行if(getSetInBalPriceUI().getBillCardPanel().getBillTable().getSelectedRow() = -1) getSetInBalPriceUI().showErrorMes
7、sage("请选择表体数据行!"); return; /判断选中的某一行的某一列是否为空if (getSetInBalPriceUI().getBillCardPanel().getBodyValueAt(selectRow, "sys_shipper_id") = null) getSetInBalPriceUI().showErrorMessage("请录入发货单位!");/得到某一行某一列指定的值sys_shipper_id= getSetInBalPriceUI().getBillCardPanel().getBodyValu
8、eAt(selectRow, "sys_shipper_id").toString();/得到当前选中行的指定的某一列(String)getReportBase().getBodyValueAt(i,"sendunitID");this.getBillCardPanel().setBodyValueAt(值,行,列);this.getBillCardWrapper().getBillCardPanel();/获取表体第i行字段值getBillCardPanel().getBodyValueAt(i."字段")二设置初始化界面时的默认值
9、/* * 初始化卡片界面时加载的默认属性在UI中 */public void setDefaultData() throws Exception /单据类型 87getBillCardPanel().setHeadItem("pk_billtype", IBillType.CY_DYAPPLYPLAN);/制单日期默认值getBillCardPanel().setTailItem("doperatordate", _getDate();三表单默认执行方法以及常用的操作/自定义按钮处理事件,在自定义按钮的时候会定义一个值,根据传过来的值判断处理哪个事件执行
10、哪个方法,在MyEventHandler类protected void onBoElse(int intBtn) throws Exception * 表单编辑protected void onBoEdit() throws Exception *表单删除protected void onBoDelete() throws Exception * 表单保存protected void onBoSave() throws Exception * 表单取消 protected void onBoCancel() throws Exception * 表单编辑后事件UI类中public void a
11、fterEdit(BillEditEvent evt) super.afterEdit(evt);String colStr = evt.getKey();int rowCount = evt.getRow();* 表单编辑前事件UI类中public boolean beforeEdit(BillEditEvent evt) String colStr = evt.getKey(); If(colStr.equals(“字段名”)return false;/设置某一个字段不可编辑/ TODO 自动生成方法存根return super.beforeEdit(arg0);* 表单标签改变事件UIp
12、ublic void afterTabChanged(BillTabbedPaneTabChangeEvent arg0) String TabName = arg0.getBtvo().getTabcode();System.out.println(TabName);if (TabName.equals("fk_cm_contract1") | TabName.equals("fk_cm_contract2") /设置标签fk_cm_consub可编辑this.getBillCardPanel().getBillModel("fk_cm_co
13、nsub").setEnabled(true);/设置当选中fk_cm_contract1这个标签时,子表的第一个标签到选中显示this.getBillCardPanel().getBodyTabbedPane().getModel().setSelectedIndex(0);/设置标签fk_cm_consub不可编辑this.getBillCardPanel().getBillModel("fk_cm_conisub").setEnabled(false);* UI类中行改变事件public void bodyRowChange(BillEditEvent ev
14、) / TODO 自动生成方法存根super.bodyRowChange(ev); int a = ev.getRow();/得到当前选中的行 int a = this.getBillCardPanel().getBillTable().getSelectedRow(); String b = this.getBillCardPanel().getBodyValueAt(行号, "字段值");四在报表中显示合计行protected void onQuery() throws Exception String pk_corp = this.getCorpPrimaryKey(
15、); /设置表头面板显示表头查询条件和打印时表头显示信息 createConditionAndHeadPrintInfo(); /显示查询结果 CircularlyAccessibleValueObjectresults= getQueryResult(port); ReportBaseVO tvo = new ReportBaseVO(); tvo.setAttributeValue("port","合计"); /添加合计 if(results != null && results.length>0) CircularlyAcce
16、ssibleValueObjectnvos=new CircularlyAccessibleValueObjectresults.length+1; UFDouble totalnum = new UFDouble(0); for(int i=0;i<results.length;i+) totalnum= totalnum.add(UFDouble)resultsi.getAttributeValue("shuliang"); nvosi=resultsi; tvo.setAttributeValue("shuliang",totalnum);
17、nvosresults.length=tvo; getReportBase().setBodyDataVO(nvos); this.getReportBase().setBodyValueAt("合计",results.length,"port"); if(results=null|results.length<=0) getReportBase().setBodyDataVO(results); showHintMessage("没有可显示数据"); 五在UI类中设置小数位数public ArrearsComStaUI() s
18、uper.setTitleText("欠款单位表");/设置小数位数:this.setColumnDecimal(new String"carnum","tonnum","jsmoney","yingkuids","yunfei","qitafy","amount", new int0,0,0,0,0,0,0);或是:this.getReportBase().getBody_Item("quan").setDecim
19、alDigits(0);六将表体数据清空this.getBillCardPanel().getBillModel().clearBodyData();七设置字段是否可编辑的状态/* 发运开始日期 结束日期 编辑控制 在运输方式是地销时 可编辑 其他不可编辑if(colStr.equals("conveytype")String str = this.getBillCardPanel().getHeadItem("conveytype").getValue();if(str != null && !str.trim().equals(&qu
20、ot;")if(ITargetPrimaryID.CARCONVEYANCE_CONVEY.equals(str)this.getBillCardPanel().getHeadItem("startdate").setEnabled(true);this.getBillCardPanel().getHeadItem("enddate").setEnabled(true);elsethis.getBillCardPanel().setHeadItem("startdate",null);this.getBillCardPane
21、l().setHeadItem("enddate",null);this.getBillCardPanel().getHeadItem("startdate").setEnabled(false);this.getBillCardPanel().getHeadItem("enddate").setEnabled(false);八在UI类中编写方法打印查询条件protected void createConditionAndHeadPrintInfo() this.showCondition(this.createConditionsF
22、romConditionVO(this.getQryDlg().getConditionVO();this.updateUI();九弹出提示框MessageDialog.showOkCancelDlg(getDyApplyPlanUI(), "提示", "你确定要下发该单据吗?")/弹出对话框nc.ui.pub.beans.MessageDialog.showHintDlg(getBillUI(), "提示", "客户基本档案更新成功!");十在报表中得到查询面板的值protected void onQuery()
23、 throws Exception getQryDlg().showModal(); if (getQryDlg().getResult() = QueryDLG.ID_OK) /取得查询日期 String port = null;/港口 ConditionVO cndvos = getQryDlg().getConditionVO(); for(int i=0;i<cndvos.length;i+) if("port".equals(cndvosi.getFieldCode() port = cndvosi.getValue().trim(); 十一.比较时间的开始
24、与结束时间if(pareTo(enddate) > 0) getSetInBalPriceUI().showErrorMessage("【起始日期】不能超过【结束日期】!");return; 十二.设置编辑公式/ 表体显示公式 StringbodyForm=newString "sys_shipper_id->getColValue(zk_sys_organ,sys_organ_id,sys_organ_id,sys_shipper_id)" ;for (int i = 0; i < assayInfo.length; i+) supe
25、r.onBoLineAdd();/增行/为表体某一行赋值getSetInBalPriceUI().getBillCardPanel().setBodyValueAt(String)assayInfoi.getAttributeValue("laiyangdanwei"), i, "sys_shipper_id");/执行表体公式getSetInBalPriceUI().getBillCardPanel().getBillModel().execFormulas(i, bodyForm);/ 十三.清空缓冲数数据getBufferData().clear(
26、);十四. 在UI类中设置查询对话框的默认值格式:2009-01protected QueryDLG createQueryDLG() ZBReportBaseDLG dlg = new ZBReportBaseDLG();dlg.setTempletID(getUIControl()._getPk_corp(), getUIControl()._getModuleCode(), getUIControl()._getOperator(), null);dlg.setValueRef("sdate", getQueryYearMonth();dlg.setValueRef(
27、"edate", getQueryYearMonth();/ 设置默认的选择当前年QueryConditionVO qryvos = dlg.getConditionDatas();for (int i = 0; i < qryvos.length; i+) if (qryvosi.getFieldCode().equals("sdate") qryvosi.setValue(this.getClientEnvironment().getDate().toString().substring(0,7);if (qryvosi.getFieldCod
28、e().equals("edate") qryvosi.setValue(this.getClientEnvironment().getDate().toString().substring(0,7);return dlg;十五. 管理型界面单据各个类的继承关系前台界面类:ClientUI extends BIllManageUI1. 重写父类方法protected BusinessDelegator createBusinessDelegator() 返回前台界面业务委托类的具体实现。2. 重写父类方法protected ManageEventHandler create
29、EventHandler() 返回前台事件处理(按钮处理器)类的具体实现。3. 重写父类方法protected AbstractManageController createController() 返回前台控制类的具体实现。4. 重写父类方法protected void initPrivateButton() 添加私有按钮 addPrivateButton(new DeleteAllbutnVO().getButtonVO()5. 重写父类方法protected void initSelfData() 6. 重写父类方法public void setDefaultData() throws
30、Exception 设置默认数据事件处理类:TestEventHandler extends ManageEventHandler重写父类各种单据按钮事件,完成具体的事件动作实现。如:1. 重写查询类protected void onBoQuery() throws Exception super.onBoQuery();2. 重写其他按钮动作事件处理,比如(导入等)protected void onBoElse(int intBtn) throws Exception super.onBoQuery();十六.是否显示行号,合计行,数组按钮,隐藏列1. 列表状态下是否显示行号public b
31、oolean isShowListRowNo() return false;2. 卡片状态下是否显示行号public boolean isShowCardRowNo() return false;3. 卡片状态下是否显示合计public boolean isShowCardTotal() return false;4. 列表状态下是否显示合计public boolean isShowListTotal() return false;5. 返回卡片状态下按钮数组public int getCardButtonAry() return new int IBillButton.Add, IBillB
32、utton.Query,IBillButton.Save, IBillButton.Edit, IBillButton.Del,IBillButton.Line, IBillButton.Cancel, IBillButton.Print,IBillButton.Return,;6. 返回列表状态下按钮数组public int getListButtonAry() return new int IBillButton.Add, IBillButton.Query,IBillButton.Save, IBillButton.Edit, IBillButton.Del,IBillButton.Ca
33、rd, IBillButton.Cancel, IBillButton.Print,ISHTestButton.DeleteAllButton,;7. 返回卡片状态表体隐藏列public String getCardBodyHideCol() return null;8. 返回列表状态表头隐藏列public String getListHeadHideCol() return null;十七. 根据单据的不同状态来控制按钮的可用性。在UI工厂中,系统预置的按钮事件是在onButtonClicked()方法中处理,自定义的按钮在onBoElse()方法中处理。protected void onB
34、oElse(int intBtn) switch(intBtn) case ITestButton.DeleteAll: onDeleteAll(); break; 十八. UI工厂开发单据模式下如何自定义按钮?1. 建立一个自定义按钮的接口:ITestButton 定义按钮的ID值,自定义按钮的ID必须大于100 public interface ITestButton int DeleteAll = 101; 2. 创建一个按钮的VO类 public class DeleteAllVO public nc.vo.trade.button.ButtonVO getButtonVO() But
35、tonVO btnVo = new ButtonVO(); btnVo.setBtnNo(ITestButton.DeleteAll); btnVo.setBtnName("删除全部"); btnVo.setHintStr("删除本单据全部数据"); btnVo.setOperateStatus(new int IBillOperate.OP_ADD); btnVo.setBusinessStatus(new int IBillStatus.FREE); return btnVo; 3. 在控制类中将自定义按钮添加到界面上 public int getC
36、ardButtonAry() return new int IBillButton.ADD, ITestButton.DeleteAll ; 4. 在UI类里面实例化自定义按钮并实例化 protected void initPrivateButton() ButtonVO deleteAll = (new DeleteAllVO).getButtonVO(); addPrivateButton(deleteAll); 5. 在控制类中响应按钮事件并实现自定义按钮的事件处理 protected void onBoElse(int intBtn) switch(intBtn) case ITest
37、Button.DeleteAll: onDeleteAll(); break; protected void onDeleteAll() /具体实现 十九.需要设置动作脚本的六个按钮动作脚本保存(WRITE)修改(EDIT)作废(DELETE)提交(SAVE)审批(APPROVE)弃审(UNAPPROVE)二十. 单据界面设置某些字段的显示与隐藏(1)在单据模板上可以设置每一个字段的显示与隐藏 (2)在单据UI类的initSelfData()方法中设置protected void initSelfData() /设置字段的不可编辑和隐藏 getBillListPanel().hideBodyT
38、ableCol("字段"); getBillCardPanel().getBodyItem("字段").setEdit(false);二十一. 单据开发的一般步骤:1. 数据建模,生成数据库表2. 利用平台工具或手工生成VO3. 平台注册 系统类型注册(可选) 功能注册 单据类型 VO对照注册 单据动作注册 单据动作组注册 单据动作执行脚本(注册完将生成的代码拷贝到开发环境)4. 导入数据字典5. 生成单据模板、查询模板6. 模板注册(功能节点默认模板设置)7. 建立界面类、控制类、事件处理类等代码框架进行开发 定制界面控制类 1) 创建控制类,实现IC
39、ardController接口 2) 重载getBillType(),返回单据类型。 3) 重载getBillVoName()方法,关联VO类,控制单据数据的获取。 4) 重载getBusinessActionType()方法,设置单据是否走流程平台。 public int getBusinessActionType() return IBusinessActionType.BD; /IBusinessActionType为接口常量,BD表示单据不走流程平台。二十二. 界面数据访问一、卡片界面 1. 表头数据 得到表头item值:getBillCaedPanel().getHeadItem(&
40、quot;pk_corp").getValue(); 2. 表体数据 得到列表行数:int rowCornt = getBillCardPanel().getBillModel().getRowCount(); 得到选中的行:int curRow = getBillCardPanel().getBillTable().getSelectedRow(); 得到表体某行某列值:getBillCardPanel().getBodyValueAt(curRow,"colName");二、列表界面 1. 表头数据 得到行数:getBillListPanel().getHea
41、dBillModel().getRowCount(); 取得数据: getBillListPanel().getHeadBillModel().getValueAt(row,"colName"); 2. 表体数据 取得数据:getBillListPanel().getBodyBillModel().getValueAt(row,"colName"); 二十三.导出与导入数据库导出数据库Exp 用户名/密码QID_ 数据库IP地址 file=c:文件名.dmp full =y (ower= 用户名)导入数据库Imp用户名/密码QID_ 数据库IP地址 fr
42、omuser=用户名 touser=用户file=c:文件名.dmp二十四.list map set的操作/遍历listIterator it = list型变量.iterator();While(it.hasNext()Map map = it.next()List list = new ArrayList();i.add(“add”);for(Iterator it = i.iterator();it.hasNext();)String str = (String) it.next();/Set里面没有重复值,无序/List按索引,Map按键值对Set set = new HashSet(
43、);Set.add(“java”);/Map中If(map!=null && !map.isEmpty()Set keys = map.keySet();For(Iterator it = key.iterator;it.hasNext();)String key = (String) it.next();/这样就取出了KEY的值或For(iterator it = map.entrySet().iterator();it.hasnext();)Map.Entry entry = (Map.Entry)it.next();Object key = entry.getkey();
44、/这是KEY的值Object value = entry.getValue();/这是VALUE的值二十五. 改变焦点自动显示表头金额的值/* * 改变焦点自动显示表头金额的值 */ public void afterEdit(BillEditEvent a) super.afterEdit(a); String str = a.getKey().trim(); UFDouble dprice = new UFDouble(0); String subjectcode1 = ""/一级科目编码 /编辑表体"金额"后,自动计算表头的“金额”if (str.
45、equals("dprice") int rowCount = this.getBillCardPanel().getRowCount();/ 获取总行数for (int i = 0; i < rowCount; i+)subjectcode1 = this.getBillCardPanel().getBodyValueAt(i, "subjectcode1").toString().trim();if(subjectcode1.equals("1122")dprice = dprice.add(new UFDouble(thi
46、s.getBillCardPanel().getBodyValueAt(i, "dprice").toString();this.getBillCardPanel().setHeadItem("dprice",dprice); 二十六.设置行选中的状态public void valueChanged(ListSelectionEvent e) if (e.getValueIsAdjusting() = true) return; /将所有行状态置为未选中 int iCount = getBillListPanel().getHeadTable().get
47、RowCount(); for (int i = 0; i < iCount; i+) getBillListPanel().getHeadBillModel().setRowState(i,BillModel.NORMAL); /得到被选中的行 int iaSelectedRow = getBillListPanel().getHeadTable().getSelectedRows(); if (iaSelectedRow != null) iCount = iaSelectedRow.length; /选中的行表示为打号 for (int i = 0; i < iCount;
48、i+) getBillListPanel().getHeadBillModel().setRowState(iaSelectedRowi, BillModel.SELECTED); if (getBillListPanel().getHeadTable().getSelectedRowCount() = 0) getBufferData().setCurrentRow(-1); return; if (getBillListPanel().getHeadTable().getSelectedRowCount() > 1) getBufferData().setCurrentRow(iaS
49、electedRow0);/显示第一行表体数据 else /显示当前选中行的表体数据; int row = getBillListPanel().getHeadTable().getSelectedRow(); int indexs = getBillListPanel().getHeadBillModel().getSortIndex(); if (indexs != null) row = indexsgetBillListPanel().getHeadTable().getSelectedRow(); getBufferData().setCurrentRow(row); 二十七,初始进
50、入时默认显示卡片界面或列表界面/ 初始化自己UI单据模版数据protected void initSelfData() setCurrentPanel("CARDPANEL");/ 初始进入时默认显示卡片界面setMonUIComboBox(this.getBillCardPanel(),"cdodepartment_id");/ 初始化"制单部门"下拉菜单setCurrentPanel("LISTPANEL");/查询后显示列表界面二十八,在MyEventHandler类中,在onBoSave()中验证必输项if
51、 (checkIsNull_Body() return;private boolean checkIsNull_Body() / 获取表体行数/ int rowCount =/ getContractMonthMngUI().getBillCardPanel().getRowCount();/ 获取表体行数int rowCount = getContractMonthMngUI().getBillCardPanel().getBillModel("fk_cm_mconsub").getRowCount();if (rowCount <= 0) getContractM
52、onthMngUI().showErrorMessage("表体无数据");return true;BillModel bm = getContractMonthMngUI().getBillCardPanel().getBillModel("fk_cm_mconsub");for (int i = 0; i < rowCount; i+) if (bm.getValueAt(i, "csclient_id") = null) getContractMonthMngUI().showErrorMessage("小合同子
53、表表体第" + (i + 1) + "行,收货单位不能为空");return true;return false;二十九.多页签得到某一页签到的行数/ 获取表体行数int rowCount = getContractMonthMngUI().getBillCardPanel().getBillModel("fk_cm_mconsub").getRowCount();三十,判断日期的前后private boolean checkDate() / TODO 自动生成方法存根UFDate begindate = new UFDate(getContr
54、actMonthMngUI().getBillCardPanel().getHeadItem("cdatebegin").getValue();UFDate enddate = new UFDate(getContractMonthMngUI().getBillCardPanel().getHeadItem("cdateend").getValue();if (begindate.after(enddate) getContractMonthMngUI().showErrorMessage("有效期(截止期)必须大于有效期(起始期)");return true;if (begindate.getYear() != enddate.getYear() getContractMonthMn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力行业安全事故报告制度流程
- 汽车检测系统项目申请报告
- 改进Rossi-alpha方法研究及其监测程序开发
- 声学双边界元法及其快速算法研究
- 教师考级活动策划方案
- 摇大绳活动活动方案
- 播撒花种活动方案
- 教师区域活动方案
- 教育公司营销策划方案
- 扣扣红包活动方案
- 运输公司交通安全培训课件
- 2025年陕西省中考数学试题(解析版)
- 《康复治疗学专业毕业实习》教学大纲
- 北师大版7年级数学下册期末真题专项练习 03 计算题(含答案)
- 职业卫生管理制度和操作规程标准版
- 小学信息技术四年级下册教案(全册)
- 河道保洁船管理制度
- 【增程式电动拖拉机驱动系统总体设计方案计算1900字】
- 2025年重庆市中考物理试卷真题(含标准答案)
- 2025至2030中国云计算行业产业运行态势及投资规划深度研究报告
- 高中家长会 共筑梦想,携手未来课件-高二下学期期末家长会
评论
0/150
提交评论