feat: 添加hgcart购物车模板+Drone部署同步
All checks were successful
continuous-integration/drone/push Build is passing

- 解压default_npant.tar.gz到clientarea/cart/hgcart/
- .drone.yml增加hgcart同步到cart/template/pc/
This commit is contained in:
yiqiu
2026-03-22 20:36:15 +08:00
parent 2f0cf620a2
commit a82bf8baa5
29 changed files with 6832 additions and 0 deletions

View File

@@ -0,0 +1,187 @@
<!-- 页面独有样式 -->
<link rel="stylesheet" href="/{$template_catalog_cart}/template/{$themes_cart}/css/shoppingCar.css">
</head>
<body>
<!-- mounted之前显示 -->
<div id="mainLoading">
<div class="ddr ddr1"></div>
<div class="ddr ddr2"></div>
<div class="ddr ddr3"></div>
<div class="ddr ddr4"></div>
<div class="ddr ddr5"></div>
</div>
<div class="template">
<el-container>
<aside-menu></aside-menu>
<el-container>
<top-menu ref="topMenu"></top-menu>
<el-main>
<!-- 自己的东西 -->
<div class="main-card">
<div class="main-title">{{lang.shoppingCar_title}}</div>
<div class="search-box">
<el-input :placeholder="lang.shoppingCar_tip_text" suffix-icon="el-icon-search" @change="searchValChange"
v-model="searchVal">
</el-input>
</div>
<div class="goods-box" v-loading="listLoding">
<div class="goods-item" v-if="showList.length !== 0 || listLoding">
<el-checkbox-group v-model="checkedCities" @change="handleCheckedCitiesChange">
<div v-for="item in nowList" :key="item.position" class="shopping-goods" v-loading="item.isLoading">
<div class="table-name">
<el-checkbox :label="item.position" v-if="item.info">
<span class="goods-name">{{item.name}}</span>
</el-checkbox>
<span class="goods-name mar-left-24" v-else>{{item.name}}</span>
<el-link type="primary" class="edit-goods" v-if="item.info"
@click="goGoods(item)">{{lang.shoppingCar_editGoods}}</el-link>
</div>
<div class="table-content">
<table class="goods-table">
<thead>
<th class="description-box">{{lang.shoppingCar_goodsInfo}}</th>
<th class="price-box">{{lang.shoppingCar_goodsPrice}}</th>
<th class="num-box">{{lang.shoppingCar_goodsNums}}</th>
<th class="total-box">{{lang.shoppingCar_goodsTotalPrice}}</th>
<th class="action-box">{{lang.shoppingCar_goodsAction}}</th>
</thead>
<tbody>
<tr v-if="item.info">
<td>
<div class="info-box">
<div class="goods-info" v-if="false">
<span class="goodsInfo-type">
<span class="goodsInfo-name">{{item.name}}</span>
<span class="goodsInfo-val"></span>
</span>
<span
class="goodsInfo-price">{{commonData.currency_prefix}}{{item.info.base_price}}</span>
</div>
<div v-for="(infoItem,value,index) in item.preview" :key="index" class="goods-info">
<span class="goodsInfo-type">
<span class="goodsInfo-name">{{infoItem.name}}</span>
<span class="goodsInfo-val">{{infoItem.value}}</span>
</span>
<span class="goodsInfo-price">{{commonData.currency_prefix}}{{infoItem.price}}</span>
</div>
</div>
</td>
<td class="item-price">
<template v-if="item.info.host_billing_cycle === 'on_demand'">
{{commonData.currency_prefix}}<span class="price">{{(item.info.base_price * 1).toFixed(2)}}</span>&nbsp;<span class="default-color">{{lang.demand_text1}}</span><br>
{{commonData.currency_prefix}}<span class="price">{{(item.info.base_renew_price * 1).toFixed(4)}}</span>&nbsp;<span class="default-color">/{{lang.demand_text2}}</span><br>
<template v-if="item.info.base_on_demand_flow_price * 1">
{{commonData.currency_prefix}}<span class="price">{{(item.info.base_on_demand_flow_price * 1).toFixed(4)}}</span>&nbsp;<span class="default-color">/GB</span>
</template>
</template>
<template v-else>
{{commonData.currency_prefix}}{{Number(item.price * 1 / item.qty).toFixed(2)}}
<span v-if="item.info.billing_cycle">/ {{ item.info.customfield?.multi_language?.billing_cycle || item.info.billing_cycle}}</span>
</template>
</td>
<td>
<el-input-number v-model="item.qty" size="small"
@change="(currentValue,oldValue)=>handleChange(currentValue,oldValue,item)" :min="1"
:max="item.stock_control === 1 ? item.stock_qty : 99999"></el-input-number>
<p v-if="item.stock_control === 1" :class="item.stock_qty === 0 ? 'red-text':''"
class="qty-num">{{lang.shoppingCar_goods_tock_qty}}{{ item.stock_qty }}</p>
<p v-if="item.isShowTips" class="qty-tips">{{lang.shoppingCar_tock_qty_tip}}</p>
</td>
<td class="item-total" v-loading="item.priceLoading">
<span>{{commonData.currency_prefix}} {{item.calcItemPrice | filterMoney}}</span>
<el-popover placement="top-start" width="200" trigger="hover"
v-if="item.calcItemPrice != item.price">
<div class="show-config-list">
<p v-if="item.level_discount">
{{lang.shoppingCar_tip_text2}}{{commonData.currency_prefix}} {{
item.level_discount | filterMoney }}
</p>
<p v-if="item.code_discount">
{{lang.shoppingCar_tip_text4}}{{commonData.currency_prefix}} {{ item.code_discount
| filterMoney }}
</p>
<p v-if="item.eventDiscount">{{lang.goods_text4}}{{commonData.currency_prefix}} {{
item.eventDiscount | filterMoney }}</p>
</div>
<i class="el-icon-warning-outline total-icon" slot="reference"></i>
</el-popover>
<p class="original-price" v-if="item.calcItemPrice != item.price">
{{commonData.currency_prefix}} {{item.price | filterMoney}}
</p>
<div class="discount-box">
<discount-code v-if="item.customfield && !item.customfield.promo_code && isShowPromo"
@get-discount="getDiscount(arguments)" scene='new' :product_id='item.product_id'
:qty="item.qty" :amount="item.price" :billing_cycle_time="item.info.duration"
:shopping_index="item.position">
</discount-code>
<div v-if="item.customfield && item.customfield.promo_code" class="discount-codeNumber">
{{ item.customfield.promo_code }}
<i class="el-icon-circle-close remove-discountCode"
@click="removeDiscountCode(item)"></i>
</div>
<event-code v-if="item.info && item.info.duration !=='' && isShowFull"
:id="item.customfield.event_promotion" :product_id='item.product_id' :qty="item.qty"
:amount="item.price" :billing_cycle_time="item.info.duration"
@change="(price) => changeEventCode(price,item)">
</event-code>
</div>
</td>
<td class="delete-btn">
<i class="el-icon-delete" @click="handelDeleteGoods(item)"></i>
</td>
</tr>
<tr v-else>
<td></td>
<td class="no-goods-td">
<span class="no-goods-tips">{{lang.shoppingCar_no_goods_tip}}</span>
<el-button class="buy-again-btn"
@click="goGoods(item)">{{lang.shoppingCar_buy_again}}</el-button>
</td>
<td></td>
<td></td>
<td class="delete-btn">
<i class="el-icon-delete" @click="handelDeleteGoods(item)"></i>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</el-checkbox-group>
</div>
<div v-else>
<el-empty :description="lang.shoppingCar_no_goods_text"></el-empty>
</div>
</div>
</div>
</el-main>
<el-footer>
<div class="footer-box">
<div class="footer-left">
<el-checkbox class="all-check" v-model="checkAll"
@change="handleCheckAllChange">{{lang.shoppingCar_select_all}}</el-checkbox>
<span class="delect-btn">
<el-link type="danger" class="delect-goods"
@click="deleteCheckGoods">{{lang.shoppingCar_delete_select}}</el-link>
</span>
<span>{{lang.shoppingCar_selected}}<span
class="text-red">{{checkedCities.length}}</span>{{lang.shoppingCar_goods_text}}</span>
</div>
<div class="footer-right">
<p>{{lang.shoppingCar_tip_text3}}<span
class="total-price">{{commonData.currency_prefix}}{{totalPrice | filterMoney}}</span></p>
<el-button type="primary" class="buy-btn" @click="goSettle"
:loading="settleLoading">{{lang.shoppingCar_buy_text}}</el-button>
</div>
</div>
</el-footer>
</el-container>
</el-container>
</div>
<!-- =======页面独有======= -->
<script src="/{$template_catalog_cart}/template/{$themes_cart}/api/shopping.js"></script>
<script src="/{$template_catalog}/template/{$themes}/components/discountCode/discountCode.js"></script>
<script src="/{$template_catalog}/template/{$themes}/components/eventCode/eventCode.js"></script>
<script src="/{$template_catalog_cart}/template/{$themes_cart}/js/shoppingCar.js"></script>