<template> <div class="tenant"> <!-- <Banner /> --> <div class="content"> <byTable :source="sourceList.data" :pagination="sourceList.pagination" :config="config" :loading="loading" highlight-current-row :selectConfig="selectConfig" :table-events="{ //element talbe事件都能传 select: select, }" :action-list="[ { text: '添加邮箱', action: () => openModal('add'), }, ]" @get-list="getList" > <template #slotName="{ item }"> {{ item.createTime }} </template> </byTable> </div> <el-dialog :title="modalType == 'add' ? '添加邮箱' : '编辑邮箱'" v-model="dialogVisible" width="400" v-loading="loading" > <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="byform" > <template #rSlot> <el-row style="width: 100%" :gutter="15"> <el-col :span="10"> <el-select v-model="formData.data.receiveProtocol" placeholder="收件协议" disabled > </el-select> </el-col> <el-col :span="10"> <el-input v-model="formData.data.receivePort" placeholder="请输入" > </el-input> </el-col> </el-row> </template> <template #sSlot> <el-row style="width: 100%" :gutter="15"> <el-col :span="10"> <el-select v-model="formData.data.sendProtocol" placeholder="发件协议" disabled > </el-select> </el-col> <el-col :span="10"> <el-input v-model="formData.data.sendPort" placeholder="请输入"> </el-input> </el-col> </el-row> </template> </byForm> <template #footer> <el-button @click="dialogVisible = false" size="large">取 消</el-button> <el-button type="primary" v-no-double-click="submitForm" size="large" :loading="submitLoading" > 确 定 </el-button> </template> </el-dialog> </div> </template> <script setup> /* eslint-disable vue/no-unused-components */ import { ElMessage, ElMessageBox } from "element-plus"; import byTable from "@/components/byTable/index"; import byForm from "@/components/byForm/index"; import { computed, defineComponent, ref } from "vue"; import { validEmail } from "@/utils/validate.js"; const loading = ref(false); const submitLoading = ref(false); const sourceList = ref({ data: [], pagination: { total: 3, pageNum: 1, pageSize: 10, }, }); let dialogVisible = ref(false); let modalType = ref("add"); let rules = ref({ mailUser: [{ required: true, message: "请输入邮箱地址", trigger: "blur" }], type: [{ required: true, message: "请选择邮箱类型", trigger: "change" }], mailPassword: [{ required: true, message: "请输入授权码", trigger: "blur" }], receiveHost: [ { required: true, message: "请输入收件服务器地址", trigger: "blur" }, ], receivePort: [{ required: true, message: "请输入收件端口", trigger: "blur" }], receiveProtocol: [ { required: true, message: "请输入收件协议", trigger: "blur" }, ], sendHost: [ { required: true, message: "请输入发件服务器地址", trigger: "blur" }, ], sendPort: [{ required: true, message: "请输入发件端口", trigger: "blur" }], sendProtocol: [ { required: true, message: "请输入发件协议", trigger: "blur" }, ], }); const { proxy } = getCurrentInstance(); const selectConfig = []; const config = computed(() => { return [ { attrs: { label: "邮箱地址", prop: "mailUser", }, }, { attrs: { label: "海外邮箱", prop: "type", }, render(type) { return type == 2 ? "是" : "否"; }, }, { attrs: { label: "授权码", prop: "mailPassword", }, }, { attrs: { label: "收件协议", prop: "receiveProtocol", }, }, { attrs: { label: "收件端口号", prop: "receivePort", }, }, { attrs: { label: "发件协议", prop: "sendProtocol", }, }, { attrs: { label: "发件端口号", prop: "sendPort", }, }, { attrs: { label: "操作", width: "200", align: "right", }, // 渲染 el-button,一般用在最后一列。 renderHTML(row) { return [ { attrs: { label: "修改", type: "primary", text: true, }, el: "button", click() { getDtl(row); }, }, { attrs: { label: "删除", type: "danger", text: true, }, el: "button", click() { // 弹窗提示是否删除 ElMessageBox.confirm( "此操作将永久删除该数据, 是否继续?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", } ).then(() => { // 删除 proxy .post("/personalMailbox/delete", { id: row.id, }) .then((res) => { ElMessage({ message: "删除成功", type: "success", }); getList(); }); }); }, }, ]; }, }, ]; }); let formData = reactive({ data: {}, }); const formOption = reactive({ inline: true, labelWidth: 100, itemWidth: 100, rules: [], }); const byform = ref(null); const formConfig = computed(() => { return [ { type: "input", prop: "mailUser", label: "邮箱地址", required: true, }, { type: "radio", prop: "type", label: "是否海外邮箱", required: true, border: true, data: [ { label: "是", value: "2" }, { label: "否", value: "1" }, ], }, { type: "input", prop: "mailPassword", label: "授权码", required: true, }, { type: "input", prop: "receiveHost", label: "收件服务器地址", required: true, }, { type: "slot", slotName: "rSlot", prop: "receivePort", label: "收件协议", required: true, }, { type: "input", prop: "sendHost", label: "发件服务器地址", required: true, }, { type: "slot", slotName: "sSlot", prop: "sendPort", label: "发件协议", required: true, }, ]; }); const getList = async (req) => { sourceList.value.pagination = { ...sourceList.value.pagination, ...req }; loading.value = true; proxy .post("/personalMailbox/page", sourceList.value.pagination) .then((message) => { console.log(message); sourceList.value.data = message.rows; sourceList.value.pagination.total = message.total; setTimeout(() => { loading.value = false; }, 200); }); }; const openModal = () => { modalType.value = "add"; formData.data = {}; formData.data.type = "1"; formData.data.receiveProtocol = "IMAP"; formData.data.sendProtocol = "SMTP"; dialogVisible.value = true; }; const submitForm = () => { byform.value.handleSubmit((valid) => { if (validEmail(formData.data.mailUser)) { submitLoading.value = true; proxy.post("/personalMailbox/" + modalType.value, formData.data).then( (res) => { ElMessage({ message: modalType.value == "add" ? "添加成功" : "编辑成功", type: "success", }); dialogVisible.value = false; submitLoading.value = false; getList(); }, (err) => (submitLoading.value = false) ); } else { ElMessage({ message: "邮箱格式不正确!", type: "info", }); } }); }; const getDtl = (row) => { modalType.value = "edit"; proxy.post("/personalMailbox/detail", { id: row.id }).then((res) => { res.type = res.type + ""; formData.data = res; dialogVisible.value = true; }); }; getList(); </script> <style lang="scss" scoped> .tenant { padding: 20px; } </style>