jk_B.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. var app = getApp()
  2. var that;
  3. var animation;
  4. Page({
  5. data: {
  6. users: [],
  7. items: [],
  8. animationInfo: '',
  9. isShowType: '',//是显示选择规则还是显示选择分类
  10. activeIndex: '',
  11. isArr: ['奖', '扣'],
  12. reviewerObj: [],//默认的审批人
  13. disabled: false,
  14. employeeList: [],//人员列表
  15. superior_list: [],//领导人员
  16. type: 'B',
  17. isGzType: 'BF',
  18. defaultRuleId: '',
  19. },
  20. onLoad(data) {
  21. that = this;
  22. this.setData({
  23. type: data.type,
  24. isGzType: data.type == "B" ? "BF" : "AF",
  25. items: [{//录入选项列表
  26. checked: true,//判断是否开启指定规则
  27. rule_id: '',//积分分类id
  28. rule_id2: '',
  29. rule_name: '',//积分分类名称
  30. item_id: 0,//积分细则id 不选可以为0
  31. point: '',//录入积分可为正负值,不能为0(细则)
  32. point2: '',//录入积分可为正负值,不能为0(分类)
  33. remark: '',//备注
  34. event_time: app.globalData.day,//事件时间
  35. pt_id: '',//积分种类id
  36. reviewer_id: '',//审核人ID
  37. revieweName: '',//审批人姓名(非传)
  38. files: '',//附件数组列表
  39. isArrindex: true,//奖扣索引(默认奖)(细则)
  40. isArrindex2: true,//奖扣索引(默认奖)(分类)
  41. selectRule: '',//选择的规则
  42. }],
  43. })
  44. if (data.type == "B") {
  45. dd.setNavigationBar({ title: "奖扣B分" });
  46. } else {
  47. dd.setNavigationBar({ title: "奖扣A分" });
  48. }
  49. },
  50. onShow() {
  51. animation = dd.createAnimation({
  52. duration: 200,
  53. timeFunction: "linear",
  54. });
  55. },
  56. //显示图片
  57. showImg(e) {
  58. var index = e.target.dataset.index;
  59. var item = e.target.dataset.item
  60. dd.previewImage({
  61. current: index,
  62. urls: item
  63. });
  64. },
  65. //选择奖还是扣(细则)
  66. bindPickerChange(e) {
  67. var index = e.target.dataset.index;
  68. var isArrindex = `items[${index}].isArrindex`;
  69. var isTrue = that.data.items[index].isArrindex
  70. this.setData({
  71. [isArrindex]: !isTrue,
  72. });
  73. },
  74. //选择奖还是扣(分类)
  75. bindPickerChange2(e) {
  76. var index = e.target.dataset.index;
  77. var isArrindex2 = `items[${index}].isArrindex2`;
  78. var isTrue = that.data.items[index].isArrindex2
  79. this.setData({
  80. [isArrindex2]: !isTrue,
  81. });
  82. },
  83. //关闭规则
  84. onClose() {
  85. animation.translateY(1200).step();
  86. that.setData({
  87. animationInfo: animation.export()
  88. });
  89. that.setData({ isShowType: '' });
  90. },
  91. //选择弹窗
  92. openSelect(e) {
  93. var num = e.target.dataset.num;
  94. var userData = this.data.users;
  95. var superior_list = this.data.superior_list;
  96. if (num == 4) {
  97. if (userData.length == 0) {
  98. this.showToast('请先选择奖扣对象')
  99. return;
  100. }
  101. if (superior_list.length == 0) {
  102. this.showToast('您没有审批人,请联系管理员')
  103. return;
  104. }
  105. }
  106. that.setData({ activeIndex: '' });
  107. if (e.target.dataset.ruleId) {
  108. that.setData({ defaultRuleId: e.target.dataset.ruleId });
  109. }
  110. if (e.target.dataset.item) {
  111. if (e.target.dataset.item.id) {
  112. that.setData({ reviewerObj: [e.target.dataset.item] });
  113. } else {
  114. that.setData({ reviewerObj: [] });
  115. }
  116. }
  117. that.setData({
  118. isShowType: num,
  119. activeIndex: e.target.dataset.index,
  120. });
  121. animation.translateY(0).step();
  122. that.setData({
  123. animationInfo: animation.export()
  124. });
  125. },
  126. //删除图片
  127. deteleImg(e) {
  128. var { itemIndx, index } = e.target.dataset;
  129. var files = that.data.items[itemIndx].files;//获取itemS集合中对应的files
  130. var files_box = `items[${itemIndx}].files`;//
  131. app.globalData.arrRemoveObj(files, files[index]);
  132. that.setData({
  133. [files_box]: files
  134. });
  135. },
  136. //图片选择
  137. openImg(e) {
  138. var index2 = e.target.dataset.index;
  139. var files = that.data.items[index2].files;
  140. if (files.length >= 3) {
  141. app.globalData.showToast("只能上传三张");
  142. return false;
  143. }
  144. dd.chooseImage({
  145. count: 1,
  146. success: (res) => {
  147. that.postImg(res.filePaths[0], index2);
  148. },
  149. });
  150. },
  151. postImg(img_url, index) {
  152. var files_box = `items[${index}].files`;
  153. var files = this.data.items[index].files;
  154. dd.httpRequest({
  155. url: app.globalData.imgHttpUrl,
  156. method: 'POST',
  157. data: {
  158. md5: that.random_string(32),
  159. 'name': app.globalData.day
  160. },
  161. success: function (res) {
  162. if (app.globalData.userData.site_id) {
  163. var key = 'intesys/dd/' + app.globalData.userData.site_id + "/" + app.globalData.day + '/' + that.random_string(32) + '.png';
  164. } else {
  165. var key = 'intesys/dd/' + app.globalData.day + '/' + that.random_string(32) + '.png';
  166. }
  167. var obj = res.data.data;
  168. dd.uploadFile({
  169. url: app.globalData.ALIOSS_URL,
  170. fileType: 'image',
  171. fileName: 'file',
  172. filePath: img_url,
  173. formData: {
  174. key: key,
  175. policy: obj.policy,
  176. OSSAccessKeyId: obj.accessid,
  177. success_action_status: 200,
  178. signature: obj.signature
  179. },
  180. success: (res) => {
  181. if (res.statusCode == 200) {
  182. if (files.length > 0) {
  183. files.push('http://cdn.intesys.g107.com/' + key)
  184. } else {
  185. files = ['http://cdn.intesys.g107.com/' + key];
  186. }
  187. that.setData({
  188. [files_box]: files
  189. });
  190. app.globalData.showToast("已上传");
  191. }
  192. },
  193. fail: (err) => {
  194. console.log(err);
  195. }
  196. });
  197. },
  198. fail: function (res) {
  199. app.globalData.showToast("上传失败");
  200. }
  201. })
  202. },
  203. random_string(len) {
  204. len = len || 32
  205. var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  206. var maxPos = chars.length
  207. var pwd = ''
  208. for (let i = 0; i < len; i++) {
  209. pwd += chars.charAt(Math.floor(Math.random() * maxPos))
  210. }
  211. return pwd
  212. },
  213. //备注输入
  214. bindTextAreaBlur: function (e) {
  215. var index = e.target.dataset.index;
  216. var remark = `items[${index}].remark`
  217. this.setData({
  218. [remark]: e.detail.value,
  219. });
  220. },
  221. //积分输入
  222. bindKeyInput(e) {
  223. var index = e.target.dataset.index;
  224. var point = `items[${index}].point`;
  225. var selectRule = this.data.items[index].selectRule;
  226. var isArrindex = this.data.items[index].isArrindex;
  227. // var strMin, strMax;
  228. // if (selectRule.min_point < 0) {
  229. // var min = selectRule.min_point.toString();
  230. // strMin = min.slice(1, min.length);
  231. // } else {
  232. // strMin = selectRule.min_point
  233. // }
  234. this.setData({
  235. [point]: e.detail.value,
  236. });
  237. return;
  238. //最小值
  239. var value;
  240. var showValue = e.detail.value
  241. if (isArrindex == true) {
  242. value = e.detail.value;
  243. } else {
  244. value = 0 - e.detail.value;
  245. }
  246. if (selectRule) {
  247. if (value < selectRule.min_point || value > selectRule.max_point) {
  248. app.globalData.showToast("已超出范围值")
  249. that.setData({
  250. [point]: Number(strMin)
  251. });
  252. } else {
  253. this.setData({
  254. [point]: showValue,
  255. });
  256. }
  257. } else {
  258. this.setData({
  259. [point]: showValue,
  260. });
  261. }
  262. },
  263. //选择规则分类
  264. bindKeyInput2(e) {
  265. var index = e.target.dataset.index;
  266. var point = `items[${index}].point2`;
  267. this.setData({
  268. [point]: e.detail.value,
  269. });
  270. },
  271. //删除一条
  272. deleteArr(e) {
  273. var index = e.target.dataset.index;
  274. var list = that.data.items;
  275. app.globalData.arrRemoveObj(list, list[index]);
  276. that.setData({
  277. items: list
  278. })
  279. console.log(that.data.items);
  280. },
  281. //添加一条
  282. addArr() {
  283. var arr = {//录入选项列表
  284. checked: true,
  285. rule_id: '',
  286. rule_id2: '',
  287. rule_name: '',
  288. item_id: 0,
  289. point: '',
  290. point2: '',
  291. remark: '',
  292. event_time: app.globalData.day,
  293. pt_id: '',
  294. reviewer_id: '',//审核人ID
  295. revieweName: '',//审批人姓名(非传)
  296. files: '',
  297. isArrindex: true,
  298. isArrindex2: true,
  299. selectRule: '',
  300. };
  301. var list = that.data.items
  302. list.push(arr);
  303. that.setData({
  304. items: list
  305. })
  306. },
  307. showToast(text) {
  308. app.globalData.showToast(text);
  309. },
  310. formSubmit() {
  311. var items = this.data.items;
  312. var userData = this.data.users;
  313. var arr = [];
  314. var isTg = true;
  315. var pt_id = app.getTypesItem(this.data.isGzType).id
  316. if (userData.length == 0) {
  317. this.showToast('请选择奖扣对象')
  318. return;
  319. }
  320. for (var i = 0; i < items.length; i++) {
  321. var obj = {};
  322. var item = items[i];
  323. var num = item.checked ? item.point : item.point2
  324. var point;
  325. if (item.checked) {
  326. if (item.isArrindex != true) {
  327. point = 0 - num;
  328. } else {
  329. point = num;
  330. }
  331. if (point < item.selectRule.min_point || point > item.selectRule.max_point) {
  332. this.showToast(`第${i + 1}条,积分分值超出可输入范围`);
  333. isTg = false;
  334. }
  335. } else {
  336. if (item.isArrindex2 != true) {
  337. point = 0 - num;
  338. } else {
  339. point = num;
  340. }
  341. }
  342. if (item.checked) {
  343. if (!item.rule_id) {
  344. this.showToast(`第${i + 1}条请选择规则`);
  345. isTg = false;
  346. break;
  347. }
  348. } else {
  349. if (!item.rule_id2) {
  350. this.showToast(`第${i + 1}条请选择分类`);
  351. isTg = false;
  352. break;
  353. }
  354. }
  355. if (point == 0 || !point) {
  356. this.showToast(`第${i + 1}条积分分值不能为0或者为空`);
  357. isTg = false;
  358. break;
  359. }
  360. if (!item.remark) {
  361. this.showToast(`第${i + 1}条事件内容不能为空`);
  362. isTg = false;
  363. break;
  364. }
  365. obj.rule_id = item.checked ? item.rule_id : item.rule_id2;
  366. obj.item_id = item.checked ? item.item_id : 0;
  367. obj.point = point;
  368. obj.remark = item.remark;
  369. obj.event_time = item.event_time;
  370. obj.pt_id = pt_id;
  371. obj.reviewer_id = item.reviewer_id ? item.reviewer_id : 0;
  372. obj.files = item.files;
  373. arr.push(obj);
  374. }
  375. var userIds = []
  376. userData.map(item => {
  377. userIds.push(item.id)
  378. })
  379. if (isTg) {
  380. var data = {
  381. members: JSON.stringify(userIds),
  382. items: JSON.stringify(arr)
  383. }
  384. this.setData({ disabled: true });
  385. var url = this.data.type == 'B' ? 'api/integral/point/entry' : 'api/integral/review/a/entry'
  386. app.$post(url, data).then((res) => {
  387. var is = true, msg;
  388. if (this.data.type == 'B') {
  389. res.data.data.list.forEach(item => {
  390. if (item.status != 1) {
  391. is = false;
  392. msg = item.msg;
  393. }
  394. })
  395. } else {
  396. res.data.data.forEach(item => {
  397. if (item.status != 1) {
  398. is = false;
  399. msg = item.rule_item;
  400. }
  401. })
  402. }
  403. if (is) {
  404. this.showToast('提交成功');
  405. setTimeout(() => {
  406. this.setData({ disabled: false });
  407. dd.navigateBack({ delta: 1 })
  408. }, 1000);
  409. } else {
  410. this.setData({ disabled: false });
  411. this.showToast(msg);
  412. }
  413. }).catch(err => {
  414. this.setData({ disabled: false });
  415. })
  416. }
  417. },
  418. switchChange(e) {
  419. var index = e.target.dataset.index;
  420. var item = `items[${index}].checked`;
  421. that.setData({
  422. [item]: e.detail.value
  423. })
  424. },
  425. //选择时间
  426. openDate(e) {
  427. var index = e.target.dataset.index;
  428. var item = `items[${index}].event_time`
  429. dd.datePicker({
  430. format: 'yyyy-MM-dd',
  431. currentDate: app.globalData.day,
  432. success: (res) => {
  433. that.setData({
  434. [item]: res.date
  435. })
  436. },
  437. });
  438. },
  439. //选择人
  440. onSelectUser(item) {
  441. //空数据
  442. this.data.items.forEach((obj, index) => {
  443. var reviewer_id = `items[${index}].reviewer_id`
  444. var revieweName = `items[${index}].revieweName`
  445. if (obj.reviewer_id) {
  446. that.setData({
  447. [reviewer_id]: '',
  448. [revieweName]: '',
  449. });
  450. }
  451. })
  452. this.setData({ superior_list: [] });
  453. var userIdArr = [];
  454. if (item.length > 0) {
  455. item.forEach(el => {
  456. userIdArr.push(el.id)
  457. })
  458. var employee_ids = userIdArr.join(',');
  459. this.getEmployeeList(employee_ids, function (res) {
  460. var arr = []
  461. res.forEach(el => {
  462. arr.push(el.id)
  463. })
  464. that.setData({
  465. users: item.length > 0 ? item : [],
  466. superior_list: arr
  467. })
  468. });
  469. }
  470. },
  471. //选择人2
  472. onSelectUser2(item) {
  473. var elm = item.length > 0 ? item[0] : { id: '', name: '' };
  474. var index = this.data.activeIndex;
  475. var reviewer_id = `items[${index}].reviewer_id`
  476. var revieweName = `items[${index}].revieweName`
  477. that.setData({
  478. [reviewer_id]: elm.id,
  479. [revieweName]: elm.name,
  480. });
  481. },
  482. //选择规则分类
  483. onSelectType(item) {
  484. var index = this.data.activeIndex;
  485. var rule_id2 = `items[${index}].rule_id2`;//分类ID
  486. var rule_name = `items[${index}].rule_name`;//分类名称
  487. this.setData({
  488. [rule_id2]: item.id,
  489. [rule_name]: item.name,
  490. });
  491. },
  492. //选择规则
  493. onSelectItem(item) {
  494. var index = this.data.activeIndex;
  495. var point = `items[${index}].point`
  496. var isArrindex = `items[${index}].isArrindex`
  497. var selectRule = `items[${index}].selectRule`
  498. var remark = `items[${index}].remark`
  499. var rule_id = `items[${index}].rule_id`;//分类ID
  500. var item_id = `items[${index}].item_id`;//分类ID
  501. var strMin;
  502. if (item.min_point < 0) {
  503. var min = item.min_point.toString();
  504. var strMin = min.slice(1, min.length);
  505. } else {
  506. strMin = item.min_point;
  507. }
  508. this.setData({
  509. [point]: Number(strMin),
  510. [isArrindex]: item.min_point > 0 ? true : false,
  511. [selectRule]: item,
  512. [remark]: item.remark,
  513. [rule_id]: item.rule_id,
  514. [item_id]: item.id,
  515. });
  516. },
  517. //获取人员(上级人员)
  518. getEmployeeList(userIdArr, callBack) {
  519. app.$get("api/employee/superior", { employee_id: userIdArr, filter_applyor: 1 }).then((res) => {
  520. callBack(res.data.data.list)
  521. })
  522. },
  523. intersection(arr) {
  524. const arrSet = []
  525. const intersectionSet = new Set()
  526. arr.forEach(items => {
  527. arrSet.push(new Set(items.map(item => item.id)))
  528. items.forEach(item => intersectionSet.add(item.id))
  529. })
  530. return [...intersectionSet].filter(item => arrSet.every(set => set.has(item)))
  531. },
  532. });