创建体检单业务对象,以下是业务对象下的实体为主子孙结构
1、根据业务对象创建一主多子结构单据命名为体检单
2、设置主表字段不允许修改
组织、客户、累计出库年月、单据状态
3、设置子表所有字段不允许修改体检项目、物料、二维码编号、是否检测、检测结果、检测人
4、删除子表的新增、删行按钮
5、设置子表表格的编辑方式为侧滑弹框
6、体检单列表页面删除新增按钮
7、配置体检按审批流
8、配置业务流9、体检预约下推体检单防止重复下推:isNull(getValue("AT1772AFF21C18000A.AT1772AFF21C18000A.examination_bill","id","source_id",id))
错误提示语:下游数据已存在
触发设置:手工触发
生单方式:默认新增单据
转换规则配置如下图
10、体检单下推销售订单目标交易类型:体检
过滤设置增加防止重复下推:isNull(getValue("voucher.order.Order","id","srcBill",id))&&verifystate==2
错误提示语:下游单据已存在或单据未审核
生单默认:默认新增单据,勾选转单画面
转换规则配置如下图:
使用到的公式:
税目税率id:getValue("bd.taxrate.TaxRateVO","id","code","VAT0")
本币pk:getValue("bd.currencytenant.CurrencyTenantVO","id","code","CNY")
汇率类型id:getValue("bd.exchangeRate.ExchangeRateTypeVO","id","code","01")
单据日期:dateFormat(sysdate(),"yyyy-MM-dd")
11、体检单列表页面增加月底汇总出库按钮,点击汇总消耗品生成其他出库单(1).创建业务对象月底汇总
(2)、根据业务对象创建一个卡片页面,删除列表页面
(3)、将卡片页面设置为模态框,具体操作省略
(4)、保存按钮取消保存规则,然后增加保存函数
函数中调用了其他出库单接口,具体调用接口API脚本查看
viewModel.get('btnSave')&&viewModel.get('btnSave').on('click',function(data){//确定--单击letdate=viewModel.get("date").getValue();letorg=viewModel.get("org").getValue();letwarehouse=viewModel.get("warehouse").getValue();letuse_version=viewModel.get("use_version").getValue();cb.rest.invokeFunction("AT1772AFF21C18000A.api.monthUsePro",{"date":date,"org":org,"warehouse":warehouse,"use_version":use_version},function(err,res){if(err!=null){cb.utils.alert(err);return;}else{cb.utils.alert("发起请求成功,请到其他出库节点查看");viewModel.communication({type:'modal',payload:{data:false}});}})});(5)、调用出库单API脚本
获取日期函数
letAbstractTrigger=require('AbstractTrigger');classMyTriggerextendsAbstractTrigger{execute(context,param){Date.prototype.format=function(fmt){varo={"M+":this.getMonth()+1,//月份"d+":this.getDate(),//日"h+":this.getHours()%12==012:this.getHours()%12,//小时"H+":this.getHours(),//小时"m+":this.getMinutes(),//分"s+":this.getSeconds(),//秒"q+":Math.floor((this.getMonth()+3)/3),//季度"S":this.getMilliseconds()//毫秒};if(/(y+)/.test(fmt))fmt=fmt.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length));for(varkino)if(newRegExp("("+k+")").test(fmt))fmt=fmt.replace(RegExp.$1,(RegExp.$1.length==1)(o[k]):(("00"+o[k]).substr((""+o[k]).length)));returnfmt;}letdate=newDate().format(context);return{date};}}exports({"entryPoint":MyTrigger});汇总统计耗材
viewModel.get('button22rk')&&viewModel.get('button22rk').on('click',function(params){//月终汇总出库--单击letdata={//TODO:填写单据类型及单据号billtype:'Voucher',//单据类型billno:'monthtotal',//单据号params:{mode:'add',},};//打开一个单据,并在当前页面显示cb.loader.runCommandLine('bill',data,viewModel);});移动端注:移动端和pc端公用元数据、工作流、业务流,后端函数可公用。移动端的页面和前端脚本以及发布应用是独立的。
调整列表页显示字段:姓名、手机号、身份证号、体检套餐、预约日期、价格。如下图
viewModel.on('beforeSearch',(args)=>{letuserId=cb.context.getUserId();args.params.condition.simpleVOs=[{"field":"creator","op":"eq","value1":userId}];})(二).详情页1.页面设计
表头:手机号、姓名、客户分类:必填;身份证号:必填根据身份证号自动计算年龄和性别;价格:不可修改,设置公式sum子表的使用金额,所有数值的精度为2性别、年龄、客户:不可修改
效果如下图:
子表:体检项目必填,其余字段不可编辑;选择体检项目,其余字段自动带入;
//身份证带出年龄和性别viewModel.get('identity').on('afterValueChange',(data)=>{debugger;if(data&&data.value!=""){letidentity=JSON.parse(data.value).identity;letsex=parseInt(identity.substr(16,1))%2==1'1':'2';letage=getAge(identity);viewModel.get('gender').setValue(sex);viewModel.get('age').setValue(age);}})functiongetAge(userCard){varmyDate=newDate();varmonth=myDate.getMonth()+1;varday=myDate.getDate();varage=myDate.getFullYear()-userCard.substring(6,10)-1;if(userCard.substring(10,12) 4子表功能:体检项目必填,其余字段不可编辑 //editRowModel的字段状态viewModel.on('afterLoadData',(args)=>{viewModel.getGridModel().getEditRowModel().get("project_name").setState('bIsNull',false);viewModel.getGridModel().getEditRowModel().get("examination_kit_name").setState('bCanModify',false);viewModel.getGridModel().getEditRowModel().get("original_price").setState('bCanModify',false);viewModel.getGridModel().getEditRowModel().get("price").setState('bCanModify',false);viewModel.getGridModel().getEditRowModel().get("is_kit").setState('bCanModify',false);viewModel.getGridModel().getEditRowModel().get("useprice").setState('bCanModify',false);viewModel.getGridModel().getEditRowModel().get("product_standard_name").setState('bCanModify',false);})5、子加粗样式表功能:选择体检项目,其余字段自动带入 viewModel.get("btnSubSave_1").on('click',(data)=>{if(!viewModel.getGridModel().getEditRowModel().get("project_name").getValue()){cb.utils.alert("项目不能为空");returnfalse;}viewModel.biz.do('closePage',viewModel);})7、主子联动:选择主表所属套餐,子表自动增加下属项目 2、功能:只看本人创建的客户的体检单 //前端脚本viewModel.on('beforeSearch',(args)=>{letresult=cb.rest.invokeFunction("AT17925AEA1C18000A.api.getCustomer",{},function(err,res){},viewModel,{async:false})letarr=[];result.result.res.forEach((item,index)=>{arr.push(item.customer)})args.params.condition.simpleVOs=[{"field":"merchant","op":"in","value1":arr}];})//后端脚本letAbstractAPIHandler=require('AbstractAPIHandler');classMyAPIHandlerextendsAbstractAPIHandler{execute(request){letuserId=ObjectStore.user().id;letsql="selectcustomerfromAT17925AEA1C18000A.AT17925AEA1C18000A.paywherecreator='"+userId+"'";varres=ObjectStore.queryByYonQL(sql);return{res};}}exports({"entryPoint":MyAPIHandler});