jk_B.js 16 KB

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