jk_B.js 14 KB

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