add.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  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. uoloadDisabled: true,
  94. accessory: true
  95. },
  96. onLoad(options) {
  97. getApp().globalData.Language.getLanguagePackage(this, '新建任务')
  98. let content = {
  99. "sys_taskid": 0,
  100. "ownertable": "sys_task",
  101. "ownerid": options.ownerid || 0,
  102. };
  103. // 详情中进入
  104. if (options.data) {
  105. getApp().globalData.Language.getLanguagePackage(this, '编辑任务')
  106. let data = JSON.parse(options.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. accessory: false,
  150. disabled: false,
  151. form: form.map(v => {
  152. if (data[v.valueName]) v.value = data[v.valueName];
  153. return v
  154. })
  155. })
  156. } else if (options.ownertable) {
  157. content = {
  158. "ownertable": options.ownertable || "sys_task",
  159. "ownerid": options.ownerid || 0
  160. }
  161. this.setData({
  162. synchronization: content
  163. })
  164. } else {
  165. //可修改情况
  166. if (["sys_task", "sat_orderclue", "sa_customers", "sa_project"].includes(content.ownertable)) {
  167. let form = this.data.form,
  168. synchronization = content.ownertable != 'sys_task' ? {
  169. "ownertable": content.ownertable,
  170. "ownerid": content.ownerid,
  171. } : null;
  172. form.splice(1, 0, {
  173. label: "关联应用",
  174. error: false,
  175. errMsg: "",
  176. hint: "",
  177. type: "radio",
  178. value: content.ownertable,
  179. radioList: [{
  180. id: 'sa_customers',
  181. name: '我的客户'
  182. }, {
  183. id: 'sa_project',
  184. name: '项目商机'
  185. }, {
  186. id: 'sat_orderclue',
  187. name: '销售线索'
  188. }, {
  189. id: 'sys_task',
  190. name: '不关联'
  191. }],
  192. valueName: "ownertable", //绑定的字段名称
  193. required: false, //必填
  194. interrupt: true,
  195. disabled: content.ownerid != 0
  196. });
  197. if (content.ownertable != 'sys_task') this.setSelectAppRoute(form, content.ownertable, content.ownerid != 0)
  198. this.setData({
  199. form
  200. })
  201. }
  202. }
  203. this.setData({
  204. content
  205. })
  206. },
  207. /* 打断处理form */
  208. interrupt(e) {
  209. let {
  210. data,
  211. form,
  212. temporary
  213. } = e.detail;
  214. console.log(data, form, temporary)
  215. let obj = null,
  216. index = null;
  217. switch (temporary.item.label) {
  218. case '开始日期':
  219. obj = {
  220. label: "结束日期",
  221. error: false,
  222. errMsg: "",
  223. type: "date",
  224. start: data.value,
  225. value: "",
  226. interrupt: true,
  227. placeholder: "结束日期",
  228. valueName: "endtime",
  229. checking: "base",
  230. required: false
  231. };
  232. let index = form.findIndex(v => v.label == '结束日期');
  233. index == -1 ? form.push(obj) : form[index] = obj;
  234. this.setData({
  235. isReset: false
  236. })
  237. break;
  238. case '结束日期':
  239. index = form.findIndex(v => v.label == '提醒时间');
  240. if (index == -1) form.push({
  241. label: "提醒时间",
  242. error: false,
  243. errMsg: "",
  244. type: "namber",
  245. value: "",
  246. placeholder: "结束时间前几天提醒",
  247. valueName: "remindday",
  248. checking: "base",
  249. required: false
  250. });
  251. break;
  252. case '执行人':
  253. index = form.findIndex(v => v.label == '协助人');
  254. form[index].params.excludeid = data.value[1][0];
  255. if (index != -1 && form[index].value[1]) {
  256. let i = form[index].value[1].findIndex(v => v == data.value[1][0]);
  257. if (i != -1) {
  258. form[index].value[0].splice(i, 1);
  259. form[index].value[1].splice(i, 1);
  260. if (form[index].value[0].length == 0) form[index].value = '';
  261. }
  262. }
  263. temporary.item.value = data.value;
  264. form[temporary.index] = temporary.item;
  265. wx.navigateBack()
  266. break;
  267. case '协助人':
  268. index = form.findIndex(v => v.label == '执行人');
  269. if (index != -1 && form[index].value[1]) {
  270. if (data.value[1].findIndex(v => v == form[index].value[1][0]) != -1) form[index].value = ''
  271. }
  272. temporary.item.value = data.value;
  273. form[temporary.index] = temporary.item;
  274. wx.navigateBack()
  275. break;
  276. case '关联应用':
  277. this.setSelectAppRoute(form, data.value)
  278. this.setData({
  279. synchronization: null
  280. })
  281. break;
  282. case '关联数据':
  283. form[temporary.index].value = data.value;
  284. wx.navigateBack()
  285. this.setData({
  286. synchronization: {
  287. "ownertable": form[temporary.index - 1].value,
  288. "ownerid": data.id[0]
  289. }
  290. })
  291. break;
  292. };
  293. this.setData({
  294. form
  295. })
  296. this.selectComponent("#Form").confirm();
  297. },
  298. startSynchronization() {
  299. console.log("开始同步", this.data.synchronization)
  300. wx.navigateTo({
  301. url: '/packageA/work/synchronization?data=' + JSON.stringify(this.data.synchronization),
  302. });
  303. _Http.selectSync = (item, ownertable) => {
  304. let form = this.selectComponent("#Form").data.form,
  305. index = form.findIndex(v => v.label == '任务内容');
  306. if (index != -1) {
  307. if (ownertable == 'sat_orderclue') {
  308. form[index].value = `${getApp().globalData.Language.getMapText('跟进类型')}:${item.followupmode}\n${getApp().globalData.Language.getMapText('跟进内容')}:${item.content}`;
  309. } else {
  310. form[index].value = `${getApp().globalData.Language.getMapText('跟进类型')}:${item.type}\n${getApp().globalData.Language.getMapText('跟进对象')}:${item.contacts ? item.contacts.join(","):""}\n${item.content}`;
  311. }
  312. }
  313. this.setData({
  314. form
  315. })
  316. wx.navigateBack()
  317. }
  318. },
  319. setSelectAppRoute(form, ownertable, disabled = false) {
  320. let owneridIndex = form.findIndex(v => v.valueName == 'ownerid');
  321. if (ownertable == "sys_task") {
  322. if (owneridIndex != -1) form.splice(owneridIndex, 1);
  323. } else {
  324. let data = {
  325. label: "关联数据",
  326. error: false,
  327. errMsg: "",
  328. type: "route",
  329. url: "",
  330. value: "",
  331. query: "&radio=true",
  332. interrupt: true,
  333. valueName: "ownerid",
  334. checking: "base",
  335. required: true,
  336. disabled
  337. };
  338. switch (ownertable) {
  339. case "sa_project":
  340. data.params = {
  341. "id": 20221020143502,
  342. "content": {
  343. "nochace": true,
  344. "pageNumber": 1,
  345. "pageSize": 20,
  346. "where": {
  347. "condition": ""
  348. },
  349. "type": 1,
  350. "deleted": 0
  351. }
  352. }
  353. data.placeholder = "选择项目商机";
  354. data.url = "/packageA/select/project/select";
  355. break;
  356. case "sa_customers":
  357. data.params = {
  358. "content": {
  359. isExport: 0,
  360. "pageNumber": 1,
  361. "pageSize": 20,
  362. "where": {
  363. "condition": ""
  364. },
  365. "type": 1,
  366. "deleted": 0,
  367. "isend": 0
  368. },
  369. "id": 20221012164402,
  370. }
  371. data.placeholder = "选择我的客户";
  372. data.url = "/packageA/select/setclient/select";
  373. break;
  374. case "sat_orderclue":
  375. data.params = {
  376. "content": {
  377. "pageNumber": 1,
  378. "pageSize": 20,
  379. "where": {
  380. "condition": ""
  381. },
  382. "type": 1
  383. },
  384. "id": 20221101094502,
  385. }
  386. data.placeholder = "选择销售线索";
  387. data.url = "/packageA/select/clue/select";
  388. break;
  389. };
  390. form.splice(2, owneridIndex == -1 ? 0 : 1, data);
  391. }
  392. this.setData({
  393. form
  394. })
  395. },
  396. submit() {
  397. this.setData({
  398. loading: true
  399. })
  400. let content = {
  401. ...this.data.content,
  402. ...this.selectComponent("#Form").submit()
  403. };
  404. content.leaderuserid = content.principal[1][0];
  405. delete(content.principal)
  406. content.team = {
  407. "userids": content.member.length ? content.member[1] : [],
  408. "justuserids": 1
  409. }
  410. delete(content.member)
  411. if (content.ownerid && typeof (content.ownerid) == 'object') content.ownerid = content.ownerid.length == 2 ? content.ownerid[1][0] : "";
  412. if (!content.ownerid) content.ownertable = "";
  413. _Http.basic({
  414. "id": 20221211112101,
  415. content
  416. }).then(res => {
  417. console.log("创建任务成功", res)
  418. wx.showToast({
  419. title: res.code == '1' ? this.data.language['成功的'] || '保存成功' : res.msg,
  420. icon: "none"
  421. });
  422. if (res.code == '1') try {
  423. let attachmentids = this.selectComponent("#Yl_files").getFiles().attachmentids;
  424. if (attachmentids.length) {
  425. this.handleFileLink(attachmentids, 'sys_task', res.data.sys_taskid, res.data)
  426. } else {
  427. setTimeout(() => {
  428. this.changeItem(res.data)
  429. }, 500)
  430. }
  431. } catch (error) {
  432. setTimeout(() => {
  433. this.changeItem(res.data)
  434. }, 500)
  435. }
  436. })
  437. },
  438. changeState({
  439. detail
  440. }) {
  441. this.setData({
  442. uoloadDisabled: detail
  443. })
  444. },
  445. /* 绑定媒体 */
  446. insertImgEdit({
  447. detail
  448. }) {
  449. this.handleFileLink(detail)
  450. },
  451. handleFileLink(attachmentids, ownertable = "temporary", ownerid = 1, data) {
  452. _Http.basic({
  453. "classname": "system.attachment.Attachment",
  454. "method": "createFileLink",
  455. "content": {
  456. ownertable,
  457. ownerid,
  458. usetype: 'default',
  459. attachmentids
  460. }
  461. }).then(res => {
  462. console.log('跟进记录绑定附件', res)
  463. if (res.code != '1') return wx.showToast({
  464. title: res.msg,
  465. icon: "none"
  466. })
  467. if (ownertable == 'temporary') {
  468. this.selectComponent("#Yl_files").handleFiles(res.data)
  469. this.setData({
  470. uoloadDisabled: false
  471. })
  472. } else {
  473. if (res.data.length) data.attinfos = res.data;
  474. this.changeItem(data)
  475. }
  476. })
  477. },
  478. changeItem(data) {
  479. this.setData({
  480. loading: false
  481. })
  482. getCurrentPages().forEach(v => {
  483. if (v.__route__ == 'packageA/work/index') {
  484. let index = v.data.list.findIndex(v => v.sys_taskid == data.sys_taskid);
  485. if (index == -1) {
  486. v.data.list.unshift(data)
  487. v.setData({
  488. list: v.data.list,
  489. "content.total": v.data.content.total + 1
  490. })
  491. } else {
  492. v.setData({
  493. [`list[${index}]`]: data
  494. })
  495. }
  496. }
  497. });
  498. let pages = getCurrentPages(),
  499. page = pages[pages.length - 2];
  500. if (page.__route__ == 'packageA/work/index') {
  501. wx.redirectTo({
  502. url: '/packageA/work/detail?id=' + data.sys_taskid,
  503. fail(err) {
  504. console.log(err)
  505. }
  506. })
  507. } else if (page.__route__ == 'packageA/work/detail') {
  508. wx.navigateBack();
  509. page.getDetail();
  510. } else {
  511. page.getTags && page.getTags();
  512. let p = page.selectComponent("#Work");
  513. if (p) p.getList(0, true);
  514. wx.navigateBack();
  515. }
  516. },
  517. reset() {
  518. let form = this.data.form;
  519. let index = form.findIndex(v => v.label == '开始日期');
  520. form[index].value = "";
  521. form.splice(index + 1, 2);
  522. this.setData({
  523. isReset: true,
  524. disabled: true,
  525. form
  526. });
  527. wx.showToast({
  528. title: this.data.language['重置成功'] || '重置成功',
  529. icon: "none"
  530. })
  531. },
  532. // 是否显示全部
  533. onChange({
  534. detail
  535. }) {
  536. this.setData({
  537. showAll: detail
  538. })
  539. },
  540. /* 表单必填项是否完成 */
  541. onConfirm({
  542. detail
  543. }) {
  544. this.setData({
  545. disabled: detail
  546. })
  547. }
  548. })