前端函数
列表页行内按钮动态控制显示隐藏
let gridModel = viewModel.getGridModel('a62856_collectcontract5_2223221264998203535');
gridModel &&
gridModel.on('beforeSetDataSource', function (data) {
//表格--onBeforeSetDataSource
console.log('333');
//获取列表所有数据
//const rows = data;
//从缓存区获取按钮
const actions = gridModel.getCache('actions');
if (!actions) return;
const actionsStates = [];
data.forEach((x) => {
const actionState = {};
actions.forEach((action) => {
actionState[action.cItemName] = { visible: true };
if (action.cItemName == 'btnEdit') {
if (x.verifystate == 1) {
actionState[action.cItemName] = { visible: false };
}
}
});
actionsStates.push(actionState);
});
setTimeout(function () {
gridModel.setActionsState(actionsStates);
}, 50);
});
获取UTF+8日期
var timezone = 8; //目标时区时间,东八区
var offset_GMT = new Date().getTimezoneOffset(); //本地时间和格林威治的时间差,单位为分钟
var nowDate = new Date().getTime(); //本地时间距 1970 年 1 月 1 日午夜(GMT 时间)之间的毫秒数
var date = new Date(nowDate + offset_GMT * 60 * 1000 + timezone * 60 * 60 * 1000);
console.log(date);
日期格式化 yyyy-MM-dd HH:mm:ss
function padStart(str, length, padChar = '0') {
str = String(str); // 确保传入的是字符串
while (str.length < length) {
str = padChar + str;
}
return str;
}
// 第一种
function getDate() {
const date = new Date();
const utcTime = date.getTime(); // 获取当前时间的 UTC 时间戳
const timeZoneOffset = 8 * 60 * 60 * 1000; // UTC+8 的时区偏移(以毫秒为单位)
// 获取 UTC+8 时间
const localDate = new Date(utcTime + timeZoneOffset);
const formattedDate = `${localDate.getFullYear()}-${padStart(localDate.getMonth() + 1, 2)}-${padStart(localDate.getDate(), 2)} ${padStart(localDate.getHours(), 2)}:${padStart(localDate.getMinutes(), 2)}:${padStart(localDate.getSeconds(), 2)}`;
return formattedDate;
}
// 第二种
const date = new Date();
// 将结果转换回字符串格式
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2); // 补零
const day = ('0' + date.getDate()).slice(-2); // 补零
const hours = ('0' + date.getHours()).slice(-2); // 补零
const minutes = ('0' + date.getMinutes()).slice(-2); // 补零
const seconds = ('0' + date.getSeconds()).slice(-2); // 补零
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
保存前修改字段的值
viewModel.on('beforeSave', function (args) {
const billData = JSON.parse(args.data.data);
if (!billData.id) {
billData.note = 'test';
const temp = JSON.stringify(billData);
args.data.data = temp;
}
})
保存前异步校验+错误弹窗提示
viewModel.on('beforeSave', function (args) {
let data = JSON.parse(args.data.data);
let returnPromise = new cb.promise();
cb.rest.invokeFunction('',{},
function (err, res) {
console.log(res, err);
if (err) {
cb.utils.alert(err.message, 'error');
return false;
}
if (res.data.length > 0) {
cb.utils.alert({
title: 'BOM版本号重复,请重新输入!',
type: 'warning',
duration: '3',
mask: false,
});
return false;
}
returnPromise.resolve();
},
undefined,
{ domainKey: 'engineeringdata' }
);
return returnPromise;
});
前端同步调用后端API函数
let res = cb.rest.invokeFunction('', {}, function (err, res) {}, viewModel, { async: false });
console.log(res);
console.log(res.result);//调用成功返回的对象
页面初始化赋值查询字段赋值
// 公共模型初始化完成
viewModel.on('afterInitCommonViewModel', function () {
// 获取查询区模型
const filtervm = viewModel.getCache('FilterViewModel');
// 查询区模型DOM初始化后
filtervm.on('afterInit', function () {
let org = cb.context.getDefaultOrg();//获取工作台设置的默认业务单元
if (org) {
// 获取控件的真实模型
const salesOrgModel = filtervm.get('salesOrgId_name').getFromModel();
// 赋予查询区字段初始值
salesOrgModel.setValue(org);
}
});
});
设置字段隐藏显示
viewModel.get('defineDts__GYLC').setVisible(true/false);
取消表格字段的页面link
viewModel.getGridModel('orderMaterial').setColumnState('productName', 'bJointQuery', false);
参照特征字段自定义设置显示字段
viewModel.get('defineDts') &&
viewModel.get('defineDts').get('GYLC2') &&
viewModel
.get('defineDts')
.get('GYLC2')
.on('afterReferOkClick', function (data) {
//console.log(data);
if (data.length > 0) {
viewModel.get('defineDts__GYLC2').setState('textField', 'oid_userDefine_2169807402329178120');//oid_userDefine_2169807402329178120 从列表数据加载请求获取字段名称
}
});
//在afterLoadData事件也设置一下
viewModel.on('afterLoadData', function (args) {
viewModel.get('defineDts__GYLC2').setState('textField', 'oid_userDefine_2169807402329178120');
}
//获取页面的状态
let mode = viewModel.getParams().mode.toLowerCase();
mode == 'browse' // 'add'
调用异步函数获取返回值
function getOrderMaterialData(input) {
let returnPromise = new cb.promise();
cb.rest.invokeFunction('', input, function (err, res) {
console.info(res);
if (err) {
returnPromise.reject(err.message); // 这里会触发失败处理函数
} else {
let orderMaterialRows = res.data;
returnPromise.resolve(orderMaterialRows);
}
});
return returnPromise;
}
let orderMaterialDataPromise = getOrderMaterialData(input, orderProductRow);
orderMaterialDataPromise.then(
function (orderMaterialRows) {
console.info(orderMaterialRows);
},
function (error) {
cb.utils.alert(error, 'error');
}
);
表格相关
//以表格单元格值变化前事件为例
viewModel.getGridModel('orderProduct') &&
viewModel.getGridModel('orderProduct').on('beforeCellValueChange', function (data) {
if (data.rowIndex < 0) return true;
let orderProductRow = viewModel.getGridModel('orderProduct').getRow(data.rowIndex);
orderProductRow.bomId = null;
viewModel.getGridModel('orderProduct').updateRow(data.rowIndex, orderProductRow);
// 直接修改
//viewModel.getGridModel('orderProduct').setCellValue(data.rowIndex, 'mrpQuantity', 100);
// for循环修改
// for (let i = 0; i < orderMaterialData.length; i++) {
// let orderMaterialRow = orderMaterialData[i];
// viewModel.getGridModel('orderMaterial').updateRow(i, {
// recipientQuantity: 100
// });
// }
// 阻止事件变更
// return false;
let orderMaterialData = viewModel.getGridModel('orderMaterial')?.getData();
// 给每行数据加索引再根据索引删除
viewModel.getGridModel('orderMaterial')?.deleteRows(orderMaterialData.map((x, index) => ({ ...x, originalIndex: index })).map((x) => x.originalIndex));
viewModel.getGridModel('orderMaterial')?.insertRows(0, orderMaterialRows);
if (data.cellName == 'productDefineDts') {
// 特征字段判断是否被修改
if ((!data.value.BOMExpandMode && !data.oldValue?.BOMExpandMode) || (data.value.BOMExpandMode && data.oldValue?.BOMExpandMode == data.value.BOMExpandMode)) {
return true;
}
}
})
后端函数
调用开发平台接口
let env = ObjectStore.env();
let header = {
'Content-Type': 'application/json;charset=UTF-8',
};
let body = {};
let url = env.url + '/iuap-api-gateway/yonbip/mfg/bom/save/V1';
let infoString = ObjectStore.openLinkerPure('post', url, 'ED', body); // `ED`应用编码
let infoObject = JSON.parse(infoString);
获取开发平台接口的AccessToken
let AbstractTrigger = require('AbstractTrigger');
function hexToBytes(hex) {
const bytes = [];
for (let i = 0; i < hex.length; i += 2) {
bytes.push(parseInt(hex.substr(i, 2), 16));
}
return bytes;
}
function bytesToBase64(bytes) {
const base64Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
let base64 = '';
let padding = 0;
for (let i = 0; i < bytes.length; i += 3) {
const byte1 = bytes[i];
const byte2 = i + 1 < bytes.length ? bytes[i + 1] : (padding++, 0);
const byte3 = i + 2 < bytes.length ? bytes[i + 2] : (padding++, 0);
const base64Index1 = byte1 >> 2;
const base64Index2 = ((byte1 & 3) << 4) | (byte2 >> 4);
const base64Index3 = ((byte2 & 15) << 2) | (byte3 >> 6);
const base64Index4 = byte3 & 63;
base64 += base64Chars[base64Index1] + base64Chars[base64Index2] + (padding >= 2 ? '=' : base64Chars[base64Index3]) + (padding >= 1 ? '=' : base64Chars[base64Index4]);
}
return base64;
}
class MyTrigger extends AbstractTrigger {
execute(context, param) {
let header = {
'Content-Type': 'application/json;charset=UTF-8',
};
let appKey = 'appKey';
let timestamp = Date.now();
const hmacSHA256 = HmacSHA256(`appKey${appKey}timestamp${timestamp}`, 'appSecret');
const bytes = hexToBytes(hmacSHA256);
const base64String = bytesToBase64(bytes);
let signature = encodeURIComponent(base64String);
let body = {};
let url = `https://c3.yonyoucloud.com/iuap-api-auth/open-auth/selfAppAuth/getAccessToken?appKey=${appKey}×tamp=${timestamp}&signature=${signature}`;
let infoString = ObjectStore.postman('get', url, header, body);
let data = JSON.parse(infoString)
//throw new Error(JSON.stringify(data))
return data.data;
}
}
exports({ entryPoint: MyTrigger });
常用函数示例
const sum = (arr) => arr.reduce((total, item) => total + item, 0);//求和函数
const multiply = (arr) => arr.reduce((total, item) => total * item, 1);//乘法函数
const numbers = data.filter((item) => item.id != id).map((item) => item.oriSum);//过滤加转换
numbers.forEach((x) => { //forEach循环
//x
});
for (let i = 0; i < orderMaterialData.length; i++) {//for循环
}
data.toFixed(4);//保留小数
// map对象写法
function domTreeMap(list) {
return list.map((x) => {
return {
productCode: x.productCode,
ZJBOM2: x.ZJBOM2
};
});
}
// 分组
function groupByFields(array, fields) {
return array.reduce((acc, item) => {
const key = fields.map((field) => item[field]).join('-');
if (!acc.has(key)) {
acc.set(key, []);
}
acc.get(key).push(item);
return acc;
}, new Map());
}
const grouped = groupByFields(data, ['id']);//调用
其他
常用Uri
组织: org.func.BaseOrg
部门:bd.adminOrg.AdminOrgVO
员工: bd.staff.Staff、bd.staff.StaffNew
客户:aa.merchant.Merchant
供应商:aa.vendor.Vendor
物料:pc.product.Product
计量单位:pc.unit.Unit
批次号:st.batchno.Batchno
税目税率:bd.taxrate.TaxRateVO
仓库:aa.warehouse.Warehouse
省市区:bd.region.BaseRegionVO
项目:bd.project.ProjectVO