|
|
|
@ -1,13 +1,16 @@ |
|
|
|
<script setup> |
|
|
|
import {onMounted, reactive, ref} from 'vue' |
|
|
|
import {ElMessage, ElMessageBox} from 'element-plus' |
|
|
|
import { onMounted, reactive, ref } from 'vue' |
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus' |
|
|
|
import request from '@/util/http' |
|
|
|
import {useAdminStore} from "@/store/index.js"; |
|
|
|
import {storeToRefs} from "pinia"; |
|
|
|
import {permissionMapping, hasMenuPermission} from "@/utils/menuTreePermission.js" |
|
|
|
import { useAdminStore } from "@/store/index.js"; |
|
|
|
import { storeToRefs } from "pinia"; |
|
|
|
import { permissionMapping, hasMenuPermission } from "@/utils/menuTreePermission.js" |
|
|
|
import { useI18n } from 'vue-i18n' |
|
|
|
const { t } = useI18n() |
|
|
|
|
|
|
|
|
|
|
|
const adminStore = useAdminStore() |
|
|
|
const {adminData, menuTree} = storeToRefs(adminStore) |
|
|
|
const { adminData, menuTree } = storeToRefs(adminStore) |
|
|
|
const regeEdit = ref(false) |
|
|
|
const editFormRef = ref(null) |
|
|
|
const tableData = ref([]) |
|
|
|
@ -66,16 +69,16 @@ const rateNames = [ |
|
|
|
// 汇率校验 |
|
|
|
const checkFreeGoldRadio = function (rule, value, callback) { |
|
|
|
if (value == '0' || value == null || value == '') { |
|
|
|
callback(new Error('请输入汇率比')) |
|
|
|
callback(new Error(t('elmessage.pleaseInputRate'))) |
|
|
|
} else if (value < 0 || isNaN(value)) { |
|
|
|
callback(new Error('请输入正确的格式')) |
|
|
|
callback(new Error(t('elmessage.pleaseInputCorrectRateFormat'))) |
|
|
|
} else { |
|
|
|
callback() |
|
|
|
} |
|
|
|
} |
|
|
|
// 定义表单验证规则 |
|
|
|
const rules = reactive({ |
|
|
|
num: [{validator: checkFreeGoldRadio, trigger: 'blur'}], |
|
|
|
num: [{ validator: checkFreeGoldRadio, trigger: 'blur' }], |
|
|
|
}) |
|
|
|
// 表单大小 |
|
|
|
const formSize = ref('default') |
|
|
|
@ -94,7 +97,7 @@ const getAllRate = async function (val) { |
|
|
|
total.value = result.data.total |
|
|
|
} catch (error) { |
|
|
|
console.log('请求失败', error); |
|
|
|
ElMessage.error('请求失败'); |
|
|
|
ElMessage.error(t('elmessage.requestFailed')); |
|
|
|
} |
|
|
|
} |
|
|
|
const handlePageSizeChange = function (val) { |
|
|
|
@ -110,7 +113,7 @@ const getEditData = async function (row) { |
|
|
|
console.log('搜索参数', getObj.value) |
|
|
|
const result = await request({ |
|
|
|
url: '/rate/selectById', |
|
|
|
data: {id: row.id} |
|
|
|
data: { id: row.id } |
|
|
|
}) |
|
|
|
console.log('根据id查 请求成功', result) |
|
|
|
rateEdit.value.id = row.id |
|
|
|
@ -135,7 +138,7 @@ const initPermissions = () => { |
|
|
|
// 编辑汇率 |
|
|
|
const editRate = async function () { |
|
|
|
if (!hasrateEdit) { |
|
|
|
ElMessage.error('暂无权限') |
|
|
|
ElMessage.error(t('elmessage.noPermission')) |
|
|
|
return |
|
|
|
} |
|
|
|
// 提交前验证 汇率是否为数字 |
|
|
|
@ -200,18 +203,18 @@ function formatDate(value) { |
|
|
|
function handleInput(value) { |
|
|
|
// 检查是否使用了中文句号 |
|
|
|
if (value.includes('。') || /[^\d.]/g.test(value)) { |
|
|
|
ElMessage.warning('请输入正确的符号'); |
|
|
|
ElMessage.warning(t('elmessage.pleaseInputCorrectSymbol')); |
|
|
|
// value = value.replace('。', '.'); |
|
|
|
} |
|
|
|
// 处理多个小数点的情况,保留第一个,移除后续的 |
|
|
|
const parts = value.split('.'); |
|
|
|
if (parts.length > 2) { |
|
|
|
value = parts[0] + '.' + parts.slice(1).join(''); |
|
|
|
ElMessage.warning('只能包含一个小数点'); |
|
|
|
ElMessage.warning(t('elmessage.onlyOneDecimalPoint')); |
|
|
|
} |
|
|
|
// 禁止输入负数 |
|
|
|
if (value.startsWith('-')) { |
|
|
|
ElMessage.warning('不允许输入负数'); |
|
|
|
ElMessage.warning(t('elmessage.noNegativeNumber')); |
|
|
|
value = value.substring(1); |
|
|
|
} |
|
|
|
// 最多两位小数,超过时才显示提示 |
|
|
|
@ -220,13 +223,13 @@ function handleInput(value) { |
|
|
|
// 限制整数部分最多六位 |
|
|
|
if (parts[0].length > 6) { |
|
|
|
parts[0] = parts[0].slice(0, 6) |
|
|
|
ElMessage.info('整数部分最多允许六位') |
|
|
|
ElMessage.info(t('elmessage.integerPartLimit')) |
|
|
|
} |
|
|
|
// 限制小数部分最多两位 |
|
|
|
if (parts[1].length > 7) { |
|
|
|
parts[1] = parts[1].slice(0, 7) |
|
|
|
value = parts[0] + '.' + parts[1] |
|
|
|
ElMessage.info('最多允许七位小数') |
|
|
|
ElMessage.info(t('elmessage.decimalPartLimit')) |
|
|
|
} else { |
|
|
|
value = parts[0] + '.' + parts[1] |
|
|
|
} |
|
|
|
@ -234,7 +237,7 @@ function handleInput(value) { |
|
|
|
// 纯整数时限制最多六位 |
|
|
|
if (value.length > 6) { |
|
|
|
value = value.slice(0, 6) |
|
|
|
ElMessage.info('整数部分最多允许六位') |
|
|
|
ElMessage.info(t('elmessage.integerPartLimit')) |
|
|
|
} |
|
|
|
} |
|
|
|
// 小数点前没有数字时补0 |
|
|
|
@ -258,15 +261,15 @@ onMounted(async function () { |
|
|
|
<template> |
|
|
|
<el-card class="card2" style="width:81vw;height:92vh" v-if="hasrateShow"> |
|
|
|
<el-table :data="tableData" v-if="(tableData.flag = 1)"> |
|
|
|
<el-table-column type="index" label="序号" width="100px" fixed="left"> |
|
|
|
<el-table-column type="index" :label="t('common_list.id')" width="100px" fixed="left"> |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ |
|
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize |
|
|
|
}}</span> |
|
|
|
scope.$index + 1 + (getObj.pageNum - 1) * getObj.pageSize |
|
|
|
}}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column prop="rateName" label="货币名称" :span="2"/> |
|
|
|
<el-table-column prop="num" label="汇率" :span="2"> |
|
|
|
<el-table-column prop="rateName" :label="t('common_list.rateName')" :span="2" /> |
|
|
|
<el-table-column prop="num" :label="t('common_list.num')" :span="2"> |
|
|
|
<template #default="scope"> |
|
|
|
<p> |
|
|
|
{{ scope.row.num }} :1 |
|
|
|
@ -274,17 +277,17 @@ onMounted(async function () { |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
<el-table-column prop="updateTime" label="更新时间" :span="3"> |
|
|
|
<el-table-column prop="updateTime" :label="t('common_list.updateTime')" :span="3"> |
|
|
|
<template #default="scope"> |
|
|
|
<span>{{ formatDate(scope.row.updateTime) }}</span> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
<el-table-column v-if="hasrateEdit" label="操作" :span="3"> |
|
|
|
<el-table-column v-if="hasrateEdit" :label="t('common_list.operation')" :span="3"> |
|
|
|
<template #default="scope"> |
|
|
|
<el-link :underline="false" class="edit-btn" @click="() => { |
|
|
|
regeEdit = true |
|
|
|
getEditData(scope.row) |
|
|
|
}">编辑 |
|
|
|
}">{{ t('common.edit') }} |
|
|
|
</el-link> |
|
|
|
</template> |
|
|
|
</el-table-column> |
|
|
|
@ -293,40 +296,40 @@ onMounted(async function () { |
|
|
|
<!-- 分页 --> |
|
|
|
<div class="pagination"> |
|
|
|
<el-pagination background :page-size="getObj.pageSize" :page-sizes="[5, 10, 20, 50, 100]" |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" |
|
|
|
@current-change="handleCurrentChange"></el-pagination> |
|
|
|
layout="total, sizes, prev, pager, next, jumper" :total="total" @size-change="handlePageSizeChange" |
|
|
|
@current-change="handleCurrentChange"></el-pagination> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
|
|
|
|
<!-- 这是编辑弹窗 --> |
|
|
|
<el-dialog align-center v-model="regeEdit" title="修改汇率" width="30vw" :close-on-click-modal="false" |
|
|
|
@close="handleEditDialogClose"> |
|
|
|
<el-dialog align-center v-model="regeEdit" :title="t('rate.modifyRate')" width="30vw" :close-on-click-modal="false" |
|
|
|
@close="handleEditDialogClose"> |
|
|
|
<el-form ref="editFormRef" :model="rateEdit" :rules="rules" label-width="auto" class="edit-form" :size="formSize" |
|
|
|
status-icon> |
|
|
|
<el-form-item prop="rateName" label="货币名称:"> |
|
|
|
<el-input v-model="rateEdit.rateName" disabled style="width: 10vw"/> |
|
|
|
status-icon> |
|
|
|
<el-form-item prop="rateName" :label="t('common_list.rateName')"> |
|
|
|
<el-input v-model="rateEdit.rateName" disabled style="width: 10vw" /> |
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item prop="num" label="汇率:"> |
|
|
|
<el-input v-model="rateEdit.num" @update:modelValue="handleInput" style="width: 120px"/> |
|
|
|
<el-form-item prop="num" :label="t('common_list.num')"> |
|
|
|
<el-input v-model="rateEdit.num" @update:modelValue="handleInput" style="width: 120px" /> |
|
|
|
<span class="unit">:1</span> |
|
|
|
<span class="rate-tip"> |
|
|
|
(提示:当前规则每 |
|
|
|
<span>{{ rateEdit.num }}</span> |
|
|
|
<span>{{ rateEdit.rateName }}</span>可兑换 1 新币) |
|
|
|
</span> |
|
|
|
</el-form-item> |
|
|
|
<div class="rate-tip"> |
|
|
|
{{ t('rate.prompt1') }} |
|
|
|
<span>{{ rateEdit.num }}</span> |
|
|
|
<span>{{ rateEdit.rateName }}</span>{{ t('rate.prompt2') }} |
|
|
|
</div> |
|
|
|
|
|
|
|
</el-form> |
|
|
|
<div class="dialog-footer"> |
|
|
|
<el-button type="primary" @click="edit">修改</el-button> |
|
|
|
<el-button @click="cancelEdit">取消</el-button> |
|
|
|
<el-button type="primary" @click="edit">{{ t('common.modify') }}</el-button> |
|
|
|
<el-button @click="cancelEdit">{{ t('common.cancel') }}</el-button> |
|
|
|
</div> |
|
|
|
</el-dialog> |
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<style scoped> |
|
|
|
|
|
|
|
.card1 { |
|
|
|
background: #F3FAFE; |
|
|
|
} |
|
|
|
@ -334,7 +337,7 @@ onMounted(async function () { |
|
|
|
:deep(.el-table__header-wrapper), |
|
|
|
:deep(.el-table__body-wrapper), |
|
|
|
:deep(.el-table__cell), |
|
|
|
/* 表格 */ |
|
|
|
/* 表格 */ |
|
|
|
:deep(.el-table__body td) { |
|
|
|
background-color: #F3FAFE !important; |
|
|
|
} |
|
|
|
@ -371,6 +374,7 @@ onMounted(async function () { |
|
|
|
|
|
|
|
.rate-tip { |
|
|
|
hyphens: auto; |
|
|
|
margin-left: 1.4vw; |
|
|
|
} |
|
|
|
|
|
|
|
/**表单的卡片样式**/ |
|
|
|
@ -383,7 +387,7 @@ onMounted(async function () { |
|
|
|
:deep(.el-table__header-wrapper), |
|
|
|
:deep(.el-table__body-wrapper), |
|
|
|
:deep(.el-table__cell), |
|
|
|
/* 表格 */ |
|
|
|
/* 表格 */ |
|
|
|
:deep(.el-table__body td) { |
|
|
|
background-color: #F3FAFE !important; |
|
|
|
} |
|
|
|
@ -397,5 +401,4 @@ onMounted(async function () { |
|
|
|
:deep(.el-table__row:hover > .el-table__cell) { |
|
|
|
background-color: #E5EBFE !important; |
|
|
|
} |
|
|
|
|
|
|
|
</style> |