jk_B.js 15 KB

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