jk_B.js 15 KB

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