update
Some checks failed
Deploy / deploy (push) Has been cancelled

This commit is contained in:
2026-09-14 08:39:58 -06:00
parent cc51e305cf
commit 4189c59162

View File

@@ -125,6 +125,67 @@ const websiteConfig = reactive<WebsiteConfig>({
enableMaxkb: true, enableMaxkb: true,
}) })
// 班级列表的顺序就是登录页、班级 PK、统计面板下拉框里的顺序数组原样存进 options 表,
// 所以拖拽只改前端数组,点「保存」生效
const dragFrom = ref<number | null>(null)
const dragOver = ref<number | null>(null)
function moveClass(from: number, to: number) {
const list = [...websiteConfig.classList]
const [moved] = list.splice(from, 1)
list.splice(to, 0, moved)
websiteConfig.classList = list
}
function renderClassTag(tag: string | { label: string }, index: number) {
const label = typeof tag === "string" ? tag : tag.label
return h(
NTag,
{
key: index,
closable: true,
draggable: true,
type: dragOver.value === index ? "primary" : "default",
style: {
cursor: "move",
opacity: dragFrom.value === index ? 0.4 : 1,
},
onClose: () => {
websiteConfig.classList = websiteConfig.classList.filter(
(_, i) => i !== index,
)
},
onDragstart: (e: DragEvent) => {
dragFrom.value = index
// Firefox 不 setData 就不会开始拖
e.dataTransfer?.setData("text/plain", label)
if (e.dataTransfer) e.dataTransfer.effectAllowed = "move"
},
onDragover: (e: DragEvent) => {
if (dragFrom.value === null) return
e.preventDefault()
dragOver.value = index
},
onDragleave: () => {
if (dragOver.value === index) dragOver.value = null
},
onDrop: (e: DragEvent) => {
e.preventDefault()
if (dragFrom.value !== null && dragFrom.value !== index) {
moveClass(dragFrom.value, index)
}
dragFrom.value = null
dragOver.value = null
},
onDragend: () => {
dragFrom.value = null
dragOver.value = null
},
},
() => label,
)
}
async function getWebsiteConfig() { async function getWebsiteConfig() {
const res = await getWebsite() const res = await getWebsite()
websiteConfig.websiteBaseUrl = res.websiteBaseUrl websiteConfig.websiteBaseUrl = res.websiteBaseUrl
@@ -225,10 +286,14 @@ onMounted(() => {
<n-form label-placement="left"> <n-form label-placement="left">
<n-form-item label="班级列表"> <n-form-item label="班级列表">
<n-flex vertical size="small"> <n-flex vertical size="small">
<n-dynamic-tags v-model:value="websiteConfig.classList" /> <n-dynamic-tags
v-model:value="websiteConfig.classList"
:render-tag="renderClassTag"
/>
<n-text depth="3" style="font-size: 12px"> <n-text depth="3" style="font-size: 12px">
{{ CLASS_NAME_MIN_DIGITS }}~{{ CLASS_NAME_MAX_DIGITS }} {{ CLASS_NAME_MIN_DIGITS }}~{{ CLASS_NAME_MAX_DIGITS }}
位数字 2512510要和用户名里 ks 后面那段一致 位数字 2512510要和用户名里 ks 后面那段一致
拖动标签调整顺序登录页等下拉框按此顺序改完点保存
</n-text> </n-text>
</n-flex> </n-flex>
</n-form-item> </n-form-item>