<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: () => openModalOne(), }, { text: '添加邮箱', action: () => openModal('10'), }, ]" @get-list="getList" > <template #mialAddress="{ item }"> {{ item.mailUserPrefix }}@{{ item.domainName }} </template> </byTable> </div> <el-dialog :title="titleText" v-model="dialogVisible" width="450" v-loading="loading" > <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="byform" > <template #mailAddress> <el-row style="width: 100%"> <el-col :span="11"> <el-input v-model="formData.data.mailUserPrefix" placeholder="请输入" > </el-input> </el-col> <el-col :span="2" style="text-align: center"> @ </el-col> <el-col :span="11"> <el-select v-model="formData.data.domainId" placeholder="请选择" style="width: 100%" > <el-option v-for="item in sourceListOne.data" :label="item.domainName" :value="item.id" > </el-option> </el-select> </el-col> </el-row> </template> <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> <el-dialog title="邮箱域名管理" v-model="dialogVisibleOne" width="800" v-loading="loading" > <div style="width: 100%"> <div style="padding: 0px 20px"> <el-button type="primary" @click="openModal('20')"> 添加域名 </el-button> </div> <byTable :source="sourceListOne.data" :config="configOne" :loading="loading" highlight-current-row :hidePagination="true" :hideSearch="true" > </byTable> </div> <template #footer> <el-button @click="dialogVisibleOne = 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 useUserStore from "@/store/modules/user"; const loading = ref(false); const submitLoading = ref(false); const sourceList = ref({ data: [], pagination: { total: 3, pageNum: 1, pageSize: 10, }, }); const sourceListOne = ref({ data: [], }); let dialogVisible = ref(false); let dialogVisibleOne = ref(false); let modalType = ref("add"); let submitType = ref(""); let titleText = ref(""); let rules = ref({ mailUserPrefix: [{ required: true, message: "请输入地址", trigger: "blur" }], domainName: [{ 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: { type: "slot", slot: "mialAddress", label: "邮箱地址", }, }, { attrs: { label: "授权码", prop: "mailPassword", }, }, { attrs: { label: "绑定用户", prop: "userName", }, }, { attrs: { label: "收件协议", prop: "receiveProtocol", }, }, { attrs: { label: "收件端口号", prop: "receivePort", }, }, { attrs: { label: "发件协议", prop: "sendProtocol", }, }, { attrs: { label: "发件端口号", prop: "sendPort", }, }, { attrs: { label: "操作", width: "130", align: "right", }, // 渲染 el-button,一般用在最后一列。 renderHTML(row) { return [ { attrs: { label: "修改", type: "primary", text: true, }, el: "button", click() { getDtl(row, "10"); }, }, { attrs: { label: "删除", type: "danger", text: true, }, el: "button", click() { // 弹窗提示是否删除 ElMessageBox.confirm( "此操作将永久删除该数据, 是否继续?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", } ).then(() => { // 删除 proxy .post("/enterpriseMailbox/delete", { id: row.id, }) .then((res) => { ElMessage({ message: "删除成功", type: "success", }); getList(); }); }); }, }, ]; }, }, ]; }); const configOne = computed(() => { return [ { attrs: { label: "邮箱域名", prop: "domainName", }, }, { attrs: { label: "海外邮箱", prop: "type", }, render(type) { return type == 2 ? "是" : "否"; }, }, { attrs: { label: "收件协议", prop: "receiveProtocol", }, }, { attrs: { label: "收件端口号", prop: "receivePort", }, }, { attrs: { label: "发件协议", prop: "sendProtocol", }, }, { attrs: { label: "发件端口号", prop: "sendPort", }, }, { attrs: { label: "操作", width: "130", align: "right", }, // 渲染 el-button,一般用在最后一列。 renderHTML(row) { return [ { attrs: { label: "修改", type: "primary", text: true, }, el: "button", click() { getDtl(row, "20"); }, }, { attrs: { label: "删除", type: "danger", text: true, }, el: "button", click() { // 弹窗提示是否删除 ElMessageBox.confirm( "此操作将永久删除该数据, 是否继续?", "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", } ).then(() => { // 删除 proxy .post("/enterpriseDomain/delete", { id: row.id, }) .then((res) => { ElMessage({ message: "删除成功", type: "success", }); getListOne(); }); }); }, }, ]; }, }, ]; }); let formData = reactive({ data: {}, }); const formOption = reactive({ inline: true, labelWidth: 100, itemWidth: 100, }); const byform = ref(null); const treeData = ref([]); const formConfig = ref({}); const configData = [ [ { type: "slot", slotName: "mailAddress", prop: "mailUserPrefix", label: "邮箱地址", required: true, }, { type: "input", prop: "mailPassword", label: "授权码", required: true, }, { type: "select", prop: "userId", label: "绑定用户", isLoad: { url: `/tenantUser/list?pageNum=1&pageSize=9999&tenantId=${ useUserStore().user.tenantId }`, labelKey: "nickName", labelVal: "userId", method: "get", resUrl: "rows", }, }, ], [ { type: "input", prop: "domainName", label: "邮箱域名", required: true, }, { type: "radio", prop: "type", label: "是否海外邮箱", required: true, border: true, data: [ { label: "是", value: "2" }, { label: "否", value: "1" }, ], }, { type: "input", prop: "receiveHost", label: "收件服务器地址", required: true, }, { type: "select", label: "收件协议", prop: "receiveProtocol", itemWidth: 33, disabled: true, style: { width: "100%", "margin-right": "10px", }, }, { type: "input", prop: "receivePort", label: " ", itemWidth: 33.33, }, { type: "input", prop: "sendHost", label: "发件服务器地址", required: true, }, { type: "select", label: "发件协议", prop: "sendProtocol", itemWidth: 33, disabled: true, style: { width: "100%", "margin-right": "10px", }, }, { type: "input", prop: "sendPort", label: " ", itemWidth: 33.33, }, ], ]; const getList = async (req) => { sourceList.value.pagination = { ...sourceList.value.pagination, ...req }; loading.value = true; proxy .post("/enterpriseMailbox/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 getListOne = async () => { loading.value = true; proxy .post("/enterpriseDomain/page", { pageNum: 1, pageSize: 9999 }) .then((message) => { sourceListOne.value.data = message.rows; setTimeout(() => { loading.value = false; }, 200); }); }; const openModal = (type) => { formData.data = {}; dialogVisible.value = true; modalType.value = "add"; submitType.value = type; if (type === "10") { titleText.value = "添加邮箱"; formConfig.value = configData[0]; } else if (type === "20") { titleText.value = "添加域名"; formConfig.value = configData[1]; formData.data = { type: "1", receiveProtocol: "IMAP", sendProtocol: "SMTP", }; } }; const openModalOne = () => { dialogVisibleOne.value = true; modalType.value = "add"; }; const submitForm = () => { byform.value.handleSubmit((valid) => { submitLoading.value = true; if (submitType.value === "10") { proxy.post("/enterpriseMailbox/" + 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 if (submitType.value === "20") { proxy.post("/enterpriseDomain/" + modalType.value, formData.data).then( (res) => { ElMessage({ message: modalType.value == "add" ? "添加成功" : "编辑成功", type: "success", }); dialogVisible.value = false; submitLoading.value = false; getListOne(); }, (err) => (submitLoading.value = false) ); } }); }; const getDtl = (row, type) => { modalType.value = "edit"; submitType.value = type; if (type === "10") { proxy.post("/enterpriseMailbox/detail", { id: row.id }).then((res) => { formConfig.value = configData[0]; formData.data = res; }); } else if (type === "20") { proxy.post("/enterpriseDomain/detail", { id: row.id }).then((res) => { formConfig.value = configData[1]; res.type = res.type + ""; formData.data = res; }); } dialogVisible.value = true; }; getList(); getListOne(); </script> <style lang="scss" scoped> .tenant { padding: 20px; } </style>