parent
ecec0c7dd6
commit
26d3172827
18 changed files with 373 additions and 95 deletions
@ -0,0 +1,261 @@ |
||||
<template> |
||||
<div class="block"> |
||||
<div class="flex justify-between items-center mb-5"> |
||||
<search v-model="params.customsPassName" |
||||
@change="getList"></search> |
||||
<div class="filter"> |
||||
<div class="select"> |
||||
<el-select v-model="params.isEnable" |
||||
placeholder="启用状态" |
||||
size="large" |
||||
clearable> |
||||
<el-option v-for="item in enables" |
||||
:key="item.id" |
||||
:label="item.name" |
||||
:value="item.id" /> |
||||
</el-select> |
||||
<img src="@/assets/images/7.png" |
||||
alt="" |
||||
class="icon" /> |
||||
</div> |
||||
<el-popconfirm title="您确定删除吗?" |
||||
@confirm.stop="delAll"> |
||||
<template #reference> |
||||
<div class="add-btn mr-2"> |
||||
<el-icon :size="24" |
||||
color="#fff"> |
||||
<Delete /> |
||||
</el-icon> |
||||
删除关卡 |
||||
</div> |
||||
</template> |
||||
</el-popconfirm> |
||||
|
||||
<div class="add-btn" |
||||
@click="toAdd"> |
||||
<img src="@/assets/images/plus.png" |
||||
alt="" |
||||
class="icon" /> |
||||
新增关卡 |
||||
</div> |
||||
</div> |
||||
</div> |
||||
<div class="h-[calc(100vh-270px)] overflow-auto" |
||||
id="tableWrap"> |
||||
<el-table ref="tableRef" |
||||
v-loading="loading" |
||||
:data="list" |
||||
@selection-change="handleSelectionChange"> |
||||
<el-table-column label="移动" |
||||
width="100"> |
||||
<template #default="{ row }"> |
||||
<el-dropdown @command="command => move(command,row)"> |
||||
<el-icon class="rotate-90 cursor-pointer" |
||||
:size="16" |
||||
color="#877c7c"> |
||||
<MoreFilled /> |
||||
</el-icon> |
||||
<template #dropdown> |
||||
<el-dropdown-menu> |
||||
<el-dropdown-item command="up">上移</el-dropdown-item> |
||||
<el-dropdown-item command="down">下移</el-dropdown-item> |
||||
<el-dropdown-item command="top">置顶</el-dropdown-item> |
||||
<el-dropdown-item command="bottom">置底</el-dropdown-item> |
||||
</el-dropdown-menu> |
||||
</template> |
||||
</el-dropdown> |
||||
|
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column type="selection" |
||||
width="55" /> |
||||
<el-table-column label="序号" |
||||
width="80" |
||||
align="center"> |
||||
<template #default="{ row, $index }"> |
||||
{{ $index + 1 }} |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="customsPassName" |
||||
label="关卡名称"> |
||||
<template #default="{ row }"> |
||||
<div class="flex items-center"> |
||||
<el-input v-if="row.editing" |
||||
class="w-[250px]" |
||||
placeholder="请输入关卡名称" |
||||
v-model="row.customsPassName"></el-input> |
||||
<span v-else>{{ row.customsPassName }}</span> |
||||
<el-icon class="ml-2 cursor-pointer" |
||||
:size="16" |
||||
color="#877c7c" |
||||
@click="edit(row)"> |
||||
<Check v-if="row.editing" /> |
||||
<Edit v-else /> |
||||
</el-icon> |
||||
</div> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column prop="creator" |
||||
label="创建人"></el-table-column> |
||||
<el-table-column prop="createTime" |
||||
label="创建时间" |
||||
sortable="custom"></el-table-column> |
||||
<el-table-column label="启用关卡" |
||||
width="140" |
||||
align="center"> |
||||
<template #default="{ row }"> |
||||
<el-switch v-if="row.checkpointId" |
||||
v-model="row.isEnable" |
||||
:active-value="1" |
||||
:inactive-value="0" |
||||
@change="switchEnable(row)" /> |
||||
</template> |
||||
</el-table-column> |
||||
<el-table-column label="操作" |
||||
width="140"> |
||||
<template #default="{ row }"> |
||||
<el-popconfirm v-if="row.checkpointId" |
||||
title="您确定删除吗?" |
||||
@confirm.stop="handleDelete([row.checkpointId])"> |
||||
<template #reference> |
||||
<el-button type="text" |
||||
size="small">删除</el-button> |
||||
</template> |
||||
</el-popconfirm> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</div> |
||||
<div class="filter flex justify-end mt-3"> |
||||
<div class="add-btn" |
||||
@click="save"> |
||||
保存 |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { computed, onMounted, ref, reactive, watch, nextTick } from 'vue'; |
||||
import { ElMessage, ElTable } from 'element-plus'; |
||||
import { Delete, Edit, Check, MoreFilled } from '@element-plus/icons-vue'; |
||||
import { listPass, savePass, updatePass } from '@/api/config'; |
||||
import Search from '@/components/Search.vue'; |
||||
import { useRouter, useRoute } from 'vue-router'; |
||||
import Cookies from 'js-cookie'; |
||||
|
||||
const router = useRouter(); |
||||
const route = useRoute(); |
||||
const projectId = +Cookies.get('sand-projectId'); |
||||
const levelId = +Cookies.get('sand-level'); |
||||
const height = window.innerHeight - 270; |
||||
const tableRef = ref<InstanceType<typeof ElTable>>(); |
||||
const params = reactive({ |
||||
platformId: 3, |
||||
customsPassName: '', |
||||
isEnable: '', |
||||
}); |
||||
const table = ref<any>(); |
||||
const enables = ref<Array<any>>([ |
||||
{ |
||||
id: 0, |
||||
name: '禁用', |
||||
}, |
||||
{ |
||||
id: 1, |
||||
name: '启用', |
||||
}, |
||||
]); |
||||
const list = ref<Array<any>>([]); |
||||
const loading = ref<boolean>(false); |
||||
const multipleSelection = ref<Record<string, any>[]>([]); |
||||
// 列表 |
||||
const getList = async () => { |
||||
loading.value = true; |
||||
try { |
||||
const { data } = await listPass(params); |
||||
list.value = data; |
||||
} finally { |
||||
loading.value = false; |
||||
} |
||||
}; |
||||
onMounted(() => { |
||||
getList(); |
||||
}); |
||||
|
||||
watch([params, () => route.query], getList); |
||||
|
||||
// 保存 |
||||
const save = () => {}; |
||||
// 移动 |
||||
const move = async (command: string | number | object, row: Record<string, any>) => { |
||||
const type = command === 'up' ? 1 : command === 'down' ? 2 : command === 'top' ? 3 : 4; |
||||
await updatePass({ |
||||
checkpointId: row.checkpointId, |
||||
type, |
||||
}); |
||||
getList(); |
||||
}; |
||||
// 多选 |
||||
const handleSelectionChange = (val: Record<string, any>[]) => { |
||||
multipleSelection.value = val; |
||||
}; |
||||
// 新增 |
||||
const toAdd = () => { |
||||
console.log(22, window.innerHeight); |
||||
list.value.push({ |
||||
customsPassName: '', |
||||
editing: true, |
||||
}); |
||||
nextTick(() => { |
||||
// tableRef.value.scrollTo({ |
||||
// row: list.value.length, |
||||
// }); |
||||
document.querySelector('#tableWrap').scrollTo({ |
||||
top: document.querySelector('#tableWrap')?.scrollHeight + 200, |
||||
behavior: 'smooth', |
||||
}); |
||||
}); |
||||
}; |
||||
|
||||
// 编辑 |
||||
const edit = async (row: Record<string, any>) => { |
||||
if (row.editing) { |
||||
const param = { |
||||
checkpointId: row.checkpointId || '', |
||||
customsPassName: row.customsPassName, |
||||
}; |
||||
if (row.checkpointId) { |
||||
await updatePass(param); |
||||
} else { |
||||
await savePass(param); |
||||
} |
||||
getList(); |
||||
} |
||||
|
||||
row.editing = !row.editing; |
||||
}; |
||||
// 禁启用 |
||||
const switchEnable = async (row: Record<string, any>) => { |
||||
if (row.checkpointId) { |
||||
await updatePass([ |
||||
{ |
||||
checkpointId: row.checkpointId, |
||||
isEnable: row.isEnable, |
||||
}, |
||||
]); |
||||
getList(); |
||||
} |
||||
}; |
||||
// 删除 |
||||
const handleDelete = async (id: number[]) => { |
||||
id.map((e) => (e.isDel = 1)); |
||||
await updatePass(id); |
||||
getList(); |
||||
ElMessage.success('删除成功!'); |
||||
}; |
||||
// 批量删除 |
||||
const delAll = async () => { |
||||
handleDelete(multipleSelection.value.map((e) => e.checkpointId)); |
||||
}; |
||||
</script> |
Loading…
Reference in new issue