add.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. const _Http = getApp().globalData.http,
  2. getTime = require("../../utils/getTime");
  3. Page({
  4. data: {
  5. loading: false,
  6. isReset: true,
  7. showAll: false,
  8. form: [{
  9. label: "任务标题",
  10. error: false,
  11. errMsg: "",
  12. type: "textarea",
  13. value: "",
  14. placeholder: "请输入0/40字",
  15. valueName: "title",
  16. checking: "base",
  17. required: true,
  18. maxlength: '40'
  19. }, {
  20. label: "任务内容",
  21. error: false,
  22. errMsg: "",
  23. type: "textarea",
  24. value: "",
  25. placeholder: "",
  26. valueName: "remarks",
  27. checking: "base",
  28. required: false,
  29. slot: "synchronization"
  30. }, {
  31. label: "执行人",
  32. error: false,
  33. errMsg: "",
  34. type: "route",
  35. url: "/packageA/select/contacts/select",
  36. value: "",
  37. params: {
  38. "id": "20221018122201",
  39. "content": {
  40. "ownertable": "sys_task",
  41. "ownerid": 0,
  42. "where": {
  43. "condition": "",
  44. "withoutselect": 1
  45. }
  46. }
  47. },
  48. query: "&radio=true&idname=userid",
  49. interrupt: true,
  50. placeholder: "选择任务执行人",
  51. valueName: "principal",
  52. checking: "base",
  53. required: true
  54. }, {
  55. label: "协助人",
  56. error: false,
  57. errMsg: "",
  58. type: "route",
  59. url: "/packageA/select/contacts/select",
  60. value: "",
  61. params: {
  62. "id": "20221018122201",
  63. "content": {
  64. "ownertable": "sys_task",
  65. "ownerid": 0,
  66. "where": {
  67. "condition": "",
  68. "withoutselect": 1
  69. }
  70. }
  71. },
  72. query: "&idname=userid",
  73. interrupt: true,
  74. placeholder: "选择任务协助人",
  75. valueName: "member",
  76. checking: "base",
  77. required: false
  78. }, {
  79. label: "开始日期",
  80. error: false,
  81. errMsg: "",
  82. type: "date",
  83. start: getTime.formatTime(new Date(), '-').split(' ')[0],
  84. value: "",
  85. placeholder: "开始日期",
  86. interrupt: true,
  87. valueName: "starttime",
  88. checking: "base",
  89. required: true
  90. }],
  91. synchronization: null, //同步任务内容参数
  92. disabled: true
  93. },
  94. onLoad(options) {
  95. let content = {
  96. "sys_taskid": 0,
  97. "ownertable": "sys_task",
  98. "ownerid": options.ownerid || 0,
  99. };
  100. // 详情中进入
  101. if (options.data) {
  102. wx.setNavigationBarTitle({
  103. title: '编辑任务',
  104. })
  105. let data = JSON.parse(options.data);
  106. console.log(data)
  107. if (options.group) {
  108. let group = JSON.parse(options.group)
  109. let leader = group.findIndex(v => v.userid == data.leader[0].userid);
  110. if (leader != -1) {
  111. data.principal = [group[leader].name, [group[leader].userid]]
  112. group.splice(leader, 1)
  113. data.member = [group.map(s => s.name), group.map(s => s.userid - 0)]
  114. }
  115. }
  116. data.starttime = data.starttime.split(" ")[0]
  117. data.endtime = data.endtime ? data.endtime.split(" ")[0] : ""
  118. let form = this.data.form.concat([{
  119. label: "结束日期",
  120. error: false,
  121. errMsg: "",
  122. type: "date",
  123. start: data.value,
  124. value: "",
  125. interrupt: true,
  126. placeholder: "结束日期",
  127. valueName: "endtime",
  128. checking: "base",
  129. required: false
  130. }, {
  131. label: "提醒时间",
  132. error: false,
  133. errMsg: "",
  134. type: "namber",
  135. value: "",
  136. placeholder: "结束时间前几天提醒",
  137. valueName: "remindday",
  138. checking: "base",
  139. required: false
  140. }]);
  141. content = {
  142. "sys_taskid": data.sys_taskid,
  143. "ownertable": data.ownertable || "sys_task",
  144. "ownerid": data.ownerid || 0,
  145. }
  146. this.setData({
  147. content,
  148. isReset: false,
  149. disabled: false,
  150. form: form.map(v => {
  151. if (data[v.valueName]) v.value = data[v.valueName];
  152. return v
  153. })
  154. })
  155. } else if (options.ownertable) {
  156. content = {
  157. "ownertable": options.ownertable || "sys_task",
  158. "ownerid": options.ownerid || 0
  159. }
  160. this.setData({
  161. synchronization: content
  162. })
  163. } else {
  164. //可修改情况
  165. if (["sys_task", "sat_orderclue", "sa_customers", "sa_project"].includes(content.ownertable)) {
  166. let form = this.data.form,
  167. synchronization = content.ownertable != 'sys_task' ? {
  168. "ownertable": content.ownertable,
  169. "ownerid": content.ownerid,
  170. } : null;
  171. form.splice(1, 0, {
  172. label: "关联应用",
  173. error: false,
  174. errMsg: "",
  175. hint: "",
  176. type: "radio",
  177. value: content.ownertable,
  178. radioList: [{
  179. id: 'sa_customers',
  180. name: '我的客户'
  181. }, {
  182. id: 'sa_project',
  183. name: '项目商机'
  184. }, {
  185. id: 'sat_orderclue',
  186. name: '销售线索'
  187. }, {
  188. id: 'sys_task',
  189. name: '不关联'
  190. }],
  191. valueName: "ownertable", //绑定的字段名称
  192. required: false, //必填
  193. interrupt: true,
  194. disabled: content.ownerid != 0
  195. });
  196. if (content.ownertable != 'sys_task') this.setSelectAppRoute(form, content.ownertable, content.ownerid != 0)
  197. this.setData({
  198. form
  199. })
  200. }
  201. }
  202. this.setData({
  203. content
  204. })
  205. },
  206. /* 打断处理form */
  207. interrupt(e) {
  208. let {
  209. data,
  210. form,
  211. temporary
  212. } = e.detail;
  213. console.log(data, form, temporary)
  214. let obj = null,
  215. index = null;
  216. switch (temporary.item.label) {
  217. case '开始日期':
  218. obj = {
  219. label: "结束日期",
  220. error: false,
  221. errMsg: "",
  222. type: "date",
  223. start: data.value,
  224. value: "",
  225. interrupt: true,
  226. placeholder: "结束日期",
  227. valueName: "endtime",
  228. checking: "base",
  229. required: false
  230. };
  231. let index = form.findIndex(v => v.label == '结束日期');
  232. index == -1 ? form.push(obj) : form[index] = obj;
  233. this.setData({
  234. isReset: false
  235. })
  236. break;
  237. case '结束日期':
  238. index = form.findIndex(v => v.label == '提醒时间');
  239. if (index == -1) form.push({
  240. label: "提醒时间",
  241. error: false,
  242. errMsg: "",
  243. type: "namber",
  244. value: "",
  245. placeholder: "结束时间前几天提醒",
  246. valueName: "remindday",
  247. checking: "base",
  248. required: false
  249. });
  250. break;
  251. case '执行人':
  252. index = form.findIndex(v => v.label == '协助人');
  253. form[index].params.excludeid = data.value[1][0];
  254. if (index != -1 && form[index].value[1]) {
  255. let i = form[index].value[1].findIndex(v => v == data.value[1][0]);
  256. if (i != -1) {
  257. form[index].value[0].splice(i, 1);
  258. form[index].value[1].splice(i, 1);
  259. if (form[index].value[0].length == 0) form[index].value = '';
  260. }
  261. }
  262. temporary.item.value = data.value;
  263. form[temporary.index] = temporary.item;
  264. wx.navigateBack()
  265. break;
  266. case '协助人':
  267. index = form.findIndex(v => v.label == '执行人');
  268. if (index != -1 && form[index].value[1]) {
  269. if (data.value[1].findIndex(v => v == form[index].value[1][0]) != -1) form[index].value = ''
  270. }
  271. temporary.item.value = data.value;
  272. form[temporary.index] = temporary.item;
  273. wx.navigateBack()
  274. break;
  275. case '关联应用':
  276. this.setSelectAppRoute(form, data.value)
  277. this.setData({
  278. synchronization: null
  279. })
  280. break;
  281. case '关联数据':
  282. form[temporary.index].value = data.value;
  283. wx.navigateBack()
  284. this.setData({
  285. synchronization: {
  286. "ownertable": form[temporary.index - 1].value,
  287. "ownerid": data.id[0]
  288. }
  289. })
  290. break;
  291. };
  292. this.setData({
  293. form
  294. })
  295. this.selectComponent("#Form").confirm();
  296. },
  297. startSynchronization() {
  298. console.log("开始同步", this.data.synchronization)
  299. wx.navigateTo({
  300. url: '/packageA/work/synchronization?data=' + JSON.stringify(this.data.synchronization),
  301. });
  302. _Http.selectSync = (item, ownertable) => {
  303. let form = this.selectComponent("#Form").data.form,
  304. index = form.findIndex(v => v.label == '任务内容');
  305. if (index != -1) {
  306. if (ownertable == 'sat_orderclue') {
  307. form[index].value = `跟进类型:${item.followupmode}\n跟进内容:${item.content}`;
  308. } else {
  309. form[index].value = `跟进类型:${item.type}\n跟进对象:${item.contacts ? item.contacts.join(","):""}\n${item.content}`;
  310. }
  311. }
  312. this.setData({
  313. form
  314. })
  315. wx.navigateBack()
  316. }
  317. },
  318. setSelectAppRoute(form, ownertable, disabled = false) {
  319. let owneridIndex = form.findIndex(v => v.valueName == 'ownerid');
  320. if (ownertable == "sys_task") {
  321. if (owneridIndex != -1) form.splice(owneridIndex, 1);
  322. } else {
  323. let data = {
  324. label: "关联数据",
  325. error: false,
  326. errMsg: "",
  327. type: "route",
  328. url: "",
  329. value: "",
  330. query: "&radio=true",
  331. interrupt: true,
  332. valueName: "ownerid",
  333. checking: "base",
  334. required: true,
  335. disabled
  336. };
  337. switch (ownertable) {
  338. case "sa_project":
  339. data.params = {
  340. "id": 20221020143502,
  341. "content": {
  342. "nochace": true,
  343. "pageNumber": 1,
  344. "pageSize": 20,
  345. "where": {
  346. "condition": ""
  347. },
  348. "type": 1,
  349. "deleted": 0
  350. }
  351. }
  352. data.placeholder = "选择项目商机";
  353. data.url = "/packageA/select/project/select";
  354. break;
  355. case "sa_customers":
  356. data.params = {
  357. "content": {
  358. isExport: 0,
  359. "pageNumber": 1,
  360. "pageSize": 20,
  361. "where": {
  362. "condition": ""
  363. },
  364. "type": 1,
  365. "deleted": 0,
  366. "isend": 0
  367. },
  368. "id": 20221012164402,
  369. }
  370. data.placeholder = "选择我的客户";
  371. data.url = "/packageA/select/setclient/select";
  372. break;
  373. case "sat_orderclue":
  374. data.params = {
  375. "content": {
  376. "pageNumber": 1,
  377. "pageSize": 20,
  378. "where": {
  379. "condition": ""
  380. },
  381. "type": 1
  382. },
  383. "id": 20221101094502,
  384. }
  385. data.placeholder = "选择销售线索";
  386. data.url = "/packageA/select/clue/select";
  387. break;
  388. };
  389. form.splice(2, owneridIndex == -1 ? 0 : 1, data);
  390. }
  391. this.setData({
  392. form
  393. })
  394. },
  395. submit() {
  396. this.setData({
  397. loading: true
  398. })
  399. let content = {
  400. ...this.data.content,
  401. ...this.selectComponent("#Form").submit()
  402. };
  403. content.leaderuserid = content.principal[1][0];
  404. delete(content.principal)
  405. content.team = {
  406. "userids": content.member.length ? content.member[1] : [],
  407. "justuserids": 1
  408. }
  409. delete(content.member)
  410. if (content.ownerid && typeof (content.ownerid) == 'object') content.ownerid = content.ownerid.length == 2 ? content.ownerid[1][0] : "";
  411. if (!content.ownerid) content.ownertable = "";
  412. _Http.basic({
  413. "id": 20221211112101,
  414. content
  415. }).then(res => {
  416. console.log("创建任务成功", res)
  417. this.setData({
  418. loading: false
  419. })
  420. wx.showToast({
  421. title: res.msg == '成功' ? "保存成功" : res.msg,
  422. icon: "none"
  423. });
  424. /* _Http.basic({
  425. "id": 20220930103601,
  426. "content": {
  427. "ownertable": "sys_task",
  428. "ownerid": res.data.sys_taskid,
  429. }
  430. }, false).then(e => {
  431. console.log("设置团队", e)
  432. }) */
  433. if (res.msg == '成功') setTimeout(() => {
  434. getCurrentPages().forEach(v => {
  435. if (v.__route__ == 'packageA/work/index') {
  436. let index = v.data.list.findIndex(v => v.sys_taskid == res.data.sys_taskid);
  437. if (index == -1) {
  438. v.data.list.unshift(res.data)
  439. v.setData({
  440. list: v.data.list,
  441. "content.total": v.data.content.total + 1
  442. })
  443. } else {
  444. v.setData({
  445. [`list[${index}]`]: res.data
  446. })
  447. }
  448. }
  449. });
  450. let pages = getCurrentPages(),
  451. page = pages[pages.length - 2];
  452. if (page.__route__ == 'packageA/work/index') {
  453. wx.redirectTo({
  454. url: '/packageA/work/detail?id=' + res.data.sys_taskid,
  455. fail(err) {
  456. console.log(err)
  457. }
  458. })
  459. } else if (page.__route__ == 'packageA/work/detail') {
  460. wx.navigateBack();
  461. page.getDetail();
  462. } else {
  463. page.getTags && page.getTags();
  464. let p = page.selectComponent("#Work");
  465. if (p) p.getList(0, true);
  466. wx.navigateBack();
  467. }
  468. }, 500);
  469. })
  470. },
  471. reset() {
  472. let form = this.data.form;
  473. let index = form.findIndex(v => v.label == '开始日期');
  474. form[index].value = "";
  475. form.splice(index + 1, 2);
  476. this.setData({
  477. isReset: true,
  478. disabled: true,
  479. form
  480. });
  481. wx.showToast({
  482. title: '重置成功',
  483. icon: "none"
  484. })
  485. },
  486. // 是否显示全部
  487. onChange({
  488. detail
  489. }) {
  490. this.setData({
  491. showAll: detail
  492. })
  493. },
  494. /* 表单必填项是否完成 */
  495. onConfirm({
  496. detail
  497. }) {
  498. this.setData({
  499. disabled: detail
  500. })
  501. }
  502. })