场景描述:
在客户关系管理系统中,销售人员新增的报价后,会给到他的上级领导进行审核,报价信息将通过 企业 微信 企业号发送卡片消息到上级领导的企业微信号中,领导通过卡片消息查看报价信息,并且进行审核操作。
实现效果:
新增报价后发送消息卡片至上级领导的企业微信中,上级领导可在企业微信上进行审批操作。

前期准备:
实现此功能模块需要在白码低代码开发平台创建以下6个数据表。
- 公司表:存储公司(客户)信息,其中公司联系人可能会存在多个的情况,因此这个字段的类型为集合。

2.联系人表:用于记录联系人的基本信息。其中,公司字段关联的是客户(公司),联系人则是此公司的客户代表,一个公司可以有多个联系人,因此字段类型为集合。销售归属人是跟进此联系人的销售人员的关联字段。

3.报价表:用于记录报价信息,包括产品明细以及审核记录,所属的客户(公司)以及联系人。

4.审核记录表:用于记录审核信息,包括审核人,审核时间等。

5.产品明细表:用于记录报价单中的产品(包括数量、单价、明细金额等)

6.用户表:用于记录系统用户信息,包括部门,上级领导,客户数上线,企业微信userid等字段。

实现步骤:
- 创建发送企业微信消息卡片(报价信息)的云函数。
配置API参数:

编程代码:
async function run($input, $output, $modules = modules) { /**发送应用文本消息 * 官方API:https://work.weixin.qq.com/api/doc/90000/90135/90236 * 错误码查询工具:https://open.work.weixin.qq.com/devtool/query?e= * * touser、toparty、totag不能同时为空 */ const wxworkThirdApi = $modules.wxworkThirdApi; let agentid = await wxworkThirdApi.getAgentId(); let title = $input.title;//任务标题 let description = $input.description; let task_id = $input.task_id; let offer_url = await $modules.helper.getConfig("offer_url"); let order_url = await $modules.helper.getConfig("order_url"); let url = $input.title.includes("报价") ? offer_url : order_url; let data = { touser:$input.touser, msgtype:"interactive_taskcard",//任务卡片消息 agentid, interactive_taskcard:{ title, description, url, task_id, btn:[ { key:"approve", name:"通过", color:"blue", is_bold:false, }, { key:"reject", name:"拒绝", color:"red", is_bold:false, } ], }, }; //发送 let task_card_message = await wxworkThirdApi.request({ method: "post", url: "message/send", data }); /** * 如果部分接收人无权限或不存在,发送仍然执行,但会返回无效的部分(即invaliduser或invalidparty或invalidtag),常见的原因是接收人不在应用的可见范围内。 * 如果全部接收人无权限或不存在,则本次调用返回失败,errcode为81013。 * 返回包中的userid,不区分大小写,统一转为小写 */ $output.invaliduser = task_card_message.invaliduser; $output.invalidparty = task_card_message.invalidparty; $output.invalidtag = task_card_message.invalidtag; $output.res = task_card_message; }
2.创建一个“新增报价”功能,用于录入报价单信息。并且将生成的报价信息通过企业微信发送卡片消息给上级领导进行审核。
(1)选择联系人:筛选销售归属人为当前用户的联系人。

(2)新增报价:新增一条报价单数据。
(3)新增产品明细:新增报价单中的产品明细集合,设置好明细中各种金额的计算。
(4)获取当前系统用户:

(5)获取上级领导:筛选出当前用户从属的上级领导。

(6)获取联系人公司:做一个筛选,获取联系人所属的公司(客户)。

(7)计算参数:将上方步骤中的数据进行整合,输出。

async function runProcess($model = model,$plugin = plugin,$params = params){ let contact_name = $params.contact_name;//联系人名称 let company_name = $params.company_name;//联系人公司名称 company_name = company_name || "个人" let project_name = $params.project_name;//项目名称 let detail_total = $params.detail_total;//明细总额 let preferential_amount = $params.preferential_amount;//优惠金额 let final_amount = $params.final_amount;//最终金额 let time = new Date().getTime();//当前时间戳 let date = $params.date; let desc = `客户:${company_name} ${contact_name}\n项目名称:${project_name}\n明细总额:${detail_total}\n优惠金额:${preferential_amount}\n最终金额:${final_amount}\n创建日期:${date}` $model.output["desc"] = desc; $model.output["task_id"] = `offer_${$params.offer._id}_${time}` $model.output["title"] = `${$params.name}的报价申请`}
(8)发送企业微信消息卡片:调用云函数,设置好模板中的输入参数。

3.创建一个“审核报价”功能,用于审核报价单。
(1)选择报价:选择需要进行审核的报价,需要筛选状态为“审核中”的报价单数据。

(2)报价状态判断:若报价单状态不为“审核中”,则无法进行审核且无法提交。若为审核中则可以进行审核意见输入,并且在系统中新增一条审核记录。

(3)新增审核记录:对当前报价审核操作进行记录,其中“审核人”设为当前用户。

(4)审核后状态判断:若报价通过,则更新报价状态为“已通过”,若不通过,则更新报价状态为“已拒绝”。

(5)更新报价状态(已通过/已拒绝):


(6)更新任务卡片消息状态:调用云函数,审核操作完成后,更新消息卡片上的审核意见信息。

4.创建更新消息卡片的云函数
配置API参数:

编程代码:
async function run($input,$output,$modules = modules){ const wxworkThirdApi = $modules.wxworkThirdApi; let agentid = await wxworkThirdApi.getAgentId(); let data = { userids:[$input.userid], agentid, task_id:$input.task_id, replace_name:$input.replace_name }; let res = await wxworkThirdApi.request({ method: "post", url: "message/update_taskcard", data }); $output.invaliduser = res; }

如若转载,请注明出处:http://www.cyclm.com/87363.html