detail.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. const _Http = getApp().globalData.http;
  2. Page({
  3. data: {
  4. isLeader: false, //是否为负责人
  5. tabsActive: 0, //tabs 选中项
  6. sat_orderclueid: "",
  7. detail: '',
  8. siteShow: false,
  9. },
  10. onLoad(options) {
  11. const appAuth = wx.getStorageSync('auth').worderclue_public;
  12. let tabsList = [{
  13. label: "详细信息",
  14. icon: "icon-tabxiangxixinxi1"
  15. }, {
  16. label: "跟进记录",
  17. icon: "icon-tabgenjinjilu"
  18. }, {
  19. label: "来源线索",
  20. icon: "icon-tabxiansuo",
  21. model: "#Clue"
  22. }, {
  23. label: "操作",
  24. icon: "icon-tabcaozuojilu1"
  25. }, {
  26. label: "跟进动态",
  27. icon: "icon-tabgenjinjilu"
  28. }]
  29. if (appAuth.istask) tabsList.push({
  30. label: "任务",
  31. icon: "icon-tabrenwu",
  32. model: "#Work"
  33. })
  34. tabsList.push({
  35. label: "附件",
  36. icon: "icon-tabfujian1"
  37. })
  38. this.setData({
  39. sat_orderclueid: options.sat_orderclueid || options.id,
  40. isAdmin: appAuth.options.some(v => v == "admin"), //是否具有管理权限
  41. tabsList
  42. });
  43. this.getDetail();
  44. },
  45. getDetail() {
  46. _Http.basic({
  47. "classname": "webmanage.saletool.orderclue.publicclue.PublicClue",
  48. "method": "selectDetail",
  49. "version": 1,
  50. "content": {
  51. "nocache": true,
  52. "sat_orderclueid": this.data.sat_orderclueid
  53. },
  54. }).then(res => {
  55. console.log("线索详情", res)
  56. if (res.msg != '成功') return wx.showToast({
  57. title: res.msg,
  58. icon: "none"
  59. });
  60. this.setData({
  61. isLeader: res.data.createuserid == wx.getStorageSync('userMsg').userid,
  62. detail: res.data,
  63. briefs: [{
  64. label: "联系人",
  65. value: res.data.name
  66. }, {
  67. label: "手机号",
  68. value: res.data.phonenumber
  69. }, {
  70. label: "市场活动",
  71. value: res.data.campaign_name
  72. }, {
  73. label: "领域",
  74. value: res.data.tradefield
  75. }, {
  76. label: '负责人',
  77. value: res.data.leader && res.data.leader.length > 0 ? res.data.leader[0].name : ''
  78. },
  79. {
  80. label: '分配状态',
  81. value: res.data.allocationstatus
  82. },
  83. {
  84. label: '跟进状态',
  85. value: res.data.status
  86. },
  87. {
  88. label: '跟进次数',
  89. value: res.data.followcount || '0'
  90. },
  91. ],
  92. list1: [{
  93. label: "客户(企业)",
  94. value: res.data.enterprisename_customer
  95. }, {
  96. label: "联系人",
  97. value: res.data.name
  98. }, {
  99. label: "联系角色",
  100. value: res.data.contactsrole
  101. }, {
  102. label: "手机号码",
  103. value: res.data.phonenumber
  104. }, {
  105. label: "微信",
  106. value: res.data.wechatnum
  107. }, {
  108. label: "省市县",
  109. value: res.data.province ? res.data.province + res.data.city + res.data.county : ''
  110. }, {
  111. label: "地址",
  112. value: res.data.address
  113. }, {
  114. label: "项目名称",
  115. value: res.data.projectname
  116. }, {
  117. label: "项目规模",
  118. value: res.data.scale ? res.data.scale + res.data.unitname : ""
  119. }, {
  120. label: "总投资额(万元)",
  121. value: res.data.totalinvestment
  122. }, {
  123. label: "造价(万元)",
  124. value: res.data.costofconstruction
  125. }, {
  126. label: "预计开工时间",
  127. value: res.data.begdate_due
  128. }, {
  129. label: "预计完工时间",
  130. value: res.data.enddate_due
  131. }, {
  132. label: "市场活动",
  133. value: res.data.campaign_name
  134. }, {
  135. label: "领域",
  136. value: res.data.tradefield
  137. }, {
  138. label: "设计院",
  139. value: res.data.institute
  140. }, {
  141. label: "设计师",
  142. value: res.data.designer
  143. }, {
  144. label: "关联项目",
  145. value: res.data.projectname1
  146. }, {
  147. label: "来源",
  148. value: res.data.cluesource
  149. }, {
  150. label: "线索概况",
  151. value: res.data.notes
  152. }, {
  153. label: '所属业务员',
  154. value: res.data.salename
  155. }, {
  156. label: '负责人',
  157. value: res.data.leader && res.data.leader.length > 0 ? res.data.leader[0].name : ''
  158. }, {
  159. label: '上图员',
  160. value: res.data.uppictured
  161. }, {
  162. label: '分配状态',
  163. value: res.data.allocationstatus
  164. }, {
  165. label: '跟进状态',
  166. value: res.data.status
  167. }],
  168. list2: [{
  169. label: "创建人",
  170. value: res.data.createBy
  171. }, {
  172. label: "创建时间",
  173. value: res.data.createDate
  174. }, {
  175. label: "分配人",
  176. value: res.data.assignedBy
  177. }, {
  178. label: "分配时间",
  179. value: res.data.assignedDate
  180. }, {
  181. label: "最近跟进人",
  182. value: res.data.followBy
  183. }, {
  184. label: "最近跟进时间",
  185. value: res.data.followDate
  186. }, {
  187. label: "最近编辑人",
  188. value: res.data.editBy
  189. }, {
  190. label: "最近编辑时间",
  191. value: res.data.editDate
  192. }, {
  193. label: "无效原因",
  194. value: res.data.invalidreason
  195. }, {
  196. label: "作废原因",
  197. value: res.data.deletereason
  198. }, {
  199. label: "跟进次数",
  200. value: res.data.followcount
  201. }]
  202. });
  203. /* 更新列表中状态 */
  204. let page = getCurrentPages().find(v => v.__route__ == 'packageA/publicClue/index');
  205. if (page) {
  206. let index = page.data.list.findIndex(v => v.sat_orderclueid == res.data.sat_orderclueid);
  207. if (index != -1) page.setData({
  208. [`list[${index}].status`]: res.data.status
  209. })
  210. }
  211. this.setTabbarList(res.data.status)
  212. this.getTags();
  213. this.partialRenewal();
  214. })
  215. },
  216. setTabbarList(status) {
  217. let tabbarList = [];
  218. if (this.data.isAdmin) {
  219. if (this.data.detail.isprivate == 0 && this.data.detail.allocationstatus == '待分配') tabbarList.push({
  220. icon: "icon-zhuanyi",
  221. label: "分配"
  222. })
  223. tabbarList.push({
  224. icon: "icon-dibu-jieshu",
  225. label: "删除"
  226. })
  227. }
  228. if (status == '待跟进') tabbarList.unshift({
  229. icon: "icon-bianji",
  230. label: "编辑"
  231. })
  232. if (status == '已过期' && wx.getStorageSync('auth').worderclue_public.options.some(v => v == "recover")) tabbarList.unshift({
  233. icon: "icon-dibu-chehui",
  234. label: "恢复"
  235. })
  236. if (wx.getStorageSync('auth').worderclue_public.options.some(v => v == "shiftSite")) {
  237. tabbarList.unshift({
  238. icon: "icon-CRM",
  239. label: "转站点"
  240. })
  241. this.setData({
  242. siteShow: true
  243. })
  244. }
  245. this.setData({
  246. tabbarList
  247. })
  248. },
  249. //tabs 切换
  250. tabsChange({
  251. detail
  252. }) {
  253. this.setData({
  254. tabsActive: detail
  255. });
  256. this.partialRenewal();
  257. },
  258. //更新标签
  259. getTags() {
  260. this.selectComponent("#Tags").getTags();
  261. },
  262. //局部数据更新 tabs
  263. partialRenewal(init = false) {
  264. let id = this.data.detail.sat_orderclueid;
  265. let model = '';
  266. let name = this.data.tabsList[this.data.tabsActive].label;
  267. switch (name) {
  268. case "任务":
  269. model = "#Work"
  270. break;
  271. case "跟进记录":
  272. model = "#follow"
  273. break;
  274. case "来源线索":
  275. model = "#Clue"
  276. break;
  277. case "操作":
  278. model = "#Record"
  279. break;
  280. case "跟进动态":
  281. model = "#Trace"
  282. break;
  283. case "附件":
  284. model = "#Files"
  285. break;
  286. };
  287. if (model) {
  288. // 确定好模块ID total = null 是第一次加载 加载数据
  289. // init是新增或修改需要清数据
  290. let Component = this.selectComponent(model);
  291. const {
  292. total,
  293. pageNumber,
  294. pageTotal
  295. } = Component.data.content;
  296. if (total == null || init) {
  297. Component.getList(id, init);
  298. } else if (pageNumber <= pageTotal) {
  299. Component.getList(id, false);
  300. } else {
  301. //用来判断 在搜索页面修改,与tabs选项不一致 但是切换到该选项 重置数据
  302. }
  303. }
  304. },
  305. onReachBottom() {
  306. this.partialRenewal();
  307. },
  308. //详情按钮回调
  309. tabbarOnClick({
  310. detail
  311. }) {
  312. let data = this.data.detail,
  313. that = this;
  314. switch (detail.label) {
  315. case "编辑":
  316. wx.navigateTo({
  317. url: `/packageA/publicClue/addClue?rowData=${JSON.stringify(this.data.detail)}`,
  318. })
  319. break;
  320. case "分配":
  321. wx.navigateTo({
  322. url: `/packageA/publicClue/distribution?data=${JSON.stringify(this.data.detail)}`,
  323. })
  324. break;
  325. case "恢复":
  326. wx.showModal({
  327. title: '提示',
  328. content: `是否确定恢复该线索`,
  329. complete: (res) => {
  330. if (res.confirm) _Http.basic({
  331. "id": "20230907142004",
  332. "content": {
  333. "sat_orderclueid": data.sat_orderclueid
  334. }
  335. }).then(res => {
  336. console.log("恢复线索", res)
  337. wx.showToast({
  338. title: res.msg == '成功' ? "恢复成功" : res.msg,
  339. icon: "none"
  340. });
  341. that.getDetail();
  342. })
  343. }
  344. })
  345. break;
  346. case "转站点":
  347. that.selectComponent("#ShiftSite").showSite()
  348. break;
  349. case "删除":
  350. wx.showModal({
  351. title: '提示',
  352. content: `是否确认删除该线索?`,
  353. complete: ({
  354. confirm
  355. }) => {
  356. if (confirm) _Http.basic({
  357. "id": 20221101100502,
  358. "content": {
  359. "sat_orderclueids": [this.data.detail.sat_orderclueid]
  360. }
  361. }).then(res => {
  362. wx.showToast({
  363. title: res.msg == '成功' ? `操作成功` : res.msg,
  364. icon: "none"
  365. });
  366. setTimeout(() => {
  367. wx.navigateBack()
  368. getCurrentPages().forEach(v => {
  369. if (v.__route__ == "packageA/publicClue/index") {
  370. v.getList(true)
  371. }
  372. })
  373. }, 300)
  374. })
  375. }
  376. })
  377. break;
  378. case "撤回":
  379. wx.showModal({
  380. title: '提示',
  381. content: `是否确认撤回该线索?`,
  382. complete: ({
  383. confirm
  384. }) => {
  385. if (confirm) _Http.basic({
  386. classname: "webmanage.saletool.orderclue.publicclue.PublicClue",
  387. method: "revoke",
  388. "content": {
  389. "sat_orderclueid": this.data.detail.sat_orderclueid
  390. }
  391. }).then(res => {
  392. setTimeout(() => {
  393. wx.showToast({
  394. title: res.msg == '成功' ? `操作成功` : res.msg,
  395. icon: "none"
  396. });
  397. }, 1000)
  398. if (res.msg == '成功') this.getDetail()
  399. })
  400. }
  401. })
  402. break;
  403. }
  404. },
  405. onUnload() {
  406. const page = getCurrentPages().find(v => v.__route__ == 'packageA/publicClue/index');
  407. if (!page) return;
  408. let content = JSON.parse(JSON.stringify(page.data.content));
  409. content.pageSize = (content.pageNumber - 1) * content.pageSize;
  410. content.pageNumber = 1;
  411. _Http.basic({
  412. id: '20221101094402',
  413. content
  414. }).then(res => {
  415. console.log("更新公海线索列表", res);
  416. if (res.msg == '成功') {
  417. page.setData({
  418. list: res.data,
  419. "content.total": res.total
  420. })
  421. page.getTags()
  422. }
  423. })
  424. }
  425. })