为了体现移动应用优势,提升公司办公效率,通过移动CRM建立线上工作方式,简化传统公司工作方式,结合现有EMM管理平台与MBaas数据相结合,满足高度运转的公司变化需要。 本文档供项目组全体成员及项目组领导、单元测试人员、及相关人员阅读,方便后期项目更新维护、相关人员尽快熟悉项目内容。
本文档用于企业移动协同办公的详细设计,该详细设计的范围是:系统各组成部分的构成、各个部分的相关功能描述及相关代码的详细介绍。
接口地址:
1、获取机会详情接口地址:服务器地址+端口号 + "/crm/app/opport/view"
2、编辑机会接口地址:服务器地址+端口号 + "/crm/app/opport/edit"
3、创建机会接口地址:服务器地址+端口号 + "/crm/app/opport/add"
代码说明:
1、创建:addClue()提交数据。
2、编辑:
1)clueCreateViewObj.initData()获取原来线索数据
2) addClue()提交编辑的数据。
注:p.open=”add”则openType= 0,isAdd = 1创建线索;否则openType= 1,isAdd = 0编辑线索。
接口参数:
编辑线索接口参数: { 'id':id, 'contactName':contactName, 'companyName':companyName, 'department':department, 'post':post, 'mobile':mobile, 'teleNo':teleNo, 'email':email, 'qq':qq, 'weChat':weChat, 'remark':remark, 'region':region2, 'profession':profession2, 'clueState':clueState, 'dataSource':dataSource, 'productType':productType, 'closeReason':closeReason, 'salesUserId':salesUserId, 'submitState':0, "dataType" : 1, "clueType" : 0, 'isAdd':isAdd }
创建线索接口参数: { 'id':'', 'contactName':contactName, 'companyName':companyName, 'department':department, 'post':post, 'mobile':mobile, 'teleNo':teleNo, 'email':email, 'qq':qq, 'weChat':weChat, 'remark':remark, 'region':region2, 'profession':profession2, 'clueState':clueState, 'dataSource':dataSource, 'productType':productType, 'closeReason':closeReason, 'salesUserId':salesUserId, 'submitState':0, "dataType" : 1, "clueType" : 0, 'isAdd':isAdd }
接口地址:
服务器地址+端口号 + "/crm/app/clue/page"
代码说明:
进入页面执行clueListViewObj.loadData(type, dataObj)获取线索列表。
接口参数: { "pageNo" : clueListViewObj.pageNo, "pageSize" : 10, "salesUserId" : saleId, "region" : region, "profession" : profession, "clueState" : clueState, "dataType" : 1, "clueType" : clueType, "IS_PUISNE" : IS_PUISNE }
接口地址: 服务器地址+端口号 + "/crm/app/clue/dynamic/page" 代码说明: 进入页面执行csmConListViewInstance.load(clueId, type)函数调用接口获取线索跟进动态列表。 接口参数: { "objEntityId" : oppId, "objEntityTypeId" : "02", "pageNo" : this.pageNo, "pageSize" : 10 }
接口地址:
1、获取线索详情接口地址:服务器地址+端口号 + "/crm/app/clue/view"
2、转移线索接口地址:服务器地址+端口号 + "/crm/app/clue/assign"
3、修改线索状态接口地址:服务器地址+端口号 + "/crm/app/clue/change"
代码说明:
修改线索状态:clueStateViewInstance.changeState(clueId, clueState, closeReason);
转移线索:clueStateViewInstance.transferClue(clueId, id, clueState, submitState);
获取线索详情:clueInfo().
接口参数:
获取线索详情接口参数: { "id" : csmId }
修改线索状态接口参数: { "id" : clueId, "clueState" : clueState, "closeReason" : closeReason }
转移线索接口参数: { id : clueId, salesUserId : salesUserId, clueState : clueState, submitState : submitState }
接口地址:
服务器地址+端口号 + "/crm/app/clue/change"
代码说明:
1、clueState_content.html运行appcan.window.publish("clueStatechange", $.trim(selVal))返回详情页后;
2、clueInfo.html运行clueStateViewInstance.changeState(clueId, clueState, closeReason)修改线索状态;
接口参数: { "id" : clueId, "clueState" : clueState, "closeReason" : closeReason }
接口地址:
1、客户查重接口地址:服务器地址+端口号 + '/crm/app/clue/tooppCheck'
2、线索转机会接口地址:服务器地址+端口号 + '/crm/app/clue/toopp'
代码说明:
1、limitView.initData()查询线索中客户是否存在以及是否有使用权限;
2、执行addOpport()函数线索转为机会。
接口参数:
查询线索中客户是否存在接口参数: { 'csmName' : self.defaultMsg.companyName, }
线索转为机会接口参数: { 'clueId':options.param.clueId, 'opptTtl':options.param.opptTtl, 'opptStatId':options.param.opptStatId, 'vndtAmt':options.param.vndtAmt, 'startDate':options.param.startDate, 'sttlDate':options.param.sttlDate, 'dataSource':options.param.dataSource, 'productType':options.param.productType, 'remark':options.param.remark }
接口地址:
服务器地址+端口号 + "/crm/app/clue/assign"
代码说明:
执行clueStateViewInstance.transferClue(clueId, id, clueState, submitState)转移线索。
接口参数: { id : clueId, salesUserId : salesUserId, clueState : clueState, submitState : submitState }
接口地址:
1、线索搜索接口地址:服务器地址+端口号 + "/crm/app/clue/page"
2、机会搜索接口地址:服务器地址+端口号 + "/crm/app/opport/pageByParams"
3、客户搜索接口地址:服务器地址+端口号 + "/crm/app/custom/pageByParams"
4、联系人搜索接口地址:服务器地址+端口号 + "/crm/app/contact/pageConByParams"
代码说明:
线索标示: searchListViewInstance.openType = 0
机会标示: searchListViewInstance.openType = 1
客户标示: searchListViewInstance.openType = 2
联系人标示: searchListViewInstance.openType = 3
接口参数:
线索搜索接口参数: { "pageNo":self.pageNo, "pageSize":10, "salesUserId":'', "region" : '', "profession" : '', "clueState" : '', "dataType" : 1, "clueType" : '', "companyName" : searchText }
机会搜索接口参数: { "pageNo":self.pageNo, "pageSize":10, "opptStatId":'', "opptTtl":searchText }
客户搜索接口参数: { "pageNo":self.pageNo, "pageSize":10, "level":'', "csmStatId":'', "csmName":searchText }
联系人搜索接口参数: { "pageNo":self.pageNo, "pageSize":10, "contactTypeId":'', "contactName":searchText }
接口地址:
1、添加线索跟进动态添加类型 服务器地址+端口号 + "/crm/app/clue/dynamic/rlsdynamic"
2、添加机会跟进动态添加类型 服务器地址+端口号 + "/crm/app/opport/dynamic/rlsdynamic"
3、添加联系人跟进动态添加类型 服务器地址+端口号 + "/crm/app/contact/dynamic/rlsdynamic"
代码说明:
1、uexLocation.onChange监听设备位置变化;
2、Android系统使用uexLocation.getAddress(lat, log, 1)获取经纬度对应的具体地址信息;
3、ios系统使用uexLocation.getBaiduFromGoogle(log, lat)获取经纬度对应的具体地址信息;
4、调用uexImage.openBrowser浏览大图;
5、运行dynamicAddViewInstance.load(param, urlType)创建跟进动态。
接口参数: { "objEntityId" : entityId, "objEntityTypeId" : entityTypeId,//02:线索;03:机会;04:联系人 "dynamicContent" : dynamicContent, "dynamicType" : dynamicType, "attachment" : imageArr, "address" : address, "psty" : psty, "pstx" : pstx }
接口地址:
1、添加回复内容接口地址: 1) 线索跟进动态详情页: 服务器地址+端口号 + "/crm/app/clue/word/reply"; 2) 机会跟进动态详情页: 服务器地址+端口号 + "/crm/app/opport/word/reply"; 3) 联系人跟进动态详情页: 服务器地址+端口号 + "/crm/app/contact/word/reply".
2、获取回复列表接口地址: 1) 线索跟进动态详情页: 服务器地址+端口号 + "/crm/app/clue/dynamic/view"; 2)机会跟进动态详情页: 服务器地址+端口号 + "/crm/app/opport/dynamic/view"; 3)联系人跟进动态详情页: 服务器地址+端口号 + "/crm/app/contact/dynamic/view".
代码说明:
运行dynamicInfoViewInstance.load()回复内容;
运行dynamicContentViewInstance.load(dynamicId, openType, 0)获取回复列表。
接口参数:
添加回复内容接口参数: { "objEntityId" : dynamicId, "objEntityTypeId" : "06", "content" : sendContent, "rcvUserId" : rcvUserId }
获取回复列表接口参数: { "objEntityId" : objEntityId, "objEntityTypeId" : "06", "pageNo" : self.pageNo, "pageSize" : 10 }
接口地址:
1、创建客户接口地址: 服务器地址+端口号 + "/crm/app/custom/add"
2、编辑客户接口地址: 服务器地址+端口号 + "/crm/app/custom/edit"
3、客户查重接口地址: 服务器地址+端口号 + "/crm/app/custom/viewcsmcheck"
4、获取客户详情接口地址: 服务器地址+端口号 + "/crm/app/custom/view"
代码说明:
1、进入页面判断p.openType的值,p.openType=”add”为创建客户页面,p.openType=”edit”等于编辑客户页面;
2、运行csmOldInfoView.load(csmId)编辑客户时获取已有客户详情;
3、运行csmCheck.load()判断创建的客户是否已经存在(客户查重);
4、运行csmCreateView.submit()提交创建/编辑客户的数据。
接口参数:
编辑客户时获取已有客户详情的接口参数: { "id":csmId }
判断客户是否已经存在(客户查重)的接口参数: { "csmName":csmName }
接口地址:
1、我负责的客户列表接口地址: 服务器地址+端口号 + "/crm/app/custom/pageBySalesUserId"
2、我下属的客户列表接口地址: 服务器地址+端口号 + "/crm/app/custom/pageSubordinates"
3、全部客户列表接口地址: 服务器地址+端口号 + "/crm/app/custom/pageByParams"
代码说明:进入页面运行csmListViewInstance.load(type)客户列表。
注:type值不同,获取列表不同,0:我负责的客户,1:我下属的客户,2:全部客户.
接口参数:
“我负责的客户”列表的接口参数: { "pageNo":self.pageNo, "pageSize":10, "salesUserId":salesUserId, "level":this.level, "csmStatId":this.csmStatId }
“我下属的客户”列表的接口参数: { "pageNo":self.pageNo, "pageSize":10, "level":this.level, "csmStatId":this.csmStatId }
接口地址:服务器地址+端口号 +"/crm/app/custom/operatelog/page"
代码说明:进入页面运行csmDynListViewInstance.load(type)获取客户跟进动态列表。
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "customId":csmId }
接口地址:服务器地址+端口号 + "/crm/app/opport/pageCusByParams"
代码说明:进入页面运行csmOppListViewInstance.load(type)获取客户机会列表。
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "customId":csmId }
接口地址:服务器地址+端口号 + "/crm/app/custom/contact/pageCusConByParams"
代码说明:进入页面运行csmConListViewInstance.load(type)获取客户联系人列表。
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "customId":csmId }
接口地址:服务器地址+端口号 + "/crm/app/custom/view"
代码说明:进入页面运行customerInfoViewInstance.load(csmId)获取客户详情。
接口参数:{ "id":csmId }
接口地址:服务器地址+端口号 + "/crm/app/opport/add"
代码说明:运行csmCreateOppView.submit()完成创建机会。
接口参数:{ "opptTtl":$("#opptTtl").val(), "vndtAmt":$("#vndtAmt").val(), "remark":$("#remark").val(), "startDate":$("#startDate").html(), "sttlDate":$("#sttlDate").html() }
代码说明:详见联系人创建/编辑(creatContact.html)
接口地址:服务器地址+端口号 +'/crm/app/clue/listStaff'
代码说明:进入页面运行transferPersonListViewInstance.load(param, 0)完成转移客户。
接口参数:{ "staffId" : staffId, "regionId" : region, "tradeId" : profession, "roleType" : 0 }
代码说明:详见线索搜索(search.html)
代码说明:详见跟进动态详情(dynamicInfo.html)
接口地址:
1、获取机会详情接口地址: 服务器地址+端口号 + "/crm/app/opport/view"
2、编辑机会接口地址: 服务器地址+端口号 + "/crm/app/opport/edit"
3、创建机会接口地址: 服务器地址+端口号 + "/crm/app/opport/add"
代码说明:进入页面运行opportViewInstance.load(p)创建/编辑机会。
注:p.open=”add”则flag = 0,创建机会;否则flag = 1编辑机会。
接口参数:
获取机会详情接口参数: { id : opportId }
编辑机会接口参数: { "id":self.id, "opptTtl":opptTtl, "opptStatId":opptStatId, "vndtAmt":vndtAmt, "startDate":startDate, "sttlDate":sttlDate, "dataSource":oppSourceVal, "productType":pTypeVal, "customId":cusId, "remark":remark }
创建机会接口参数: { "opptTtl":opptTtl, "opptStatId":opptStatId, "vndtAmt":vndtAmt, "startDate":startDate, "sttlDate":sttlDate, "dataSource":oppSourceVal, "productType":pTypeVal, "customId":cusId, "contactId":conIdArr.join(), "remark":remark }
接口地址:服务器地址+端口号 + "/crm/app/opport/pageByParams"
代码说明:进入页面运行opportListViewInstance.load(0,openType)获取机会列表。
注:openType=0.
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "salesUserId":salesUserId }
接口地址:
1、获取销售阶段详情(机会列表)接口地址: 服务器地址+端口号 + "/crm/app/opport/pageAppOppAmtGrpStat"
2、获取销售阶段的列表接口地址: 服务器地址+端口号 + "/crm/app/opport/listByParams"
代码说明:
1、uexPicker.loadData()初始化选择年份插件;
2、uexPicker.resultData选择年份插件回调函数;
3、salPhaseInfo()查询销售阶段详情,即 oppInfoViewInstance.load(salesUserId,sttlYear);
4、oppList(opptStatId)查询销售阶段的列表,即 opportListViewInstance.load('',3,opptStatId).
注:根据销售阶段详情(机会列表)接口地址获取的数据需处理得到各销售阶段的机会个数以及销售金额;openType=3。
接口参数:
获取销售阶段详情接口参数: { "salesUserId":salesUserId, "opportYear":sttlYear }
获取销售阶段的列表接口参数: { opptStatId:saleOpptStatId, sttlYear:sttlYear, salesUserId:salesUserId }
接口地址:服务器地址+端口号 + "opport/pageAppOppAmtGrpSttlDate"
代码说明:
1、uexPicker.loadData()初始化选择年份插件;
2、uexPicker.resultData选择年份插件回调函数;
3、selData()获取每月的签单的总预计金额;
4、showDataList(data)根据获取的金额初始化页面。
接口参数:{ "salesUserId":salesUserId, "opportYear":sttlYear }
接口地址:服务器地址+端口号 + "/crm/app/opport/pageByParams"
代码说明:进入页面运行opportListViewInstance.load(type,4)获取该月份的机会列表详情。
注:openType=4.
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "salesUserId":salesUserId, "sttlYM":sttlYM }
接口地址:服务器地址+端口号 + "/crm/app/opport/dynamic/page"
代码说明:进入页面执行csmConListViewInstance.load(clueId, type)函数调用接口获取机会跟进动态列表。
接口参数:{ "objEntityId" : oppId, "objEntityTypeId" : "03", "pageNo" : this.pageNo, "pageSize" : 10 }
接口地址:服务器地址+端口号 + "/crm/app/opport/contact/pageOpportContact"
代码说明:进入页面运行oppConListViewInstance.load(0)获取机会联系人列表。
接口参数:{ "pageNo":self.pageNo, "pageSize":10, "opportId":oppId }
接口地址:服务器地址+端口号 + "/crm/app/opport/view"
代码说明:进入页面运行opportInfoView.load(a)获取机会详细信息。
接口参数:{ "id":oppId }
接口地址:服务器地址+端口号 + '/crm/app/opport/adjust'
代码说明:
1、clueState_content.html运行appcan.window.publish("selPhase",selVal);返回详情页后;
2、opportInfo.html运行opportStateChangeViewObj.changeState(result)更改机会阶段;
注:接口参数中根据isAdjust : '1'判断接口地址
接口参数:{ id : opportId, opptTtl : opptTtl, customId : customId, opptStatId : opptStatId, isAdjust : '1' }
接口地址:
1、获取联系人列表接口地址: 服务器地址+端口号 + "/crm/app/opport/contact/listSelectContact";
2、添加联系人接口地址: 服务器地址+端口号 + '/crm/app/opport/contact/addRelationKey'
代码说明:运行addContactViewObj.submitData()实现添加联系人。
接口参数:
获取联系人列表接口参数: { "customId" : customId, "opportId" : opportId }
添加联系人接口参数: { "ids" : conStr, "opportId" : opportId }
代码说明:详见线索搜索(search.html)
代码说明:详见 创建跟进动态(dynamicAdd.html)
代码说明:详见 跟进动态详情(dynamicInfo.html)
接口地址:
1、创建联系人接口地址: 服务器地址+端口号 + "/crm/app/contact/add"
2、编辑联系人接口地址: 服务器地址+端口号 + "/crm/app/contact/edit"
3、获取联系人详情接口地址: 服务器地址+端口号 + "/crm/app/contact/view"
代码说明:
1、进入页面判断p.openType的值,p.openType=”add”为创建客户页面,p.openType=”edit”等于编辑客户页面;
2、创建联系人:运行creatContactViewInstance.addContact(creatContactViewInstance.conId)提交创建的联系人信息;
3、编辑联系人:
1)运行creatContactViewInstance.loadContactInfo(creatContactViewInstance.conId)获取联系人详情;
2)运行creatContactViewInstance.updateContact(creatContactViewInstance.conId)提交编辑后的联系人信息.
接口参数:
编辑联系人时获取已有联系人详情的接口参数: { "id":conId }
创建/编辑联系人的接口参数: { "contactName" : data.contactName, "sex" : data.sex, "birthDay" : data.birthDay, "department" : data.department, "post" : data.post, "mobile" : data.mobile, "teleNo" : data.teleNo, "mail" : data.mail, "qq" : data.qq, "weChat" : data.weChat, "province" : data.province, "address" : data.address, "postcode" : data.postcode, "customId" : data.customId, "contactTypeId" : data.contactTypeId, "remark" : data.remark, "id" : data.id }
接口地址:
1、我负责的联系人列表接口地址: 服务器地址+端口号 + "/crm/app/contact/listBySubordinates"
2、我下属的联系人列表接口地址: 服务器地址+端口号 + "/crm/app/contact/listConByParams"
3、全部联系人列表接口地址: 服务器地址+端口号 + "/crm/app/contact/pageByParams"
代码说明:进入页面运行contactListViewInstance.load()联系人列表。 注:openType值不同,获取列表不同,0:我负责的联系人,1:我下属的联系人,2:全部联系人.
接口参数:
“我负责的客户”列表的接口参数: { "salesUserId" : salesUserId, "contactTypeId" : self.contactTypeId }
“我下属的客户”列表的接口参数: { "salesUserId" : '', "contactTypeId" : self.contactTypeId }
接口地址:服务器地址+端口号 + "/crm/app/contact/dynamic/page"
代码说明:进入页面执行csmConListViewInstance.load(clueId, type)函数调用接口获取联系人跟进动态列表。
接口参数:{ "objEntityId" : conId, "objEntityTypeId" : "04", "pageNo" : this.pageNo, "pageSize" : 10 }
接口地址:服务器地址+端口号 + "/crm/app/contact/view"
代码说明:运行contactInfoViewInstance.load(conId)获取联系人详情。
接口参:{ "id":conId }
代码说明:详见线索搜索(search.html)
代码说明:详见创建跟进动态(dynamicAdd.html)
代码说明:详见跟进动态详情(dynamicInfo.html)