F7控件监听

  f7控件的监听是指,在点击F7控件时,对控件内的内容进行选中后出发该事件监听;通过参数value可以获取当前F7控件的一些值信息。

  1. //人力编制方案监听 回写计划期间 及分录数据
  2. initalRecruitment :function() {
  3. var self = this;
  4. if(this.getHistoryOperateState() != "VIEW"){
  5. $("#hrPlaitProject").shrPromptBox("option", {
  6. onchange : function (e, value) {
  7. if(value.current == null){
  8. return;
  9. }
  10. var currentId = value.current.id;
  11. self.remoteCall({
  12. method : 'getEntry',
  13. param : {
  14. plaitProjectId : currentId
  15. },
  16. success : function(data) {
  17. $("#planPeriod").val(data.planPeriod);
  18. self.initalEntry(data.entryData);
  19. }
  20. });
  21. }
  22. });
  23. }
  24. }

初始化F7控件值

  将初始化方法写入到initalizeDOM() 初始化页面方法中。给F7赋值时,需要提供id,name 格式数据。

  1. /*初始化单位*/
  2. initAdminOrg: function(){
  3. var self = this;
  4. self.remoteCall({
  5. method : "getCurrentCompany",
  6. success : function(data) {
  7. if(data != undefined && data != null) {
  8. var adminOrg = {id:data.orgId,name:data.orgName};
  9. $("#unitOrg").shrPromptBox("setValue", adminOrg);
  10. }
  11. }
  12. });
  13. }

初始化F7时,添加过滤

  组装好filter后,给F7控件设置过滤条件Filter。此处的list 需要进行处理,因为不符合 ‘1’,‘2’,‘3’ 格式。

  1. /*初始化携带证件的 证件类型F7*/
  2. initCredentialType: function(data){
  3. var self = this;
  4. if(data != '' && data != null){
  5. var personId = data;
  6. self.remoteCall({
  7. method : 'getPersonCredentialTypeId',
  8. param : {
  9. personId : personId
  10. },
  11. success : function(datas) {
  12. if(datas != '' && datas != null){
  13. var list = datas.types;
  14. var filter = "id in ('" +list + "')";
  15. $("#credential").shrPromptBox("setFilter",filter);
  16. }
  17. }
  18. });
  19. }
  20.  
  21. }

  此处为过滤条件的获取Handler,着重对list进行处理。

  1. *
  2. * <p>
  3. * Title: getPersonCredentialTypeIdAction
  4. * </p>
  5. * <p>
  6. * Description:
  7. * </p>
  8. * 获取出境员工的 出入境证件信息 证件类型id
  9. *
  10. * @param request
  11. * @param response
  12. * @param modelMap
  13. * @throws SHRWebException
  14. */
  15. public void getPersonCredentialTypeIdAction(HttpServletRequest request, HttpServletResponse response,
  16. ModelMap modelMap) throws SHRWebException {
  17. String personId = request.getParameter("personId");
  18. StringBuilder sb = new StringBuilder();
  19. if (StringUtils.isEmpty(personId)) {
  20. throw new ShrWebBizException("初始化携带证件类型失败!");
  21. }
  22. try {
  23. // 出入境证件信息
  24. String sql = "select cftypesid from CT_E_EntryAndExitCredential where cfpersonid = '" + personId
  25. + "'";
  26. IRowSet rowSet = DbUtil.executeQuery(ctx, sql);
  27. List<String> list = new ArrayList<String>();
  28. while (rowSet.next()) {
  29. String typeId = rowSet.getString("cftypesid");
  30. list.add(typeId);
  31. }
  32.  
  33. for (int i = 0; i < list.size(); i++) {
  34. String str = list.get(i);
  35. sb.append(str);
  36. if (i < list.size() - 1) {
  37. 37 sb.append("','");
  38. 38 }
  39. }
  40. modelMap.put("types", sb.toString());
  41.  
  42. JSONUtils.writeJson(response, modelMap);
  43. } catch (BOSException e) {
  44. e.printStackTrace();
  45. throw new ShrWebBizException("初始化证件类型中获取出入境证件失败!" + e);
  46. } catch (SQLException e) {
  47. e.printStackTrace();
  48. logger.error("执行sql失败!" + e);
  49. }
  50. }

对分录进行赋值

  首先是在视图中定义好分录及字段。如下:

  1. ...... //其余部分省略
    <editGrid name="entrys" sorterItems="department asc" >
  2. <column name="familyMember" required="true" readonly="true" editable="false" width="185"/>
  3. <column name="name" required="true" readonly="true" editable="false" width="200"/>
  4. <column name="sex" readonly="true" editable="false" width="110"/>
  5. <column name="nationality" readonly="true" editable="false" width="110"/>
  6. <column name="company" rreadonly="true" editable="false" width="110"/>
  7. <column name="telphone" readonly="true" editable="false" width="110"/>
  8. </editGrid>
    ......

  分录赋值:

  1. //根据人力编制方案 初始化招聘计划明细waf
  2. initalEntry: function(datas){
  3. var rowdatas = datas;
  4. for(var i = 0, len = rowdatas.length; i < len; i++){
  5. var info = rowdatas[i];
  6. var datarow = {
  7. "adminOrg":info.adminOrg,
  8. "postion":info.postion,
  9. "plaitNum":info.plaitNum,
  10. "missNum":info.missNum
  11. };
  12. waf("#entrys").jqGrid('addRow',{data:datarow});
  13. }
  14. }

监听分录中的F7控件

  视图:

  1. <group name="detail" caption="八级工报名明细" >
  2. <editGrid name="entrys" sorterItems="department asc" >
  3. <column name="person" required="true" label="姓名" uipk="shr.custm.person.F7" width="80"/>
  4. <column name="gender" readonly="true" editable="false" width="50" />
  5. <column name="birthDate" readonly="true" editable="false" width="120"/>
  6. <column name="education" readonly="true" editable="false" width="120"/>
  7. <column name="applyWorkType" width="110" required="true"/>
  8. <column name="applyLeavel" width="110" required="true"/>
  9. <column name="applyType" width="110" required="true"/>
  10. <column name="workYears" required="true"/>
  11. <column name="entryDate" readonly="true" editable="false" width="120"/>
  12. <column name="mType" readonly="true" editable="false" width="120"/>
  13. <column name="remark" readonly="true" editable="false" width="110"/>
  14. <column name="turnInto" readonly="true" editable="false" width="80"/>
  15. </editGrid>
  16. </group>

  监听值改变事件

  1. tableCellChange: function(){
  2. var self = this;
  3. var grid = waf("#entrys");
  4. grid.wafGrid("option", {
  5. afterSaveCell:function (rowid, cellname, value, iRow, iCol) {
  6. if(cellname=="person") { // 只监听person 列的值改变
  7. self.assignData(rowid);
  8. }
  9. }
  10. });
  11.  
  12. }

  分录grid当前行赋值

  1. assignData: function(rowid){
  2. var self = this;
  3. var person = $("#entrys").jqGrid('getCell',rowid,"person");
  4. if(person == null || person == ''){
  5. return;
  6. }
  7. var personId = person.id;
  8. self.remoteCall({
  9. method:'getPersonData',
  10. param : {
  11. personId : personId
  12. },
  13. success:function(data){
  14. if(data != '' && data != null){
  15. var gender = data.gender;
  16. var birthday = data.birthday;
  17. var degree = data.degree;
  18. var entreDate = data.entreDate;
  19. var typeName = data.typeName;
  20.  
  21. $("#entrys").jqGrid('setCell',rowid,"gender",gender);
  22. $("#entrys").jqGrid('setCell',rowid,"birthDate",birthday);
  23. $("#entrys").jqGrid('setCell',rowid,"education",degree);
  24. $("#entrys").jqGrid('setCell',rowid,"entryDate",entreDate);
  25. $("#entrys").jqGrid('setCell',rowid,"mType",typeName);
  26.  
  27. }
  28. }
  29. });
  30. }

单选按钮

  

  视图:视图中只定义一个出境类型的div,然后使用js进行填充单选组内容。

  1. <group>
  2. <div id="exitType">
  3. <div class="col-lg-4">
  4. <div class="field_label" title="出境类型">出境类型</div>
  5. </div>
  6. <div class="field-ctrl">
  7. <div class="radiowrap">
  8. <!-- 出境类型 -->
  9. </div>
  10. </div>
  11. </div>
  12. </group>
  1. //初始化出境类型
  2. initRecruitmentTypeContent: function(){
  3. var self = this;
  4. if(this.getOperateState() != "VIEW"){
  5. self.remoteCall({
  6. method : "getExitTypeContent",
  7. success : function(data){
  8. if(data != undefined) {
  9. var recTypeHTML = "";
  10. for(var i=0; i<data.length; i++) {
  11. var type = data[i];
  12. recTypeHTML += '<input name="exitType" type="radio" id="exitType'+type.number+'" class="radio" data-pk="'+type.id+'" data-name="'+type.name+'" /> <label for="exitType'+type.number+'" class="radio_label">'+type.name+'</label>';
  13. }
  14. $("#exitType").find(".radiowrap").html(recTypeHTML);
  15. }
  16. }
  17. });
  18. }
  19. }

 

向服务端发送请求(常用)

   method对应的参数名就是handler中的该参数名+Action方法

  1. self.remoteCall({
  2. method : 'getEntry',
  3. param : {
  4. plaitProjectId : currentId
  5. },
  6. success : function(data) {
  7. $("#planPeriod").val(data.planPeriod);
  8. self.initalEntry(data.entryData);
  9. }
  10. });

控件值改变时间(文本框 日期控件等)

  1. $('#endDate').change(function(){
  2. self.countApplyDays();
  3. });

页面弹框提示

  showInfo showWarning等。其中hideAfter指得的控件消失时间(s)。

  1. shr.showWarning({
  2. message:"截止日期不能小于起始日期",
  3. hideAfter:5
  4. });

页面按钮

  提交生效

    提交生效 指得是当前业务单据直接保存并审核通过。

    一般有两种情况,在handler中需要进行区分:

      1. 当前业务单据完成信息录入操作后,直接点击的提交生效按钮。(即该业务单据尚未保存,此时传递到Handler的model中是不会有单据id的;此时业务单据如果有分录信息的话,该model中也是可以获取的)

      2. 当前业务单据完成信息录入后,点进行了保存操作,而后点击提交生效。(则在Handler中就不需要对该单据信息进行保存了,只需要更新单据状态为审批通过及其他业务逻辑处理即可;此时保存后的单据,在提交生效Handler中获取model 时,获取不到分录信息的,需要根据单据id查询分录信息)

    

  1. /**
  2. * 单据提交生效
  3. * @param {} event
  4. */
  5. submitEffectAction : function (event) {
  6. var _self = this;
  7. _self.remoteCall({
  8. method:'canSubmitEffect',
  9. success:function(data){
  10. if("success" == data.state){
  11. if(_self.getOperateState() == 'VIEW' ){//&& _self.checkBillState()
  12. shr.showConfirm('您确认要提交生效吗?', function() {
  13. _self.prepareSubmitEffect(event, 'submitEffect');
  14. });
  15. }else{
  16. if (_self.validate() && _self.verify() ) { //&& _self.checkBillState()
  17. shr.showConfirm('您确认要提交生效吗?', function() {
  18. _self.prepareSubmitEffect(event, 'submitEffect');
  19. });
  20. }
  21. }
  22. }
  23. }
  24. });
  25. },
  26. prepareSubmitEffect : function (event, action){
  27. var _self = this;
  28. var data = _self.assembleSaveData(action);
  29.  
  30. var target;
  31. if (event && event.currentTarget) {
  32. target = event.currentTarget;
  33. }
  34.  
  35. shr.doAction({
  36. target: target,
  37. url: _self.dynamicPage_url,
  38. type: 'post',
  39. data: data,
  40. success : function(response) {
  41. _self.back();
  42. }
  43. });
  44. },

  保存

    保存逻辑一般不需要重写,但是如果单据上有一些单据处理的内容,比如单选组信息,次数就需要重写saveAction,重新用

assembleSaveData()方法进行对传递到服务端的数据进行组装。获取到数据以后单独对该选中的单选组信息进行保存。保存、提交、提交生效方法都会调用该方法。

assembleSaveData()方法一般情况下不需要重写,该方法就是为了组装传递至服务端数据model。比如此处的 需要对单选组信息出境类型进行单独保存。Handler中通过 String exitTypeId = request.getParameter("exitType"); 进行获取 data.exitType = _self.getRecuritmentTypeDate() 的值。

  1. //组装保存时传至服务端的数据 (当需要传输单据上别的数据的时候 可以在这个方法中组装数据传递到后端)
  2. assembleSaveData: function(action){
  3. var _self = this;
  4. var data =_self.prepareParam(action + 'Action');
  5. data.method = action;
  6. data.operateState = _self.getOperateState();
  7. data.model = shr.toJSON(_self.assembleModel());
  8.  
  9. var model = data.model;
  10. if(model != undefined && model != "") {
  11. data.model = model.replace(/<pre\sclass=\\"textarea-format\\">/gi,"").replace(/<\/pre>/gi,""); //抹掉因为在view界面中对富文本调.html()方法而带出的标签
  12. }
  13.  
  14. data.exitType = _self.getRecuritmentTypeDate();
  15.  
  16. // relatedFieldId
  17. var relatedFieldId = this.getRelatedFieldId();
  18. if (relatedFieldId) {
  19. data.relatedFieldId = relatedFieldId;
  20. }
  21.  
  22. return data;
  23. },
  24. //获取选中的出境类型 id
  25. getRecuritmentTypeDate : function(){
  26. var type = $("#exitType input[type='radio']:checked");
  27. var recTypeId = $(type).attr("data-pk");
  28. return recTypeId;
  29. }

 

  1. /**
  2. * 单据保存 重写
  3. * @param {} event
  4. */
  5. saveAction: function(event) {
  6. var _self = this;
  7. if (_self.validate() && _self.verify()) {
  8. //_self.refreshNowBillState();
  9.  
  10. _self.doSave(event, 'save');
  11.  
  12. }else{
  13. if(_self != top){// in iframe
  14. shr.setIframeHeight(window.name);
  15. }
  16.  
  17. }
  18. },
  19. /**
  20. * 保存真正执行方法
  21. */
  22. doSave: function(event, action) {
  23. var _self = this;
  24. var data = _self.assembleSaveData(action);
  25.  
  26. var target;
  27. if (event && event.currentTarget) {
  28. target = event.currentTarget;
  29. }
  30.  
  31. shr.doAction({
  32. target: target,
  33. url: _self.dynamicPage_url,
  34. type: 'post',
  35. data: data,
  36. success : function(response) {
  37. if (_self.isFromF7()) {
  38. // 来自F7,关闭当前界面,并给F7设置
  39. var dataF7 = {
  40. id : response,
  41. name : $.parseJSON(data.model).name
  42. };
  43. dialogClose(dataF7);
  44. } else {
  45. // 普通保存,去除最后一个面包屑,防止修改名字造成面包屑重复
  46. shrDataManager.pageNavigationStore.pop();
  47. _self.viewAction(response);
  48. }
  49. }
  50. });
  51. }

    套打

  1. 配置视图中的套打按钮 templatePrint

   2. 绘制套打模板 js写入套打模板路径   /s-HR/Cadreadministrator/CadreadministratorJob

  3. 绑定查询数据源  com.kingdee.eas.custom.cadreadministrate.app.CadreAppointmentQuery

  1. /**
  2. * 套打模板名称
  3. */
  4. getTemplateName: function() {
  5. return '/s-HR/Cadreadministrator/CadreadministratorJob';
  6. },
  7. /**
  8. * 套打dataProvider
  9. */
  10. getTemplateDataProvider: function() {
  11. return 'com.kingdee.bos.webframework.component.report.CommonDataProvider';
  12. }
  13. getTemplateQueryPK: function() {
  14. return 'com.kingdee.eas.custom.cadreadministrate.app.CadreAppointmentQuery';
  15. }

 

   加载css外部样式表 并优先加载

  1. <style href="${appPath}/custom/web/css/evalPerson/evalPerson.css"/>
  2.  
  3. evalPerson.css
  4. /**
  5. 修改 #solutionPeriodname_down 下拉列表width 并提高优先级
  6. */
  7. #solutionPeriodname_down {
  8. width:430px !important;
  9. }
  10.  
  11. !important作用是提高指定CSS样式规则的应用优先权

  数据表格分页设置

  1. <grid multiselect="false" rowList="[100,200]" rowNum="" >
  2.  
  3. rowList 为每次查询条数
  4.  
  5. rowNum 为初始查询条数(默认查询50条)

 

Shr-前端汇总的更多相关文章

  1. Web前端汇总

    http://www.cnblogs.com/bigboyLin/p/5272902.html HTML/CSS部分   1.什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括 ...

  2. js,jquery,css,html5特效

    包含js,jquery,css,html5特效,源代码 本文地址:http://www.cnblogs.com/roucheng/p/texiao.html 2017新年快乐特效 jQuery最新最全 ...

  3. jQuery+css3侧边栏导航菜单

    效果体验:http://hovertree.com/texiao/jquery/37/ 代码如下: <!doctype html> <html lang="zh" ...

  4. 节日来了发个HTML5红包

    效果图: 请关注微信公众号 何问起 , 账号ihewenqi ,或者微信扫描下图二维码: 关注后发送 愚人节 ,或 微信节日红包 ,可以体验效果. 代码如下: <!DOCTYPE html> ...

  5. 炫酷的jQuery对话框插gDialog

    js有alert,prompt和confirm对话框,不过不是很美体验也不是很好,用jQuery也能实现, 体验效果:http://hovertree.com/texiao/jquery/34/ 代码 ...

  6. 使用jquery增加网站粘度

    增加网站粘度,可以在页面增加一个“随机访问”链接,当点击链接时,随机打开预先设定好的链接集合中的一个. 使用jquery可以实现这个功能,RandomVisit就是这样的一个jQuery插件. 官方网 ...

  7. jquery和css3实现滑动导航菜单

    效果预览:http://keleyi.com/keleyi/phtml/html5/15/ 有都中颜色可供选择,请使用支持HTML5/CSS3的浏览器访问. HTML源代码: <!DOCTYPE ...

  8. jQuery弹出窗口浏览图片

    效果预览:http://keleyi.com/keleyi/phtml/jqtexiao/3.htm HTML文件代码: <!DOCTYPE HTML> <html> < ...

  9. jquery图片播放切换插件

    点击这里查看效果可自定义数字样式和左右点击按钮 这个更好:移入按钮切换版本 更多图片轮播 以下是HTML文件代码: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  10. 如何使用jQuery 制作全屏幕背景的嵌入视频

    实际效果查看:http://keleyi.com/keleyi/phtml/jqtexiao/28.htm 请使用支持HTML5的浏览器查看本效果. 完整代码如下: <!doctype html ...

随机推荐

  1. 跳跃表 SkipList【数据结构】原理及实现

    为什么选择跳表 目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等. 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? ...

  2. PyCharm的Debug工具栏中的Watches

    In the Watches pane you can evaluate any number of variables or expressions in the context of the cu ...

  3. json查看器

    jsonview: http://www.bejson.com/jsonviewernew/

  4. centos7 yum安装mysql后启动不起来问题

    [root@localhost ~]# systemctl start mysqld       启动失败 Job for mysqld.service failed because the cont ...

  5. OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改

    OC对象里面包含的结构体类型的属性,不能对该结构体属性的成员单个进行修改,需要对OC对象的结构体属性整体赋值. 关于网上很多博客写着“结构体类型里面的某个属性如果想要修改是不允许单个修改的” 之解释: ...

  6. iOS读取info.plist中的值

    在app运行的时候,需要读取info.plist中的信息,用以下代码可获取整个info.plist的信息 [[NSBundle mainBundle] infoDictionary] 以下为根据 ke ...

  7. GPUImage源码解读之GPUImageFramebufferCache

    简介 由于GPUImage添加滤镜可以形成一个FilterChain,因此,在渲染的过程中,可能会需要很多个FrameBuffer,但是正如上文所说,每生成一个FrameBuffer都需要占用一定的内 ...

  8. 在mac下运行 npm run eject 出现报错问题解决方法

    当使用create-react-app创建项目后,接着运行npm run eject时,如果出现下面的错误 可能是脚手架添加了.gitignore这个文件,但是没有本地仓库,可以使用以下代码解决这个问 ...

  9. mysql的docker化安装

    mysql版本有很多,先看下各类版本号说明: 3.X至5.1.X:这是早期MySQL的版本.常见早期的版本有:4.1.7.5.0.56等. 5.4.X到5.7.X:这是为了整合MySQL AB公司社区 ...

  10. 分布式缓存 Redis(一)

    概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括string( ...