apply.js 15 KB

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