所有表单-创建中英双语对照

This commit is contained in:
2026-03-17 12:08:09 +08:00
parent c790f74905
commit 216d3ac8fe
23 changed files with 537 additions and 184 deletions

View File

@@ -1,17 +1,17 @@
<template>
<el-dialog
v-model="visible"
title="玩家钱包操作"
:title="$t('page.form.walletTitle')"
width="480px"
align-center
:close-on-click-modal="false"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
<el-form-item label="玩家">
<el-form-item :label="$t('page.form.walletPlayer')">
<el-input :model-value="player?.username" disabled placeholder="-" />
</el-form-item>
<el-form-item label="钱包余额">
<el-form-item :label="$t('page.form.walletBalance')">
<el-input-number
:model-value="walletBalance"
disabled
@@ -20,36 +20,36 @@
style="width: 100%"
/>
</el-form-item>
<el-form-item label="操作类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择" clearable style="width: 100%">
<el-option label="加点" :value="3" />
<el-option label="扣点" :value="4" />
<el-form-item :label="$t('page.form.operationType')" prop="type">
<el-select v-model="formData.type" :placeholder="$t('form.placeholderSelect')" clearable style="width: 100%">
<el-option :label="$t('page.form.typeAdd')" :value="3" />
<el-option :label="$t('page.form.typeSub')" :value="4" />
</el-select>
</el-form-item>
<el-form-item label="平台币变动" prop="coin">
<el-form-item :label="$t('page.form.coinChange')" prop="coin">
<el-input-number
v-model="formData.coin"
:min="0.01"
:precision="2"
placeholder="正数,扣点时不能超过余额"
:placeholder="$t('page.form.placeholderCoinChange')"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="$t('form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="2"
placeholder="选填,不填则按类型自动填写"
:placeholder="$t('page.form.placeholderRemarkOptional')"
maxlength="500"
show-word-limit
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" :loading="submitting" @click="handleSubmit">确定</el-button>
<el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" :loading="submitting" @click="handleSubmit">{{ $t('common.confirm') }}</el-button>
</template>
</el-dialog>
</template>
@@ -58,6 +58,9 @@
import walletRecordApi from '../../../api/player_wallet_record/index'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
interface PlayerRow {
id: number
@@ -95,19 +98,19 @@
return c != null ? Number(c) : 0
})
const rules = reactive<FormRules>({
type: [{ required: true, message: '请选择操作类型', trigger: 'change' }],
const rules = computed<FormRules>(() => ({
type: [{ required: true, message: t('page.form.ruleSelectType'), trigger: 'change' }],
coin: [
{ required: true, message: '请输入平台币变动', trigger: 'blur' },
{ required: true, message: t('page.form.ruleEnterCoin'), trigger: 'blur' },
{
validator: (_rule, value, callback) => {
const n = Number(value)
if (Number.isNaN(n) || n <= 0) {
callback(new Error('平台币变动必须大于 0'))
callback(new Error(t('page.form.ruleCoinPositive')))
return
}
if (formData.type === 4 && n > walletBalance.value) {
callback(new Error('扣点不能超过当前余额'))
callback(new Error(t('page.form.ruleDeductExceed')))
return
}
callback()
@@ -115,7 +118,7 @@
trigger: 'blur'
}
]
})
}))
const initialFormData = {
type: null as 3 | 4 | null,
@@ -146,11 +149,11 @@
await formRef.value.validate()
const coin = Number(formData.coin) || 0
if (coin <= 0) {
ElMessage.warning('平台币变动必须大于 0')
ElMessage.warning(t('page.form.ruleCoinPositive'))
return
}
if (formData.type === 4 && coin > walletBalance.value) {
ElMessage.warning('扣点不能超过当前余额')
ElMessage.warning(t('page.form.ruleDeductExceed'))
return
}
submitting.value = true
@@ -160,7 +163,7 @@
coin,
remark: formData.remark?.trim() || undefined
})
ElMessage.success('操作成功')
ElMessage.success(t('page.form.operateSuccess'))
emit('success')
handleClose()
} catch (e) {

View File

@@ -1,43 +1,43 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增大富翁-玩家' : '编辑大富翁-玩家'"
:title="dialogType === 'add' ? $t('page.form.dialogTitleAdd') : $t('page.form.dialogTitleEdit')"
width="600px"
align-center
:close-on-click-modal="false"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
<el-form-item label="用户名" prop="username">
<el-input v-model="formData.username" placeholder="请输入用户名" />
<el-form-item :label="$t('page.form.username')" prop="username">
<el-input v-model="formData.username" :placeholder="$t('page.form.placeholderUsername')" />
</el-form-item>
<el-form-item label="昵称" prop="name">
<el-input v-model="formData.name" placeholder="请输入昵称" />
<el-form-item :label="$t('page.form.nickname')" prop="name">
<el-input v-model="formData.name" :placeholder="$t('page.form.placeholderNickname')" />
</el-form-item>
<el-form-item label="手机号" prop="phone">
<el-form-item :label="$t('page.form.phone')" prop="phone">
<el-input
v-model="formData.phone"
placeholder="请输入手机号"
:placeholder="$t('page.form.placeholderPhone')"
clearable
maxlength="20"
show-word-limit
/>
</el-form-item>
<el-form-item label="密码" prop="password" :rules="passwordRules">
<el-form-item :label="$t('page.form.password')" prop="password" :rules="passwordRules">
<el-input
v-model="formData.password"
type="password"
placeholder="编辑留空则不修改"
:placeholder="$t('page.form.placeholderPasswordEdit')"
show-password
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item :label="$t('page.form.status')" prop="status">
<sa-switch v-model="formData.status" />
</el-form-item>
<el-form-item label="所属管理员" prop="admin_id">
<el-form-item :label="$t('page.form.adminId')" prop="admin_id">
<el-select
v-model="formData.admin_id"
placeholder="选择后台管理员(可选)"
:placeholder="$t('page.form.placeholderAdmin')"
clearable
filterable
style="width: 100%"
@@ -51,21 +51,21 @@
/>
</el-select>
</el-form-item>
<el-form-item label="平台币" prop="coin">
<el-form-item :label="$t('page.form.coin')" prop="coin">
<el-input-number
v-model="formData.coin"
:min="0"
:precision="2"
:disabled="dialogType === 'add'"
placeholder="创建时默认0不可改"
:placeholder="$t('page.form.placeholderCoinAdd')"
style="width: 100%"
/>
</el-form-item>
<!-- lottery_config_id = 自定义权重否则 = DiceLotteryConfig.id选择后该配置的五个 weight 会写入下方 player.*_weight -->
<el-form-item label="彩金池配置" prop="lottery_config_id">
<el-form-item :label="$t('page.form.lotteryPoolConfig')" prop="lottery_config_id">
<el-select
v-model="formData.lottery_config_id"
placeholder="留空则使用下方自定义权重,或选择彩金池"
:placeholder="$t('page.form.placeholderLotteryPool')"
clearable
filterable
style="width: 100%"
@@ -81,28 +81,28 @@
</el-select>
</el-form-item>
<!-- 当前选中的 DiceLotteryConfig 数据展示 -->
<el-form-item v-if="currentLotteryConfig" label="当前配置" class="current-config-block">
<el-form-item v-if="currentLotteryConfig" :label="$t('page.form.currentConfig')" class="current-config-block">
<div class="current-lottery-config">
<div class="config-row">
<span class="config-label">名称</span>
<span class="config-label">{{ $t('page.form.configLabelName') }}</span>
<span>{{ currentLotteryConfig.name ?? '-' }}</span>
</div>
<div class="config-row">
<span class="config-label">类型</span>
<span class="config-label">{{ $t('page.form.configLabelType') }}</span>
<span>{{ lotteryConfigTypeText(currentLotteryConfig.type) }}</span>
</div>
<div class="config-row">
<span class="config-label">T1T5 权重</span>
<span class="config-label">{{ $t('page.form.configLabelWeights') }}</span>
<span>{{ currentLotteryConfigWeightsText }}</span>
</div>
<div v-if="currentLotteryConfig.remark" class="config-row">
<span class="config-label">备注</span>
<span class="config-label">{{ $t('page.form.configLabelRemark') }}</span>
<span>{{ currentLotteryConfig.remark }}</span>
</div>
</div>
</el-form-item>
<!-- lottery_config_id 为空时自定义权重可编辑有值时来自所选 DiceLotteryConfig仅展示不可编辑 -->
<el-form-item label="T1池权重(%)" prop="t1_weight">
<el-form-item :label="$t('page.form.t1Weight')" prop="t1_weight">
<el-slider
v-model="formData.t1_weight"
:min="0"
@@ -112,7 +112,7 @@
:disabled="!isLotteryConfigEmpty()"
/>
</el-form-item>
<el-form-item label="T2池权重(%)" prop="t2_weight">
<el-form-item :label="$t('page.form.t2Weight')" prop="t2_weight">
<el-slider
v-model="formData.t2_weight"
:min="0"
@@ -122,7 +122,7 @@
:disabled="!isLotteryConfigEmpty()"
/>
</el-form-item>
<el-form-item label="T3池权重(%)" prop="t3_weight">
<el-form-item :label="$t('page.form.t3Weight')" prop="t3_weight">
<el-slider
v-model="formData.t3_weight"
:min="0"
@@ -132,7 +132,7 @@
:disabled="!isLotteryConfigEmpty()"
/>
</el-form-item>
<el-form-item label="T4池权重(%)" prop="t4_weight">
<el-form-item :label="$t('page.form.t4Weight')" prop="t4_weight">
<el-slider
v-model="formData.t4_weight"
:min="0"
@@ -142,7 +142,7 @@
:disabled="!isLotteryConfigEmpty()"
/>
</el-form-item>
<el-form-item label="T5池权重(%)" prop="t5_weight">
<el-form-item :label="$t('page.form.t5Weight')" prop="t5_weight">
<el-slider
v-model="formData.t5_weight"
:min="0"
@@ -154,16 +154,16 @@
</el-form-item>
<el-form-item v-if="isLotteryConfigEmpty()">
<div class="text-gray-500 text-sm">
五个池权重总和<span :class="Math.abs(weightsSum - 100) > 0.01 ? 'text-red-500' : ''">{{
{{ $t('page.form.weightsSumHint') }}<span :class="Math.abs(weightsSum - 100) > 0.01 ? 'text-red-500' : ''">{{
weightsSum
}}</span
>% / 100%100%
>{{ $t('page.form.weightsSumUnit') }}
</div>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="handleSubmit">提交</el-button>
<el-button @click="handleClose">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleSubmit">{{ $t('table.form.submit') }}</el-button>
</template>
</el-dialog>
</template>