Kaynağa Gözat

厦门销售合同增加

zhengjinyi 1 ay önce
ebeveyn
işleme
bb6827de06

+ 1 - 1
src/main/resources/static/css/base/base.pc.css

@@ -451,7 +451,7 @@ iframe{width:320px !important;height: 280px !important}
 #scrollTop .item .toNumber{
     display: block;
     font-style: normal;
-    padding: 2px 6px;
+    padding: 0px 6px;
     position: absolute;
     top: -2px;
     right: 7px;

+ 27 - 2
src/main/resources/static/css/shopping/shopping.css

@@ -17,6 +17,7 @@ li{list-style:none}
     .pageTitle h1{color:#2D3036;font-size:16px;font-weight:bold;float:left}
     .pageTitle h1 span{color:#627386;font-size:12px;font-weight:normal;margin-left:10px}
     h2.title{height:36px;font-size:16px;padding:0 ;line-height:36px;color:#22272e;font-weight:normal;clear:both}
+    h2.title.ri{text-align: right;}
     h2.title>a{color: #E15621;margin-left: 32px;}
     .pageTitle .step{float:right;color:#999999;font-size:14px;height:44px;line-height:44px}
     .pageTitle .step span{display:inline-block;height:20px;line-height:20px;vertical-align:middle;position:relative;padding-right:55px;}
@@ -29,7 +30,7 @@ li{list-style:none}
     .pageTitle .step span:nth-of-type(3):after{display:none}
     .pageTitle .step span.on,.pageTitle .step span.prev{color:#FF5B00}
     .pageTitle .step span.prev:after{border-color:#FF5B00;}
-    .listWrap .cartTit,.listWrap .supplierItem,.addressWrap,.balanceWrap,.invoiceWrap,.totalPriceWrap{border-radius: 8px;box-sizing:border-box;padding:0 14px;text-align:center;width:100%;background:#FFF;margin-bottom:8px;box-shadow:0px 3px 6px rgba(0,0,0,0.07)}
+    .listWrap .cartTit,.listWrap .supplierItem,.addressWrap,.balanceWrap,.invoiceWrap,.totalPriceWrap,.contractWrap{border-radius: 8px;box-sizing:border-box;padding:0 14px;text-align:center;width:100%;background:#FFF;margin-bottom:8px;box-shadow:0px 3px 6px rgba(0,0,0,0.07)}
     /* 商品清单 */
     .listWrap{width:100%}
     .listWrap .supplierItem.disable{background:#f1f0f5}
@@ -259,13 +260,15 @@ li{list-style:none}
     .model-address-content .button .btn-confirm{background-color:#FF5B00;color:#ffffff;margin-right:15px}
     .model-address-content .button .btn-cancel{background-color:#FFE6DC;color:#FF5B00}
     /* 余额 */
-    .balanceWrap{padding:16px;text-align:left}
+    .balanceWrap{padding:16px;text-align:right}
     .balanceWrap .text{display:inline-block;height:16px;line-height:16px;font-size:14px;color:#333;margin-left:15px;vertical-align:top}
     .balanceWrap .text .red{color:#FF2A2A}
+    .balanceWrap .check-input{margin-left: 10px;}
     .totalPriceWrap{line-height:36px;text-align:right;padding:16px;width: 100%;float: left;}
     .totalPriceWrap span{display:inline-block;width:160px;}
     .totalPriceWrap .pis{color: #FF5B00;}
     .totalPriceWrap span em{font-style:normal;color:#FF2A2A}
+
     /* 发票 */
     .invoiceWrap{padding:16px;text-align:left}
     .invoiceForm{margin-top: 15px;}
@@ -305,6 +308,28 @@ li{list-style:none}
     .coupon-popup .coupon-list-cell .coupon-list-ri span{display: block;width: 100%;height: 100%;box-sizing: border-box;padding: 45px 47px;}
     .coupon-popup .coupon-list-cell .coupon-list-ri span.none{padding: 45px 47px;}
     .coupon-popup .coupon-list-cell .coupon-tags{height: 24px;line-height: 24px;text-align: center;border-radius: 8px 0 8px 0;position: absolute;top: 0;left: 0;padding: 0 10px;background-color: #f94b4b;color: #FFF;}
+
+    /*订单销售合同*/
+    .contractWrap{ display: flex;justify-content: flex-end;align-items: center; padding: 16px;}
+    .contractWrap .check{ display: flex;justify-content: flex-end;align-items: center; }
+    .contractWrap .text{display:inline-block;height:16px;line-height:16px;font-size:14px;color:#333;margin-left:15px;vertical-align:center}
+    .contractWrap .text .red{color:#1890f9;cursor: pointer;}
+    .contractWrap .check-input{margin-left: 10px;cursor: pointer;}
+    .el-contract-content{ width: 100%;height: 600px; overflow-y: scroll;box-sizing: border-box;padding: 0 12px 0 0;}
+    .el-contract-content .text-h1{ font-size: 15px;text-align: left;line-height:34px;font-weight: 600;color: #333333; }
+    .el-contract-content .text-p{ font-size: 14px;text-align: left;line-height:32px;color: #666666; }
+    .el-contract-content .text-p span a{ color: #1890f9; }
+    .el-contract-content .text-h1.center{ text-align: center; }
+    .goods-template {  height: auto;background: #ffffff;box-sizing: border-box;padding: 10px 0;}
+    .goods-template .goods-list{  width: 840px;height: auto;}
+    .goods-template .goods-main{  width: 100%;min-height: 100px;border: 1px solid #999999;border-radius: 4px;display: flex;flex-direction: column;align-items: center;}
+    .goods-template .goods-main .goods-item{ width: 100%;border-bottom: 1px solid #999999;display: flex;justify-content: center;}
+    .goods-template .goods-main .goods-item:last-child {border-bottom: none;}
+    .goods-template .goods-main .goods-item .goods-item-td {width: 20%;display: flex;justify-content: center;align-items: center;flex-wrap: wrap;padding: 10px;font-size: 12px;line-height: 20px;color: #666666;box-sizing: border-box;border-right: 1px solid #999999;}
+    .goods-template .goods-main .goods-item .goods-item-td.small{ width: 10%; }
+    .goods-template .goods-main .goods-item .goods-item-td .red{ color: #ff2a2a; }
+    .goods-template .goods-main .goods-item .goods-item-td:last-child {border-right: none;}
+
     /*会员标签*/
     .listWrap .cartItem .priceTag .svip-tag{width:100%;height:22px;letter-spacing:0}
     .listWrap .cartItem .priceTag .svip-tag .svip-icon{position:relative;z-index:9;display:inline-block;width:30px;height:22px;text-align:center;line-height:22px;font-size:12px;font-weight:400;color:#F0CB72;opacity:1;background:#333333}

+ 21 - 1
src/main/resources/static/css/user-center/order/detail.css

@@ -32,7 +32,7 @@ li{list-style:none}
     .order-container .section .section-info .order-content .order-item p .none{color:#22272e;}
     /*商品信息*/
     .order-container .section-list{margin-bottom: 10px;width: 100%;height: auto;box-sizing:border-box;border-radius: 8px;}
-    .order-container .section-shopinfo{width: 100%;height: auto;box-sizing: border-box;padding: 0;background-color: #FFFFFF;}
+    .order-container .section-shopinfo{width: 100%;height: auto;box-sizing: border-box;padding: 0;background-color: #FFFFFF;border-radius: 8px;overflow: hidden; }
     .order-container .section-shopinfo .title{width: 100%;height: 56px;box-sizing: border-box;padding: 8px 20px;border-bottom: 1px solid #e2e7ef;}
     .order-container .section-shopinfo .title .logo{width: 39px;height: 39px;box-sizing: border-box;border: 1px solid #e2e7ef;float: left;display: block;margin-right: 5px;}
     .order-container .section-shopinfo .title .name{line-height: 40px;float: left;font-size: 14px;color: #22272E;text-align: left;margin-right: 20px;}
@@ -108,6 +108,26 @@ li{list-style:none}
     .section-botton.fiexd .inner{width: 1184px;margin: 0 auto;z-index: 9999;}
     /* 特殊商品退货须知 */
     .return-instructions{padding: 16px 24px;background: #FFFAF8; color: #FF5B00; font-size: 14px;margin-bottom: 8px;line-height: 24px}
+    /*特殊订单确认*/
+    .el-dialog-ins{color: #999;font-size: 14px;padding: 12px;display: flex;justify-content: center;align-items: center;}
+    .el-dialog-ins .check{ display: flex;justify-content: center;align-items: center; }
+    .el-dialog-ins .text{display:inline-block;height:16px;line-height:16px;font-size:14px;color:#333;margin-left:15px;vertical-align:center}
+    .el-dialog-ins .text .red{color:#1890f9;cursor: pointer;}
+    .el-dialog-ins .check-input{margin-left: 10px;cursor: pointer;}
+    .el-contract-content{ width: 100%;height: 600px; overflow-y: scroll;box-sizing: border-box;padding: 0 12px 0 0;}
+    .el-contract-content .text-h1{ font-size: 15px;text-align: left;line-height:34px;font-weight: 600;color: #333333; }
+    .el-contract-content .text-p{ font-size: 14px;text-align: left;line-height:32px;color: #666666; }
+    .el-contract-content .text-p span a{ color: #1890f9; }
+    .el-contract-content .text-h1.center{ text-align: center; }
+    .goods-template {  height: auto;background: #ffffff;box-sizing: border-box;padding: 10px 0;}
+    .goods-template .goods-list{  width: 840px;height: auto;}
+    .goods-template .goods-main{  width: 100%;min-height: 100px;border: 1px solid #999999;border-radius: 4px;display: flex;flex-direction: column;align-items: center;}
+    .goods-template .goods-main .goods-item{ width: 100%;border-bottom: 1px solid #999999;display: flex;justify-content: center;}
+    .goods-template .goods-main .goods-item:last-child {border-bottom: none;}
+    .goods-template .goods-main .goods-item .goods-item-td {width: 20%;display: flex;justify-content: center;align-items: center;flex-wrap: wrap;padding: 10px;font-size: 12px;line-height: 20px;color: #666666;box-sizing: border-box;border-right: 1px solid #999999;}
+    .goods-template .goods-main .goods-item .goods-item-td.small{ width: 10%; }
+    .goods-template .goods-main .goods-item .goods-item-td .red{ color: #ff2a2a; }
+    .goods-template .goods-main .goods-item .goods-item-td:last-child {border-right: none;}
 }
 
 /**

+ 21 - 0
src/main/resources/static/css/user-center/order/orderlist.css

@@ -87,6 +87,27 @@ li{list-style:none}
     .popup-layer .popup-button .btn.btn-confim{border-color: #FF5B00;background-color: #FF5B00;color: #fff;}
     .popup-layer .popup-button .btn.btn-onlinePayConfim{border-color: #FF5B00;background-color: #FF5B00;color: #fff;}
     input::placeholder{color: #9AA5B5}
+    /*特殊订单确认*/
+    .el-dialog-ins{color: #999;font-size: 14px;padding: 12px;display: flex;justify-content: center;align-items: center;}
+    .el-dialog-ins .check{ display: flex;justify-content: center;align-items: center; }
+    .el-dialog-ins .text{display:inline-block;height:16px;line-height:16px;font-size:14px;color:#333;margin-left:15px;vertical-align:center}
+    .el-dialog-ins .text .red{color:#1890f9;cursor: pointer;}
+    .el-dialog-ins .check-input{margin-left: 10px;cursor: pointer;}
+
+    .el-contract-content{ width: 100%;height: 600px; overflow-y: scroll;box-sizing: border-box;padding: 0 12px 0 0;}
+    .el-contract-content .text-h1{ font-size: 15px;text-align: left;line-height:34px;font-weight: 600;color: #333333; }
+    .el-contract-content .text-p{ font-size: 14px;text-align: left;line-height:32px;color: #666666; }
+    .el-contract-content .text-p span a{ color: #1890f9; }
+    .el-contract-content .text-h1.center{ text-align: center; }
+    .goods-template {  height: auto;background: #ffffff;box-sizing: border-box;padding: 10px 0;}
+    .goods-template .goods-list{  width: 840px;height: auto;}
+    .goods-template .goods-main{  width: 100%;min-height: 100px;border: 1px solid #999999;border-radius: 4px;display: flex;flex-direction: column;align-items: center;}
+    .goods-template .goods-main .goods-item{ width: 100%;border-bottom: 1px solid #999999;display: flex;justify-content: center;}
+    .goods-template .goods-main .goods-item:last-child {border-bottom: none;}
+    .goods-template .goods-main .goods-item .goods-item-td {width: 20%;display: flex;justify-content: center;align-items: center;flex-wrap: wrap;padding: 10px;font-size: 12px;line-height: 20px;color: #666666;box-sizing: border-box;border-right: 1px solid #999999;}
+    .goods-template .goods-main .goods-item .goods-item-td.small{ width: 10%; }
+    .goods-template .goods-main .goods-item .goods-item-td .red{ color: #ff2a2a; }
+    .goods-template .goods-main .goods-item .goods-item-td:last-child {border-right: none;}
 }
 
 /**

+ 1 - 1
src/main/resources/static/js/shopping/cart.js

@@ -1,6 +1,6 @@
 var shoppingCart = new Vue({
     el: "#shoppingCart",
-    mixins: [cartMixins,cmSysVitaMixins],
+    mixins: [orderMixins,cmSysVitaMixins],
     data: {
         userId: 0,
         userIdentity: '',

+ 9 - 0
src/main/resources/static/js/shopping/confirm.js

@@ -684,6 +684,13 @@ var shoppingConfirm = new Vue({
                     CAIMEI.dialog('请输入银行账号');return false;
                 }
             }
+            // 薇旖美订单勾选销售合同处理
+            if(this.isContract){
+                if(!this.checkedContractFlag){
+                    CAIMEI.dialog('请阅读销售合同并勾选同意');return false;
+                    return
+                }
+            }
             // 禁用按钮
             this.submitLoading = true;
             // 发票信息
@@ -819,6 +826,7 @@ var shoppingConfirm = new Vue({
         const _self = this;
         this.urlType = getUrlParam("type") ? getUrlParam("type") * 1 : "";
         if(globalUserData){
+            this.clubInfo = globalUserData
             this.userId = this.productParam.userId = this.cartParam.userId = this.supportParm.userId =   globalUserData.userId;
             this.confirmParam.unionId = globalUserData.unionId ? globalUserData.unionId : '';
             this.confirmParam.clubId = globalUserData.clubId
@@ -856,6 +864,7 @@ var shoppingConfirm = new Vue({
             }
             this.listLoading = false;
         }
+
         // 底部导航栏悬浮
         $(window).on('scroll', function(){
             if($(window).scrollTop() + window.innerHeight > $('footer').offset().top){

+ 204 - 180
src/main/resources/static/js/shopping/mixins/conMixins.js

@@ -1,180 +1,204 @@
-// 商品详情
-var conMixins = function () {
-    return {
-        data() {
-            return {
-                balance: {
-                    isFreight:false,    //使用采美豆抵扣运费
-                    flag: false,        //使用余额抵扣
-                },
-                hanldShouldPayFee:0,//
-                userMoney: 0.0, // 显示可使用余额
-                deductMoney: 0.0, // 显示已使用的余额
-                urlType:0,
-                radio:1,
-                visible:false,
-                reducedPrice: 0,          // 满减金额
-                couponAmount:0,	  		  // 优惠券金额
-                handlePostage:0 //记录修改的运费
-            }
-        },
-        computed: {
-            // 计算订单最终支付金额 = 供应商下的合计金额之和
-            orderTotalPrice(){
-                let totalPrice = 0
-                this.listData.forEach(el =>{
-                    totalPrice += el.totalPrice
-                })
-                console.log('订单最终金额',totalPrice)
-                return totalPrice - this.couponAmount
-            },
-            // 显示勾选后的剩余抵 = 用户总余额-当前使用金额
-            surplusMoney(){
-                console.log('剩余余额', (this.userMoney - this.deductMoney))
-                return this.userMoney - this.deductMoney
-            },
-            // 共减金额 = 减金额 + 优惠券金额
-            totalDiscountAmount(){
-                console.log('共减金额', (this.reducedPrice + this.couponAmount))
-                return this.reducedPrice + this.couponAmount
-            }
-        },
-        methods: {
-            //勾选使用余额
-            checkedBalabce() {
-                if (this.balance.flag) {// 是否勾选余额抵扣
-                    this.confirmParam.payInfo.balancePayFlag = 1
-                    this.attributePallPrice()
-                }else{
-                    this.confirmParam.payInfo.balancePayFlag = 0
-                    this.attributePallPrice()
-                }
-                console.log('勾选使用余额最终订单支付金额', this.hanldShouldPayFee)
-            },
-            // 计算最终订单支付金额
-            attributePallPrice() {
-                if (this.balance.flag) {// 是否勾选余额抵扣
-                    if (this.userMoney >= this.orderTotalPrice) {
-                        this.hanldShouldPayFee =0.0
-                        this.deductMoney = this.orderTotalPrice// 当前使用金额等于订单金额
-                        console.log('最终订单支付金额00001', this.hanldShouldPayFee)
-                    } else {
-                        this.hanldShouldPayFee = this.orderTotalPrice - this.userMoney // 订单最终支付金额等于订单金额-账户余额
-                        this.deductMoney = this.userMoney // 当前使用金额等于总余额
-                        console.log('最终订单支付金额00002', this.hanldShouldPayFee)
-                    }
-                    console.log('余额抵扣最终订单支付金额', this.hanldShouldPayFee)
-                } else {
-                    this.hanldShouldPayFee = this.orderTotalPrice
-                    this.deductMoney = 0 // 当前使用
-                    console.log('未余额抵扣最终订单支付金额', this.hanldShouldPayFee)
-                }
-            },
-            //修改运费
-            handlePostageFlag($event,supplier){  // 选择到付 总运费为到付 供应商总价格 - 总运费  确认订单总金额 - 总运费
-                console.log('$event',$event)
-                // const postage = supplier.isColdChina ? ( supplier.postage + supplier.coldChain ) : supplier.postage
-                supplier.handlePostageFlag = $event;
-                if(supplier.handlePostageFlag === 1){
-                    supplier.totalPrice = Number((supplier.totalPrice*100 + supplier.postage*100)/100)
-                    this.attributePallPrice()
-                }else{
-                    supplier.totalPrice = Number(this.repiceNumSub(supplier.totalPrice,supplier.postage))
-                    this.attributePallPrice()
-                }
-            },
-            // 勾选冷链费
-            handleChangeColdChina(flag,supplier){
-                if(flag){
-                    supplier.totalPrice = Number((supplier.totalPrice*100 + supplier.coldChain*100)/100)
-                    this.attributePallPrice()
-                    console.log('totalPrice',supplier.totalPrice)
-                }else{
-                    supplier.totalPrice = Number(this.repiceNumSub(supplier.totalPrice,supplier.coldChain))
-                    this.attributePallPrice()
-                    console.log('hanldShouldPayFee',this.hanldShouldPayFee)
-                }
-            },
-            // 计算总运费
-            handleTotalPostage(supplier){
-                if(supplier.isColdChina){
-                    if(supplier.handlePostageFlag === 2){
-                        return (supplier.coldChain*100 + supplier.postage*100 - supplier.postage*100)/100
-                    }else{
-                        return (supplier.postage*100 + supplier.coldChain*100)/100
-                    }
-                }else{
-                    return supplier.postage
-                }
-            },
-            // 购物车去结算确认订单初始化
-            getCartCreateOrderInfo () {
-                const _self = this;
-                if(this.userId ===0){return;}
-                OrderApi.GetOrderConfirmInfo(this.cartParam,function(response){
-                    if (response.code === 0 ) {
-                        _self.setCreatDataInfo(response.data)
-                    }else{
-                        CAIMEI.Alert(r.msg, '确定', false);
-                    }
-                });
-            },
-            // 商品立即购买确认订单初始化
-            getProductCreateOrderInfo(){
-                const _self = this;
-                if(this.userId ===0){return;}
-                OrderApi.ProductCreateOrderInfo(this.productParam,function(response){
-                    if (response.code === 0 ) {
-                        _self.setCreatDataInfo(response.data)
-                    }else{
-                        CAIMEI.Alert(response.msg, '确定', false);
-                    }
-                });
-            },
-            // 组合商品确认订单初始化
-            OrderClubProductSupporting(){
-                const _self = this;
-                if(this.userId ===0){return;}
-                OrderApi.OrderClubProductSupporting(this.supportParm,function(response){
-                    if (response.code === 0 ) {
-                        _self.setCreatDataInfo(response.data)
-                    }else{
-                        CAIMEI.Alert(r.msg, '确定', false);
-                    }
-                });
-            },
-            setCreatDataInfo(data){
-                this.listData = data.list.map((el)=>{
-                    el.handlePostageFlag = el.postageFlag
-                    return el
-                });
-                this.totalPrice =  data.totalPrice;
-                this.reducedPrice = data.reducedPrice;
-                this.totalCount =  data.totalCount;
-                this.kindCount = data.kindCount;
-                this.userMoney = data.userMoney;
-                this.hanldShouldPayFee = data.totalPrice;
-                this.svipReducedPrice = data.svipReducedPrice;
-                this.returnGoodsStutas = data.returnGoodsStutas === 2 // 当前商品是否为特殊商品 1不是 2是
-                this.helpContent = data.helpContent
-                if( data.couponList &&  data.couponList.length>0){
-                    this.isCouponShow = true;
-                    this.couponAmount = data.couponList[0].couponAmount;
-                    this.confirmParam.clubCouponId = data.couponList[0].clubCouponId;
-                    this.couponList = data.couponList.map((el) =>{
-                        return { ...el,...{ischecked:false}}
-                    })
-                    this.couponList[0].ischecked = true;
-                    this.hanldShouldPayFee = data.totalPrice - this.couponAmount;
-                }
-                this.totalDiscountAmount =  this.reducedPrice + this.couponAmount;
-                if(data.invoice){
-                    data.invoice.type = 0;
-                    this.orderInvoice = { ...this.orderInvoice , ...data.invoice } ;
-                    this.orderInvoice.headingType = 0
-                }
-            },
-        }
-    }
-}();
-
+// 商品详情
+var conMixins = function () {
+    return {
+        data() {
+            return {
+                balance: {
+                    isFreight:false,    //使用采美豆抵扣运费
+                    flag: false,        //使用余额抵扣
+                },
+                hanldShouldPayFee:0,//
+                userMoney: 0.0, // 显示可使用余额
+                deductMoney: 0.0, // 显示已使用的余额
+                isContract: false, // 显示销售合同
+                checkedContractFlag: false, // 是否勾选合同
+                dialogVisible: false, // 控制销售合同显示
+                formattedDate: '',
+                clubInfo: {},
+                urlType:0,
+                radio:1,
+                visible:false,
+                reducedPrice: 0,          // 满减金额
+                couponAmount:0,	  		  // 优惠券金额
+                handlePostage:0 //记录修改的运费
+            }
+        },
+        computed: {
+            // 计算订单最终支付金额 = 供应商下的合计金额之和
+            orderTotalPrice(){
+                let totalPrice = 0
+                this.listData.forEach(el =>{
+                    totalPrice += el.totalPrice
+                })
+                console.log('订单最终金额',totalPrice)
+                return totalPrice - this.couponAmount
+            },
+            // 显示勾选后的剩余抵 = 用户总余额-当前使用金额
+            surplusMoney(){
+                console.log('剩余余额', (this.userMoney - this.deductMoney))
+                return this.userMoney - this.deductMoney
+            },
+            // 共减金额 = 减金额 + 优惠券金额
+            totalDiscountAmount(){
+                console.log('共减金额', (this.reducedPrice + this.couponAmount))
+                return this.reducedPrice + this.couponAmount
+            }
+        },
+        methods: {
+            // 查看合同
+            handleContract(){
+                this.dialogVisible = true
+            },
+            // 关闭
+            handleClose(){
+                this.dialogVisible = false
+            },
+            // 勾选合同
+            checkedContract(){
+                console.log('checkedContractFlag',this.checkedContractFlag)
+            },
+            //勾选使用余额
+            checkedBalabce() {
+                if (this.balance.flag) {// 是否勾选余额抵扣
+                    this.confirmParam.payInfo.balancePayFlag = 1
+                    this.attributePallPrice()
+                }else{
+                    this.confirmParam.payInfo.balancePayFlag = 0
+                    this.attributePallPrice()
+                }
+                console.log('勾选使用余额最终订单支付金额', this.hanldShouldPayFee)
+            },
+            // 计算最终订单支付金额
+            attributePallPrice() {
+                if (this.balance.flag) {// 是否勾选余额抵扣
+                    if (this.userMoney >= this.orderTotalPrice) {
+                        this.hanldShouldPayFee =0.0
+                        this.deductMoney = this.orderTotalPrice// 当前使用金额等于订单金额
+                        console.log('最终订单支付金额00001', this.hanldShouldPayFee)
+                    } else {
+                        this.hanldShouldPayFee = this.orderTotalPrice - this.userMoney // 订单最终支付金额等于订单金额-账户余额
+                        this.deductMoney = this.userMoney // 当前使用金额等于总余额
+                        console.log('最终订单支付金额00002', this.hanldShouldPayFee)
+                    }
+                    console.log('余额抵扣最终订单支付金额', this.hanldShouldPayFee)
+                } else {
+                    this.hanldShouldPayFee = this.orderTotalPrice
+                    this.deductMoney = 0 // 当前使用
+                    console.log('未余额抵扣最终订单支付金额', this.hanldShouldPayFee)
+                }
+            },
+            //修改运费
+            handlePostageFlag($event,supplier){  // 选择到付 总运费为到付 供应商总价格 - 总运费  确认订单总金额 - 总运费
+                console.log('$event',$event)
+                // const postage = supplier.isColdChina ? ( supplier.postage + supplier.coldChain ) : supplier.postage
+                supplier.handlePostageFlag = $event;
+                if(supplier.handlePostageFlag === 1){
+                    supplier.totalPrice = Number((supplier.totalPrice*100 + supplier.postage*100)/100)
+                    this.attributePallPrice()
+                }else{
+                    supplier.totalPrice = Number(this.repiceNumSub(supplier.totalPrice,supplier.postage))
+                    this.attributePallPrice()
+                }
+            },
+            // 勾选冷链费
+            handleChangeColdChina(flag,supplier){
+                if(flag){
+                    supplier.totalPrice = Number((supplier.totalPrice*100 + supplier.coldChain*100)/100)
+                    this.attributePallPrice()
+                    console.log('totalPrice',supplier.totalPrice)
+                }else{
+                    supplier.totalPrice = Number(this.repiceNumSub(supplier.totalPrice,supplier.coldChain))
+                    this.attributePallPrice()
+                    console.log('hanldShouldPayFee',this.hanldShouldPayFee)
+                }
+            },
+            // 计算总运费
+            handleTotalPostage(supplier){
+                if(supplier.isColdChina){
+                    if(supplier.handlePostageFlag === 2){
+                        return (supplier.coldChain*100 + supplier.postage*100 - supplier.postage*100)/100
+                    }else{
+                        return (supplier.postage*100 + supplier.coldChain*100)/100
+                    }
+                }else{
+                    return supplier.postage
+                }
+            },
+            // 购物车去结算确认订单初始化
+            getCartCreateOrderInfo () {
+                const _self = this;
+                if(this.userId ===0){return;}
+                OrderApi.GetOrderConfirmInfo(this.cartParam,function(response){
+                    if (response.code === 0 ) {
+                        _self.setCreatDataInfo(response.data)
+                    }else{
+                        CAIMEI.Alert(r.msg, '确定', false);
+                    }
+                });
+            },
+            // 商品立即购买确认订单初始化
+            getProductCreateOrderInfo(){
+                const _self = this;
+                if(this.userId ===0){return;}
+                OrderApi.ProductCreateOrderInfo(this.productParam,function(response){
+                    if (response.code === 0 ) {
+                        _self.setCreatDataInfo(response.data)
+                    }else{
+                        CAIMEI.Alert(response.msg, '确定', false);
+                    }
+                });
+            },
+            // 组合商品确认订单初始化
+            OrderClubProductSupporting(){
+                const _self = this;
+                if(this.userId ===0){return;}
+                OrderApi.OrderClubProductSupporting(this.supportParm,function(response){
+                    if (response.code === 0 ) {
+                        _self.setCreatDataInfo(response.data)
+                    }else{
+                        CAIMEI.Alert(r.msg, '确定', false);
+                    }
+                });
+            },
+            setCreatDataInfo(data){
+                const today = new Date()
+                this.listData = data.list.map((el)=>{
+                    el.handlePostageFlag = el.postageFlag
+                    return el
+                });
+
+                this.isContract = data.list.some(item => item.shopId === 11253)
+                // this.isContract = data.list.some(item => item.shopId === 1677)
+                // 格式化为 "YYYY年M月D日"(月份和日期不补零)
+                this.formattedDate = `${today.getFullYear()}年${today.getMonth() + 1}月${today.getDate()}日`
+                console.log(this.formattedDate) // 示例输出:2025年5月27日
+                this.totalPrice =  data.totalPrice;
+                this.reducedPrice = data.reducedPrice;
+                this.totalCount =  data.totalCount;
+                this.kindCount = data.kindCount;
+                this.userMoney = data.userMoney;
+                this.hanldShouldPayFee = data.totalPrice;
+                this.svipReducedPrice = data.svipReducedPrice;
+                this.returnGoodsStutas = data.returnGoodsStutas === 2 // 当前商品是否为特殊商品 1不是 2是
+                this.helpContent = data.helpContent
+                if( data.couponList &&  data.couponList.length>0){
+                    this.isCouponShow = true;
+                    this.couponAmount = data.couponList[0].couponAmount;
+                    this.confirmParam.clubCouponId = data.couponList[0].clubCouponId;
+                    this.couponList = data.couponList.map((el) =>{
+                        return { ...el,...{ischecked:false}}
+                    })
+                    this.couponList[0].ischecked = true;
+                    this.hanldShouldPayFee = data.totalPrice - this.couponAmount;
+                }
+                this.totalDiscountAmount =  this.reducedPrice + this.couponAmount;
+                if(data.invoice){
+                    data.invoice.type = 0;
+                    this.orderInvoice = { ...this.orderInvoice , ...data.invoice } ;
+                    this.orderInvoice.headingType = 0
+                }
+            },
+        }
+    }
+}();
+

+ 30 - 10
src/main/resources/static/js/user-center/order/detail.js

@@ -1,6 +1,6 @@
 const orderPage = new Vue({
     el: "#orderPage",
-    mixins: [cmSysVitaMixins],
+    mixins: [cmSysVitaMixins,orderMixins],
     data() {
         return{
             isRequset: true,
@@ -100,6 +100,7 @@ const orderPage = new Vue({
                 if (response.code === 0) {
                     const data = response.data;
                     _self.orderInfo = data.shopOrder;
+                    _self.orderData = data.shopOrder;
                     _self.userInfo = data.userInfo;
                     _self.orderId = data.shopOrder.orderId;
                     _self.orderInvoice = data.orderInvoice;
@@ -158,18 +159,36 @@ const orderPage = new Vue({
                 })
             })
         },
+        handleConfirm(){// 特殊确认订单
+            if(!this.checkedContractFlag){
+                CAIMEI.dialog('请阅读销售合同并勾选同意')
+                return
+            }
+            this.isVisible = false
+            this.handleAffirmOrderOrder(this.shopOrderId);
+        },
         hanldConfirmOrderFn() {//确认订单
             const _self = this;
-            CAIMEI.Modal('是否确认订单?', '取消', '确定', function () {
-                OrderApi.AffirmOrderOrder({shopOrderId: _self.shopOrderId}, function (response) {
-                    if (response.code === 0) {
-                        CAIMEI.dialog('确认成功', true, function () {
-                            _self.GetQueryOrderDetailsInfo();
-                        });
-                    } else {
-                        CAIMEI.Alert(response.msg, '确定', false);
-                    }
+            // 测试bate 11253
+            if(this.orderData.shopId === 1677){
+                this.isVisible  = true
+            }else{
+                CAIMEI.Modal('是否确认订单?', '取消', '确定', function () {
+                    _self.handleAffirmOrderOrder(_self.shopOrderId);
                 })
+            }
+        },
+        // 调用确认订单
+        handleAffirmOrderOrder(shopOrderId){
+            const _self = this;
+            OrderApi.AffirmOrderOrder({shopOrderId: shopOrderId}, function (response) {
+                if (response.code === 0) {
+                    CAIMEI.dialog('确认成功', true, function () {
+                        _self.GetQueryOrderDetailsInfo();
+                    });
+                } else {
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
             })
         },
         hanldCancelOrderFn() {//取消订单
@@ -348,6 +367,7 @@ const orderPage = new Vue({
     mounted: function () {
         const _self = this;
         if (globalUserData) {
+            this.clubInfo = globalUserData
             this.userId = globalUserData.userId;
             this.shopOrderId = CAIMEI.getUrlParam('shopOrderId');
             this.GetQueryOrderDetailsInfo();

+ 32 - 11
src/main/resources/static/js/user-center/order/list.js

@@ -1,7 +1,7 @@
 ;
 var orderPage = new Vue({
     el: "#orderPage",
-    mixins: [cmSysVitaMixins],
+    mixins: [cmSysVitaMixins,orderMixins],
     data: {
         isRequset:true,
         loginLoading:true,
@@ -163,18 +163,38 @@ var orderPage = new Vue({
                 }
             })
         },
-        hanldConfirmOrderFn(shopOrderId){//确认订单
+        handleConfirm(){// 特殊确认订单
+            const _self = this
+            if(!this.checkedContractFlag){
+                CAIMEI.dialog('请阅读销售合同并勾选同意')
+                return
+            }
+            this.isVisible = false
+            this.handleAffirmOrderOrder(this.orderData.shopOrderId)
+        },
+        hanldConfirmOrderFn(order){//确认订单
             const _self = this;
-            CAIMEI.Modal('是否确认订单?','取消','确定',function () {
-                OrderApi.AffirmOrderOrder({shopOrderId:shopOrderId},function(response){
-                    if(response.code === 0){
-                        CAIMEI.dialog('确认成功',true,function () {
-                            _self.getList();
-                        });
-                    }else{
-                        CAIMEI.Alert(response.msg, '确定', false);
-                    }
+            // 测试bate 11253
+            if(order.shopId === 1677){
+                this.orderData = order
+                this.isVisible  = true
+            }else{
+                CAIMEI.Modal('是否确认订单?','取消','确定',function () {
+                    _self.handleAffirmOrderOrder(order.shopOrderId)
                 })
+            }
+        },
+        // 调用确认订单
+        handleAffirmOrderOrder(shopOrderId){
+            const _self = this;
+            OrderApi.AffirmOrderOrder({shopOrderId: shopOrderId}, function (response) {
+                if (response.code === 0) {
+                    CAIMEI.dialog('确认成功', true, function () {
+                        _self.getList();
+                    });
+                } else {
+                    CAIMEI.Alert(response.msg, '确定', false);
+                }
             })
         },
         hanldCancelOrderFn(shopOrderId){//取消订单
@@ -326,6 +346,7 @@ var orderPage = new Vue({
     },
     mounted: function () {
         if(globalUserData){
+            this.clubInfo = globalUserData
             this.userId = globalUserData.userId;
             this.listQuery.orderState = CAIMEI.getUrlParam('state');
             this.listQuery.userId = this.userId;

+ 43 - 0
src/main/resources/static/js/user-center/order/mixins/orderMixins.js

@@ -0,0 +1,43 @@
+// 商品详情
+var orderMixins = function () {
+    return {
+        data() {
+            return {
+                isVisible: false, // 显示特殊订单确认弹窗
+                isContract: false, // 显示销售合同
+                checkedContractFlag: false, // 是否勾选合同
+                dialogVisible: false, // 控制销售合同显示
+                formattedDate: '',
+                clubInfo: {},
+                orderData: {}
+            }
+        },
+        mounted: function() {
+
+        },
+        methods: {
+            // 查看合同
+            handleContract(){
+                this.dialogVisible = true
+            },
+            // 关闭
+            handleClose(){
+                this.dialogVisible = false
+            },
+            // 勾选合同
+            checkedContract(){
+                console.log('checkedContractFlag',this.checkedContractFlag)
+            },
+            orderTime(time){
+                // 按空格拆分取日期部分,再按"-"拆分
+                const [datePart] = time.split(' ')
+                const [year, month, day] = datePart.split('-')
+                // 去除月份和日的首部零,并拼接成目标格式
+                const result = `${year}年${parseInt(month)}月${parseInt(day)}日`
+                console.log(result)
+                return result
+            }
+        }
+    }
+}();
+

+ 149 - 0
src/main/resources/templates/shopping/components/contract-dialog.html

@@ -0,0 +1,149 @@
+<!--销售合同-->
+<el-dialog title="销售合同"
+           :visible.sync="dialogVisible"
+           :close-on-click-modal="false"
+           :close-on-press-escape="false"
+           :width="isPC ? '900px' : '85vw'"
+           top="8vh"
+>
+  <div class="el-contract-content">
+    <h1 class="text-h1">甲方(卖方):【厦门盛德至善医疗科技有限公司】</h1>
+    <h1 class="text-h1">乙方(买方):【{{ clubInfo.name }}】</h1>
+    <h1 class="text-h1">丙方(平台方):【深圳市采美网络技术有限公司】</h1>
+    <h1 class="text-h1">鉴于:</h1>
+    <p class="text-p">
+      1、丙方系美容行业的电子商务平台运营商,其开发运营的交易平台(www.caimei365.com),采美CRM管理系统和商城小程序(以下简称“丙方平台”或“平台”)是提供美容产品仪器供应商、美容机构、医疗美容机构以及服务商合作和交易平台,丙方平台的运作规则包括
+      <span><a href="https://www.caimei365.com/help/1023.html" target="_blank">《用户协议》</a></span>、
+      <span><a href="https://www.caimei365.com/help/1013.html" target="_blank">《隐私权政策》</a></span>、
+      以及交易和结算规则、其他由丙方不时公布的平台规则(以下简称“平台规则”)。
+    </p>
+    <p class="text-p">
+      2、甲方是丙方平台的注册供应商会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
+      <span><a href="https://www.caimei365.com/help/1035.html" target="_blank">《供应商合作协议》</a></span>
+      并受该等文件的约束。
+    </p>
+    <p class="text-p">
+      3、乙方是丙方平台的注册机构会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
+      <span><a href="https://www.caimei365.com/help/1016.html" target="_blank">《医美机构合作协议》</a></span>
+      并受该等文件的约束。
+    </p>
+    <p class="text-p">根据《中华人民共和国民法典》等相关法律、法规的规定,甲乙丙三方在平等自愿的基础上,就乙方在丙方平台采购甲方销售的产品和/或服务,达成以下合作内容:</p>
+
+    <h1 class="text-h1">一、乙方向甲方采购订单详情:</h1>
+    <!-- 订单商品信息 -->
+    <h1 class="text-h1">订单日期:{{ formattedDate }}</h1>
+<!--    <template v-else>-->
+<!--      <view class="text-h1" v-if="contractType === 2">订单编号:【{{ orderData.shopOrderNo }}】</view>-->
+<!--      <view class="text-h1">订单日期:{{ orderTime(orderData.orderTime) }}</view>-->
+<!--    </template>-->
+    <!-- 商品列表 -->
+    <div class="goods-template">
+      <div class="goods-list">
+        <div class="goods-main clearfix" v-for="(supplier, index) in listData" :key="index">
+          <div class="goods-item">
+            <div class="goods-item-td">产品名称</div>
+            <div class="goods-item-td">注册证编号/备案编号</div>
+            <div class="goods-item-td">生产厂家</div>
+            <div class="goods-item-td small">规格</div>
+            <div class="goods-item-td small">数量(支)</div>
+            <div class="goods-item-td small">单价(元/支)</div>
+            <div class="goods-item-td small">总价(元)</div>
+          </div>
+          <div class="goods-item" v-for="(pros, idx) in supplier.cartList" :key="idx">
+            <div class="goods-item-td">{{ pros.name }}</div>
+            <div class="goods-item-td">国械注准20213130488晋药消械生产许20150014号</div>
+            <div class="goods-item-td">山西锦波生物医药股份有限公司</div>
+            <div class="goods-item-td small">{{ pros.unit }}</div>
+            <div class="goods-item-td small"><span class="red">{{ pros.number }}</span></div>
+            <div class="goods-item-td small"><span class="red">¥{{ pros.price | NumFormat }}</span></div>
+            <div class="goods-item-td small"><span class="red">¥{{ supplier.totalPrice | NumFormat }}</span> </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <h1 class="text-h1">二、付款方式</h1>
+    <p class="text-p">
+      乙方应通过丙方的线上交易系统将相应的全额货款汇入甲方收款账号,或经丙方同意通过线下支付方式将相应的全额货款汇入甲方指定收款账号;甲方确认收到货款后的5个工作日内安排发货;甲方按货款金额向乙方开具发票,发票地址以乙方注册邮箱地址或通信地址为准。
+    </p>
+    <p class="text-p">甲方收款帐户信息:</p>
+    <p class="text-p">单位名称:厦门盛德至善医疗科技有限公司</p>
+    <p class="text-p">开户银行: 招商银行股份有限公司厦门海沧支行</p>
+    <p class="text-p">账号:592909949010001</p>
+    <h1 class="text-h1">三、产品交付方式:</h1>
+    <p class="text-p">运输:产品经由合规冷链运输,运费由甲方承担,产品的附件及相关材料应随产品一并交付乙方。</p>
+    <h1 class="text-h1">四、产品所有权及产品毁损、灭失风险转移</h1>
+    <p class="text-p">
+      产品所有权及产品毁损、灭失的风险自乙方签收货物之日起转移,货物签收以物流签收信息为准,除有质量问题外。产品发出后,因乙方的原因致使产品不能按期交付,产品毁损、灭失的风险责任由乙方自行负责。
+    </p>
+    <h1 class="text-h1">五、验收及退换货</h1>
+    <p class="text-p">
+      1、乙方收货时应在现场验收。乙方在收货时,应检查产品有无破损或缺少,如发现异常,应在收货时当场与承运人一起出具书面证明,并书面通知甲方办理相关事宜;如收货后当日未通知则视为乙方已收到全部合格产品。收货时,以物流信息显示签收作为收货凭证,不再进行纸质签收或返回物流签收单。
+    </p>
+    <p class="text-p">
+      2、乙方无故拒绝接受货物的,应承担因此给甲方造成的损失,除本协议明确约定外,损失赔偿范围包括但不限于:直接或间接损失、调查费用支出、诉讼费用、仲裁费用、聘请诉讼仲裁代理人的费用以及其他因违约行为所支出的必要费用。
+    </p>
+    <p class="text-p">
+      3、乙方在收货后如发现产品质量问题的当日通过平台向甲方提出书面申请,经甲方审查符合退换货条件的给予退换货,退换货时间为从书面申请受理之日起30天内完成退换货。
+    </p>
+    <h1 class="text-h1">六:广告合规要求</h1>
+    <p class="text-p">
+      1、乙方后续为货物自行设计制作的广告须取得广告批文方可发布,且不得侵犯第三方合法权益。乙方如使用甲方提供材料开展宣传的,不得擅自添加、删减、篡改甲方提供的材料内容。
+    </p>
+    <p class="text-p">
+      2、乙方应依法开展产品宣传及产品销售,不得通过夸大产品功效、虚构事实或虚假宣传等方式宣传、销售合作产品。否则因此造成的一切责任(包括但不限于民事赔偿、刑事责任、行政处罚等)均由乙方一力承担。若因乙方的违法宣传,给甲方造成损失的,由乙方承担赔偿责任(包括但不限于甲方支出的诉讼费、律师费、保全费、交通费等)。
+    </p>
+    <h1 class="text-h1">七、特别约定</h1>
+    <p class="text-p">
+      1、甲乙丙三方确认,丙方仅为甲乙双方的网上交易活动提供交易平台,并非交易行为的参与方,丙方不承担甲乙双方买卖交易项下任何法律责任。如甲乙双方产生争议的,丙方可以出面协调,但丙方的协调不具有强制性。在甲乙双方争议期间,如款项存放在丙方的线上交易分账系统中,丙方有权根据实际情况决定将款项留存,待甲乙双方争议解决后予以支付,丙方不承担该等原因下未支付或迟延支付款项产生的任何责任。
+    </p>
+    <h1 class="text-h1">八、违约责任</h1>
+    <p class="text-p">
+      1、在本协议有效期限内,乙方不得将本协议条款中的全部或部分权利、义务转让给任何第三方;若乙方将本协议条款中的权利义务转让给第三方,甲方有权单方解除协议;若因第三方导致甲方权利受到损害的,甲方除可以要求第三方进行损害赔偿之外,仍可以要求乙方承担责任。
+    </p>
+    <p class="text-p">
+      2、因乙方无正当合理的理由退货或拒收货物造成的相应损失(包括甲方损失和乙方损失)由乙方承担。
+    </p>
+    <p class="text-p">
+      3、因乙方行为扰乱甲方市场环境的,甲方有权单方解除本协议,并要求乙方赔偿因此产生的损失。
+    </p>
+    <p class="text-p">
+      4、本协议所述的甲方损失包括但不限于甲方的直接损失、间接损失以及维权所支付的诉讼费、律师费、公证费、鉴定费、差旅费等费用。
+    </p>
+    <h1 class="text-h1">九、不可抗力</h1>
+    <p class="text-p">
+      1、如果双方中的任何一方因为不可抗力(如:战争、火灾、台风、洪水、地震)而被迫停止或推迟协议的执行,则协议执行相应延迟,延迟的时间等于不可抗力发生作用的时间。
+    </p>
+    <p class="text-p">
+      2、因不可抗力因素导致的甲乙双方未能按本协议约定履行相应的权利义务的,甲乙双方免除相应的责任,但双方应采取必要的措施以减少造成的损失。出现不可抗力情形的一方,应在不可抗力发生之日起三日内向对方发出出现不可抗力情形的书面通知,并提供相应的证明。
+    </p>
+    <p class="text-p">
+      3、如不可抗力及其影响无法终止或消除而致使合同任何一方丧失继续履行协议的能力或不可抗力的影响连续二十天以上时,任何一方均有权通知对方无责解除本协议。双方根据已完成进度据实结算。
+    </p>
+    <h1 class="text-h1">十、保密条款</h1>
+    <p class="text-p">
+      本协议有效期内,甲、乙、丙、三方对本协议内容,特别是供货价格及销售政策等信息,均负有严格保密的义务,不得以任何形式泄露给第三方,否则应承担违约责任并赔偿损失。
+    </p>
+    <h1 class="text-h1">十一、其它约定事项</h1>
+    <p class="text-p">
+      1、乙方可以在丙方平台下载甲方所经营产品的《中华人民共和国医疗器械注册证》及本企业的《营业执照》、《医疗器械生产许可证》及其他授权证明,如需要加盖甲方公章的纸质复印件可以通过丙方平台向甲方索取,
+    </p>
+    <p class="text-p">
+      2、甲方可以在丙方平台下载乙方的《营业执照》、《医疗机构执业许可证》,如需要加盖甲方公章的纸质复印件可以通过丙方平台向乙方索取。
+    </p>
+    <p class="text-p">
+      3、本协议的附件与本协议具同等法律效力,是本协议不可分割的组成部分。
+    </p>
+    <h1 class="text-h1">十二、争议解决</h1>
+    <p class="text-p">
+      合同执行过程中发生争议的,三方友好协商,协商不成的,任何一方有权向甲方所在地人民法院提起诉讼。
+    </p>
+    <h1 class="text-h1">十三、其他</h1>
+    <p class="text-p">
+      甲乙丙三方通过丙方平台订立本合同,本合同一经三方完成电子签章程序,即具备法律效力。任何一方均可在丙方平台之上获取合同文本。
+    </p>
+    <p class="text-p">(以下无正文)</p>
+  </div>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="handleClose">关闭</el-button>
+  </div>
+</el-dialog>

+ 11 - 3
src/main/resources/templates/shopping/confirm.html

@@ -399,14 +399,14 @@
                     </div>
                 </div>
             </div>
-            <h2 class="title">使用余额</h2>
+            <h2 class="title ri">使用余额</h2>
             <div class="balanceWrap">
                 <label class="check">
-                    <input v-if="userMoney>0" v-model="balance.flag" name="useBalance" type="checkbox" @change="checkedBalabce">
-                    <input v-else v-model="balance.flag" name="useBalance" type="checkbox" disabled>
                     <span class="text">当前余额:<span class="red">¥{{ userMoney | NumFormat}}</span></span>
                     <span class="text">当前使用:<span class="red">¥{{ deductMoney | NumFormat}}</span></span>
                     <span class="text">剩余:<span class="red">¥{{ surplusMoney | NumFormat}}</span></span>
+                    <input class="check-input" v-if="userMoney>0" v-model="balance.flag" name="useBalance" type="checkbox" @change="checkedBalabce">
+                    <input class="check-input" v-else v-model="balance.flag" name="useBalance" type="checkbox" disabled>
                 </label>
             </div>
             <h2 class="title" v-if="isCouponShow">
@@ -465,6 +465,14 @@
                 <!--                </span>-->
                 <!--            </p>-->
             </div>
+            <div class="contractWrap" v-if="isContract">
+                <span class="text">请先阅读<span class="red" @click.stop="handleContract">《销售合同》</span>后勾选同意</span>
+                <label class="check">
+                    <input class="check-input" v-model="checkedContractFlag" name="contract" type="checkbox" @change="checkedContract">
+                </label>
+                <!--   销售合同   -->
+                <template th:replace="shopping/components/contract-dialog"></template>
+            </div>
         </div>
         <div class="summary-wrapper">
             <div class="summaryWrap fixed">

+ 146 - 0
src/main/resources/templates/user-center/order/components/contract-dialog.html

@@ -0,0 +1,146 @@
+<!--销售合同-->
+<el-dialog title="销售合同"
+           :visible.sync="dialogVisible"
+           :close-on-click-modal="false"
+           :close-on-press-escape="false"
+           :width="isPC ? '900px' : '85vw'"
+           top="8vh"
+>
+  <div class="el-contract-content">
+    <h1 class="text-h1">甲方(卖方):【厦门盛德至善医疗科技有限公司】</h1>
+    <h1 class="text-h1">乙方(买方):【{{ clubInfo.name }}】</h1>
+    <h1 class="text-h1">丙方(平台方):【深圳市采美网络技术有限公司】</h1>
+    <h1 class="text-h1">鉴于:</h1>
+    <p class="text-p">
+      1、丙方系美容行业的电子商务平台运营商,其开发运营的交易平台(www.caimei365.com),采美CRM管理系统和商城小程序(以下简称“丙方平台”或“平台”)是提供美容产品仪器供应商、美容机构、医疗美容机构以及服务商合作和交易平台,丙方平台的运作规则包括
+      <span><a href="https://www.caimei365.com/help/1023.html" target="_blank">《用户协议》</a></span>、
+      <span><a href="https://www.caimei365.com/help/1013.html" target="_blank">《隐私权政策》</a></span>、
+      以及交易和结算规则、其他由丙方不时公布的平台规则(以下简称“平台规则”)。
+    </p>
+    <p class="text-p">
+      2、甲方是丙方平台的注册供应商会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
+      <span><a href="https://www.caimei365.com/help/1035.html" target="_blank">《供应商合作协议》</a></span>
+      并受该等文件的约束。
+    </p>
+    <p class="text-p">
+      3、乙方是丙方平台的注册机构会员,并已提供相关资质和通过电子方式确认接受丙方平台规则、
+      <span><a href="https://www.caimei365.com/help/1016.html" target="_blank">《医美机构合作协议》</a></span>
+      并受该等文件的约束。
+    </p>
+    <p class="text-p">根据《中华人民共和国民法典》等相关法律、法规的规定,甲乙丙三方在平等自愿的基础上,就乙方在丙方平台采购甲方销售的产品和/或服务,达成以下合作内容:</p>
+
+    <h1 class="text-h1">一、乙方向甲方采购订单详情:</h1>
+    <!-- 订单商品信息 -->
+    <h1 class="text-h1">订单编号:【{{ orderData.shopOrderNo }}】</h1>
+    <h1 class="text-h1">订单日期:{{ orderTime(orderData.orderTime) }}</h1>
+    <!-- 商品列表 -->
+    <div class="goods-template">
+      <div class="goods-list">
+        <div class="goods-main clearfix">
+          <div class="goods-item">
+            <div class="goods-item-td">产品名称</div>
+            <div class="goods-item-td">注册证编号/备案编号</div>
+            <div class="goods-item-td">生产厂家</div>
+            <div class="goods-item-td small">规格</div>
+            <div class="goods-item-td small">数量(支)</div>
+            <div class="goods-item-td small">单价(元/支)</div>
+            <div class="goods-item-td small">总价(元)</div>
+          </div>
+          <div class="goods-item" v-for="(pros, idx) in orderData.orderProductList" :key="idx">
+            <div class="goods-item-td">{{ pros.name }}</div>
+            <div class="goods-item-td">国械注准20213130488晋药消械生产许20150014号</div>
+            <div class="goods-item-td">山西锦波生物医药股份有限公司</div>
+            <div class="goods-item-td small">{{ pros.productUnit }}</div>
+            <div class="goods-item-td small"><span class="red">{{ pros.num }}</span></div>
+            <div class="goods-item-td small"><span class="red">¥{{ pros.price | NumFormat }}</span></div>
+            <div class="goods-item-td small"><span class="red">¥{{ orderData.totalAmount | NumFormat }}</span> </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <h1 class="text-h1">二、付款方式</h1>
+    <p class="text-p">
+      乙方应通过丙方的线上交易系统将相应的全额货款汇入甲方收款账号,或经丙方同意通过线下支付方式将相应的全额货款汇入甲方指定收款账号;甲方确认收到货款后的5个工作日内安排发货;甲方按货款金额向乙方开具发票,发票地址以乙方注册邮箱地址或通信地址为准。
+    </p>
+    <p class="text-p">甲方收款帐户信息:</p>
+    <p class="text-p">单位名称:厦门盛德至善医疗科技有限公司</p>
+    <p class="text-p">开户银行: 招商银行股份有限公司厦门海沧支行</p>
+    <p class="text-p">账号:592909949010001</p>
+    <h1 class="text-h1">三、产品交付方式:</h1>
+    <p class="text-p">运输:产品经由合规冷链运输,运费由甲方承担,产品的附件及相关材料应随产品一并交付乙方。</p>
+    <h1 class="text-h1">四、产品所有权及产品毁损、灭失风险转移</h1>
+    <p class="text-p">
+      产品所有权及产品毁损、灭失的风险自乙方签收货物之日起转移,货物签收以物流签收信息为准,除有质量问题外。产品发出后,因乙方的原因致使产品不能按期交付,产品毁损、灭失的风险责任由乙方自行负责。
+    </p>
+    <h1 class="text-h1">五、验收及退换货</h1>
+    <p class="text-p">
+      1、乙方收货时应在现场验收。乙方在收货时,应检查产品有无破损或缺少,如发现异常,应在收货时当场与承运人一起出具书面证明,并书面通知甲方办理相关事宜;如收货后当日未通知则视为乙方已收到全部合格产品。收货时,以物流信息显示签收作为收货凭证,不再进行纸质签收或返回物流签收单。
+    </p>
+    <p class="text-p">
+      2、乙方无故拒绝接受货物的,应承担因此给甲方造成的损失,除本协议明确约定外,损失赔偿范围包括但不限于:直接或间接损失、调查费用支出、诉讼费用、仲裁费用、聘请诉讼仲裁代理人的费用以及其他因违约行为所支出的必要费用。
+    </p>
+    <p class="text-p">
+      3、乙方在收货后如发现产品质量问题的当日通过平台向甲方提出书面申请,经甲方审查符合退换货条件的给予退换货,退换货时间为从书面申请受理之日起30天内完成退换货。
+    </p>
+    <h1 class="text-h1">六:广告合规要求</h1>
+    <p class="text-p">
+      1、乙方后续为货物自行设计制作的广告须取得广告批文方可发布,且不得侵犯第三方合法权益。乙方如使用甲方提供材料开展宣传的,不得擅自添加、删减、篡改甲方提供的材料内容。
+    </p>
+    <p class="text-p">
+      2、乙方应依法开展产品宣传及产品销售,不得通过夸大产品功效、虚构事实或虚假宣传等方式宣传、销售合作产品。否则因此造成的一切责任(包括但不限于民事赔偿、刑事责任、行政处罚等)均由乙方一力承担。若因乙方的违法宣传,给甲方造成损失的,由乙方承担赔偿责任(包括但不限于甲方支出的诉讼费、律师费、保全费、交通费等)。
+    </p>
+    <h1 class="text-h1">七、特别约定</h1>
+    <p class="text-p">
+      1、甲乙丙三方确认,丙方仅为甲乙双方的网上交易活动提供交易平台,并非交易行为的参与方,丙方不承担甲乙双方买卖交易项下任何法律责任。如甲乙双方产生争议的,丙方可以出面协调,但丙方的协调不具有强制性。在甲乙双方争议期间,如款项存放在丙方的线上交易分账系统中,丙方有权根据实际情况决定将款项留存,待甲乙双方争议解决后予以支付,丙方不承担该等原因下未支付或迟延支付款项产生的任何责任。
+    </p>
+    <h1 class="text-h1">八、违约责任</h1>
+    <p class="text-p">
+      1、在本协议有效期限内,乙方不得将本协议条款中的全部或部分权利、义务转让给任何第三方;若乙方将本协议条款中的权利义务转让给第三方,甲方有权单方解除协议;若因第三方导致甲方权利受到损害的,甲方除可以要求第三方进行损害赔偿之外,仍可以要求乙方承担责任。
+    </p>
+    <p class="text-p">
+      2、因乙方无正当合理的理由退货或拒收货物造成的相应损失(包括甲方损失和乙方损失)由乙方承担。
+    </p>
+    <p class="text-p">
+      3、因乙方行为扰乱甲方市场环境的,甲方有权单方解除本协议,并要求乙方赔偿因此产生的损失。
+    </p>
+    <p class="text-p">
+      4、本协议所述的甲方损失包括但不限于甲方的直接损失、间接损失以及维权所支付的诉讼费、律师费、公证费、鉴定费、差旅费等费用。
+    </p>
+    <h1 class="text-h1">九、不可抗力</h1>
+    <p class="text-p">
+      1、如果双方中的任何一方因为不可抗力(如:战争、火灾、台风、洪水、地震)而被迫停止或推迟协议的执行,则协议执行相应延迟,延迟的时间等于不可抗力发生作用的时间。
+    </p>
+    <p class="text-p">
+      2、因不可抗力因素导致的甲乙双方未能按本协议约定履行相应的权利义务的,甲乙双方免除相应的责任,但双方应采取必要的措施以减少造成的损失。出现不可抗力情形的一方,应在不可抗力发生之日起三日内向对方发出出现不可抗力情形的书面通知,并提供相应的证明。
+    </p>
+    <p class="text-p">
+      3、如不可抗力及其影响无法终止或消除而致使合同任何一方丧失继续履行协议的能力或不可抗力的影响连续二十天以上时,任何一方均有权通知对方无责解除本协议。双方根据已完成进度据实结算。
+    </p>
+    <h1 class="text-h1">十、保密条款</h1>
+    <p class="text-p">
+      本协议有效期内,甲、乙、丙、三方对本协议内容,特别是供货价格及销售政策等信息,均负有严格保密的义务,不得以任何形式泄露给第三方,否则应承担违约责任并赔偿损失。
+    </p>
+    <h1 class="text-h1">十一、其它约定事项</h1>
+    <p class="text-p">
+      1、乙方可以在丙方平台下载甲方所经营产品的《中华人民共和国医疗器械注册证》及本企业的《营业执照》、《医疗器械生产许可证》及其他授权证明,如需要加盖甲方公章的纸质复印件可以通过丙方平台向甲方索取,
+    </p>
+    <p class="text-p">
+      2、甲方可以在丙方平台下载乙方的《营业执照》、《医疗机构执业许可证》,如需要加盖甲方公章的纸质复印件可以通过丙方平台向乙方索取。
+    </p>
+    <p class="text-p">
+      3、本协议的附件与本协议具同等法律效力,是本协议不可分割的组成部分。
+    </p>
+    <h1 class="text-h1">十二、争议解决</h1>
+    <p class="text-p">
+      合同执行过程中发生争议的,三方友好协商,协商不成的,任何一方有权向甲方所在地人民法院提起诉讼。
+    </p>
+    <h1 class="text-h1">十三、其他</h1>
+    <p class="text-p">
+      甲乙丙三方通过丙方平台订立本合同,本合同一经三方完成电子签章程序,即具备法律效力。任何一方均可在丙方平台之上获取合同文本。
+    </p>
+    <p class="text-p">(以下无正文)</p>
+  </div>
+  <div slot="footer" class="dialog-footer">
+    <el-button @click="handleClose">关闭</el-button>
+  </div>
+</el-dialog>

+ 23 - 0
src/main/resources/templates/user-center/order/detail.html

@@ -263,6 +263,28 @@
                 <i class="icon mIcon" @click.stop="handleClickCancel"></i>
             </div>
         </div>
+        <!--    特殊确认订单提示弹窗    -->
+        <el-dialog
+                title="确认订单"
+                :visible.sync="isVisible"
+                width="30%"
+                top="30vh"
+                :before-close="handleClose">
+            <div class="el-dialog-ins">
+                <span class="text">请先阅读<span class="red" @click.stop="handleContract">《销售合同》</span>后勾选同意</span>
+                <label class="check">
+                    <input class="check-input" v-model="checkedContractFlag" name="contract" type="checkbox" @change="checkedContract">
+                </label>
+            </div>
+            <span slot="footer" class="dialog-footer">
+                    <el-button @click="isVisible = false">取 消</el-button>
+                    <el-button type="primary" @click="handleConfirm">确 定</el-button>
+                </span>
+        </el-dialog>
+        <!--   销售合同   -->
+        <template v-if="dialogVisible">
+            <template th:replace="user-center/order/components/contract-dialog"></template>
+        </template>
     </template>
 </div>
 
@@ -272,6 +294,7 @@
 <script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/order.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/order/mixins/orderMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/order/detail.js(v=${version})}"></script>
 </body>
 </html>

+ 24 - 1
src/main/resources/templates/user-center/order/list.html

@@ -112,7 +112,7 @@
                                         <!--                                    <a class="btn primary confirm" href="javascript: void(0);" v-if="order.affirmPaymentFlag== 10 " @click="hanldConfirmFn(order.userId,order.orderId)"><p>确认</p>打款供应商</a>-->
                                         <a class="btn primary" href="javascript: void(0);" v-if="[11,12,13,21,22,23].indexOf(order.status)!=-1" @click="hanldPayOrderFn(order,order.shopOrderId)">支付订单</a>
                                         <a class="btn primary" href="javascript: void(0);" v-if="order.checkFlag === 2" @click="hanldAddPay(order,order.shopOrderId)">上传转账凭证</a>
-                                        <a class="btn primary" href="javascript: void(0);" v-if="order.status === 0"  @click="hanldConfirmOrderFn(order.shopOrderId)">确认订单</a>
+                                        <a class="btn primary" href="javascript: void(0);" v-if="order.status === 0"  @click="hanldConfirmOrderFn(order)">确认订单</a>
                                         <a class="btn cancel" href="javascript: void(0);" @click="hanldDetilsOrderFn(order.shopOrderId)">订单详情</a>
                                         <a class="btn cancel" href="javascript: void(0);" v-if="[0,11].indexOf(order.status)!=-1" @click="hanldCancelOrderFn(order.shopOrderId)">取消订单</a>
                                         <!--                                    <a class="btn cancel" href="javascript: void(0);" v-if="[4].indexOf(order.status)!=-1" @click="hanldDeleteOrderFn(order.orderId)">删除订单</a>-->
@@ -168,6 +168,28 @@
                 <i class="icon mIcon" @click.stop="handleClickCancel"></i>
             </div>
         </div>
+        <!--    特殊确认订单提示弹窗    -->
+        <el-dialog
+                title="确认订单"
+                :visible.sync="isVisible"
+                width="30%"
+                top="30vh"
+                :before-close="handleClose">
+                <div class="el-dialog-ins">
+                    <span class="text">请先阅读<span class="red" @click.stop="handleContract">《销售合同》</span>后勾选同意</span>
+                    <label class="check">
+                        <input class="check-input" v-model="checkedContractFlag" name="contract" type="checkbox" @change="checkedContract">
+                    </label>
+                </div>
+                <span slot="footer" class="dialog-footer">
+                    <el-button @click="isVisible = false">取 消</el-button>
+                    <el-button type="primary" @click="handleConfirm">确 定</el-button>
+                </span>
+        </el-dialog>
+        <!--   销售合同   -->
+        <template v-if="dialogVisible">
+            <template th:replace="user-center/order/components/contract-dialog"></template>
+        </template>
     </template>
 </div>
 <!-- 引入底部 -->
@@ -176,6 +198,7 @@
 <script type="text/javascript" src="/lib/element-ui/element-ui.min.js"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/center.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/common/serviceapi/order.service.js(v=${version})}"></script>
+<script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/order/mixins/orderMixins.js(v=${version})}"></script>
 <script charset="utf-8" type="text/javascript" th:src="@{/js/user-center/order/list.js(v=${version})}"></script>
 </body>
 </html>