details.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450
  1. <template>
  2. <view>
  3. <view class="imgaeBox">
  4. <image style="width: 100%;height: 100%;" :src="form.url" mode=""></image>
  5. </view>
  6. <view class="cardBox textBox">
  7. <view class="textBox_title">{{form.activityName}}</view>
  8. <view class="textBox_text">{{form.activityDescription}}</view>
  9. </view>
  10. <view class="bottomBox">
  11. <view style="margin-bottom: 20rpx;">活动起止时间</view>
  12. <view class="cardBox timeBox">
  13. <view>{{form.startDate?form.startDate.slice(0,10):''}}开始</view>
  14. <view>
  15. <view class="iconRight"><u-icon name="arrow-right" bold color="#fff" size="14"></u-icon></view>
  16. </view>
  17. <view>{{form.endDate?form.endDate.slice(0,10):''}}结束</view>
  18. </view>
  19. <view class="cardBox timeBox" style="display: block;">
  20. <view v-for="item of form.activityItemsList" :key="item.id">
  21. <view class="selectAllBox">
  22. <u-checkbox-group v-model="item.select" placement="column" @change="rowSelect($event,item)">
  23. <u-checkbox label="选择" :name="true" activeColor="#FD4B09" shape="circle"></u-checkbox>
  24. </u-checkbox-group>
  25. </view>
  26. <view class="forBox">
  27. <view class="forBox_img">
  28. <image style="width: 100%;height: 100%;" :src="item.url" mode=""></image>
  29. </view>
  30. <view class="forBox_text">
  31. <view class="">{{item.cname}}</view>
  32. <view>原价:{{item.priceOnePrimary}}元</view>
  33. <view class="specialOffer">特价:{{item.priceOne}}元</view>
  34. <view class="timerBox">
  35. <u-number-box v-model="item.purchaseQuantity" :min="item.minQuantity"
  36. :max="item.maxQuantity" buttonSize="40rpx"
  37. @change="rowNumber($event,item)"></u-number-box>
  38. </view>
  39. </view>
  40. </view>
  41. </view>
  42. </view>
  43. </view>
  44. <view style="height: 140rpx;"></view>
  45. <view class="bottomPurchase">
  46. <view class="bottomPurchase_flex">
  47. <view style="display: flex;align-items: center;">
  48. <view>
  49. <u-checkbox-group v-model="selectAll" placement="column" @change="selectAllChange">
  50. <u-checkbox label="全选" name="全选" activeColor="#FD4B09" shape="circle"></u-checkbox>
  51. </u-checkbox-group>
  52. </view>
  53. <view style="margin-left: 20rpx;">
  54. <view>总计:¥{{numStrip}}条</view>
  55. <view>¥{{numMoney}}元</view>
  56. </view>
  57. </view>
  58. <view>
  59. <view v-if='new Date().getTime()<new Date(form.startDate).getTime()' class="noPaymentButton">
  60. 活动未开始
  61. </view>
  62. <view
  63. v-else-if='new Date().getTime()>new Date(form.startDate).getTime()&&new Date().getTime()<new Date(form.endDate).getTime()'
  64. class="paymentButton" @click.stop="immediatePayment('W06')">
  65. 立即支付
  66. </view>
  67. <view v-else class="noPaymentButton">
  68. 活动已结束
  69. </view>
  70. </view>
  71. </view>
  72. </view>
  73. </view>
  74. </template>
  75. <script>
  76. import {
  77. activityDetail,
  78. activityGenerateOrder
  79. } from '@/api/tabBar/activity.js'
  80. import {
  81. getCorpsAddr,
  82. paramserviceDetail
  83. } from '@/api/tabBar/shoppingCart.js'
  84. import {
  85. userDept,
  86. } from '@/api/tabBar/home.js'
  87. export default {
  88. data() {
  89. return {
  90. form: {},
  91. selectAll: [null], // 全选参数
  92. numStrip: 0, // 总条
  93. numMoney: 0, // 总钱
  94. addres: {}, // 地址
  95. corporateName: '', // 公司名称
  96. }
  97. },
  98. onLoad(value) {
  99. console.log(value);
  100. this.activityDetailfun(value.id)
  101. // 获取地址
  102. getCorpsAddr().then(res => {
  103. this.addres = res.data
  104. })
  105. //获取公司名称
  106. userDept().then(res => {
  107. this.corporateName = res.data.fullName
  108. })
  109. },
  110. methods: {
  111. // 立即支付
  112. immediatePayment(payType) {
  113. if (this.numStrip == 0) {
  114. uni.showToast({
  115. title: "请选择支付的商品",
  116. icon: 'none'
  117. });
  118. return
  119. }
  120. let arr = []
  121. for (let item of this.form.activityItemsList) {
  122. if (item.select[0]) {
  123. item.goodsNum = item.purchaseQuantity
  124. item.price = item.priceOne
  125. arr.push(item)
  126. }
  127. }
  128. let data = [{
  129. name: this.corporateName,
  130. list: arr
  131. }]
  132. console.log(this.form, 105);
  133. console.log(data, 120);
  134. uni.showLoading({
  135. title: '加载中',
  136. mask: true
  137. });
  138. activityGenerateOrder({
  139. payType: payType,
  140. address: this.addres.belongtoarea + this.addres.detailedAddress,
  141. list: data,
  142. }).then(res => {
  143. let generateOrderData = res.data
  144. paramserviceDetail({
  145. paramKey: 'cashier.payment'
  146. }).then(res => {
  147. let paramservice = res.data
  148. // 判断是调支付台的接口还是微信支付的接口
  149. if (paramservice && paramservice.paramValue == '1') {
  150. // uni.hideLoading();
  151. let obj = {
  152. appId: 'wxef277996acc166c3',
  153. extraData: {
  154. cusid: generateOrderData.cusid,
  155. appid: generateOrderData.appid,
  156. orgid: generateOrderData.orgid,
  157. version: generateOrderData.version,
  158. trxamt: generateOrderData.trxamt,
  159. reqsn: generateOrderData.reqsn,
  160. notify_url: generateOrderData.notify_url,
  161. body: generateOrderData.body,
  162. remark: generateOrderData.remark,
  163. validtime: generateOrderData.validtime,
  164. limit_pay: generateOrderData.limit_pay,
  165. randomstr: generateOrderData.randomstr,
  166. paytype: generateOrderData.paytype,
  167. signtype: generateOrderData.signtype,
  168. sign: generateOrderData.sign,
  169. },
  170. }
  171. console.log(obj);
  172. if (!generateOrderData.reqsn) {
  173. uni.showToast({
  174. title: '当前订单号为空,请联系供应商!!!',
  175. icon: 'none',
  176. mask: true,
  177. duration: 2000
  178. });
  179. // 详情调用
  180. return
  181. }
  182. wx.openEmbeddedMiniProgram({
  183. appId: 'wxef277996acc166c3',
  184. extraData: {
  185. cusid: generateOrderData.cusid,
  186. appid: generateOrderData.appid,
  187. orgid: generateOrderData.orgid,
  188. version: generateOrderData.version,
  189. trxamt: generateOrderData.trxamt,
  190. reqsn: generateOrderData.reqsn,
  191. notify_url: generateOrderData.notify_url,
  192. body: generateOrderData.body,
  193. remark: generateOrderData.remark,
  194. validtime: generateOrderData.validtime,
  195. // limit_pay: generateOrderData.limit_pay,
  196. limit_pay: "",
  197. randomstr: generateOrderData.randomstr,
  198. paytype: generateOrderData.paytype,
  199. signtype: generateOrderData.signtype,
  200. sign: generateOrderData.sign,
  201. },
  202. success: (a) => {
  203. uni.hideLoading();
  204. },
  205. fail: (err) => {
  206. uni.hideLoading();
  207. }
  208. })
  209. } else {
  210. if (payType && (payType == 'W01' || payType == 'U01' || payType == 'A01' ||
  211. payType == 'S01')) {
  212. console.log(generateOrderData, 321);
  213. // 订单详情接口
  214. this.qrcodeurl = generateOrderData.url
  215. appDetail({
  216. id: generateOrderData.id
  217. }).then(res => {
  218. uni.hideLoading();
  219. this.qrcodeshow = true
  220. this.qrcodeData = res.data
  221. console.log(res.data);
  222. })
  223. } else {
  224. uni.requestPayment({
  225. provider: "wxpay",
  226. appId: generateOrderData.appId,
  227. timeStamp: generateOrderData.timeStamp,
  228. nonceStr: generateOrderData.nonceStr,
  229. package: generateOrderData.package,
  230. signType: generateOrderData.signType,
  231. paySign: generateOrderData.paySign,
  232. success(res) {
  233. uni.showToast({
  234. title: '支付成功',
  235. mask: true,
  236. duration: 2000
  237. });
  238. setTimeout(function() {
  239. uni.hideLoading();
  240. // this_.refresh(res.data.data.id)
  241. }, 1000);
  242. },
  243. fail(e) {
  244. console.log(e);
  245. uni.showToast({
  246. title: "支付失败",
  247. icon: 'none',
  248. mask: true
  249. });
  250. setTimeout(function() {
  251. uni.hideLoading();
  252. // this_.refresh(res.data.id)
  253. }, 1000);
  254. }
  255. })
  256. }
  257. }
  258. })
  259. }).catch(err => {
  260. uni.hideLoading();
  261. })
  262. },
  263. // 步进器
  264. rowNumber(value, row) {
  265. row.purchaseQuantity = value.value
  266. this.numStrip = 0
  267. this.numMoney = 0
  268. for (let item of this.form.activityItemsList) {
  269. if (item.select[0]) {
  270. this.numStrip += Number(item.purchaseQuantity)
  271. this.numMoney += Number(item.purchaseQuantity) * Number(item.priceOne)
  272. }
  273. }
  274. },
  275. // 单条选择监听
  276. rowSelect(value, row) {
  277. row.select = value
  278. this.numStrip = 0
  279. this.numMoney = 0
  280. for (let item of this.form.activityItemsList) {
  281. if (item.select[0]) {
  282. this.numStrip += Number(item.purchaseQuantity)
  283. this.numMoney += Number(item.purchaseQuantity) * Number(item.priceOne)
  284. }
  285. }
  286. },
  287. // 全选按钮监听
  288. selectAllChange(value) {
  289. this.numStrip = 0
  290. this.numMoney = 0
  291. if (value[0]) {
  292. this.selectAll = ['全选']
  293. for (let item of this.form.activityItemsList) {
  294. this.$set(item, 'select', [true])
  295. this.numStrip += Number(item.purchaseQuantity)
  296. this.numMoney += Number(item.purchaseQuantity) * Number(item.priceOne)
  297. }
  298. } else {
  299. this.selectAll = null
  300. for (let item of this.form.activityItemsList) {
  301. this.$set(item, 'select', [])
  302. }
  303. }
  304. },
  305. // 详情数据
  306. activityDetailfun(id) {
  307. activityDetail({
  308. id: id
  309. }).then(res => {
  310. this.form = res.data
  311. for (let item of this.form.activityItemsList) {
  312. this.$set(item, 'select', []) // 是否选择
  313. item.purchaseQuantity = item.minQuantity // 当前选择数据的数量
  314. }
  315. })
  316. },
  317. }
  318. }
  319. </script>
  320. <style lang="scss" scoped>
  321. .imgaeBox {
  322. width: 100%;
  323. height: 300rpx;
  324. margin-bottom: 20rpx;
  325. }
  326. .cardBox {
  327. background: #fff;
  328. border-radius: 10rpx;
  329. padding: 30rpx;
  330. box-sizing: border-box;
  331. }
  332. .textBox {
  333. padding-right: 60rpx;
  334. padding-left: 60rpx;
  335. .textBox_title {
  336. text-align: center;
  337. font-weight: 500;
  338. font-size: 32rpx;
  339. margin-bottom: 20rpx;
  340. }
  341. .textBox_text {
  342. font-size: 28rpx;
  343. color: #8b8b8b;
  344. }
  345. }
  346. .bottomBox {
  347. width: 90%;
  348. margin: 0 auto;
  349. margin-top: 20rpx;
  350. font-size: 30rpx;
  351. .timeBox {
  352. display: flex;
  353. align-items: center;
  354. justify-content: space-between;
  355. margin-bottom: 10rpx;
  356. .iconRight {
  357. background: #000;
  358. border-radius: 50%;
  359. color: #fff;
  360. width: 35rpx;
  361. height: 35rpx;
  362. display: flex;
  363. align-items: center;
  364. justify-content: center;
  365. font-weight: bold;
  366. }
  367. }
  368. }
  369. .selectAllBox {
  370. margin-bottom: 20rpx;
  371. }
  372. .forBox {
  373. display: flex;
  374. margin-bottom: 20rpx;
  375. .forBox_img {
  376. flex: 1;
  377. width: 180rpx;
  378. height: 180rpx;
  379. }
  380. .forBox_text {
  381. flex: 2;
  382. margin-left: 20rpx;
  383. width: 100%;
  384. .specialOffer {
  385. color: #dd451b;
  386. font-size: 40rpx;
  387. font-weight: 500;
  388. }
  389. .timerBox {
  390. display: flex;
  391. justify-content: flex-end;
  392. }
  393. }
  394. }
  395. .bottomPurchase {
  396. position: fixed;
  397. bottom: 0;
  398. background-color: #fff;
  399. width: 100%;
  400. z-index: 10;
  401. .bottomPurchase_flex {
  402. display: flex;
  403. justify-content: space-between;
  404. align-items: center;
  405. padding: 0 40rpx;
  406. height: 120rpx;
  407. box-sizing: border-box;
  408. .paymentButton {
  409. background: #dd451b;
  410. display: flex;
  411. align-items: center;
  412. padding: 20rpx 30rpx;
  413. color: #fff;
  414. border-radius: 40rpx;
  415. }
  416. .noPaymentButton {
  417. background: #999;
  418. filter: grayscale(50%);
  419. display: flex;
  420. align-items: center;
  421. padding: 20rpx 30rpx;
  422. color: #fff;
  423. border-radius: 40rpx;
  424. }
  425. }
  426. }
  427. </style>