jk_B.js 14 KB

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