多语言优化

This commit is contained in:
2026-03-19 15:40:06 +08:00
parent db0e420a8f
commit 333e85f7d9
45 changed files with 864 additions and 276 deletions

View File

@@ -399,15 +399,15 @@
if (props.dialogType === 'add') {
delete payload.id
await api.save(payload)
ElMessage.success('新增成功')
ElMessage.success($t('page.form.addSuccess'))
} else {
await api.update(payload)
ElMessage.success('修改成功')
ElMessage.success($t('page.form.editSuccess'))
}
emit('success')
handleClose()
} catch (error: any) {
let msg = '表单验证失败,请检查必填项与格式'
let msg = $t('page.form.validateFailed')
if (error?.message) {
msg = error.message
} else if (typeof error === 'string') {

View File

@@ -1,52 +1,52 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增玩家抽奖记录(测试数据)' : '编辑玩家抽奖记录(测试数据)'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
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="彩金池配置id" prop="lottery_config_id">
<el-input v-model="formData.lottery_config_id" placeholder="请输入彩金池配置id" />
<el-form-item :label="$t('page.form.labelLotteryConfigId')" prop="lottery_config_id">
<el-input v-model="formData.lottery_config_id" :placeholder="$t('page.form.placeholderLotteryConfigId')" />
</el-form-item>
<el-form-item label="抽奖类型" prop="lottery_type">
<el-form-item :label="$t('page.form.drawType')" prop="lottery_type">
<el-select
v-model="formData.lottery_type"
placeholder="请选择"
:placeholder="$t('form.placeholderSelect')"
clearable
style="width: 100%"
>
<el-option label="付费" :value="0" />
<el-option label="赠送" :value="1" />
<el-option :label="$t('page.search.paid')" :value="0" />
<el-option :label="$t('page.search.free')" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="方向" prop="direction">
<el-select v-model="formData.direction" placeholder="请选择" clearable style="width: 100%">
<el-option label="顺时针" :value="0" />
<el-option label="逆时针" :value="1" />
<el-form-item :label="$t('page.search.direction')" prop="direction">
<el-select v-model="formData.direction" :placeholder="$t('form.placeholderSelect')" clearable style="width: 100%">
<el-option :label="$t('page.search.clockwise')" :value="0" />
<el-option :label="$t('page.search.anticlockwise')" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="是否中大奖" prop="is_win">
<el-select v-model="formData.is_win" placeholder="请选择" clearable style="width: 100%">
<el-option label="" :value="0" />
<el-option label="中大奖" :value="1" />
<el-form-item :label="$t('page.search.isBigWin')" prop="is_win">
<el-select v-model="formData.is_win" :placeholder="$t('form.placeholderSelect')" clearable style="width: 100%">
<el-option :label="$t('page.search.noBigWin')" :value="0" />
<el-option :label="$t('page.search.bigWin')" :value="1" />
</el-select>
</el-form-item>
<el-form-item label="赢取平台币" prop="win_coin">
<el-form-item :label="$t('page.search.winCoin')" prop="win_coin">
<el-input-number
v-model="formData.win_coin"
placeholder="赢取平台币"
:placeholder="$t('page.form.placeholderWinCoin')"
:precision="2"
controls-position="right"
style="width: 100%"
/>
</el-form-item>
<el-form-item label="中奖档位" prop="reward_tier">
<el-form-item :label="$t('page.search.rewardTier')" prop="reward_tier">
<el-select
v-model="formData.reward_tier"
placeholder="请选择档位(选后自动带出奖励配置ID)"
:placeholder="$t('page.form.placeholderRewardTier')"
clearable
style="width: 100%"
@change="onRewardTierChange"
@@ -58,40 +58,40 @@
<el-option label="T5" value="T5" />
</el-select>
</el-form-item>
<el-form-item label="奖励配置id" prop="reward_config_id">
<el-form-item :label="$t('page.form.rewardConfigId')" prop="reward_config_id">
<el-input
v-model="formData.reward_config_id"
placeholder="可选中奖档位自动带出或手动输入"
:placeholder="$t('page.form.placeholderRewardConfigId')"
/>
</el-form-item>
<el-form-item label="起始索引" prop="start_index">
<el-input v-model="formData.start_index" placeholder="请输入起始索引" />
<el-form-item :label="$t('page.table.startIndex')" prop="start_index">
<el-input v-model="formData.start_index" :placeholder="$t('page.form.placeholderStartIndex')" />
</el-form-item>
<el-form-item label="结束索引" prop="target_index">
<el-input v-model="formData.target_index" placeholder="请输入结束索引" />
<el-form-item :label="$t('page.form.labelTargetIndex')" prop="target_index">
<el-input v-model="formData.target_index" :placeholder="$t('page.form.placeholderTargetIndex')" />
</el-form-item>
<el-form-item label="摇取点数和" prop="roll_number">
<el-input v-model="formData.roll_number" placeholder="请输入摇取点数和" />
<el-form-item :label="$t('page.search.rollNumber')" prop="roll_number">
<el-input v-model="formData.roll_number" :placeholder="$t('page.form.placeholderRollNumber')" />
</el-form-item>
<el-form-item label="摇取点数:[1,2,3,4,5,6]" prop="roll_array">
<el-input v-model="formData.roll_array" placeholder="请输入摇取点数:[1,2,3,4,5,6]" />
<el-form-item :label="$t('page.form.labelRollArray')" prop="roll_array">
<el-input v-model="formData.roll_array" :placeholder="$t('page.form.placeholderRollArray')" />
</el-form-item>
<el-form-item label="状态:0=失败,1=成功" prop="status">
<el-form-item :label="$t('page.form.labelStatus')" prop="status">
<sa-radio v-model="formData.status" dict="data_status" />
</el-form-item>
<el-form-item label="中大奖平台币" prop="super_win_coin">
<el-input v-model="formData.super_win_coin" placeholder="请输入中大奖平台币" />
<el-form-item :label="$t('page.table.superWinCoin')" prop="super_win_coin">
<el-input v-model="formData.super_win_coin" :placeholder="$t('page.form.placeholderSuperWinCoin')" />
</el-form-item>
<el-form-item label="摇色子中奖平台币" prop="reward_win_coin">
<el-input v-model="formData.reward_win_coin" placeholder="请输入摇色子中奖平台币" />
<el-form-item :label="$t('page.table.rewardWinCoin')" prop="reward_win_coin">
<el-input v-model="formData.reward_win_coin" :placeholder="$t('page.form.placeholderRewardWinCoin')" />
</el-form-item>
<el-form-item label="所属管理员" prop="admin_id">
<el-input v-model="formData.admin_id" placeholder="请输入所属管理员" />
<el-form-item :label="$t('page.form.labelAdminId')" prop="admin_id">
<el-input v-model="formData.admin_id" :placeholder="$t('page.form.placeholderAdminId')" />
</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>
@@ -101,6 +101,7 @@
import rewardConfigApi from '../../../api/reward_config/index'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -120,6 +121,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -134,14 +136,14 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
lottery_config_id: [{ required: true, message: '彩金池配置id必需填写', trigger: 'blur' }],
lottery_type: [{ required: true, message: '抽奖类型:0=付费,1=赠送必需填写', trigger: 'blur' }],
is_win: [{ required: true, message: '中大奖:0=无,1=中奖必需填写', trigger: 'blur' }],
direction: [{ required: true, message: '方向:0=顺时针,1=逆时针必需填写', trigger: 'blur' }],
reward_config_id: [{ required: true, message: '奖励配置id必需填写', trigger: 'blur' }],
status: [{ required: true, message: '状态:0=失败,1=成功必需填写', trigger: 'blur' }]
})
const rules = computed<FormRules>(() => ({
lottery_config_id: [{ required: true, message: t('page.form.ruleLotteryConfigIdRequired'), trigger: 'blur' }],
lottery_type: [{ required: true, message: t('page.form.ruleDrawTypeRequired'), trigger: 'blur' }],
is_win: [{ required: true, message: t('page.form.ruleIsBigWinRequired'), trigger: 'blur' }],
direction: [{ required: true, message: t('page.form.ruleDirectionRequired'), trigger: 'blur' }],
reward_config_id: [{ required: true, message: t('page.form.ruleRewardConfigIdRequired'), trigger: 'blur' }],
status: [{ required: true, message: t('page.form.ruleStatusRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -256,10 +258,10 @@
delete (payload as Record<string, unknown>).reward_tier
if (props.dialogType === 'add') {
await api.save(payload)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(payload)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -416,7 +416,7 @@
await formRef.value.validate()
const useCustomWeights = isLotteryConfigEmpty()
if (useCustomWeights && Math.abs(weightsSum.value - 100) > 0.01) {
ElMessage.warning('五个池权重总和必须为100%')
ElMessage.warning($t('page.form.ruleWeightsSumMustBe100'))
return
}
const payload = { ...formData }
@@ -428,10 +428,10 @@
}
if (props.dialogType === 'add') {
await api.save(payload)
ElMessage.success('新增成功')
ElMessage.success($t('page.form.addSuccess'))
} else {
await api.update(payload)
ElMessage.success('修改成功')
ElMessage.success($t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -230,10 +230,10 @@
const rest = { ...formData } as Record<string, unknown>
delete rest.id
await api.save(rest)
ElMessage.success('新增成功')
ElMessage.success($t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success($t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -225,10 +225,10 @@
const payload = { ...formData }
if (props.dialogType === 'add') {
await api.save(payload)
ElMessage.success('新增成功')
ElMessage.success($t('page.form.addSuccess'))
} else {
await api.update(payload)
ElMessage.success('修改成功')
ElMessage.success($t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,33 +1,33 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增奖励配置' : '编辑奖励配置'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
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="grid_number">
<el-form-item :label="$t('page.form.labelDicePoints')" prop="grid_number">
<el-input-number
v-model="formData.grid_number"
placeholder="请输入色子点数"
:placeholder="$t('page.form.placeholderDicePoints')"
:disabled="dialogType === 'edit'"
/>
</el-form-item>
<el-form-item label="前端显示文本" prop="ui_text">
<el-input v-model="formData.ui_text" placeholder="请输入前端显示文本(中文)" />
<el-form-item :label="$t('page.form.labelUiText')" prop="ui_text">
<el-input v-model="formData.ui_text" :placeholder="$t('page.form.placeholderUiText')"/>
</el-form-item>
<el-form-item label="前端显示文本(英文)" prop="ui_text_en">
<el-input v-model="formData.ui_text_en" placeholder="请输入前端显示文本(英文)" />
<el-form-item :label="$t('page.form.labelUiTextEn')" prop="ui_text_en">
<el-input v-model="formData.ui_text_en" :placeholder="$t('page.form.placeholderUiTextEn')" />
</el-form-item>
<el-form-item label="真实资金结算" prop="real_ev">
<el-input-number v-model="formData.real_ev" placeholder="请输入真实资金结算" />
<el-form-item :label="$t('page.form.labelRealEv')" prop="real_ev">
<el-input-number v-model="formData.real_ev" :placeholder="$t('page.form.placeholderRealEv')" />
</el-form-item>
<el-form-item label="所属档位" prop="tier">
<el-form-item :label="$t('page.form.labelTier')" prop="tier">
<el-select
v-model="formData.tier"
placeholder="请选择所属档位"
:placeholder="$t('page.form.placeholderTier')"
clearable
style="width: 100%"
:disabled="dialogType === 'edit'"
@@ -37,39 +37,39 @@
<el-option label="T3" value="T3" />
<el-option label="T4" value="T4" />
<el-option label="T5" value="T5" />
<el-option label="BIGWIN超级大奖" value="BIGWIN" />
<el-option :label="$t('page.form.tierBigWin')" value="BIGWIN" />
</el-select>
</el-form-item>
<!-- BIGWIN 时可编辑权重10000=100% 中奖0=0% 中奖点数 530 固定 100% 不可改 -->
<el-form-item v-if="formData.tier === 'BIGWIN'" label="大奖权重" prop="weight">
<el-form-item v-if="formData.tier === 'BIGWIN'" :label="$t('page.form.labelBigWinWeight')" prop="weight">
<el-input-number
v-model="formData.weight"
:min="0"
:max="10000"
:step="100"
placeholder="0~1000010000=100%中奖"
:placeholder="$t('page.form.placeholderBigWinWeight')"
:disabled="isBigwinWeightDisabled"
/>
<div v-if="isBigwinWeightDisabled" class="form-tip">
点数 530 摇到必中大奖权重固定 10000
{{ $t('page.form.bigWinWeightDisabledTip') }}
</div>
<div v-else class="form-tip">10000=100% 中奖0=0% 中奖仅对点数 10/15/20/25 生效</div>
<div v-else class="form-tip">{{ $t('page.form.bigWinWeightTip') }}</div>
</el-form-item>
<!-- 权重已迁移至T1-T5 BIGWIN 权重配比弹窗dice_reward BIGWIN 时本弹窗可编辑 weight起始索引已迁移至 dice_reward.start_index -->
<el-form-item label="备注" prop="remark">
<el-form-item :label="$t('page.form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="3"
placeholder="请输入备注"
:placeholder="$t('page.form.placeholderRemark')"
maxlength="500"
show-word-limit
/>
</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>
@@ -78,6 +78,7 @@
import api from '../../../api/reward_config/index'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -97,6 +98,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -112,12 +114,14 @@
* 表单验证规则(权重已迁移至权重配比弹窗)
*/
const rules = reactive<FormRules>({
grid_number: [{ required: true, message: '色子点数必需填写', trigger: 'blur' }],
ui_text: [{ required: true, message: '前端显示文本必需填写', trigger: 'blur' }],
ui_text_en: [{ max: 255, message: '前端显示文本(英文)长度需小于 255 字符', trigger: 'blur' }],
real_ev: [{ required: true, message: '真实资金结算必需填写', trigger: 'blur' }],
tier: [{ required: true, message: '所属档位必需填写', trigger: 'blur' }],
weight: [{ type: 'number', min: 0, max: 10000, message: '大奖权重 0~10000', trigger: 'blur' }]
grid_number: [{ required: true, message: t('page.form.ruleDicePointsRequired'), trigger: 'blur' }],
ui_text: [{ required: true, message: t('page.form.ruleUiTextRequired'), trigger: 'blur' }],
ui_text_en: [{ max: 255, message: t('page.form.ruleUiTextEnMax'), trigger: 'blur' }],
real_ev: [{ required: true, message: t('page.form.ruleRealEvRequired'), trigger: 'blur' }],
tier: [{ required: true, message: t('page.form.ruleTierRequired'), trigger: 'blur' }],
weight: [
{ type: 'number', min: 0, max: 10000, message: t('page.form.ruleBigWinWeightRange'), trigger: 'blur' }
]
})
/** 点数 5、30 固定 100% 中大奖,权重不可改 */
@@ -222,10 +226,10 @@
}
if (props.dialogType === 'add') {
await api.save(payload)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(payload)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,26 +1,26 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增奖励配置权重测试记录' : '编辑奖励配置权重测试记录'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
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="测试次数100/500/1000" prop="test_count">
<el-input v-model="formData.test_count" placeholder="请输入测试次数100/500/1000" />
<el-form-item :label="$t('page.form.labelTestCount')" prop="test_count">
<el-input v-model="formData.test_count" :placeholder="$t('page.form.placeholderTestCount')" />
</el-form-item>
<el-form-item label="测试时权重配比快照:按档位保存 id,grid_number,tier,weight" prop="weight_config_snapshot">
<el-input v-model="formData.weight_config_snapshot" placeholder="请输入测试时权重配比快照:按档位保存 id,grid_number,tier,weight" />
<el-form-item :label="$t('page.form.labelWeightSnapshot')" prop="weight_config_snapshot">
<el-input v-model="formData.weight_config_snapshot" :placeholder="$t('page.form.placeholderWeightSnapshot')" />
</el-form-item>
<el-form-item label="落点统计grid_number=&gt;出现次数" prop="result_counts">
<el-input v-model="formData.result_counts" placeholder="请输入落点统计grid_number=&gt;出现次数" />
<el-form-item :label="$t('page.form.labelResultCounts')" prop="result_counts">
<el-input v-model="formData.result_counts" :placeholder="$t('page.form.placeholderResultCounts')" />
</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>
@@ -29,6 +29,7 @@
import api from '../../../api/reward_config_record/index'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -48,6 +49,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -62,9 +64,9 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
test_count: [{ required: true, message: '测试次数100/500/1000必需填写', trigger: 'blur' }],
})
const rules = computed<FormRules>(() => ({
test_count: [{ required: true, message: t('page.form.ruleTestCountRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -136,10 +138,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,21 +1,21 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增文件' : '编辑文件'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
width="800px"
align-center
:close-on-click-modal="false"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
<el-form-item label="文件名称" prop="origin_name">
<el-input v-model="formData.origin_name" placeholder="请输入文件名称" />
<el-form-item :label="$t('page.form.labelFileName')" prop="origin_name">
<el-input v-model="formData.origin_name" :placeholder="$t('page.form.placeholderFileName')" />
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-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>
</div>
</template>
</el-dialog>
@@ -24,6 +24,8 @@
<script setup lang="ts">
import type { FormInstance, FormRules } from 'element-plus'
import api from '@/api/safeguard/attachment'
import { ElMessage } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -43,6 +45,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -55,9 +58,9 @@
})
// 表单验证规则
const rules: FormRules = {
origin_name: [{ required: true, message: '请输入文件名称', trigger: 'blur' }]
}
const rules = computed<FormRules>(() => ({
origin_name: [{ required: true, message: t('page.form.ruleFileNameRequired'), trigger: 'blur' }]
}))
// 初始表单数据
const initialFormData = {
@@ -123,7 +126,7 @@
await formRef.value.validate()
if (props.dialogType === 'edit') {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,17 +1,17 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增菜单' : '编辑菜单'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
width="820px"
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="type">
<el-form-item :label="$t('page.form.labelMenuType')" prop="type">
<sa-radio v-model="formData.type" type="button" dict="menu_type"></sa-radio>
</el-form-item>
<el-form-item label="上级菜单" prop="parent_id">
<el-form-item :label="$t('page.form.labelParentMenu')" prop="parent_id">
<el-tree-select
v-model="formData.parent_id"
:data="optionData.treeData"
@@ -22,63 +22,63 @@
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="菜单名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入菜单名称" />
<el-form-item :label="$t('page.form.labelMenuName')" prop="name">
<el-input v-model="formData.name" :placeholder="$t('page.form.labelMenuName')" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.type < 3">
<el-form-item prop="path">
<template #label>
<sa-label
label="路由地址"
tooltip="一级菜单:以 / 开头的绝对路径(如 /dashboard 二级及以下:相对路径(如 console、user"
:label="$t('page.form.labelRoutePath')"
:tooltip="$t('page.form.labelRoutePathTip')"
/>
</template>
<el-input v-model="formData.path" placeholder="如:/dashboard 或 console" />
<el-input v-model="formData.path" :placeholder="$t('page.form.placeholderRoutePath')" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.type != 3">
<el-form-item label="组件名称" prop="code">
<el-input v-model="formData.code" placeholder="如: User" />
<el-form-item :label="$t('page.form.labelComponentName')" prop="code">
<el-input v-model="formData.code" :placeholder="$t('page.form.placeholderComponentName')" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.type === 2">
<el-form-item prop="component">
<template #label>
<sa-label label="组件路径" tooltip="填写组件路径views目录下 目录菜单:留空" />
<sa-label :label="$t('page.form.labelComponentPath')" :tooltip="$t('page.form.labelComponentPathTip')" />
</template>
<el-autocomplete
class="w-full"
v-model="formData.component"
:fetch-suggestions="querySearch"
clearable
placeholder="如:/system/user 或留空"
:placeholder="$t('page.form.placeholderComponentPath')"
/>
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.type != 3">
<el-form-item label="菜单图标" prop="icon">
<el-form-item :label="$t('page.form.labelMenuIcon')" prop="icon">
<sa-icon-picker v-model="formData.icon" />
</el-form-item>
</el-col>
<el-col :span="12" v-if="formData.type === 3">
<el-form-item label="权限标识" prop="slug">
<el-input v-model="formData.slug" placeholder="请输入权限标识" />
<el-form-item :label="$t('page.form.labelPermSlug')" prop="slug">
<el-input v-model="formData.slug" :placeholder="$t('page.form.placeholderPermSlug')" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="formData.type === 4">
<el-form-item label="外链地址" prop="link_url">
<el-input v-model="formData.link_url" placeholder="https://saithink.top" />
<el-form-item :label="$t('page.form.labelLinkUrl')" prop="link_url">
<el-input v-model="formData.link_url" :placeholder="$t('page.form.placeholderLinkUrl')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sort">
<template #label>
<sa-label label="排序" tooltip="数字越大越靠前" />
<sa-label :label="$t('page.form.labelSort')" :tooltip="$t('page.form.labelSortTip')" />
</template>
<el-input-number
v-model="formData.sort"
placeholder="请输入排序"
:placeholder="$t('page.form.placeholderSort')"
controls-position="right"
/>
</el-form-item>
@@ -86,7 +86,7 @@
<el-col :span="12">
<el-form-item prop="status">
<template #label>
<sa-label label="状态" tooltip="禁用后,该菜单项将不可用" />
<sa-label :label="$t('page.form.labelStatus')" :tooltip="$t('page.form.labelStatusTip')" />
</template>
<sa-radio v-model="formData.status" dict="data_status" />
</el-form-item>
@@ -94,7 +94,7 @@
<el-col :span="12">
<el-form-item prop="is_iframe">
<template #label>
<sa-label label="是否内嵌" tooltip="外链模式下有效" />
<sa-label :label="$t('page.form.labelIsIframe')" :tooltip="$t('page.form.labelIsIframeTip')" />
</template>
<sa-switch v-model="formData.is_iframe" dict="yes_or_no" :showText="false" />
</el-form-item>
@@ -102,7 +102,7 @@
<el-col :span="12">
<el-form-item prop="is_keep_alive">
<template #label>
<sa-label label="是否缓存" tooltip="切换tabs不刷新" />
<sa-label :label="$t('page.form.labelIsKeepAlive')" :tooltip="$t('page.form.labelIsKeepAliveTip')" />
</template>
<sa-switch v-model="formData.is_keep_alive" dict="yes_or_no" :showText="false" />
</el-form-item>
@@ -110,7 +110,7 @@
<el-col :span="12">
<el-form-item prop="is_hidden">
<template #label>
<sa-label label="是否隐藏" tooltip="不在菜单栏显示,但是可以通过路由访问" />
<sa-label :label="$t('page.form.labelIsHidden')" :tooltip="$t('page.form.labelIsHiddenTip')" />
</template>
<sa-switch v-model="formData.is_hidden" dict="yes_or_no" :showText="false" />
</el-form-item>
@@ -118,7 +118,7 @@
<el-col :span="12">
<el-form-item prop="is_fixed_tab">
<template #label>
<sa-label label="是否固定" tooltip="固定在tabs导航栏" />
<sa-label :label="$t('page.form.labelIsFixedTab')" :tooltip="$t('page.form.labelIsFixedTabTip')" />
</template>
<sa-switch v-model="formData.is_fixed_tab" dict="yes_or_no" :showText="false" />
</el-form-item>
@@ -126,7 +126,7 @@
<el-col :span="12">
<el-form-item prop="is_full_page">
<template #label>
<sa-label label="是否全屏" tooltip="不继承左侧菜单和顶部导航栏" />
<sa-label :label="$t('page.form.labelIsFullPage')" :tooltip="$t('page.form.labelIsFullPageTip')" />
</template>
<sa-switch v-model="formData.is_full_page" dict="yes_or_no" :showText="false" />
</el-form-item>
@@ -134,8 +134,8 @@
</el-row>
</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>
@@ -144,6 +144,7 @@
import api from '@/api/system/menu'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -163,6 +164,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
const optionData = reactive({
@@ -197,14 +199,14 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
parent_id: [{ required: true, message: '请选择上级菜单', trigger: 'change' }],
name: [{ required: true, message: '请输入菜单名称', trigger: 'blur' }],
path: [{ required: true, message: '请输入路由地址', trigger: 'blur' }],
code: [{ required: true, message: '请输入组件名称', trigger: 'blur' }],
slug: [{ required: true, message: '请输入权限标识', trigger: 'blur' }],
link_url: [{ required: true, message: '请输入外链地址', trigger: 'blur' }]
})
const rules = computed<FormRules>(() => ({
parent_id: [{ required: true, message: t('page.form.ruleParentMenuRequired'), trigger: 'change' }],
name: [{ required: true, message: t('page.form.ruleMenuNameRequired'), trigger: 'blur' }],
path: [{ required: true, message: t('page.form.ruleRoutePathRequired'), trigger: 'blur' }],
code: [{ required: true, message: t('page.form.ruleComponentNameRequired'), trigger: 'blur' }],
slug: [{ required: true, message: t('page.form.rulePermSlugRequired'), trigger: 'blur' }],
link_url: [{ required: true, message: t('page.form.ruleLinkUrlRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -302,10 +304,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,37 +1,37 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增岗位' : '编辑岗位'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
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="name">
<el-input v-model="formData.name" placeholder="请输入岗位名称" />
<el-form-item :label="$t('page.form.labelName')" prop="name">
<el-input v-model="formData.name" :placeholder="$t('page.form.placeholderName')" />
</el-form-item>
<el-form-item label="岗位编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入岗位编码" />
<el-form-item :label="$t('page.form.labelCode')" prop="code">
<el-input v-model="formData.code" :placeholder="$t('page.form.placeholderCode')" />
</el-form-item>
<el-form-item label="描述" prop="remark">
<el-form-item :label="$t('page.form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="3"
placeholder="请输入岗位描述"
:placeholder="$t('page.form.placeholderRemark')"
/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" placeholder="请输入排序" />
<el-form-item :label="$t('page.form.labelSort')" prop="sort">
<el-input-number v-model="formData.sort" :placeholder="$t('page.form.placeholderSort')" />
</el-form-item>
<el-form-item label="启用" prop="status">
<el-form-item :label="$t('page.form.labelStatus')" prop="status">
<sa-radio v-model="formData.status" dict="data_status" />
</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>
@@ -40,6 +40,7 @@
import api from '@/api/system/post'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -59,6 +60,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -73,10 +75,10 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
name: [{ required: true, message: '请输入岗位名称', trigger: 'blur' }],
code: [{ required: true, message: '请输入岗位编码', trigger: 'blur' }]
})
const rules = computed<FormRules>(() => ({
name: [{ required: true, message: t('page.form.ruleNameRequired'), trigger: 'blur' }],
code: [{ required: true, message: t('page.form.ruleCodeRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -150,10 +152,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,42 +1,40 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增角色' : '编辑角色'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
width="600px"
align-center
@close="handleClose"
>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
<el-form-item label="角色名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入角色名称" />
<el-form-item :label="$t('page.form.labelName')" prop="name">
<el-input v-model="formData.name" :placeholder="$t('page.form.placeholderName')" />
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="formData.code" placeholder="请输入角色编码" />
<el-form-item :label="$t('page.form.labelCode')" prop="code">
<el-input v-model="formData.code" :placeholder="$t('page.form.placeholderCode')" />
</el-form-item>
<el-form-item label="角色级别" prop="level">
<el-input-number v-model="formData.level" placeholder="角色级别" :max="99" :min="1" />
<el-form-item :label="$t('page.form.labelLevel')" prop="level">
<el-input-number v-model="formData.level" :placeholder="$t('page.form.labelLevel')" :max="99" :min="1" />
</el-form-item>
<div class="text-xs text-gray-400 pl-32 pb-4"
>控制角色的权限层级, 不能操作职级高于自己的角色</div
>
<el-form-item label="描述" prop="remark">
<div class="text-xs text-gray-400 pl-32 pb-4">{{ $t('page.form.levelTip') }}</div>
<el-form-item :label="$t('page.form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="3"
placeholder="请输入角色描述"
:placeholder="$t('page.form.placeholderRemark')"
/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number v-model="formData.sort" placeholder="请输入排序" />
<el-form-item :label="$t('page.form.labelSort')" prop="sort">
<el-input-number v-model="formData.sort" :placeholder="$t('page.form.placeholderSort')" />
</el-form-item>
<el-form-item label="启用" prop="status">
<el-form-item :label="$t('page.form.labelStatus')" prop="status">
<sa-radio v-model="formData.status" dict="data_status" />
</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>
@@ -45,6 +43,7 @@
import api from '@/api/system/role'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -64,6 +63,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -78,11 +78,11 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
code: [{ required: true, message: '请输入角色编码', trigger: 'blur' }],
level: [{ required: true, message: '请输入角色级别', trigger: 'blur' }]
})
const rules = computed<FormRules>(() => ({
name: [{ required: true, message: t('page.form.ruleNameRequired'), trigger: 'blur' }],
code: [{ required: true, message: t('page.form.ruleCodeRequired'), trigger: 'blur' }],
level: [{ required: true, message: t('page.form.ruleLevelRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -157,10 +157,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,36 +1,36 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增用户' : '编辑用户'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
width="800px"
align-center
:close-on-click-modal="false"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
<el-form-item label="头像" prop="avatar">
<el-form-item :label="$t('page.form.labelAvatar')" prop="avatar">
<sa-image-picker v-model="formData.avatar" round />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="用户名" prop="username">
<el-form-item :label="$t('page.form.labelUsername')" prop="username">
<el-input v-model="formData.username" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="真实姓名" prop="realname">
<el-form-item :label="$t('page.form.labelRealname')" prop="realname">
<el-input v-model="formData.realname" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="dialogType === 'add'">
<el-col :span="12">
<el-form-item label="密码" prop="password">
<el-form-item :label="$t('page.form.labelPassword')" prop="password">
<el-input type="password" v-model="formData.password" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="确认密码" prop="password_confirm">
<el-form-item :label="$t('page.form.labelPasswordConfirm')" prop="password_confirm">
<el-input type="password" v-model="formData.password_confirm" show-password />
</el-form-item>
</el-col>
@@ -38,20 +38,20 @@
<el-row>
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="formData.email" placeholder="请输入邮箱" />
<el-form-item :label="$t('page.form.labelEmail')" prop="email">
<el-input v-model="formData.email" :placeholder="$t('page.form.placeholderEmail')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号" prop="phone">
<el-input v-model="formData.phone" placeholder="请输入手机号" />
<el-form-item :label="$t('page.form.labelPhone')" prop="phone">
<el-input v-model="formData.phone" :placeholder="$t('page.form.placeholderPhone')" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="部门" prop="dept_id">
<el-form-item :label="$t('page.form.labelDept')" prop="dept_id">
<el-tree-select
v-model="formData.dept_id"
:data="optionData.deptData"
@@ -62,7 +62,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色" prop="role_ids">
<el-form-item :label="$t('page.form.labelRole')" prop="role_ids">
<el-select v-model="formData.role_ids" multiple clearable>
<el-option
v-for="role in optionData.roleList"
@@ -77,7 +77,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="岗位" prop="post_ids">
<el-form-item :label="$t('page.form.labelPost')" prop="post_ids">
<el-select v-model="formData.post_ids" multiple clearable>
<el-option
v-for="post in optionData.postList"
@@ -89,14 +89,14 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="gender">
<el-form-item :label="$t('page.form.labelGender')" prop="gender">
<sa-radio v-model="formData.gender" dict="gender" valueType="string" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="状态" prop="status">
<el-form-item :label="$t('page.form.labelStatus')" prop="status">
<sa-radio v-model="formData.status" dict="data_status" />
</el-form-item>
</el-col>
@@ -104,12 +104,12 @@
<el-row>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-form-item :label="$t('page.form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="3"
placeholder="请输入备注"
:placeholder="$t('page.form.placeholderRemark')"
/>
</el-form-item>
</el-col>
@@ -117,8 +117,8 @@
</el-form>
<template #footer>
<div class="dialog-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>
</div>
</template>
</el-dialog>
@@ -130,6 +130,8 @@
import deptApi from '@/api/system/dept'
import roleApi from '@/api/system/role'
import postApi from '@/api/system/post'
import { ElMessage } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -149,6 +151,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
const optionData = reactive({
@@ -167,30 +170,30 @@
const validatePasswordConfirm = (rule: any, value: any, callback: any) => {
if (value !== formData.password) {
callback(new Error('两次输入的密码不一致'))
callback(new Error(t('page.form.rulePasswordNotMatch')))
} else {
callback()
}
}
// 表单验证规则
const rules: FormRules = {
const rules = computed<FormRules>(() => ({
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
{ required: true, message: t('page.form.ruleUsernameRequired'), trigger: 'blur' },
{ min: 2, max: 20, message: t('page.form.ruleUsernameLength'), trigger: 'blur' }
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' }
{ required: true, message: t('page.form.rulePasswordRequired'), trigger: 'blur' },
{ min: 6, max: 20, message: t('page.form.rulePasswordLength'), trigger: 'blur' }
],
password_confirm: [
{ required: true, message: '请输入确认密码', trigger: 'blur' },
{ min: 6, max: 20, message: '长度在 6 到 20 个字符', trigger: 'blur' },
{ required: true, message: t('page.form.rulePasswordConfirmRequired'), trigger: 'blur' },
{ min: 6, max: 20, message: t('page.form.rulePasswordLength'), trigger: 'blur' },
{ validator: validatePasswordConfirm, trigger: 'blur' }
],
dept_id: [{ required: true, message: '请选择部门', trigger: 'change' }],
role_ids: [{ required: true, message: '请选择角色', trigger: 'blur' }]
}
dept_id: [{ required: true, message: t('page.form.ruleDeptRequired'), trigger: 'change' }],
role_ids: [{ required: true, message: t('page.form.ruleRoleRequired'), trigger: 'blur' }]
}))
// 初始表单数据
const initialFormData = {
@@ -287,10 +290,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()

View File

@@ -1,30 +1,30 @@
<template>
<el-dialog
v-model="visible"
:title="dialogType === 'add' ? '新增定时任务' : '编辑定时任务'"
:title="dialogType === 'add' ? $t('page.form.titleAdd') : $t('page.form.titleEdit')"
width="800px"
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="name">
<el-input v-model="formData.name" placeholder="请输入任务名称" />
<el-form-item :label="$t('page.form.labelName')" prop="name">
<el-input v-model="formData.name" :placeholder="$t('page.form.placeholderName')" />
</el-form-item>
<el-form-item label="任务类型" prop="type">
<el-form-item :label="$t('page.form.labelType')" prop="type">
<sa-select v-model="formData.type" dict="crontab_task_type" />
</el-form-item>
<el-form-item label="定时规则" prop="task_style">
<el-form-item :label="$t('page.form.labelTaskStyle')" prop="task_style">
<el-space>
<el-select v-model="formData.task_style" :style="{ width: '100px' }">
<el-option :value="1" label="每天" />
<el-option :value="2" label="每小时" />
<el-option :value="3" label="N小时" />
<el-option :value="4" label="N分钟" />
<el-option :value="5" label="N秒" />
<el-option :value="6" label="每周" />
<el-option :value="7" label="每月" />
<el-option :value="8" label="每年" />
<el-option :value="1" :label="$t('page.form.taskStyleEveryDay')" />
<el-option :value="2" :label="$t('page.form.taskStyleEveryHour')" />
<el-option :value="3" :label="$t('page.form.taskStyleNHours')" />
<el-option :value="4" :label="$t('page.form.taskStyleNMinutes')" />
<el-option :value="5" :label="$t('page.form.taskStyleNSeconds')" />
<el-option :value="6" :label="$t('page.form.taskStyleEveryWeek')" />
<el-option :value="7" :label="$t('page.form.taskStyleEveryMonth')" />
<el-option :value="8" :label="$t('page.form.taskStyleEveryYear')" />
</el-select>
<template v-if="formData.task_style == 8">
<el-input-number
@@ -35,7 +35,7 @@
controls-position="right"
:style="{ width: '100px' }"
/>
<span></span>
<span>{{ $t('page.form.unitMonth') }}</span>
</template>
<template v-if="formData.task_style > 6">
<el-input-number
@@ -46,20 +46,20 @@
controls-position="right"
:style="{ width: '100px' }"
/>
<span></span>
<span>{{ $t('page.form.unitDay') }}</span>
</template>
<el-select
v-if="formData.task_style == 6"
v-model="formData.week"
:style="{ width: '100px' }"
>
<el-option :value="1" label="周一" />
<el-option :value="2" label="周二" />
<el-option :value="3" label="周三" />
<el-option :value="4" label="周四" />
<el-option :value="5" label="周五" />
<el-option :value="6" label="周六" />
<el-option :value="0" label="周日" />
<el-option :value="1" :label="$t('page.form.weekMon')" />
<el-option :value="2" :label="$t('page.form.weekTue')" />
<el-option :value="3" :label="$t('page.form.weekWed')" />
<el-option :value="4" :label="$t('page.form.weekThu')" />
<el-option :value="5" :label="$t('page.form.weekFri')" />
<el-option :value="6" :label="$t('page.form.weekSat')" />
<el-option :value="0" :label="$t('page.form.weekSun')" />
</el-select>
<template v-if="[1, 3, 6, 7, 8].includes(formData.task_style)">
<el-input-number
@@ -70,7 +70,7 @@
controls-position="right"
:style="{ width: '100px' }"
/>
<span></span>
<span>{{ $t('page.form.unitHour') }}</span>
</template>
<template v-if="formData.task_style != 5">
<el-input-number
@@ -81,7 +81,7 @@
controls-position="right"
:style="{ width: '100px' }"
/>
<span></span>
<span>{{ $t('page.form.unitMinute') }}</span>
</template>
<template v-if="formData.task_style == 5">
<el-input-number
@@ -92,36 +92,41 @@
controls-position="right"
:style="{ width: '100px' }"
/>
<span></span>
<span>{{ $t('page.form.unitSecond') }}</span>
</template>
</el-space>
</el-form-item>
<el-form-item label="调用目标" prop="target">
<el-form-item :label="$t('page.form.labelTarget')" prop="target">
<el-input
v-model="formData.target"
type="textarea"
:rows="3"
placeholder="请输入调用目标"
:placeholder="$t('page.form.placeholderTarget')"
/>
</el-form-item>
<el-form-item label="任务参数" prop="params">
<el-form-item :label="$t('page.form.labelParams')" prop="params">
<el-input
v-model="formData.parameter"
type="textarea"
:rows="3"
placeholder="请输入任务参数"
:placeholder="$t('page.form.placeholderParams')"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item :label="$t('page.form.labelStatus')" prop="status">
<sa-radio v-model="formData.status" dict="data_status" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" :rows="2" placeholder="请输入备注" />
<el-form-item :label="$t('page.form.labelRemark')" prop="remark">
<el-input
v-model="formData.remark"
type="textarea"
:rows="2"
:placeholder="$t('page.form.placeholderRemark')"
/>
</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>
@@ -130,6 +135,7 @@
import api from '@/api/tool/crontab'
import { ElMessage } from 'element-plus'
import type { FormInstance, FormRules } from 'element-plus'
import { useI18n } from 'vue-i18n'
interface Props {
modelValue: boolean
@@ -149,6 +155,7 @@
})
const emit = defineEmits<Emits>()
const { t } = useI18n()
const formRef = ref<FormInstance>()
@@ -163,12 +170,12 @@
/**
* 表单验证规则
*/
const rules = reactive<FormRules>({
name: [{ required: true, message: '任务名称不能为空', trigger: 'blur' }],
type: [{ required: true, message: '任务类型不能为空', trigger: 'blur' }],
task_style: [{ required: true, message: '定时规则不能为空', trigger: 'blur' }],
target: [{ required: true, message: '调用目标不能为空', trigger: 'blur' }]
})
const rules = computed<FormRules>(() => ({
name: [{ required: true, message: t('page.form.ruleNameRequired'), trigger: 'blur' }],
type: [{ required: true, message: t('page.form.ruleTypeRequired'), trigger: 'blur' }],
task_style: [{ required: true, message: t('page.form.ruleTaskStyleRequired'), trigger: 'blur' }],
target: [{ required: true, message: t('page.form.ruleTargetRequired'), trigger: 'blur' }]
}))
/**
* 初始数据
@@ -264,10 +271,10 @@
await formRef.value.validate()
if (props.dialogType === 'add') {
await api.save(formData)
ElMessage.success('新增成功')
ElMessage.success(t('page.form.addSuccess'))
} else {
await api.update(formData)
ElMessage.success('修改成功')
ElMessage.success(t('page.form.editSuccess'))
}
emit('success')
handleClose()