details.vue 11 KB

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