jk_B.js 15 KB

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