activity.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. /*******************************************************************************
  2. * Copyright(c) 2022 dongke All rights reserved. / Confidential
  3. * 类的信息:
  4. * 1.程序名称:活动(用于续费、注册)
  5. * 编辑履历:
  6. * 作者 日期 版本 修改内容
  7. * 周兴 2024-5-15 1.00 新建
  8. *******************************************************************************/
  9. const Constants = require('@/utils/Constants.js');
  10. const util = require('@/utils/util.js')
  11. const mixins = require('@/mixins/index.js');
  12. const app = getApp()
  13. Page({
  14. mixins: [mixins],
  15. /**
  16. * 页面的初始数据
  17. */
  18. data: {
  19. // 升级标识
  20. upgradeFlag:false,
  21. gradeCode:null,
  22. freeFlag: false,
  23. // 企业名称
  24. companyName: null,
  25. cpManager: null,
  26. cpPhone: null,
  27. webMaxNum: null,
  28. wxMaxNum: null,
  29. cpEndDate: null,
  30. activityTable: null,
  31. readFlag: false,
  32. staffCount: {
  33. maxNum: 1,
  34. webMaxNum: 0,
  35. wxMaxNum: 0
  36. },
  37. curentAdItem: null,
  38. summaryInfo: {},
  39. routeObjName: 'company',
  40. pageFlag: false,
  41. // 当前用户授权数
  42. currentUserCount: null,
  43. //按钮
  44. buttonSaveList: [
  45. { code: 'save', title: mixins.$t('save'), width: '120rpx' }
  46. ],
  47. noticeInfo: Constants.noticeInfo
  48. },
  49. /**
  50. * @desc : 选择活动明细
  51. * @author : 周兴
  52. * @date : 2024/4/1
  53. */
  54. chooseAdItem(e) {
  55. let item = e.currentTarget.dataset.item;
  56. let summaryInfo = this.data.summaryInfo
  57. // 计算截止日期
  58. let months = item.validLong + item.extraLong
  59. let endDate = app.globalData.company.endDate
  60. // 升级需要从当天开始算
  61. if(this.data.upgradeFlag){
  62. endDate = new Date()
  63. }
  64. endDate = new Date(endDate).addMonths(months).addDays(-1)
  65. summaryInfo.endDate = endDate.toDateStr();
  66. this.setData({
  67. curentAdItem: item,
  68. summaryInfo: summaryInfo
  69. })
  70. // 计算金额
  71. this.countSummaryAmount(item);
  72. },
  73. /**
  74. * @desc : 勾选已阅读表示
  75. * @author : 周兴
  76. * @date : 2024/5/17
  77. */
  78. handleChangeCheckbox(e) {
  79. console.log('ee', e);
  80. this.setData({
  81. readFlag: e.detail
  82. })
  83. },
  84. /**
  85. * @desc : 计算金额
  86. * @author : 周兴
  87. * @date : 2024/4/1
  88. */
  89. countSummaryAmount() {
  90. let item = this.data.curentAdItem;
  91. let staffCount = this.data.staffCount;
  92. let summaryInfo = this.data.summaryInfo
  93. let amount = 0;
  94. // 先清空
  95. summaryInfo.amountInfo = '';
  96. // 共通用户
  97. if (staffCount.maxNum) {
  98. summaryInfo.amountInfo = item.stdPrice + '(打包价格)*' + staffCount.maxNum
  99. amount += item.stdPrice * staffCount.maxNum
  100. }
  101. // 手机端用户
  102. if (staffCount.wxMaxNum) {
  103. if (summaryInfo.amountInfo) {
  104. summaryInfo.amountInfo += ' + '
  105. }
  106. summaryInfo.amountInfo += item.wxPrice + '(手机端价格)*' + staffCount.wxMaxNum
  107. amount += item.wxPrice * staffCount.wxMaxNum
  108. }
  109. // 电脑端用户
  110. if (staffCount.webMaxNum) {
  111. if (summaryInfo.amountInfo) {
  112. summaryInfo.amountInfo += ' + '
  113. }
  114. summaryInfo.amountInfo += item.webPrice + '(电脑端价格)*' + staffCount.webMaxNum
  115. amount += item.webPrice * staffCount.webMaxNum
  116. }
  117. if (summaryInfo.amountInfo) {
  118. summaryInfo.amountInfo += ' = ' + amount + '(元)'
  119. summaryInfo.amount = amount;
  120. }
  121. this.setData({
  122. summaryInfo: summaryInfo
  123. })
  124. // 统计两端用户数
  125. this.countStaffInfo();
  126. },
  127. /**
  128. * @desc : 获取标准版的价格显示
  129. * @author : 周兴
  130. * @date : 2024/4/1
  131. */
  132. countSummaryAmountSTD() {
  133. let item = this.data.curentAdItem;
  134. let summaryInfo = this.data.summaryInfo
  135. let amount = 0;
  136. // 先清空
  137. summaryInfo.amountInfo = '';
  138. let extendDays = null;
  139. let nowDate = new Date(new Date().toDateStr());
  140. if (summaryInfo.reCountFlag) {
  141. // 手机端用户
  142. if (summaryInfo.wxMaxNum) {
  143. summaryInfo.amountInfo += item.wxPrice + ' * ' + summaryInfo.wxMaxNum
  144. amount += item.wxPrice * summaryInfo.wxMaxNum
  145. }
  146. if (summaryInfo.amountInfo) {
  147. summaryInfo.amountInfo += ' = ' + amount + '(元)'
  148. summaryInfo.amount = amount;
  149. }
  150. extendDays = new Date(summaryInfo.userEndDate).dayDiff(nowDate) + 1;
  151. } else {
  152. extendDays = new Date(summaryInfo.userEndDate).dayDiff(nowDate) + 1;
  153. if (summaryInfo.wxMaxNum) {
  154. summaryInfo.amountInfo += item.wxPrice + '(元) / 365(天) * ' + extendDays + '(天) * ' + summaryInfo.wxMaxNum + '(个)'
  155. amount = (item.wxPrice / 365 * extendDays * summaryInfo.wxMaxNum).toFixed(2)
  156. console.log('amount', parseFloat(item.wxPrice / 365 * extendDays * summaryInfo.wxMaxNum), amount);
  157. }
  158. if (summaryInfo.amountInfo) {
  159. summaryInfo.amountInfo += ' = ' + amount + '(元)'
  160. summaryInfo.amount = amount;
  161. }
  162. }
  163. // 计算一授权一天的单价
  164. if (summaryInfo.userEndDate) {
  165. let price = (summaryInfo.amount / summaryInfo.wxMaxNum / extendDays).toFixed(2);
  166. summaryInfo.priceInfo = price
  167. summaryInfo.extendDays = extendDays
  168. }
  169. this.setData({
  170. summaryInfo: summaryInfo
  171. })
  172. },
  173. /**
  174. * @desc : 统计电脑端和手机端的用户数
  175. * @author : 周兴
  176. * @date : 2024/4/1
  177. */
  178. countStaffInfo() {
  179. let summaryInfo = this.data.summaryInfo;
  180. let staffCount = this.data.staffCount;
  181. if (!staffCount) {
  182. return;
  183. }
  184. let webNum = staffCount.webMaxNum + staffCount.maxNum
  185. let wxNum = staffCount.wxMaxNum + staffCount.maxNum
  186. summaryInfo.staffInfo = '可配置手机端授权' + wxNum + '个;电脑端授权' + webNum + '个(包含当前用户)'
  187. summaryInfo.webMaxNum = webNum
  188. summaryInfo.wxMaxNum = wxNum
  189. // 升级从当天算
  190. if(this.data.upgradeFlag){
  191. summaryInfo.buyBeginDate = new Date().addDays(1).toDateStr();
  192. summaryInfo.extendDays = new Date(summaryInfo.endDate).dayDiff(new Date().addDays(1));
  193. }else{
  194. summaryInfo.buyBeginDate = new Date(this.data.cpEndDate).addDays(1).toDateStr();
  195. summaryInfo.extendDays = new Date(summaryInfo.endDate).dayDiff(new Date(this.data.cpEndDate).addDays(1));
  196. }
  197. // 计算一授权一天的单价
  198. let price = (summaryInfo.amount / (webNum + wxNum) / summaryInfo.extendDays).toFixed(2);
  199. summaryInfo.priceInfo = price
  200. this.setData({
  201. summaryInfo: summaryInfo
  202. })
  203. },
  204. /**
  205. * @desc : 修改用户数
  206. * @author : 周兴
  207. * @date : 2024/4/1
  208. */
  209. changeStaffCount(e) {
  210. let staffCount = this.data.staffCount
  211. let ds = e.currentTarget.dataset
  212. if (ds.type == 'wx') {
  213. staffCount.wxMaxNum = e.detail
  214. } else if (ds.type == 'web') {
  215. staffCount.webMaxNum = e.detail
  216. } else {
  217. staffCount.maxNum = e.detail
  218. }
  219. this.setData({
  220. staffCount: staffCount
  221. })
  222. // 计算金额
  223. this.countSummaryAmount();
  224. },
  225. /**
  226. * @desc : 保存
  227. * @author : 周兴
  228. * @date : 2024/4/1
  229. */
  230. handleSave() {
  231. let summaryInfo = this.data.summaryInfo;
  232. let currentUserCount = this.data.currentUserCount
  233. if (!currentUserCount) {
  234. return;
  235. }
  236. if (this.data.gradeCode == Constants.gradeCode.STD) {
  237. // 判断数量是否超出续约授权
  238. if (currentUserCount.wxNum > summaryInfo.wxMaxNum && summaryInfo.reCountFlag) {
  239. let staffInfo = [{ wxMaxNum: this.data.wxMaxNum, title: '当前授权', wxTitle: '手机授权', code: 'current', userTitle: '当前用户' }, { wxMaxNum: summaryInfo.wxMaxNum, title: '续费授权', wxTitle: '手机授权', code: 'renew' }]
  240. this.save({ saveFlag: false, url: '/package-basic-data/pages/activity/detail/detail?staffInfo=' + JSON.stringify(staffInfo) });
  241. } else {
  242. this.save({});
  243. }
  244. } else {
  245. // 判断数量是否超出续约授权
  246. if (currentUserCount.wxNum > summaryInfo.wxMaxNum || currentUserCount.webNum > summaryInfo.webMaxNum) {
  247. let staffInfo = [{ wxMaxNum: this.data.wxMaxNum, webMaxNum: this.data.webMaxNum, title: '当前授权', wxTitle: '手机授权', webTitle: '电脑授权', code: 'current' }, { wxMaxNum: summaryInfo.wxMaxNum, webMaxNum: summaryInfo.webMaxNum, title: '续费授权', wxTitle: '手机授权', webTitle: '电脑授权', code: 'renew' }]
  248. this.save({ saveFlag: false, url: '/package-basic-data/pages/activity/detail/detail?staffInfo=' + JSON.stringify(staffInfo) });
  249. } else {
  250. this.save({});
  251. }
  252. }
  253. },
  254. /**
  255. * @desc : 改变用户授权数
  256. * @author : 周兴
  257. * @date : 2024/4/1
  258. */
  259. changeUserSTD(e) {
  260. let summaryInfo = this.data.summaryInfo
  261. summaryInfo.wxMaxNum = e.detail
  262. this.setData({
  263. summaryInfo: summaryInfo
  264. })
  265. // 计算金额
  266. this.countSummaryAmountSTD();
  267. },
  268. /**
  269. * @desc : 校验
  270. * @author : 周兴
  271. * @date : 2024/4/1
  272. */
  273. validData() {
  274. // 专业版校验
  275. if (this.data.gradeCode == Constants.gradeCode.PRO) {
  276. if (!this.data.readFlag) {
  277. util.showToast('请勾选阅读须知');
  278. return false;
  279. }
  280. let curentAdItem = this.data.curentAdItem;
  281. if (!curentAdItem) {
  282. util.showToast('请选择活动');
  283. return false
  284. }
  285. // 必须要选择一个授权
  286. let staffCount = this.data.staffCount
  287. if (!staffCount.maxNum && !staffCount.webMaxNum && !staffCount.wxMaxNum) {
  288. util.showToast('请选择一个授权');
  289. return false
  290. }
  291. } else {
  292. let curentAdItem = this.data.curentAdItem;
  293. if (!curentAdItem) {
  294. util.showToast('请选择活动');
  295. return false
  296. }
  297. }
  298. return true;
  299. },
  300. /**
  301. * @desc : 设置保存参数
  302. * @author : 周兴
  303. * @date : 2024/4/1
  304. */
  305. setParams(params) {
  306. let summaryInfo = this.data.summaryInfo
  307. let curentAdItem = this.data.curentAdItem
  308. let cpEndDate = this.data.cpEndDate
  309. console.log('summaryInfo', summaryInfo);
  310. if (!summaryInfo || !cpEndDate) return;
  311. params.endDate = summaryInfo.endDate
  312. params.userEndDate = summaryInfo.userEndDate
  313. params.gradeCode = this.data.gradeCode
  314. params.cpId = app.globalData.company.cpId
  315. params.tradeNo = this.generateRandomNo();
  316. params.wxUserId = app.globalData.user.userId
  317. params.tradeAmount = summaryInfo.amount
  318. params.buyBeginDate = summaryInfo.buyBeginDate;
  319. params.buyEndDate = summaryInfo.endDate
  320. params.extendDays = summaryInfo.extendDays;
  321. if (this.data.gradeCode == Constants.gradeCode.STD) {
  322. params.buyEndDate = summaryInfo.userEndDate
  323. params.endDate = app.globalData.company.endDate
  324. params.wxMaxNum = summaryInfo.wxMaxNum
  325. if (!summaryInfo.reCountFlag && summaryInfo.wxMaxNumSocial) {
  326. params.wxMaxNum = summaryInfo.wxMaxNum + summaryInfo.wxMaxNumSocial
  327. }
  328. } else {
  329. params.webMaxNum = summaryInfo.webMaxNum
  330. params.wxMaxNum = summaryInfo.wxMaxNum
  331. }
  332. params.buyLong = curentAdItem.activityItemName
  333. return params;
  334. },
  335. /**
  336. * @desc : 保存数据
  337. * @author : 周兴
  338. * @date : 2024/5/17
  339. */
  340. saveData(params) {
  341. return this.excute(this.data.service, this.data.service.reNewCompany, this.data.params).then(res => {
  342. if (res.data.code == Constants.SUCESS_CODE) {
  343. // 成功后跳转支付
  344. this.toPay(res.data.data);
  345. }
  346. })
  347. },
  348. /**
  349. * @desc : 查询当前用户授权数
  350. * @author : 周兴
  351. * @date : 2024/4/1
  352. */
  353. getStaffCount() {
  354. let service = app.globalData['commonService']
  355. this.excute(service, service.selectUserCount, {}).then(res => {
  356. if (res.data.code == Constants.SUCESS_CODE) {
  357. if (res.data && res.data.data) {
  358. let currentUserCount = res.data.data;
  359. console.log('currentUserCount', currentUserCount);
  360. this.setData({
  361. currentUserCount: currentUserCount
  362. })
  363. }
  364. }
  365. });
  366. },
  367. /**
  368. * @desc : 查询活动
  369. * @author : 周兴
  370. * @date : 2024/4/1
  371. */
  372. getActivity() {
  373. let params = {
  374. appCode: Constants.APP_CODE,
  375. activityTypeList: [Constants.kindCode.activityGrade, Constants.kindCode.activityMenu],
  376. gradeCode: this.data.gradeCode
  377. }
  378. let service = app.globalData['activityService']
  379. this.excute(service, service.selectActivityItems, params).then(res => {
  380. if (res.data.code == Constants.SUCESS_CODE) {
  381. if (res.data && res.data.data) {
  382. let activityTable = res.data.data;
  383. this.setData({
  384. activityTable: activityTable
  385. })
  386. // 如果是标准版,需要进行截止日期的处理
  387. if (this.data.gradeCode == Constants.gradeCode.STD) {
  388. this.handleDataStd(activityTable);
  389. }
  390. }
  391. }
  392. });
  393. },
  394. /**
  395. * @desc : 标准版处理数据
  396. * @author : 周兴
  397. * @date : 2024/4/1
  398. */
  399. handleDataStd(activityTable) {
  400. if (activityTable && activityTable.length > 0) {
  401. let item = activityTable[0]
  402. this.setData({
  403. curentAdItem: item
  404. })
  405. let summaryInfo = this.data.summaryInfo
  406. let months = item.validLong + item.extraLong
  407. let endDate = new Date().addMonths(months).addDays(-1)
  408. let dayDiffs = null;
  409. if (summaryInfo.userEndDate) {
  410. dayDiffs = new Date(summaryInfo.userEndDate).dayDiff(new Date(new Date().toDateStr()))
  411. }
  412. // 如果截止日期是空,就取活动中的截止日期
  413. if (!summaryInfo.userEndDate || !dayDiffs || dayDiffs < 0) {
  414. summaryInfo.userEndDate = endDate.toDateStr();
  415. // 重新统计,到期续费或者第一次购买用户
  416. summaryInfo.reCountFlag = true;
  417. summaryInfo.wxMaxNum = summaryInfo.wxMaxNumSocial
  418. }
  419. summaryInfo.buyBeginDate = new Date().toDateStr();
  420. console.log('summaryInfo', summaryInfo.userEndDate, endDate, months);
  421. this.setData({
  422. summaryInfo: summaryInfo
  423. })
  424. // 计算金额
  425. this.countSummaryAmountSTD();
  426. }
  427. },
  428. /**
  429. * 生命周期函数--监听页面加载
  430. */
  431. onLoad(options) {
  432. console.log('options', options);
  433. // 升级
  434. if (options && options.upgrade) {
  435. wx.setNavigationBarTitle({
  436. title: mixins.$t('updateSpecialized'),
  437. })
  438. this.setData({
  439. gradeCode:Constants.gradeCode.PRO,
  440. upgradeFlag:true
  441. })
  442. } else {
  443. wx.setNavigationBarTitle({
  444. title: mixins.$t('reNew'),
  445. })
  446. this.setData({
  447. gradeCode:app.globalData.company.gradeCode
  448. })
  449. }
  450. this.setData({
  451. companyName: app.globalData.company.cpName,
  452. cpManager: app.globalData.company.cpManager,
  453. cpPhone: app.globalData.company.cpPhone,
  454. cpEndDate: app.globalData.company.endDate,
  455. webMaxNum: app.globalData.company.webMaxNum,
  456. wxMaxNum: app.globalData.company.wxMaxNum,
  457. })
  458. // 如果是标准版,需要获取用户授权数(手机)
  459. let summaryInfo = {}
  460. summaryInfo.wxMaxNum = 1
  461. summaryInfo.wxMaxNumSocial = this.data.wxMaxNum
  462. // 续费用户到期日期
  463. summaryInfo.userEndDate = app.globalData.company.userEndDate
  464. this.setData({
  465. summaryInfo: summaryInfo
  466. })
  467. // 获取活动
  468. this.getActivity();
  469. // 获取当前用户授权数
  470. this.getStaffCount();
  471. },
  472. })