Files
SEONexusAdmin/src/views/novel/setDrawer.vue
Your Name 845d68110b debug
2026-04-15 12:00:09 +08:00

88 lines
2.7 KiB
Vue

<template>
<el-drawer v-model="drawerVisible" :destroy-on-close="true" size="720" :title="drawerProps.title">
<el-form
ref="ruleFormRef"
label-width="150px"
label-suffix=" :"
:rules="rules"
:disabled="drawerProps.isView"
:model="drawerProps.row"
:hide-required-asterisk="drawerProps.isView"
>
<el-form-item label="推荐等级" prop="n_level" required>
<el-input v-model="drawerProps.row.n_level" type="number" placeholder="请输入推荐等级" clearable />
</el-form-item>
<el-form-item label="小说名称" prop="keywords" required>
<el-input
v-model="drawerProps.row.keywords"
type="textarea"
:rows="16"
maxlength="365000"
placeholder="请输入小说名称,多个使用英文逗号分隔"
show-word-limit
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="drawerVisible = false">取消</el-button>
<el-button v-show="!drawerProps.isView" type="primary" @click="handleSubmit">确定</el-button>
</template>
</el-drawer>
</template>
<script setup lang="ts" name="NovelLevelBatchDrawer">
import { reactive, ref } from "vue";
import { ElMessage, FormInstance } from "element-plus";
import { NovelList } from "@/api/interface/novel/list";
const rules = reactive({
n_level: [{ required: true, message: "请输入推荐等级" }],
keywords: [{ required: true, message: "请输入小说名称" }]
});
interface DrawerProps {
title: string;
isView: boolean;
row: Partial<NovelList.ResList>;
api?: (params: any) => Promise<any>;
getTableList?: () => void;
successMessage?: string;
}
const drawerVisible = ref(false);
const drawerProps = ref<DrawerProps>({
isView: false,
title: "",
row: {}
});
const acceptParams = (params: DrawerProps) => {
drawerProps.value = {
...params,
row: { ...params.row }
};
drawerVisible.value = true;
};
const ruleFormRef = ref<FormInstance>();
const handleSubmit = () => {
ruleFormRef.value!.validate(async valid => {
if (!valid) return;
try {
await drawerProps.value.api!({ ...drawerProps.value.row });
ElMessage.success({
message: drawerProps.value.successMessage || `${drawerProps.value.title}完成,已刷新列表`
});
drawerProps.value.getTableList!();
drawerVisible.value = false;
} catch (_error) {
return;
}
});
};
defineExpose({
acceptParams
});
</script>