zhb 2 месяцев назад
Родитель
Сommit
a230ae461c

+ 1 - 0
components/cwg-custom-footer.vue

@@ -85,6 +85,7 @@ const openLink = (url) => {
             font-size: px2rpx(12);
             letter-spacing: px2rpx(0.5);
             color: #0066cc;
+            text-decoration: underline;
             cursor: pointer;
 
             &:active {

+ 12 - 5
composables/useMenuSplit.ts

@@ -181,7 +181,7 @@ export function useMenuSplit() {
             isOpenMenu: false,
             submenuHeight: 0,
             path: '/',
-            label: 'Latest.PaymentWallet',
+            label: 'vu.item6',
             icon: 'crm-payment',
             children: [
                 { path: '/pages/customer/deposit', label: 'Home.page_customer.item2', icon: 'icon-deposit' },
@@ -190,10 +190,17 @@ export function useMenuSplit() {
                 { path: '/pages/customer/transfer', label: 'Custom.Index.Transfer', icon: 'icon-transfer' },
             ],
         },
+        {
+            path: '/pages/activities/index',
+            isOpenMenu: false,
+            label: 'Home.page_customer.item6',
+            icon: 'crm-hd',
+            children: [],
+        },
         {
             path: '/',
             isOpenMenu: false,
-            label: 'News.News',
+            label: 'vu.item5',
             icon: 'crm-chart-area',
             children: [
                 { path: '/pages/analytics/analystViews', label: 'News.Announcement', icon: 'icon-application' },
@@ -207,7 +214,7 @@ export function useMenuSplit() {
             ],
         },
         {
-            path: '/pages/customer/withdrawal',
+            path: '/pages/common/download',
             isOpenMenu: false,
             label: 'Downloadpage.item1',
             icon: 'crm-download',
@@ -239,7 +246,7 @@ export function useMenuSplit() {
         {
             isOpenMenu: false,
             path: '/',
-            label: 'Home.page_ib.item1',
+            label: 'Documentary.console.item1',
             icon: 'crm-mb',
         },
         {
@@ -257,7 +264,7 @@ export function useMenuSplit() {
             isOpenMenu: false,
             submenuHeight: 0,
             path: '/',
-            label: 'Latest.PaymentWallet',
+            label: 'vu.item6',
             icon: 'crm-payment',
             children: [
                 { path: '/pages/ib/transfer', label: 'Home.page_ib.item4', icon: 'icon-payment' },

+ 10 - 1
locale/ar.json

@@ -1,5 +1,14 @@
 {
-    "common": {
+  "vu": {
+    "item1": "حقيقي",
+    "item2": "عينة",
+    "item3": "تغيير كلمة مرور التداول",
+    "item4": "تغيير كلمة مرور المستثمر",
+    "item5": "تحليل",
+    "item6": "الدفع والمحفظة",
+    "item7": "المزيد"
+  },
+  "common": {
     "confirm": "تأكيد",
     "cancel": "إلغاء",
     "loading": "جارٍ التحميل...",

+ 9 - 4
locale/cn.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "真实",
+    "item2": "模拟",
+    "item3": "修改交易密码",
+    "item4": "修改投资者密码",
+    "item5": "分析",
+    "item6": "支付与钱包",
+    "item7": "更多"
+  },
   "common": {
     "confirm": "确认",
     "cancel": "取消",
@@ -18,10 +27,6 @@
     "day": "日",
     "upload": "上传"
   },
-  "Latest": {
-    "PaymentWallet": "支付与钱包",
-    "More": "更多"
-  },
   "pages": {
     "login": {
       "index": "登录",

+ 9 - 0
locale/de.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Echt",
+    "item2": "Demo",
+    "item3": "Handels Passwort ändern",
+    "item4": "Investor Passwort ändern",
+    "item5": "Analyse",
+    "item6": "Zahlung & Wallet",
+    "item7": "Mehr"
+  },
   "common": {
     "confirm": "Bestätigen",
     "cancel": "Abbrechen",

+ 9 - 0
locale/en.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Change Trading Password",
+    "item4": "Change Investor Password",
+    "item5": "Analysis",
+    "item6": "Payment & Wallet",
+    "item7": "More"
+  },
   "common": {
     "confirm": "Confirm",
     "cancel": "Cancel",

+ 9 - 0
locale/es.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Cambiar Contraseña de Trading",
+    "item4": "Cambiar Contraseña de Inversor",
+    "item5": "Análisis",
+    "item6": "Pago & Billetera",
+    "item7": "Más"
+  },
   "common": {
     "confirm": "Confirmar",
     "cancel": "Cancelar",

+ 9 - 0
locale/fa.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "حقیقی",
+    "item2": "دمو",
+    "item3": "تغییر رمز عبور معاملاتی",
+    "item4": "تغییر رمز عبور инвестور",
+    "item5": "تحلیل",
+    "item6": "پرداخت و کیف پول",
+    "item7": "بیشتر"
+  },
   "common": {
     "confirm": "تأیید",
     "cancel": "لغو",

+ 9 - 0
locale/id.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Ubah Kata Sandi Trading",
+    "item4": "Ubah Kata Sandi Investor",
+    "item5": "Analisis",
+    "item6": "Pembayaran & Dompet",
+    "item7": "Lebih Banyak"
+  },
   "common": {
     "confirm": "Konfirmasi",
     "cancel": "Batal",

+ 9 - 0
locale/ko.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "실제",
+    "item2": "데모",
+    "item3": "거래 비밀번호 변경",
+    "item4": "투자자 비밀번호 변경",
+    "item5": "분석",
+    "item6": "결제 및 지갑",
+    "item7": "더 보기"
+  },
   "common": {
     "confirm": "확인",
     "cancel": "취소",

+ 9 - 0
locale/ms.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Tukar Kata Laluan Perdagangan",
+    "item4": "Tukar Kata Laluan Pelabur",
+    "item5": "Analisis",
+    "item6": "Pembayaran & Dompet",
+    "item7": "Lebih Banyak"
+  },
   "common": {
     "confirm": "Sahkan",
     "cancel": "Batal",

+ 9 - 0
locale/pt.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Real",
+    "item2": "Demo",
+    "item3": "Alterar Senha de Trading",
+    "item4": "Alterar Senha do Investidor",
+    "item5": "Análise",
+    "item6": "Pagamento & Carteira",
+    "item7": "Mais"
+  },
   "common": {
     "confirm": "Confirmar",
     "cancel": "Cancelar",

+ 9 - 0
locale/th.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "จริง",
+    "item2": "แบบจำลอง",
+    "item3": "เปลี่ยนรหัสผ่านการเทรด",
+    "item4": "เปลี่ยนรหัสผ่านนักลงทุน",
+    "item5": "วิเคราะห์",
+    "item6": "การชำระเงินและกระเป๋าเงิน",
+    "item7": "อื่น ๆ"
+  },
   "common": {
     "confirm": "ยืนยัน",
     "cancel": "ยกเลิก",

+ 9 - 0
locale/tr.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Gerçek",
+    "item2": "Demo",
+    "item3": "Ticaret Şifresini Değiştir",
+    "item4": "Yatırımcı Şifresini Değiştir",
+    "item5": "Analiz",
+    "item6": "Ödeme ve Cüzdan",
+    "item7": "Daha Fazla"
+  },
   "common": {
     "confirm": "Onayla",
     "cancel": "İptal",

+ 9 - 0
locale/vn.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "Thực tế",
+    "item2": "Demo",
+    "item3": "Đổi mật khẩu giao dịch",
+    "item4": "Đổi mật khẩu nhà đầu tư",
+    "item5": "Phân tích",
+    "item6": "Thanh toán và Ví",
+    "item7": "Thêm"
+  },
   "common": {
     "confirm": "Xác nhận",
     "cancel": "Hủy",

+ 9 - 0
locale/zhHant.json

@@ -1,4 +1,13 @@
 {
+  "vu": {
+    "item1": "真實",
+    "item2": "模擬",
+    "item3": "修改交易密碼",
+    "item4": "修改投資者密碼",
+    "item5": "分析",
+    "item6": "支付與錢包",
+    "item7": "更多"
+  },
   "common": {
     "confirm": "確認",
     "cancel": "取消",

+ 7 - 0
pages.json

@@ -282,6 +282,13 @@
         "navigationStyle": "custom"
       }
     },
+    {
+      "path": "pages/common/download",
+      "style": {
+        "navigationBarTitleText": "",
+        "navigationStyle": "custom"
+      }
+    },
     {
       "path": "pages/common/notice",
       "style": {

+ 23 - 0
pages/common/download.vue

@@ -0,0 +1,23 @@
+<template>
+    <cwg-page-wrapper class="create-page" :isHeaderFixed="true">
+        <cwg-header :title="t('Home.page_ib.item3')" />
+        <view class="account-section">
+        </view>
+    </cwg-page-wrapper>
+</template>
+
+<script setup lang="ts">
+import { ref, reactive, computed, onMounted, onUnmounted } from 'vue'
+import { onLoad } from '@dcloudio/uni-app'
+import { useI18n } from 'vue-i18n' // uni-app 中已集成,但需配置
+import { customApi } from '@/service/custom'
+import { financialApi } from '@/service/financial'
+import Config from '@/config/index'
+import AddBankDialog from '@/components/AddBankDialog.vue';
+import PaymentMethodsList from './components/PaymentMethodsList.vue'
+const { t, locale } = useI18n()
+const isZh = computed(() => ['cn', 'zhHant'].includes(locale.value))
+</script>
+<style lang="scss" scoped>
+@import "@/uni.scss";
+</style>

+ 24 - 23
pages/customer/components/AccountCard.vue

@@ -46,7 +46,7 @@
                         <view class="circle-icon">
                             <cwg-icon name="crm-ellipsis-vertical" :size="16" color="#2e3a47" />
                         </view>
-                        <text class="circle-label" v-t="'Latest.More'" />
+                        <text class="circle-label" v-t="'vu.item7'" />
                     </view>
                 </cwg-dropdown>
             </view>
@@ -56,9 +56,9 @@
                 <template v-for="(item, index) in actionButtons" :key="index">
                     <view class="action-btn" :class="{ 'primary': item.primary, 'is-disabled': item.disabled }"
                         @click="handleAction1(item)" v-if="!item.needDemo">
-                        <span class="btn-icon">
+                        <text class="btn-icon">
                             <cwg-icon :name="item.icon" :size="16" :color="item.color" />
-                        </span>
+                        </text>
                         <text v-t="item.label" />
                     </view>
                 </template>
@@ -78,21 +78,22 @@
             <view class="info-section">
                 <view class="info-column">
                     <cwg-label-line-value :label="t('Label.Leverage')" :value="account.actualLeverage" />
-                    <cwg-label-line-value label="浮动盈/亏" :value="account.floatingPL" />
+                    <cwg-label-line-value :label="t('Documentary.console.item5')" :value="account.floatingPL" />
                     <cwg-label-line-value :label="t('Label.Balance')" :value="account.balanceWithSymbol" />
                 </view>
                 <view class="info-column">
                     <cwg-label-line-value :label="t('Label.Equity')" :value="account.equityWithSymbol" />
                     <cwg-label-line-value :label="t('Label.Credit')" :value="account.creditWithSymbol" />
-                    <cwg-label-line-value label="平台" :value="account.platform" />
+                    <cwg-label-line-value :label="t('Documentary.console.item3')" :value="account.platform" />
                 </view>
             </view>
             <!-- 额外操作行(服务器、登录、更改密码,折叠时隐藏) -->
             <view class="extra-actions">
                 <!-- 登录复制行 -->
                 <view class="copy-row">
-                    <span class="label">{{ account.platform }} 登陆</span>
-                    <span class="value">{{ account.login }}</span>
+                    <text class="label">{{ account.platform }}</text>
+                    <text class="label" v-t="'signin.title'" />
+                    <text class="value">{{ account.login }}</text>
                     <view class="copy-btn" @click="copy(account.login)">
                         <cwg-icon name="copy" :size="16" color="#2e3a47" />
                     </view>
@@ -100,10 +101,10 @@
 
                 <!-- 更改交易密码按钮 -->
                 <view class="change-password-btn" @click="handleAction('changePassword1')" v-if="!isDemo">
-                    <span class="btn-icon">
+                    <text class="btn-icon">
                         <cwg-icon name="crm-xg" :size="16" color="#2e3a47" />
-                    </span>
-                    更改交易密码
+                    </text>
+                    <text v-t="'vu.item3'" />
                 </view>
             </view>
         </view>
@@ -112,9 +113,9 @@
         <view class="notificators"></view>
         <TerminalDialog v-model:visible="terminalDialogVisible" />
         <TerminalChangePasswordDialog v-model:visible="terminalChangePasswordDialogVisible" :pwdType="pwdType"
-            :account="account" />
+            :account="account" :accountLabel="t('Documentary.tradingCenter.item29') + ' # '" />
         <TerminalInfoDialog v-model:visible="terminalInfoDialogVisible" :accountNumber="accountInfo.login"
-            :form="accountInfo" :fieldList="fieldList" />
+            :form="accountInfo" :fieldList="fieldList" :title="t('Documentary.TundManagement.item29')" :accountLabel="t('Documentary.tradingCenter.item29') + ' # '" />
     </view>
 </template>
 
@@ -151,7 +152,6 @@ export interface Account {
 }
 const isDemo = computed(() => accountInfo.value.listType == 'demo')
 const closeFunctionOpen = (code) => {
-    console.log(code, 121212);
     const closeFunctions = accountInfo.value.closeFunctions || ""
 
     if (closeFunctions == null || closeFunctions === "") {
@@ -175,14 +175,14 @@ const actionButtons = computed(() => [
     { key: 'transfer', label: 'Custom.Index.Transfer', icon: 'crm-transfer', color: '#2e3a47', primary: false, action: 'transfer', needDemo: isDemo.value, disabled: !(closeFunctionOpen('5') && closeFunctionOpen('6') && closeFunctionOpen('3')) }
 ])
 const fieldList = ref([
-    { label: '账户类型', key: 'nickname', copyable: false },
-    { label: t('Label.Leverage'), key: 'actualLeverage', copyable: false },
-    { label: '浮动盈/亏', key: 'floatingPL', copyable: false },
-    { label: t('Label.Balance'), key: 'balanceWithSymbol', copyable: false },
-    { label: t('Label.Equity'), key: 'equityWithSymbol', copyable: false },
-    { label: t('Label.Credit'), key: 'creditWithSymbol', copyable: false },
-    { label: '平台', key: 'platform', copyable: false },
-    { label: '账号', key: 'login', copyable: true }
+    { label: 'Custom.PaymentHistory.AccountType', key: 'nickname', copyable: false },
+    { label: 'Label.Leverage', key: 'actualLeverage', copyable: false },
+    { label: 'Documentary.console.item5', key: 'floatingPL', copyable: false },
+    { label: 'Label.Balance', key: 'balanceWithSymbol', copyable: false },
+    { label: 'Label.Equity', key: 'equityWithSymbol', copyable: false },
+    { label: 'Label.Credit', key: 'creditWithSymbol', copyable: false },
+    { label: 'Documentary.console.item3', key: 'platform', copyable: false },
+    { label: 'Documentary.console.item4', key: 'login', copyable: true }
 ])
 const nickName = ref(accountInfo.value.nickName)
 
@@ -261,7 +261,7 @@ const handleAction = (type: string) => {
     }
 };
 
-const customMenuList = computed(() => !isDemo.value ? [{ label: '修改交易密码', type: 'changePassword1' }, { label: '修改投资者密码', type: 'changePassword2' }, { label: '账户信息', type: 'info' }] : [{ label: '账户信息', type: 'info' }])
+const customMenuList = computed(() => !isDemo.value ? [{ label: t('vu.item3'), type: 'changePassword1' }, { label: t('vu.item4'), type: 'changePassword2' }, { label: t('Documentary.TundManagement.item29'), type: 'info' }] : [{ label: t('Documentary.TundManagement.item29'), type: 'info' }])
 const handleCustomClick = (item, index) => {
     handleAction(item.value.type)
 }
@@ -418,6 +418,7 @@ onBeforeUnmount(() => {
                     justify-content: center;
                     color: #2e3a47;
                     transition: background-color 0.2s;
+
                     &.primary {
                         background-color: var(--color-navy-700);
                         color: #fff;
@@ -562,7 +563,7 @@ onBeforeUnmount(() => {
 
             .label {
                 color: #6c8595;
-                min-width: px2rpx(70);
+                min-width: px2rpx(30);
             }
 
             .value {

+ 6 - 6
pages/customer/components/AccountList.vue

@@ -11,8 +11,8 @@
         </view>
         <view class="tabs-class"><cwg-tabs v-model:cativeIndex="cativeIndex" :tabs="tabs" /></view>
         <view v-if="accounts.length">
-            <AccountCard v-for="acc in accounts" :zhtype="cativeIndex" :key="acc.accountNumber" :account="acc" @action="handleAction"
-                @copy="handleCopy" @change-password="handleChangePassword" />
+            <AccountCard v-for="acc in accounts" :zhtype="cativeIndex" :key="acc.accountNumber" :account="acc"
+                @action="handleAction" @copy="handleCopy" @change-password="handleChangePassword" />
         </view>
         <cwg-empty-state v-else />
         <DeleteAccountDialogs ref="deleteAccountDialogRef" v-model:visible="deleteAccountDialogVisible" />
@@ -56,8 +56,8 @@ const typeMap = computed(() => ({
 }));
 const cativeIndex = ref(0)
 const tabs = computed(() => ([
-    { id: 'real', name: '真实' },
-    { id: 'demo', name: '模拟' }
+    { id: 'real', name: t('vu.item1') },
+    { id: 'demo', name: t('vu.item2') }
 ]))
 
 const tableRef = ref(null)
@@ -201,8 +201,8 @@ const accounts = computed(() =>
     AccountList.value && AccountList.value.length != 0 ? AccountList.value.map((acc, index) => {
         const currency = acc.currency || 'USD';
         const floating = acc.floating ?? 0;
-        let labels = ['真实', 'MT4', 'Standard'];
-        labels[0] = cativeIndex.value == 1 ? '模拟' : '真实';
+        let labels = [t('vu.item1'), 'MT4', 'Standard'];
+        labels[0] = cativeIndex.value == 1 ? t('vu.item2') : t('vu.item1');
         labels[1] = acc.platform || 'MT4';
         labels[2] = typeMap.value[acc.type];
         let nickname = typeMap.value[acc.type];

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

@@ -1,6 +1,6 @@
 <template>
     <cwg-popup :title="props.pwdType == 1 ? t('Custom.Settings.LoginPwd') : t('Custom.Settings.InvestorPwd')"
-        :visible="props.visible" :showFooters="false" @update:visible="$emit('update:visible', $event)">
+        :visible="props.visible" :showFooter="false" @update:visible="$emit('update:visible', $event)">
         <view class="popup-content">
             <text class="account-number">{{ accountLabel }} {{ account.login }}</text>
 

+ 0 - 13
pages/customer/components/TerminalInfoDialog.vue

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

+ 1 - 0
static/icons/crm-hd.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-award"><path d="M12 9m-6 0a6 6 0 1 0 12 0a6 6 0 1 0 -12 0"></path><path d="M12 15l3.4 5.89l1.598 -3.233l3.598 .232l-3.4 -5.889"></path><path d="M6.802 12l-3.4 5.89l3.598 -.233l1.598 3.232l3.4 -5.889"></path></svg>

+ 8 - 0
static/svg-icons-lib.js

@@ -143,6 +143,10 @@ const collections = {
         "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill=\"#22ac38\" d=\"M259.1 73.5c3-14.8 16.1-25.5 31.3-25.5h59.8c15.2 0 28.3 10.7 31.3 25.5l14.5 70c14.1 6 27.3 13.7 39.3 22.8l67.8-22.5c14.4-4.8 30.2 1.2 37.8 14.4l29.9 51.8c7.6 13.2 4.9 29.8-6.5 39.9L511 297.3c.9 7.4 1.3 15 1.3 22.7s-.5 15.3-1.3 22.7l53.4 47.5c11.4 10.1 14 26.8 6.5 39.9L541 481.9c-7.6 13.1-23.4 19.2-37.8 14.4l-67.8-22.5c-12.1 9.1-25.3 16.7-39.3 22.8l-14.4 69.9c-3.1 14.9-16.2 25.5-31.3 25.5h-59.8c-15.2 0-28.3-10.7-31.3-25.5l-14.4-69.9c-14.1-6-27.2-13.7-39.3-22.8l-68.1 22.5c-14.4 4.8-30.2-1.2-37.8-14.4l-29.9-51.8c-7.6-13.2-4.9-29.8 6.5-39.9l53.4-47.5c-.9-7.4-1.3-15-1.3-22.7s.5-15.3 1.3-22.7l-53.4-47.5c-11.4-10.1-14-26.8-6.5-39.9l29.9-51.8c7.6-13.2 23.4-19.2 37.8-14.4l67.8 22.5c12.1-9.1 25.3-16.7 39.3-22.8zM320.3 400c44.2-.2 79.9-36.1 79.7-80.3s-36.1-79.9-80.3-79.7-79.9 36.1-79.7 80.3 36.1 79.9 80.3 79.7\"/></svg>",
         2
       ],
+      "crm-hd": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"#22ac38\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"tabler-icon tabler-icon-award\" viewBox=\"0 0 24 24\"><path d=\"M6 9a6 6 0 1 0 12 0A6 6 0 1 0 6 9\"/><path d=\"m12 15 3.4 5.89 1.598-3.233 3.598.232-3.4-5.889M6.802 12l-3.4 5.89L7 17.657l1.598 3.232 3.4-5.889\"/></svg>",
+        2
+      ],
       "crm-headset": [
         "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill=\"#22ac38\" d=\"M320 128c-79 0-144.7 57.3-157.7 132.7 9.3-3 19.3-4.7 29.7-4.7h16c26.5 0 48 21.5 48 48v96c0 26.5-21.5 48-48 48h-16c-53 0-96-43-96-96v-64C96 164.3 196.3 64 320 64s224 100.3 224 224v168.1c0 66.3-53.8 120-120.1 120L336 576h-32c-26.5 0-48-21.5-48-48s21.5-48 48-48h32c26.5 0 48 21.5 48 48h40c39.8 0 72-32.2 72-72v-20.9c-14.1 8.2-30.5 12.8-48 12.8h-16c-26.5 0-48-21.5-48-48v-96c0-26.5 21.5-48 48-48h16c10.4 0 20.3 1.6 29.7 4.7-13-75.3-78.6-132.7-157.7-132.7z\"/></svg>",
         2
@@ -184,6 +188,10 @@ const collections = {
         "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill=\"#22ac38\" d=\"M64 480V184c0-13.3 10.7-24 24-24s24 10.7 24 24v288c0 13.3 10.7 24 24 24s24-10.7 24-24V160c0-35.3 28.7-64 64-64h288c35.3 0 64 28.7 64 64v320c0 35.3-28.7 64-64 64H128c-35.3 0-64-28.7-64-64m160-288v64c0 17.7 14.3 32 32 32h64c17.7 0 32-14.3 32-32v-64c0-17.7-14.3-32-32-32h-64c-17.7 0-32 14.3-32 32m24 240c-13.3 0-24 10.7-24 24s10.7 24 24 24h240c13.3 0 24-10.7 24-24s-10.7-24-24-24zm-24-72c0 13.3 10.7 24 24 24h240c13.3 0 24-10.7 24-24s-10.7-24-24-24H248c-13.3 0-24 10.7-24 24m200-120c-13.3 0-24 10.7-24 24s10.7 24 24 24h64c13.3 0 24-10.7 24-24s-10.7-24-24-24z\"/></svg>",
         2
       ],
+      "crm-option": [
+        "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\"><!--!Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2026 Fonticons, Inc.--><path fill=\"#22ac38\" d=\"M96 128c-17.7 0-32 14.3-32 32s14.3 32 32 32h86.7c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H329.3C317 99.7 288.8 80 256 80s-61 19.7-73.3 48zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32h246.7c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48H544c17.7 0 32-14.3 32-32s-14.3-32-32-32h-54.7c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48zm0 160c-17.7 0-32 14.3-32 32s14.3 32 32 32h54.7c12.3 28.3 40.5 48 73.3 48s61-19.7 73.3-48H544c17.7 0 32-14.3 32-32s-14.3-32-32-32H297.3c-12.3-28.3-40.5-48-73.3-48s-61 19.7-73.3 48z\"/></svg>",
+        2
+      ],
       "crm-payment": [
         "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" stroke=\"#22ac38\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" class=\"tabler-icon tabler-icon-wallet\" viewBox=\"0 0 24 24\"><path d=\"M17 8V5a1 1 0 0 0-1-1H6a2 2 0 0 0 0 4h12a1 1 0 0 1 1 1v3m0 4v3a1 1 0 0 1-1 1H6a2 2 0 0 1-2-2V6\"/><path d=\"M20 12v4h-4a2 2 0 0 1 0-4z\"/></svg>",
         2