Browse Source

feat:优化

ljc 3 weeks ago
parent
commit
25512ba772
52 changed files with 751 additions and 268 deletions
  1. 7 3
      components/cwg-combox.vue
  2. 3 3
      components/cwg-complex-search.vue
  3. 11 7
      components/cwg-detail-popup.vue
  4. 1 1
      components/cwg-droplist-item.vue
  5. 2 0
      components/cwg-empty-state.vue
  6. 1 1
      components/cwg-popup.vue
  7. 116 92
      components/cwg-tabel.vue
  8. 25 0
      locale/cn.json
  9. 25 0
      locale/en.json
  10. 2 2
      pages/activities/components/GiftApplicationPopup.vue
  11. 150 7
      pages/activities/index.vue
  12. 7 26
      pages/activities/monthly-list.vue
  13. 1 1
      pages/analytics/components/List.vue
  14. 7 7
      pages/common/notice.vue
  15. 1 1
      pages/customer/components/PaymentMethodsList.vue
  16. 21 7
      pages/customer/dashboard.vue
  17. 10 2
      pages/customer/deposit.vue
  18. 9 0
      pages/customer/trade-history.vue
  19. 4 1
      pages/customer/transfer.vue
  20. 7 2
      pages/customer/withdrawal-select.vue
  21. 3 3
      pages/customer/withdrawal.vue
  22. 8 7
      pages/follow/index.vue
  23. 4 4
      pages/follow/trading-center.vue
  24. 4 1
      pages/follow/transfer.vue
  25. 9 3
      pages/ib/agent-transfer.vue
  26. 18 20
      pages/ib/components/applyIbDialog.vue
  27. 6 0
      pages/ib/components/linkDetailDialog.vue
  28. 7 2
      pages/ib/components/pointDialog.vue
  29. 9 2
      pages/ib/index.vue
  30. 5 3
      pages/ib/linkList.vue
  31. 3 3
      pages/ib/recording.vue
  32. 4 3
      pages/ib/report.vue
  33. 1 1
      pages/ib/subsList.vue
  34. 1 1
      pages/ib/transfer.vue
  35. 6 2
      pages/ib/withdraw-select.vue
  36. 12 9
      pages/ib/withdraw.vue
  37. 3 0
      pages/login/index.vue
  38. 3 3
      pages/login/reset.vue
  39. 5 6
      pages/mine/components/AddFileDialog.vue
  40. 4 1
      pages/mine/components/CardAuthDialog.vue
  41. 6 3
      pages/mine/components/FileManagementTab.vue
  42. 3 3
      pages/mine/components/SecurityCenterTab.vue
  43. 2 0
      service/custom.ts
  44. 11 7
      static/scss/global/global.scss
  45. 1 1
      uni.scss
  46. 6 2
      uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
  47. 1 1
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
  48. 188 6
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
  49. 1 1
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
  50. 1 1
      uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
  51. 4 4
      uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
  52. 2 2
      uni_modules/uni-tag/components/uni-tag/uni-tag.vue

+ 7 - 3
components/cwg-combox.vue

@@ -12,7 +12,7 @@
 
             <!-- 普通下拉模式 -->
             <uni-data-select v-else v-model="innerValue" :localdata="options" :clear="clearable"
-                :placeholder="placeholder" :multiple="multiple" :disabled="disabled" @change="handleSelectChange">
+                :placeholder="placeholder" :multiple="multiple" :disabled="disabled" @change="handleSelectChange" :needSpace="needSpace">
                 <template #selected v-if="$slots.selected">
                     <slot name="selected"></slot>
                 </template>
@@ -46,7 +46,11 @@ const props = defineProps({
         type: Boolean,
         default: false
     },
-    disabled: Boolean
+    disabled: Boolean,
+    needSpace: {
+      type: Boolean,
+      default: false
+    },
 })
 
 const emit = defineEmits(['update:value', 'change'])
@@ -162,6 +166,6 @@ const handleComboxChange = (text) => {
     color: #d5d5d5;
     border: 1px solid #e5e5e5;
     border-radius: 4px;
-    background-color: #f5f7fa !important;
+    background-color: var(--bs-secondary-bg) !important;
 }
 </style>

+ 3 - 3
components/cwg-complex-search.vue

@@ -59,7 +59,7 @@
                 </view>
                 <view v-else class="mobile-date-wrapper"></view>
                 <button class="filter-chip" @click="openFilterPopup">
-                    <cwg-icon name="cwg-filter" :size="16" color="#141d22" />
+                    <cwg-icon name="cwg-filter" :size="14" color="#141d22" />
                     <text class="filter-label" v-t="'Documentary.tradingCenter.item3'" />
                 </button>
             </view>
@@ -161,7 +161,7 @@ const dateLimit = computed(() => {
     }
 
     return {
-        start: format(startDate),
+        start: '',
         end: format(endDate)
     }
 })
@@ -458,7 +458,7 @@ onMounted(() => {
     }
 
     .uni-date {
-        width: px2rpx(270) !important;
+        width: px2rpx(250) !important;
         flex: none;
     }
 

+ 11 - 7
components/cwg-detail-popup.vue

@@ -12,13 +12,13 @@
                         <template #operation1>
                             <slot :name="`cell-${item.prop}`" :row="row" :column="item" :index="index">
                                 <view v-if="item.type === 'action'" class="action-list">
-                                    <template v-for="(actionItem, idx) in getVisibleActions(item.menuList, row)"
+                                    <view v-for="(actionItem, idx) in getVisibleActions(item.menuList, row)"
                                         :key="idx">
-                                        <text class="action-btn"
+                                        <view class="action-btn"
                                             @click.stop="actionItem.btnClick && actionItem.btnClick(row)">
                                             {{ actionItem.label || actionItem.text || actionItem.name }}
-                                        </text>
-                                    </template>
+                                        </view>
+                                    </view>
                                 </view>
                                 <text v-else>{{ formatCellValue(row[item.prop], item, row) }}</text>
                             </slot>
@@ -124,15 +124,19 @@ const formatDate = (date, format) => {
     flex-wrap: wrap;
     gap: 6px 10px;
     align-items: flex-end;
-    justify-content: flex-end;
+    justify-content: center;
 }
 
 .action-btn {
     color: var(--color-primary);
-    text-decoration: underline;
+    //text-decoration: underline;
     cursor: pointer;
     font-size: 14px;
-    white-space: nowrap;
+  max-width: px2rpx(120);
+  word-wrap:break-word;
+text-align: right;
+  word-break:normal;
+  //white-space: nowrap;
 }
 
 :deep(.uni-popup) {

+ 1 - 1
components/cwg-droplist-item.vue

@@ -49,7 +49,7 @@ const handleClick = () => {
   padding: px2rpx(10) px2rpx(20);
   font-size: px2rpx(14);
   line-height: px2rpx(22);
-  color: var(--bs-body-color);
+  color: var(--bs-emphasis-color);
   white-space: nowrap;
   cursor: pointer;
   transition: background-color 0.2s, color 0.2s;

+ 2 - 0
components/cwg-empty-state.vue

@@ -18,6 +18,8 @@ const props = defineProps({
 @import "@/uni.scss";
 
 .empty-state {
+  width: 100%;
+  height: 100%;
   display: flex;
   padding: 0 px2rpx(20);
   flex-direction: column;

+ 1 - 1
components/cwg-popup.vue

@@ -265,7 +265,7 @@ defineExpose({
     }
 
     .dialog-content {
-        padding: px2rpx(20) px2rpx(10);
+        padding: px2rpx(20) px2rpx(20);
         max-height: 60vh;
         overflow-y: auto;
 

+ 116 - 92
components/cwg-tabel.vue

@@ -16,101 +16,107 @@
                         </view>
                     </uni-th>
                 </uni-tr>
-
-
+              <view v-if="loading" class="empty-state">
+                <uni-loading  />
+              </view>
+              <!-- 空状态 -->
+              <view v-if="!loading && tableData.length === 0" class="empty-state">
+
+                <cwg-empty-state v-if="!loading && tableData.length === 0" />
+              </view>
                 <!-- 表格主体 -->
+              <template v-else>
                 <template v-for="(row, rowIndex) in tableData" :key="rowIndex">
-                    <uni-tr>
-                        <!-- 数据列:根据设备类型动态渲染 -->
-                        <uni-td v-for="column in displayColumns" :key="column.prop" :align="column.align || 'center'"
+                  <uni-tr>
+                    <!-- 数据列:根据设备类型动态渲染 -->
+                    <uni-td v-for="column in displayColumns" :key="column.prop" :align="column.align || 'center'"
                             :class="getCellClass(column, row)" :style="getCellStyle(column, row)"
                             @click="openRowDetail(row)">
-                            <template v-if="column.slot">
-                                <slot :name="column.slot" :row="row" :column="column" :index="rowIndex">
-                                    {{ row[column.prop] }}
-                                </slot>
-                            </template>
-                            <uni-tag v-else-if="column.type === 'tag'" :text="formatTagText(row[column.prop], column)"
-                                :type="formatTagType(row[column.prop], column)" size="small" />
-                            <view v-else-if="column.type === 'file'">
-                                <cwg-file :path="row[column.prop]" />
-                            </view>
-                            <view v-else-if="column.type === 'note'">
-                                <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)">
-                                    <view class="action-trigger">
-                                        <cwg-icon name="crm-ellipsis" :size="24" />
-                                    </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" />
-                            </template>
-
-                            <template v-else>
-                                {{ formatCellValue(row[column.prop], column, row) }}
-                            </template>
-                        </uni-td>
-                    </uni-tr>
-                    <!-- 桌面端展开行(仅当非移动端且行展开时显示) -->
-                    <uni-tr v-if="!isMobile && expandedRows[rowIndex]" class="expand-row">
-                        <uni-td :colspan="columnSpan" class="expand-cell">
-                            <slot name="expand" :row="row" :rowIndex="rowIndex">
-                                <view class="default-expand-content">
-                                    <text class="no-content">暂无展开内容</text>
-                                </view>
-                            </slot>
-                        </uni-td>
-                    </uni-tr>
+                      <template v-if="column.slot">
+                        <slot :name="column.slot" :row="row" :column="column" :index="rowIndex">
+                          {{ row[column.prop] }}
+                        </slot>
+                      </template>
+                      <uni-tag v-else-if="column.type === 'tag'" :text="formatTagText(row[column.prop], column)"
+                               :type="formatTagType(row[column.prop], column)" size="small" />
+                      <view v-else-if="column.type === 'file'">
+                        <cwg-file :path="row[column.prop]" />
+                      </view>
+                      <view v-else-if="column.type === 'note'">
+                        <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)">
+                          <view class="action-trigger">
+                            <cwg-icon name="crm-ellipsis" :size="24" />
+                          </view>
+                        </cwg-droplist>
+                      </view>
+                      <template v-else-if="column.type === 'more'" >
+                        <view class="morebox">
+                          <cwg-icon v-if="isMobile" name="crm-chevron-down" class="crm-chevron-down" :size="16" />
+                        </view>
+                      </template>
+
+                      <template v-else>
+                        {{ formatCellValue(row[column.prop], column, row) }}
+                      </template>
+                    </uni-td>
+                  </uni-tr>
+                  <!-- 桌面端展开行(仅当非移动端且行展开时显示) -->
+                  <uni-tr v-if="!isMobile && expandedRows[rowIndex]" class="expand-row">
+                    <uni-td :colspan="columnSpan" class="expand-cell">
+                      <slot name="expand" :row="row" :rowIndex="rowIndex">
+                        <view class="default-expand-content">
+                          <text class="no-content">暂无展开内容</text>
+                        </view>
+                      </slot>
+                    </uni-td>
+                  </uni-tr>
                 </template>
 
                 <!-- 总计行 -->
                 <uni-tr v-if="showSummary && tableData.length !== 0" class="summary-row">
-                    <uni-td v-for="(column, index) in displayColumns" :key="'summary-' + column.prop"
-                        :align="column.align || 'center'" class="summary-cell"
-                        :style="getCellStyle(column, currentSummaryData)">
-                        <!-- 当有 summaryMethod 时,按照返回的数组直接渲染 -->
-                        <template v-if="props.summaryMethod">
-                            <text>{{ computedSummaryRow[index] !== undefined ? computedSummaryRow[index] : '' }}</text>
-                        </template>
-                        <template v-else>
-                            <!-- 特定列的总计自定义插槽,例如 #summary-volume="{ row }" -->
-                            <template v-if="$slots['summary-' + column.prop]">
-                                <slot :name="'summary-' + column.prop" :row="currentSummaryData" :column="column"
-                                    :index="index"></slot>
-                            </template>
-                            <!-- 如果没有特定插槽,尝试常规渲染 -->
-                            <template v-else>
-                                <template
-                                    v-if="currentSummaryData && currentSummaryData[column.prop] !== undefined && currentSummaryData[column.prop] !== null">
-                                    <!-- 如果有常规插槽,并且总计数据里有该字段的值,则复用常规插槽渲染 -->
-                                    <slot v-if="column.slot" :name="column.slot" :row="currentSummaryData"
-                                        :column="column" :index="index">
-                                        {{ currentSummaryData[column.prop] }}
-                                    </slot>
-                                    <!-- 否则使用格式化函数 -->
-                                    <text v-else>{{ formatCellValue(currentSummaryData[column.prop], column,
-                                        currentSummaryData) }}</text>
-                                </template>
-                                <!-- 如果总计数据里没有该字段的值,第一列显示总计文本,其他留空 -->
-                                <text v-else>{{ index === 0 ? summaryText : '' }}</text>
-                            </template>
+                  <uni-td v-for="(column, index) in displayColumns" :key="'summary-' + column.prop"
+                          :align="column.align || 'center'" class="summary-cell"
+                          :style="getCellStyle(column, currentSummaryData)">
+                    <!-- 当有 summaryMethod 时,按照返回的数组直接渲染 -->
+                    <template v-if="props.summaryMethod">
+                      <text>{{ computedSummaryRow[index] !== undefined ? computedSummaryRow[index] : '' }}</text>
+                    </template>
+                    <template v-else>
+                      <!-- 特定列的总计自定义插槽,例如 #summary-volume="{ row }" -->
+                      <template v-if="$slots['summary-' + column.prop]">
+                        <slot :name="'summary-' + column.prop" :row="currentSummaryData" :column="column"
+                              :index="index"></slot>
+                      </template>
+                      <!-- 如果没有特定插槽,尝试常规渲染 -->
+                      <template v-else>
+                        <template
+                          v-if="currentSummaryData && currentSummaryData[column.prop] !== undefined && currentSummaryData[column.prop] !== null">
+                          <!-- 如果有常规插槽,并且总计数据里有该字段的值,则复用常规插槽渲染 -->
+                          <slot v-if="column.slot" :name="column.slot" :row="currentSummaryData"
+                                :column="column" :index="index">
+                            {{ currentSummaryData[column.prop] }}
+                          </slot>
+                          <!-- 否则使用格式化函数 -->
+                          <text v-else>{{ formatCellValue(currentSummaryData[column.prop], column,
+                            currentSummaryData) }}</text>
                         </template>
-                    </uni-td>
+                        <!-- 如果总计数据里没有该字段的值,第一列显示总计文本,其他留空 -->
+                        <text v-else>{{ index === 0 ? summaryText : '' }}</text>
+                      </template>
+                    </template>
+                  </uni-td>
                 </uni-tr>
+              </template>
+
             </uni-table>
         </view>
-        <view class="table-loading-mask">
-            <uni-loading v-if="loading" />
-        </view>
-        <!-- 空状态 -->
-        <view v-if="!loading && tableData.length === 0" style="width: 100%;">
-            <cwg-empty-state />
-        </view>
+
+
         <!-- 分页 -->
         <view class="pagination-container" v-if="showPagination && tableData.length > 0">
             <!-- <view class="pagination-info">
@@ -767,11 +773,13 @@ defineExpose({
 
 .table-container {
     width: 100%;
+    position: relative;
     overflow-x: auto;
     -webkit-overflow-scrolling: touch;
     margin-top: px2rpx(20);
     max-height: calc(100vh - 209px);
     color: var(--color-slate-800);
+  box-shadow: none;
 
     .action-wrapper {
         display: flex;
@@ -805,7 +813,7 @@ defineExpose({
     :deep(.uni-table-scroll) {
         width: 100%;
         max-height: calc(100vh - 375px);
-        //min-height: 300px;
+        min-height: px2rpx(300);
         overflow-y: auto;
         overflow-x: auto;
 
@@ -815,27 +823,28 @@ defineExpose({
             height: 4px !important;
             display: block !important;
             /* 强制在某些webkit浏览器中显示 */
-            background-color: #ccc !important;
+            background-color:yellow !important;
         }
 
         &::-webkit-scrollbar-track {
-            background-color: #ccc;
+            background-color: #faf3f3;
             border-radius: 4px;
         }
 
         &::-webkit-scrollbar-thumb {
-            background-color:#ccc;
+            background-color:#6a6a6a;
             border-radius: 4px;
 
             &:hover {
-                background-color: #ccc;
+                background-color: #6a6a6a;
             }
         }
     }
 
     :deep(.uni-table) {
         border-radius: 8px;
-        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);
+        //box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);
+      height: 100%;
 
         .uni-table-th {
             position: sticky;
@@ -899,15 +908,15 @@ defineExpose({
         }
 
         .summary-row {
-            background-color: var(--bs-light-bg-subtle);
+            background-color: var(--table-th-color);
             font-weight: 600;
 
             .uni-table-td {
-                border-top: 1px solid var(--bs-light-bg-subtle) !important;
+                border-top: 1px solid var(--table-th-color) !important;
                 position: sticky;
                 bottom: 0;
                 z-index: 99;
-                background-color: var(--bs-light-bg-subtle);
+                background-color: var(--table-th-color);
             }
         }
 
@@ -1134,4 +1143,19 @@ defineExpose({
         gap: px2rpx(10);
     }
 }
+.empty-state{
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  left: 50%;
+  top: 60%;
+  transform: translate(-50%, 0);
+}
+.morebox{
+  width: 100%;
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
 </style>

+ 25 - 0
locale/cn.json

@@ -5914,5 +5914,30 @@
     "p2": "复制钱包地址或者手机扫码复制地址",
     "p3": "生成钱包地址",
     "p4": "复制钱包地址"
+  },
+  "DollarActivity": {
+    "participate": "参与活动",
+    "confirmParticipate": "是否参与活动",
+    "fieldDepositAmount": "入金金额",
+    "fieldEndDate": "活动结束时间",
+    "fieldApplyDepositAmount": "剩余可申请入金金额",
+    "fieldApplyGiveNum": "剩余可申请次数",
+    "statusInTask": "任务中",
+    "statusEnded": "已完成",
+    "statusCancelled": "已取消",
+    "claimReward": "领取奖励",
+    "selectRulePlaceholder": "请选择奖励档位",
+    "dialogClaimTitle": "领取奖励",
+    "fieldRewardAmount": "奖励金额",
+    "emptyRuleList": "暂无可选奖励档位",
+    "confirmCancel": "是否取消活动?",
+    "applyRecordsBtn": "申请记录",
+    "dialogApplyRewardRecordsTitle": "申请奖励记录",
+    "giveColumnDepositAmount": "入金量",
+    "giveColumnRewardAmount": "奖励金",
+    "giveColumnStandardVolume": "标准账户",
+    "giveColumnEcnVolume": "ECN账户",
+    "giveColumnCentVolume": "美分账户",
+    "giveColumnAddTime": "申请时间"
   }
 }

+ 25 - 0
locale/en.json

@@ -6205,5 +6205,30 @@
     "p2": "Copy the wallet address or scan the QR code to copy",
     "p3": "Generate Wallet Address",
     "p4": "Copy Wallet Address"
+  },
+  "DollarActivity": {
+    "participate": "Participate",
+    "confirmParticipate": "Do you want to participate in this activity?",
+    "fieldDepositAmount": "Deposit amount",
+    "fieldEndDate": "Activity end date",
+    "fieldApplyDepositAmount": "Remaining applicable deposit amount",
+    "fieldApplyGiveNum": "Remaining application times",
+    "statusInTask": "In progress",
+    "statusEnded": "Completed",
+    "statusCancelled": "Cancelled",
+    "claimReward": "Claim reward",
+    "selectRulePlaceholder": "Select a reward tier",
+    "dialogClaimTitle": "Claim reward",
+    "fieldRewardAmount": "Reward amount",
+    "emptyRuleList": "No reward tiers available",
+    "confirmCancel": "Cancel this activity?",
+    "applyRecordsBtn": "Application records",
+    "dialogApplyRewardRecordsTitle": "Reward application records",
+    "giveColumnDepositAmount": "Deposit volume",
+    "giveColumnRewardAmount": "Reward",
+    "giveColumnStandardVolume": "Standard account",
+    "giveColumnEcnVolume": "ECN account",
+    "giveColumnCentVolume": "Cent account",
+    "giveColumnAddTime": "Application time"
   }
 }

+ 2 - 2
pages/activities/components/GiftApplicationPopup.vue

@@ -2,7 +2,7 @@
   <cwg-popup v-model:visible="visible" type="center" :mask-click="false" :showFooters="true" :showClose="false"
     :title="title">
     <view class="popup-content">
-      <uni-forms ref="formRef" :model="giftForm" :rules="rules" label-position="top" validate-trigger="submit">
+      <uni-forms ref="formRef" :model="giftForm" :rules="rules" label-position="top" validate-trigger="submit" :labelWidth="200">
         <view class="form-row">
           <view class="form-col-full">
             <uni-forms-item :label="t('UtaskList.item18')" name="giveCode">
@@ -36,7 +36,7 @@
     </view>
     <template #footer>
       <button class="btn btn-dark btn-sm waves-effect waves-light btn-outline-dark1" @click="cancel">{{ t('Btn.Cancel') }}</button>
-      <button class="btn btn-primary btn-sm waves-effect waves-light" @click="submit" :loading="submitting">{{ t('Btn.Confirm') }}</button>
+      <button class="btn btn-danger btn-sm waves-effect waves-light" @click="submit" :loading="submitting">{{ t('Btn.Confirm') }}</button>
     </template>
   </cwg-popup>
 </template>

+ 150 - 7
pages/activities/index.vue

@@ -97,7 +97,7 @@
                                         <image src="/static/images/yue.jpg" alt="" class="img-fluid rounded"
                                             mode="widthFix" />
                                         <view
-                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-dark bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-opacity-50 rounded d-flex align-items-center justify-content-center">
                                             <a @click="openSurplusActivityDialog1()"
                                                 class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
                                                 →</a>
@@ -140,7 +140,7 @@
                                         <image src="/static/images/su.png" alt="" class="img-fluid rounded"
                                             mode="widthFix" />
                                         <view
-                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-dark bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-opacity-50 rounded d-flex align-items-center justify-content-center">
                                             <a @click="openSurplusActivityDialog()"
                                                 class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
                                                 →</a>
@@ -180,6 +180,96 @@
                             </view>
                         </view>
                     </view>
+
+                    <!-- 美金活动 dollarActivity-->
+<!--                    <view class="col-12 m-b30" v-if="true">
+                        <view class="card card-action action-elevate action-border-primary">
+                            <view class="row g-0">
+                                <view class="col-md-3">
+                                    <view class="card-header border-0 p-0 m-2 position-relative overflow-hidden" >
+                                        <image v-if="dollarCoverSrc" :src="dollarCoverSrc" alt="" class="img-fluid rounded"
+                                            mode="widthFix" />
+                                    </view>
+                                </view>
+                                <view class="col-md-8 py-3 d-flex flex-column">
+                                    <view class="card-body px-3 py-2">
+                                        <p v-if="dollarActivity.title" class="crm-one-font lh-sm" >
+                                          {{dollarActivity.title}}
+                                        </p>
+                                      <p v-if="dollarActivity.subTitle" class="crm-one-font lh-sm" >
+                                        {{dollarActivity.subTitle}}
+                                      </p>
+                                      <p v-else-if="dollarActivity.content" class="crm-one-font lh-sm dollar-activity-html" v-html="dollarActivity.content">
+                                      </p>
+                                        <view class="d-flex flex-wrap gap-2">
+                                            <view
+                                                :class="['btn btn-dark waves-effect waves-light', dollarParticipateEnabled ? 'btn-danger' : 'disabled']"
+                                                @click="openDollarParticipate()">
+                                                <text v-t="'DollarActivity.participate'"></text>
+                                            </view>
+                                          <view
+                                            @click="goDollarTaskList()"
+                                            :class="['btn btn-outline-dark1 waves-effect waves-light' ]"
+                                          >
+                                            <text v-t="'wallet.item14'"></text>
+                                          </view>
+                                          <view
+                                            @click="goDollarActivityDetail()"
+                                            :class="['btn btn-outline-dark1 waves-effect waves-light' ]"
+                                          >
+                                            <text v-t="'Custom.Activity.Single'"></text>
+                                          </view>
+                                        </view>
+                                    </view>
+                                </view>
+                            </view>
+                        </view>
+                    </view>-->
+                    <!-- 无忧交易 -->
+                    <view class="col-12 m-b30" v-if="tableDataNoWorriesFlag">
+                        <view class="card card-action action-elevate action-border-primary">
+                            <view class="row g-0">
+                                <view class="col-md-3">
+                                    <view class="card-header border-0 p-0 m-2 position-relative overflow-hidden" >
+                                        <image src="/static/images/jihua.png" alt="" class="img-fluid rounded"
+                                            mode="widthFix" />
+                                        <view
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            <a @click="toSingle('NoWorries')"
+                                                class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
+                                                →</a>
+                                        </view>
+                                    </view>
+                                </view>
+                                <view class="col-md-8 py-3 d-flex flex-column">
+                                    <view class="card-body px-3 py-2">
+                                        <h4 @click="toSingle('NoWorries')"> <text class="text-dark crm-one-font" v-t="'news_add_field1.activitiesNoWorries.item1'"></text>
+                                        </h4>
+                                        <p class="crm-one-font lh-sm" v-t="'news_add_field1.activitiesNoWorries.item2'"></p>
+                                        <view class="d-flex flex-wrap gap-2">
+                                            <view
+                                              v-if="typeof tableDataNoWorries == 'boolean' && tableDataNoWorries"
+                                                :class="['btn btn-dark waves-effect waves-light',  'btn-danger' ]"
+                                                @click="toApplyNoWorriesOpen()">
+                                                <text v-t="'news_add_field1.activitiesNoWorries.item3'"></text>
+                                            </view>
+                                            <view
+                                                :class="['btn btn-dark waves-effect waves-light', isRealizationNoWorries == 1 ? 'btn-danger' : 'disabled']"
+                                                @click="toRealizationNoWorries()">
+                                                <text v-t="'news_add_field1.activitiesNoWorries.item4'"></text>
+                                            </view>
+                                          <view
+                                            @click="toSingle('NoWorries')"
+                                            :class="['btn btn-outline-dark1 waves-effect waves-light' ]"
+                                          >
+                                            <text v-t="'news_add_field1.activitiesNoWorries.item5'"></text>
+                                          </view>
+                                        </view>
+                                    </view>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
                     <!-- 交易大赛 -->
                     <view class="col-12 m-b30" v-if="tableDataCptFlag">
                         <view class="card card-action action-elevate action-border-primary">
@@ -189,7 +279,7 @@
                                         <image src="/static/images/banner.jpg" alt="" class="img-fluid rounded"
                                             mode="widthFix" />
                                         <view
-                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-dark bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100  bg-opacity-50 rounded d-flex align-items-center justify-content-center">
                                             <a @click="toApplyCptOpen()"
                                                 class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
                                                 →</a>
@@ -226,6 +316,7 @@
                             </view>
                         </view>
                     </view>
+                    <!-- 24精英杯活动 -->
                     <!-- 赠送活动列表2 -->
                     <view class="col-12 m-b30" v-for="(item, index) in tableDataGive" :key="index + 'give'">
                         <view class="card card-action action-elevate action-border-primary">
@@ -235,7 +326,7 @@
                                         <image :src="imgUrl + item.coverUrl" alt="" class="img-fluid rounded"
                                             mode="widthFix" />
                                         <view
-                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-dark bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100  bg-opacity-50 rounded d-flex align-items-center justify-content-center">
                                             <a @click="toActivity24nianzhong()"
                                                 class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
                                                 →</a>
@@ -272,7 +363,7 @@
                                         <image :src="imgUrl + item.coverUrl" alt="" class="img-fluid rounded"
                                             mode="widthFix" />
                                         <view
-                                            class="position-absolute action-visible top-0 start-0 h-100 w-100 bg-dark bg-opacity-50 rounded d-flex align-items-center justify-content-center">
+                                            class="position-absolute action-visible top-0 start-0 h-100 w-100  bg-opacity-50 rounded d-flex align-items-center justify-content-center">
                                             <a @click="applications(item)"
                                                 class="btn btn-icon btn-lg btn-secondary rounded-circle waves-effect waves-light">
                                                 →</a>
@@ -953,6 +1044,52 @@ const isSupportedCountry = computed(() => {
     }
 })
 
+const dollarActivity = computed(() => {
+  const info = activityShowsInfo.value;
+  if (!info || !info.dollar) {
+    return null;
+  }
+  const d = info.dollar;
+  if (Number(d.show) !== 1) {
+    return null;
+  }
+  return d;
+})
+
+const dollarCoverSrc = computed(() => {
+  const d = dollarActivity.value;
+  if (!d || !d.coverUrl) {
+    return "";
+  }
+  const u = String(d.coverUrl);
+  if (/^https?:\/\//i.test(u)) {
+    return u;
+  }
+  return Host05 + u;
+})
+
+const dollarActivityDate = computed(() => {
+  const d = dollarActivity.value;
+  if (!d) {
+    return "";
+  }
+  const raw =
+    d.revokeDate ||
+    d.activityEndTime ||
+    d.endDate ||
+    d.endTime ||
+    d.activityStartTime ||
+    "";
+  if (!raw) {
+    return "";
+  }
+  return String(raw).split(" ")[0];
+})
+
+const dollarParticipateEnabled = computed(() => {
+  return dollarActivity.value && Number(dollarActivity.value.customApply) === 1})
+
+
 const isGuoQin = computed(() => {
     let flag = false
     let startTime1 = "2024/10/01 00:00:00"
@@ -2489,7 +2626,7 @@ onReachBottom(() => {
 // 弹窗样式优化
 .dia-content {
     .content {
-        padding: 20px !important;
+        padding: 0 !important;
     }
 
     .form-item {
@@ -2504,7 +2641,7 @@ onReachBottom(() => {
             width: 120px;
             font-weight: 500;
             color: var(--bs-heading-color);
-            font-size: 14px;
+            font-size: px2rpx(16);
         }
 
         :deep(.cwg-combox) {
@@ -2533,4 +2670,10 @@ onReachBottom(() => {
 .surplusActivityDialog {
     height: 300px;
 }
+.dollar-activity-html {
+  word-break: break-word;
+  :deep(p) {
+    margin: 0 0 6px;
+  }
+}
 </style>

+ 7 - 26
pages/activities/monthly-list.vue

@@ -82,7 +82,7 @@
                                     {{ t("Btn.Cancel") }}
                                 </button>
                                 <!-- 礼物申请按钮 - status为2且giveStatus为1时显示 -->
-                                <button class="btn btn-primary btn-sm waves-effect waves-light" v-if="item.status === 2 && item.giveStatus === 1 && lang1" @click="applyGift(item.id)"
+                                <button class="btn btn-danger btn-sm waves-effect waves-light" v-if="item.status === 2 && item.giveStatus === 1 && lang1" @click="applyGift(item.id)"
                                     :loading="loadingStates[item.id] === 'applyGift'">
                                     {{ t("Btn.Application") }}
                                 </button>
@@ -112,26 +112,13 @@ import { useI18n } from 'vue-i18n'
 import { activityApi } from "@/service/activity"
 import Config from "@/config/index"
 import GiftApplicationPopup from "./components/GiftApplicationPopup.vue"
+import useUserStore from "@/stores/use-user-store";
+const userStore = useUserStore();
 import { useConfirm } from '@/hooks/useConfirm'
 const confirm = useConfirm()
 const { t, locale } = useI18n()
 let { Code } = Config
 
-// ---------- 存储辅助函数(模拟原 Session) ----------
-const Session = {
-    Get(key: string, parse = false) {
-        const value = uni.getStorageSync(key)
-        if (parse && value) {
-            try {
-                return JSON.parse(value)
-            } catch {
-                return value
-            }
-        }
-        return value
-    }
-}
-
 // ---------- 响应式数据 ----------
 const flag = ref(false)
 const reasons = ref({})
@@ -170,19 +157,11 @@ const giftSubmitting = ref(false)
 const search = ref({ type: "" })
 
 // ---------- 计算属性 ----------
-const expireTime = computed(() => {
-    return Session.Get("user", true)
-})
-
-const lang = computed(() => {
-    return (Session.Get("lang") == "en" && document.body.clientWidth < 1330)
-})
 // 注意:document 在 uni-app 中不可用,此处保留原逻辑但需注意运行环境
 // 若需兼容,可改用 uni.getSystemInfoSync().windowWidth
 
 const lang1 = computed(() => {
-    const user = Session.Get("user", true)
-    return user?.customInfo?.country == "CN"
+    return userStore?.userInfo?.customInfo?.country == "CN"
 })
 
 
@@ -477,7 +456,9 @@ watch(
 
 <style lang="scss" scoped>
 @import "@/uni.scss";
-
+.tip-info{
+  line-height: px2rpx(18);
+}
 #custom_history {
     width: 100%;
     height: 100%;

+ 1 - 1
pages/analytics/components/List.vue

@@ -43,7 +43,7 @@
                 <h5>
                   <span class="text-2xs text-body p-text"><i class="icon-calendar text-primary"></i> {{
                     formatDate(item.deliveryTime) }}</span><br>
-                  <a href="#" class="text-dark">{{ item.title }}</a>
+                  <text class="text-dark cursor-pointer h5">{{ item.title }}</text>
                 </h5>
                 <p class="p-text">{{ item.subTitle }}</p>
               </view>

+ 7 - 7
pages/common/notice.vue

@@ -69,15 +69,15 @@ const columns = computed(() => [
     {
         prop: 'read',
         label: t('Custom.Recording.Status'),
-        align: 'right',
+        align: 'center',
         slot: 'status'           // 使用插槽显示未读/已读状态
     },
-    {
-        prop: 'more',
-        type: 'more',
-        width: 20,
-        align: 'right'
-    },
+    // {
+    //     prop: 'more',
+    //     type: 'more',
+    //     width: 20,
+    //     align: 'right'
+    // },
 ])
 
 const mobilePrimaryFields = ref([

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

@@ -1,6 +1,6 @@
 <template>
   <view class="row">
-    <view class="col-lg-3 col-sm-12 cursor-pointer " v-for="item in list" :key="item.id" :class="{ disabled: item.disabled }" @click="handleClick(item)">
+    <view class="col-lg-3 col-sm-12 cursor-pointer mb-2" v-for="item in list" :key="item.id" :class="{ disabled: item.disabled }" @click="handleClick(item)">
       <view class="card hover">
         <view class="card-header d-flex justify-content-between align-items-center">
           <h4 class="card-title mb-0">{{ item.name }}</h4>

+ 21 - 7
pages/customer/dashboard.vue

@@ -2,7 +2,7 @@
   <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
     <view class="header">
       <view class="title">
-        <view class="mb-3">{{ t('Home.msg.Custom') }}</view>
+        <view class="mb-3 h3">{{ t('Home.msg.Custom') }}</view>
         <view class="">{{ dateWeek }}</view>
       </view>
 
@@ -100,7 +100,7 @@
         </uni-row>
       </uni-col>
       <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-        <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" style="height: 100%">
+        <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="mobilH mb-3">
           <view class="chart-box crm-border-radius">
             <view class="chart-title">
               <uni-row>
@@ -156,7 +156,7 @@
             </view>
           </view>
         </uni-col>
-        <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" style="height: 100%">
+        <uni-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12" class="mobilH">
           <view class="chart-box mh crm-border-radius">
             <view class="bigtitle mb-3">
               {{t('Custom.Index.MyAccount')}}
@@ -243,7 +243,7 @@
   const isDate = ref(['', ''])
   const time = ref('')
   const chartData = ref({ categories: [], series: [] })
-  const chartOpts = ref({
+  const chartOpts = computed(() => ({
     color: ['#1890FF', '#91CB74', '#FAC858', '#EE6666', '#73C0DE', '#3CA272', '#FC8452', '#9A60B4', '#ea7ccc'],
     padding: [15, 10, 0, 15],
     enableScroll: true,
@@ -253,7 +253,7 @@
     xAxis: {
       // disableGrid: true,
       scrollShow: true,
-      itemCount: 4,
+      itemCount: isMobile.value?3:4,
     },
     tooltipFormat: 'tooltipCustom',
     extra: {
@@ -268,7 +268,8 @@
         formatter: 'tooltipCustom',
       },
     },
-  })
+  }))
+
   const dropDown = ref([])
   const chartFormRef = ref(null)
 
@@ -568,7 +569,7 @@
     // 适配 uni-app 环境
     chartShow.value = false
     const width = window.innerWidth
-    console.log(width)
+    console.log(width,'inner')
     isMobile.value = width < 991
     chartShow.value = true
     // #ifndef H5
@@ -665,6 +666,10 @@
     await getDropDown()
     await getDateList()
     await getAccountList()
+    // #ifdef H5
+    window.addEventListener('resize', handleResize)
+    // #endif
+    checkIsMobile()
     // await fetchChartData()
     loading.value = false
   })
@@ -674,6 +679,15 @@
 <style lang="scss" scoped>
   @import "@/uni.scss";
 
+  .mobilH{
+    height: 100%;
+  }
+  @media screen and (max-width: 991px){
+    .mobilH{
+      height: auto;
+    }
+  }
+
   .header {
     display: flex;
     align-items: center;

+ 10 - 2
pages/customer/deposit.vue

@@ -155,7 +155,7 @@
                                         </h5>
                                         <uni-forms-item>
                                             <uni-easyinput v-model="params.amount1" disabled
-                                                :placeholder="t('placeholder.input')" />
+                                                :placeholder="''" />
                                         </uni-forms-item>
                                     </view>
                                     <!-- 优惠码 -->
@@ -562,7 +562,9 @@ watch(
     { immediate: true }
 )
 const bankDate = ref([])
-const channelData = reactive({})
+const channelData = reactive({
+  rate:''
+})
 const WireTransferAccount = reactive({})
 const actionAdd1 = ref("")
 const actionAdd2 = ref(Host04 + "/activity/requite/voucher/upload")
@@ -1932,6 +1934,12 @@ watch(() => params.amount, (newVal) => {
         params.amount1 = (newVal * channelData.rate).toFixed(2)
     }
 })
+watch(() => channelData.rate, (newVal) => {
+  console.log(newVal,'channel')
+    if (newVal && params.amount) {
+        params.amount1 = (newVal * params.amount).toFixed(2)
+    }
+})
 watch(() => imageUrl, (newVal) => {
     console.log(newVal, 12);
 }, { deep: true })

+ 9 - 0
pages/customer/trade-history.vue

@@ -136,6 +136,15 @@ const handleSearch = (params) => {
     Object.assign(search, params)
     search.login = params.login && Number(params.login)
     search.platform = loginOptions.find(item => item.value == params.login)?.platform || ''
+  let startTime = search.date[0].replace(/-/g, "/").split(" ")[0];
+  let start = new Date(startTime).getTime();
+  let thresholdDate = new Date("2020/10/01").getTime();
+  let shouldUseSharding =
+    (start >= thresholdDate && search.platform == "MT4") ||
+    search.platform == "MT5";
+  console.log(search,startTime,shouldUseSharding)
+
+    listApi.value = shouldUseSharding? customApi.tradeShardingHistory: customApi.tradeHistory
     if (!search.platform) return
     nextTick(() => {
         tableRef.value.refreshTable()

+ 4 - 1
pages/customer/transfer.vue

@@ -51,7 +51,7 @@
                         </view>
                     </view>
                 </view>
-                <div class="col-lg-4 col-sm-12">
+                <div class="col-lg-4 col-sm-12 card card-body">
                     <h4 v-t="'Custom.Transfer.Tips'"></h4>
                     <view class="fs-6 fw-semibold lh-sm">
                         <view v-t="'Custom.Transfer.Tips1'"></view>
@@ -533,6 +533,9 @@ watch(transferType, (newVal) => {
 </script>
 <style lang="scss" scoped>
 @import "@/uni.scss";
+.card-body{
+  color: var(--bs-emphasis-color);
+}
 
 .amount-box {
     display: flex;

+ 7 - 2
pages/customer/withdrawal-select.vue

@@ -12,7 +12,7 @@
         <view class="col-lg-12">
           <view class="clearfix">
             <view class="card">
-              <view class="card-header">
+              <view class="card-header pb-0">
                 <view class="col-12 mb-5">
                   <view class="d-flex flex-wrap gap-3 align-items-center justify-content-between mb-3">
                     <h5 class="mb-0" v-t="'Custom.Deposit.Title11'" />
@@ -30,7 +30,7 @@
                   <cwg-asset-tabs v-if="tabsConfig.length > 0" v-model="activeTab" :tabs="tabsConfig" />
                 </template>
               </view>
-              <view class="card-body" v-if="step2 && currentTableData.length > 0">
+              <view class="card-body pt-0" v-if="step2 && currentTableData.length > 0">
                 <view class="tab-content">
                   <view>
                     <PaymentMethodsList :list="currentTableData" @select="isShowStep3" />
@@ -1862,6 +1862,11 @@ onMounted(() => {
 
 <style lang="scss" scoped>
 @import "@/uni.scss";
+.card{
+  .card-header{
+    padding-bottom: 0;
+  }
+}
 .card-header{
   border: none;
 }

+ 3 - 3
pages/customer/withdrawal.vue

@@ -31,7 +31,7 @@
                     <h5 class="mb-3" v-t="'Custom.Deposit.Title22'"></h5>
                     <uni-forms-item>
                       <cwg-combox :clearable="false" v-model:value="channelId" :options="channelListOptions"
-                        :placeholder="t('placeholder.choose')">
+                        :placeholder="t('placeholder.choose')" needSpace>
                       </cwg-combox>
                     </uni-forms-item>
                   </view>
@@ -265,7 +265,7 @@
                       <uni-forms-item name="amount" :error-message="amountErrorMessage" class="amount-input">
                         <uni-easyinput v-model="form.amount" type="number" @blur="validateAmount" />
                       </uni-forms-item>
-                      <view class="btn btn-dark waves-effect waves-light" v-t="'State.All'" @click="setAllAmount">
+                      <view class="btn btn-gray waves-effect waves-light" v-t="'State.All'" @click="setAllAmount">
                       </view>
                     </view>
                   </view>
@@ -340,7 +340,7 @@
                 <text class="tit"><text class="iconfont icon-caret-right"></text>{{ t('Custom.Deposit.Title22')
                 }}</text>
                 <cwg-combox :clearable="false" v-model:value="channelId" :options="channelListOptions"
-                  :placeholder="t('placeholder.choose')">
+                  :placeholder="t('placeholder.choose')" needSpace>
                 </cwg-combox>
               </view>
             </view>

+ 8 - 7
pages/follow/index.vue

@@ -1,10 +1,10 @@
 <template>
   <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
-    <cwg-header :title="t('Documentary.console.item1')" :showBack="false" />
+    <cwg-header :title="t('Documentary.title')" :showBack="false" />
     <uni-loading v-if="loading" />
     <uni-row v-else class="demo-uni-row uni-row1" :gutter="20">
       <uni-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24" class="mb-3">
-        <cwg-combox :clearable="false" :filterable="true" v-model:value="login"
+        <cwg-combox :clearable="false" v-model:value="login"
                     :options="loginOptions.map(item => ({
                     text: item.platform + ' - ' + item.login + ' - ' + groupTypeName(item.type) + ' - ' + t('Custom.Deposit.AvailableBalance') + groupCurrency(item.currency) + item.balance,
                     value: item
@@ -97,7 +97,7 @@
                 <view class="custom-money custom-money-left">
                   <view class="header">
                     <view class="tit">
-                      <text class="tab">{{ t('Documentary.console.item23') }}</text>
+                      <text class="tab h3">{{ t('Documentary.console.item23') }}</text>
                     </view>
                     <view class="num" @click="toDocumentary1">
                       <cwg-icon name="crm-sz" :size="18" color="#6c8595" />
@@ -158,7 +158,7 @@
                 <view class="custom-money custom-money-right">
                   <view class="header">
                     <view class="tit">
-                      <text class="tab">{{ t('Documentary.console.item27') }}</text>
+                      <view class="tab h3">{{ t('Documentary.console.item27') }}</view>
                     </view>
                     <view class="num">
                       <view class="btn crm-cursor" @click="dialogFllowApplyOpen">
@@ -249,6 +249,7 @@ const getCustomLoginDown = async () => {
       const options = res.data[0]
       login.value = res.data[0]
       loginOptions.value = res.data
+      console.log(res.data)
       isDealLogin.value = options.isDealLogin
       ChartSet.value = {
         login: options.login,
@@ -352,7 +353,7 @@ watch(() => ChartSet.value.login, async (login) => {
 
 
 const toDocumentary1 = () => {
-  router.push({ path: '/pages/follow/trading-center' })
+  router.push({ path: '/pages/follow/trading-management' })
 }
 
 const dialogFllowApplyOpen = () => {
@@ -484,7 +485,7 @@ onMounted(async () => {
 
 .custom-money-left .tab,
 .custom-money-right .tab {
-  font-size: px2rpx(16);
+  font-size: px2rpx(20);
   font-weight: 600;
   color: var(--bs-heading-color);
 }
@@ -718,7 +719,7 @@ onMounted(async () => {
   font-size: px2rpx(16);
   color: #fff;
   padding: px2rpx(10) px2rpx(20);
-  border-radius: px2rpx(24);
+  border-radius: px2rpx(8);
 }
 
 .crm-cursor {

+ 4 - 4
pages/follow/trading-center.vue

@@ -373,8 +373,8 @@ const handleSortChange = ({ prop, order }: any) => {
 }
 
 const currentColumns = computed(() => [
-  { prop: 'recommend', label: '', slot: 'recommend', align: 'center', width: 60 },
-  { prop: 'nickname', label: t('Documentary.tradingCenter.item1'), align: 'center' },
+  // { prop: 'recommend', label: '', slot: 'recommend', align: 'center', width: 60 },
+  { prop: 'nickname', label: t('Documentary.tradingCenter.item1'), align: 'left' },
   { prop: 'maskLogin', label: t('newLoop.item11'), align: 'center' },
   { prop: 'pl', label: t('TradingCenter.item3'), align: 'center', sortable: true },
   { prop: 'volume', label: t('TradingCenter.item5'), align: 'center', sortable: true },
@@ -718,7 +718,7 @@ const applyFllowCancel = () => {
 }
 
 .confirm-btn {
-  background-color: #4497ff;
-  color: var(--bs-emphasis-color);
+  //background-color: #4497ff;
+  color: #fff;
 }
 </style>

+ 4 - 1
pages/follow/transfer.vue

@@ -32,7 +32,7 @@
                                                 <uni-easyinput v-model="form.amount"
                                                     :placeholder="t('placeholder.input')" @blur="validateAmount" />
                                             </uni-forms-item>
-                                            <view class="btn btn-dark waves-effect waves-light" v-t="'State.All'"
+                                            <view class="btn btn-gray waves-effect waves-light" v-t="'State.All'"
                                                 @click="setAllAmount"></view>
                                         </view>
                                     </view>
@@ -236,6 +236,9 @@ onMounted(() => {
 
 <style scoped lang="scss">
 @import "@/uni.scss";
+.container{
+  padding: 0;
+}
 .amount-box {
     display: flex;
     align-items: center;

+ 9 - 3
pages/ib/agent-transfer.vue

@@ -39,7 +39,7 @@
                                                 <uni-easyinput v-model="form.amount"
                                                     :placeholder="t('placeholder.input')" @blur="validateAmount" />
                                             </uni-forms-item>
-                                            <view class="btn btn-dark waves-effect waves-light" v-t="'State.All'"
+                                            <view class="btn btn-gray waves-effect waves-light" v-t="'State.All'"
                                                 @click="setAllAmount"></view>
                                         </view>
                                     </view>
@@ -98,9 +98,9 @@
                     </view>
                 </view>
 
-                <view class="col-lg-4 col-sm-12">
+                <view class="card card-body col-lg-4 col-sm-12">
                     <h4 v-t="'Custom.Transfer.Tips'"></h4>
-                    <view class="fs-6 fw-semibold lh-sm">
+                    <view class="fs-6 fw-semibold lh-sm text-color">
                         <view v-t="'Custom.Transfer.Tips1'"></view>
                         <view v-t="'Custom.Transfer.Tips5'"></view>
                         <view v-t="'Custom.Transfer.Tips3'"></view>
@@ -682,6 +682,12 @@ onLoad((options) => {
 
 <style lang="scss" scoped>
 @import "@/uni.scss";
+.container{
+  padding: 0;
+}
+.text-color{
+  color: var(--bs-emphasis-color);
+}
 
 .amount-box {
     display: flex;

+ 18 - 20
pages/ib/components/applyIbDialog.vue

@@ -20,7 +20,7 @@
               <th>ENERGY</th>
               <th>CFD</th>
               <th>INDEX</th>
-              <th>CRYPTO</th>
+<!--              <th>CRYPTO</th>-->
             </tr>
             </thead>
             <tbody v-for="(group, gIndex) in commissionTemplateTableData" :key="gIndex">
@@ -55,10 +55,10 @@
                 <cwg-combox v-model:value="item.metal" :options="formatOptions(item.metalOptions)"
                             :placeholder="t('placeholder.choose')" />
               </td>
-              <td>
-                <cwg-combox v-model:value="item.crypto" :options="formatOptions(item.cryptoOptions)"
-                            :placeholder="t('placeholder.choose')" />
-              </td>
+<!--              <td>-->
+<!--                <cwg-combox v-model:value="item.crypto" :options="formatOptions(item.cryptoOptions)"-->
+<!--                            :placeholder="t('placeholder.choose')" />-->
+<!--              </td>-->
             </tr>
             </tbody>
           </table>
@@ -223,8 +223,8 @@
               index1: 0,
               metal1: 0,
               energy1: 0,
-              crypto: 0,
-              crypto1: 0,
+              // crypto: 0,
+              // crypto1: 0,
             }
 
             rebates.forEach((rebate: any) => {
@@ -233,7 +233,7 @@
               else if (rebate.symbolCategory === 3) rebateRow.metal = rebate.point || 0
               else if (rebate.symbolCategory === 4) rebateRow.energy = rebate.point || 0
               else if (rebate.symbolCategory === 5) rebateRow.energy2 = rebate.point || 0
-              else if (rebate.symbolCategory === 6) rebateRow.crypto = rebate.point || 0
+              // else if (rebate.symbolCategory === 6) rebateRow.crypto = rebate.point || 0
             })
 
             superRebates.forEach((rebate: any) => {
@@ -242,7 +242,7 @@
               else if (rebate.symbolCategory === 3) rebateRow.metal1 = rebate.point || 0
               else if (rebate.symbolCategory === 4) rebateRow.energy1 = rebate.point || 0
               else if (rebate.symbolCategory === 5) rebateRow.energy2Max = rebate.point || 0
-              else if (rebate.symbolCategory === 6) rebateRow.crypto1 = rebate.point || 0
+              // else if (rebate.symbolCategory === 6) rebateRow.crypto1 = rebate.point || 0
             })
 
             rebateRow.forexOptions = generateOptions(rebateRow.forex1)
@@ -250,7 +250,7 @@
             rebateRow.metalOptions = generateOptions(rebateRow.metal1)
             rebateRow.energyOptions = generateOptions(rebateRow.energy1)
             rebateRow.energy2Options = generateOptions(rebateRow.energy2Max)
-            rebateRow.cryptoOptions = generateOptions(rebateRow.crypto1)
+            // rebateRow.cryptoOptions = generateOptions(rebateRow.crypto1)
 
             groupedData[accountGroup].push(rebateRow)
           }
@@ -274,8 +274,8 @@
               index1: 0,
               metal1: 0,
               energy1: 0,
-              crypto: 0,
-              crypto1: 0,
+              // crypto: 0,
+              // crypto1: 0,
             }
 
             commissions.forEach((comm: any) => {
@@ -284,7 +284,7 @@
               else if (comm.symbolCategory === 3) commissionRow.metal = comm.point || 0
               else if (comm.symbolCategory === 4) commissionRow.energy = comm.point || 0
               else if (comm.symbolCategory === 5) commissionRow.energy2 = comm.point || 0
-              else if (comm.symbolCategory === 6) commissionRow.crypto = comm.point || 0
+              // else if (comm.symbolCategory === 6) commissionRow.crypto = comm.point || 0
             })
 
             superCommissions.forEach((comm: any) => {
@@ -293,7 +293,7 @@
               else if (comm.symbolCategory === 3) commissionRow.metal1 = comm.point || 0
               else if (comm.symbolCategory === 4) commissionRow.energy1 = comm.point || 0
               else if (comm.symbolCategory === 5) commissionRow.energy2Max = comm.point || 0
-              else if (comm.symbolCategory === 6) commissionRow.crypto1 = comm.point || 0
+              // else if (comm.symbolCategory === 6) commissionRow.crypto1 = comm.point || 0
             })
 
             commissionRow.forexOptions = generateOptions(commissionRow.forex1)
@@ -301,7 +301,7 @@
             commissionRow.metalOptions = generateOptions(commissionRow.metal1)
             commissionRow.energyOptions = generateOptions(commissionRow.energy1)
             commissionRow.energy2Options = generateOptions(commissionRow.energy2Max)
-            commissionRow.cryptoOptions = generateOptions(commissionRow.crypto1)
+            // commissionRow.cryptoOptions = generateOptions(commissionRow.crypto1)
 
             groupedData[accountGroup].push(commissionRow)
           }
@@ -407,12 +407,10 @@
         if (row.energy2 !== undefined && row.energy2 !== null) {
           pointList.push({ symbolCategory: 5, point: row.energy2 }) // Energy
         }
-        if (row.crypto !== undefined && row.crypto !== null) {
-          pointList.push({ symbolCategory: 6, point: row.crypto }) // Crypto
-        }
-        // if (row.energy2 !== undefined && row.energy2 !== null) {
-        //   pointList.push({ symbolCategory: 5, point: row.energy2 }) // Energy
+        // if (row.crypto !== undefined && row.crypto !== null) {
+        //   pointList.push({ symbolCategory: 6, point: row.crypto }) // Crypto
         // }
+
       })
     })
 

+ 6 - 0
pages/ib/components/linkDetailDialog.vue

@@ -170,6 +170,12 @@
 <style lang="scss" scoped>
   @import "@/uni.scss";
 
+  @media screen and (max-width: 768px) {
+
+    .dialog-content {
+      padding: 0 px2rpx(10);
+    }
+  }
   .label {
     color: #6c8595;
     font-size: px2rpx(14);

+ 7 - 2
pages/ib/components/pointDialog.vue

@@ -47,9 +47,9 @@
       </uni-forms>
     </view>
     <view class="dialog-footer dialog-account-adjust-footer">
-      <view class="account-adjust-notes-panel">
+      <view class="card account-adjust-notes-panel">
         <view class="account-adjust-notes-section">
-          <view class="account-adjust-notes-title">
+          <view class=" account-adjust-notes-title">
             <cwg-icon name="gy" :size="20" class="account-adjust-notes-title-icon"></cwg-icon>
             <span class="account-adjust-notes-title-text">{{ t('Ib.Custom.AccountAdjustNotesSection2Title') }}</span>
           </view>
@@ -318,8 +318,13 @@ const confirmDia = async () => {
   padding: 20rpx;
 }
 
+.card{
+  overflow: hidden;
+}
+
 .account-adjust-notes-panel {
   margin-bottom: 20rpx;
+  color: var(--bs-emphasis-color);
 }
 
 .account-adjust-notes-section {

+ 9 - 2
pages/ib/index.vue

@@ -7,7 +7,7 @@
       <uni-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
         <view class="border-0 card-header ">
           <view class="d-flex flex-wrap gap-3 align-items-center justify-content-between mb-3" style="width: 100%;">
-            <view class="mb-0 h3">{{t('Ib.Index.Welcome')}}</view>
+            <view class="mb-0 h3">{{t('Home.msg.Ib')}}</view>
             <button type="button" class="btn  btn-secondary  btn-shadow waves-effect" @click="LinkActivity1">
               <cwg-icon name="crm-share-nodes" :size="24" color="#fff" />{{t('Ib.Index.CreateLink')}}</button>
           </view>
@@ -27,7 +27,7 @@
               <view class="clearfix pe-2 text-warning"> <img src="/static/images/dollar.png" alt="dollar" class="img-fluid"> </view>
               <view class="clearfix">
                 <view class="mb-1">{{ t('news_add_field.Label.Balance') }}</view>
-                <view class="mb-0 fw-bold">${{ balanceInt }}.{{ balanceDecimal }}<text class="badge bg-danger-subtle text-danger">{{ t('Ib.Index.TotalRevenue') }}: ${{numberFormat(ibData.all || '0')}}</text></view>
+                <view class="mb-0 fw-bold ">${{ balanceInt }}.{{ balanceDecimal }}<text class="badge bg-danger-subtle text-danger">{{ t('Ib.Index.TotalRevenue') }}: ${{numberFormat(ibData.all || '0')}}</text></view>
               </view>
             </view>
           </view>
@@ -746,6 +746,12 @@ onMounted(async () => {
 <style lang="scss" scoped>
 @import "@/uni.scss";
 
+.clearfix{
+  .fw-bold{
+    color: var(--bs-emphasis-color);
+  }
+}
+
 .demo-uni-row {
   display: flex;
   flex-wrap: wrap;
@@ -827,6 +833,7 @@ onMounted(async () => {
 .header-title {
   font-size: px2rpx(24.5);
   font-weight: 600;
+  color: var(--bs-emphasis-color);
 }
 
 .header-right {

+ 5 - 3
pages/ib/linkList.vue

@@ -47,7 +47,7 @@
 
             <view class="label-tit">{{ t('Ib.Index.Spread5') }} :</view>
             <!--标准账户-->
-            <view class="label">{{ t('AccountType.StandardAccount') }} </view>
+            <view class="label">{{ t('AccountType.StandardAccount') }} </view>
             <cwg-combox v-model:value="accountTypeSettings.standard.selectedIndex" :options="getAvailableSpreads('7')"
               @change="(val) => handleAccountTypeChange('standard', '7', val)" :placeholder="t('placeholder.choose')" />
 
@@ -243,7 +243,7 @@ const mobilePrimaryFields = ref([
     prop: 'more',
     type: 'more',
     width: 20,
-    align: 'right',
+    align: 'center',
   },
 ])
 
@@ -630,11 +630,13 @@ const closeDetail = () => {
 
 .label-tit {
   font-weight: 500;
+  font-size: px2rpx(18);
   margin-bottom: 8rpx;
 }
 
 .label {
   font-weight: 400;
+  font-size: px2rpx(16);
   margin-bottom: 8rpx;
 }
 
@@ -678,7 +680,7 @@ const closeDetail = () => {
   margin-bottom: 18px;
   padding: 14px 16px;
   text-align: left;
-  background: #f5f7fa;
+  //background: #f5f7fa;
   border: 1px solid #e4e7ed;
   border-radius: 8px;
   box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.6);

+ 3 - 3
pages/ib/recording.vue

@@ -43,7 +43,7 @@
             <text v-if="row.status == 5">
               {{ t('State.Cancelled') }}
             </text>
-            <button class="cancel-btn" v-if="row.status == 1" @click.stop="cancel(row.id)">
+            <button class="cancel-btn btn btn-gray" v-if="row.status == 1" @click.stop="cancel(row.id)">
               {{ t('Btn.Cancel') }}
             </button>
           </view>
@@ -235,7 +235,7 @@
         })
       }
     } catch (err) {
-      uni.showToast({
+      err.msg && uni.showToast({
         title: err.msg,
         icon: 'none',
       })
@@ -261,6 +261,6 @@
   .cancel-btn{
     display: block;
     width: px2rpx(50);
-    line-height: px2rpx(14) !important;
+    line-height: px2rpx(16) !important;
   }
 </style>

+ 4 - 3
pages/ib/report.vue

@@ -94,7 +94,7 @@ const defaultDateRange = [`${year}-${month}-01`, `${year}-${month}-${day}`]
 const filterFields = ref([])
 
   const search = reactive({
-    detail_type: null as number | null,
+    detail_type: 1,
     customType: 0,
     platform: 'MT4',
     startDate: defaultDateRange[0],
@@ -345,7 +345,8 @@ const initIbTree = async () => {
 
   const mobilePrimaryFields = computed(() => {
     let list: any[] = []
-    if (reportType.value === 3) {
+
+    if (reportType.value == 3) {
       list = mobileList.value[`3_${search.detail_type}`] || []
     } else {
       list = mobileList.value[reportType.value] || []
@@ -356,7 +357,7 @@ const initIbTree = async () => {
         prop: 'more',
         type: 'more',
         width: 20,
-        align: 'right',
+        align: 'center',
       },
     ]
   })

+ 1 - 1
pages/ib/subsList.vue

@@ -325,6 +325,6 @@
     background-color: var(--bs-secondary);
     line-height: px2rpx(36);
     min-width: px2rpx(120);
-    border-radius: px2rpx(18);
+    border-radius: px2rpx(8);
   }
 </style>

+ 1 - 1
pages/ib/transfer.vue

@@ -68,7 +68,7 @@
                                                                 :placeholder="t('placeholder.input')"
                                                                 @blur="validateAmount" />
                                                         </uni-forms-item>
-                                                        <view class="btn btn-danger waves-effect waves-light"
+                                                        <view class="btn btn-gray waves-effect waves-light"
                                                             v-t="'State.All'" @click="setAllAmount">
                                                         </view>
                                                     </view>

+ 6 - 2
pages/ib/withdraw-select.vue

@@ -4,7 +4,7 @@
         <view class="container">
             <view class="row">
                 <view class="col-12">
-                    <view class="border-0 card-header">
+                    <view class="border-0 ">
                         <view class="d-flex flex-wrap gap-3 align-items-center justify-content-between mb-3">
                             <h3 class="mb-0" v-t="'Home.page_ib.item5'" />
                         </view>
@@ -26,7 +26,7 @@
                                         :tabs="tabsConfig" />
                                 </template>
                             </view>
-                            <view class="card-body" v-if="currentTableData.length > 0">
+                            <view class="card-body pt-0" v-if="currentTableData.length > 0">
                                 <view class="tab-content">
                                     <view>
                                         <PaymentMethodsList :list="currentTableData" @select="isShowStep3" />
@@ -1524,6 +1524,10 @@ watch(() => form.amount, (newVal) => {
 
 <style lang="scss" scoped>
 @import "@/uni.scss";
+.card-header{
+  border: none;
+  padding-bottom: px2rpx(0);
+}
 
 .custom-withdraw {
 

+ 12 - 9
pages/ib/withdraw.vue

@@ -15,7 +15,7 @@
                                     <view class="col-lg-6">
                                         <h5 class="mb-3" v-t="'Custom.Deposit.Title22'"></h5>
                                         <uni-forms-item>
-                                            <cwg-combox :clearable="false" v-model:value="channelId"
+                                            <cwg-combox needSpace :clearable="false" v-model:value="channelId"
                                                 :options="channelListOptions" :placeholder="t('placeholder.choose')">
                                             </cwg-combox>
                                         </uni-forms-item>
@@ -272,7 +272,7 @@
                                                     <uni-easyinput v-model.trim="form.amount" type="number"
                                                         @blur="validateAmount" />
                                                 </uni-forms-item>
-                                                <view class="btn btn-dark waves-effect waves-light" v-t="'State.All'"
+                                                <view class="btn btn-gray waves-effect waves-light" v-t="'State.All'"
                                                     @click="setAllAmount"></view>
                                             </view>
                                         </view>
@@ -291,7 +291,7 @@
                                                 <uni-easyinput v-model.trim="form.amount" autocomplete="off"
                                                     type="number" @blur="validateAmount" />
                                             </uni-forms-item>
-                                            <view class="btn btn-dark waves-effect waves-light" v-t="'State.All'"
+                                            <view class="btn btn-gray waves-effect waves-light" v-t="'State.All'"
                                                 @click="setAllAmount"></view>
                                         </view>
                                     </view>
@@ -303,7 +303,7 @@
                                                 <label class="checkbox">
                                                     <checkbox value="1" :checked="form.agree2" />
                                                     <view class="crm-cursor"
-                                                        style="text-decoration: underline; display: inline-block; margin-left: 10px;"
+                                                        style="text-decoration: underline; display: inline-block; margin-left: 10px;color: #333;"
                                                         @click.stop="dialogCheckTip = true">
                                                         {{ t('Custom.Withdraw.Des') }}
                                                     </view>
@@ -317,7 +317,7 @@
                                                 <label class="checkbox">
                                                     <checkbox value="1" :checked="form.agree3" />
                                                     <view class="crm-cursor"
-                                                        style="display: inline-block; margin-left: 10px;">
+                                                        style="display: inline-block; margin-left: 10px;color: #333;">
                                                         * {{ t('Custom.Withdraw.item1') }}<br />
                                                         {{ t('Custom.Withdraw.item1_1') }}<br />
                                                         {{ t('Custom.Withdraw.item1_2') }}
@@ -336,7 +336,7 @@
                     </view>
                 </view>
                 <view class="col-lg-4">
-                    <view class="tips" v-if="(introduce.introduce || introduce.enIntroduce)">
+                    <view class="tips card card-body" v-if="(introduce.introduce || introduce.enIntroduce)">
                         <view>
                             <cwg-rich-text class="attention"
                                 :nodes="isZh ? introduce.introduce : introduce.enIntroduce" />
@@ -354,7 +354,7 @@
                             <view class="card-top">
                                 <text class="tit">{{ t('Custom.Deposit.Title22')
                                 }}</text>
-                                <cwg-combox :clearable="false" v-model:value="channelId" :options="channelListOptions"
+                                <cwg-combox needSpace :clearable="false" v-model:value="channelId" :options="channelListOptions"
                                     :placeholder="t('placeholder.choose')">
                                 </cwg-combox>
                             </view>
@@ -618,7 +618,7 @@
                                                 <uni-easyinput v-model.trim="form.amount" type="number"
                                                     @blur="validateAmount" />
                                             </uni-forms-item>
-                                            <view class="btn" v-t="'State.All'" @click="setAllAmount"></view>
+                                            <view class="btn btn-gray" v-t="'State.All'" @click="setAllAmount"></view>
                                         </view>
 
                                         <!-- 非电汇的金额区域 -->
@@ -635,7 +635,7 @@
                                                 <uni-easyinput v-model.trim="form.amount" autocomplete="off"
                                                     type="number" @blur="validateAmount" />
                                             </uni-forms-item>
-                                            <view class="btn" v-t="'State.All'" @click="setAllAmount"></view>
+                                            <view class="btn btn-gray" v-t="'State.All'" @click="setAllAmount"></view>
                                         </view>
                                     </view>
                                     <view class="agree">
@@ -1902,6 +1902,9 @@ watch(() => form.amount, (newVal) => {
 
 <style lang="scss" scoped>
 @import "@/uni.scss";
+.tips{
+  color: var(--bs-emphasis-color);
+}
 
 .custom-withdraw {
     width: px2rpx(566);

+ 3 - 0
pages/login/index.vue

@@ -1222,6 +1222,9 @@ button {
 
 .cwg-button {
   padding: px2rpx(34) 0 !important;
+  uni-button {
+    border-radius: px2rpx(8)
+  }
 }
 
 .tab-list {

+ 3 - 3
pages/login/reset.vue

@@ -222,7 +222,7 @@ function handleLogin() {
 }
 
 .form-label {
-  font-size: px2rpx(14);
+  font-size: px2rpx(16);
   color: var(--bs-heading-color);
   margin-bottom: px2rpx(8);
 }
@@ -244,7 +244,7 @@ function handleLogin() {
     width: 100%;
     height: px2rpx(44);
     line-height: px2rpx(44);
-    border-radius: px2rpx(22);
+    border-radius: px2rpx(8);
     background-color: var(--bs-btn-bg);
     border: none;
     display: flex;
@@ -269,7 +269,7 @@ function handleLogin() {
     width: 100%;
     height: px2rpx(44);
     line-height: px2rpx(44);
-    border-radius: px2rpx(22);
+    border-radius: px2rpx(8);
     background-color: transparent;
     border: 1px solid #e4e4e4;
     color: var(--bs-heading-color);

+ 5 - 6
pages/mine/components/AddFileDialog.vue

@@ -11,8 +11,7 @@
                 class="crm-form">
                 <uni-row class="form-row uni-row1">
                     <template v-if="form.type === 1">
-                        <uni-col :xs="24">
-
+                        <uni-col :xs="24" :offset="2">
                             <uni-forms-item :label="t('PersonalManagement.Title.ProofOfIdentity') + 1">
                                 <cwg-file-picker v-model="form.file1" :editable="editingId === form.id" :limit="1"
                                     uploadUrl="/custom/file/upload/1" :baseUrl="updateUrl" :imageWidth="150"
@@ -21,7 +20,7 @@
                                     @update:modelValue="(val) => handleFileUpdate(val, form, 'file1')" />
                             </uni-forms-item>
                         </uni-col>
-                        <uni-col :xs="24">
+                        <uni-col :xs="24" :offset="2">
                             <uni-forms-item :label="t('PersonalManagement.Title.ProofOfIdentity') + 2">
                                 <cwg-file-picker v-model="form.file2" :editable="editingId === form.id" :limit="1"
                                     uploadUrl="/custom/file/upload/2" :baseUrl="updateUrl" :imageWidth="150"
@@ -32,7 +31,7 @@
                         </uni-col>
                     </template>
                     <template v-if="form.type === 2">
-                        <uni-col :xs="24">
+                        <uni-col :xs="24" :offset="2">
                             <uni-forms-item :label="t('PersonalManagement.Title.ProofOfAddress')">
                                 <cwg-file-picker v-model="form.file3" :editable="editingId === form.id" :limit="1"
                                     uploadUrl="/custom/file/upload/3" :baseUrl="updateUrl" :imageWidth="150"
@@ -43,7 +42,7 @@
                         </uni-col>
                     </template>
                     <template v-if="form.type === 3">
-                        <uni-col :xs="24">
+                        <uni-col :xs="24" :offset="2">
                             <uni-forms-item :label="t('PersonalManagement.Title.AttachedFile')">
                                 <cwg-file-picker v-model="form.file4" :editable="editingId === form.id" :limit="9"
                                     uploadUrl="/custom/file/upload/10" :baseUrl="updateUrl" :imageWidth="150"
@@ -227,7 +226,7 @@ defineExpose({
             transition: all 0.3s;
             display: flex;
             align-items: center;
-            justify-content: center;
+            justify-content: space-around;
 
             &.btn-cancel {
                 background: #f3f4f6;

+ 4 - 1
pages/mine/components/CardAuthDialog.vue

@@ -288,7 +288,7 @@ defineExpose({
 
     .dialog-footer {
         display: flex;
-        gap: px2rpx(20);
+        gap: px2rpx(150);
         justify-content: center;
         padding: px2rpx(16);
         border-top: 1px solid #f3f4f6;
@@ -521,6 +521,9 @@ defineExpose({
         height: px2rpx(46) !important;
     }
   .btn-gray{
+    height: px2rpx(46);
+    line-height: px2rpx(46);
+    border-radius: px2rpx(8);
     background-color: #102047;
     color: #fff;
   }

+ 6 - 3
pages/mine/components/FileManagementTab.vue

@@ -4,10 +4,12 @@
         <view class="content-title">
             <view/>
             <view class="content-title-btns">
+<!--              -->
                 <view v-if="!isSHowBtn.isSHowIdentity" class="btn-primary" @click="openAddFileDialog(1)">
                     <cwg-icon icon="crm-plus" :size="16" color="#fff" />
                     <text v-t="'PersonalManagement.Title.ProofOfIdentity'" />
                 </view>
+<!--              -->
                 <view v-if="!isSHowBtn.isSHowAddress" class="btn-primary" @click="openAddFileDialog(2)">
                     <cwg-icon icon="crm-plus" :size="16" color="#fff" />
                     <text v-t="'PersonalManagement.Title.ProofOfAddress'" />
@@ -184,7 +186,7 @@ defineProps<Props>();
         align-items: center;
         justify-content: flex-end;
         //flex-wrap: wrap;
-        gap: px2rpx(10);
+        gap: px2rpx(5);
 
         .btn-primary {
             min-width: px2rpx(80);
@@ -192,14 +194,15 @@ defineProps<Props>();
             color: white;
             padding: 0 px2rpx(10);
             border: none;
-          border-radius: px2rpx(6);
+          border-radius: px2rpx(8);
             font-size: px2rpx(16);
             text-align: center;
             cursor: pointer;
             display: flex;
             align-items: center;
             justify-content: center;
-            gap: px2rpx(5);
+          box-sizing: border-box;
+            //gap: px2rpx(5);
         }
 
         .btn-primary:active {

+ 3 - 3
pages/mine/components/SecurityCenterTab.vue

@@ -9,7 +9,7 @@
           </view>
         </view>
         <uni-row class="demo-uni-row uni-row1" :gutter="20">
-          <uni-col v-show="selectedType == 1" :xs="24" :sm="24" :md="24" :lg="12" :xl="12" :offset="6">
+          <uni-col v-show="selectedType == 1" :xs="{span:24,offset:0}" :sm="{span:24,offset:0}" :md="{span:24,offset:0}" :lg="{span:12,offset:6}" :xl="{span:12,offset:6}" >
             <view class=" p-3">
               <view class="content-title">
                 <view v-t="'PersonalManagement.Title.CustomerZonePasswordChange'"></view>
@@ -51,7 +51,7 @@
               </uni-forms>
             </view>
           </uni-col>
-          <uni-col v-show="selectedType == 2" :xs="24" :sm="24" :md="24" :lg="12" :xl="12" :offset="6">
+          <uni-col v-show="selectedType == 2" :xs="{span:24,offset:0}" :sm="{span:{span:24,offset:0},offset:0}" :md="{span:24,offset:0}" :lg="{span:12,offset:6}" :xl="{span:12,offset:6}" >
             <view class=" p-3">
               <view class="content-title">
                 <view v-t="'PersonalManagement.Title.EmailChange'"></view>
@@ -125,7 +125,7 @@ const passwordInfo = ref({
 const emailInfo = ref({
     email: '',
 });
-const selectedType = ref(1)
+const selectedType = ref('1')
 const types = computed(() => {
   return [
       { key: '1', label: t('PersonalManagement.Title.CustomerZonePasswordChange') },

+ 2 - 0
service/custom.ts

@@ -108,6 +108,8 @@ export const customApi = {
   tradePositionExport: (params = {}) => post('/trade/position/export', params, 'Host80'),
   // 交易历史
   tradeShardingHistory: (params = {}) => post('/trade/sharding/history', params, 'Host80'),
+  // 交易历史1
+  tradeHistory: (params = {}) => post('/trade/history', params, 'Host80'),
   // 交易历史导出
   tradeShardingHistoryExport: (params = {}) => post('/trade/sharding/history/export', params, 'Host80'),
   // 个人中心仪表盘数据

+ 11 - 7
static/scss/global/global.scss

@@ -140,7 +140,8 @@
     --status-expired-border: var(--color-slate-400);
     --status-cancelled-border: var(--color-slate-300);
     --bs-secondary: #ef4223;
-    --btn-color: #f3f3f3;
+    --btn-color: #f5f5f5;
+    --btn-border-color: #97A1C0;
     --table-th-color: #f3f3f3;
 
 
@@ -1632,21 +1633,21 @@ uni-content.collapsed {
     display: inline-flex;
     align-items: center;
     padding: 4rpx 12rpx;
-    border-radius: 4rpx;
+    border-radius: 8rpx;
     font-size: var(--font-size-24);
     font-weight: 500;
     line-height: 1.5;
     color: #333;
     background-color: var(--btn-color);
-    border: 1px solid var(--btn-color);
+    border: 1px solid var(--btn-border-color);
     cursor: pointer;
     transition: all var(--default-transition-duration) var(--default-transition-timing-function);
     white-space: nowrap;
 
     &:hover {
-        color: #000;
+        color: #333;
         background-color: var(--btn-color);
-        border-color: var(--btn-color);
+        border-color: var(--btn-border-color);
     }
 
     // 添加点击效果
@@ -1737,8 +1738,8 @@ uni-content.collapsed {
         // 双按钮模式
         &:not(:has(button:only-child)):has(button) {
             display: flex;
-            justify-content: center;
-            gap: px2rpx(20);
+            justify-content: space-around;
+            //gap: px2rpx(30);
         }
 
         // 单按钮模式
@@ -2006,4 +2007,7 @@ uni-content.collapsed {
             line-height: 2;
         }
     }
+}
+.uni-picker-container{
+  z-index: 11201!important;
 }

+ 1 - 1
uni.scss

@@ -83,5 +83,5 @@ $uni-color-paragraph: #3F536E; // 文章段落颜色
 $uni-font-size-paragraph: 15px;
 
 .uni-picker-container{
-  z-index: 9999;
+  z-index: 11201!important;
 }

+ 6 - 2
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -54,7 +54,7 @@
 								class="" v-for="(item, index) in mixinDatacomResData" :key="index"
 								@click="change(item)">
 								<text :class="{ 'uni-select__selector__disabled': item.disable }">
-                  {{item.disable?'':'&nbsp;&nbsp;'}}
+                  {{needSpace ? item.disable ? '' : '&nbsp;&nbsp;' : ''}}
                   {{formatItemName(item) }}</text>
 							</view>
 							<view v-if="multiple && mixinDatacomResData.length > 0">
@@ -198,6 +198,10 @@ export default {
 		mode: {
 			type: String,
 			default: 'default'
+		},
+    needSpace: {
+			type: Boolean,
+			default: false
 		}
 	},
 	data() {
@@ -631,7 +635,7 @@ $uni-info: #909399 !default;
 	min-height: 35px;
 
 	&--disabled {
-		background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important;
+		background-color: var(--bs-secondary-bg) !important;
 		cursor: not-allowed;
 	}
 

+ 1 - 1
uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue

@@ -82,7 +82,7 @@ $uni-primary: #007aff !default;
 }
 
 :deep(.uni-picker-container){
-  z-index: 9999!important;
+  z-index: 11201!important;
 }
 
 .uni-calendar-item__weeks-box-item {

+ 188 - 6
uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue

@@ -12,10 +12,11 @@
 					<view class="uni-calendar__header-btn uni-calendar--left"></view>
 				</view>
 
-				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
-					<text class="uni-calendar__header-text">{{ (nowDate.year || '') + yearText + (nowDate.month || '') +
-						monthText }}</text>
-				</picker>
+				<view class="uni-calendar__header-date" @click="togglePickerPanel">
+					<text class="uni-calendar__header-year" @click.stop="showYearPicker = true">{{ nowDate.year || '' }}{{ yearText }}</text>
+					<text class="uni-calendar__header-divider">/</text>
+					<text class="uni-calendar__header-month" @click.stop="showMonthPicker = true">{{ nowDate.month || '' }}{{ monthText }}</text>
+				</view>
 
 				<view class="uni-calendar__header-btn-box" @click.stop="changeMonth('next')">
 					<view class="uni-calendar__header-btn uni-calendar--right"></view>
@@ -26,6 +27,39 @@
 					<view class="dialog-close-plus dialog-close-rotate" data-id="close"></view>
 				</view>
 			</view>
+
+			<view v-if="showYearPicker" class="uni-calendar__picker-mask" @click="showYearPicker = false"></view>
+			<view v-if="showYearPicker" class="uni-calendar__picker-panel">
+				<view class="uni-calendar__picker-header">
+					<view class="uni-calendar__picker-btn" @click="changeYearDecade(-1)">
+						<text>«</text>
+					</view>
+					<text class="uni-calendar__picker-title">{{ decadeStart }} - {{ decadeEnd }}</text>
+					<view class="uni-calendar__picker-btn" @click="changeYearDecade(1)">
+						<text>»</text>
+					</view>
+				</view>
+				<view class="uni-calendar__picker-body">
+					<view v-for="year in yearList" :key="year" 
+						class="uni-calendar__picker-item" 
+						:class="{ 'uni-calendar__picker-item--active': year === nowDate.year }"
+						@click="selectYear(year)">
+						{{ year }}
+					</view>
+				</view>
+			</view>
+
+			<view v-if="showMonthPicker" class="uni-calendar__picker-mask" @click="showMonthPicker = false"></view>
+			<view v-if="showMonthPicker" class="uni-calendar__picker-panel">
+				<view class="uni-calendar__picker-body">
+					<view v-for="month in monthList" :key="month" 
+						class="uni-calendar__picker-item" 
+						:class="{ 'uni-calendar__picker-item--active': month === nowDate.month }"
+						@click="selectMonth(month)">
+						{{ month }}{{ monthText }}
+					</view>
+				</view>
+			</view>
 			<view class="uni-calendar__box">
 
 				<view v-if="showMonth" class="uni-calendar__box-bg">
@@ -249,7 +283,10 @@ export default {
 			tempRange: {
 				before: '',
 				after: ''
-			}
+			},
+			showYearPicker: false,
+			showMonthPicker: false,
+			currentDecadeStart: 2020
 		}
 	},
 	watch: {
@@ -399,6 +436,22 @@ export default {
 		confirmText() {
 			return t("uni-calender.confirm")
 		},
+		decadeStart() {
+			return this.currentDecadeStart
+		},
+		decadeEnd() {
+			return this.currentDecadeStart + 9
+		},
+		yearList() {
+			const years = []
+			for (let i = 0; i < 10; i++) {
+				years.push(this.currentDecadeStart + i)
+			}
+			return years
+		},
+		monthList() {
+			return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
+		}
 	},
 	created() {
 		// 获取日历方法实例
@@ -625,6 +678,26 @@ export default {
 			this.setDate(newDate)
 			this.monthSwitch()
 		},
+		togglePickerPanel() {
+			this.showYearPicker = !this.showYearPicker
+			this.showMonthPicker = false
+		},
+		changeYearDecade(direction) {
+			this.currentDecadeStart += direction * 10
+		},
+		selectYear(year) {
+			const month = this.nowDate.month || 1
+			this.setDate(`${year}-${month}-1`)
+			this.showYearPicker = false
+			this.showMonthPicker = true
+			this.monthSwitch()
+		},
+		selectMonth(month) {
+			const year = this.nowDate.year || new Date().getFullYear()
+			this.setDate(`${year}-${month}-1`)
+			this.showMonthPicker = false
+			this.monthSwitch()
+		},
 		/**
 		 * 设置日期
 		 * @param {Object} date
@@ -709,7 +782,7 @@ $uni-primary: #007aff !default;
 }
 
 :deep(.uni-picker-container){
-  z-index: 9999!important;
+  z-index: 11201!important;
 }
 
 .uni-calendar__header-mobile {
@@ -754,6 +827,115 @@ $uni-primary: #007aff !default;
 	color: var(--bs-heading-color);
 }
 
+.uni-calendar__header-date {
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	cursor: pointer;
+	padding: 0 10px;
+}
+
+.uni-calendar__header-year,
+.uni-calendar__header-month {
+	font-size: 15px;
+	color: var(--bs-heading-color);
+	padding: 4px 8px;
+	border-radius: 4px;
+	transition: background-color 0.2s;
+}
+
+.uni-calendar__header-year:hover,
+.uni-calendar__header-month:hover {
+	background-color: #f5f5f5;
+}
+
+.uni-calendar__header-divider {
+	margin: 0 4px;
+	color: #999;
+}
+
+.uni-calendar__picker-mask {
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, 0.5);
+	z-index: 11201;
+}
+
+.uni-calendar__picker-panel {
+	position: absolute;
+	top: 50px;
+	left: 0;
+	right: 0;
+	background-color: #fff;
+	border-radius: 4px;
+	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
+	z-index: 11202;
+	padding: 10px;
+	max-height: 300px;
+	overflow-y: auto;
+}
+
+.uni-calendar__picker-header {
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	padding-bottom: 10px;
+	border-bottom: 1px solid #eee;
+	margin-bottom: 10px;
+}
+
+.uni-calendar__picker-btn {
+	width: 30px;
+	height: 30px;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	cursor: pointer;
+	border-radius: 4px;
+	transition: background-color 0.2s;
+	font-size: 16px;
+	color: #666;
+}
+
+.uni-calendar__picker-btn:hover {
+	background-color: #f5f5f5;
+}
+
+.uni-calendar__picker-title {
+	font-size: 14px;
+	font-weight: bold;
+	color: var(--bs-heading-color);
+}
+
+.uni-calendar__picker-body {
+	display: flex;
+	flex-wrap: wrap;
+	gap: 8px;
+}
+
+.uni-calendar__picker-item {
+	flex: 0 0 calc(20% - 6.4px);
+	text-align: center;
+	padding: 10px 0;
+	border-radius: 4px;
+	cursor: pointer;
+	font-size: 14px;
+	color: var(--bs-heading-color);
+	transition: all 0.2s;
+}
+
+.uni-calendar__picker-item:hover {
+	background-color: #e8f4fd;
+}
+
+.uni-calendar__picker-item--active {
+	background-color: #2979ff;
+	color: #fff;
+}
+
 .uni-calendar__button-text {
 	text-align: center;
 	width: 100px;

+ 1 - 1
uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue

@@ -905,7 +905,7 @@ $uni-primary: #007aff !default;
 }
 
 :deep(.uni-picker-container){
-  z-index: 9999!important;
+  z-index: 11201!important;
 }
 
 .uni-datetime-picker-sign {

+ 1 - 1
uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue

@@ -865,7 +865,7 @@ $uni-primary: #007aff !default;
 	flex: 1;
 }
 :deep(.uni-picker-container){
-  z-index: 9999!important;
+  z-index: 11201!important;
 }
 .uni-date-placeholder{
   .uni-date__x-input{

+ 4 - 4
uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue

@@ -7,7 +7,7 @@
 			</slot>
 			<!-- #ifdef MP-ALIPAY -->
 			<textarea :enableNative="enableNative" v-if="type === 'textarea'" class="uni-easyinput__content-textarea"
-				:class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="disabled?'':placeholder"
+				:class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder"
 				:placeholderStyle="placeholderStyle" :disabled="disabled"
 				placeholder-class="uni-easyinput__placeholder-class" :minlength="inputMinlength" :maxlength="inputMaxlength" :focus="focused"
 				:autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition"
@@ -15,7 +15,7 @@
 				@keyboardheightchange="onkeyboardheightchange" @wheel.prevent></textarea>
 			<input :enableNative="enableNative" v-else :type="type === 'password' ? 'text' : type"
 				class="uni-easyinput__content-input" :style="inputStyle" :name="name" :value="val"
-				:password="!showPassword && type === 'password'" :placeholder="disabled?'':placeholder"
+				:password="!showPassword && type === 'password'" :placeholder="placeholder"
 				:placeholderStyle="placeholderStyle" placeholder-class="uni-easyinput__placeholder-class"
 				:disabled="disabled" :minlength="inputMinlength" :maxlength="inputMaxlength" :focus="focused" :confirmType="confirmType"
 				:cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur"
@@ -23,7 +23,7 @@
 			<!-- #endif -->
 			<!-- #ifndef MP-ALIPAY -->
 			<textarea v-if="type === 'textarea'" class="uni-easyinput__content-textarea"
-				:class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="disabled?'':placeholder"
+				:class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder"
 				:placeholderStyle="placeholderStyle" :disabled="disabled"
 				placeholder-class="uni-easyinput__placeholder-class" :minlength="inputMinlength" :maxlength="inputMaxlength" :focus="focused"
 				:autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition"
@@ -31,7 +31,7 @@
 				@keyboardheightchange="onkeyboardheightchange" @wheel.prevent></textarea>
 			<input v-else :type="type === 'password' ? 'text' : type" class="uni-easyinput__content-input"
 				:style="inputStyle" :name="name" :value="val" :password="!showPassword && type === 'password'"
-				:placeholder="disabled?'':placeholder" :placeholderStyle="placeholderStyle"
+				:placeholder="placeholder" :placeholderStyle="placeholderStyle"
 				placeholder-class="uni-easyinput__placeholder-class" :disabled="disabled" :minlength="inputMinlength" :maxlength="inputMaxlength"
 				:focus="focused" :confirmType="confirmType" :cursor-spacing="cursorSpacing"
 				:adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur" @input="onInput" @confirm="onConfirm"

+ 2 - 2
uni_modules/uni-tag/components/uni-tag/uni-tag.vue

@@ -1,5 +1,5 @@
 <template>
-	<text class="uni-tag" v-if="showTag" :class="classes" :style="customStyle" @click="onClick">{{ text }}</text>
+	<text class="status-tagtag" v-if="showTag" :class="classes" :style="customStyle" @click="onClick">{{ text }}</text>
 </template>
 
 <script>
@@ -83,7 +83,7 @@ export default {
 				isTrue
 			} = this
 			const classArr = [
-				'uni-tag--' + type,
+				'status--' + type,
 				'uni-tag--' + size,
 				isTrue(disabled) ? 'uni-tag--disabled' : '',
 				isTrue(inverted) ? 'uni-tag--' + type + '--inverted' : '',