Browse Source

feat(保险): 添加保险可选功能及免责声明组件

- 将保险从必买改为可选,添加保险选择框
- 新增免责声明组件,在取消保险时显示
- 修改支付页面添加拒绝按钮和免责声明逻辑
- 更新相关API调用添加buyInsurance参数
- 优化订单处理逻辑和错误提示
master
前端-胡立永 1 week ago
parent
commit
473f0dbc39
6 changed files with 184 additions and 82 deletions
  1. +2
    -2
      common/config.js
  2. +58
    -0
      components/disclaimer/index.vue
  3. +27
    -3
      pages_subpack/pay/index.vue
  4. +56
    -60
      pages_subpack/payment/index.vue
  5. +40
    -16
      pages_subpack/work-detail/index.vue
  6. +1
    -1
      store/modules/data.js

+ 2
- 2
common/config.js View File

@ -3,8 +3,8 @@ module.exports = {
// baseUrl:"https://employadmin.hhlm1688.com" // baseUrl:"https://employadmin.hhlm1688.com"
// baseUrl:"http://h5.xzaiyp.top", //测试环境 // baseUrl:"http://h5.xzaiyp.top", //测试环境
// baseUrl:"http://youyi-test.natapp1.cc", // baseUrl:"http://youyi-test.natapp1.cc",
baseUrl:"http://127.0.0.1:8002",
// baseUrl:"https://admin.zhixuanlietou.com",
// baseUrl:"http://127.0.0.1:8003",
baseUrl:"https://admin.zhixuanlietou.com",
// http://youyi-test.natapp1.cc // http://youyi-test.natapp1.cc


+ 58
- 0
components/disclaimer/index.vue View File

@ -0,0 +1,58 @@
<template>
<u-popup :show="show" :custom-style="{alignItems:'center'}" mode="center" bg-color="transparent">
<view class="se-w-600 se-bgc-white se-br-40 se-p-40">
<view class="se-flex se-flex-h-c se-fs-34 se-fw-6 se-c-black se-mt-0">
免责声明
</view>
<view class="se-lh-40 se-mt-40 se-fs-24 se-c-99">
<u-parse :content="content" v-if="content"></u-parse>
<!-- <text v-else>您选择不购买保险意味着您将自行承担工作过程中可能发生的意外风险和责任平台不承担任何相关责任请您谨慎考虑并确认同意此声明</text> -->
</view>
<view class="se-flex se-flex-h-sb se-mt-40">
<view @click="onCancel()" class="se-br-20 se-flex-1 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-66 se-bgc-f5 se-mr-20">
<text>取消</text>
</view>
<view @click="onConfirm()" class="se-br-20 se-flex-1 se-flex-h-c se-h-80 se-lh-80 se-ta-c se-fs-28 se-c-white se-bgc-orange">
<text>同意并继续</text>
</view>
</view>
</view>
</u-popup>
</template>
<script>
export default {
name: 'DisclaimerModal',
data() {
return {
show: false,
content : '',
}
},
computed: {
},
methods: {
//
open() {
let configList = this.$store.state.data.configList
this.content = configList.Insurance_Exemption_Agreement
console.log(configList);
this.show = true;
},
//
onCancel() {
this.show = false;
this.$emit('cancel');
},
//
onConfirm() {
this.show = false;
this.$emit('confirm');
}
}
}
</script>
<style scoped>
/* 组件样式 */
</style>

+ 27
- 3
pages_subpack/pay/index.vue View File

@ -33,11 +33,12 @@
<template v-if="detail.type == 1"> <template v-if="detail.type == 1">
<view class="se-flex se-flex-h-sb se-pt-20"> <view class="se-flex se-flex-h-sb se-pt-20">
<view class="se-flex se-flex-h-fs"> <view class="se-flex se-flex-h-fs">
<image class="se-w-30 se-h-40" src="@/static/image/46524.png" mode=""></image>
<u-checkbox v-model="insuranceChecked" @change="onInsuranceChange" activeColor="#ff7a31" shape="circle" size="16"></u-checkbox>
<image class="se-w-30 se-h-40 se-ml-10" src="@/static/image/46524.png" mode=""></image>
<text class="se-c-black se-fs-32 se-ml-20">保险费</text> <text class="se-c-black se-fs-32 se-ml-20">保险费</text>
</view> </view>
<view> <view>
<text class="se-c-orange se-fs-32 se-ml-20">{{ detail.premium }}</text>
<text class="se-c-orange se-fs-32 se-ml-20">{{ insuranceChecked ? detail.premium : 0 }}</text>
</view> </view>
</view> </view>
<view class="se-flex se-flex-h-sb se-pt-20" <view class="se-flex se-flex-h-sb se-pt-20"
@ -109,6 +110,9 @@
立即支付 立即支付
</view> </view>
</view> </view>
<!-- 免责声明组件 -->
<disclaimer-modal ref="disclaimerModal" @cancel="onDisclaimerCancel" @confirm="onDisclaimerConfirm"></disclaimer-modal>
</view> </view>
</template> </template>
@ -121,7 +125,11 @@
userInfo, userInfo,
} from "@/common/api.js" } from "@/common/api.js"
import position from "@/utils/position.js" import position from "@/utils/position.js"
import DisclaimerModal from "@/components/disclaimer/index.vue"
export default { export default {
components: {
DisclaimerModal
},
data() { data() {
return { return {
amount: 0, amount: 0,
@ -129,6 +137,7 @@
orderId : 0, orderId : 0,
checked : 0, checked : 0,
detail : {}, detail : {},
insuranceChecked: true, //
// type 0 // type 0
// type 1 // type 1
@ -149,7 +158,7 @@
// type 0 // type 0
// type 1 // type 1
let basePrice = Number(this.detail.payMoney) || 0; let basePrice = Number(this.detail.payMoney) || 0;
let premiumFee = Number(this.detail.premium) || 0;
let premiumFee = this.insuranceChecked ? (Number(this.detail.premium) || 0) : 0;
let trafficFee = Number(this.fare) || 0; let trafficFee = Number(this.fare) || 0;
if (this.detail.type == 1) { if (this.detail.type == 1) {
@ -243,6 +252,20 @@
url: "/pages_subpack/order-detail/index" url: "/pages_subpack/order-detail/index"
}) })
}, },
onInsuranceChange(value) {
if (!value) {
//
this.$refs.disclaimerModal.open();
}
},
onDisclaimerCancel() {
//
this.insuranceChecked = true;
},
onDisclaimerConfirm() {
//
//
},
payOrderCompany() { payOrderCompany() {
let that = this let that = this
@ -258,6 +281,7 @@
orderId: this.orderId, orderId: this.orderId,
payType: this.payRadio, payType: this.payRadio,
fare : this.fare || 0,// fare : this.fare || 0,//
buyInsurance: this.insuranceChecked //
} }
payOrderCompany(data) payOrderCompany(data)


+ 56
- 60
pages_subpack/payment/index.vue View File

@ -27,7 +27,7 @@
<view class="se-flex se-flex-ai-c se-pb-10"> <view class="se-flex se-flex-ai-c se-pb-10">
<view class="line-orange"></view> <view class="line-orange"></view>
<view class="se-ml-10 se-fs-30 se-c-black se-fw-5"> <view class="se-ml-10 se-fs-30 se-c-black se-fw-5">
购买保险(必买)
购买保险(可选)
</view> </view>
</view> </view>
</view> </view>
@ -68,8 +68,13 @@
<text class="se-fs-24">合计</text> <text class="se-fs-24">合计</text>
<text class="se-c-orange">{{items.premium}}</text> <text class="se-c-orange">{{items.premium}}</text>
</view> </view>
<view @click="onPay()" class="se-mr-30 se-w-240 se-h-80 se-lh-80 se-ta-c se-c-white se-fs-32 se-br-40 se-bgc-orange">
立即支付
<view class="se-flex se-mr-30">
<view @click="onReject()" class="se-mr-20 se-w-120 se-h-80 se-lh-80 se-ta-c se-c-orange se-fs-28 se-br-40 se-b se-bc-orange">
拒绝
</view>
<view @click="onPay()" class="se-w-240 se-h-80 se-lh-80 se-ta-c se-c-white se-fs-32 se-br-40 se-bgc-orange">
立即支付
</view>
</view> </view>
</view> </view>
<u-popup :show="show" :custom-style="{alignItems:'center'}" mode="center" bg-color="transparent"> <u-popup :show="show" :custom-style="{alignItems:'center'}" mode="center" bg-color="transparent">
@ -87,6 +92,9 @@
</view> </view>
</view> </view>
</u-popup> </u-popup>
<!-- 免责声明组件 -->
<disclaimer-modal ref="disclaimerModal" @cancel="onDisclaimerCancel" @confirm="onDisclaimerConfirm"></disclaimer-modal>
</view> </view>
</template> </template>
@ -94,7 +102,11 @@
import { import {
getTaskById,orderTask,orderDetail,userInfo,payOrder getTaskById,orderTask,orderDetail,userInfo,payOrder
} from "@/common/api.js" } from "@/common/api.js"
import DisclaimerModal from "@/components/disclaimer/index.vue"
export default{ export default{
components: {
DisclaimerModal
},
data(){ data(){
return{ return{
show:false, show:false,
@ -142,6 +154,19 @@
}) })
}, },
onPay(){ onPay(){
this.payWithInsurance(true);
},
onReject(){
this.$refs.disclaimerModal.open();
},
onDisclaimerCancel(){
//
},
onDisclaimerConfirm(){
//
this.payWithInsurance(false);
},
payWithInsurance(buyInsurance){
let that = this let that = this
console.info(that.checked) console.info(that.checked)
if(that.checked.length==0){ if(that.checked.length==0){
@ -154,65 +179,36 @@
let data = { let data = {
orderId : that.id, orderId : that.id,
payType : that.payRadio, payType : that.payRadio,
buyInsurance: buyInsurance //
} }
// if(that.payRadio==1){
payOrder(data).then(res=>{
if(data.payType == '2'){
uni.requestPayment({
provider: 'wxpay', //
timeStamp: res.result.timeStamp, //
nonceStr: res.result.nonceStr, //
package: res.result.packageValue,
signType: res.result.signType, //
paySign: res.result.paySign, //
success: function (res) {
that.onDetail();
},
fail: function (err) {
uni.showToast({
icon:'none',
title:"支付失败"
})
}
});
}else if(res.code == 200){
that.onDetail();
}
}).catch(error=>{
})
// }else if(that.payRadio==2){
// payOrder({orderId:that.id}).then(response=>{
// console.info("payOrder",response)
// uni.requestPayment({
// provider: "wxpay",
// nonceStr: response.result.nonceStr,
// package: response.result.package,
// timeStamp: response.result.timeStamp,
// signType: response.result.signType,
// paySign: response.result.paySign,
// success(res) {
// that.$u.toast("")
// that.onDetail();
// },
// fail(err) {
// console.info(err)
// console.log('',err);
// uni.showToast({
// icon:'none',
// title:""
// })
// }
// })
// }).catch(error=>{
// })
// }
payOrder(data).then(res=>{
if(data.payType == '2'){
uni.requestPayment({
provider: 'wxpay', //
timeStamp: res.result.timeStamp, //
nonceStr: res.result.nonceStr, //
package: res.result.packageValue,
signType: res.result.signType, //
paySign: res.result.paySign, //
success: function (res) {
that.onDetail();
},
fail: function (err) {
uni.showToast({
icon:'none',
title:"支付失败"
})
}
});
}else if(res.code == 200){
that.onDetail();
}
}).catch(error=>{
})
}, },
onDetail(){ onDetail(){
uni.redirectTo({ uni.redirectTo({


+ 40
- 16
pages_subpack/work-detail/index.vue View File

@ -155,25 +155,49 @@
addOrderWork({id:this.id}).then(response=>{ addOrderWork({id:this.id}).then(response=>{
uni.hideLoading() uni.hideLoading()
console.log("下单成功"); console.log("下单成功");
uni.navigateTo({
url:"/pages_subpack/payment/index?id="+response.result.id
})
//
if (response.result) {
uni.navigateTo({
url:"/pages_subpack/payment/index?id="+response.result.id
})
} else {
// 0
uni.showToast({
title: '操作完成',
icon: 'success'
})
}
}).catch(error=>{ }).catch(error=>{
console.log(error); console.log(error);
setTimeout(()=>{
if (error.result && error.result.id) {
if(error.result.orderStatusSeek == 'Y'){
uni.navigateTo({
url:"/pages_subpack/order-detail/index?orderId="+error.result.id
})
}else{
uni.navigateTo({
url:"/pages_subpack/payment/index?id="+error.result.id
})
}
}
}, 800);
uni.hideLoading() uni.hideLoading()
//
if (error.result && error.result.id) {
//
if (error.result.status == 0) {
setTimeout(()=>{
if(error.result.orderStatusSeek == 'Y'){
uni.navigateTo({
url:"/pages_subpack/order-detail/index?orderId="+error.result.id
})
}else{
uni.navigateTo({
url:"/pages_subpack/payment/index?id="+error.result.id
})
}
}, 800);
} else {
//
uni.showToast({
title: error.message || '操作失败',
icon: 'none'
})
}
} else {
uni.showToast({
title: error.message || '操作失败',
icon: 'none'
})
}
}) })
}, },
openAddress(){ openAddress(){


+ 1
- 1
store/modules/data.js View File

@ -28,7 +28,7 @@ export default {
if (res.code == 200) { if (res.code == 200) {
res.result.forEach(n => { res.result.forEach(n => {
configList[n.paramCode] = n.paramValueText || configList[n.paramCode] = n.paramValueText ||
n.paramValue ||
n.paramValueTextarea ||
n.paramValueImage n.paramValueImage
}); });
} }


Loading…
Cancel
Save