123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317 |
- <template>
- <div class="app-container" ref="appContainer">
- <ServerPropTable :loading="loading" @selection-change="selectionChange" :columns="column" :data="list" @reset="reset"
- @onSubmit="onSubmit" @onUpdate="onUpdate">
- <template v-slot:btn>
- <div style="display: flex; justify-content: flex-end">
- <el-button type="danger" @click="batchDelete"><el-icon>
- <delete />
- </el-icon>删除</el-button>
- </div>
- </template>
- <template v-slot:state="scope">{{ scope.row.state ? '开启' : '关闭' }}</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 :value="ruleForm._id" />
- </el-form-item>
- <el-form-item label="状态" prop="state">
- <el-radio-group v-model="ruleForm.state">
- <el-radio :label="0">关闭</el-radio>
- <el-radio :label="1">开启</el-radio>
- </el-radio-group>
- </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, onBeforeMount } from 'vue'
- import * as dayjs from 'dayjs'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance } from 'element-plus'
- import serverApi from '@/api/server'
- 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,
- // host: '0.0.0.0',
- // port: 3000 + i,
- // gatewayId: 1,
- // gameIds: '101,102',
- // state: i % 2 ? 1 : 0
- // })
- // }
- const data = ref([])
- const serverName = "chat"
- onBeforeMount(() => {
- loadServerInfo()
- })
- const loadServerInfo = () => {
- serverApi.getAll(serverName).then(res => {
- data.value = res.data.result;
- console.log(data)
- })
- }
- const column = [
- { type: 'selection', width: 60, fixed: 'left' },
- { name: '_id', label: 'ID', inSearch: true, valueType: 'inputNumber', width: 80 },
- { name: 'host', label: '主机'},
- { name: 'port', label: 'UDP端口'},
- { name: 'gatewayId', label: '连接网关服'},
- { name: 'gameIds', label: '包含游戏服'},
- {
- name: 'state',
- label: '状态',
- slot: true,
- inSearch: true,
- options: [
- {
- value: 0,
- label: '关闭',
- },
- {
- value: 1,
- label: '开启',
- }
- ],
- valueType: 'select',
- },
- { name: 'operation', slot: true, fixed: 'right', width: 200, label: '操作' },
- ]
- const list = ref(data)
- const formSize = ref('default')
- const ruleFormRef = ref<FormInstance>()
- const ruleForm = reactive({
- state: null,
- })
- const rules = reactive({
- state: [
- {
- required: true,
- message: '请选择状态',
- trigger: 'change',
- },
- ],
- })
- const dialogVisible = ref(false)
- const rowObj = ref({})
- const selectObj = ref([])
- const title = ref('编辑')
- const handleClose = async (done: () => void) => {
- await ruleFormRef.value.validate((valid, fields) => {
- if (valid) {
- list.value.forEach((item) => {
- if (item._id === rowObj.value._id) {
- let updateParams = reactive({
- serverName: serverName,
- _id: ruleForm._id,
- updateValue: ruleForm
- })
- serverApi.update(updateParams).then(res => {
- if (res.data.code = 200) {
- // item.state = ruleForm.state
- loadServerInfo()
- return ElMessage.success('修改成功')
- } else {
- return ElMessage.error('修改失败')
- }
- })
- }
- })
- dialogVisible.value = false
- console.log('submit!', ruleForm.state)
- } else {
- console.log('error submit!', fields)
- }
- })
- }
- const batchDelete = () => {
- if (!selectObj.value.length) {
- return ElMessage.error('未选中任何行')
- }
- ElMessageBox.confirm('你确定要删除选中项吗?', '温馨提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning',
- draggable: true,
- })
- .then(() => {
- let selectServerIds = reactive([])
- for (let value of selectObj.value) {
- selectServerIds.push(value._id)
- }
- let deleteParams = reactive({
- serverName: serverName,
- serverIds: selectServerIds
- })
- serverApi.deleteBatch(deleteParams).then(res => {
- loadServerInfo()
- 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.state = row.state
- }
- 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)
- let deleteParams = reactive({
- serverName: serverName,
- serverId: row._id
- })
- serverApi.delete(deleteParams).then(res => {
- loadServerInfo()
- ElMessage.success('删除成功')
- })
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- })
- .catch(() => { })
- }
- const reset = () => {
- loadServerInfo()
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- ElMessage.success('重置成功')
- }
- const onSubmit = (val) => {
- if (!val._id && val.state == null) {
- ElMessage.warning('请输入查询条件')
- return
- }
- let queryParams = reactive({
- serverName: serverName
- })
- if (val._id) {
- queryParams._id = parseInt(val._id)
- }
- if (val.state != null) {
- queryParams.state = val.state
- }
- serverApi.query(queryParams).then(res => {
- data.value = res.data.result;
- console.log(data.value)
- })
- loading.value = true
- setTimeout(() => {
- loading.value = false
- }, 500)
- }
- const onUpdate = (val) => {
- if (val.state == null) {
- ElMessage.warning('请输入编辑内容')
- return
- }
- let updateParams = reactive({
- serverName: serverName,
- updateValue: reactive({})
- })
- if (val._id) {
- updateParams._id = parseInt(val._id)
- }
- if (val.state != null) {
- updateParams.updateValue.state = val.state
- }
- serverApi.updateBatch(updateParams).then(res => {
- if (res.data.code = 200) {
- loadServerInfo()
- return ElMessage.success('修改成功')
- } else {
- return ElMessage.error('修改失败')
- }
- })
- 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>
|