软测宝小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
keysass_app/pages/index/toolleasing/tooldetails.vue

746 lines
24 KiB

7 months ago
<template>
<view>
<img class="logobg" v-if="tooldetilsdata.tool.headimg" :src="tooldetilsdata.tool.headimg" alt="" />
<img class="logobg" v-else src="http://image.keyitest.cn/g1.png" alt="" />
<!-- <img class="logoauto" src="http://image.keyitest.cn/static/index/g2.png" alt="" /> -->
<!-- <img class="logoauto" v-if="tooldetilsdata.tool.name=='代码静态分析工具'" :src="logoimg" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='源代码安全检测工具'" :src="logoimg" style="width:256rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='C/C++单元测试工具'" :src="logoimg" style="width:240rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='接口测试工具'" :src="logoimg" style="width:220rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='JAVA单元测试工具'" :src="logoimg" style="width:240rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='功能测试工具AutoFun'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='代码组成分析平台'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='性能测试工具'" :src="logoimg" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='自鉴-交互式应用安全测试系统IAST'" :src="logoimg" style="width:230rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='Web应用安全测试工具'" :src="logoimg" style="width:250rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='资产识别及漏洞管理工具'" :src="logoimg" style="width:340rpx" alt="">
<img class="logoauto" v-if="tooldetilsdata.tool.name=='性能测试工具AutoLoad'" :src="logoimg" alt=""> -->
<view class="schedule" v-if="tooldetilsdata.tool">
<view class="wboeder" style='margin-bottom: 15px;'>
<view style='display:flex;justify-content:space-between;'>
<p v-if="tooldetilsdata.tool.price == 0" style="color:#FD461A;">
限时免费
</p>
<p v-else style="color:#FD461A;">
<span>¥ </span>
<span
style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">{{tooldetilsdata.tool.price}}</span>
</p>
<!-- <p style="color:#999999;font-size:24rpx;">销量350个</p> -->
</view>
<view style='display:flex;align-items: center;margin:30rpx 0'>
<!-- <img style="width:1.2rem;height:1.7rem" src="http://image.keyitest.cn/static/index/hot.png"></image> -->
<p style='font-size:35rpx;font-weight: bold;color: #333333'>
{{tooldetilsdata.tool.name}}
</p>
</view>
<view style='display:flex;margin:30rpx 0'>
<view class="tabone">类型
{{findLabelValueByPropnew(tooltypelist, tooldetilsdata.tool.toolType+'', 'dictValue', 'dictLabel' ) }}
</view>
<view class="tabone" style="color: #FF8A00;border: 1px solid #FF8A00;margin-left: 10px;">
交付方式{{tooldetilsdata.tool.deliverType}}</view>
</view>
<!-- <view style="font-size: 26rpx;">
<span style="color: #808080;">用户评分</span>
<span style="color: #F77811;margin-left:10rpx"> 5</span>
</view> -->
</view>
<view class="wboeder" style="padding-bottom:30px;">
<view style='display:flex;align-items: center;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品简介</p>
</view>
<p class="textx" style="margin-top: 20rpx;">{{tooldetilsdata.tool.toolDesc}}</p>
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品功能</p>
</view>
<view class="square" v-for="(item,key) of tooldetilsdata.functionList" :key="key">
<!-- <view class="sloi"></view> -->
<p class="textp" v-if="item.funType==0">{{item.title}} : {{item.funDesc}}</p>
</view>
<!-- <view class="square" style="margin-top: 80rpx;">
<view class="sloi"></view>
<p class="textp">脚本录制与回放支持侵入式非侵入式两种脚本录制与回放方式适应不同的测试场景
侵入式脚本录制和回放支持常用的Win32应用程序MFC应用QT应用VB应用和主流浏览器IE浏览器Firefox浏览器Chrome浏览器
非侵入式测试对被测系统无要求
</p>
</view>
<view class="square" style="margin-top:249rpx;">
<view class="sloi"></view>
<p class="textp">参数化图表使用图表方式编辑数据驱动参数测试执行时脚本自动读取参数值完成测试</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">关键字视图采用图形化方式展示测试步骤方便非编程人员编辑测试用例</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">分布式测试具备多终端协同测试的能力支持典型分布式系统的测试</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">第三方集成提供API调用接口通过API接口与第三方测试平台进行集成</p>
</view>
-->
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品亮点</p>
</view>
<view class="square" v-for="(item,key) of tooldetilsdata.functionList" :key="key">
<p class="textp" v-if="item.funType==1">{{item.title}} : {{item.funDesc}}</p>
</view>
<!-- <view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">图形化关键字图形化关键字方便非编程人员编辑测试用例</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">支持多种被测目标支持多种被测目标包括MFC程序QT程序VB程序IEFirefox等</p>
</view>
<view class="square" style="margin-top:80rpx;">
<view class="sloi"></view>
<p class="textp">具备非侵入式测的能力具备非侵入式测的能力能够在不改变被测设备软件环境的情况下完成测试</p>
</view> -->
<view v-if="tooldetilsdata.tool.vedio" style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>产品视频</p>
</view>
<!-- <video v-if="video" :src="video" style="width: 100%;height:42vw " ></video> -->
<!-- <img v-else style="width: 100%;height:42vw " src="http://image.keyitest.cn/static/index/vider.png" alt="" /> -->
<video id="video1" v-if="tooldetilsdata.tool.vedio" :src="tooldetilsdata.tool.vedio" controls
style="width: 100%;height:42vw"></video>
<view style='display:flex;align-items: center;margin:15px 0 10px 0;'>
<view class="linex"></view>
<p style='font-size:30rpx;font-weight: bold;color:#000000;margin-left:10px'>常见问题</p>
</view>
<view style="font-size: 26rpx;line-height: 42rpx;">
<!-- <p style="color: #404040;font-weight: 700;">1. 什么是静态测试</p> -->
<p v-if='tooldetilsdata.tool.productQA'
style="color:#808080;white-space:pre-line;font-size: .9rem;">{{tooldetilsdata.tool.productQA}}
</p>
<p v-else style="color:#808080;font-size: 1rem;">暂无问题</p>
<!-- <p style="color:#808080;">静态测试又可分为代码走查代码审查技术评审
代码走查
开发组内部进行的采用讲解讨论和模拟运行的方式进行的查找错误的活动
代码审查
开发组内部进行的采用讲解提问并使用编码模板进行</p> -->
<!-- <p style="color: #404040;font-weight: 700;">2. 静态测试工具能做什么<p> -->
<!-- <p style="color:#808080;">静态测试工具可以在不运行被测程序本身仅通过分析或检查源程序的语法结构过程接口等来检查程序的正确性</p> -->
</view>
</view>
</view>
<view class="submitt" style="display: flex;justify-content: space-between;padding: 10px 20px;">
<view style="display: flex;">
<view class="kfgw" @click="addcart('kefu')">
<img src="http://image.keyitest.cn/static/index/kf.png" alt="">
<p>客服</p>
</view>
<!-- <view class="kfgw" @click="addcart('cart')">
<img src="http://image.keyitest.cn/static/index/gwc.png" alt="">
<p>购物车</p>
</view> -->
</view>
<view style="display: flex;">
<!-- <view class="button-g" @click="addcart('add')">加入购物车</view> -->
<view class="button-g" style="background: linear-gradient(90deg, #5EA6FD, #1A81F9);" @click="nowBuy">
立即购买</view>
</view>
</view>
<u-toast ref="uToast" />
<u-popup style="background:#66666;padding: 20px;" v-model="isPopupShow" @close="close" @open="open"
mode="bottom" length="80%" height='60%' border-radius="15" :closeable='true' :mask-close-able="false">
<view style="background:#66666;padding:15px 20px 80px 20px; ">
<view style="background-color: #FFFFFF;">
<view class="horizontalline"></view>
<view>
<view class="commodity">
<p>商品名称</p>
<p style="color:#333333;">{{tooldetilsdata.tool.name}}</p>
</view>
<view class="commodity">
<p>商品规格</p>
<u-input border style="width:60%;height: 40rpx;" v-model="typeName" type="select"
@click="typeShow = true" />
<u-select v-model="typeShow"
:list="tooldetilsdata.tool.deliverType=='SaaS' ? typeList : typeList1"
@confirm="citychange" mode="mutil-column-auto"></u-select>
</view>
<!-- <view class="commodity">
<p>交付方式</p>
<p style="color:#333333;">{{tooldetilsdata.tool.deliverType}}</p>
</view> -->
<view class="commodity">
<p>商品价格</p>
<p style="color:#333333;">
<span v-if="typeName == '测试服务(按次计)' && tooldetilsdata.tool.priceTime == 0">限时免费</span>
<span v-if="typeName == '使用时长(按月计)' && tooldetilsdata.tool.price == 0">限时免费</span>
<span
v-else>{{ typeName == '测试服务(按次计)' ? tooldetilsdata.tool.priceTime : tooldetilsdata.tool.price }}</span>
<!-- {{tooldetilsdata.tool.price}} -->
</p>
</view>
<view class="commodity">
<p>购买数量</p>
<u-number-box v-model="cartnumber" @change="valChange"></u-number-box>
<!-- <p style="color:#333333 ;">Kinterface接口测试工具-软件版</p> -->
</view>
<view class="commodity">
<p>支付金额</p>
<p style="color:#FD461A;margin-top: -3px;" v-if="addPriceAll!=0">
<span>¥ </span>
<span style="font-size:40rpx;margin-left:10rpx;font-weight: 800;">{{addPriceAll}}</span>
</p>
<p style="color:#FD461A;margin-top: -3px;" v-else>
<span>限时免费</span>
</p>
</view>
<view class="commodity">
<p>支付方式</p>
<p style="color:#FD461A;margin-top: -3px;">
<u-radio-group v-model="payTypeBig" @change="payTypeChange" placement="row">
<u-radio name="0">微信支付</u-radio>
<u-radio name="1" :disabled="lingqianIS">{{lingqianIS ? '零钱不足':'零钱'}}</u-radio>
</u-radio-group>
</p>
</view>
</view>
</view>
</view>
<u-line></u-line>
<view class="submitt"
style="display: flex;justify-content: center; ;box-shadow:none;background: transparent;padding:0;">
<!-- <view class="button-g"
style="width:43vw;background:#FFFFFF;border: 1px solid #1578ED;color: #1578ED;margin-left: 0;"
@click="shopping('rests')">重置</view> -->
<view class="button-g"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF"
@click="payOrder">支付</view>
</view>
</u-popup>
<!-- 零钱支付密码 -->
<u-popup style="background:#66666;padding: 20px;" v-model="lqPasswordShow" mode="bottom" length="80%"
height='40%' border-radius="15" :closeable='true' :mask-close-able="false">
<!-- <u-code-input dot v-model="qbpassword" :maxlength="6"></u-code-input> -->
<view style="height:100rpx">
</view>
<u-message-input :dot-fill="true" :maxlength="6" @change="finish"></u-message-input>
<view class="button-g"
style="width:80vw; background: linear-gradient(90deg, #5EA6FD, #1A81F9);color: #FFFFFF;margin-top: 80rpx;margin-left: 80rpx;"
@click="lqPay">支付</view>
</u-popup>
<u-modal title='温馨提示' v-model="tokenshow" content="您还没有登录" confirm-text='现在就去' cancel-text='稍等一下'
show-cancel-button='true' cancel-color='#1578ED' confirm-color='#1578ED' @confirm="confirm"
@cancel='tokenshow=false'></u-modal>
</view>
</template>
<script>
import tool from '@/utils/mixin/tootype.js'
import {
findLabelValueByPropnew
} from '@/utils/util.js'
import {
encrypt,
decrypt
} from '@/utils/encrypt.js'
export default {
mixins: [tool],
data() {
return {
base: this.http.baseUrl,
typeShow: false,
typeName: '使用时长(按月计)',
typeList: [{
value: '测试服务(按次计)',
label: '测试服务(按次计)'
}, {
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
typeList1: [{
value: '使用时长(按月计)',
label: '使用时长(按月计)'
}],
tooldetilsdata: {},
logoimg: '',
isPopupShow: false,
cartnumber: 1,
allpirse: 0,
video: '',
tokenshow: false,
payTypeBig: '0',
lingqianIS: false,
lqPasswordShow: false,
qbpassword: '',
}
},
computed: {
addPriceAll() {
if (this.typeName == '测试服务(按次计)') {
return this.tooldetilsdata.tool.priceTime * this.cartnumber
} else {
return this.tooldetilsdata.tool.price * this.cartnumber
}
}
},
onLoad(options) {
this.http.quickGet(`/business/tool/detail?toolId=${options.id}`).then(res => {
this.tooldetilsdata = res.data
// 处理视频头像
if (this.tooldetilsdata.fileInfoList.length) {
this.tooldetilsdata.fileInfoList.forEach((it) => {
if (it.fileType == 'vedio') {
// mp4
this.tooldetilsdata.tool.vedio = it.fileUrl
}
if (it.fileType == 'head') {
// mp4
this.tooldetilsdata.tool.headimg = it.fileUrl
}
})
}
})
},
onReady() {
// setTimeout(()=>{
// uni.createVideoContext('video1').pause();
// },200)
// uni.requestPayment({
// timeStamp: '1714208088',
// nonceStr: '6e3323d68a2a4659a6c9df15b34a0f30',
// package: 'prepay_id=wx27165448535775baa3aeff767e6b180001',
// signType: 'RSA',
// paySign: 'k0vFRre/LhpjWRcFeGBpeyEEVDut4Y6vINJCttGINZ0RulB9MAw02K7YnHEIimtGL1dUfZtF4Eh93GimWsuuqIAvT5qdirRzVviQxAiLF5QZXCptmj1/MaTev75SZfBBC7dJvOnlIMFpk4QTLJNyjq519isZg8GAQwtFNIENRxFqTRHTCh8l5A3RWZEIhw0qBvzq6q9FVl7TFCA7RLRjPfVYnSTCSJdwxYE0AU38K+314KD7mR4mnIEzKGKCnKoAGHXIabEwFuebZjtgBhBcHI9J9iXltC5qcgn8Nskk6tJvhnAmRdmGdDeW7CdyPouTA9rjwcA2juRsL4hJ3W7dWg==',
// success(r) {
// uni.showToast({
// icon: 'none',
// title: '支付成功,请前往pc端工作台使用'
// })
// },
// fail(error) {
// console.log(error);
// uni.showToast({
// icon: 'none',
// title: '支付失败'
// })
// }
// })
},
methods: {
findLabelValueByPropnew,
// 支付方式改变
payTypeChange(e) {
console.log(e);
},
finish(e) {
this.qbpassword = e
},
// 零钱支付
lqPay() {
const userinform = uni.getStorageSync('wxUserInfo');
const id = userinform.userId
const data = {
toolId: this.tooldetilsdata.tool.toolId,
amount: this.cartnumber,
deliverType: this.tooldetilsdata.tool.deliverType,
price: this.typeName == '使用时长(按月计)' ? this.tooldetilsdata.tool.price : this.tooldetilsdata.tool
.priceTime,
priceType: this.typeName == '使用时长(按月计)' ? 'month' : 'times',
payType: 'WALLET',
paytype: 'WALLET',
toolType: this.tooldetilsdata.tool.toolType,
userId: id,
password: encrypt(this.qbpassword),
recordName: '购买工具:' + this.tooldetilsdata.tool.name
}
this.http.quickPost(`/play/allin_play`, data, true).then(res => {
if (res.data.retcode == 'SUCCESS') {
uni.showToast({
icon: 'none',
title: '支付成功,请前往pc端工作台使用'
})
this.lqPasswordShow = false
this.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
} else {
uni.showToast({
icon: 'none',
title: '支付失败,请联系管理员'
})
}
})
},
// 支付
payOrder() {
const that = this
// 支付参数
const userinform = uni.getStorageSync('wxUserInfo');
const id = userinform.userId
const data = {
toolId: this.tooldetilsdata.tool.toolId,
amount: this.cartnumber,
deliverType: this.tooldetilsdata.tool.deliverType,
price: this.typeName == '使用时长(按月计)' ? this.tooldetilsdata.tool.price : this.tooldetilsdata.tool
.priceTime,
priceType: this.typeName == '使用时长(按月计)' ? 'month' : 'times',
payType: 'W06',
paytype: 'W06',
toolType: this.tooldetilsdata.tool.toolType,
userId: id
}
if (this.addPriceAll == 0) {
// 免费试用
this.http.quickPost(`/business/tool/nopay/one`, data, true).then(res => {
uni.showToast({
icon: 'none',
title: '购买成功,请前往PC端工作台使用'
})
this.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
})
} else {
// 付费
// 微信支付
if (this.payTypeBig == 0) {
this.http.quickPost(`/play/allin_play`, data, true).then(res => {
if (res.data.retcode == 'SUCCESS') {
const info = JSON.parse(res.data.payinfo)
uni.requestPayment({
timeStamp: info.timeStamp,
nonceStr: info.nonceStr,
package: info.package,
signType: info.signType,
paySign: info.paySign,
success(r) {
uni.showToast({
icon: 'none',
title: '支付成功,请前往pc端工作台使用'
})
that.isPopupShow = false
setTimeout(() => {
uni.navigateTo({
url: '/pages/personal/ordernumber/ordernumber?current=0'
})
},1000)
},
fail(error) {
console.log(error);
uni.showToast({
icon: 'none',
title: '支付失败'
})
}
})
} else {
uni.showToast({
icon: 'none',
title: '支付错误,请联系管理员'
})
}
})
} else {
// 零钱支付 先查零钱够不够
const wxUserInfo = uni.getStorageSync('wxUserInfo');
const userId = wxUserInfo.userId
this.http.quickGet(`/mpay/my/account/${userId}`, true).then(res => {
const mycount = res.data.balance
// 查询钱包余额是否足够
if (this.addPriceAll > mycount) {
// 钱不够 提示
this.lingqianIS = true
this.payTypeBig = '0'
uni.showToast({
icon: 'none',
title: '您的零钱不足,请使用微信支付'
})
} else {
// 钱够了 输密码支付
this.lqPasswordShow = true
}
})
}
}
},
citychange(e) {
this.typeName = e[0].label
},
nowBuy() {
let accessToken = uni.getStorageSync('accessToken');
console.log(accessToken);
if (!accessToken) {
this.tokenshow = true
return
}
this.isPopupShow = true
},
confirm() {
uni.navigateTo({
url: '/pages/personal/login'
})
},
addcart(type) {
// uni.showToast({
// title: '该功能开发中',
// icon: 'none',
// duration: 1000
// });
// return;
let accessToken = uni.getStorageSync('accessToken');
if (!accessToken) {
this.tokenshow = true
} else {
if (type == 'add') {
this.isPopupShow = true
} else if (type == 'sunl') {
// let allselectdata = [];
// allselectdata.push(this.tooldetilsdata.tool)
// // console.log('ddd',allselectdata)
// this.$refs.uToast.show({
// title: '功能暂未开放',
// type: 'info',
// duration: 2000,
// })
} else if (type == 'kefu') {
this.$refs.uToast.show({
title: '功能暂未开通',
type: 'info',
url: '/pages/user/index'
})
} else if (type == 'cart') {
uni.switchTab({
url: '/pages/shoppingtrolley/shoppingtrolley'
})
}
}
},
open() {
// console.log('open');
},
close() {
this.isPopupShow = false
// console.log('close');
},
valChange(e) {
this.allpirse = e.value * this.tooldetilsdata.tool.price
console.log('当前值为: ' + e.value)
},
shopping(type) {
uni.showToast({
title: '该功能开发中',
icon: 'none',
duration: 1000
});
return;
if (type == 'rests') {
this.cartnumber = 0
} else {
console.log('加入购物车: ')
this.http.quickGet(`/my/addShoppingCart/${this.tooldetilsdata.tool.toolId}/${this.cartnumber}`, true)
.then(res => {
this.$refs.uToast.show({
title: '添加购物车成功',
type: 'success',
duration: 1000,
isTab: true,
url: '/pages/shoppingtrolley/shoppingtrolley'
})
// this.http.quickGet(`/message/my/count`).then(res => {
// // console.log('信息购物车数量',res)
// store.commit('SET_CARTCOUNT',res.cartCount);
// setTimeout(() => {
// uni.switchTab({
// url:'/pages/shoppingtrolley/shoppingtrolley'
// })
// },1000);
// })
})
}
}
}
}
</script>
<style>
.commodity>>>input {
min-height: 40rpx !important;
}
.logobg {
width: 100vw;
object-fit: contain;
position: relative;
/* z-index:0; */
}
.logoauto {
width: 200rpx;
height: 200rpx;
object-fit: contain;
position: absolute;
top: 10%;
left: 37%;
}
.schedule {
width: 94vw;
margin: 15px 3vw 20px 3vw;
}
.tabone {
/* width: 98rpx; */
padding: 6rpx;
/* height: 33rpx; */
border: 1px solid #2B80FC;
border-radius: 4rpx;
font-size: 22rpx;
font-weight: 500;
color: #2387EE;
text-align: center;
line-height: 33rpx;
}
.linex {
width: 6rpx;
height: 26rpx;
background: #1578ED;
border-radius: 3rpx;
}
.wboeder {
/* width:92%; */
padding: 15px 4%;
background: #FFFFFF;
border-radius: 10rpx;
margin-bottom: 20px;
}
.textx {
font-size: 26rpx;
font-weight: 500;
color: #808080;
line-height: 42rpx;
}
.textp {
font-size: 26rpx;
font-weight: 500;
color: #808080;
line-height: 42rpx;
/* position: absolute;
left: 13px;
top: -10px; */
line-height: 23px;
display: block
}
.sloi {
width: 10rpx;
height: 10rpx;
background: #727578;
border-radius: 50%;
text-indent: 1.5em;
margin-right: 10px;
/* margin-top:-20px; */
}
.square {
/* position: relative; */
display: flex;
/* display:flex;
margin-bottom:10px */
}
.square :before {
background: #727578;
border-radius: 50%;
content: "";
display: inline-block;
height: 7px;
margin-bottom: 2px;
margin-right: 6px;
width: 7px;
}
.submitt {
height: 60px;
/* line-height: 55px; */
/* text-align: center; */
font-size: 20px;
background: #FFFFFF;
box-shadow: -4px 7px 18px 0px rgba(248, 164, 54, 0.33);
margin-top: 60px;
position: fixed;
bottom: 0;
width: 100vw;
padding: 10px 30px;
display: flex;
}
.kfgw {
display: flex;
flex-direction: column;
margin-right: 30rpx;
align-items: center;
}
.kfgw img {
width: 40rpx;
height: 40rpx;
}
.kfgw p {
color: #666666;
font-size: 22rpx;
}
.button-g {
width: 540rpx;
height: 70rpx;
background: linear-gradient(90deg, #FF8600, #FE2B2B);
border-radius: 35rpx;
text-align: center;
line-height: 70rpx;
color: #FFFFFF;
font-size: 30rpx;
margin-left: 13px;
}
.commodity {
display: flex;
color: #808080;
font-size: 30rpx;
margin: 20px 0;
}
</style>