title: 低代码学习案例 date: 2024-11-15T20:31:20+08:00
主要作用:将所有时间字段更新至指定时间字段,只要其中一个更新,都会将最新的时间字段同步到指定字段。
// 初始化存储上一个值的对象,将所有字段初始化为 undefined
let previousValues = {
"date_3": undefined,
"date_4": undefined,
"date_5": undefined,
"date_6": undefined,
"date_7": undefined,
"date_9": undefined,
"date_10": undefined,
"date_11": undefined
};
// 异步函数,用于处理时间戳
export async function handleTimestamp() {
try {
// 从多个字段中获取时间戳,这里只是示例,请根据实际字段标识修改
const result3 = await sdk.getValue("date_3");
const result4 = await sdk.getValue("date_4");
const result5 = await sdk.getValue("date_5");
const result6 = await sdk.getValue("date_6");
const result7 = await sdk.getValue("date_7");
const result9 = await sdk.getValue("date_9");
const result10 = await sdk.getValue("date_10");
const result11 = await sdk.getValue("date_11");
// 获取实际的值,确保存在 result 对象和其包含 value 属性
const date3 = result3 && result3.value;
const date4 = result4 && result4.value;
const date5 = result5 && result5.value;
const date6 = result6 && result6.value;
const date7 = result7 && result7.value;
const date9 = result9 && result9.value;
const date10 = result10 && result10.value;
const date11 = result11 && result11.value;
// 检查哪个字段发生了变化
const changedField = getChangedField(
{ name: "date_3", value: date3 },
{ name: "date_4", value: date4 },
{ name: "date_5", value: date5 },
{ name: "date_6", value: date6 },
{ name: "date_7", value: date7 },
{ name: "date_9", value: date9 },
{ name: "date_10", value: date10 },
{ name: "date_11", value: date11 }
);
// 更新前一个值,使用字符串作为属性名,以确保代码清晰可读
previousValues = {
"date_3": date3,
"date_4": date4,
"date_5": date5,
"date_6": date6,
"date_7": date7,
"date_9": date9,
"date_10": date10,
"date_11": date11
};
if (changedField) {
// 将变动的字段值赋给 date_13
await sdk.setValue("date_13", changedField.value);
console.log(`成功设置 date_13 字段,值为: ${changedField.value}`);
} else {
console.log("没有字段发生变化,无需设置 date_13。");
}
} catch (error) {
console.error("发生错误:", error);
}
}
// 辅助函数,用于检查哪个字段发生了变化
function getChangedField(...fields) {
for (const field of fields) {
const previousValue = previousValues[field.name];
// 同时检查undefined和null
if (field.value !== previousValue && (field.value !== undefined || previousValue !== undefined)) {
console.log(`字段 ${field.name} 的值发生了变化。先前值: ${previousValue}, 当前值: ${field.value}`);
return field;
}
}
console.log("没有字段发生变化。");
return null;
}
主要作用:签单前服务,提交表单的时候获取成交字段,如果不等于是,则弹出提示框,辅助判断是否成交,如果确认“是”,则继续提醒完成下个阶段的填写,并且可以继续操作。如果确认为“否”则,弹出提示。
//辅助完成签单前成交填写
export async function remindup() {
// 获取成交信息
const isTransactionCompleted = await sdk.getValue("text_11");
const isTransactionCompletedValue = isTransactionCompleted.value;
if (isTransactionCompletedValue.text !== "是") {
const result = await sdk.confirm({
title: '温馨提示',
content: '请确认客户成交情况!',
confirmButtonText: '成交',
cancelButtonText: '未成交',
type: 'warning'
});
const valuerestule = result.confirm
? { text: '是', value: "63e16b96-9f6c-50b6-0e68-7a7e987b5383" }
: { text: '否', value: "5a752092-1d3f-12b4-762f-8fff9170ae95" };
// await sdk.setValue("text_11", valuerestule);
// 处理确认或取消后的逻辑
if (result.confirm) {
// 处理确认后的逻辑
await sdk.setValue("text_11", valuerestule);
const text41value = await sdk.getValue("text_41")
console.log("特性:",text41value)
if (text41value.value !== "是" || text41value.value === undefined){
console.log("请填写签单节点");
await sdk.showToast({
type: 'Reminder',
content: '温馨提示:请填写是否按时发送设计节点!',
time: 5000
});
//阻止继续提交,避免导致提交无法点选。
return false;
}
console.log("点击了确认按钮");
} else {
// 处理取消后的逻辑
console.log("点击了取消按钮");
// 如果选择的是未成交,弹出提示
await sdk.showToast({
type: 'Reminder',
content: '温馨提示:该客户确认未成交,不允许创建合同订单。',
time: 4000
});
// 继续执行其他取消后的逻辑
console.log("继续执行其他取消后的逻辑");
}
} else {
console.log("条件不满足。");
return "条件不满足。";
}
}
主要作用:来判断流量部的客管经理是否填写,如果每天写只是弹出提醒,但是不影响后续操作。
// 使用 async function 来包裹异步操作
export async function checkUser() {
try {
// 使用 await 来获取 ownerId 的值
const user = await sdk.getValue("ownerId");
console.log(user.value);
// 检查 user.value 是否为 undefined 并且当成员清空以后数组不能等于0
if (user.value === undefined || user.value.length == 0) {
// 使用 await 来等待用户的确认操作
const result = await sdk.confirm({
title: '温馨提示',
content: '此单未填写客管经理,将进入公海池,请确认操作!',
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
});
// 根据确认结果进行相应的处理
if (result.confirm) {
console.log("点击了确认");
} else {
console.log("点击了取消");
return false;
}
}
// 如果 ownerId 的值不为 undefined,或者用户点击了确认,继续执行后续逻辑
// 你可以在这里添加其他逻辑
return true; // 表示检查通过
} catch (error) {
console.error("发生错误:", error);
return false; // 表示发生错误,检查未通过
}
}
// 异步函数,用于获取数据并设置值
export async function fetchDataAndSetValue() {
// 获取名为 "text_1" 的数据
const inputData = await sdk.getValue("text_1");
console.log("获取信息", inputData);
// 从获取的数据中提取 dataId
const dataId = inputData.value.dataId;
console.log("确认dataID", dataId);
// 使用 dataId 异步获取数据
const asyncData = await fetchDataById(dataId);
console.log("异步数据", asyncData);
// 初始化数组用于存储子表单数据
var dataArray = new Array();
const subFormData = asyncData.data.data.data.subForm_1;
// 获取子表单数据的长度
const subFormDataLength = subFormData.length;
// 将子表单数据添加到数组中
for (var i = 0; i < subFormDataLength; i++) {
dataArray.push(subFormData[i]);
}
console.log(dataArray);
// 映射数据格式,准备设置的数据
const mappedData = dataArray.map(item => {
return {
text_1: item.text_1,
num_1: item.num_1,
subID: 32131,
editFlag: true,
};
});
// 将映射后的数据设置为名为 "subForm_1" 的数据
await sdk.setValue("subForm_1", mappedData);
}
// 异步函数,根据 dataId 获取表单数据
async function fetchDataById(dataId) {
return await sdk.getFormDataById({
appId: 744518,
menuId: 9194218,
saasMark: 2,
businessType: 0,
subBusinessType: 0,
formId: 8438148,
dataId,
});
}
//子表单同步数据
export async function processAndExportFormData() {
//获取数据信息
const sourceData = await sdk.getValue("text_1");
console.log("Fetched information:", sourceData);
//获取数据信息其中的dataId
const dataId = sourceData.value.dataId;
console.log("Confirmed dataID:", dataId);
//通过异步数据fetchDataById获取其中的dataId
const asyncData = await fetchDataById(dataId);
console.log("Async data:", asyncData);
//获取其中的的异步数据data.subForm_1
const subFormDataArray = asyncData.data.data.data.subForm_1;
//通过异步数据获取mapAndTransformSubFormData其中的subFormDataArray
const transformedData = mapAndTransformSubFormData(subFormDataArray);
console.log("Transformed data:", transformedData);
//部署子表单数据
await sdk.setValue("subForm_1", transformedData);
}
//异步数据
async function fetchDataById(dataId) {
return await sdk.getFormDataById({
appId: 744518,
menuId: 9194218,
saasMark: 2,
businessType: 0,
subBusinessType: 0,
formId: 8438148,
dataId
});
}
//异步数据
function mapAndTransformSubFormData(subFormDataArray) {
return subFormDataArray.map(item => ({
text_1: item.text_1,
num_1: item.num_1,
subID: 32131,
editFlag: true,
}));
}
主要表单:签单前服务,前提条件,关联客户信息的流水号【静态值】,来查询签单前的服务是否已存在,如果存在就弹出提醒。
// 定义一个延迟函数,用于实现异步延迟
async function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// 主函数,用于检查并提醒用户避免重复提交表单
export async function DDcheck() {
// 获取当前的低代码平台类型(比如编辑模式或其他)
const datetype = await sdk.getLowCodeType();
console.log(datetype);
// 如果是编辑模式,则不继续执行
if (datetype.type === "edit") {
console.log("编辑模式不继续执行。")
return;
}
// 延迟3秒等待联动数据获取,避免因数据未同步而导致的错误
await delay(3000);
// 获取特定字段的值
const a = await sdk.getValue("text_9");
console.log("获取值1:", a);
const b = a.value;
console.log("获取值2:", b);
// 使用dfc函数查询签单前表单是否已经联动相关客户流水号
const c = await dfc(b);
console.log("获取值3:", c);
// 如果已存在联动的表单数据,则提醒用户不要重复创建表单
if (c.data.paasFormDataESList.length && c.data.paasFormDataESList.length > 0) {
await sdk.alert({
title: '温馨提示',
content: '你已创建过该表单,此表单将无法保存,请勿重复创建表单!',
confirmButtonText: '确认'
});
//刷新表单
await sdk.refreshPage()
return false;
}
}
// 查询指定数据【签单前数据】的表单是否已经存在,用于避免重复提交
async function dfc(data, page = 1) {
// 通过sdk.getFormDataList方法查询表单数据
return await sdk.getFormDataList({
appId: 756754, // 应用ID
menuId: 8330561, // 菜单ID
saasMark: 2, // SaaS标识
businessType: 0, // 业务类型
subBusinessType: 0, // 子业务类型
formId: 7539701, // 表单ID
conditions: [{ "attr": "text_9", "fieldType": 1, "symbol": "equal", "value": [data] }], // 查询条件
page: page, // 分页页码
pageSize: 20 // 每页数量
})
}
//详情页按钮单击判断时间
export async function checkCurrentTime({ val }) {
console.log(val);
if (val.btn.value == '新建开工报批') {
// 获取当前日期
const currentDate = new Date();
console.log("当前日期:", currentDate);
// 获取当前日期的日数
const currentDay = currentDate.getDate();
// 判断是否在1-3号或者16-17号范围内
if ((currentDay >= 8 && currentDay <= 10) || (currentDay >= 23 && currentDay <= 25)) {
console.log("当前日期在8-10号或者23-25号范围内");
} else {
await sdk.showToast({
type: "error",
content: '请在每月的8号至10号以及23号至25号内提交您的内容,其他时间系统将无法保存。',
time: 3000
});
console.log("当前日期不在1-3号或者16-17号范围内");
return false;
}
}
}
//复选框内容配置进行排序然后配置到另一个字段,作为指标
export async function getss() {
const a = await sdk.getValue("array_1");
let texts = ""; // 在这里声明texts变量,确保它在if语句外部也可以被访问
// 假设a.value是需要排序的数组
if (a && a.success && a.value && Array.isArray(a.value)) {
// 对数组进行排序比较函数应当有两个参数(在你的例子中是item1和item2),并且返回一个用于确定元素间顺序的值。
a.value.sort((item1, item2) => item1.text.localeCompare(item2.text));
// 整合text属性并用逗号连接成一个字符串
texts = a.value.map(item => item.text).join('、');
}
console.log(a);
console.log(texts); // 现在texts变量在这里也可以被访问了
await sdk.setValue("text_10",texts)
}
// 我们添加一个对象来记住每个函数最后一次添加的成员
const lastAdded = {};
export async function handleText(inputName, funcName) {
try {
const memberSelection = await sdk.getValue(inputName);
const managerField = await sdk.getValue("coUserId");
const userArray = Array.isArray(managerField.value) ? managerField.value : [];
if (!memberSelection || !memberSelection.value) {
// 从 userArray 中删除 funcName 最后一次添加的成员
const lastAddedMember = lastAdded[funcName];
if (lastAddedMember) {
const index = userArray.findIndex(user => user.id === lastAddedMember.id);
if (index !== -1) {
userArray.splice(index, 1);
}
}
} else {
const memberId = memberSelection.value.id;
const memberName = memberSelection.value.name;
const isUserExists = userArray.some(user => user.id === memberId);
if (!isUserExists) {
userArray.push({ id: memberId, name: memberName });
// 记住 funcName 这次添加的成员
lastAdded[funcName] = { id: memberId, name: memberName };
}
}
await sdk.setValue("coUserId", userArray);
} catch (error) {
console.error("发生错误:", error);
}
}
export async function ce1() {
await handleText("text_40", 'ce1');
}
export async function ce2() {
await handleText("text_67", 'ce2');
}
export async function ce3() {
await handleText("text_69", 'ce3');
}
export async function ce4() {
await handleText("text_48", 'ce4');
}
//通过判断选项空值或否,来清空指定字段
export async function getClearAll() {
// 定义一个数组,每个元素都是一个包含 getText 和 setText 的对象
const fields = [
{ getText: "text_51", setText: "text_67" },
{ getText: "text_52", setText: "text_69" },
{ getText: "text_70", setText: "text_48" }
];
for (let { getText, setText } of fields) {
const change = await sdk.getValue(getText);
// 删除调试用 console.log(change);
// 先检查 change.value 是否为 undefined
if (change.value === undefined || change.value.text === "否") {
await sdk.setValue(setText, undefined);
}
}
}
//子表单获取行数和对应行数字段
export async function getForm() {
//获取子表单字段值
const idd = await sdk.getValue("subForm_1");
//获取子表单行数
const count = idd.value.length;
//根据子表单行数遍历
for (let row = 0; row < count; row++) {
//获取子表单不同的字段
const requests = [
{
formId: "subForm_1",
row: row,
fieldId: "text_1"
},
{
formId: "subForm_1",
row: row,
fieldId: "text_2"
},
{
formId: "subForm_1",
row: row,
fieldId: "date_1"
},
{
formId: "subForm_1",
row: row,
fieldId: "date_2"
}
];
const responses = await Promise.all(
requests.map(request => sdk.getSubformValue(request))
);
const values = responses.map(response => response.value);
//不能使用双引号
console.log(`获取第${row + 1}行:`, values[0]);
console.log(`获取第${row + 1}行:`, values[1]);
console.log(`获取第${row + 1}行:`, values[2]);
console.log(`获取第${row + 1}行:`, values[3]);
}
}
export async function getinfo() {
const userinfo = await sdk.getUserInfo();
console.log(userinfo);
// 创建一个新对象,包含userinfo中除了corpid和xbbAccessToken以外的所有属性
const filteredUserInfo = Object.entries(userinfo).reduce((acc, [key, value]) => {
if (key !== "corpid" && key !== "xbbAccessToken") {
acc[key] = value;
}
return acc;
}, {});
// 将过滤后的对象转换为JSON字符串
const filteredUserInfoStr = JSON.stringify(filteredUserInfo, null, 2);
await sdk.alert({
title: 'alert标题',
content: filteredUserInfoStr,
confirmButtonText: '确认'
});
}
//详情页按钮单击判断时间
export async function checkCurrentTime({ val }) {
// 获取用户信息
const user = await sdk.getUserInfo();
//提取用户ID
const userId = user.userId;
const response = await sdk.api.request("/user/list", {
userIdIn: [userId],
});
//获取角色权限
const roleList = response.result.userList[0].roleList;
//提取角色权限ID
const roleIds = roleList.map((role) => role.id);
console.log(roleIds); //结果为:[34237,1]数组
//获取管理员权限
const hasRoleroot = roleIds.includes(1);
//获取临时修改权限
const hasRolevip = roleIds.includes(34237);
if (hasRoleroot || hasRolevip) {
await sdk.alert({
title: "欢迎您",
content: "尊敬的VIP用户",
confirmButtonText: "确认",
});
return;
}
// console.log(val);
if (val.btn.value == "新建开工报批") {
// 获取当前日期
const currentDate = new Date();
console.log("当前日期:", currentDate);
// 获取当前日期的日数
const currentDay = currentDate.getDate();
// 判断是否在1-3号或者16-17号范围内
if (
(currentDay >= 1 && currentDay <= 15) ||
(currentDay >= 15 && currentDay <= 25)
) {
console.log("当前日期在1-10号或者15-25号范围内");
} else {
await sdk.showToast({
type: "error",
content:
"请在每月的1号至10号以及15号至25号内提交您的内容,其他时间系统将无法保存。感谢配合",
time: 3000,
});
console.log("当前日期不在1-10号或者15-25号范围内");
return false;
}
}
}
// 通过按键获取客户dataId通过api编辑
// 定义一个异步函数 getd,接受参数 aa
export async function getd(aa) {
// 打印传入的参数 aa,用于测试
console.log("Input parameter:", aa);
// 将选中的数据对象转换为要发送的数据列表
const dataList = aa.val.xbb_selected_datas.map(data => ({
// 提取每个数据对象的 dataId
"dataId": data.dataId,
// 定义要更新的数据字段,例如设置 text_10 为 "是"
"dataList": {
"text_10": "是"
}
}));
// 打印转换后的数据列表,用于测试
console.log("Data list:", dataList);
// 使用 Promise.all 来并行发送每个编辑请求
await Promise.all(dataList.map(async item => {
// 打印每个编辑请求,用于测试
console.log("Editing request:", item);
// 使用 SDK 发送编辑请求到 "/paas/edit" 接口,并等待完成
const result = await sdk.api.request("/paas/edit", item);
// 打印编辑请求结果,用于测试
console.log("Editing result:", result);
}));
// 测试完成,函数执行完毕
console.log("Testing completed.");
}
//思路版本
export async function addcount(a){
console.log(a)
const b = a.val.originQuery.dataId
console.log(b)
const c = await sdk.getFormDataById({
appId: 744517,
menuId: 8157216,
saasMark: 1,
businessType: 100,
subBusinessType: 0,
formId: 7388263,
dataId: b
})
console.log(c)
console.log(c.data.data.data.num_7)
const d = c.data.data.data.num_7
const e = d + 1;
console.log(e)
const f = await sdk.api.request("/customer/edit", {
"dataId": b,
"dataList": {
"num_7": e,
}
})
console.log(f)
}
//美化版本,详情页增加次数,回单阶段增加,不需要考虑其他阶段未填写资料
//上线时间2024-04-06:23:57
export async function addcount(a) {
try {
// 提取 dataId
const dataId = a?.val?.originQuery?.dataId;
if (!dataId) {
console.error("Data ID is missing or invalid.");
return;
}
console.log("Data ID:", dataId);
// 获取表单数据
const formDataResponse = await sdk.getFormDataById({
appId: 744517,
menuId: 8157216,
saasMark: 1,
businessType: 100,
subBusinessType: 0,
formId: 7388263,
dataId: dataId
});
const formData = formDataResponse.data?.data?.data;
console.log("Form Data:", formData);
if(formData.text_4.text === "有效客户"){
await sdk.alert({
title: '温馨提示',
content: '该客户状态为有效客户,请推进阶段至到店客户',
confirmButtonText: '确认'
});
return false;
}
const CN = formData.text_1;
const num7 = formData.num_7;
console.log("Current Count:", num7);
// 增加计数器值
const updatedCount = num7 + 1;
console.log("Updated Count:", updatedCount);
// 不同的条件下更新 num_7
if (updatedCount === 2) {
const updateResponse = await sdk.api.request("/customer/edit", {
"dataId": dataId,
"dataList": {
"num_7": updatedCount,
"text_50": "二客",
"text_77": "二客"
}
});
console.log("Update Result:", updateResponse);
} else if (updatedCount > 2) {
const updateResponse = await sdk.api.request("/customer/edit", {
"dataId": dataId,
"dataList": {
"num_7": updatedCount,
"text_50": "多客",
"text_77": "多客"
}
});
console.log("Update Result:", updateResponse);
}
await sdk.alert({
title: '客户姓名:'+ CN,
content: '到店次数从'+num7+'次,增加到'+updatedCount+'次',
confirmButtonText: '确认'
});
} catch (error) {
console.error("An error occurred:", error);
}
}
//新建用户服务部表单
export async function homevist(a){
console.log("1,获取表单初步信息:",a)
const u = await sdk.getUserInfo()
console.log("2,获取当前用户信息:",u)
const t = u.userId
console.log("3,提取用户ID:",t)
//获取主键dataId
const b = a.val.originQuery.dataId
console.log("4,提取当前表单dataId:",b)
const c = await sdk.getFormDataById({
appId: 744517,
menuId: 8157216,
saasMark: 1,
businessType: 100,
subBusinessType: 0,
formId: 7388263,
dataId: b
})
console.log("5,获取表单详细信息:",c)
const g = c.data.data.data.text_70
console.log(g)
if(g === undefined || g.text === "否" ){
const o = await sdk.confirm({
title: '温馨提示',
content: '设计师未确认是否家访,是否强制继续',
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
});
console.log(o)
if(!o.confirm){
return false;
}
}
const i = await sdk.api.request("/customer/edit", {
"dataId": b,
"dataList": {
"text_70": "是"
}
})
console.log(i)
//获取关键信息,客户+电话
const f = c.data.data.data.text_76
//通过API新建表单关联数据
const e = await sdk.api.request("/paas/add", {
"formId": 7527528, //自定义表单
"dataList": {
"text_3": b, //使用主键的dataId关联
"text_13": f, //客户+电话
"text_16": "否", //必填信息
"text_8": "否", //必填信息
},
"userId": t //操作人未当前用户
})
console.log(e);
const r = e.msg
await sdk.alert({
title: '温馨提示',
content: r,
confirmButtonText: '确认'
});
}
//正常运行版本,不包含部门筛选
export async function info3(){
const b = await sdk.getValue("text_4");
// 获取当前用户ID
console.log(b.value.id);
const a = await sdk.api.request("/user/list", {
"userIdIn": [b.value.id]
});
console.log(a);
// 赋值当前用户的部门ID
const d = a.result.userList[0].departmentList[1].id;
console.log(d);
// 通过当前用户的部门ID,查询部门人员信息
const dd = await sdk.api.request("/user/list", {
"departmentId": d
});
console.log(dd);
// 遍历部门人员信息,找到 isLeader 等于 1 的用户并输出其 userId 和部门名称
for (const user of dd.result.userList) {
// 遍历用户所属部门列表
for (const department of user.departmentList) {
// 检查部门中的 isLeader 属性是否等于 1
if (department.isLeader === 1) {
console.log(`拥有 isLeader 等于 1 的用户的 userId 是:${user.userId},所属部门名称是:${department.name}`);
return; // 找到一个符合条件的用户后就结束函数执行
}
}
}
}
//该代码不适合多部门的用户
export async function info(){
const b = await sdk.getValue("text_4");
// 获取当前用户ID
console.log(b);
// 获取用户完整信息
const a = await sdk.api.request("/user/list", {
"userIdIn": [b.value.id]
});
console.log(a);
// 遍历部门列表,找到不等于1的部门id, 因为1是主架构生活
let departmentId = null;
for (const department of a.result.userList[0].departmentList) {
if (department.id !== 1) {
departmentId = department.id;
break; // 找到一个不等于1的部门id后就退出循环
}
}
// 如果找到了不等于1的部门id,则继续查询该部门的用户信息
if (departmentId !== null) {
console.log("找到不等于1的部门id:", departmentId);
// 查询部门人员信息
const dd = await sdk.api.request("/user/list", {
"departmentId": departmentId
});
console.log(dd);
// 遍历部门人员信息,找到 isLeader 等于 1 的用户并输出其 userId、姓名和部门名称
for (const user of dd.result.userList) {
// 遍历用户所属部门列表
for (const department of user.departmentList) {
// 检查部门中的 isLeader 属性是否等于 1
if (department.isLeader === 1) {
console.log(`拥有 isLeader 等于 1 的用户的 userId 是:${user.userId},姓名是:${user.name},所属部门名称是:${department.name}`);
// 设置值为找到的用户ID和姓名,text_6是字段表示可修改
await sdk.setValue("text_6", {"id": user.userId, "name": user.name});
return; // 找到一个符合条件的用户后就结束函数执行
}
}
}
} else {
console.log("未找到不等于1的部门id");
}
}
//功能:判断客户阶段,并且锁定字段,补充内容 ---start---
// 主功能函数,处理定金判断逻辑
export async function handleDepositCheck() {
try {
const { value: serialNumber } = await sdk.getValue("text_22");
console.log("流水号:", serialNumber);
const customerInfo = await fetchCustomerInfo(serialNumber);
console.log("信息:", customerInfo);
const decisionValue = customerInfo.data.paasFormDataESList[0].data.text_4.value;
if (["4", "5"].includes(decisionValue)) {
await showDepositAlert();
await disableAndSetValue('text_40', '是', '0c051543-0043-2082-f104-e900523f1b40');
}
} catch (error) {
console.error("处理过程中发生错误:", error);
}
}
//显示定金提醒对话框
async function showDepositAlert() {
await sdk.alert({
title: '温馨提示',
content: '定金&签单阶段的客户,请补充心得分享。',
confirmButtonText: '确认'
});
}
// 禁用字段并设置值
async function disableAndSetValue(fieldId, text, value) {
await sdk.disableField(fieldId);
await sdk.setValue(fieldId, { text, value });
}
// 获取客户信息
async function fetchCustomerInfo(info, page = 1) {
// 定义与函数逻辑密切相关的常量
const APP_ID = 744517;
const MENU_ID = 8157216;
const FORM_ID = 7388263;
return await sdk.getFormDataList({
appId: APP_ID,
menuId: MENU_ID,
saasMark: 1,
businessType: 100,
subBusinessType: 0,
formId: FORM_ID,
conditions: [{"attr":"text_59","fieldType":1,"symbol":"equal","value":[info]}],
page: page,
pageSize: 20
});
}
//功能:判断客户阶段,并且锁定字段,补充内容 ---end---
//第一种遍历方式:
export async function subfrom() {
const data = await sdk.getValue('subForm_1');
console.log(data) //测试用
data.value.forEach((item, index) => {
if (item.text_1.text === "手机号码") {
const phoneString = item.text_2?.replace(/\\D/g, '') || ''; // 移除非数字字符并处理可能的 undefined
const phoneRegex = /^1[3-9]\\d{9}$/;
if (!phoneRegex.test(phoneString)) {
console.error(`第 ${index + 1} 条记录的手机号格式不正确,请输入有效的手机号。`);
alert(`第 ${index + 1} 条记录的手机号格式不正确,请输入有效的手机号。`);
return;
}
// 其他逻辑代码,例如提交表单或其他处理
console.log(`第 ${index + 1} 条记录的手机号格式正确,继续处理...`);
}
});
}
//第二种遍历方式:
export async function subfrom() {
const data = await sdk.getValue('subForm_1');
for (let i = 0; i < data.value.length; i++) {
const item = data.value[i];
if(item.text_2 === ""){
return;
}
if (item.text_1.text === "手机号码") {
const phoneString = item.text_2?.replace(/\\D/g, '') || ''; // 移除非数字字符并处理可能的 undefined
const phoneRegex = /^1[3-9]\\d{9}$/;
if (!phoneRegex.test(phoneString)) {
console.error(`第 ${i + 1} 条记录的手机号格式不正确,请输入有效的手机号。`);
alert(`第 ${i + 1} 条记录的手机号格式不正确,请输入有效的手机号。`);
// 将该行的手机号码字段设置为空值
await sdk.setSubformValue({
formId: 'subForm_1',
row: i,
fieldId: 'text_2',
value: ''
});
// 跳出循环,避免重复提示
break;
}
// 其他逻辑代码,例如提交表单或其他处理
console.log(`第 ${i + 1} 条记录的手机号格式正确,继续处理...`);
}
}
}
//增加防抖功能避免手机输入手机号验证过快
let timeoutId;
export async function subfrom() {
clearTimeout(timeoutId); // 清除之前的定时器
timeoutId = setTimeout(async () => {
const data = await sdk.getValue("subForm_1");
for (let i = 0; i < data.value.length; i++) {
const item = data.value[i];
if (item.text_2 === "") {
return;
}
if (item.text_1.text === "手机号码") {
const phoneString = item.text_2?.replace(/\\D/g, "") || ""; // 移除非数字字符并处理可能的 undefined
const phoneRegex = /^1[3-9]\\d{9}$/;
if (!phoneRegex.test(phoneString)) {
console.error(
`第 ${i + 1} 条记录的手机号格式不正确,请输入有效的手机号。`
);
alert(`第 ${i + 1} 条记录的手机号格式不正确,请输入有效的手机号。`);
// 将该行的手机号码字段设置为空值
await sdk.setSubformValue({
formId: "subForm_1",
row: i,
fieldId: "text_2",
value: "",
});
// 跳出循环,避免重复提示
break;
}
// 其他逻辑代码,例如提交表单或其他处理
console.log(`第 ${i + 1} 条记录的手机号格式正确,继续处理...`);
}
}
}, 1500); // 延迟 500 毫秒
}
export async function changID(){
//获取本表单dataID主键
const res = await sdk.getDataId()
const dataId = res.value
//查看销售机会详情
const resId = await sdk.api.request("/opportunity/detail", {
"dataId": dataId
})
//获取客户名称的数据关联
const a = await sdk.getValue("text_3")
//获取订货单位关联ID数据关联
const d = await sdk.getValue("text_24")
//编辑销售机会
await sdk.api.request("/opportunity/edit", {
//本表单dataID
"dataId": dataId,
//修改客户信息
"dataList": {
//关联用户字段,只需要用户dataId
"text_3": d.value.data.dataId
}
})
console.log("值变动即触发,不需要保存")
// await sdk.refreshPage()
await sdk.setValue('text_24', undefined);
await sdk.setValue('text_22', { text: '是', value: '02be1223-518a-5b00-cb3a-9f94e3bd2cd8' })
}
export async function setcoUserId(){
//获取登录人员信息
const bb = await sdk.getValue("text_20");
//提取人员id
const id = bb.value.id;
//提取人员name
const name = bb.value.name;
//获取协同人值
const ccc = await sdk.getValue("coUserId");
//使用let赋值变量
let user = ccc.value;
// 检查user是否是undefined,并初始化为一个空数组
if (!user) {
user = [];
}
//通过push(),推送上下文数据
user.push({id:id,name:name});
await sdk.setValue("coUserId", user);
}
通过输入面积信息,调整下拉选项数据
export async function calculateArea() {
const area = await sdk.getValue('num_5');
const areaValue = area.value;
console.log(areaValue);
let textValue, uuidValue;
const conditions = [
{ min: 0, max: 100, text: '100以下', uuid: 'fd8cbbc8-d0c2-da8a-72ac-e448a693defc' },
{ min: 100, max: 130, text: '100-130', uuid: '7c609441-42ea-dc9f-2819-c488c03f4355' },
{ min: 131, max: 150, text: '131-150', uuid: 'eb44fdab-a900-5a46-bde7-ed62781986a7' },
{ min: 151, max: 199, text: '151-199', uuid: '7885e382-2fec-836b-a1e5-21b193a74d36' },
{ min: 200, max: 250, text: '200-250', uuid: '6c7dc56e-7220-1b5c-95aa-9f28924eeb64' },
{ min: 250, max: 1000, text: '250以上', uuid: '362b2c84-c29a-d49a-b2ae-0c70ee99332b' },
//
];
for (const condition of conditions) {
if (areaValue >= condition.min && areaValue <= condition.max) {
console.log(`面积在${condition.min}-${condition.max}之间`);
textValue = condition.text;
uuidValue = condition.uuid;
break;
}
}
if (!textValue) {
textValue = '231以上';
}
await sdk.setValue('text_33', { text: textValue, value: uuidValue });
}
获取客户阶段信息
export async function getinfo() {
const test = await sdk.getValue("text_18");
console.log(test);
const testvalue = test.value
console.log(testvalue);
const testvaluetext = test.value.text;
console.log(testvaluetext);
console.log("asdf");
const text2 = await sdk.getValue("text_4");
// const bbb = text2.value
console.log(text2);
}
获取客户状态信息
export async function getstatinfo(){
const info = await sdk.getValue("text_4")
console.log("客户状态",info)
}
判断首日和交定修改阶段推进
//联合判断
export async function changeStage() {
const firstVisitDateResponse = await sdk.getValue("date_5");
const depositDateResponse = await sdk.getValue("date_1");
const firstVisitDate = firstVisitDateResponse.value;
const depositDate = depositDateResponse.value;
console.log("First Visit Date: ", firstVisitDate);
console.log("Deposit Date: ", depositDate);
let stageObject = null;
// 检查 firstVisitDate 是否有值
if (firstVisitDate !== undefined && firstVisitDate !== "") {
// 如果 firstVisitDate 有值,但 depositDate 没有值
if (!depositDate || depositDate === undefined || depositDate === "" || depositDate === null) {
console.log("Setting stage to 到店客户");
stageObject = {
allowSkipStage: 0,
color: "#646566",
enable: 1,
fieldMap: [],
isOther: 0,
stageId: 2656214,
stageProcessId: 516616,
stageRatio: 0,
stageType: 0,
text: "到店客户",
value: "2"
};
}
// 如果 firstVisitDate 和 depositDate 都有值
else {
console.log("Setting stage to 定金客户");
stageObject = {
allowSkipStage: 1,
color: "#646566",
enable: 1,
isOther: 0,
stageId: 2656216,
stageProcessId: 516616,
stageRatio: 0,
stageType: 0,
text: "定金客户",
value: "4"
};
}
} else {
console.log("firstVisitDate is not set, no stage change triggered.");
}
if (stageObject !== null) {
const result = await sdk.setValue("text_18", stageObject);
console.log("Setting stage result:", result);
}
}
通过日期判断修改客户阶段
//首次到店日期触发阶段更换
export async function hdpz() {
const data_hd = {
color: "#FFC849",
text: "回单客户",
value: "10"
};
try {
const hdpz = await sdk.setValue("text_4", data_hd);
console.log("成功设置值:", hdpz);
} catch (error) {
console.error("设置值失败:", error);
}
}
//交定日期触发阶段更换
export async function djpz() {
const data_dj = {
color: "#FF8C2E",
text: "定金客户",
value: "5"
};
try {
const djpz = await sdk.setValue("text_4", data_dj);
console.log("成功设置值:", djpz);
} catch (error) {
console.error("设置值失败:", error);
}
}
校验数据是否满足提交前提
xport async function KH(){
// 通过sdk.getValue获取信息
// 字段可以被隐藏
const 是否家访 = await sdk.getValue("text_10");
// 使用console.log打印获取的结果
console.log("是否成交的值:", 是否家访);
// 赋值信息到N
const N = 是否家访.value;
// 使用console.log打印赋值后的N
console.log("赋值后的N:", N);
// 判断信息是否符合
if(N != "是"){
// 使用console.log打印不符合的提示
console.log("不满足创建服务的要求");
// 弹出提示
await sdk.showToast({
type: "warning",
content: "客户信息未确认家访,请确定后创建"
});
// 拒绝数据提交
return false;
}
}
通过日期判单解锁字段编辑功能,并且赋值下拉选项
export async function eld1 () {
const res = await sdk.enableField('date_5');
console.log(res)
}
export async function pinshen1(){
const 获取预约时间 = await sdk.getValue("date_4");
if(获取预约时间 !== null || 获取预约时间 !== undefined)
{
await sdk.setValue('text_21', { text: '应评审总数'})
}
}
export async function eld2 () {
const res = await sdk.disableField('date_4');
console.log(res)
}
export async function pinshen2(){
const 获取实际时间 = await sdk.getValue("date_5");
if(获取实际时间 !== null || 获取实际时间 !== undefined)
{
await sdk.setValue('text_21', { text: '实际评审数'})
}
}
判断值是否为是,解锁按钮,【表单展示是如果为是,也解锁按钮】
//预勘测不为是,则锁定是否提报
export async function checkdata() {
//判断是否预勘测
const bo = await sdk.getValue("text_12");
console.log(bo)
if (!bo || !bo.value || bo.value.text !== "是") {
//锁定提报按键,并且将单项选择设定否
const bbb = await sdk.setValue('text_15', { text: '否',value: "63e6f6b3-c7a7-03d7-729c-f0da4e13f0e3"})
console.log(bbb)
await sdk.disableField("text_15")
}
else {
//解锁提报按键
await sdk.enableField("text_15")
}
}
开工时间范围规定,包含数据执行条件
//验证日期填写规范
export async function KHD() {
// 获取项目经理
const xmjl = await sdk.getValue("text_18");
// 检查项目经理是否为空或未定义
if (!xmjl || xmjl.value === null || xmjl.value === undefined) {
// 如果项目经理为空或未定义,继续执行下面的代码
} else {
return; // 如果项目经理不为空,不执行下面的代码
}
// 获取用户选择的日期
const dd = await sdk.getValue("date_2");
// 检查用户是否已选择日期
if (!dd || !dd.value) {
console.log("错误:您还没有选择日期");
// 在这里可以添加更多逻辑,如显示错误提示给用户
return;
}
const selectedDate = new Date(dd.value * 1000);
// 获取当前日期
const currentDate = new Date();
console.log("选定日期:", selectedDate);
console.log("当前日期:", currentDate);
// 获取当前月份和年份
const currentMonth = currentDate.getMonth();
const currentYear = currentDate.getFullYear();
// 定义范围的起始日期和结束日期
let rangeStartDate, rangeEndDate;
if (currentDate.getDate() >= 1 && currentDate.getDate() <= 15) {
// 当月的1号到15号,用户只能选择当月的16号及之后的日期
rangeStartDate = new Date(currentYear, currentMonth, 16);
rangeEndDate = new Date(currentYear, currentMonth, 31);
console.log("在当前月的1号到15号范围内,只能选择当月的16号及之后的日期");
} else {
// 当月的16号之后,用户只能选择下个月的1号到15号的日期
const nextMonth = (currentMonth + 1) % 12;
const nextYear = (currentMonth === 11) ? currentYear + 1 : currentYear;
rangeStartDate = new Date(nextYear, nextMonth, 1);
rangeEndDate = new Date(nextYear, nextMonth, 15);
console.log("在当前月的16号之后,只能选择下个月的1号到15号的日期");
}
// 检查用户选择的日期是否在允许的范围内
if (selectedDate >= rangeStartDate && selectedDate <= rangeEndDate) {
console.log("选定日期在范围内");
// 在这里可以添加范围内日期的逻辑
} else {
console.log("错误:选定日期不在范围内");
await sdk.showToast({
type: "warning",
content: "预排期时间不在规定范围内,将无法提交!",
time: 3000
});
return false
// 在这里可以添加不在范围内日期的逻辑
}
}
验证数据是否可以继续执行
export async function KH(){
// 通过sdk.getValue获取信息
// 字段可以被隐藏
const 签单后服务开启 = await sdk.getValue("text_36");
// 使用console.log打印获取的结果
console.log("获取的是否签单后服务开启的值:", 签单后服务开启);
// 赋值信息到N
const N = 签单后服务开启.value;
// 使用console.log打印赋值后的N
console.log("赋值后的N:", N);
// 判断信息是否符合
if(N != "是"){
// 使用console.log打印不符合的提示
console.log("不满足开工报批的要求");
// 弹出提示
await sdk.showToast({
type: "warning",
content: "不满足开工的要求,请确认合同订单!"
});
// 拒绝数据提交
return false;
}
}
功能:通过判断数据,提交过程中,配置弹出窗口按钮赋值数据。
主要作用:做一个全局代码,来判断是否脚本是否执行,如果执行则跳过
//--------分割线--------
//提交前判单代码
let tijiaoExecuted = false; // 添加标志,表示是否已经执行过 tijiao
export async function infomsg() {
try {
//获取提报按键的值
const text15Value = (await sdk.getValue("text_15")).value;
console.log(text15Value);
//获取项目经理的值
const xmjlValue = (await sdk.getValue("text_18")).value;
console.log(xmjlValue);
//是否提报的值等于是 并且 项目经理的值等于undefined
// if (text15Value === "是" && xmjlValue === undefined) {
// await sdk.setValue('text_15', { text: '否', value: "63e6f6b3-c7a7-03d7-729c-f0da4e13f0e3" });
// console.log("text_15 的强制设置值为 '否'并且跳过执行。");
if(xmjlValue === undefined){
const res = await sdk.alert({
title: '温馨提示',
content: '交付部正在安排项目经理',
confirmButtonText: '确认'
});
if(res.confirm){
console.log("暂停表单提交点击后继续");
return;
}else{
console.log("取消阻塞");
return false;
}
}else{
console.log("继续执行下面指令")
}
// 继续执行下面的代码
// ...
// 获取登录用户信息
const userInfo = await sdk.getUserInfo();
console.log(userInfo.roleIds);
// 检查是否包含30727,如果包含则直接跳过后续操作
// 不能使用includes 备注未修改
if (userInfo.roleIds.includes("30727")) {
console.log("用户包含角色30727,跳过执行。");
return;
}
//如果不包含30727并且项目经理不等于空值,则继续执行下面操作
const [a, b, c, d] = await Promise.all([
sdk.getValue("date_2"),
sdk.getValue("text_12"),
sdk.getValue("text_18"),
sdk.getValue("text_11")
]);
//判断审核是否通过,如果为是,直接跳过后续指令
if(d.value.text === "是"){
console.log("审核通过,跳过执行")
return;
}
if (a.value !== null && b.value.text === '是' && c.value.text !== null) {
tijiaoExecuted = true; // 直接表示已经触发
const result = await sdk.confirm({
title: '温馨提示',
content: '是否通知核算部,开始审批【纸质资料】。',
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
});
const value = result.confirm
? { text: '是', value: "1e230627-e839-8320-11c7-101d2686c9e2" }
: { text: '否', value: "63e6f6b3-c7a7-03d7-729c-f0da4e13f0e3" };
await sdk.setValue('text_15', value);
// 在这里处理确认后的逻辑,主要起阻塞的作用。
if (result.confirm) {
// 处理确认后的逻辑
console.log("点击了确认按钮");
// 继续执行其他代码
console.log("继续执行其他代码");
} else {
// 处理取消后的逻辑
console.log("点击了取消按钮");
}
} else {
console.log("条件满足。");
return "条件满足。";
}
} catch (error) {
// 处理错误
console.error("发生错误:", error);
}
}
功能:根据情况配置字段
主要作用:优化条件来配置字段
//当项目经理变成空的时候,是否提交变成否
export async function xmjl1(){
const assd =await sdk.getValue("text_11")
const ass = await sdk.getValue("text_18")
if(assd.value.text === "否"){
if(ass.value === undefined){
await sdk.setValue('text_15', { text: '否', value: "63e6f6b3-c7a7-03d7-729c-f0da4e13f0e3" });
}
}
}
通过查询数据,来提示是否有重复的表单。
//延迟触发函数创建
async function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
export async function chongcheck(){
try{//延迟触发,避免查询信息错误。
const datatype = await sdk.getLowCodeType();
if(datatype.type === "edit"){
console.log("编辑模式不继续执行。")
return;
}
await delay(3000);
//直接获取客户流水号值
const a = (await sdk.getValue("text_10")).value;
const b = await cc(a);
console.log(b)
if(b.data.paasFormDataESList && b.data.paasFormDataESList.length > 0){
await sdk.alert({
title: '温馨提示',
content: '您已创建过客户信息,请勿重新创建!',
confirmButtonText: '确认'
});
return false;
}else{
console.log("正常触发")
}
}
catch{
console.log("发生错误。")
}
}
async function cc(dateid,page = 1) {
return await sdk.getFormDataList({
appId: 758244,
menuId: 8313500,
saasMark: 2,
businessType: 0,
subBusinessType: 0,
formId: 7524824,
conditions: [{"attr":"text_10","fieldType":1,"symbol":"equal","value":[dateid]}],
page: page,
pageSize: 20
})
}