zhb 1 mese fa
parent
commit
8199dfeb8d

+ 2 - 8
components/cwg-complex-search.vue

@@ -57,13 +57,7 @@
                 </view>
                 <view v-else class="mobile-date-wrapper"></view>
                 <button class="filter-chip" @click="openFilterPopup">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
-                        stroke="#141d22" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
-                        class="filter-icon">
-                        <path
-                            d="M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z">
-                        </path>
-                    </svg>
+                    <cwg-icon name="cwg-filter" :size="16" color="#141d22" />
                     <text class="filter-label" v-t="'Documentary.tradingCenter.item3'" />
                 </button>
             </view>
@@ -80,7 +74,7 @@
                                 clearable />
                         </template>
                         <template v-else-if="field.type === 'select'">
-                            <uni-data-select v-model:value="tempFormData[field.key]" :localdata="field.options"
+                            <cwg-combox v-model:value="tempFormData[field.key]" :options="field.options"
                                 :placeholder="field.placeholder || '请选择'" :clearable="false"
                                 :placement="'bottom'"
                                 v-if="shouldUseSelect(field)" />

+ 57 - 0
components/cwg-rich-text.vue

@@ -0,0 +1,57 @@
+<template>
+    <rich-text :nodes="props.nodes" @itemclick="handleTap" />
+</template>
+
+<script setup lang="ts">
+import { computed, defineProps } from 'vue'
+
+const props = defineProps({
+    nodes: {
+        type: String,
+        default: ''
+    }
+})
+
+// 🔥 核心:保留原有 a 标签样式 + 增加 data-href 实现点击
+const formattedNodes = computed(() => {
+    let html = props.nodes || ''
+    // if (!html) return ''
+
+    // // 替换 a 标签 → 保留所有原有样式,只加 data-href + cursor
+    // html = html.replace(
+    //     /<a([^>]+)>(.*?)<\/a>/gi,
+    //     (match, attr, text) => {
+    //         return `<span${attr} data-href="${getHref(attr)}" style="cursor:pointer;">${text}</span>`
+    //     }
+    // )
+
+    return html
+})
+
+// 从 a 标签属性里提取 href
+function getHref(attr: string) {
+    const match = attr.match(/href\s*=\s*["']([^"']+)["']/i)
+    return match ? match[1] : ''
+}
+
+// 点击跳转逻辑
+const handleTap = (e) => {
+    const href = e?.detail?.node?.attrs?.href
+    if (!href) return
+    // #ifdef H5
+    window.open(href, '_blank')
+    // #endif
+
+    // #ifdef APP-PLUS
+    if (href.startsWith('http')) {
+        plus.runtime.openURL(href)
+    } else {
+        uni.navigateTo({ url: href })
+    }
+    // #endif
+}
+</script>
+
+<style scoped>
+/* 无需额外样式 */
+</style>

+ 35 - 40
components/cwg-tabel.vue

@@ -39,19 +39,17 @@
                                 <text>{{ getNoteText(row, locale, userStore) }}</text>
                             </view>
                             <view v-else-if="column.type === 'action'" class="action-wrapper">
-                                <cwg-droplist
-                                    v-if="getComputedMenuList(column.menuList, row).length > 0"
-                                    :menuList="getComputedMenuList(column.menuList, row)"
-                                    placement="bottom-end"
-                                    @menuClick="(payload) => handleActionClick(payload, row)"
-                                >
+                                <cwg-droplist v-if="getComputedMenuList(column.menuList, row).length > 0"
+                                    :menuList="getComputedMenuList(column.menuList, row)" placement="bottom-end"
+                                    @menuClick="(payload) => handleActionClick(payload, row)">
                                     <view class="action-trigger">
                                         <cwg-icon name="crm-ellipsis" :size="24" color="#000" />
                                     </view>
                                 </cwg-droplist>
                             </view>
                             <template v-else-if="column.type === 'more'">
-                                <cwg-icon v-if="isMobile" name="crm-chevron-down" class="crm-chevron-down" :size="16" color="#007" />
+                                <cwg-icon v-if="isMobile" name="crm-chevron-down" class="crm-chevron-down" :size="16"
+                                    color="#007" />
                             </template>
 
                             <template v-else>
@@ -128,12 +126,13 @@
             <view class="pagination">
                 <view class="page-item prev" :class="{ disabled: pagination.current === 1 }"
                     @click="handlePageChange('prev')">
-                    <uni-icons type="arrowright" size="14" :color="pagination.current === 1 ? '#c0c4cc' : '#606266'"  class="arrow-left"/>
+                    <uni-icons type="arrowright" size="14" :color="pagination.current === 1 ? '#c0c4cc' : '#606266'"
+                        class="arrow-left" />
                 </view>
 
                 <view class="page-numbers">
                     <view v-for="(page, index) in visiblePages" :key="index" class="page-number"
-                        :class="{ active: pagination.current === page, ellipsis: page === '...' }" 
+                        :class="{ active: pagination.current === page, ellipsis: page === '...' }"
                         @click="page !== '...' && handlePageChange(page)">
                         {{ page }}
                     </view>
@@ -141,7 +140,8 @@
 
                 <view class="page-item next" :class="{ disabled: pagination.current === pagination.pages }"
                     @click="handlePageChange('next')">
-                    <uni-icons type="arrowright" size="14" :color="pagination.current === pagination.pages ? '#c0c4cc' : '#606266'" />
+                    <uni-icons type="arrowright" size="14"
+                        :color="pagination.current === pagination.pages ? '#c0c4cc' : '#606266'" />
                 </view>
             </view>
         </view>
@@ -149,9 +149,9 @@
         <!-- <cwg-detail-popup v-model:visible="detailVisible" title="详情" :items="detailItems" /> -->
         <cwg-detail-popup v-model:visible="detailVisible" title="详情" :row="detailRow" :columns="detailColumns">
             <template v-for="col in detailColumns" :key="col.prop" #[`cell-${col.prop}`]="{ row, column }">
-              <view v-if="col.type === 'file'">
-                <cwg-file :path="row[column.prop]" />
-              </view>
+                <view v-if="col.type === 'file'">
+                    <cwg-file :path="row[column.prop]" />
+                </view>
                 <slot v-else-if="col.slot" :name="col.slot" :row="row" :column="column" :index="0" />
             </template>
         </cwg-detail-popup>
@@ -221,6 +221,7 @@ const props = defineProps({
     headerStyle: { type: Object, default: () => ({}) },
     stickyHeader: { type: Boolean, default: true },
     stickyOffset: { type: [String, Number], default: '0' },
+    // 是否跳转页面
     isPages: { type: Boolean, default: false },
     // 自定义详情的时候,手机端才跳转,pc端不跳转
     pagesToDetail: { type: Boolean, default: false },
@@ -346,13 +347,13 @@ const visiblePages = computed(() => {
     const totalPages = pagination.value.pages
     const currentPage = pagination.value.current
     const maxVisible = 4 // 显示的页码数量(包括第一页和最后一页)
-    
+
     if (totalPages <= maxVisible) {
         return Array.from({ length: totalPages }, (_, i) => i + 1)
     }
-    
+
     let pages = []
-    
+
     if (currentPage <= 2) {
         // 当前页靠前:[1, 2, '...', 最后一页]
         pages = [1, 2, '...', totalPages]
@@ -364,7 +365,7 @@ const visiblePages = computed(() => {
         // 或者:[1, 当前页, '...', 最后一页] 以确保当前页能点到
         pages = [1, '...', currentPage, totalPages]
     }
-    
+
     return pages
 })
 // ========== 工具函数 ==========
@@ -540,23 +541,17 @@ const toggleRowExpand = (rowIndex) => {
 // 打开详情弹窗(移动端使用)
 // 修改 openRowDetail
 const openRowDetail = (row) => {
-
     if (props.isPages) {
-      if (props.pagesToDetail){
-        if (isMobile.value){
-          emit('go-pages', row)
-        }
-      }else {
-      }
-    } else if (!isMobile.value) {
-        // 只有移动端才打开详情弹窗
         emit('go-pages', row)
-        return
     } else {
-        // 保存当前行和需要显示的列(有 prop 且有 label) pc 详情不展示操作按钮
-        detailRow.value = { ...row, note: getNoteText(row, locale.value, userStore) }
-        detailColumns.value = !isMobile.value ? props.columns.filter(col => col && col.prop && col.label && col.type !== 'action') : props.columns.filter(col => col && col.prop && col.label)
-        detailVisible.value = true
+        if (props.pagesToDetail) {
+            emit('go-pages', row)
+        } else if (isMobile.value) {
+            // 保存当前行和需要显示的列(有 prop 且有 label) pc 详情不展示操作按钮
+            detailRow.value = { ...row, note: getNoteText(row, locale.value, userStore) }
+            detailColumns.value = !isMobile.value ? props.columns.filter(col => col && col.prop && col.label && col.type !== 'action') : props.columns.filter(col => col && col.prop && col.label)
+            detailVisible.value = true
+        }
     }
 }
 const setDetailVisible = (visible) => {
@@ -773,8 +768,8 @@ defineExpose({
 
 .table-container {
     width: 100%;
-     overflow-x: auto;
-     -webkit-overflow-scrolling: touch;
+    overflow-x: auto;
+    -webkit-overflow-scrolling: touch;
     margin-top: px2rpx(20);
     max-height: calc(100vh - 209px);
     color: var(--color-slate-800);
@@ -817,11 +812,11 @@ defineExpose({
 
         /* 强制显示滚动条并美化 */
         &::-webkit-scrollbar {
-            width: 4px!important;
-            height: 4px!important;
-            display: block!important;
+            width: 4px !important;
+            height: 4px !important;
+            display: block !important;
             /* 强制在某些webkit浏览器中显示 */
-            background-color: transparent!important;
+            background-color: transparent !important;
         }
 
         &::-webkit-scrollbar-track {
@@ -1039,7 +1034,7 @@ defineExpose({
         cursor: pointer;
         transition: all 0.3s;
         font-weight: 500;
-        
+
         &.ellipsis {
             cursor: default;
             background: transparent;
@@ -1056,7 +1051,7 @@ defineExpose({
             background-color: #cf1322;
             color: #fff;
             border-color: #cf1322;
-            
+
             &:hover {
                 color: #fff;
             }
@@ -1092,7 +1087,7 @@ defineExpose({
         width: 100%;
         overflow-x: auto;
         -webkit-overflow-scrolling: touch;
-        
+
         &::-webkit-scrollbar {
             display: none;
         }

+ 1 - 1
components/cwg-tips-popup.vue

@@ -7,7 +7,7 @@
                 v-t="content" />
             <view v-else class="des1" style="font-size: 15px; line-height: 1.6; margin: 30px 0 50px" v-t="content">
             </view>
-            <rich-text class="popup-text" :nodes="introduce"></rich-text>
+            <cwg-rich-text class="popup-text" :nodes="introduce" />
         </view>
         <template #footer>
             <button @click="visible = false">{{ t('Btn.Cancel') }}</button>

+ 5 - 5
pages/activities/index.vue

@@ -415,7 +415,7 @@
                 <button type="primary" @click="toApplyNoWorries">{{
                     t('news_add_field1.activitiesNoWorries.item6_1') }}</button>
                 <button @click="toApplyNoWorriesCancel">{{ t('news_add_field1.activitiesNoWorries.item6_2')
-                    }}</button>
+                }}</button>
             </template>
         </cwg-popup>
 
@@ -430,7 +430,7 @@
                 <button type="primary" @click="realizationNoWorries">{{
                     t('news_add_field1.activitiesNoWorries.item6_1') }}</button>
                 <button @click="dialogNoWorries = false">{{ t('news_add_field1.activitiesNoWorries.item6_2')
-                }}</button>
+                    }}</button>
             </template>
         </cwg-popup>
 
@@ -445,7 +445,7 @@
                 <button type="primary" @click="dialogNoWorriesApply = false">{{
                     t('news_add_field1.activitiesNoWorries.item6_1') }}</button>
                 <button @click="dialogNoWorriesApply = false">{{ t('news_add_field1.activitiesNoWorries.item6_2')
-                    }}</button>
+                }}</button>
             </template>
         </cwg-popup>
 
@@ -470,7 +470,7 @@
             </view>
             <template #footer>
                 <button type="primary" @click="calculateIncome">{{ t('news_add_field1.NewYear24.item8_1')
-                }}</button>
+                    }}</button>
                 <button @click="openCalculatorFlag = false">{{ t('news_add_field1.NewYear24.item8_2') }}</button>
             </template>
         </cwg-popup>
@@ -542,7 +542,7 @@
                             t('Drawer.Label.ActivityList') }}:</view>
                     </view>
                     <cwg-tabel ref="tableRef" :columns="columns" :mobilePrimaryFields="mobilePrimaryFields"
-                        :isPages="true" :queryParams="search1" :api="getApplyListApi" @go-pages="goPages">
+                        :queryParams="search1" :api="getApplyListApi">
                         <template #status="{ row }">
                             <text v-if="row.status == 1" v-t="'State.ToBeProcessed'"></text>
                             <text v-if="row.status == 2 && row.completeStatus == 0" v-t="'State.Ongoing'"></text>

+ 43 - 31
pages/analytics/components/List.vue

@@ -140,9 +140,12 @@ defineExpose({ load, loadMore })
 
   .list {
     display: grid;
-    grid-row-gap: px2rpx(16);
-    grid-column-gap: px2rpx(24);
-    grid-template-columns: repeat(auto-fill, minmax(px2rpx(389), 1fr));
+    grid-row-gap: px2rpx(20);
+    grid-column-gap: px2rpx(16);
+    grid-template-columns: repeat(3, 1fr);
+    @media screen and (max-width: 768px) {
+      grid-template-columns: 1fr;
+    }
     width: 100%;
     box-sizing: border-box;
   }
@@ -152,47 +155,52 @@ defineExpose({ load, loadMore })
     flex-direction: column;
     justify-content: flex-start;
     align-items: flex-start;
-    padding: px2rpx(20);
-    gap: px2rpx(10);
-    margin-bottom: px2rpx(10);
-    background: #fafafa;
-    border-radius: px2rpx(8);
+    padding: px2rpx(16);
+    gap: px2rpx(12);
+    background: #fff;
+    border-radius: px2rpx(12);
     overflow: hidden;
-    box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05);
+    box-shadow:
+      0 2rpx 8rpx rgba(0, 0, 0, 0.04),
+      0 1rpx 2rpx rgba(0, 0, 0, 0.06);
     box-sizing: border-box;
     transition: all 0.3s ease;
+    border: 1rpx solid rgba(0, 0, 0, 0.03);
+
+    &:active {
+      transform: scale(0.98);
+      box-shadow: 0 1rpx 4rpx rgba(0, 0, 0, 0.08);
+    }
 
+    /* #ifdef H5 */
     &:hover {
       transform: translateY(-4rpx);
-      box-shadow: 0 8rpx 16rpx rgba(0, 0, 0, 0.1);
-      background: #fff;
+      box-shadow:
+        0 8rpx 24rpx rgba(0, 0, 0, 0.08),
+        0 4rpx 8rpx rgba(0, 0, 0, 0.06);
     }
 
-    /* 添加悬停效果(仅H5) */
-    /* #ifdef H5 */
-    .news-item:hover {
-      .img-wrap .cover-img {
-        transform: scale(1.05);
-      }
+    &:hover .img-wrap .cover-img {
+      transform: scale(1.05);
     }
 
     /* #endif */
 
-    /* 外层固定图片容器,防止溢出 */
     .img-wrap {
-      width: px2rpx(300);
-      height: px2rpx(242);
+      width: 100%;
+      height: px2rpx(220);
       border-radius: px2rpx(8);
       overflow: hidden;
       flex-shrink: 0;
       position: relative;
+      background: linear-gradient(135deg, #f5f7fa 0%, #e4e8ec 100%);
     }
 
     .cover-img {
       width: 100%;
       height: 100%;
       object-fit: cover;
-      transition: transform 0.6s ease;
+      transition: transform 0.5s cubic-bezier(0.4, 0, 0.2, 1);
     }
 
     .info {
@@ -201,37 +209,41 @@ defineExpose({ load, loadMore })
       display: flex;
       flex-direction: column;
       justify-content: space-between;
+      min-height: px2rpx(120);
     }
 
     .title {
-      font-size: px2rpx(16);
-      font-weight: bold;
-      color: #333;
-      line-height: 1.4;
-      margin-bottom: px2rpx(6);
+      font-size: px2rpx(17);
+      font-weight: 600;
+      color: #1a1a1a;
+      line-height: 1.5;
+      margin-bottom: px2rpx(8);
       display: -webkit-box;
       -webkit-box-orient: vertical;
       -webkit-line-clamp: 2;
       overflow: hidden;
+      letter-spacing: 0.3rpx;
     }
 
     .subtitle {
       font-size: px2rpx(14);
-      color: #666;
-      line-height: 1.4;
+      color: #666666;
+      line-height: 1.6;
       display: -webkit-box;
       -webkit-box-orient: vertical;
       -webkit-line-clamp: 2;
       overflow: hidden;
-      margin-bottom: px2rpx(6);
+      margin-bottom: px2rpx(10);
     }
 
     .meta {
       display: flex;
-      justify-content: space-between;
+      justify-content: flex-start;
       align-items: center;
       font-size: px2rpx(12);
-      color: #999;
+      color: #999999;
+      padding-top: px2rpx(8);
+      border-top: 1rpx solid #f0f0f0;
     }
   }
 }

+ 7 - 6
pages/analytics/detail.vue

@@ -7,7 +7,7 @@
                 <view class="img" v-if="imgContentIf">
                     <image :src="imgContent" mode="widthFix" @click="previewImage(imgContent)" />
                 </view>
-                <rich-text :nodes="Content" />
+                <cwg-rich-text :nodes="Content" />
             </view>
 
             <!-- 视频评论(WebTV 视频) -->
@@ -31,7 +31,7 @@
                     <video :id="`dplayer-${type}`" :src="imgContent" controls class="video-player" />
                 </view>
                 <view class="rich-text-wrapper">
-                    <rich-text :nodes="info.content" />
+                    <cwg-rich-text :nodes="info.content" />
                 </view>
             </view>
 
@@ -39,7 +39,7 @@
             <view class="content crm-border-radius" v-if="type === 7">
                 <text class="con-title">{{ info.subject }}</text>
                 <view class="rich-text-wrapper">
-                    <rich-text :nodes="info.content" />
+                    <cwg-rich-text :nodes="info.content" />
                 </view>
             </view>
 
@@ -55,10 +55,11 @@
                     <view>
                         <text class="news-title">{{ info.title }}</text>
                         <view class="rich-text-wrapper">
-                            <rich-text :nodes="info.content" />
+                            <cwg-rich-text :nodes="info.content" />
                         </view>
                         <view class="news-status">
-                            <cwg-link type="html" title="blockchain.item12" :url="imgUrl + info.bookUrl" target="_blank" />
+                            <cwg-link type="html" title="blockchain.item12" :url="imgUrl + info.bookUrl"
+                                target="_blank" />
                         </view>
                     </view>
                 </view>
@@ -86,7 +87,7 @@ import { newsApi } from '@/service/news'
 import Config from '@/config/index'
 
 const { t } = useI18n()
-const { Code, Host80,Host05 } = Config
+const { Code, Host80, Host05 } = Config
 
 // 路由参数
 const type = ref(null)

+ 1 - 1
pages/common/notice.vue

@@ -7,7 +7,7 @@
                     :placeholder="t('Custom.PaymentHistory.StatusPlaceholder')" />
             </view>
             <cwg-tabel ref="tableRef" :columns="columns" :mobilePrimaryFields="mobilePrimaryFields"
-                :queryParams="search" :api="listApi" @go-pages="goPages">
+                :queryParams="search" :api="listApi" @go-pages="goPages" :isPages="true">
                 <template #status="{ row }">
                     <text class="cwg-cursor">{{readOptions.find(item => item.value === row.read)?.text}}</text>
                 </template>

+ 6 - 2
pages/customer/account-select.vue

@@ -44,7 +44,7 @@
                 <!-- 移动端轮播视图 -->
                 <view class="mobile-view">
                     <swiper class="account-swiper" :current="currentSwiperIndex" circular indicator-dots
-                        indicator-active-color="#1e2a3a" @change="onSwiperChange">
+                        indicator-active-color="#cf1322" @change="onSwiperChange">
                         <swiper-item v-for="account in filteredAccounts" :key="account.id">
                             <view class="account-card" @click="onAccountSelect(account.id)"
                                 :class="{ 'active': account.id == selectedAccountId }">
@@ -379,10 +379,14 @@ radio {
     }
 
     .account-swiper {
-        height: px2rpx(520);
+        min-height: px2rpx(480);
         width: 100%;
 
     }
+    :deep(uni-swiper-item){
+        padding: 10px;
+        box-sizing: border-box;
+    }
 
     .account-card {
         background: #fff;

+ 1 - 2
pages/customer/components/AccountList.vue

@@ -361,7 +361,7 @@ onMounted(async () => {
         .btn-primary {
             min-width: px2rpx(120);
             background-color: var(--color-error);
-            color: var(--color-slate-150);
+            color: #fff;
             padding: 0 px2rpx(12);
             border: none;
             font-size: px2rpx(14);
@@ -375,7 +375,6 @@ onMounted(async () => {
 
         .btn-primary1 {
             background-color: #cf1322;
-            ;
         }
 
         .btn-primary2 {

+ 1 - 1
pages/customer/components/ClauseNewListPopup.vue

@@ -3,7 +3,7 @@
     :title="title">
     <view class="popup-content">
       <scroll-view scroll-y class="clause-content">
-        <rich-text class="popup-text" :nodes="content"></rich-text>
+        <cwg-rich-text class="popup-text" :nodes="content" />
       </scroll-view>
     </view>
     <template #footer>

+ 5 - 67
pages/customer/components/TerminalDialog.vue

@@ -4,83 +4,26 @@
         <view class="card-list">
             <view class="card" @click="handleWebClick">
                 <view class="card-icon">
-                    <svg width="48" height="48" viewBox="0 0 48 48" class="muiltr-l39xog">
-                        <rect width="48" height="48" rx="8" fill="#141D22"></rect>
-                        <path
-                            d="M24.3183 13.6533C26.025 13.6533 27.4116 12.2667 27.4116 10.56C27.4116 8.85334 26.025 7.46667 24.3183 7.46667C22.6116 7.46667 21.225 8.85334 21.225 10.56C21.225 12.2667 22.6116 13.6533 24.3183 13.6533Z"
-                            fill="white"></path>
-                        <path
-                            d="M24.3174 31.5951C27.3254 31.5951 29.768 29.1524 29.768 26.1444C29.768 23.1364 27.3254 20.6937 24.3174 20.6937C21.3094 20.6937 18.8667 23.1364 18.8667 26.1444C18.8667 29.1524 21.3094 31.5951 24.3174 31.5951Z"
-                            fill="white"></path>
-                        <path
-                            d="M28.8627 12.4052C28.8627 12.4052 28.7774 12.3732 28.724 12.3625C28.0094 14.1012 26.3027 15.3279 24.308 15.3279C22.3134 15.3279 20.6067 14.1012 19.892 12.3625C19.8494 12.3732 19.8067 12.3945 19.7534 12.4052C18.26 12.9065 17.3 14.3572 17.3 15.9252V20.3092C17.4494 20.5012 17.588 20.7039 17.7587 20.8745L18.868 21.9839C19.4227 21.2479 20.1267 20.6292 20.9267 20.1705V18.9759C20.9267 18.2825 21.4814 17.7279 22.1747 17.7279H26.4094C27.1027 17.7279 27.6574 18.2825 27.6574 18.9759V20.1065C28.532 20.5865 29.2787 21.2585 29.8654 22.0479L30.8254 21.0879C30.996 20.9172 31.1454 20.7145 31.284 20.5225V15.9145C31.284 14.3465 30.324 12.8959 28.8307 12.3945L28.8627 12.4052Z"
-                            fill="white"></path>
-                        <path
-                            d="M13.245 32.4272C12.3916 30.9445 10.5036 30.4325 9.02095 31.2859C7.53828 32.1392 7.02628 34.0272 7.87962 35.5099C8.73295 36.9925 10.621 37.5045 12.1036 36.6512C13.5863 35.7979 14.0983 33.9099 13.245 32.4272Z"
-                            fill="white"></path>
-                        <path
-                            d="M9.92847 29.2056V29.2376C11.7951 28.9923 13.7151 29.8563 14.7071 31.5843C15.6991 33.3123 15.4858 35.403 14.3338 36.8856C14.3338 36.8856 14.3445 36.8963 14.3551 36.907C15.5605 38.0163 17.3845 38.1123 18.8031 37.3016L22.5151 35.1683C22.6111 34.9443 22.7071 34.7203 22.7711 34.4856L23.1765 32.971C22.2591 32.8536 21.3738 32.555 20.5738 32.0856L19.3258 32.8003C18.8458 33.0776 18.2378 32.907 17.9711 32.4376L15.6138 28.331C15.3365 27.851 15.5071 27.243 15.9765 26.9763L17.1818 26.283C17.1605 25.291 17.3738 24.299 17.7685 23.3923L16.4458 23.0403C16.2111 22.9763 15.9658 22.955 15.7311 22.923L11.8271 25.163C10.4085 25.9736 9.57647 27.6056 9.92847 29.2056Z"
-                            fill="white"></path>
-                        <path
-                            d="M35.3692 32.4272C36.2226 30.9445 38.1106 30.4325 39.5932 31.2859C41.0759 32.1392 41.5879 34.0272 40.7346 35.5099C39.8812 36.9925 37.9932 37.5045 36.5106 36.6512C35.0279 35.7979 34.5159 33.9099 35.3692 32.4272Z"
-                            fill="white"></path>
-                        <path
-                            d="M38.6959 29.2058V29.2378C36.8292 28.9925 34.9092 29.8565 33.9172 31.5845C32.9252 33.3125 33.1385 35.4031 34.2905 36.8858C34.2905 36.8858 34.2799 36.8965 34.2692 36.9071C33.0639 38.0165 31.2399 38.1125 29.8212 37.3018L26.1092 35.1685C26.0132 34.9445 25.9172 34.7205 25.8532 34.4858L25.4479 32.9711C26.3652 32.8538 27.2505 32.5551 28.0505 32.0858L28.9252 32.5871C29.6079 32.9818 30.4825 32.7471 30.8772 32.0645L32.8079 28.7045C33.2025 28.0218 32.9679 27.1471 32.2852 26.7525L31.4532 26.2725C31.4745 25.2805 31.2612 24.2885 30.8665 23.3818L32.1892 23.0298C32.4239 22.9658 32.6692 22.9445 32.9039 22.9125L36.8079 25.1525C38.2265 25.9631 39.0585 27.5951 38.7065 29.1951L38.6959 29.2058Z"
-                            fill="white"></path>
-                    </svg>
+                    <cwg-icon name="cwg-mt" :size="48" color="#fff" />
                 </view>
                 <view class="card-content">
                     <text class="card-title">{{ webTitle }}</text>
                     <text class="card-desc">{{ t('Downloadpage.item40') }}</text>
                 </view>
                 <view class="card-arrow">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
-                        stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
-                        class="muiltr-isq1pf">
-                        <path d="M5 12l14 0"></path>
-                        <path d="M13 18l6 -6"></path>
-                        <path d="M13 6l6 6"></path>
-                    </svg>
+                    <cwg-icon name="cwg-arrow" :size="24" color="#141d22" />
                 </view>
             </view>
             <view class="card" @click="handleDownloadClick">
                 <view class="card-icon">
-                    <svg width="48" height="48" viewBox="0 0 48 48" class="muiltr-l39xog">
-                        <rect width="48" height="48" rx="8" fill="#141D22"></rect>
-                        <path
-                            d="M24.3183 13.6533C26.025 13.6533 27.4116 12.2667 27.4116 10.56C27.4116 8.85334 26.025 7.46667 24.3183 7.46667C22.6116 7.46667 21.225 8.85334 21.225 10.56C21.225 12.2667 22.6116 13.6533 24.3183 13.6533Z"
-                            fill="white"></path>
-                        <path
-                            d="M24.3174 31.5951C27.3254 31.5951 29.768 29.1524 29.768 26.1444C29.768 23.1364 27.3254 20.6937 24.3174 20.6937C21.3094 20.6937 18.8667 23.1364 18.8667 26.1444C18.8667 29.1524 21.3094 31.5951 24.3174 31.5951Z"
-                            fill="white"></path>
-                        <path
-                            d="M28.8627 12.4052C28.8627 12.4052 28.7774 12.3732 28.724 12.3625C28.0094 14.1012 26.3027 15.3279 24.308 15.3279C22.3134 15.3279 20.6067 14.1012 19.892 12.3625C19.8494 12.3732 19.8067 12.3945 19.7534 12.4052C18.26 12.9065 17.3 14.3572 17.3 15.9252V20.3092C17.4494 20.5012 17.588 20.7039 17.7587 20.8745L18.868 21.9839C19.4227 21.2479 20.1267 20.6292 20.9267 20.1705V18.9759C20.9267 18.2825 21.4814 17.7279 22.1747 17.7279H26.4094C27.1027 17.7279 27.6574 18.2825 27.6574 18.9759V20.1065C28.532 20.5865 29.2787 21.2585 29.8654 22.0479L30.8254 21.0879C30.996 20.9172 31.1454 20.7145 31.284 20.5225V15.9145C31.284 14.3465 30.324 12.8959 28.8307 12.3945L28.8627 12.4052Z"
-                            fill="white"></path>
-                        <path
-                            d="M13.245 32.4272C12.3916 30.9445 10.5036 30.4325 9.02095 31.2859C7.53828 32.1392 7.02628 34.0272 7.87962 35.5099C8.73295 36.9925 10.621 37.5045 12.1036 36.6512C13.5863 35.7979 14.0983 33.9099 13.245 32.4272Z"
-                            fill="white"></path>
-                        <path
-                            d="M9.92847 29.2056V29.2376C11.7951 28.9923 13.7151 29.8563 14.7071 31.5843C15.6991 33.3123 15.4858 35.403 14.3338 36.8856C14.3338 36.8856 14.3445 36.8963 14.3551 36.907C15.5605 38.0163 17.3845 38.1123 18.8031 37.3016L22.5151 35.1683C22.6111 34.9443 22.7071 34.7203 22.7711 34.4856L23.1765 32.971C22.2591 32.8536 21.3738 32.555 20.5738 32.0856L19.3258 32.8003C18.8458 33.0776 18.2378 32.907 17.9711 32.4376L15.6138 28.331C15.3365 27.851 15.5071 27.243 15.9765 26.9763L17.1818 26.283C17.1605 25.291 17.3738 24.299 17.7685 23.3923L16.4458 23.0403C16.2111 22.9763 15.9658 22.955 15.7311 22.923L11.8271 25.163C10.4085 25.9736 9.57647 27.6056 9.92847 29.2056Z"
-                            fill="white"></path>
-                        <path
-                            d="M35.3692 32.4272C36.2226 30.9445 38.1106 30.4325 39.5932 31.2859C41.0759 32.1392 41.5879 34.0272 40.7346 35.5099C39.8812 36.9925 37.9932 37.5045 36.5106 36.6512C35.0279 35.7979 34.5159 33.9099 35.3692 32.4272Z"
-                            fill="white"></path>
-                        <path
-                            d="M38.6959 29.2058V29.2378C36.8292 28.9925 34.9092 29.8565 33.9172 31.5845C32.9252 33.3125 33.1385 35.4031 34.2905 36.8858C34.2905 36.8858 34.2799 36.8965 34.2692 36.9071C33.0639 38.0165 31.2399 38.1125 29.8212 37.3018L26.1092 35.1685C26.0132 34.9445 25.9172 34.7205 25.8532 34.4858L25.4479 32.9711C26.3652 32.8538 27.2505 32.5551 28.0505 32.0858L28.9252 32.5871C29.6079 32.9818 30.4825 32.7471 30.8772 32.0645L32.8079 28.7045C33.2025 28.0218 32.9679 27.1471 32.2852 26.7525L31.4532 26.2725C31.4745 25.2805 31.2612 24.2885 30.8665 23.3818L32.1892 23.0298C32.4239 22.9658 32.6692 22.9445 32.9039 22.9125L36.8079 25.1525C38.2265 25.9631 39.0585 27.5951 38.7065 29.1951L38.6959 29.2058Z"
-                            fill="white"></path>
-                    </svg>
+                    <cwg-icon name="cwg-mt" :size="48" color="#fff" />
                 </view>
                 <view class="card-content">
                     <text class="card-title">{{ downloadItem.name }}</text>
                     <text class="card-desc">{{ downloadItem.description }}</text>
                 </view>
                 <view class="card-arrow">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
-                        stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
-                        <path d="M5 12l14 0"></path>
-                        <path d="M13 18l6 -6"></path>
-                        <path d="M13 6l6 6"></path>
-                    </svg>
+                    <cwg-icon name="cwg-arrow" :size="24" color="#141d22" />
                 </view>
             </view>
             <view @click="handleClick" class="card">
@@ -88,12 +31,7 @@
                     <text class="card-title" v-t="'vu.item13'"></text>
                 </view>
                 <view class="card-arrow">
-                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"
-                        stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
-                        <path d="M5 12l14 0"></path>
-                        <path d="M13 18l6 -6"></path>
-                        <path d="M13 6l6 6"></path>
-                    </svg>
+                    <cwg-icon name="cwg-arrow" :size="24" color="#141d22" />
                 </view>
             </view>
         </view>

+ 1 - 8
pages/customer/components/TerminalInfoDialog.vue

@@ -14,14 +14,7 @@
                 <cwg-label-line-value :label="field.label" :value="getFieldValue(field.key)">
                     <template #operation v-if="field.copyable">
                         <view class="copy-btn" @click="copyValue(getFieldValue(field.key))">
-                            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"
-                                fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
-                                stroke-linejoin="round">
-                                <path
-                                    d="M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z" />
-                                <path
-                                    d="M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" />
-                            </svg>
+                            <cwg-icon name="copy" :size="20" color="#999" />
                         </view>
                     </template>
                 </cwg-label-line-value>

+ 2 - 2
pages/customer/deposit-select.vue

@@ -43,8 +43,8 @@
                         <view v-if="!isStep3" class="step3-attention">
                             <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
                                 <view>
-                                    <rich-text class="attention"
-                                        :nodes="isZh ? introduce.introduce : introduce.enIntroduce"></rich-text>
+                                    <cwg-rich-text class="attention"
+                                        :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
 
                                 </view>
                             </view>

+ 2 - 2
pages/customer/deposit.vue

@@ -371,8 +371,8 @@
             <view class="step3-attention">
                 <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
                     <view>
-                        <rich-text class="attention"
-                            :nodes="isZh ? introduce.introduce : introduce.enIntroduce"></rich-text>
+                        <cwg-rich-text class="attention"
+                            :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
                     </view>
                 </view>
             </view>

+ 1 - 1
pages/customer/withdrawal-select.vue

@@ -44,7 +44,7 @@
               {{ introduce.value }}
               <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
                 <view>
-                  <rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
+                  <cwg-rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
                 </view>
               </view>
               <view class="btn-bottom">

+ 1 - 1
pages/customer/withdrawal.vue

@@ -340,7 +340,7 @@
       <view class="step3-attention">
         <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
           <view>
-            <rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
+            <cwg-rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
           </view>
         </view>
       </view>

+ 1 - 1
pages/ib/components/BonusAgreementPopup.vue

@@ -29,7 +29,7 @@
                     </view>
                 </view>
                 <view v-else-if="type == 'newList'">
-                    <rich-text class="popup-text" :nodes="content"></rich-text>
+                    <cwg-rich-text class="popup-text" :nodes="content" />
                 </view>
             </scroll-view>
         </view>

+ 1 - 1
pages/ib/withdraw-select.vue

@@ -30,7 +30,7 @@
                         <view v-if="!isStep3" class="step3-attention">
                             <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
                                 <view>
-                                    <rich-text class="attention"
+                                    <cwg-rich-text class="attention"
                                         :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
                                 </view>
                             </view>

+ 1 - 1
pages/ib/withdraw.vue

@@ -360,7 +360,7 @@
             <view class="step3-attention">
                 <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
                     <view>
-                        <rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
+                        <cwg-rich-text class="attention" :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
                     </view>
                 </view>
             </view>

+ 1 - 0
static/icons/cwg-arrow.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path d="M566.6 342.6C579.1 330.1 579.1 309.8 566.6 297.3L406.6 137.3C394.1 124.8 373.8 124.8 361.3 137.3C348.8 149.8 348.8 170.1 361.3 182.6L466.7 288L96 288C78.3 288 64 302.3 64 320C64 337.7 78.3 352 96 352L466.7 352L361.3 457.4C348.8 469.9 348.8 490.2 361.3 502.7C373.8 515.2 394.1 515.2 406.6 502.7L566.6 342.7z"/></svg>

+ 7 - 0
static/icons/cwg-filter.svg

@@ -0,0 +1,7 @@
+                    <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none"
+                        stroke="#141d22" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
+                        class="filter-icon">
+                        <path
+                            d="M4 4h16v2.172a2 2 0 0 1 -.586 1.414l-4.414 4.414v7l-6 2v-8.5l-4.48 -4.928a2 2 0 0 1 -.52 -1.345v-2.227z">
+                        </path>
+                    </svg>

+ 9 - 0
static/icons/cwg-mt.svg

@@ -0,0 +1,9 @@
+<svg width="48" height="48" viewBox="0 0 48 48" xmlns="http://www.w3.org/2000/svg">
+    <path d="M24.3183 13.6533C26.025 13.6533 27.4116 12.2667 27.4116 10.56C27.4116 8.85334 26.025 7.46667 24.3183 7.46667C22.6116 7.46667 21.225 8.85334 21.225 10.56C21.225 12.2667 22.6116 13.6533 24.3183 13.6533Z" fill="white"/>
+    <path d="M24.3174 31.5951C27.3254 31.5951 29.768 29.1524 29.768 26.1444C29.768 23.1364 27.3254 20.6937 24.3174 20.6937C21.3094 20.6937 18.8667 23.1364 18.8667 26.1444C18.8667 29.1524 21.3094 31.5951 24.3174 31.5951Z" fill="white"/>
+    <path d="M28.8627 12.4052C28.8627 12.4052 28.7774 12.3732 28.724 12.3625C28.0094 14.1012 26.3027 15.3279 24.308 15.3279C22.3134 15.3279 20.6067 14.1012 19.892 12.3625C19.8494 12.3732 19.8067 12.3945 19.7534 12.4052C18.26 12.9065 17.3 14.3572 17.3 15.9252V20.3092C17.4494 20.5012 17.588 20.7039 17.7587 20.8745L18.868 21.9839C19.4227 21.2479 20.1267 20.6292 20.9267 20.1705V18.9759C20.9267 18.2825 21.4814 17.7279 22.1747 17.7279H26.4094C27.1027 17.7279 27.6574 18.2825 27.6574 18.9759V20.1065C28.532 20.5865 29.2787 21.2585 29.8654 22.0479L30.8254 21.0879C30.996 20.9172 31.1454 20.7145 31.284 20.5225V15.9145C31.284 14.3465 30.324 12.8959 28.8307 12.3945L28.8627 12.4052Z" fill="white"/>
+    <path d="M13.245 32.4272C12.3916 30.9445 10.5036 30.4325 9.02095 31.2859C7.53828 32.1392 7.02628 34.0272 7.87962 35.5099C8.73295 36.9925 10.621 37.5045 12.1036 36.6512C13.5863 35.7979 14.0983 33.9099 13.245 32.4272Z" fill="white"/>
+    <path d="M9.92847 29.2056V29.2376C11.7951 28.9923 13.7151 29.8563 14.7071 31.5843C15.6991 33.3123 15.4858 35.403 14.3338 36.8856C14.3338 36.8856 14.3445 36.8963 14.3551 36.907C15.5605 38.0163 17.3845 38.1123 18.8031 37.3016L22.5151 35.1683C22.6111 34.9443 22.7071 34.7203 22.7711 34.4856L23.1765 32.971C22.2591 32.8536 21.3738 32.555 20.5738 32.0856L19.3258 32.8003C18.8458 33.0776 18.2378 32.907 17.9711 32.4376L15.6138 28.331C15.3365 27.851 15.5071 27.243 15.9765 26.9763L17.1818 26.283C17.1605 25.291 17.3738 24.299 17.7685 23.3923L16.4458 23.0403C16.2111 22.9763 15.9658 22.955 15.7311 22.923L11.8271 25.163C10.4085 25.9736 9.57647 27.6056 9.92847 29.2056Z" fill="white"/>
+    <path d="M35.3692 32.4272C36.2226 30.9445 38.1106 30.4325 39.5932 31.2859C41.0759 32.1392 41.5879 34.0272 40.7346 35.5099C39.8812 36.9925 37.9932 37.5045 36.5106 36.6512C35.0279 35.7979 34.5159 33.9099 35.3692 32.4272Z" fill="white"/>
+    <path d="M38.6959 29.2058V29.2378C36.8292 28.9925 34.9092 29.8565 33.9172 31.5845C32.9252 33.3125 33.1385 35.4031 34.2905 36.8858C34.2905 36.8858 34.2799 36.8965 34.2692 36.9071C33.0639 38.0165 31.2399 38.1125 29.8212 37.3018L26.1092 35.1685C26.0132 34.9445 25.9172 34.7205 25.8532 34.4858L25.4479 32.9711C26.3652 32.8538 27.2505 32.5551 28.0505 32.0858L28.9252 32.5871C29.6079 32.9818 30.4825 32.7471 30.8772 32.0645L32.8079 28.7045C33.2025 28.0218 32.9679 27.1471 32.2852 26.7525L31.4532 26.2725C31.4745 25.2805 31.2612 24.2885 30.8665 23.3818L32.1892 23.0298C32.4239 22.9658 32.6692 22.9445 32.9039 22.9125L36.8079 25.1525C38.2265 25.9631 39.0585 27.5951 38.7065 29.1951L38.6959 29.2058Z" fill="white"/>
+</svg>

File diff suppressed because it is too large
+ 12 - 0
static/svg-icons-lib.js


Some files were not shown because too many files changed in this diff