Browse Source

对所有小数点不能输入处理+设置数据负数处理

lihuilin/feature-20250718094329-25周年庆后台
wangxiangwen 3 weeks ago
parent
commit
b33b620b2e
  1. 2
      activitylink/src/views/zhongchou/activity/index.vue
  2. 138
      activitylink/src/views/zhongchou/activity/set/index.vue
  3. 77
      activitylink/src/views/zhongchou/level/index.vue

2
activitylink/src/views/zhongchou/activity/index.vue

@ -240,7 +240,6 @@ const addActivity = async () => {
});
if (!valid) {
ElMessage.warning('请填写完整表单');
return;
}
@ -259,6 +258,7 @@ const addActivity = async () => {
if (response.code === 200) {
ElMessage.success('活动添加成功');
centerDialogVisible.value = false;
resetForm();
fetchActivityList();
} else {
ElMessage.error(response.message || '活动添加失败');

138
activitylink/src/views/zhongchou/activity/set/index.vue

@ -10,35 +10,34 @@
<div class="setting-item">
<label>初始数据</label>
<div v-if="!isInitialDataSet">
<el-input-number :precision="0" v-model="setinitiaData" placeholder="分钟" size="large"></el-input-number>
&nbsp;&nbsp;分钟
&nbsp;&nbsp;&nbsp;&nbsp;
<el-button type="primary" @click="openInitialConfirmDialog">确认</el-button>
</div>
<div v-if="isInitialDataSet">{{ initialData }}分钟</div>
<div>{{ initialData }}分钟</div>
</div>
<!-- 市场一 -->
<div class="setting-item">
<label>当前{{ marketOneName }}市场助力次数{{ markerOneTotal }} </label>
<el-input-number :precision="0" v-model="addCountOne" placeholder="设置添加次数" size="large"></el-input-number>
&nbsp;&nbsp;&nbsp;&nbsp;
<el-button type="primary" @click="openConfirmDialog('one')">确认</el-button>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>前端展示次数{{ showOne }} </label>
</div>
<!-- 市场二 -->
<div class="setting-item">
<label>当前{{ marketTwoName }}市场助力次数{{ markerTwoTotal }} </label>
<el-input-number :precision="0" v-model="addCountTwo" placeholder="设置添加次数" size="large"></el-input-number>
&nbsp;&nbsp;&nbsp;&nbsp;
<el-button type="primary" @click="openConfirmDialog('two')">确认</el-button>
&nbsp;&nbsp;&nbsp;&nbsp;
<label>前端展示次数{{ showTwo }} </label>
</div>
<!-- 市场一 -->
<div class="setting-item">
<label class="fixed-label">当前{{ marketOneName }}市场助力次数{{ markerOneTotal }} </label>
<el-input v-model="addCountOne"
placeholder="设置添加次数"
size="large"
class="fixed-input"
@input="handleIntegerInput1"></el-input>
<el-button type="primary" @click="openConfirmDialog('one')" class="fixed-button">确认</el-button>
<label class="fixed-label">前端展示次数{{ showOne }} </label>
</div>
<!-- 市场二 -->
<div class="setting-item">
<label class="fixed-label">当前{{ marketTwoName }}市场助力次数{{ markerTwoTotal }} </label>
<el-input v-model="addCountTwo"
placeholder="设置添加次数"
size="large"
class="fixed-input"
@input="handleIntegerInput2"></el-input>
<el-button type="primary" @click="openConfirmDialog('two')" class="fixed-button">确认</el-button>
<label class="fixed-label">前端展示次数{{ showTwo }} </label>
</div>
<!-- 时间数据 -->
<!-- <div class="setting-item">
@ -57,7 +56,7 @@
</el-dialog>
<!-- 初始数据确认对话框 -->
<el-dialog v-model="showInitialConfirmDialog" title="确认设置初始数据" width="30%" @closed="cancelset">
<!-- <el-dialog v-model="showInitialConfirmDialog" title="确认设置初始数据" width="30%" @closed="cancelset">
<span>您确定要设置初始数据为 {{ setinitiaData }} 分钟吗只能修改一次</span>
<template #footer>
<span class="dialog-footer">
@ -65,7 +64,7 @@
<el-button type="primary" @click="confirmInitialData"> </el-button>
</span>
</template>
</el-dialog>
</el-dialog> -->
</div>
</el-card>
</template>
@ -132,7 +131,62 @@ const marketTwoName = ref('');
// }
// };
const timerOne = ref(null);
const timerTwo = ref(null);
const handleIntegerInput1 = (value) => {
//
if (timerOne.value) {
clearTimeout(timerOne.value);
}
// 1.
let filtered = value.replace(/[^-0-9]/g, '');
// 2.
if (filtered.includes('-')) {
const firstChar = filtered[0];
const rest = filtered.slice(1).replace(/-/g, ''); //
filtered = firstChar === '-' ? '-' + rest : rest;
}
// 3. '-'
if (filtered === '-') {
timerOne.value = setTimeout(() => {
addCountOne.value = '';
timerOne.value = null;
}, 1000); // 200ms
} else {
// 4.
addCountOne.value = filtered;
}
};
const handleIntegerInput2 = (value) => {
//
if (timerTwo.value) {
clearTimeout(timerTwo.value);
}
//
let filtered = value.replace(/[^-0-9]/g, '');
if (filtered.includes('-')) {
const firstChar = filtered[0];
const rest = filtered.slice(1).replace(/-/g, '');
filtered = firstChar === '-' ? '-' + rest : rest;
}
// '-'
if (filtered === '-') {
timerTwo.value = setTimeout(() => {
addCountTwo.value = '';
timerTwo.value = null;
}, 1000); // 200ms
} else {
addCountTwo.value = filtered;
}
};
const fetchData = async () => {
try {
//
@ -382,6 +436,34 @@ const goBack = () => {
flex: 0 0 auto;
}
.setting-item {
display: flex;
align-items: center;
margin-bottom: 25px;
}
.fixed-label {
width: 250px; /* 固定宽度 */
text-align: left; /* 右对齐,更美观 */
margin-right: 20px; /* 固定间距 */
white-space: nowrap; /* 防止换行 */
}
.fixed-input {
width: 230px; /* 固定宽度 */
margin-right: 30px; /* 固定间距 */
}
.fixed-button {
margin-right: 20px; /* 固定间距 */
}
/* 确保最后一个 label 不需要右边距 */
.setting-item .fixed-label:last-child {
margin-right: 0;
}
h3 {
font-size: 1.8rem;
margin-bottom: 20px;

77
activitylink/src/views/zhongchou/level/index.vue

@ -43,16 +43,28 @@
<el-input v-model="addForm.gradeName" placeholder="请输入等级名称"></el-input>
</el-form-item>
<el-form-item label="数量" align="center">
<el-input-number v-model="addForm.amount" :precision="0" :min="0" placeholder="请输入数量"
style="width: 100%;"></el-input-number>
<el-input
v-model="addForm.amount"
@input="(val) => handleNumberInput('amount', val, addForm, 99999)"
placeholder="请输入数量"
style="width: 100%;"
></el-input>
</el-form-item>
<el-form-item label="每轮抽取人数" align="center">
<el-input-number v-model="addForm.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
style="width: 100%;"></el-input-number>
<el-input
v-model="addForm.perWin"
@input="(val) => handleNumberInput('perWin', val, addForm, 500)"
placeholder="请输入抽取人数"
style="width: 100%;"
></el-input>
</el-form-item>
<el-form-item label="排序" align="center">
<el-input-number v-model="addForm.sort" :precision="0" :min="0" placeholder="请输入排序等级"
style="width: 100%;"></el-input-number>
<el-input
v-model="addForm.sort"
@input="(val) => handleNumberInput('sort', val, addForm, 100000000)"
placeholder="请输入排序等级"
style="width: 100%;"
></el-input>
</el-form-item>
</el-form>
<template #footer>
@ -69,16 +81,28 @@
<el-input v-model="editForm.gradeName" placeholder="请输入等级名称"></el-input>
</el-form-item>
<el-form-item label="数量" align="center">
<el-input-number v-model="editForm.amount" :precision="0" :min="0" placeholder="请输入数量"
style="width: 100%;"></el-input-number>
<el-input
v-model="editForm.amount"
@input="(val) => handleNumberInput('amount', val, editForm, 99999)"
placeholder="请输入数量"
style="width: 100%;"
></el-input>
</el-form-item>
<el-form-item label="每轮抽取人数" align="center">
<el-input-number v-model="editForm.perWin" :precision="0" :min="0" placeholder="请输入抽取人数"
style="width: 100%;"></el-input-number>
<el-input
v-model="editForm.perWin"
@input="(val) => handleNumberInput('perWin', val, editForm, 500)"
placeholder="请输入抽取人数"
style="width: 100%;"
></el-input>
</el-form-item>
<el-form-item label="排序" align="center">
<el-input-number v-model="editForm.sort" :precision="0" :min="0" placeholder="请输入排序等级"
style="width: 100%;"></el-input-number>
<el-input
v-model="editForm.sort"
@input="(val) => handleNumberInput('sort', val, editForm, 100000000)"
placeholder="请输入排序等级"
style="width: 100%;"
></el-input>
</el-form-item>
</el-form>
<template #footer>
@ -125,9 +149,9 @@ const editLevel = (row) => {
editForm.value = {
id: row.id,
gradeName: row.gradeName,
amount: row.amount,
perWin: row.perWin,
sort: row.sort
amount: String(row.amount),
perWin: String(row.perWin),
sort: String(row.sort)
}
editVisible.value = true
}
@ -249,6 +273,29 @@ const deleteLevel = (row) => {
})
}
//
const handleNumberInput = (field, value, form, maxValue) => {
// 1.
let filteredValue = value.replace(/[^\d]/g, '');
// 2.
if (filteredValue === '') {
form[field] = '';
return;
}
// 3.
let numValue = Number(filteredValue);
// 4.
if (numValue > maxValue) {
form[field] = String(maxValue);
} else {
// 5.
form[field] = numValue === 0 ? '0' : filteredValue.replace(/^0+/, '') || '0';
}
};
//
const resetForm = () => {
addForm.value = {

Loading…
Cancel
Save