|
@@ -0,0 +1,408 @@
|
|
|
+<template>
|
|
|
+ <div class="app-container" ref="appContainer">
|
|
|
+ <ServerPropTable :loading="loading" @selection-change="selectionChange" :columns="column" :data="list" @reset="reset"
|
|
|
+ @onSubmit="onSubmit">
|
|
|
+ <template v-slot:btn>
|
|
|
+ <div style="display: flex; justify-content: flex-end">
|
|
|
+ <el-button type="primary" @click="add"
|
|
|
+ ><el-icon><plus /></el-icon> 添加</el-button>
|
|
|
+ <el-button type="danger" @click="batchDelete"><el-icon>
|
|
|
+ <delete />
|
|
|
+ </el-icon>删除</el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <template v-slot:operation="scope">
|
|
|
+ <el-button type="primary" size="small" icon="Edit" @click="edit(scope.row)">
|
|
|
+ 编辑
|
|
|
+ </el-button>
|
|
|
+ <el-button @click="del(scope.row)" type="danger" size="small" icon="Delete">
|
|
|
+ 删除
|
|
|
+ </el-button>
|
|
|
+ </template>
|
|
|
+ </ServerPropTable>
|
|
|
+
|
|
|
+ <el-dialog v-model="dialogVisible" :title='title' width="50%">
|
|
|
+ <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm"
|
|
|
+ :size="formSize">
|
|
|
+ <el-form-item label="ID" prop="id">
|
|
|
+ <el-input readonly v-model="ruleForm.id" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人服务器ID" prop="toServerIds">
|
|
|
+ <el-input v-model="ruleForm.toServerIds" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人角色ID" prop="toPlayerIds">
|
|
|
+ <el-input v-model="ruleForm.toPlayerIds" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人等级条件" prop="levelCondition">
|
|
|
+ <el-input v-model="ruleForm.levelCondition" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人道具条件" prop="itemCondition">
|
|
|
+ <el-input v-model="ruleForm.itemCondition" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="收件人英雄条件" prop="heroCondition">
|
|
|
+ <el-input v-model="ruleForm.heroCondition" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <el-form-item label="收件人角色创建时间">
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-form-item prop="roleCreateTimeStart">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="ruleForm.roleCreateTimeStart"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择起始时间"
|
|
|
+ style="width: 100%"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col class="text-center" :span="2" style="text-align: center">
|
|
|
+ <span class="text-gray-500">-</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-form-item prop="roleCreateTimeEnd">
|
|
|
+ <el-date-picker v-model="ruleForm.roleCreateTimeEnd" type="datetime" placeholder="选择截止时间" style="width: 100%" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮件标题" prop="title">
|
|
|
+ <el-input v-model="ruleForm.title" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="发送者名称" prop="sendName">
|
|
|
+ <el-input v-model="ruleForm.sendName" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮件道具" prop="itemInfo">
|
|
|
+ <el-input v-model="ruleForm.itemInfo" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮件生效时间" required>
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-form-item prop="validTime">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="ruleForm.validTime"
|
|
|
+ type="datetime"
|
|
|
+ placeholder="选择开始时间"
|
|
|
+ style="width: 100%"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col class="text-center" :span="2" style="text-align: center">
|
|
|
+ <span class="text-gray-500">-</span>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="11">
|
|
|
+ <el-form-item prop="invalidTime">
|
|
|
+ <el-date-picker v-model="ruleForm.invalidTime" type="datetime" placeholder="选择结束时间" style="width: 100%" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮件内容" prop="content">
|
|
|
+ <el-input v-model="ruleForm.content" :rows="10" type="textarea" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <span class="dialog-footer">
|
|
|
+ <el-button @click="dialogVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="handleClose(ruleFormRef)">确定</el-button>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script lang="ts" setup name="comprehensive">
|
|
|
+import { ref, reactive, onMounted, nextTick } from 'vue'
|
|
|
+import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+import type { FormInstance } from 'element-plus'
|
|
|
+const loading = ref(true)
|
|
|
+const appContainer = ref(null)
|
|
|
+import ServerPropTable from '@/components/Table/ServerPropTable/index.vue'
|
|
|
+const data = []
|
|
|
+for (let i = 0; i < 100; i++) {
|
|
|
+ data.push({
|
|
|
+ id: i + 1,
|
|
|
+ title: 'GM邮件' + (i+1),
|
|
|
+ validTime: '2023-08-21 10:00:00',
|
|
|
+ invalidTime: '2023-09-21 10:00:00',
|
|
|
+ itemInfo: '1002-100,1001-200',
|
|
|
+ sendName: '深渊联盟',
|
|
|
+ toServerIds: '1,2,3,4,5',
|
|
|
+ toPlayerIds: '10000001, 10000001',
|
|
|
+ })
|
|
|
+}
|
|
|
+const column = [
|
|
|
+ { type: 'selection', width: 60, fixed: 'left' },
|
|
|
+ { name: 'id', label: 'ID', width: 80 },
|
|
|
+ { name: 'title', label: '邮件标题', inSearch: true, valueType: 'input' },
|
|
|
+ { name: 'validTime', label: '邮件生效时间'},
|
|
|
+ { name: 'invalidTime', label: '邮件失效时间'},
|
|
|
+ { name: 'itemInfo', label: '邮件道具'},
|
|
|
+ { name: 'sendName', label: '发送者名称'},
|
|
|
+ { name: 'toServerIds', label: '收件人服务器ID'},
|
|
|
+ { name: 'toPlayerIds', label: '收件人玩家ID'},
|
|
|
+ { name: 'operation', slot: true, fixed: 'right', width: 200, label: '操作' },
|
|
|
+]
|
|
|
+
|
|
|
+const list = ref(data)
|
|
|
+
|
|
|
+const formSize = ref('default')
|
|
|
+const ruleFormRef = ref<FormInstance>()
|
|
|
+const ruleForm = reactive({
|
|
|
+ id: null,
|
|
|
+ title: null,
|
|
|
+ validTime: null,
|
|
|
+ invalidTime: null,
|
|
|
+ itemInfo: null,
|
|
|
+ sendName: '深渊联盟',
|
|
|
+ toServerIds: '0',
|
|
|
+ toPlayerIds: '0',
|
|
|
+ levelCondition: null,
|
|
|
+ itemCondition: null,
|
|
|
+ heroCondition: null,
|
|
|
+ roleCreateTimeStart: null,
|
|
|
+ roleCreateTimeEnd: null,
|
|
|
+ content: null,
|
|
|
+})
|
|
|
+
|
|
|
+const rules = reactive({
|
|
|
+ toServerIds: [
|
|
|
+ {
|
|
|
+ message: '请输入收件人服务器ID',
|
|
|
+ trigger: 'change',
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ toPlayerIds: [
|
|
|
+ {
|
|
|
+ message: '请输入收件人角色ID',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ levelCondition: [
|
|
|
+ {
|
|
|
+ message: '请输入收件人等级条件',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ itemCondition: [
|
|
|
+ {
|
|
|
+ message: '请输入收件人道具条件',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ heroCondition: [
|
|
|
+ {
|
|
|
+ message: '请输入收件人英雄条件',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ roleCreateTimeStart: [
|
|
|
+ {
|
|
|
+ type: 'date',
|
|
|
+ message: '请输入收件人角色创建起始时间',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ roleCreateTimeEnd: [
|
|
|
+ {
|
|
|
+ type: 'date',
|
|
|
+ message: '请输入收件人角色创建截至时间',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ title: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入邮件标题',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ sendName: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入发送者名称',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ itemInfo: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入邮件道具',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ validTime : [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ type: 'date',
|
|
|
+ message: '请选择邮件生效时间',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ invalidTime: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ type: 'date',
|
|
|
+ message: '请选择邮件失效时间',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ content: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请输入邮件内容',
|
|
|
+ trigger: 'change',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+const dialogVisible = ref(false)
|
|
|
+const rowObj = ref({})
|
|
|
+const selectObj = ref([])
|
|
|
+const title = ref('编辑')
|
|
|
+
|
|
|
+const add = () => {
|
|
|
+ title.value = '新增'
|
|
|
+ dialogVisible.value = true
|
|
|
+}
|
|
|
+
|
|
|
+const handleClose = async (done: () => void) => {
|
|
|
+ await ruleFormRef.value.validate((valid, fields) => {
|
|
|
+ if (valid) {
|
|
|
+ list.value.forEach((item) => {
|
|
|
+ if (item.id === rowObj.value.id) {
|
|
|
+ item.toServerIds = ruleForm.toServerIds
|
|
|
+ item.toPlayerIds = ruleForm.toPlayerIds
|
|
|
+ item.levelCondition = ruleForm.levelCondition
|
|
|
+ item.itemCondition = ruleForm.itemCondition
|
|
|
+ item.heroCondition = ruleForm.heroCondition
|
|
|
+ item.roleCreateTimeStart = ruleForm.roleCreateTimeStart
|
|
|
+ item.roleCreateTimeEnd = ruleForm.roleCreateTimeEnd
|
|
|
+ item.title = ruleForm.title
|
|
|
+ item.sendName = ruleForm.sendName
|
|
|
+ item.itemInfo = ruleForm.itemInfo
|
|
|
+ item.validTime = ruleForm.validTime
|
|
|
+ item.invalidTime = ruleForm.invalidTime
|
|
|
+ item.content = ruleForm.content
|
|
|
+ }
|
|
|
+ })
|
|
|
+ dialogVisible.value = false
|
|
|
+ console.log('submit!', ruleForm.title)
|
|
|
+ } else {
|
|
|
+ console.log('error submit!', fields)
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const batchDelete = () => {
|
|
|
+ if (!selectObj.value.length) {
|
|
|
+ return ElMessage.error('未选中任何行')
|
|
|
+ }
|
|
|
+ ElMessageBox.confirm('你确定要删除选中项吗?', '温馨提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ draggable: true,
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ ElMessage.success('模拟删除成功')
|
|
|
+ list.value = list.value.concat([])
|
|
|
+ })
|
|
|
+ .catch(() => { })
|
|
|
+}
|
|
|
+const selectionChange = (val) => {
|
|
|
+ selectObj.value = val
|
|
|
+}
|
|
|
+
|
|
|
+const edit = (row) => {
|
|
|
+ rowObj.value = row
|
|
|
+ dialogVisible.value = true
|
|
|
+ ruleForm.id = row.id
|
|
|
+ ruleForm.toServerIds = row.toServerIds
|
|
|
+ ruleForm.toPlayerIds = row.toPlayerIds
|
|
|
+ ruleForm.levelCondition = row.levelCondition
|
|
|
+ ruleForm.itemCondition = row.itemCondition
|
|
|
+ ruleForm.heroCondition = row.heroCondition
|
|
|
+ ruleForm.roleCreateTimeStart = row.roleCreateTimeStart
|
|
|
+ ruleForm.roleCreateTimeEnd = row.roleCreateTimeEnd
|
|
|
+ ruleForm.title = row.title
|
|
|
+ ruleForm.sendName = row.sendName
|
|
|
+ ruleForm.itemInfo = row.itemInfo
|
|
|
+ ruleForm.validTime = row.validTime
|
|
|
+ ruleForm.invalidTime = row.invalidTime
|
|
|
+ ruleForm.content = row.content
|
|
|
+}
|
|
|
+
|
|
|
+const del = (row) => {
|
|
|
+ console.log('row==', row)
|
|
|
+ ElMessageBox.confirm('你确定要删除当前项吗?', '温馨提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning',
|
|
|
+ draggable: true,
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ list.value = list.value.filter((item) => item.id !== row.id)
|
|
|
+ ElMessage.success('删除成功')
|
|
|
+ loading.value = true
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false
|
|
|
+ }, 500)
|
|
|
+ })
|
|
|
+ .catch(() => { })
|
|
|
+}
|
|
|
+
|
|
|
+const reset = () => {
|
|
|
+ loading.value = true
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false
|
|
|
+ }, 500)
|
|
|
+ ElMessage.success('触发重置方法')
|
|
|
+}
|
|
|
+
|
|
|
+const onSubmit = (val) => {
|
|
|
+ console.log('val===', val)
|
|
|
+ ElMessage.success('触发查询方法')
|
|
|
+ loading.value = true
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false
|
|
|
+ }, 500)
|
|
|
+}
|
|
|
+
|
|
|
+const onUpdate = (val) => {
|
|
|
+ console.log('val===', val)
|
|
|
+ ElMessage.success('触发修改方法')
|
|
|
+ loading.value = true
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false
|
|
|
+ }, 500)
|
|
|
+}
|
|
|
+
|
|
|
+const getHeight = () => {
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ nextTick(() => {
|
|
|
+ // let data = appContainer.value.
|
|
|
+ })
|
|
|
+ setTimeout(() => {
|
|
|
+ loading.value = false
|
|
|
+ }, 500)
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.edit-input {
|
|
|
+ padding-right: 100px;
|
|
|
+}
|
|
|
+
|
|
|
+.app-container {
|
|
|
+ flex: 1;
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+ padding: 16px;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.cancel-btn {
|
|
|
+ position: absolute;
|
|
|
+ right: 15px;
|
|
|
+ top: 10px;
|
|
|
+}
|
|
|
+</style>
|