add.js 19 KB

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