Browse Source

feat: 完善多语言支持,添加多个组件的国际化文本及表单验证提示(收款基本完成)

milestone-20251209-多语言二期^2
zhangrenyuan 1 month ago
parent
commit
820d009339
  1. 8
      src/components/MoneyManage/CurrencySelect.vue
  2. 135
      src/components/MoneyManage/ProductSelect.vue
  3. 125
      src/components/locales/lang/en.js
  4. 72
      src/components/locales/lang/zh-CN.js
  5. 14
      src/views/moneyManage/receiveDetail/receiveHead.vue
  6. 165
      src/views/moneyManage/receiveDetail/utils/recriveFormRules.js

8
src/components/MoneyManage/CurrencySelect.vue

@ -31,6 +31,12 @@
<script setup> <script setup>
import { ref, computed, watchEffect, onMounted, watch } from 'vue'; import { ref, computed, watchEffect, onMounted, watch } from 'vue';
//
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const searchData = ref('') const searchData = ref('')
const isOpen = ref(false) const isOpen = ref(false)
@ -45,7 +51,7 @@ const props = defineProps({
}, },
placeholder: { placeholder: {
type: String, type: String,
default: '请选择支付方式'
default: null
}, },
modelValue: { modelValue: {
type: String, type: String,

135
src/components/MoneyManage/ProductSelect.vue

@ -14,7 +14,7 @@
<div class="menu" v-show="isOpen"> <div class="menu" v-show="isOpen">
<div class="coinselect" @click="coinhandelMenu" :class="{ 'active': coinisOpen }"> <div class="coinselect" @click="coinhandelMenu" :class="{ 'active': coinisOpen }">
<div class="cointxt"> <div class="cointxt">
金币产品
{{ t('cash.goldProduct') }}
</div> </div>
<span class="coin-arrow"> <span class="coin-arrow">
<el-icon> <el-icon>
@ -23,12 +23,12 @@
</span> </span>
</div> </div>
<div class="coinoption" v-show="coinisOpen"> <div class="coinoption" v-show="coinisOpen">
<el-radio v-model="selectedValue" label="金币充值" size="large" />
<el-radio v-model="selectedValue" :label="t('cash.coinRecharge')" size="large" />
</div> </div>
<div class="product"> <div class="product">
<div class="coinselect" @click="producthandelMenu" :class="{ 'active': productisOpen }"> <div class="coinselect" @click="producthandelMenu" :class="{ 'active': productisOpen }">
<div class="cointxt"> <div class="cointxt">
软件产品
{{ t('cash.softwareProduct') }}
</div> </div>
<span class="coin-arrow"> <span class="coin-arrow">
<el-icon> <el-icon>
@ -38,7 +38,7 @@
</div> </div>
<div class="productOption" v-show="productisOpen"> <div class="productOption" v-show="productisOpen">
<hr class="line"> <hr class="line">
<div class="checktxt">软件</div>
<div class="checktxt">{{ t('cash.software') }}</div>
<div class="marketprodut"> <div class="marketprodut">
<div class="fistlevel" v-for="(menu, index) in menuData" :key="menu.name" @click="clickmenu(index)" <div class="fistlevel" v-for="(menu, index) in menuData" :key="menu.name" @click="clickmenu(index)"
:class="{ 'selected': menu.options.includes(selectedValue) }"> :class="{ 'selected': menu.options.includes(selectedValue) }">
@ -61,7 +61,7 @@
</div> </div>
<hr class="line"> <hr class="line">
<div class="ai"> <div class="ai">
<div class="checktxt">AI机构探测神器</div>
<div class="checktxt">{{ t('cash.aiService.aiDetectionTool') }}</div>
<hr class="line"> <hr class="line">
<el-radio-group v-model="selectedValue"> <el-radio-group v-model="selectedValue">
<el-radio v-for="ai in AIProduct" :key="ai" :label="ai" :value="ai"> <el-radio v-for="ai in AIProduct" :key="ai" :label="ai" :value="ai">
@ -70,7 +70,7 @@
</el-radio-group> </el-radio-group>
</div> </div>
<div class="ai"> <div class="ai">
<div class="checktxt">超级机构探测神器</div>
<div class="checktxt">{{ t('cash.aiService.superDetectionTool') }}</div>
<hr class="line"> <hr class="line">
<el-radio-group v-model="selectedValue"> <el-radio-group v-model="selectedValue">
<el-radio v-for="ai in superProduct" :key="ai" :label="ai" :value="ai"> <el-radio v-for="ai in superProduct" :key="ai" :label="ai" :value="ai">
@ -79,7 +79,7 @@
</el-radio-group> </el-radio-group>
</div> </div>
<div class="ai"> <div class="ai">
<div class="checktxt">其他</div>
<div class="checktxt">{{ t('cash.other') }}</div>
<hr class="line"> <hr class="line">
<el-radio-group v-model="selectedValue"> <el-radio-group v-model="selectedValue">
<el-radio v-for="ai in InfoFee" :key="ai" :label="ai" :value="ai"> <el-radio v-for="ai in InfoFee" :key="ai" :label="ai" :value="ai">
@ -95,7 +95,10 @@
<script setup> <script setup>
import { ref, watch, onMounted, computed, onUnmounted, nextTick } from 'vue'; import { ref, watch, onMounted, computed, onUnmounted, nextTick } from 'vue';
import { ArrowDown } from '@element-plus/icons-vue'; import { ArrowDown } from '@element-plus/icons-vue';
//
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
const searchData = ref('') const searchData = ref('')
const isOpen = ref(false) const isOpen = ref(false)
@ -103,7 +106,7 @@ const coinisOpen = ref(false)
const productisOpen = ref(false) const productisOpen = ref(false)
const selectedItem = ref('') const selectedItem = ref('')
const dropdownRef = ref(null) const dropdownRef = ref(null)
const placeholder = ref('请选择产品')
const placeholder = ref(t('common_add.productNamePlaceholder'))
const handelMenu = () => { const handelMenu = () => {
isOpen.value = !isOpen.value isOpen.value = !isOpen.value
@ -135,53 +138,115 @@ watch(selectedValue, (newVal) => {
}); });
const AIProduct = ['AI机构追踪', 'AI机构出击', 'AI机构资金', 'AI机构活跃度','AI机构探测神器']
const superProduct = ['超级机构透视', '超级机构伏击', '超级机构猎杀', '超级机构脉搏', '超级机构罗盘','超级机构探测神器']
const InfoFee = ['静态信息费', '博股会员','HC信息费']
const AIProduct = [
t('cash.aiService.aiTracking'),
t('cash.aiService.aiAttack'),
t('cash.aiService.aiFunds'),
t('cash.aiService.aiActivity'),
t('cash.aiService.aiDetectionTool')
]
const superProduct = [
t('cash.aiService.superPerspective'),
t('cash.aiService.superAmbush'),
t('cash.aiService.superHunting'),
t('cash.aiService.superPulse'),
t('cash.aiService.superCompass'),
t('cash.aiService.superDetectionTool')
]
const InfoFee = [
t('cash.staticInfoFee'),
t('cash.BGmember'),
t('cash.HC')
]
// 使menuData
const menuData = [ const menuData = [
{ {
name: '美股',
options: ['美股软件', '美股金卡', '美股套餐']
name: t('cash.softwareMenu.usStock'),
options: [
t('cash.softwareMenu.usStockSoftware'),
t('cash.softwareMenu.usStockGoldCard'),
t('cash.softwareMenu.usStockPackage')
]
}, },
{ {
name: '港股',
options: ['港股软件', '港股金卡', '港股套餐']
name: t('cash.softwareMenu.hkStock'),
options: [
t('cash.softwareMenu.hkStockSoftware'),
t('cash.softwareMenu.hkStockGoldCard'),
t('cash.softwareMenu.hkStockPackage')
]
}, },
{ {
name: 'A股',
options: ['A股软件', 'A股金卡', 'A股套餐']
name: t('cash.softwareMenu.aStock'),
options: [
t('cash.softwareMenu.aStockSoftware'),
t('cash.softwareMenu.aStockGoldCard'),
t('cash.softwareMenu.aStockPackage')
]
}, },
{ {
name: '新加坡股',
options: ['新加坡股软件', '新加坡股金卡', '新加坡股套餐']
name: t('cash.softwareMenu.singaporeStock'),
options: [
t('cash.softwareMenu.singaporeStockSoftware'),
t('cash.softwareMenu.singaporeStockGoldCard'),
t('cash.softwareMenu.singaporeStockPackage')
]
}, },
{ {
name: '马股',
options: ['马股软件', '马股金卡', '马股套餐']
name: t('cash.softwareMenu.malaysiaStock'),
options: [
t('cash.softwareMenu.malaysiaStockSoftware'),
t('cash.softwareMenu.malaysiaStockGoldCard'),
t('cash.softwareMenu.malaysiaStockPackage')
]
}, },
{ {
name: '日本股',
options: ['日本股软件', '日本股金卡', '日本股套餐']
name: t('cash.softwareMenu.japanStock'),
options: [
t('cash.softwareMenu.japanStockSoftware'),
t('cash.softwareMenu.japanStockGoldCard'),
t('cash.softwareMenu.japanStockPackage')
]
}, },
{ {
name: '泰股',
options: ['泰股软件', '泰股金卡', '泰股套餐']
name: t('cash.softwareMenu.thailandStock'),
options: [
t('cash.softwareMenu.thailandStockSoftware'),
t('cash.softwareMenu.thailandStockGoldCard'),
t('cash.softwareMenu.thailandStockPackage')
]
}, },
{ {
name: '越南股',
options: ['越南股软件', '越南股金卡', '越南股套餐']
name: t('cash.softwareMenu.vietnamStock'),
options: [
t('cash.softwareMenu.vietnamStockSoftware'),
t('cash.softwareMenu.vietnamStockGoldCard'),
t('cash.softwareMenu.vietnamStockPackage')
]
}, },
{ {
name: '印尼股',
options: ['印尼股软件', '印尼股金卡', '印尼股套餐']
name: t('cash.softwareMenu.indonesiaStock'),
options: [
t('cash.softwareMenu.indonesiaStockSoftware'),
t('cash.softwareMenu.indonesiaStockGoldCard'),
t('cash.softwareMenu.indonesiaStockPackage')
]
}, },
{ {
name: '韩国股',
options: ['韩国股软件', '韩国股金卡', '韩国股套餐']
name: t('cash.softwareMenu.koreaStock'),
options: [
t('cash.softwareMenu.koreaStockSoftware'),
t('cash.softwareMenu.koreaStockGoldCard'),
t('cash.softwareMenu.koreaStockPackage')
]
}, },
{ {
name: '台湾股',
options: ['台湾股软件', '台湾股金卡', '台湾股套餐']
name: t('cash.softwareMenu.taiwanStock'),
options: [
t('cash.softwareMenu.taiwanStockSoftware'),
t('cash.softwareMenu.taiwanStockGoldCard'),
t('cash.softwareMenu.taiwanStockPackage')
]
} }
]; ];
// //
@ -325,7 +390,7 @@ defineExpose({ resetSelect });
z-index: 100; z-index: 100;
.coinselect { .coinselect {
width: 100px;
width: 126px;
height: 20px; height: 20px;
border: 1px solid #175BE5; border: 1px solid #175BE5;
padding: 5px 0 5px 12px; padding: 5px 0 5px 12px;
@ -333,7 +398,7 @@ defineExpose({ resetSelect });
border-radius: 5px; border-radius: 5px;
.cointxt { .cointxt {
width: 70px;
width: 100px;
height: 100%; height: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;

125
src/components/locales/lang/en.js

@ -436,4 +436,129 @@ export default {
refund: 'Refund', refund: 'Refund',
}, },
}, },
cash: {
// 收款管理
receiveCashDataTitle: "Data Desc",
receiveCashDataContent: "All cash receipt pages: Orders sorted by payment time desc by default",
currency: {
usd: "US Dollar(USD)",
hkd: "Hong Kong Dollar(HKD)",
sgd: "Singapore Dollar(SGD)",
myr: "Malaysian Ringgit(MYR)",
thb: "Thai Baht(THB)",
cad: "Canadian Dollar(CAD)",
vnd: "Vietnamese Dong(VDN)",
krw: "South Korean Won(KRW)",
},
// 收款方式
payMethods: {
bankTransfer: 'Bank Transfer',
cash: 'Cash',
check: 'Check',
card: 'Card Payment',
grabpay: 'GrabPay',
nets: 'NETS',
paypal: 'PayPal',
stripe: 'Stripe (Link)',
ipay88: 'iPay88 (Link)',
paymentAsia: 'PaymentAsia (Link)',
transfer: "E-Transfer",
},
unit: "Unit",
year: "Year",
month: "Month",
// AI Services
aiService: {
aiTracking: "AI Org Track",
aiAttack: "AI Org Attack",
aiFunds: "AI Org Funds",
aiActivity: "AI Org Activity",
superPerspective: "Super Org View",
superAmbush: "Super Org Ambush",
superHunting: "Super Org Hunt",
superPulse: "Super Org Pulse",
superCompass: "Super Org Compass",
hcInfoFee: "HC Info Fee",
aiDetectionTool: "AI Org Detector",
superDetectionTool: "Super Org Detector"
},
// Markets
markets: {
HongKong: "Hong Kong",
Malaysia: "Malaysia",
Canada: "Canada",
Singapore: "Singapore",
Thailand: "Thailand",
VietnamHCM: "Vietnam HCM"
},
coinRecharge: "Coin Recharge",
staticInfoFee: "Static Fee",
BGmember: "BG Member",
HC: "HC Fee",
goldProduct: "Gold Product",
softwareProduct: "SoftwareProduct",
software: "Software",
other: "Other",
// Software Menu (for ProductSelect component)
softwareMenu: {
// Market Names
usStock: "US Stock",
hkStock: "HK Stock",
aStock: "A Stock",
singaporeStock: "SG Stock",
malaysiaStock: "MY Stock",
japanStock: "JP Stock",
thailandStock: "TH Stock",
vietnamStock: "VN Stock",
indonesiaStock: "ID Stock",
koreaStock: "KR Stock",
taiwanStock: "TW Stock",
// Software Types
usStockSoftware: "US Stock SW",
usStockGoldCard: "US Stock Gold",
usStockPackage: "US Stock Pack",
hkStockSoftware: "HK Stock SW",
hkStockGoldCard: "HK Stock Gold",
hkStockPackage: "HK Stock Pack",
aStockSoftware: "A Stock SW",
aStockGoldCard: "A Stock Gold",
aStockPackage: "A Stock Pack",
singaporeStockSoftware: "SG Stock SW",
singaporeStockGoldCard: "SG Stock Gold",
singaporeStockPackage: "SG Stock Pack",
malaysiaStockSoftware: "MY Stock SW",
malaysiaStockGoldCard: "MY Stock Gold",
malaysiaStockPackage: "MY Stock Pack",
japanStockSoftware: "JP Stock SW",
japanStockGoldCard: "JP Stock Gold",
japanStockPackage: "JP Stock Pack",
thailandStockSoftware: "TH Stock SW",
thailandStockGoldCard: "TH Stock Gold",
thailandStockPackage: "TH Stock Pack",
vietnamStockSoftware: "VN Stock SW",
vietnamStockGoldCard: "VN Stock Gold",
vietnamStockPackage: "VN Stock Pack",
indonesiaStockSoftware: "ID Stock SW",
indonesiaStockGoldCard: "ID Stock Gold",
indonesiaStockPackage: "ID Stock Pack",
koreaStockSoftware: "KR Stock SW",
koreaStockGoldCard: "KR Stock Gold",
koreaStockPackage: "KR Stock Pack",
taiwanStockSoftware: "TW Stock SW",
taiwanStockGoldCard: "TW Stock Gold",
taiwanStockPackage: "TW Stock Pack"
},
},
} }

72
src/components/locales/lang/zh-CN.js

@ -181,6 +181,7 @@ export default {
checkNumUnit: "请选择产品数量单位", checkNumUnit: "请选择产品数量单位",
productNumError: "产品数量必须为正整数", productNumError: "产品数量必须为正整数",
checkFormInfoSubmit: "请完善表单信息后提交", checkFormInfoSubmit: "请完善表单信息后提交",
checkPayAmountFormat: "请检查到账金额格式",
// 校验提示(error) // 校验提示(error)
noEmptyJwcode: "精网号不能为空", noEmptyJwcode: "精网号不能为空",
noEmptySumGold: "消耗金币总数不能为空", noEmptySumGold: "消耗金币总数不能为空",
@ -198,6 +199,10 @@ export default {
limitTwoDecimal: "小数位数不能超过两位", limitTwoDecimal: "小数位数不能超过两位",
limitZero: "输入金额不能小于0", limitZero: "输入金额不能小于0",
limitPositiveNumber: "请输入大于0的正数(可包含最多两位小数)", limitPositiveNumber: "请输入大于0的正数(可包含最多两位小数)",
limitPositiveNumber2: "请输入有效的金额(最多2位小数)",
limitPayAmountZero: "付款金额不能为0",
limitPayAmountMax: "付款金额不能超过9999999",
limitPayAmountFormat: "整数部分最多6位,小数部分最多2位",
limitJwcodeNine: "精网号必须为数字且不超过九位", limitJwcodeNine: "精网号必须为数字且不超过九位",
limitBalance: "所填金额大于该类金币余额", limitBalance: "所填金额大于该类金币余额",
limitRefundAmount: "退款金额不能大于订单金额", limitRefundAmount: "退款金额不能大于订单金额",
@ -380,6 +385,7 @@ export default {
currencyName: "货币名称", currencyName: "货币名称",
goodsName: "商品名称", goodsName: "商品名称",
productName: "产品名称", productName: "产品名称",
productNamePlaceholder: "请选择产品名称",
productNum: "产品数量", productNum: "产品数量",
productNumPlaceholder: "请输入产品数量", productNumPlaceholder: "请输入产品数量",
numUnit: "单位", numUnit: "单位",
@ -810,5 +816,71 @@ export default {
}, },
coinRecharge: "金币充值", coinRecharge: "金币充值",
staticInfoFee: "静态信息费", staticInfoFee: "静态信息费",
BGmember: "博股会员",
HC: "HC信息费",
goldProduct: "金币产品",
softwareProduct: "软件产品",
software: "软件",
other: "其他",
// 软件菜单多语言字段
softwareMenu: {
// 市场名称
usStock: "美股",
hkStock: "港股",
aStock: "A股",
singaporeStock: "新加坡股",
malaysiaStock: "马股",
japanStock: "日本股",
thailandStock: "泰股",
vietnamStock: "越南股",
indonesiaStock: "印尼股",
koreaStock: "韩国股",
taiwanStock: "台湾股",
// 软件类型
usStockSoftware: "美股软件",
usStockGoldCard: "美股金卡",
usStockPackage: "美股套餐",
hkStockSoftware: "港股软件",
hkStockGoldCard: "港股金卡",
hkStockPackage: "港股套餐",
aStockSoftware: "A股软件",
aStockGoldCard: "A股金卡",
aStockPackage: "A股套餐",
singaporeStockSoftware: "新加坡股软件",
singaporeStockGoldCard: "新加坡股金卡",
singaporeStockPackage: "新加坡股套餐",
malaysiaStockSoftware: "马股软件",
malaysiaStockGoldCard: "马股金卡",
malaysiaStockPackage: "马股套餐",
japanStockSoftware: "日本股软件",
japanStockGoldCard: "日本股金卡",
japanStockPackage: "日本股套餐",
thailandStockSoftware: "泰股软件",
thailandStockGoldCard: "泰股金卡",
thailandStockPackage: "泰股套餐",
vietnamStockSoftware: "越南股软件",
vietnamStockGoldCard: "越南股金卡",
vietnamStockPackage: "越南股套餐",
indonesiaStockSoftware: "印尼股软件",
indonesiaStockGoldCard: "印尼股金卡",
indonesiaStockPackage: "印尼股套餐",
koreaStockSoftware: "韩国股软件",
koreaStockGoldCard: "韩国股金卡",
koreaStockPackage: "韩国股套餐",
taiwanStockSoftware: "台湾股软件",
taiwanStockGoldCard: "台湾股金卡",
taiwanStockPackage: "台湾股套餐",
},
}, },
}; };

14
src/views/moneyManage/receiveDetail/receiveHead.vue

@ -155,10 +155,10 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="submitterName" :label="t('common.submitter')" width="150px"
<el-table-column prop="submitterName" :label="t('common_list.submitter')" width="150px"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<!-- 总部财务显示审核人已通过/已驳回/已完成标签页 --> <!-- 总部财务显示审核人已通过/已驳回/已完成标签页 -->
<el-table-column prop="auditName" :label="t('common.approver')"
<el-table-column prop="auditName" :label="t('common_list.approver')"
v-if="activeTab == 'pass' || activeTab == 'reject' || activeTab == 'done'" width="150px" v-if="activeTab == 'pass' || activeTab == 'reject' || activeTab == 'done'" width="150px"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column prop="receivedTime" :label="t('common_list.receiveTime')" <el-table-column prop="receivedTime" :label="t('common_list.receiveTime')"
@ -325,14 +325,14 @@
<CurrencySelect v-model="editFormData.receivedCurrency" :items="customOptions" <CurrencySelect v-model="editFormData.receivedCurrency" :items="customOptions"
:placeholder="t('common_add.receiveCurrencyPlaceholder')" /> :placeholder="t('common_add.receiveCurrencyPlaceholder')" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.receivedAmount')" prop="receivedAmount">
<el-input v-model="editFormData.receivedAmount" :placeholder="t('common_add.receivedAmountPlaceholder')" type="number" />
<el-form-item :label="t('common_add.receiveAmount')" prop="receivedAmount">
<el-input v-model="editFormData.receivedAmount" :placeholder="t('common_add.receiveAmountPlaceholder')" type="number" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.fee')" prop="handlingCharge"> <el-form-item :label="t('common_add.fee')" prop="handlingCharge">
<el-input v-model="editFormData.handlingCharge" :placeholder="t('common_add.feePlaceholder')" type="number" /> <el-input v-model="editFormData.handlingCharge" :placeholder="t('common_add.feePlaceholder')" type="number" />
</el-form-item> </el-form-item>
<el-form-item :label="t('common_add.receivedTime')" required>
<el-date-picker type="datetime" v-model="editFormData.receivedTime" :placeholder="t('common_add.receivedTimePlaceholder')" />
<el-form-item :label="t('common_add.receiveTime')" required>
<el-date-picker type="datetime" v-model="editFormData.receivedTime" :placeholder="t('common_add.receiveTimePlaceholder')" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<span class="editBtns"> <span class="editBtns">
@ -744,7 +744,7 @@ const paytypeList = ref([
t('cash.payMethods.cash'), // t('cash.payMethods.cash'), //
t('cash.payMethods.check') // t('cash.payMethods.check') //
]) ])
const paytypeOptions = ref([...paytypeList]);
const paytypeOptions = ref([...paytypeList.value]);
// ===================== 2. ===================== // ===================== 2. =====================

165
src/views/moneyManage/receiveDetail/utils/recriveFormRules.js

@ -1,84 +1,89 @@
export const addFormRule = {
// 精网号:6-10位纯数字
jwcode: [
{ required: true, message: '请输入精网号', trigger: 'blur' },
{ pattern: /^\d{6,10}$/, message: '请检查精网号格式', trigger: 'blur' }
],
// 客户姓名:必填
name: [
{ required: true, message: '请输入客户姓名', trigger: 'blur' }
],
// 所属地区:必填
market: [
{ required: true, message: '请选择所属地区', trigger: 'blur' }
],
// 活动名称:必填 + 长度小于30
activity: [
{ required: true, message: '请输入活动名称', trigger: 'blur' },
],
// 产品名称:必填
goodsName: [
{ required: true, message: '请选择产品名称', trigger: 'change' }
],
// 产品数量:0-100纯数字
goodNum: [
{ required: true, message: '请输入产品数量', trigger: 'blur' },
],
// 付款币种:必填
paymentCurrency: [
{ required: true, message: '请选择付款币种', trigger: 'change' }
],
// 付款金额:小于8位纯数字 + 不为0
paymentAmount: [
{ required: true, message: '请输入付款金额', trigger: 'blur' },
{
validator: (rule, value, callback) => {
// 匹配非负数字(支持整数或最多2位小数)
const reg = /^\d+(\.\d{1,2})?$/;
if (!reg.test(value)) {
callback(new Error('请输入有效的金额(最多2位小数)'));
} else {
const num = Number(value);
if (num === 0) {
callback(new Error('付款金额不能为0'));
} else if (num > 9999999) { // 限制最大值为9999999(7位整数)
callback(new Error('付款金额不能超过9999999'));
export const addFormRule = (t) => {
return {
// 精网号:6-10位纯数字
jwcode: [
{ required: true, message: t('common_add.jwcodePlaceholder'), trigger: 'blur' },
{ pattern: /^\d{6,10}$/, message: t('elmessage.checkJwcodeFormat'), trigger: 'blur' }
],
// 客户姓名:必填
name: [
{ required: true, message: t('common_add.customerNamePlaceholder'), trigger: 'blur' }
],
// 所属地区:必填
market: [
{ required: true, message: t('common_add.marketPlaceholder'), trigger: 'blur' }
],
// 活动名称:必填
activity: [
{ required: true, message: t('common_add.activityPlaceholder'), trigger: 'blur' },
],
// 产品名称:必填
goodsName: [
{ required: true, message: t('common_add.productNamePlaceholder'), trigger: 'change' }
],
// 产品数量:必填
goodNum: [
{ required: true, message: t('common_add.productNumPlaceholder'), trigger: 'blur' },
],
// 付款币种:必填
paymentCurrency: [
{ required: true, message: t('common_add.payCurrencyPlaceholder'), trigger: 'change' }
],
// 付款金额:必填 + 验证
paymentAmount: [
{ required: true, message: t('common_add.payAmountPlaceholder'), trigger: 'blur' },
{
validator: (rule, value, callback) => {
// 匹配非负数字(支持整数或最多2位小数)
const reg = /^\d+(\.\d{1,2})?$/;
if (!reg.test(value)) {
callback(new Error(t('elmessage.limitPositiveNumber2')));
} else { } else {
callback();
const num = Number(value);
if (num === 0) {
callback(new Error(t('elmessage.limitPayAmountZero')));
} else if (num > 9999999) { // 限制最大值为9999999(7位整数)
callback(new Error(t('elmessage.limitPayAmountMax')));
} else {
callback();
}
} }
}
},
trigger: 'blur'
}
],
// 支付方式:必填
payType: [
{ required: true, message: '请选择支付方式', trigger: 'change' }
],
// 到账地区:必填
receivedMarket: [
{ required: true, message: '请选择到账地区', trigger: 'change' }
],
// 付款时间:必填
payTime: [
{ required: true, message: '请选择付款时间', trigger: 'change' }
]
},
trigger: 'blur'
}
],
// 支付方式:必填
payType: [
{ required: true, message: t('common_add.payMethodPlaceholder'), trigger: 'change' }
],
// 到账地区:必填
receivedMarket: [
{ required: true, message: t('common_add.receiveAreaPlaceholder'), trigger: 'change' }
],
// 付款时间:必填
payTime: [
{ required: true, message: t('common_add.payTimePlaceholder'), trigger: 'change' }
]
};
}; };
export const editFormRule = {
// 到账金额:正数,整数部分最多6位,小数部分最多2位(支持纯小数如 0.1、0.99)
receivedAmount: [
{
pattern: /^(0\.\d{1,2}|[1-9]\d{0,5}(\.\d{1,2})?)$/, // 修正:添加 / 包裹正则
message: '请检查到账金额格式',
trigger: 'blur'
}
],
// 手续费:正数,整数部分最多6位,小数部分最多2位(不支持纯0开头的小数如 0.1,需从1开始)
handlingCharge: [
{
pattern: /^\d{1,6}(\.\d{1,2})?$/, // 注意:此正则允许 0 开头(如 0123 不符合整数规范)
message: '整数部分最多6位,小数部分最多2位',
trigger: 'blur'
}
],
export const editFormRule = (t) => {
return {
// 到账金额:正数,整数部分最多6位,小数部分最多2位(支持纯小数如 0.1、0.99)
receivedAmount: [
{
pattern: /^(0\.\d{1,2}|[1-9]\d{0,5}(\.\d{1,2})?)$/, // 修正:添加 / 包裹正则
message: t('elmessage.checkPayAmountFormat'),
trigger: 'blur'
}
],
// 手续费:正数,整数部分最多6位,小数部分最多2位(不支持纯0开头的小数如 0.1,需从1开始)
handlingCharge: [
{
pattern: /^\d{1,6}(\.\d{1,2})?$/, // 注意:此正则允许 0 开头(如 0123 不符合整数规范)
message: t('elmessage.limitPayAmountFormat'),
trigger: 'blur'
}
],
};
}; };
Loading…
Cancel
Save