更新前端

This commit is contained in:
2026-04-27 10:50:32 +08:00
parent f25aaaa028
commit 1b78ad1626
8 changed files with 545 additions and 566 deletions
@@ -1,5 +1,5 @@
<script setup>
import { computed, reactive, watch } from 'vue';
import { computed, reactive, watch } from "vue";
const props = defineProps({
modelValue: {
@@ -8,35 +8,35 @@ const props = defineProps({
},
mode: {
type: String,
default: 'single', // single | batch
default: "single", // single | batch
},
});
const emit = defineEmits(['update:modelValue', 'submit']);
const emit = defineEmits(["update:modelValue", "submit"]);
const form = reactive({
type: 'account', // account | tk | account_tk
account: '',
password: '',
token: '',
batchText: '',
remark: '',
type: "tk", // account | tk | account_tk
account: "",
password: "",
token: "",
batchText: "",
remark: "",
});
const isBatch = computed(() => props.mode === 'batch');
const isBatch = computed(() => props.mode === "batch");
const dialogTitle = computed(() => {
return isBatch.value ? '批量添加账号' : '添加账号';
return isBatch.value ? "批量添加账号" : "添加账号";
});
const formatExample = computed(() => {
if (form.type === 'account') {
return 'account,password';
if (form.type === "account") {
return "account,password";
}
if (form.type === 'account_tk') {
return 'account,password,token';
if (form.type === "account_tk") {
return "account,password,token";
}
return 'token';
return "token";
});
watch(
@@ -44,20 +44,20 @@ watch(
(visible) => {
if (!visible) return;
resetForm();
}
},
);
function closeDialog() {
emit('update:modelValue', false);
emit("update:modelValue", false);
}
function resetForm() {
form.type = 'account';
form.account = '';
form.password = '';
form.token = '';
form.batchText = '';
form.remark = '';
form.type = "tk";
form.account = "";
form.password = "";
form.token = "";
form.batchText = "";
form.remark = "";
}
function parseBatchRows() {
@@ -70,32 +70,32 @@ function parseBatchRows() {
const errors = [];
rows.forEach((line, index) => {
if (form.type === 'account') {
const [account, password] = line.split(',').map((x) => (x || '').trim());
if (form.type === "account") {
const [account, password] = line.split(",").map((x) => (x || "").trim());
if (!account || !password) {
errors.push(`${index + 1} 行格式错误,应为 account,password`);
return;
}
parsed.push({
type: 'account',
type: "account",
account,
password,
token: '',
token: "",
remark: form.remark,
});
return;
}
if (form.type === 'account_tk') {
if (form.type === "account_tk") {
const [account, password, token] = line
.split(',')
.map((x) => (x || '').trim());
.split(",")
.map((x) => (x || "").trim());
if (!account || !password || !token) {
errors.push(`${index + 1} 行格式错误,应为 account,password,token`);
return;
}
parsed.push({
type: 'account_tk',
type: "account_tk",
account,
password,
token,
@@ -105,9 +105,9 @@ function parseBatchRows() {
}
parsed.push({
type: 'tk',
account: '',
password: '',
type: "tk",
account: "",
password: "",
token: line,
remark: form.remark,
});
@@ -118,18 +118,18 @@ function parseBatchRows() {
function handleSubmit() {
if (!isBatch.value) {
if (form.type === 'account') {
if (form.type === "account") {
if (!form.account || !form.password) {
return;
}
emit('submit', {
mode: 'single',
emit("submit", {
mode: "single",
rows: [
{
type: 'account',
type: "account",
account: form.account.trim(),
password: form.password.trim(),
token: '',
token: "",
remark: form.remark.trim(),
},
],
@@ -138,15 +138,15 @@ function handleSubmit() {
return;
}
if (form.type === 'account_tk') {
if (form.type === "account_tk") {
if (!form.account || !form.password || !form.token) {
return;
}
emit('submit', {
mode: 'single',
emit("submit", {
mode: "single",
rows: [
{
type: 'account_tk',
type: "account_tk",
account: form.account.trim(),
password: form.password.trim(),
token: form.token.trim(),
@@ -159,13 +159,13 @@ function handleSubmit() {
}
if (!form.token) return;
emit('submit', {
mode: 'single',
emit("submit", {
mode: "single",
rows: [
{
type: 'tk',
account: '',
password: '',
type: "tk",
account: "",
password: "",
token: form.token.trim(),
remark: form.remark.trim(),
},
@@ -179,8 +179,8 @@ function handleSubmit() {
if (errors.length || parsed.length === 0) {
return;
}
emit('submit', {
mode: 'batch',
emit("submit", {
mode: "batch",
rows: parsed,
});
closeDialog();
@@ -198,19 +198,27 @@ function handleSubmit() {
<el-form label-width="96px">
<el-form-item label="账号类型">
<el-radio-group v-model="form.type">
<el-radio value="tk">Token</el-radio>
<el-radio value="account">账号密码</el-radio>
<el-radio value="account_tk">账号密码+Token</el-radio>
<el-radio value="tk">Token</el-radio>
</el-radio-group>
</el-form-item>
<template v-if="!isBatch">
<template v-if="form.type === 'account' || form.type === 'account_tk'">
<el-form-item label="账号">
<el-input v-model="form.account" placeholder="请输入账号" clearable />
<el-input
v-model="form.account"
placeholder="请输入账号"
clearable
/>
</el-form-item>
<el-form-item label="密码">
<el-input v-model="form.password" placeholder="请输入密码" clearable />
<el-input
v-model="form.password"
placeholder="请输入密码"
clearable
/>
</el-form-item>
<el-form-item v-if="form.type === 'account_tk'" label="Token">
<el-input
@@ -0,0 +1,49 @@
<script setup>
const props = defineProps({
modelValue: { type: Boolean, default: false },
loading: { type: Boolean, default: false },
type: { type: String, default: 'tk' },
platform: { type: String, default: 'local' },
remark: { type: String, default: '' },
platformMap: { type: Object, default: () => ({}) },
});
const emit = defineEmits(['update:modelValue', 'update:type', 'update:platform', 'update:remark', 'confirm']);
</script>
<template>
<el-dialog
:model-value="modelValue"
title="补号"
width="420px"
@update:model-value="(v) => emit('update:modelValue', v)"
>
<el-form label-width="84px">
<el-form-item label="账号类型">
<el-select :model-value="type" style="width: 100%" @update:model-value="(v) => emit('update:type', v)">
<el-option label="Token" value="tk" />
<el-option label="账号密码" value="account" />
<el-option label="账号密码+Token" value="account_tk" />
</el-select>
</el-form-item>
<el-form-item label="提取平台">
<el-select :model-value="platform" style="width: 100%" @update:model-value="(v) => emit('update:platform', v)">
<el-option v-for="(v, k) in platformMap" :key="k" :value="k" :label="v.label" />
</el-select>
</el-form-item>
<el-form-item label="备注">
<el-input
:model-value="remark"
type="textarea"
:rows="3"
placeholder="提取备注可选"
@update:model-value="(v) => emit('update:remark', v)"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="emit('update:modelValue', false)">取消</el-button>
<el-button type="warning" :loading="loading" @click="emit('confirm')">确认补号</el-button>
</template>
</el-dialog>
</template>