apply.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547
  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. });
  314. },
  315. fail: function (res) {
  316. app.globalData.showToast("上传失败");
  317. }
  318. })
  319. },
  320. random_string(len) {
  321. len = len || 32
  322. var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  323. var maxPos = chars.length
  324. var pwd = ''
  325. for (let i = 0; i < len; i++) {
  326. pwd += chars.charAt(Math.floor(Math.random() * maxPos))
  327. }
  328. return pwd
  329. },
  330. //备注输入
  331. bindTextAreaBlur: function (e) {
  332. var index = e.target.dataset.index;
  333. var remark = `items[${index}].remark`
  334. this.setData({
  335. [remark]: e.detail.value,
  336. });
  337. },
  338. formSubmit() {
  339. var items = this.data.items;
  340. var ruleOnoff = this.data.ruleOnoff
  341. var arr = [];
  342. var isTg = true;
  343. for (var i = 0; i < items.length; i++) {
  344. var obj = {};
  345. var item = items[i];
  346. if (!item.remark) {
  347. app.globalData.showToast(`第${i + 1}项申请内容不能为空`);
  348. isTg = false;
  349. break;
  350. }
  351. if (!item.reviewer_id) {
  352. app.globalData.showToast(`第${i + 1}项申请审批人不能为空`);
  353. isTg = false;
  354. break;
  355. }
  356. obj.employee_id = item.employee_id;
  357. if (ruleOnoff) {
  358. obj.rule_id = item.selectRule ? item.selectRule.rule_id : 0;
  359. obj.item_id = item.selectRule ? item.selectRule.id : 0;
  360. } else {
  361. obj.rule_id = 0;
  362. obj.item_id = 0;
  363. }
  364. if (ruleOnoff) {
  365. if (!obj.rule_id) {
  366. app.globalData.showToast(`第${i + 1}项必须选择规则`);
  367. isTg = false;
  368. break;
  369. }
  370. }
  371. obj.remark = item.remark;
  372. obj.event_time = item.event_time;
  373. obj.reviewer_id = item.reviewer_id;
  374. obj.revieweName = item.revieweName;
  375. obj.files = item.files;
  376. arr.push(obj);
  377. }
  378. if (isTg) {
  379. var data = {
  380. items: JSON.stringify(arr)
  381. }
  382. this.setData({ disabled: true });
  383. app.$post("api/integral/review/apply", data).then((res) => {
  384. var is = true;
  385. res.data.data.list.forEach(item => {
  386. if (item.status == 0) {
  387. is = false;
  388. this.setData({ disabled: false });
  389. app.globalData.showToast(item.msg);
  390. }
  391. });
  392. if (is) {
  393. app.globalData.showToast('申请成功');
  394. setTimeout(() => {
  395. if (this.data.qrcodeId) {
  396. dd.switchTab({
  397. url: '../index/index'
  398. })
  399. } else {
  400. dd.navigateBack({
  401. delta: 1
  402. })
  403. }
  404. this.setData({ disabled: false });
  405. }, 1000);
  406. }
  407. }).catch(err => {
  408. this.setData({ disabled: false });
  409. }).finally(() => {
  410. if (arr.length > 0) {
  411. arr.forEach(item => {
  412. dd.setStorage({
  413. key: String(item.employee_id),
  414. data: { id: item.reviewer_id, name: item.revieweName },
  415. });
  416. })
  417. }
  418. })
  419. }
  420. },
  421. //删除一条
  422. deleteArr(e) {
  423. var index = e.target.dataset.index;
  424. var list = that.data.items;
  425. app.globalData.arrRemoveObj(list, list[index]);
  426. that.setData({
  427. items: list
  428. })
  429. },
  430. //选择录入对象
  431. onSelectUserEmployee(item) {
  432. var elm = item.length > 0 ? item[0] : { id: '', name: '' };
  433. var index = this.data.activeIndex;
  434. var employee_id = `items[${index}].employee_id`
  435. var employeeName = `items[${index}].employeeName`
  436. var reviewer_id = `items[${index}].reviewer_id`
  437. var revieweName = `items[${index}].revieweName`
  438. that.setData({
  439. [employee_id]: elm.id,
  440. [employeeName]: elm.name,
  441. });
  442. this.revieList(elm.id, function(res){
  443. if(res.name){
  444. that.setData({
  445. [reviewer_id]: res.id,
  446. [revieweName]: res.name
  447. });
  448. } else {
  449. that.setData({
  450. [reviewer_id]: '',
  451. [revieweName]: ''
  452. });
  453. }
  454. })
  455. // dd.getStorage({
  456. // key: String(elm.id),
  457. // success: function (res) {
  458. // if (res.data) {
  459. // that.setData({
  460. // [reviewer_id]: res.data.id,
  461. // [revieweName]: res.data.name
  462. // });
  463. // } else {
  464. // that.setData({
  465. // [reviewer_id]: '',
  466. // [revieweName]: ''
  467. // });
  468. // }
  469. // }
  470. // });
  471. },
  472. //获取人员(上级人员)
  473. getEmployeeList(userIdArr, callBack) {
  474. app.$get("api/employee/superior", { employee_id: userIdArr, filter_applyor: 1 }).then((res) => {
  475. callBack(res.data.data.list || [])
  476. })
  477. },
  478. //选择审批人
  479. onSelectUser(item) {
  480. var elm = item.length > 0 ? item[0] : { id: '', name: '' };
  481. var index = this.data.activeIndex;
  482. var reviewer_id = `items[${index}].reviewer_id`
  483. var revieweName = `items[${index}].revieweName`
  484. that.setData({
  485. [reviewer_id]: elm.id,
  486. [revieweName]: elm.name,
  487. });
  488. },
  489. //添加一条
  490. addArr() {
  491. var list = that.data.items
  492. if(list.length>=10){
  493. this.showToast('一次只能添加10条申请')
  494. return;
  495. }
  496. var arr = {//录入选项列表
  497. employee_id: app.globalData.isCreator ? '' : app.globalData.userData.id,
  498. employeeName: app.globalData.isCreator ? '' : app.globalData.userData.name,
  499. checked: true,//判断是否开启指定规则
  500. rule_id: '',//积分分类id
  501. item_id: '',//积分细则id 不选可以为0
  502. remark: '',//备注
  503. event_time: app.globalData.day,//事件时间
  504. reviewer_id: this.data.getReviewerObj.id,
  505. revieweName: this.data.getReviewerObj.name,
  506. files: '',//附件数组列表
  507. };
  508. list.push(arr);
  509. that.setData({
  510. items: list
  511. })
  512. },
  513. switchChange(e) {
  514. var index = e.target.dataset.index;
  515. var item = `items[${index}].checked`
  516. that.setData({
  517. [item]: e.detail.value
  518. })
  519. },
  520. //选择时间
  521. openDate(e) {
  522. var index = e.target.dataset.index;
  523. var item = `items[${index}].event_time`
  524. dd.datePicker({
  525. format: 'yyyy-MM-dd',
  526. currentDate: app.globalData.day,
  527. success: (res) => {
  528. that.setData({
  529. [item]: res.date
  530. })
  531. },
  532. });
  533. },
  534. //选择规则
  535. onSelectItem(item) {
  536. var index = this.data.activeIndex;
  537. var selectRule = `items[${index}].selectRule`
  538. var remark = `items[${index}].remark`
  539. that.setData({
  540. [selectRule]: item,
  541. [remark]: item.remark,
  542. })
  543. },
  544. });