场景描述:
对于有的业务来说,某些业务中是存在着产品有效期限的,即如果该产品过了有效期限时,将不再享有售后服务或其他权益。如果通过预设产品的有效期限,以业务审核通过为生效起点,可实现自动设置失效日期的效果。
功能实现:
数据表字段简单表示,可根据需要进行增删。
本次示例期限基数以天数为例,可根据需要改为月数、年数。
数据表创建:
创建一张产品表(用于存放产品名称、有效天数等)、合同表(用于存放合同信息,包括产品、生效/失效的日期)。
产品表:
合同表:
实现步骤:
1. 创建一个“新增产品”功能,用于录入产品的基础信息,包括产品名称以及有效天数。有效天数设置不能以0为开头,其正则表达式为:^[1-9][0-9]*$
2. 创建一个“新增合同”功能,用于合同信息录入。产品的生效及失效期限通过合同来体现。
3. 新增一个“合同审核”功能。审核合同信息,审核通过后,设置审核通过的日期为生效日期。(也可按其他状态节点来确立生效日期,此处以审核功能为例)
审核中判断步骤:
审核意见步骤:
合同信息步骤:
审核状态判断步骤:
更新生效日期:
失效日期处理步骤:
示例代码:
async function runProcess($model = model, $plugin = plugin, $params = params) {
let contract = $params.contract;//合同信息
let product = await $plugin.data.getData("612c8c16afa4576894188ebe", contract["612c8c5bafa4576894188f6b"]);//通过合同信息的产品id产品数据表里的产品信息
let term = +product["612c8c3b9e206268a3826fc7"];//产品信息里的有效天数
let expiration_date = $plugin.moment(new Date()).add(term, 'days').format("YYYY-MM-DD");//跟进产品信息的有效天数,算出其失效日期(如果是月数/年数单位,'days'改为'months'/'years')
//更新当前合同的失效日期
await $plugin.data.updateData("60a72ceaf4f073243956fcc8", contract._id, {
"612c8c968a88c8689a339885": expiration_date
})
}
4. 创建一个“服务售后”功能,用于验证合同是否还在有效期内。(这个功能按实际需要去定义,借鉴判断思路即可,此处为了来验证功能,不做其他流程)。
失效日期判断预处理步骤:
示例代码:
function prepare($programStore, $form, vue) {
//监控选择合同步骤,获取合同信息值
vue.$watch(() => { return programStore.getters["getFormValue"]("612c9f3c9e206268a382a0dd") },//选择合同步骤id
function (value, oldValue) {
let now_date = new Date().Format("yyyy-MM-dd");//获取当前日期
let expiration_date = value["612c8c968a88c8689a339885"];//获取选择的合同失效日期
if (expiration_date && expiration_date < now_date) {//当合同的失效日期比当前日期小的时候
$programStore.dispatch("error/setText", "合同已过期");//直接引用,平台的禁止提交效果。下面的为空指可提交
} else {
$programStore.dispatch("error/setText", "");
}
},
);
}
功能效果:
新增产品:
新增合同及合同审核:
售后服务: