TreeviewCopyright © aleen42 all right reserved, powered by aleen42
移动端
移动端和pc端公用元数据、工作流、业务流,后端函数可公用。移动端的页面和前端脚本以及发布应用是独立的。
一、体检预约单
1.1 列表页
- 1、页面设计
调整列表页显示字段:姓名、手机号、身份证号、体检套餐、预约日期、价格。如下图
- 2、功能(只看本人创建的预约单)
viewModel.on('beforeSearch',(args)=>{
let userId = cb.context.getUserId();
args.params.condition.simpleVOs=[
{
"field": "creator",
"op": "eq",
"value1": userId
}
];
})
1.2 详情页
- 1、页面设计
表头: 手机号、姓名、客户分类:必填; 身份证号:必填 根据身份证号自动计算年龄和性别; 价格:不可修改,设置公式sum子表的使用金额,所有数值的精度为2 性别、年龄、客户:不可修改
效果如下图:
子表: 体检项目必填,其余字段不可编辑; 选择体检项目,其余字段自动带入;
效果如下图:
- 2、功能:根据身份证号自动计算年龄和性别
//身份证带出年龄和性别
viewModel.get('identity').on('afterValueChange',(data)=>{
debugger;
if(data && data.value != "") {
let identity = JSON.parse(data.value).identity;
let sex = parseInt(identity.substr(16, 1)) % 2 == 1 ? '1' : '2';
let age = getAge(identity);
viewModel.get('gender').setValue(sex);
viewModel.get('age').setValue(age);
}
})
function getAge(userCard) {
var myDate = new Date();
var month = myDate.getMonth() + 1;
var day = myDate.getDate();
var age = myDate.getFullYear() - userCard.substring(6, 10) - 1;
if (userCard.substring(10, 12) < month || userCard.substring(10, 12) == month && userCard.substring(12, 14) <= day) {
age++;
}
return age;
}
- 3、功能:详情增加动作扩展(和pc动作通用)
- 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.getGridModel().getEditRowModel().get("project_name").on("afterValueChange",(args)=>{
let index = viewModel.getGridModel().getFocusedRowIndex();
viewModel.getGridModel().getEditRowModel().get('original_price').setValue(args.value.original_price);
viewModel.getGridModel().setCellValue(index,"original_price",args.value.original_price);
viewModel.getGridModel().setCellValue(index,'original_price',args.value.original_price);
// 所属套餐 examination_kit_name
viewModel.getGridModel().getEditRowModel().get('examination_kit').setValue(args.value.examination_kit_id);
viewModel.getGridModel().setCellValue(index,'examination_kit',args.value.examination_kit_id);
viewModel.getGridModel().getEditRowModel().get('examination_kit_name').setValue(args.value.examination_kit_id_name);
viewModel.getGridModel().setCellValue(index,'examination_kit_name',args.value.examination_kit_id_name);
//套餐价格
viewModel.getGridModel().getEditRowModel().get('price').setValue(args.value.price);
viewModel.getGridModel().setCellValue(index,'price',args.value.price);
//是否套餐
viewModel.getGridModel().getEditRowModel().get('is_kit').setValue("2");
viewModel.getGridModel().setCellValue(index,'is_kit',"2");
//使用金额
viewModel.getGridModel().getEditRowModel().get('useprice').setValue(args.value.original_price,true);
viewModel.getGridModel().setCellValue(index,'useprice',args.value.original_price);
//物料
viewModel.getGridModel().getEditRowModel().get('product_standard').setValue(args.value.product);
viewModel.getGridModel().setCellValue(index,'product_standard',args.value.product);
viewModel.getGridModel().getEditRowModel().get('product_standard_name').setValue(args.value.product_name);
viewModel.getGridModel().setCellValue(index,'product_standard_name',args.value.product_name);
})
- 6、子表功能:编辑页,拦截保存动作
viewModel.get("btnSubSave_1").on('click',(data)=>{
if(!viewModel.getGridModel().getEditRowModel().get("project_name").getValue()) {
cb.utils.alert("项目不能为空");
return false;
}
viewModel.biz.do('closePage',viewModel);
})
- 7、主子联动:选择主表所属套餐,子表自动增加下属项目
let gridModel = viewModel.getGridModel();
viewModel.get("pay_examination_kitList").on("afterValueChange",function(data){
//旧的数据 套餐id放数组
let oldData = gridModel.getDataSourceRows();
let oldRows = gridModel.getRows();
let rowsDataState = gridModel.__data.rowsDataState
let delIndex = [];
if(data && data.value.length > 0) {
let result = cb.rest.invokeFunction("AT17925AEA1C18000A.api.getProjectById", {data:data.value},function(err, res) {},viewModel, {async:false});
debugger;
//新的数据 套餐id放数组
let newData = result.result.res;
let newKit = [];
newData.forEach((item,index)=>{
newKit.push(item.examination_kit);
})
let oldKit = [];
oldRows.forEach((item,index)=>{
if(item.is_kit == '1') {
oldKit.push(item.examination_kit);
}
})
//多的数据就新增
let addRows = [];
newData.forEach((item,index)=>{
if(!oldKit.includes(item.examination_kit)) {
item.is_kit = '1';
addRows.push(item);
rowsDataState.push("Insert");
}
})
//少的套餐就删除
oldRows.forEach((item,index)=>{
if(item.is_kit == '1' && !newKit.includes(item.examination_kit)) {
delIndex.push(index);
}
})
gridModel.setDataSource(oldData.concat(addRows));
gridModel.__data.rowsDataState = rowsDataState;
rowsDataState.forEach((item,index)=>{
if(item == "Delete") {
delIndex.push(index);
}
})
} else {
if(data) {
oldRows.forEach((item,index)=>{
if(item.is_kit == '1') {
delIndex.push(index);
}
})
}
}
viewModel.setCache('remark',1);
gridModel.deleteRows(delIndex);
})
- 8、主子联动:子表删行,如果是删除的套餐项目,那么套餐中的其他项目更新使用金额=原价,是否套餐更新为否
gridModel.on('beforeDeleteRows',(args)=>{
let mark = viewModel.getCache('remark');
if(!mark) {
if(args[0].is_kit == '1') {
cb.utils.confirm("删除后不满足套餐的情况体检项将按照原价计算",function(){
let rows = gridModel.getRows();
let delIndex;
rows.forEach((item,index)=>{
//删除数据
if(item._id == args[0]._id) {
delIndex = index;
} else {
//更新同套餐数据
if((item.examination_kit == args[0].examination_kit) && (item.is_kit == '1')) {
item.is_kit = '2';
item.useprice = item.original_price;
gridModel.updateRow(index,item);
}
}
})
//删除数据
viewModel.setCache('remark',1);
gridModel.deleteRows([delIndex]);
//更新表头套餐
let kitList = viewModel.get("pay_examination_kitList").getData();
let newKitList = [];
let count = 0;
kitList.forEach((item,index)=>{
if(item.examination_kit == args[0].examination_kit) {
if(item.id) {
item._status = "Delete";
newKitList.push(item);
}
} else {
newKitList.push(item);
}
})
debugger;
viewModel.get("pay_examination_kitList").doPropertyChange('clearTag');
viewModel.get("pay_examination_kitList").setData(newKitList);
},function(){
return false;
})
return false;
}
} else {
viewModel.clearCache("remark");
}
})
二、体检单
2.1 列表页
- 1、页面设计
字段调整如下图:
- 2、功能:只看本人创建的客户的体检单
//前端脚本
viewModel.on('beforeSearch',(args)=>{
let result = cb.rest.invokeFunction("AT17925AEA1C18000A.api.getCustomer", {},
function(err, res) {},viewModel,{async:false})
let arr = [];
result.result.res.forEach((item,index)=>{
arr.push(item.customer)
})
args.params.condition.simpleVOs=[
{
"field": "merchant",
"op": "in",
"value1": arr
}
];
})
//后端脚本
let AbstractAPIHandler = require('AbstractAPIHandler');
class MyAPIHandler extends AbstractAPIHandler {
execute(request){
let userId = ObjectStore.user().id;
let sql = "select customer from AT17925AEA1C18000A.AT17925AEA1C18000A.pay where creator= '"+ userId+"'";
var res = ObjectStore.queryByYonQL(sql);
return {res};
}
}
exports({"entryPoint":MyAPIHandler});