Revert "feat: 重构hgcart商品列表为行式布局"
All checks were successful
continuous-integration/drone/push Build is passing

This reverts commit 72bb7918b8.
This commit is contained in:
yiqiu
2026-03-22 21:14:14 +08:00
parent 72bb7918b8
commit cfcbcf3fbc
2 changed files with 868 additions and 860 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -17,82 +17,69 @@
<el-container>
<top-menu></top-menu>
<el-main>
<div class="goods-page">
<!-- 顶部说明 -->
<!-- 自己的东西 -->
<div class="main-card">
<div v-if="commonData.cart_instruction == 1 && commonData.cart_instruction_content" class="cart-des"
v-html="commonData.cart_instruction_content">
</div>
<div class="page-header" v-else>
<h2 class="page-title">{{lang.new_goods}}</h2>
</div>
<!-- 筛选栏 -->
<div class="filter-bar">
<div class="filter-tabs">
<div class="tab-item" :class="{'tab-active': select_first_obj.id === item.id}"
v-for="item in first_group_list" :key="item.id"
@click="select_first_obj.id = item.id; selectFirstType(item.id)">
{{item.name}}
</div>
</div>
<div class="filter-right">
<div class="main-title" v-else>{{lang.new_goods}}</div>
<div class="main-content-box">
<div class="search-box">
<el-select v-model="select_first_obj.id" :placeholder="lang.first_level" @change="selectFirstType">
<el-option v-for="item in first_group_list" :key="item.id " :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-select v-model="select_second_obj.id" :placeholder="lang.second_level" :disabled="secondLoading"
:loading="secondLoading" @change="selectSecondType" class="second-select" size="small">
<el-option v-for="item in second_group_list" :key="item.name" :label="item.name" :value="item.id">
:loading="secondLoading" @change="selectSecondType" class="second-select">
<el-option v-for="item in second_group_list" :key="item.name " :label="item.name" :value="item.id">
</el-option>
</el-select>
<el-input :placeholder="lang.goods_search_placeholder" v-if="!isDomain" clearable v-model="searchValue"
class="search-input" size="small" @keyup.enter.native="searchGoods">
<el-button slot="append" icon="el-icon-search" @click="searchGoods" :loading="searchLoading"></el-button>
</el-input>
class="search-input" @keyup.enter.native="searchGoods"></el-input>
<el-button class="search-btn" type="primary" key="ddd" @click="searchGoods" :loading="searchLoading"
v-if="!isDomain">{{lang.search}}</el-button>
</div>
</div>
<!-- 二级描述 -->
<div class="second-desc" v-if="select_second_obj.description">
<scroll-text mode="loop">
{{select_second_obj.description}}
</scroll-text>
</div>
<!-- 商品列表区域 -->
<div class="goods-container" v-loading="goodSLoading">
<div class="shopping-box" v-loading="goodSLoading">
<template v-if="!isDomain">
<!-- 空状态 -->
<div class="empty-state" v-if="goodsList.length === 0 && !goodSLoading">
<div class="no-goods" v-if="goodsList.length === 0 && !goodSLoading">
<el-empty :description="lang.no_goods"></el-empty>
</div>
<!-- 商品行列表 -->
<div v-else class="goods-table">
<div v-else class="goods-list-div">
<template v-for="(item,index) in goodsList">
<div class="goods-row" :class="{'goods-row-disabled': item.stock_control === 1 && item.qty <= 0}">
<!-- 左侧:名称 + 描述 -->
<div class="row-main">
<div class="row-name-line">
<span class="goods-name-text">{{ item.name }}</span>
<!-- 库存标签 -->
<span class="badge badge-warning" v-if="item.stock_control === 1 && item.qty > 0 && item.qty <= 5">
{{lang.stock}}{{item.qty}}
</span>
<span class="badge badge-danger" v-if="item.stock_control === 1 && item.qty <= 0">
<img src="/{$template_catalog_cart}/template/{$themes_cart}/img/sold_out.svg" alt="" class="sold-icon">
</span>
<!-- 等级标签 -->
<span class="badge badge-primary" v-if="item.client_level_name && item.client_level_name !== ''">
{{lang.shoppingCar_tip_text15}}
</span>
<div class="shopping-item">
<div class="client-box" v-if="item.client_level_name && item.client_level_name !== ''">
<span>{{lang.shoppingCar_tip_text15}}</span>
</div>
<!-- 活动标签 -->
<div class="row-tags" v-if="item.pay_ontrial && item.pay_ontrial?.status === 1 || item.aodun_firewall_product || item.activeList.length > 0 || item.addon_coin === 1">
<span class="tag tag-trial" v-if="item.pay_ontrial && item.pay_ontrial?.status === 1">
<div v-html="item.description" class="goods-description"></div>
<div class="goods-content">
<div class="goods-tag"
v-if="item.pay_ontrial && item.pay_ontrial?.status === 1 || item.aodun_firewall_product">
<div class="tag-item" v-if="item.pay_ontrial && item.pay_ontrial?.status === 1 ">
{{lang.support_trial}}
</span>
<span class="tag tag-firewall" v-if="item.aodun_firewall_product">
</div>
<div class="tag-item" v-if="item.aodun_firewall_product">
{{lang.firewall_text1}}
</span>
<span class="tag tag-coin" v-if="item.addon_coin === 1">
</div>
</div>
<div class="goods-name" :class="{'sold-out':item.stock_control === 1 && item.qty <= 0}">
<div class="goods-name-text">{{ item.name }}</div>
<div class="qty-box" v-if="item.stock_control === 1">
<span v-if="item.qty > 0">{{lang.stock}}<span
class="stock-num">{{item.qty}}</span></span>
<img src="/{$template_catalog_cart}/template/{$themes_cart}/img/sold_out.svg" alt=""
v-else>
</div>
</div>
<div class="goods-active">
<template v-if="item.activeList.length > 0 || item.addon_coin === 1">
<div class="active-name" v-if="item.addon_coin === 1">
{{lang.coin_text10}}{{item.addon_coin_name}}
</span>
</div>
<template v-for="active in item.activeList">
<el-popover placement="top-start" trigger="hover">
<div class="active-item">
@@ -100,34 +87,38 @@
<span v-if="active.type === 'reduce'"> {{lang.goods_text2}} {{active.full}}
{{lang.goods_text3}} {{active.value}}</span>
</div>
<span class="tag tag-promo" slot="reference">{{active.name}}</span>
<div class="active-name" slot="reference">
{{active.name}}
</div>
</el-popover>
</template>
</template>
<template v-else>
<div class="active-name" style="opacity: 0;">
{{lang.subaccount_text55}}
</div>
<!-- 描述 -->
<div v-html="item.description" class="row-desc"></div>
</template>
</div>
<!-- 右侧:价格 + 按钮 -->
<div class="row-action">
<div class="price-group">
<span class="current-price">
<span class="price-prefix">{{commonData.currency_prefix}}</span>{{item.price_discounted || item.price}}<span
class="price-cycle">{{item.cycle ? '/' + item.cycle : ''}}</span>
<div class="price-box">
<div class="price-box-left">
<span class="item-price">
<span
class="item-price-prefix">{{commonData.currency_prefix}}</span>{{item.price_discounted || item.price}}<span
class="item-price-cycle">{{item.cycle ? '/' + item.cycle : ''}}</span>
</span>
<span class="original-price"
v-if="item.price_discounted && item.price != item.price_discounted">
{{commonData.currency_prefix}}{{item.price}}
<span class="item-price-prefix">{{commonData.currency_prefix}}</span> {{item.price}}
</span>
</div>
<el-button :disabled="item.stock_control === 1 && item.qty <= 0" class="buy-btn"
type="primary" @click="goOrder(item)">{{lang.buy}}</el-button>
</div>
</div>
</div>
</template>
</div>
</template>
<!-- ====== 域名搜索区域(保持原有功能) ====== -->
<template v-else>
<div class="domain-box">
<div class="register-type">
@@ -250,6 +241,7 @@
v-if="availList.length !== 0 || unavailList.length !==0 || faillList.length !== 0">
<div class="search-title">{{lang.template_text113}}({{availList.length}})</div>
<div class="avail-list" v-loading="batchLoading">
<!-- 可注册域名 -->
<el-checkbox-group v-model="batchCheckGroup" @change="handleBatchChange">
<div class="batch-item" v-for="(item,index) in availList" :key="index">
<div class="item-left">
@@ -432,6 +424,8 @@
</template>
</div>
<p v-if="!isDomain && !scrollDisabled && goodsList.length !==0" class="tips">{{lang.goods_loading}}</p>
<!-- <p v-if="!isDomain && scrollDisabled && goodsList.length !== 0" class="tips">{{lang.no_more_goods}}</p> -->
</div>
</div>
</el-main>
<div class="up-dialog">
@@ -443,6 +437,7 @@
<input accept="text/plain" type="file" id="upFile" autocomplete="off" tabindex="-1"
style="display: none;">
<input class="file-name" :placeholder="lang.template_text133" readonly :value="fileName">
<!-- 选择文件按钮 -->
<div class="file-btn" @click="selectFile">{{lang.template_text134}}</div>
</div>
</div>