1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2026-05-13 19:35:07 +00:00
Classworks/assets/settings-CBmQwkLh.js

25 lines
210 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import{_ as Rt,V as Sn}from"./MessageLog-Dxfv4iDZ.js";import{_ as Q,W as ze,c as K,f as g,d as j,j as $e,l as ue,e as M,o as et,C as Kt,x as Ft,X as Te,n as k,s as re,Y as Cn,r as z,t as te,h as p,p as O,q as D,i as U,z as ft,Z as Re,w as pt,A as ut,g as Z,$ as Vn,R as _n,a0 as Vt,H as Dn,I as dt,a1 as An,a2 as In,N as Tn,E as Un,G as Ot,F as Ke,k as we,V as Jt,a3 as jn,a4 as Bn,a5 as Ht,a6 as Mn,y as _t}from"./index-D4RYwM-3.js";import{X as m,Y as h,Z as n,j as t,a1 as a,S as v,$ as b,af as Ye,k as c,P as Nn,_ as y,m as Ve,F as H,a2 as ne,q as Pn,t as Ce,e as L,b as se,s as qe,I as zn,p as En,d as Qt,o as ct,N as De,n as pe,R as Dt,V as Ln,aa as Ae,r as Rn,ae as _e,ac as Kn,D as Fn,a4 as On}from"./vendor-vue-CtYT9Ng9.js";import{V as G}from"./VChip-CsJZiF8_.js";import{V as ht}from"./VSwitch-ARYkcqKH.js";import{V as Ze}from"./VSelect-dmFYzIOK.js";import{V as N,e as Jn,u as Hn,a as At,f as Qn,d as Gn,g as Wn}from"./VTextField-AI5y_Vij.js";import{V as gt,a as Yn}from"./VSheet-Dv36FQuN.js";import{V as Y,a as Ne}from"./VAlert-CQ9sbYhR.js";import{A as wt,z as mt,as as qn,p as Fe,at as It,f as tt,au as Zn,u as vt,s as Ue,k as Gt,n as Wt,ao as Xn,t as $n,a0 as es}from"./vendor-vuetify-qZfMirFq.js";import{d as ie,b as Tt,a as ts,o as ns,k as ss}from"./dataProvider-B_681kwv.js";import{V as de,a as R}from"./VRow-DWrEmYgu.js";import{V as bt}from"./VContainer-NIFiHBoG.js";import{a as Xe}from"./vendor-utils-DwjQ18Dh.js";import{V as Se}from"./VCheckbox-BlF7Klt-.js";import{V as Pe}from"./VTextarea-CXRedSrC.js";import{s as is,a as ls}from"./soundList-D9U-Grcp.js";import{V as os}from"./VSkeletonLoader-DYu_F3LH.js";import{V as as}from"./VTimePicker-BgyVCVg9.js";import{V as Yt}from"./VForm-JfqrrDga.js";import{V as yt,a as kt,b as qt,c as xt}from"./VExpansionPanels-C_aV_Nez.js";import{V as Zt}from"./VDataTable-ByKUolFh.js";import{V as Ut}from"./VCombobox-v9doABQk.js";import{V as jt}from"./VCheckboxBtn-DvLGYLOj.js";import{i as rs,t as us}from"./serverRotation-CCaqwaXb.js";import{getVisitorId as ds}from"./visitorId-B4ljpoB3.js";import{b as Bt,c as Mt,V as cs,a as ms}from"./VAppBarTitle-Be-Vj0so.js";import{V as fs,a as fe}from"./VTable-DmhgxPB9.js";import"./VPicker-BgNf4f_8.js";import"./VPagination-CbZ4Wmg5.js";const ps={name:"SettingsCard",props:{title:{type:String,required:!0},icon:{type:String,required:!0},loading:{type:Boolean,default:!1}}};function hs(s,e,o,u,i,l){return m(),h(M,{class:"settings-card rounded-lg",elevation:"2"},{default:n(()=>[t(ze,null,{prepend:n(()=>[t(g,{icon:o.icon,class:"mr-2",size:"large"},null,8,["icon"])]),default:n(()=>[t(K,{class:"text-h6"},{default:n(()=>[a(v(o.title),1)]),_:1})]),_:1}),t(j,null,{default:n(()=>[o.loading?(m(),h($e,{key:0,class:"mb-4",color:"primary",indeterminate:""})):b("",!0),Ye(s.$slots,"default",{},void 0,!0)]),_:3}),s.$slots.actions?(m(),h(ue,{key:0,class:"pa-4"},{default:n(()=>[Ye(s.$slots,"actions",{},void 0,!0)]),_:3})):b("",!0)]),_:3})}const W=Q(ps,[["render",hs],["__scopeId","data-v-9c035df1"]]),gs=[{text:"帝高阳之苗裔兮,朕皇考曰伯庸。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"摄提贞于孟陬兮,惟庚寅吾以降。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"皇览揆余初度兮,肇锡余以嘉名。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"名余曰正则兮,字余曰灵均。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"纷吾既有此内美兮,又重之以修能。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"扈江离与辟芷兮,纫秋兰以为佩。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"汩余若将不及兮,恐年岁之不吾与。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"朝搴阰之木兰兮,夕揽洲之宿莽。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"日月忽其不淹兮,春与秋其代序。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"惟草木之零落兮,恐美人之迟暮。(惟 通:唯)",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"不抚壮而弃秽兮,何不改此度?(改此度 一作:改乎此度)",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"乘骐骥以驰骋兮,来吾道夫先路!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"昔三后之纯粹兮,固众芳之所在。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"杂申椒与菌桂兮,岂惟纫夫蕙茝!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"彼尧舜之耿介兮,既遵道而得路。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何桀纣之猖披兮,夫唯捷径以窘步。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"惟夫党人之偷乐兮,路幽昧以险隘。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"岂余身之惮殃兮,恐皇舆之败绩!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忽奔走以先后兮,及前王之踵武。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"荃不查余之中情兮,反信谗而齌怒。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"余固知謇謇之为患兮,忍而不能舍也。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"指九天以为正兮,夫唯灵修之故也。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"曰黄昏以为期兮,羌中道而改路!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"初既与余成言兮,后悔遁而有他。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"余既不难夫离别兮,伤灵修之数化。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"余既滋兰之九畹兮,又树蕙之百亩。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"畦留夷与揭车兮,杂杜衡与芳芷。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"冀枝叶之峻茂兮,愿俟时乎吾将刈。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"虽萎绝其亦何伤兮,哀众芳之芜秽。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"众皆竞进以贪婪兮,凭不厌乎求索。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"羌内恕己以量人兮,各兴心而嫉妒。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忽驰骛以追逐兮,非余心之所急。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"老冉冉其将至兮,恐修名之不立。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"朝饮木兰之坠露兮,夕餐秋菊之落英。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"苟余情其信姱以练要兮,长顑颔亦何伤。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"掔木根以结茝兮,贯薜荔之落蕊。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"矫菌桂以纫蕙兮,索胡绳之纚纚。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"謇吾法夫前修兮,非世俗之所服。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"虽不周于今之人兮,愿依彭咸之遗则。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"长太息以掩涕兮,哀民生之多艰。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"余虽好修姱以鞿羁兮,謇朝谇而夕替。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"既替余以蕙纕兮,又申之以揽茝。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"亦余心之所善兮,虽九死其犹未悔。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"怨灵修之浩荡兮,终不察夫民心。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"众女嫉余之蛾眉兮,谣诼谓余以善淫。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"固时俗之工巧兮,偭规矩而改错。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"背绳墨以追曲兮,竞周容以为度。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忳郁邑余侘傺兮,吾独穷困乎此时也。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"宁溘死以流亡兮,余不忍为此态也。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"鸷鸟之不群兮,自前世而固然。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何方圜之能周兮,夫孰异道而相安?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"屈心而抑志兮,忍尤而攘诟。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"伏清白以死直兮,固前圣之所厚。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"悔相道之不察兮,延伫乎吾将反。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"回朕车以复路兮,及行迷之未远。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"步余马于兰皋兮,驰椒丘且焉止息。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"进不入以离尤兮,退将复修吾初服。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"制芰荷以为衣兮,集芙蓉以为裳。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"不吾知其亦已兮,苟余情其信芳。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"高余冠之岌岌兮,长余佩之陆离。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"芳与泽其杂糅兮,唯昭质其犹未亏。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忽反顾以游目兮,将往观乎四荒。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"佩缤纷其繁饰兮,芳菲菲其弥章。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"民生各有所乐兮,余独好修以为常。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"虽体解吾犹未变兮,岂余心之可惩。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"女媭之婵媛兮,申申其詈予,曰:",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"鲧婞直以亡身兮,终然夭乎羽之野。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"汝何博謇而好修兮,纷独有此姱节?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"薋菉葹以盈室兮,判独离而不服。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"众不可户说兮,孰云察余之中情?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"世并举而好朋兮,夫何茕独而不予听?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"依前圣以节中兮,喟凭心而历兹。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"济沅湘以南征兮,就重华而陈词:",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"启《九辩》与《九歌》兮,夏康娱以自纵。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"不顾难以图后兮,五子用失乎家衖。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"羿淫游以佚畋兮,又好射夫封狐。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"固乱流其鲜终兮,浞又贪夫厥家。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"浇身被服强圉兮,纵欲而不忍。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"日康娱而自忘兮,厥首用夫颠陨。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"夏桀之常违兮,乃遂焉而逢殃。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"后辛之菹醢兮,殷宗用而不长。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"汤禹俨而祗敬兮,周论道而莫差。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"举贤才而授能兮,循绳墨而不颇。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"皇天无私阿兮,览民德焉错辅。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"夫维圣哲以茂行兮,苟得用此下土。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"瞻前而顾后兮,相观民之计极。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"夫孰非义而可用兮?孰非善而可服?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"阽余身而危死兮,览余初其犹未悔。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"不量凿而正枘兮,固前修以菹醢。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"曾歔欷余郁邑兮,哀朕时之不当。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"揽茹蕙以掩涕兮,沾余襟之浪浪。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"跪敷衽以陈辞兮,耿吾既得此中正。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"驷玉虬以椉鹥兮,溘埃风余上征。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"朝发轫于苍梧兮,夕余至乎县圃。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"欲少留此灵琐兮,日忽忽其将暮。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吾令羲和弭节兮,望崦嵫而勿迫。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"路曼曼其修远兮,吾将上下而求索。(曼曼 一作:漫漫)",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"饮余马于咸池兮,总余辔乎扶桑。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"折若木以拂日兮,聊逍遥以相羊。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"前望舒使先驱兮,后飞廉使奔属。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"鸾皇为余先戒兮,雷师告余以未具。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吾令凤鸟飞腾兮,继之以日夜。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"飘风屯其相离兮,帅云霓而来御。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"纷总总其离合兮,斑陆离其上下。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吾令帝阍开关兮,倚阊阖而望予。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"时暧暧其将罢兮,结幽兰而延伫。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"世溷浊而不分兮,好蔽美而嫉妒。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"朝吾将济于白水兮,登阆风而绁马。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忽反顾以流涕兮,哀高丘之无女。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"溘吾游此春宫兮,折琼枝以继佩。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"及荣华之未落兮,相下女之可诒。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吾令丰隆乘云兮,求宓妃之所在。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"解佩纕以结言兮,吾令謇修以为理。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"纷总总其离合兮,忽纬繣其难迁。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"夕归次于穷石兮,朝濯发乎洧盘。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"保厥美以骄傲兮,日康娱以淫游。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"虽信美而无礼兮,来违弃而改求。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"览相观于四极兮,周流乎天余乃下。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"望瑶台之偃蹇兮,见有娀之佚女。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吾令鸩为媒兮,鸩告余以不好。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"雄鸠之鸣逝兮,余犹恶其佻巧。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"心犹豫而狐疑兮,欲自适而不可。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"凤皇既受诒兮,恐高辛之先我。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"欲远集而无所止兮,聊浮游以逍遥。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"及少康之未家兮,留有虞之二姚。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"理弱而媒拙兮,恐导言之不固。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"世溷浊而嫉贤兮,好蔽美而称恶。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"闺中既以邃远兮,哲王又不寤。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"怀朕情而不发兮,余焉能忍而与此终古?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"索琼茅以筳篿兮,命灵氛为余占之。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"曰:两美其必合兮,孰信修而慕之?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"思九州之博大兮,岂惟是其有女?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"曰:勉远逝而无狐疑兮,孰求美而释女?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何所独无芳草兮,尔何怀乎故宇?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"世幽昧以昡曜兮,孰云察余之善恶?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"民好恶其不同兮,惟此党人其独异!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"户服艾以盈要兮,谓幽兰其不可佩。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"览察草木其犹未得兮,岂珵美之能当?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"苏粪壤以充帏兮,谓申椒其不芳。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"欲从灵氛之吉占兮,心犹豫而狐疑。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"巫咸将夕降兮,怀椒糈而要之。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"百神翳其备降兮,九疑缤其并迎。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"皇剡剡其扬灵兮,告余以吉故。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"曰:勉升降以上下兮,求矩矱之所同。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"汤禹俨而求合兮,挚咎繇而能调。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"苟中情其好修兮,又何必用夫行媒?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"说操筑于傅岩兮,武丁用而不疑。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"吕望之鼓刀兮,遭周文而得举。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"宁戚之讴歌兮,齐桓闻以该辅。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"及年岁之未晏兮,时亦犹其未央。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"恐鹈鴂之先鸣兮,使夫百草为之不芳。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何琼佩之偃蹇兮,众薆然而蔽之。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"惟此党人之不谅兮,恐嫉妒而折之。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"时缤纷其变易兮,又何可以淹留?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"兰芷变而不芳兮,荃蕙化而为茅。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何昔日之芳草兮,今直为此萧艾也?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"岂其有他故兮,莫好修之害也!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"余以兰为可恃兮,羌无实而容长。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"委厥美以从俗兮,苟得列乎众芳。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"椒专佞以慢慆兮,樧又欲充夫佩帏。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"既干进而务入兮,又何芳之能祗?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"固时俗之流从兮,又孰能无变化?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"览椒兰其若兹兮,又况揭车与江离?",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"惟兹佩之可贵兮,委厥美而历兹。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"芳菲菲而难亏兮,芬至今犹未沬。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"和调度以自娱兮,聊浮游而求女。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"及余饰之方壮兮,周流观乎上下。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"灵氛既告余以吉占兮,历吉日乎吾将行。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"折琼枝以为羞兮,精琼爢以为粻。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"为余驾飞龙兮,杂瑶象以为车。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"何离心之可同兮?吾将远逝以自疏。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"邅吾道夫昆仑兮,路修远以周流。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"扬云霓之晻蔼兮,鸣玉鸾之啾啾。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"朝发轫于天津兮,夕余至乎西极。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"凤皇翼其承旗兮,高翱翔之翼翼。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"忽吾行此流沙兮,遵赤水而容与。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"麾蛟龙使梁津兮,诏西皇使涉予。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"路修远以多艰兮,腾众车使径待。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"路不周以左转兮,指西海以为期。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"屯余车其千乘兮,齐玉轪而并驰。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"驾八龙之婉婉兮,载云旗之委蛇。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"抑志而弭节兮,神高驰之邈邈。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"奏《九歌》而舞《韶》兮,聊假日以媮乐。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"陟升皇之赫戏兮,忽临睨夫旧乡。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"仆夫悲余马怀兮,蜷局顾而不行。",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"乱曰:已矣哉!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"国无人莫我知兮,又何怀乎故都!",author:"屈原",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"},{text:"既莫足与为美政兮,吾将从彭咸之所居!",author:"离骚",contributor:"Sunwuyuan",link:"https://www.gushiwen.cn/shiwenv.aspx?id=f5714bcd33e3"}],Nt={quotes:gs};let ot=null;async function ws(){return ot||(ot=(await Ft(async()=>{const{default:s}=await import("./core-IlBOtVFl.js").then(e=>e.c);return{default:s}},[],import.meta.url)).default),ot}const Pt={text:"点击此处可以查看 Classworks 用户群里沙雕群友们的发言",author:"点击后会复制当前句子到剪贴板中"},zt={main:{delay:50,deleteSpeed:100},source:{delay:10,deleteSpeed:10,cursor:""}},vs={name:"EchoChamberCard",components:{SettingsCard:W},data:()=>({typewriter:null,sourceWriter:null,currentQuote:Pt,hasClicked:!1}),mounted(){this.initTypewriters()},methods:{async initTypewriters(){const s=await ws();this.typewriter=new s(this.$refs.typewriter,zt.main),this.sourceWriter=new s(this.$refs.sourceWriter,zt.source),this.typeQuote(Pt)},typeQuote(s){this.typewriter.deleteAll(30).typeString(s.text).start(),s.author&&this.sourceWriter.deleteAll(20).typeString(s.author).start()},async handleClick(){this.hasClicked||(this.hasClicked=!0),await this.copyToClipboard(),this.currentQuote=this.getRandomQuote(),this.typeQuote(this.currentQuote)},getRandomQuote(){return Nt.quotes[Math.floor(Math.random()*Nt.quotes.length)]},async copyToClipboard(){if(!this.currentQuote)return;const{text:s,author:e,contributor:o,link:u}=this.currentQuote,i=[s,e&&`作者:${e}`,o&&`贡献者:${o}`,(u||o)&&`来源:${u||`https://github.com/${o}`}`].filter(Boolean);try{await navigator.clipboard.writeText(i.join(`
`))}catch(l){console.error("复制失败:",l)}}},beforeUnmount(){[this.typewriter,this.sourceWriter].forEach(s=>s==null?void 0:s.stop())}},bs={ref:"typewriter",class:"typewriter-text"},ys={ref:"sourceWriter",class:"source-text"};function ks(s,e,o,u,i,l){const d=W;return m(),h(d,{border:"",icon:"mdi-thought-bubble",title:"回声洞",onClick:l.handleClick},{default:n(()=>[t(j,null,{default:n(()=>[c("div",bs,null,512),c("div",ys,null,512)]),_:1}),t(Nn,{name:"fade"},{default:n(()=>{var f;return[(f=s.currentQuote)!=null&&f.contributor?(m(),h(G,{key:0,class:"contributor"},{default:n(()=>[t(et,{start:""},{default:n(()=>[t(Kt,{src:`https://github.com/${s.currentQuote.contributor}.png`},null,8,["src"])]),_:1}),a(" "+v(s.currentQuote.contributor),1)]),_:1})):b("",!0)]}),_:1})]),_:1},8,["onClick"])}const Xt=Q(vs,[["render",ks],["__scopeId","data-v-2acb3fbb"]]),xs={name:"SettingItem",props:{settingKey:{type:String,required:!0},icon:{type:String,default:null},disabled:{type:Boolean,default:!1},title:{type:String,default:null},description:{type:String,default:null}},data(){return{localValue:null,definition:null,type:null,selectOptions:[],hasOptions:!1,minValue:0,maxValue:100,stepValue:1,showSnackbar:!1,snackbarText:"",fontFamilies:[{title:"Arial",value:"Arial, sans-serif"},{title:"Calibri",value:"Calibri, sans-serif"},{title:"Cambria",value:"Cambria, serif"},{title:"Consolas",value:"Consolas, monospace"},{title:"Courier New",value:"Courier New, monospace"},{title:"Georgia",value:"Georgia, serif"},{title:"Helvetica",value:"Helvetica, sans-serif"},{title:"Segoe UI",value:"Segoe UI, sans-serif"},{title:"Times New Roman",value:"Times New Roman, serif"},{title:"Trebuchet MS",value:"Trebuchet MS, sans-serif"},{title:"Verdana",value:"Verdana, sans-serif"},{title:"Monospace",value:"monospace"},{title:"Sans-serif",value:"sans-serif"},{title:"Serif",value:"serif"}],displayValueMappings:{"display.emptySubjectDisplay":{card:"卡片",button:"按钮"},"theme.mode":{light:"浅色",dark:"深色"},"server.provider":{classworkscloud:"Classworks云端存储","kv-local":"KV本地存储","kv-server":"KV远程服务器"}},defaultIcons:{boolean:"mdi-toggle-switch-outline",number:"mdi-numeric",string:"mdi-form-textbox"}}},computed:{displayTitle(){if(this.title)return this.title;if(this.definition&&this.definition.description)return this.definition.description;const s=this.settingKey.split(".");return s[s.length-1]},displayDescription(){return this.description?this.description:this.settingKey},isFontFamily(){return this.settingKey.toLowerCase().includes("fontfamily")||this.settingKey.toLowerCase().includes("font.family")},isDefaultValue(){return this.definition?typeof this.localValue=="object"&&this.localValue!==null?JSON.stringify(this.localValue)===JSON.stringify(this.definition.default):this.localValue===this.definition.default:!0},settingIcon(){return this.icon?this.icon:this.definition&&this.definition.icon?this.definition.icon:this.defaultIcons[this.type]||"mdi-cog-outline"}},created(){this.loadSetting()},methods:{loadSetting(){if(this.definition=Cn(this.settingKey),!this.definition){console.error(`未找到设置项定义: ${this.settingKey}`);return}if(this.type=this.definition.type,this.localValue=k(this.settingKey),this.type==="string"){if(this.isFontFamily)this.selectOptions=this.fontFamilies,this.hasOptions=!0;else if(this.settingKey in this.displayValueMappings){const s=this.displayValueMappings[this.settingKey];this.selectOptions=Object.entries(s).map(([e,o])=>({title:o,value:e})),this.hasOptions=!0}else if(this.definition.validate){const e=this.definition.validate.toString().match(/\[(.*?)\]/);if(e){const u=e[1].split(",").map(i=>{const l=i.trim().replace(/['"]/g,"");return{title:this.getDisplayValue(l)||l,value:l}});u.length>0&&(this.selectOptions=u,this.hasOptions=!0)}}}if(this.type==="number"&&this.definition.validate){const s=this.definition.validate.toString(),e=s.match(/value\s*>=\s*(\d+)/);e&&(this.minValue=Number(e[1]));const o=s.match(/value\s*<=\s*(\d+)/);o&&(this.maxValue=Number(o[1]));const u=this.maxValue-this.minValue;u>100?this.stepValue=10:u>20?this.stepValue=5:u>10?this.stepValue=2:this.stepValue=1}},getDisplayValue(s){return this.settingKey in this.displayValueMappings&&this.displayValueMappings[this.settingKey][s]||s},updateSetting(s){let e=s;this.type==="boolean"?e=!!s:this.type==="number"&&(e=Number(s),e<this.minValue&&(e=this.minValue),e>this.maxValue&&(e=this.maxValue)),re(this.settingKey,e)?this.$emit("update",this.settingKey,e):(this.localValue=k(this.settingKey),this.$emit("error",this.settingKey))},adjustValue(s){if(this.type!=="number")return;const e=this.localValue+s;e>=this.minValue&&e<=this.maxValue&&(this.localValue=e,this.updateSetting(e))},copySettingId(){navigator.clipboard.writeText(this.settingKey).then(()=>{this.showSnackbarMessage("设置ID已复制到剪贴板")}).catch(s=>{console.error("复制失败:",s)})},copySettingValue(){let s="";typeof this.localValue=="object"&&this.localValue!==null?s=JSON.stringify(this.localValue):s=String(this.localValue),navigator.clipboard.writeText(s).then(()=>{this.showSnackbarMessage("设置值已复制到剪贴板")}).catch(e=>{console.error("复制失败:",e)})},resetToDefault(){this.definition&&(Te(this.settingKey),this.localValue=k(this.settingKey),this.showSnackbarMessage("已重置为默认值"),this.$emit("update",this.settingKey,this.localValue))},showSnackbarMessage(s){this.snackbarText=s,this.showSnackbar=!0}}},Ss={class:"text-caption text-grey-darken-1"},Cs={class:"d-flex flex-column flex-sm-row align-center"},Vs={key:0,class:"me-2"},_s={key:2,class:"d-flex align-center"},Ds={key:0,class:"px-4 pb-2 pt-0"};function As(s,e,o,u,i,l){return m(),y(H,null,[t(D,{disabled:o.disabled,class:"setting-item"},{prepend:n(()=>[t(g,{icon:l.settingIcon},null,8,["icon"])]),append:n(()=>[c("div",Cs,[i.type!=="string"||i.hasOptions?(m(),y("div",Vs,[i.type==="boolean"?(m(),h(ht,{key:0,modelValue:i.localValue,"onUpdate:modelValue":[e[0]||(e[0]=d=>i.localValue=d),l.updateSetting],disabled:o.disabled,density:"comfortable","hide-details":""},null,8,["modelValue","disabled","onUpdate:modelValue"])):i.type==="string"&&i.hasOptions?(m(),h(Ze,{key:1,modelValue:i.localValue,"onUpdate:modelValue":[e[1]||(e[1]=d=>i.localValue=d),l.updateSetting],disabled:o.disabled,items:i.selectOptions,"bg-color":"surface",class:"setting-select",density:"compact","hide-details":"","item-title":"title","item-value":"value",variant:"outlined"},null,8,["modelValue","disabled","items","onUpdate:modelValue"])):i.type==="number"?(m(),y("div",_s,[t(p,{disabled:o.disabled||i.localValue<=i.minValue,icon:"mdi-minus",size:"small",variant:"text",onClick:e[2]||(e[2]=d=>l.adjustValue(-i.stepValue))},null,8,["disabled"]),t(N,{modelValue:i.localValue,"onUpdate:modelValue":[e[3]||(e[3]=d=>i.localValue=d),l.updateSetting],modelModifiers:{number:!0},disabled:o.disabled,max:i.maxValue,min:i.minValue,step:i.stepValue,"bg-color":"surface",class:"mx-2 setting-number-field",density:"compact","hide-details":"",style:{width:"80px"},type:"number",variant:"outlined"},null,8,["modelValue","disabled","max","min","step","onUpdate:modelValue"]),t(p,{disabled:o.disabled||i.localValue>=i.maxValue,icon:"mdi-plus",size:"small",variant:"text",onClick:e[4]||(e[4]=d=>l.adjustValue(i.stepValue))},null,8,["disabled"])])):b("",!0)])):b("",!0),t(gt,{location:"bottom"},{activator:n(({props:d})=>[t(p,Ve({disabled:o.disabled,class:"ml-2",icon:"mdi-dots-vertical",size:"small"},d,{variant:"text"}),null,16,["disabled"])]),default:n(()=>[t(O,{density:"compact"},{default:n(()=>[t(D,{onClick:l.copySettingId},{prepend:n(()=>[t(g,{icon:"mdi-key",size:"small"})]),default:n(()=>[t(z,null,{default:n(()=>[...e[7]||(e[7]=[a("复制设置ID",-1)])]),_:1})]),_:1},8,["onClick"]),t(D,{onClick:l.copySettingValue},{prepend:n(()=>[t(g,{icon:"mdi-content-copy",size:"small"})]),default:n(()=>[t(z,null,{default:n(()=>[...e[8]||(e[8]=[a("复制设置值",-1)])]),_:1})]),_:1},8,["onClick"]),t(U),t(D,{disabled:l.isDefaultValue,onClick:l.resetToDefault},{prepend:n(()=>[t(g,{icon:"mdi-restore",size:"small"})]),default:n(()=>[t(z,null,{default:n(()=>[...e[9]||(e[9]=[a("重置为默认值",-1)])]),_:1})]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})])]),default:n(()=>[t(z,{class:"text-wrap"},{default:n(()=>[a(v(l.displayTitle),1)]),_:1}),t(te,{class:"d-flex align-center text-wrap"},{default:n(()=>[c("span",Ss,v(o.settingKey),1)]),_:1})]),_:1},8,["disabled"]),i.type==="string"&&!i.hasOptions?(m(),y("div",Ds,[t(N,{modelValue:i.localValue,"onUpdate:modelValue":[e[5]||(e[5]=d=>i.localValue=d),l.updateSetting],disabled:o.disabled,"bg-color":"surface",class:"setting-text-field mt-1",density:"compact","hide-details":"",variant:"outlined"},null,8,["modelValue","disabled","onUpdate:modelValue"])])):b("",!0),t(ft,{modelValue:i.showSnackbar,"onUpdate:modelValue":e[6]||(e[6]=d=>i.showSnackbar=d),timeout:2e3,color:"success",location:"top"},{default:n(()=>[a(v(i.snackbarText),1)]),_:1},8,["modelValue"])],64)}const ve=Q(xs,[["render",As],["__scopeId","data-v-08b49b47"]]),Is={name:"SettingsExplorer",components:{SettingItem:ve},data(){return{searchQuery:"",currentSettings:{},unwatchFunction:null}},computed:{isDeveloperMode(){return k("developer.enabled")},allSettings(){var e;const s=[];for(const[o,u]of Object.entries(ut))this.searchQuery&&!o.toLowerCase().includes(this.searchQuery.toLowerCase())&&!((e=u.description)!=null&&e.toLowerCase().includes(this.searchQuery.toLowerCase()))||s.push({key:o,...u});return s},formattedSettings(){return JSON.stringify(this.currentSettings,null,2)}},created(){this.updateCurrentSettings(),this.unwatchFunction=pt(()=>{this.updateCurrentSettings()})},beforeUnmount(){this.unwatchFunction&&this.unwatchFunction()},methods:{updateCurrentSettings(){this.currentSettings=Re()},onSettingUpdate(s,e){this.$emit("update",s,e),this.updateCurrentSettings()},onSettingError(s){this.$emit("error",s)},copySettingsToClipboard(){navigator.clipboard.writeText(JSON.stringify(this.currentSettings)).then(()=>{this.$emit("message",{type:"success",text:"设置已复制到剪贴板"})}).catch(s=>{console.error("复制到剪贴板失败:",s),this.$emit("message",{type:"error",text:"复制到剪贴板失败"})})}}},Ts={class:"settings-explorer"},Us={class:"settings-json"};function js(s,e,o,u,i,l){const d=ve;return m(),y("div",Ts,[c("div",null,[t(N,{modelValue:i.searchQuery,"onUpdate:modelValue":e[0]||(e[0]=f=>i.searchQuery=f),class:"mb-4",clearable:"",density:"comfortable",label:"搜索设置","prepend-inner-icon":"mdi-magnify",variant:"outlined"},null,8,["modelValue"]),t(O,null,{default:n(()=>[(m(!0),y(H,null,ne(l.allSettings,f=>(m(),y("div",{key:f.key},[(m(),h(d,{key:f.key,disabled:f.requireDeveloper&&!l.isDeveloperMode,"setting-key":f.key,onError:l.onSettingError,onUpdate:l.onSettingUpdate},null,8,["disabled","setting-key","onError","onUpdate"])),t(U,{class:"my-2"})]))),128))]),_:1}),t(M,{border:""},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[...e[1]||(e[1]=[a("当前配置",-1)])]),_:1}),t(j,null,{default:n(()=>[c("pre",Us,v(l.formattedSettings),1)]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{onClick:l.copySettingsToClipboard},{default:n(()=>[e[3]||(e[3]=a(" 复制到剪贴板 ",-1)),t(g,{right:""},{default:n(()=>[...e[2]||(e[2]=[a("mdi-content-copy",-1)])]),_:1})]),_:1},8,["onClick"])]),_:1})]),_:1})])])}const $t=Q(Is,[["render",js],["__scopeId","data-v-4d032f99"]]),St=Symbol.for("vuetify:v-slider");function Bs(s,e,o){const u=o==="vertical",i=e.getBoundingClientRect(),l="touches"in s?s.touches[0]:s;return u?l.clientY-(i.top+i.height/2):l.clientX-(i.left+i.width/2)}function Ms(s,e){return"touches"in s&&s.touches.length?s.touches[0][e]:"changedTouches"in s&&s.changedTouches.length?s.changedTouches[0][e]:s[e]}const Ns=Fe({disabled:{type:Boolean,default:null},error:Boolean,readonly:{type:Boolean,default:null},max:{type:[Number,String],default:100},min:{type:[Number,String],default:0},step:{type:[Number,String],default:0},thumbColor:String,thumbLabel:{type:[Boolean,String],default:void 0,validator:s=>typeof s=="boolean"||s==="always"||s==="hover"},thumbSize:{type:[Number,String],default:20},showTicks:{type:[Boolean,String],default:!1,validator:s=>typeof s=="boolean"||s==="always"},ticks:{type:[Array,Object]},tickSize:{type:[Number,String],default:2},color:String,trackColor:String,trackFillColor:String,trackSize:{type:[Number,String],default:4},direction:{type:String,default:"horizontal",validator:s=>["vertical","horizontal"].includes(s)},reverse:Boolean,noKeyboard:Boolean,..._n(),...Vn({elevation:2}),ripple:{type:Boolean,default:!0}},"Slider"),Ps=s=>{const e=L(()=>parseFloat(s.min)),o=L(()=>parseFloat(s.max)),u=L(()=>Number(s.step)>0?parseFloat(s.step):0),i=L(()=>Math.max(It(u.value),It(e.value)));function l(d){if(d=parseFloat(d),u.value<=0)return d;const f=mt(d,e.value,o.value),r=e.value%u.value;let w=Math.round((f-r)/u.value)*u.value+r;return f>w&&w+u.value>o.value&&(w=o.value),parseFloat(Math.min(w,o.value).toFixed(i.value))}return{min:e,max:o,step:u,decimals:i,roundValue:l}},zs=s=>{let{props:e,steps:o,onSliderStart:u,onSliderMove:i,onSliderEnd:l,getActiveThumb:d}=s;const f=Jn(e),{isRtl:r}=wt(),w=Ce(()=>e.reverse),x=L(()=>e.direction==="vertical"),I=L(()=>x.value!==w.value),{min:F,max:$,step:J,decimals:he,roundValue:ae}=o,ce=L(()=>parseInt(e.thumbSize,10)),le=L(()=>parseInt(e.tickSize,10)),oe=L(()=>parseInt(e.trackSize,10)),C=L(()=>($.value-F.value)/J.value),V=L(()=>e.error||f.isDisabled.value?void 0:e.thumbColor??e.color),T=L(()=>e.error||f.isDisabled.value?void 0:e.thumbColor),_=L(()=>e.error||f.isDisabled.value?void 0:e.trackColor??e.color),E=L(()=>e.error||f.isDisabled.value?void 0:e.trackFillColor??e.color),q=qe(!1),P=qe(0),ee=se(),A=se();function X(S){var Ct;const B=(Ct=ee.value)==null?void 0:Ct.$el;if(!B)return;const me=e.direction==="vertical",Me=me?"top":"left",Qe=me?"height":"width",Ge=me?"clientY":"clientX",{[Me]:We,[Qe]:kn}=B.getBoundingClientRect(),xn=Ms(S,Ge);let lt=mt((xn-We-P.value)/kn)||0;return(me?I.value:I.value!==r.value)&&(lt=1-lt),ae(F.value+lt*($.value-F.value))}const be=S=>{const B=X(S);B!=null&&l({value:B}),q.value=!1,P.value=0},ge=S=>{const B=X(S);A.value=d(S),A.value&&(q.value=!0,A.value.contains(S.target)?P.value=Bs(S,A.value,e.direction):(P.value=0,B!=null&&i({value:B})),B!=null&&u({value:B}),zn(()=>{var me;return(me=A.value)==null?void 0:me.focus()}))},ye={passive:!0,capture:!0};function ke(S){const B=X(S);B!=null&&i({value:B})}function je(S){S.stopPropagation(),S.preventDefault(),be(S),window.removeEventListener("mousemove",ke,ye),window.removeEventListener("mouseup",je)}function Ie(S){var B;be(S),window.removeEventListener("touchmove",ke,ye),(B=S.target)==null||B.removeEventListener("touchend",Ie)}function Be(S){var B;ge(S),window.addEventListener("touchmove",ke,ye),(B=S.target)==null||B.addEventListener("touchend",Ie,{passive:!1})}function Ee(S){S.button===0&&(S.preventDefault(),ge(S),window.addEventListener("mousemove",ke,ye),window.addEventListener("mouseup",je,{passive:!1}))}Pn(()=>{window.removeEventListener("touchmove",ke),window.removeEventListener("mousemove",ke),window.removeEventListener("mouseup",je)});const xe=S=>{const B=(S-F.value)/($.value-F.value)*100;return mt(isNaN(B)?0:B,0,100)},Oe=Ce(()=>e.showTicks),Je=L(()=>Oe.value?e.ticks?Array.isArray(e.ticks)?e.ticks.map(S=>({value:S,position:xe(S),label:S.toString()})):Object.keys(e.ticks).map(S=>({value:parseFloat(S),position:xe(parseFloat(S)),label:e.ticks[S]})):C.value!==1/0?qn(C.value+1).map(S=>{const B=F.value+S*J.value;return{value:B,position:xe(B)}}):[]:[]),it=L(()=>Je.value.some(S=>{let{label:B}=S;return!!B})),He={activeThumbRef:A,color:Ce(()=>e.color),decimals:he,disabled:f.isDisabled,direction:Ce(()=>e.direction),elevation:Ce(()=>e.elevation),hasLabels:it,isReversed:w,indexFromEnd:I,min:F,max:$,mousePressed:q,noKeyboard:Ce(()=>e.noKeyboard),numTicks:C,onSliderMousedown:Ee,onSliderTouchstart:Be,parsedTicks:Je,parseMouseMove:X,position:xe,readonly:f.isReadonly,rounded:Ce(()=>e.rounded),roundValue:ae,showTicks:Oe,startOffset:P,step:J,thumbSize:ce,thumbColor:V,thumbLabelColor:T,thumbLabel:Ce(()=>e.thumbLabel),ticks:Ce(()=>e.ticks),tickSize:le,trackColor:_,trackContainerRef:ee,trackFillColor:E,trackSize:oe,vertical:x};return En(St,He),He},Es=Fe({focused:Boolean,max:{type:Number,required:!0},min:{type:Number,required:!0},modelValue:{type:Number,required:!0},position:{type:Number,required:!0},ripple:{type:[Boolean,Object],default:!0},name:String,noKeyboard:Boolean,...Gt()},"VSliderThumb"),Ls=tt()({name:"VSliderThumb",directives:{vRipple:Vt},props:Es(),emits:{"update:modelValue":s=>!0},setup(s,e){let{slots:o,emit:u}=e;const i=Qt(St),{isRtl:l,rtlClasses:d}=wt();if(!i)throw new Error("[Vuetify] v-slider-thumb must be used inside v-slider or v-range-slider");const{min:f,max:r,thumbColor:w,thumbLabelColor:x,step:I,disabled:F,thumbSize:$,thumbLabel:J,direction:he,isReversed:ae,vertical:ce,readonly:le,elevation:oe,mousePressed:C,decimals:V,indexFromEnd:T}=i,_=qe(!1),E=qe(!1),q=L(()=>F.value?void 0:oe.value),{elevationClasses:P}=In(q),{textColorClasses:ee,textColorStyles:A}=Dn(w),{backgroundColorClasses:X,backgroundColorStyles:be}=dt(x),{pageup:ge,pagedown:ye,end:ke,home:je,left:Ie,right:Be,down:Ee,up:xe}=Zn,Oe=[ge,ye,ke,je,Ie,Be,Ee,xe],Je=L(()=>I.value?[1,2,3]:[1,5,10]);function it(S,B){if(s.noKeyboard||F.value||!Oe.includes(S.key))return;S.preventDefault();const me=I.value||.1,Me=(r.value-f.value)/me;if([Ie,Be,Ee,xe].includes(S.key)){const Ge=(ce.value?[l.value?Ie:Be,ae.value?Ee:xe]:T.value!==l.value?[Ie,xe]:[Be,xe]).includes(S.key)?1:-1,We=S.shiftKey?2:S.ctrlKey?1:0;Ge===-1&&B===r.value&&!We&&!Number.isInteger(Me)?B=B-Me%1*me:B=B+Ge*me*Je.value[We]}else if(S.key===je)B=f.value;else if(S.key===ke)B=r.value;else{const Qe=S.key===ye?1:-1;B=B-Qe*me*(Me>100?Me/10:10)}return Math.max(s.min,Math.min(s.max,B))}function He(S){const B=it(S,s.modelValue);B!=null&&(E.value=!1,u("update:modelValue",B))}return ct(()=>s.focused,S=>{S&&(E.value=!1)}),vt(()=>{const S=Ue(T.value?100-s.position:s.position,"%"),B=J.value==="always"||J.value===!0&&s.focused||J.value==="hover"&&(_.value||s.focused&&!E.value);return c("div",{class:pe(["v-slider-thumb",{"v-slider-thumb--focused":s.focused,"v-slider-thumb--pressed":s.focused&&C.value},s.class,d.value]),style:De([{"--v-slider-thumb-position":S,"--v-slider-thumb-size":Ue($.value)},s.style]),role:"slider",tabindex:F.value?-1:0,"aria-label":s.name,"aria-valuemin":f.value,"aria-valuemax":r.value,"aria-valuenow":s.modelValue,"aria-readonly":!!le.value,"aria-orientation":he.value,onKeydown:le.value?void 0:He,onMouseenter:()=>{_.value=!0},onMouseleave:()=>{_.value=!1,E.value=!0}},[c("div",{class:pe(["v-slider-thumb__surface",ee.value,P.value]),style:De(A.value)},null),Dt(c("div",{class:pe(["v-slider-thumb__ripple",ee.value]),style:De(A.value)},null),[[Vt,s.ripple,null,{circle:!0,center:!0}]]),t(An,{origin:"bottom center"},{default:()=>{var me;return[Dt(c("div",{class:"v-slider-thumb__label-container"},[c("div",{class:pe(["v-slider-thumb__label",X.value]),style:De(be.value)},[c("div",null,[((me=o["thumb-label"])==null?void 0:me.call(o,{modelValue:s.modelValue}))??s.modelValue.toFixed(I.value?V.value:1)]),c("div",{class:"v-slider-thumb__label-wedge"},null)])]),[[Ln,B]])]}})])}),{}}}),Rs=Fe({start:{type:Number,required:!0},stop:{type:Number,required:!0},...Gt()},"VSliderTrack"),Ks=tt()({name:"VSliderTrack",props:Rs(),emits:{},setup(s,e){let{slots:o}=e;const u=Qt(St);if(!u)throw new Error("[Vuetify] v-slider-track must be inside v-slider or v-range-slider");const{color:i,parsedTicks:l,rounded:d,showTicks:f,tickSize:r,trackColor:w,trackFillColor:x,trackSize:I,vertical:F,min:$,max:J,indexFromEnd:he}=u,{roundedClasses:ae}=Tn(d),{backgroundColorClasses:ce,backgroundColorStyles:le}=dt(x),{backgroundColorClasses:oe,backgroundColorStyles:C}=dt(w),V=L(()=>`inset-${F.value?"block":"inline"}-${he.value?"end":"start"}`),T=L(()=>F.value?"height":"width"),_=L(()=>({[V.value]:"0%",[T.value]:"100%"})),E=L(()=>s.stop-s.start),q=L(()=>({[V.value]:Ue(s.start,"%"),[T.value]:Ue(E.value,"%")})),P=L(()=>f.value?(F.value?l.value.slice().reverse():l.value).map((A,X)=>{var ge;const be=A.value!==$.value&&A.value!==J.value?Ue(A.position,"%"):void 0;return c("div",{key:A.value,class:pe(["v-slider-track__tick",{"v-slider-track__tick--filled":A.position>=s.start&&A.position<=s.stop,"v-slider-track__tick--first":A.value===$.value,"v-slider-track__tick--last":A.value===J.value}]),style:{[V.value]:be}},[(A.label||o["tick-label"])&&c("div",{class:"v-slider-track__tick-label"},[((ge=o["tick-label"])==null?void 0:ge.call(o,{tick:A,index:X}))??A.label])])}):[]);return vt(()=>c("div",{class:pe(["v-slider-track",ae.value,s.class]),style:De([{"--v-slider-track-size":Ue(I.value),"--v-slider-tick-size":Ue(r.value)},s.style])},[c("div",{class:pe(["v-slider-track__background",oe.value,{"v-slider-track__background--opacity":!!i.value||!x.value}]),style:{..._.value,...C.value}},null),c("div",{class:pe(["v-slider-track__fill",ce.value]),style:{...q.value,...le.value}},null),f.value&&c("div",{class:pe(["v-slider-track__ticks",{"v-slider-track__ticks--always-show":f.value==="always"}])},[P.value])])),{}}}),Fs=Fe({...Wn(),...Ns(),...Gn(),modelValue:{type:[Number,String],default:0}},"VSlider"),Et=tt()({name:"VSlider",inheritAttrs:!1,props:Fs(),emits:{"update:focused":s=>!0,"update:modelValue":s=>!0,start:s=>!0,end:s=>!0},setup(s,e){let{slots:o,emit:u,attrs:i}=e;const l=se(),d=se(),{rtlClasses:f}=wt(),r=Ps(s),w=Wt(s,"modelValue",void 0,P=>r.roundValue(P??r.min.value)),{min:x,max:I,mousePressed:F,roundValue:$,onSliderMousedown:J,onSliderTouchstart:he,trackContainerRef:ae,position:ce,hasLabels:le,disabled:oe,readonly:C,noKeyboard:V}=zs({props:s,steps:r,onSliderStart:()=>{!oe.value&&!C.value&&u("start",w.value)},onSliderEnd:P=>{let{value:ee}=P;const A=$(ee);!oe.value&&!C.value&&(w.value=A),u("end",A)},onSliderMove:P=>{let{value:ee}=P;!oe.value&&!C.value&&(w.value=$(ee))},getActiveThumb:()=>{var P;return(P=l.value)==null?void 0:P.$el}}),{isFocused:T,focus:_,blur:E}=Hn(s),q=L(()=>ce(w.value));return vt(()=>{const P=At.filterProps(s),[ee,A]=Xn(i),X=!!(s.label||o.label||o.prepend);return t(At,Ve({ref:d,class:["v-slider",{"v-slider--has-labels":!!o["tick-label"]||le.value,"v-slider--focused":T.value,"v-slider--pressed":F.value,"v-slider--disabled":oe.value},f.value,s.class],style:s.style},P,ee,{focused:T.value}),{...o,prepend:X?be=>{var ge,ye;return c(H,null,[((ge=o.label)==null?void 0:ge.call(o,be))??(s.label?t(Qn,{id:be.id.value,class:"v-slider__label",text:s.label},null):void 0),(ye=o.prepend)==null?void 0:ye.call(o,be)])}:void 0,default:be=>{let{id:ge,messagesId:ye}=be;return c("div",{class:"v-slider__container",onMousedown:C.value?void 0:J,onTouchstartPassive:C.value?void 0:he},[c("input",{id:ge.value,name:s.name||ge.value,disabled:oe.value,readonly:C.value,tabindex:"-1",value:w.value},null),t(Ks,{ref:ae,start:0,stop:q.value},{"tick-label":o["tick-label"]}),t(Ls,Ve({ref:l,"aria-describedby":ye.value,focused:T.value,noKeyboard:V.value,min:x.value,max:I.value,modelValue:w.value,"onUpdate:modelValue":ke=>w.value=ke,position:q.value,elevation:s.elevation,onFocus:_,onBlur:E,ripple:s.ripple,name:s.name},A),{"thumb-label":o["thumb-label"]})])}})}),Un({focus:()=>{var P;return(P=l.value)==null?void 0:P.$el.focus()}},d)}}),Os=[{label:"Bing 随机壁纸",url:"https://bing.img.run/rand.php"},{label:"Bing 每日壁纸",url:"https://bing.img.run/1920x1080.php"},{label:"随机风景",url:"https://picsum.photos/1920/1080?random=1"},{label:"随机二次元",url:"https://uapis.cn/api/v1/random/image?category=acg&type=pc"}],at=10,Js={name:"BackgroundSettingsCard",components:{SettingsCard:W,SettingItem:ve},data(){const s=k("background.imageData")||"",e=k("background.url")||"";return{imageSource:s?"upload":"url",localUrl:e,localImageData:s,localBlur:k("background.blur")??10,localOpacity:k("background.opacity")??30,isDragging:!1,saving:!1,uploadWarning:"",urlPresets:Os,settingItemKey:0,maxImageSizeMB:at}},computed:{activeImageSrc(){return this.imageSource==="upload"&&this.localImageData?this.localImageData:this.imageSource==="url"&&this.localUrl?this.localUrl:""},previewContainerStyle(){return{position:"relative",width:"100%",height:"160px",borderRadius:"12px",overflow:"hidden",border:"1px solid rgba(128,128,128,0.3)"}},previewBgStyle(){return this.activeImageSrc?{position:"absolute",inset:"0",backgroundImage:`url(${this.activeImageSrc})`,backgroundSize:"cover",backgroundPosition:"center",filter:`blur(${this.localBlur}px)`,transform:"scale(1.1)"}:{position:"absolute",inset:"0",background:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)",filter:`blur(${this.localBlur}px)`,transform:"scale(1.1)"}},previewOverlayStyle(){return{position:"absolute",inset:"0",background:`rgba(0, 0, 0, ${this.localOpacity/100})`}}},methods:{validateUrl(s){if(!s)return!0;try{return new URL(s),!0}catch{return"请输入有效的图片地址"}},onUrlChange(s){this.localUrl=s||""},onBlurChange(s){this.localBlur=s},onOpacityChange(s){this.localOpacity=s},applyPreset(s){this.localUrl=s,this.imageSource="url"},triggerFileInput(){this.$refs.fileInput.click()},handleDrop(s){var o,u;this.isDragging=!1;const e=(u=(o=s.dataTransfer)==null?void 0:o.files)==null?void 0:u[0];e&&this.processFile(e)},handleFileChange(s){var o;const e=(o=s.target.files)==null?void 0:o[0];e&&this.processFile(e),s.target.value=""},processFile(s){if(this.uploadWarning="",!s.type.startsWith("image/")){this.uploadWarning="请选择图片文件";return}const e=s.size/1024/1024;if(e>at){this.uploadWarning=`图片大小为 ${e.toFixed(1)}MB超过 ${at}MB 限制,请压缩后重试`;return}const o=new FileReader;o.onload=u=>{this.localImageData=u.target.result},o.readAsDataURL(s)},clearUploadedImage(){this.localImageData="",this.uploadWarning=""},async saveAll(){this.saving=!0;try{this.imageSource==="upload"?(re("background.imageData",this.localImageData||""),re("background.url","")):(re("background.url",this.localUrl||""),re("background.imageData","")),re("background.blur",this.localBlur),re("background.opacity",this.localOpacity)}finally{this.saving=!1}},resetAll(){Te("background.enabled"),Te("background.url"),Te("background.imageData"),Te("background.blur"),Te("background.opacity"),this.localUrl=k("background.url")||"",this.localImageData=k("background.imageData")||"",this.localBlur=k("background.blur")??10,this.localOpacity=k("background.opacity")??30,this.imageSource="url",this.uploadWarning="",this.settingItemKey++}}},Hs={class:"px-4 pb-4"},Qs={class:"d-flex align-center mb-4"},Gs={key:0,class:"mb-4"},Ws={class:"d-flex flex-wrap gap-2 mt-2"},Ys={key:1,class:"mb-4"},qs={class:"text-caption text-medium-emphasis mt-1"},Zs={key:1,class:"d-flex align-center ga-2"},Xs={class:"d-flex align-center mb-4"},$s={class:"mb-4"},ei={class:"d-flex justify-space-between align-center mb-1"},ti={class:"text-body-2 font-weight-bold"},ni={class:"mb-4"},si={class:"d-flex justify-space-between align-center mb-1"},ii={class:"text-body-2 font-weight-bold"},li={class:"d-flex justify-end ga-3"};function oi(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{border:"",icon:"mdi-image",title:"背景设置"},{default:n(()=>[t(O,null,{default:n(()=>[(m(),h(d,{key:i.settingItemKey,"setting-key":"background.enabled"}))]),_:1}),t(U,{class:"mb-4"}),c("div",Hs,[c("div",{class:"preview-area mb-6",style:De(l.previewContainerStyle)},[c("div",{class:"preview-bg",style:De(l.previewBgStyle)},null,4),c("div",{class:"preview-overlay",style:De(l.previewOverlayStyle)},null,4),e[9]||(e[9]=c("div",{class:"preview-text"},"背景预览",-1))],4),c("div",Qs,[t(g,{class:"mr-2",color:"primary"},{default:n(()=>[...e[10]||(e[10]=[a("mdi-image-search",-1)])]),_:1}),e[11]||(e[11]=c("span",{class:"text-subtitle-1 font-weight-bold"},"图片来源",-1))]),t(Ot,{modelValue:i.imageSource,"onUpdate:modelValue":e[0]||(e[0]=r=>i.imageSource=r),color:"primary",density:"comfortable",class:"mb-4",mandatory:"",rounded:"xl"},{default:n(()=>[t(p,{value:"url","prepend-icon":"mdi-link-variant"},{default:n(()=>[...e[12]||(e[12]=[a("网络地址",-1)])]),_:1}),t(p,{value:"upload","prepend-icon":"mdi-upload"},{default:n(()=>[...e[13]||(e[13]=[a("本地上传",-1)])]),_:1})]),_:1},8,["modelValue"]),i.imageSource==="url"?(m(),y("div",Gs,[t(N,{modelValue:i.localUrl,"onUpdate:modelValue":[e[1]||(e[1]=r=>i.localUrl=r),l.onUrlChange],label:"图片地址",placeholder:"https://example.com/background.jpg",variant:"outlined",density:"compact","prepend-inner-icon":"mdi-link",clearable:"","hide-details":"auto",rules:[l.validateUrl]},null,8,["modelValue","rules","onUpdate:modelValue"]),c("div",Ws,[(m(!0),y(H,null,ne(i.urlPresets,r=>(m(),h(G,{key:r.label,size:"small",variant:"tonal",color:"primary",class:"cursor-pointer",onClick:w=>l.applyPreset(r.url)},{default:n(()=>[a(v(r.label),1)]),_:2},1032,["onClick"]))),128))])])):b("",!0),i.imageSource==="upload"?(m(),y("div",Ys,[c("div",{class:pe(["upload-area rounded-xl pa-6 text-center mb-3",{"upload-hover":i.isDragging}]),onDragover:e[3]||(e[3]=Ae(r=>i.isDragging=!0,["prevent"])),onDragleave:e[4]||(e[4]=r=>i.isDragging=!1),onDrop:e[5]||(e[5]=Ae((...r)=>l.handleDrop&&l.handleDrop(...r),["prevent"])),onClick:e[6]||(e[6]=(...r)=>l.triggerFileInput&&l.triggerFileInput(...r))},[t(g,{size:"40",color:"primary",class:"mb-2"},{default:n(()=>[...e[14]||(e[14]=[a("mdi-image-plus",-1)])]),_:1}),e[15]||(e[15]=c("div",{class:"text-body-2"},"点击或拖拽图片到此处上传",-1)),c("div",qs,"支持 JPG、PNG、WebP、GIF建议小于 "+v(i.maxImageSizeMB)+"MB",1),c("input",{ref:"fileInput",type:"file",accept:"image/*",style:{display:"none"},onChange:e[2]||(e[2]=(...r)=>l.handleFileChange&&l.handleFileChange(...r))},null,544)],34),i.uploadWarning?(m(),h(Y,{key:0,type:"warning",variant:"tonal",density:"compact",class:"mb-2",icon:"mdi-alert"},{default:n(()=>[a(v(i.uploadWarning),1)]),_:1})):b("",!0),i.localImageData?(m(),y("div",Zs,[t(G,{color:"success","prepend-icon":"mdi-check-circle",size:"small"},{default:n(()=>[...e[16]||(e[16]=[a(" 已上传本地图片 ",-1)])]),_:1}),t(p,{size:"small",variant:"text",color:"error","prepend-icon":"mdi-delete",onClick:l.clearUploadedImage},{default:n(()=>[...e[17]||(e[17]=[a(" 清除 ",-1)])]),_:1},8,["onClick"])])):b("",!0)])):b("",!0),t(U,{class:"my-5"}),c("div",Xs,[t(g,{class:"mr-2",color:"blue"},{default:n(()=>[...e[18]||(e[18]=[a("mdi-blur",-1)])]),_:1}),e[19]||(e[19]=c("span",{class:"text-subtitle-1 font-weight-bold"},"毛玻璃效果",-1))]),c("div",$s,[c("div",ei,[e[20]||(e[20]=c("span",{class:"text-body-2 text-medium-emphasis"},"模糊幅度",-1)),c("span",ti,v(i.localBlur)+"px",1)]),t(Et,{modelValue:i.localBlur,"onUpdate:modelValue":[e[7]||(e[7]=r=>i.localBlur=r),l.onBlurChange],min:0,max:50,step:1,color:"primary","track-color":"grey-lighten-3","thumb-label":"","hide-details":""},{prepend:n(()=>[t(g,{size:"small",color:"grey"},{default:n(()=>[...e[21]||(e[21]=[a("mdi-blur-off",-1)])]),_:1})]),append:n(()=>[t(g,{size:"small",color:"primary"},{default:n(()=>[...e[22]||(e[22]=[a("mdi-blur",-1)])]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),c("div",ni,[c("div",si,[e[23]||(e[23]=c("span",{class:"text-body-2 text-medium-emphasis"},"遮罩暗色程度",-1)),c("span",ii,v(i.localOpacity)+"%",1)]),t(Et,{modelValue:i.localOpacity,"onUpdate:modelValue":[e[8]||(e[8]=r=>i.localOpacity=r),l.onOpacityChange],min:0,max:80,step:1,color:"blue-grey","track-color":"grey-lighten-3","thumb-label":"","hide-details":""},{prepend:n(()=>[t(g,{size:"small",color:"grey"},{default:n(()=>[...e[24]||(e[24]=[a("mdi-brightness-7",-1)])]),_:1})]),append:n(()=>[t(g,{size:"small",color:"blue-grey"},{default:n(()=>[...e[25]||(e[25]=[a("mdi-brightness-2",-1)])]),_:1})]),_:1},8,["modelValue","onUpdate:modelValue"])]),t(U,{class:"my-5"}),c("div",li,[t(p,{variant:"text","prepend-icon":"mdi-restore",onClick:l.resetAll},{default:n(()=>[...e[26]||(e[26]=[a(" 重置 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"primary",variant:"elevated","prepend-icon":"mdi-content-save",loading:i.saving,onClick:l.saveAll},{default:n(()=>[...e[27]||(e[27]=[a(" 保存设置 ",-1)])]),_:1},8,["loading","onClick"])])])]),_:1})}const en=Q(Js,[["render",oi],["__scopeId","data-v-4836034d"]]),ai={name:"SettingGroup",props:{title:{type:String,default:null},description:{type:String,default:null},icon:{type:String,default:null},border:{type:Boolean,default:!1}},methods:{onSettingUpdate(s,e){this.$emit("update",s,e)},onSettingError(s){this.$emit("error",s)}}};function ri(s,e,o,u,i,l){return m(),h(M,{border:o.border,class:"setting-group"},{default:n(()=>[o.title?(m(),h(K,{key:0,class:"d-flex align-center"},{default:n(()=>[o.icon?(m(),h(g,{key:0,icon:o.icon,class:"mr-2"},null,8,["icon"])):b("",!0),a(" "+v(o.title),1)]),_:1})):b("",!0),o.description?(m(),h(Ke,{key:1},{default:n(()=>[a(v(o.description),1)]),_:1})):b("",!0),t(j,null,{default:n(()=>[t(O,null,{default:n(()=>[Ye(s.$slots,"default",{},void 0,!0)]),_:3})]),_:3}),s.$slots.actions?(m(),h(ue,{key:2},{default:n(()=>[Ye(s.$slots,"actions",{},void 0,!0)]),_:3})):b("",!0)]),_:3},8,["border"])}const nt=Q(ai,[["render",ri],["__scopeId","data-v-9af32ae4"]]),ui={subjects:{语文:{books:{课本:["第一单元","第二单元"],练习册:["第一章","第二章"]}},数学:{books:{课本:["第一章","第二章"],习题册:["基础练习","提高练习"]}},英语:{books:{课本:["Unit 1","Unit 2"],练习册:["Chapter 1","Chapter 2"]}}},commonSubject:{books:{试卷:["单元测试","期中测试","期末测试"],假期作业:["必做题","选做题"]}},actions:["写完","下一课","不交","明天交"]},di={name:"HomeworkTemplateCard",components:{SettingsCard:W,SettingGroup:nt},data(){return{loading:!1,error:null,config:Rn(JSON.parse(JSON.stringify(ui))),originalConfig:null,newSubject:"",newCommonBook:"",newAction:"",newTask:"",editedSubjects:{},editedBookTypes:{},newBookTypes:{},newBooks:{},showSnackbar:!1,snackbarText:"",snackbarColor:"success",isNewConfig:!0,dialog:{show:!1,title:"",nameLabel:"",editedItem:{name:"",type:"",subject:"",bookType:"",originalName:"",tasks:[]}}}},computed:{subjectList(){return Object.keys(this.config.subjects)},hasChanges(){return this.isNewConfig?!0:this.originalConfig&&JSON.stringify(this.config)!==JSON.stringify(this.originalConfig)}},created(){this.loadConfig()},methods:{async loadConfig(){var s,e;this.loading=!0;try{const o=await ie.loadData("classworks-config-homework-template");if(o){const u=o;Object.assign(this.config,u),this.originalConfig=JSON.parse(JSON.stringify(u)),this.isNewConfig=!1,this.showMessage("配置已加载","success")}else if(((s=o.error)==null?void 0:s.code)==="NOT_FOUND")this.showMessage("使用默认配置","info"),this.isNewConfig=!0;else{const u=((e=o.error)==null?void 0:e.message)||"加载失败";this.showMessage(`加载失败: ${u},可继续编辑当前配置`,"warning")}}catch(o){console.error("Failed to load config:",o),this.showMessage("加载失败,可继续编辑当前配置","warning")}this.loading=!1},async saveConfig(){this.loading=!0;try{const s=await ie.saveData("classworks-config-homework-template",this.config);if(s)this.originalConfig=JSON.parse(JSON.stringify(this.config)),this.isNewConfig=!1,this.showMessage("配置已保存","success");else throw new Error(s||"保存失败")}catch(s){console.error("Failed to save config:",s),this.showMessage(`保存失败: ${s.message},请稍后重试`,"error")}this.loading=!1},showMessage(s,e="success"){this.snackbarText=s,this.snackbarColor=e,this.showSnackbar=!0},addSubject(){this.newSubject&&(this.config.subjects[this.newSubject]||(this.config.subjects[this.newSubject]={books:{}}),this.newSubject="")},updateSubject(s){const e=this.editedSubjects[s];if(e&&e!==s){const o=this.config.subjects[s];this.config.subjects[e]=o,delete this.config.subjects[s]}delete this.editedSubjects[s]},deleteSubject(s){delete this.config.subjects[s]},addBookType(s){const e=this.newBookTypes[s];e&&(this.config.subjects[s].books[e]||(this.config.subjects[s].books[e]=[]),this.newBookTypes[s]="")},updateBookType(s,e){const o=`${s}-${e}`,u=this.editedBookTypes[o];if(u&&u!==e){const i=this.config.subjects[s].books[e];this.config.subjects[s].books[u]=i,delete this.config.subjects[s].books[e]}delete this.editedBookTypes[o]},deleteBookType(s,e){s==="common"?delete this.config.commonSubject.books[e]:delete this.config.subjects[s].books[e]},addBook(s,e){const o=`${s}-${e}`,u=this.newBooks[o];u&&(this.config.subjects[s].books[e].includes(u)||this.config.subjects[s].books[e].push(u),this.newBooks[o]="")},removeBook(s,e,o){const u=this.config.subjects[s].books[e],i=u.indexOf(o);i>-1&&u.splice(i,1)},addCommonBook(){this.newCommonBook&&(this.config.commonSubject.books[this.newCommonBook]||(this.config.commonSubject.books[this.newCommonBook]=[]),this.newCommonBook="")},removeCommonBook(s){delete this.config.commonSubject.books[s]},addAction(){this.newAction&&(this.config.actions.includes(this.newAction)||this.config.actions.push(this.newAction),this.newAction="")},removeAction(s){const e=this.config.actions.indexOf(s);e>-1&&this.config.actions.splice(e,1)},openBookDialog(s,e,o){this.dialog.show=!0,this.dialog.title="编辑需完成部分",this.dialog.nameLabel="部分名称",this.dialog.editedItem={name:o,type:"book",subject:s,bookType:e,originalName:o,tasks:this.config.subjects[s].books[e]}},openCommonBookDialog(s){this.dialog.show=!0,this.dialog.title="编辑通用作业本",this.dialog.nameLabel="作业本名称",this.dialog.editedItem={name:s,type:"commonBook",originalName:s,tasks:Array.isArray(this.config.commonSubject.books[s])?[...this.config.commonSubject.books[s]]:[]}},openActionDialog(s){this.dialog={show:!0,title:"编辑操作",nameLabel:"操作名称",editedItem:{name:s,type:"action",originalName:s,tasks:[]}}},addTask(){this.newTask&&(this.dialog.editedItem.tasks||(this.dialog.editedItem.tasks=[]),this.dialog.editedItem.tasks.push(this.newTask),this.newTask="")},removeTask(s){this.dialog.editedItem.tasks.splice(s,1)},openSubjectBookDialog(s,e,o){this.dialog.show=!0,this.dialog.title=s==="common"?"编辑通用作业本":"编辑作业本",this.dialog.nameLabel="作业本名称",this.dialog.editedItem={name:e,type:"subjectBook",subject:s,originalName:e,tasks:Array.isArray(o)?[...o]:[]}},saveDialog(){const{type:s,name:e,subject:o,originalName:u,tasks:i}=this.dialog.editedItem;if(!e){this.showMessage("名称不能为空","error");return}let l;const d=o==="common"?this.config.commonSubject.books:o?this.config.subjects[o].books:null;switch(s){case"subjectBook":d&&(u!==e?(d[e]=i||[],delete d[u]):d[e]=i||[]);break;case"action":l=this.config.actions.indexOf(u),l>-1&&(this.config.actions[l]=e);break}this.closeDialog()},closeDialog(){this.dialog={show:!1,title:"",nameLabel:"",editedItem:{name:"",type:"",subject:"",originalName:"",tasks:[]}},this.newTask=""}}},ci={class:"d-flex justify-space-between align-center mb-6"};function mi(s,e,o,u,i,l){const d=nt,f=W;return m(),h(f,{loading:i.loading,border:"",icon:"mdi-book-edit",title:"作业模板配置"},{default:n(()=>[i.error?(m(),h(Y,{key:0,class:"mb-4",closable:"",type:"error",variant:"tonal"},{default:n(()=>[a(v(i.error),1)]),_:1})):b("",!0),c("div",ci,[c("div",null,[t(p,{loading:i.loading,class:"mr-2",color:"primary","prepend-icon":"mdi-refresh",size:"large",onClick:l.loadConfig},{default:n(()=>[...e[7]||(e[7]=[a(" 重新加载配置 ",-1)])]),_:1},8,["loading","onClick"]),t(p,{loading:i.loading,color:"success","prepend-icon":"mdi-content-save",size:"large",onClick:l.saveConfig},{default:n(()=>[...e[8]||(e[8]=[a(" 保存所有更改 ",-1)])]),_:1},8,["loading","onClick"])]),l.hasChanges?(m(),h(G,{key:0,color:"warning",variant:"elevated"},{default:n(()=>[...e[9]||(e[9]=[a(" 有未保存的更改 ",-1)])]),_:1})):b("",!0)]),t(de,null,{default:n(()=>[t(R,{cols:"12",md:"6"},{default:n(()=>[t(d,{border:"",icon:"mdi-book",title:"科目配置"},{default:n(()=>[t(O,null,{default:n(()=>[t(D,null,{default:n(()=>[t(N,{modelValue:i.newSubject,"onUpdate:modelValue":e[0]||(e[0]=r=>i.newSubject=r),"append-inner-icon":"mdi-plus",density:"comfortable",label:"添加新科目",variant:"outlined","onClick:appendInner":l.addSubject,onKeyup:_e(l.addSubject,["enter"])},null,8,["modelValue","onClick:appendInner","onKeyup"])]),_:1}),(m(!0),y(H,null,ne(l.subjectList,r=>(m(),h(D,{key:r},{default:n(()=>[t(M,{border:"",class:"w-100 mb-2"},{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(N,{modelValue:i.editedSubjects[r],"onUpdate:modelValue":w=>i.editedSubjects[r]=w,placeholder:r,density:"comfortable","hide-details":"",variant:"plain",onBlur:w=>l.updateSubject(r)},null,8,["modelValue","onUpdate:modelValue","placeholder","onBlur"]),t(Z),t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:w=>l.deleteSubject(r)},null,8,["onClick"])]),_:2},1024),t(j,null,{default:n(()=>[t(N,{modelValue:i.newBookTypes[r],"onUpdate:modelValue":w=>i.newBookTypes[r]=w,"append-inner-icon":"mdi-plus",class:"mb-2",density:"comfortable",label:"添加作业本名称",variant:"outlined","onClick:appendInner":()=>l.addBookType(r),onKeyup:_e(()=>l.addBookType(r),["enter"])},null,8,["modelValue","onUpdate:modelValue","onClick:appendInner","onKeyup"]),t(O,{border:"",density:"compact",rounded:""},{default:n(()=>[(m(!0),y(H,null,ne(i.config.subjects[r].books,(w,x)=>(m(),h(D,{key:x,title:x,onClick:I=>l.openSubjectBookDialog(r,x,w)},{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-book-open-variant"})]),append:n(()=>[t(G,{class:"mr-2",color:"info",size:"small"},{default:n(()=>[a(v(w.length)+"个部分 ",1)]),_:2},1024),t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:Ae(()=>l.deleteBookType(r,x),["stop"])},null,8,["onClick"])]),_:2},1032,["title","onClick"]))),128))]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),t(R,{cols:"12",md:"6"},{default:n(()=>[t(d,{border:"",icon:"mdi-cog",title:"通用配置"},{default:n(()=>[t(O,null,{default:n(()=>[t(D,null,{default:n(()=>[t(N,{modelValue:i.newCommonBook,"onUpdate:modelValue":e[1]||(e[1]=r=>i.newCommonBook=r),"append-inner-icon":"mdi-plus",density:"comfortable",label:"添加作业本名称",variant:"outlined","onClick:appendInner":l.addCommonBook,onKeyup:_e(l.addCommonBook,["enter"])},null,8,["modelValue","onClick:appendInner","onKeyup"])]),_:1}),t(D,null,{default:n(()=>[t(O,{border:"",density:"compact",rounded:""},{default:n(()=>[(m(!0),y(H,null,ne(i.config.commonSubject.books,(r,w)=>(m(),h(D,{key:w,title:w,onClick:x=>l.openSubjectBookDialog("common",w,r)},{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-book-multiple"})]),append:n(()=>[t(G,{class:"mr-2",color:"info",size:"small"},{default:n(()=>[a(v(r.length)+"个部分 ",1)]),_:2},1024),t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:Ae(()=>l.deleteBookType("common",w),["stop"])},null,8,["onClick"])]),_:2},1032,["title","onClick"]))),128))]),_:1})]),_:1}),t(U,{class:"my-2"}),t(D,null,{default:n(()=>[t(N,{modelValue:i.newAction,"onUpdate:modelValue":e[2]||(e[2]=r=>i.newAction=r),"append-inner-icon":"mdi-plus",density:"comfortable",label:"添加操作",variant:"outlined","onClick:appendInner":l.addAction,onKeyup:_e(l.addAction,["enter"])},null,8,["modelValue","onClick:appendInner","onKeyup"])]),_:1}),t(D,null,{default:n(()=>[t(O,{border:"",density:"compact",rounded:""},{default:n(()=>[(m(!0),y(H,null,ne(i.config.actions,r=>(m(),h(D,{key:r,title:r,onClick:w=>l.openActionDialog(r)},{append:n(()=>[t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:Ae(w=>l.removeAction(r),["stop"])},null,8,["onClick"])]),_:2},1032,["title","onClick"]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(we,{modelValue:i.dialog.show,"onUpdate:modelValue":e[5]||(e[5]=r=>i.dialog.show=r),"max-width":"600px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"text-h5 pa-4"},{default:n(()=>[a(v(i.dialog.title),1)]),_:1}),t(j,null,{default:n(()=>[t(bt,null,{default:n(()=>[t(de,null,{default:n(()=>[t(R,{cols:"12"},{default:n(()=>[t(N,{modelValue:i.dialog.editedItem.name,"onUpdate:modelValue":e[3]||(e[3]=r=>i.dialog.editedItem.name=r),label:i.dialog.nameLabel,rules:[r=>!!r||"名称不能为空"],density:"comfortable",variant:"outlined"},null,8,["modelValue","label","rules"])]),_:1}),i.dialog.editedItem.type==="subjectBook"?(m(),h(R,{key:0,cols:"12"},{default:n(()=>[e[10]||(e[10]=c("div",{class:"text-subtitle-2 mb-2"},"所属科目",-1)),t(G,{color:"primary"},{default:n(()=>[a(v(i.dialog.editedItem.subject),1)]),_:1})]),_:1})):b("",!0),["subjectBook","commonBook"].includes(i.dialog.editedItem.type)?(m(),h(R,{key:1,cols:"12"},{default:n(()=>[t(M,{variant:"outlined"},{default:n(()=>[t(K,{class:"text-subtitle-1 py-2"},{default:n(()=>[...e[11]||(e[11]=[a("需完成部分",-1)])]),_:1}),t(j,{class:"pt-0"},{default:n(()=>[t(O,{border:"",class:"mb-2",density:"compact",rounded:""},{default:n(()=>[(m(!0),y(H,null,ne(i.dialog.editedItem.tasks,(r,w)=>(m(),h(D,{key:w},{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-checkbox-blank-circle-outline",size:"small"})]),append:n(()=>[t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:x=>l.removeTask(w)},null,8,["onClick"])]),default:n(()=>[t(N,{modelValue:i.dialog.editedItem.tasks[w],"onUpdate:modelValue":x=>i.dialog.editedItem.tasks[w]=x,density:"compact","hide-details":"",variant:"plain"},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1024))),128))]),_:1}),t(N,{modelValue:i.newTask,"onUpdate:modelValue":e[4]||(e[4]=r=>i.newTask=r),"append-inner-icon":"mdi-plus",class:"mt-2",density:"comfortable",label:"添加需完成部分",variant:"outlined","onClick:appendInner":l.addTask,onKeyup:_e(l.addTask,["enter"])},null,8,["modelValue","onClick:appendInner","onKeyup"])]),_:1})]),_:1})]),_:1})):b("",!0)]),_:1})]),_:1})]),_:1}),t(ue,{class:"pa-4"},{default:n(()=>[t(Z),t(p,{color:"primary",variant:"elevated",onClick:l.saveDialog},{default:n(()=>[...e[12]||(e[12]=[a(" 关闭 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"error",variant:"text",onClick:l.closeDialog},{default:n(()=>[...e[13]||(e[13]=[a(" 取消 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(ft,{modelValue:i.showSnackbar,"onUpdate:modelValue":e[6]||(e[6]=r=>i.showSnackbar=r),color:i.snackbarColor,timeout:3e3},{default:n(()=>[a(v(i.snackbarText),1)]),_:1},8,["modelValue","color"])]),_:1},8,["loading"])}const tn=Q(di,[["render",mi],["__scopeId","data-v-67769fa2"]]),fi={name:"SubjectManagementCard",components:{SettingsCard:W},data(){return{loading:!1,error:null,subjects:[],originalSubjects:null,newSubjectName:"",showSnackbar:!1,snackbarText:"",snackbarColor:"success",defaultSubjects:[{name:"语文",order:0},{name:"数学",order:1},{name:"英语",order:2},{name:"物理",order:3},{name:"化学",order:4},{name:"生物",order:5},{name:"政治",order:6},{name:"历史",order:7},{name:"地理",order:8},{name:"其他",order:9}]}},computed:{hasChanges(){return this.originalSubjects&&JSON.stringify(this.subjects)!==JSON.stringify(this.originalSubjects)}},created(){this.loadConfig()},methods:{async loadConfig(){this.loading=!0;try{const s=await ie.loadData("classworks-config-subject");s?(this.subjects=s.map((e,o)=>({name:e.name,order:e.order??o})).sort((e,o)=>e.order-o.order),this.originalSubjects=JSON.parse(JSON.stringify(this.subjects)),this.showMessage("配置已加载","success")):(this.subjects=[],this.originalSubjects=[],this.showMessage("使用默认配置","info"))}catch(s){console.error("Failed to load config:",s),this.showMessage("加载失败,可继续编辑当前配置","warning")}this.loading=!1},async saveConfig(){this.loading=!0;try{const s=await ie.saveData("classworks-config-subject",this.subjects);if(s)this.originalSubjects=JSON.parse(JSON.stringify(this.subjects)),this.showMessage("配置已保存","success");else throw new Error(s||"保存失败")}catch(s){console.error("Failed to save config:",s),this.showMessage(`保存失败: ${s.message},请稍后重试`,"error")}this.loading=!1},showMessage(s,e="success"){this.snackbarText=s,this.snackbarColor=e,this.showSnackbar=!0},addSubject(){if(!this.newSubjectName)return;const s={name:this.newSubjectName,order:this.subjects.length};this.subjects.push(s),this.newSubjectName=""},updateSubject(s){const e=this.subjects.findIndex(o=>o.order===s.order);e>-1&&(this.subjects[e]={...s})},deleteSubject(s){const e=this.subjects.findIndex(o=>o.order===s.order);e>-1&&(this.subjects.splice(e,1),this.subjects.forEach((o,u)=>{o.order=u}))},moveSubject(s,e){const o=s+e;if(o>=0&&o<this.subjects.length){const u=this.subjects[s];this.subjects[s]=this.subjects[o],this.subjects[o]=u,this.subjects.forEach((i,l)=>{i.order=l})}},resetToDefault(){this.subjects=JSON.parse(JSON.stringify(this.defaultSubjects)),this.showMessage("已重置为默认科目列表","info")}}},pi={class:"d-flex justify-space-between align-center mb-6"},hi={class:"d-flex flex-column align-center mr-2"};function gi(s,e,o,u,i,l){const d=W;return m(),h(d,{loading:i.loading,border:"",icon:"mdi-book-multiple",title:"科目管理"},{default:n(()=>[i.error?(m(),h(Y,{key:0,class:"mb-4",closable:"",type:"error",variant:"tonal"},{default:n(()=>[a(v(i.error),1)]),_:1})):b("",!0),c("div",pi,[c("div",null,[t(p,{loading:i.loading,class:"mr-2",color:"primary","prepend-icon":"mdi-refresh",size:"large",variant:"text",onClick:l.loadConfig},{default:n(()=>[...e[2]||(e[2]=[a(" 重新加载 ",-1)])]),_:1},8,["loading","onClick"]),t(p,{loading:i.loading,color:"success","prepend-icon":"mdi-content-save",size:"large",onClick:l.saveConfig},{default:n(()=>[...e[3]||(e[3]=[a(" 保存 ",-1)])]),_:1},8,["loading","onClick"]),t(p,{loading:i.loading,class:"mr-2","prepend-icon":"mdi-restore",variant:"text",onClick:l.resetToDefault},{default:n(()=>[...e[4]||(e[4]=[a(" 重置为默认 ",-1)])]),_:1},8,["loading","onClick"])]),l.hasChanges?(m(),h(G,{key:0,color:"warning",variant:"elevated"},{default:n(()=>[...e[5]||(e[5]=[a(" 有未保存的更改 ",-1)])]),_:1})):b("",!0)]),t(M,{class:"mb-4",variant:"outlined"},{default:n(()=>[t(j,null,{default:n(()=>[t(de,null,{default:n(()=>[t(R,{cols:"12",sm:"6"},{default:n(()=>[t(N,{modelValue:i.newSubjectName,"onUpdate:modelValue":e[0]||(e[0]=f=>i.newSubjectName=f),rules:[f=>!!f||"科目名称不能为空"],"append-inner-icon":"mdi-plus",density:"comfortable",label:"科目名称",variant:"outlined",onKeyup:_e(l.addSubject,["enter"]),"onClick:appendInner":l.addSubject},null,8,["modelValue","rules","onKeyup","onClick:appendInner"])]),_:1})]),_:1})]),_:1})]),_:1}),t(M,{variant:"outlined"},{default:n(()=>[t(j,{class:"pa-0"},{default:n(()=>[t(O,{lines:"one"},{default:n(()=>[(m(!0),y(H,null,ne(i.subjects,(f,r)=>(m(),h(D,{key:f.order},{prepend:n(()=>[c("div",hi,[t(p,{disabled:r===0,icon:"mdi-chevron-up",size:"small",variant:"text",onClick:w=>l.moveSubject(r,-1)},null,8,["disabled","onClick"]),t(p,{disabled:r===i.subjects.length-1,icon:"mdi-chevron-down",size:"small",variant:"text",onClick:w=>l.moveSubject(r,1)},null,8,["disabled","onClick"])])]),append:n(()=>[t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:w=>l.deleteSubject(f)},null,8,["onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[t(N,{modelValue:f.name,"onUpdate:modelValue":w=>f.name=w,density:"compact","hide-details":"",variant:"plain",onBlur:w=>l.updateSubject(f)},null,8,["modelValue","onUpdate:modelValue","onBlur"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]),_:1})]),_:1}),t(ft,{modelValue:i.showSnackbar,"onUpdate:modelValue":e[1]||(e[1]=f=>i.showSnackbar=f),color:i.snackbarColor,timeout:3e3},{default:n(()=>[a(v(i.snackbarText),1)]),_:1},8,["modelValue","color"])]),_:1},8,["loading"])}const nn=Q(fi,[["render",gi],["__scopeId","data-v-f87674cf"]]),wi={};function vi(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{icon:"mdi-cog",title:"编辑设置"},{default:n(()=>[t(O,null,{default:n(()=>[t(d,{"setting-key":"randomPicker.enabled"}),t(U,{class:"my-2"}),t(d,{"setting-key":"randomPicker.mode"}),t(U,{class:"my-2"}),t(d,{"setting-key":"randomPicker.minNumber"}),t(U,{class:"my-2"}),t(d,{"setting-key":"randomPicker.maxNumber"}),t(U,{class:"my-2"}),t(d,{"setting-key":"randomPicker.defaultCount"}),t(U,{class:"my-2"}),t(d,{"setting-key":"randomPicker.animation"})]),_:1})]),_:1})}const sn=Q(wi,[["render",vi]]),bi={name:"HitokotoSettings",components:{SettingGroup:nt,SettingItem:ve},data(){return{kvConfig:{sources:["zhaoyu"],sensitiveWords:"",jinrishiciToken:null,hitokotoCategories:[]},hitokotoCategories:[{value:"a",label:"动画"},{value:"b",label:"漫画"},{value:"c",label:"游戏"},{value:"d",label:"文学"},{value:"e",label:"原创"},{value:"f",label:"来自网络"},{value:"g",label:"其他"},{value:"h",label:"影视"},{value:"i",label:"诗词"},{value:"j",label:"网易云"},{value:"k",label:"哲学"},{value:"l",label:"抖机灵"}],loading:!1,testLoading:!1,testMessage:"",testColor:"info",testResultDialog:!1,testResultData:null,enableCloudSensitiveWords:!0}},mounted(){this.loadKvSettings()},methods:{async loadKvSettings(){this.loading=!0;try{const s=await ie.loadData("sentence-info");let e=s;s&&s.data&&(e=s.data),e&&(this.kvConfig={sources:Array.isArray(e.sources)?e.sources:["zhaoyu"],sensitiveWords:e.sensitiveWords||"",jinrishiciToken:e.jinrishiciToken,hitokotoCategories:Array.isArray(e.hitokotoCategories)?e.hitokotoCategories:[]})}catch(s){console.error("Failed to load sentence-info",s)}finally{this.loading=!1}},async saveKvSettings(){this.loading=!0;try{if(this.kvConfig.sources.includes("jinrishici")&&!this.kvConfig.jinrishiciToken)try{const s=await Xe.get("https://v2.jinrishici.com/token");s.data.status==="success"&&(this.kvConfig.jinrishiciToken=s.data.data)}catch(s){console.error("Failed to get jinrishici token",s)}await ie.saveData("sentence-info",this.kvConfig)}catch(s){console.error("Failed to save sentence-info",s)}finally{this.loading=!1}},async testJinrishici(){var s,e;this.testLoading=!0,this.testMessage="",this.testColor="info";try{const o={};this.kvConfig.jinrishiciToken&&(o["X-User-Token"]=this.kvConfig.jinrishiciToken);const u=await Xe.get("https://v2.jinrishici.com/info?X-User-Token="+encodeURIComponent(this.kvConfig.jinrishiciToken));if(u.data&&u.data.status==="success"){this.testResultData=u.data,this.testResultDialog=!0;const i=(s=u.data.data)==null?void 0:s.token,l=(e=u.data.data)==null?void 0:e.region,d=this.kvConfig.jinrishiciToken?i===this.kvConfig.jinrishiciToken:!0;this.testColor=d?"success":"warning",this.testMessage=d?`接口正常Token 一致:${i}${l?`,地区:${l}`:""}`:`接口返回 Token 与当前设置不一致:${i}${l?`,地区:${l}`:""}`}else this.testColor="error",this.testMessage="接口返回非 success请检查网络或 Token 配置。"}catch(o){console.error("Failed to test jinrishici info",o),this.testColor="error",this.testMessage="接口测试失败,请检查网络或 Token。"}finally{this.testLoading=!1}}}},yi={class:"d-flex flex-wrap gap-2"},ki={class:"text-caption text-orange mt-2"},xi={class:"d-flex flex-wrap gap-2"},Si={class:"d-flex flex-column flex-sm-row align-center w-100"},Ci={key:3,class:"text-center pb-4"},Vi={class:"d-flex align-center mb-2"},_i={class:"text-body-1 font-weight-medium"},Di={class:"d-flex align-center mb-2"},Ai={class:"text-body-1 font-weight-medium"},Ii={class:"d-flex align-center mb-2"},Ti={class:"text-body-1 font-weight-medium"},Ui={class:"d-flex align-center mb-2"},ji={class:"text-body-2 font-weight-medium"},Bi={class:"d-flex align-center mb-2"},Mi={class:"text-body-1 font-weight-medium"},Ni={class:"d-flex align-center mb-2"},Pi={class:"text-body-1 font-weight-medium"},zi={class:"px-4 py-3"},Ei={class:"d-flex flex-wrap gap-2"};function Li(s,e,o,u,i,l){const d=ve,f=nt;return m(),y("div",null,[t(f,{title:"一言设置",icon:"mdi-comment-quote"},{default:n(()=>[t(d,{"setting-key":"hitokoto.enabled"}),t(d,{"setting-key":"hitokoto.refreshInterval"})]),_:1}),t(f,{title:"数据源配置",icon:"mdi-cloud-sync",class:"mt-4"},{default:n(()=>[e[16]||(e[16]=c("div",{class:"text-caption text-grey px-4 pt-2 pb-2"},"以下配置将同步到云端,对所有连接此班级的设备生效。",-1)),t(D,null,{default:n(()=>[t(z,{class:"mb-2"},{default:n(()=>[...e[8]||(e[8]=[a("启用数据源",-1)])]),_:1}),c("div",yi,[t(Se,{modelValue:i.kvConfig.sources,"onUpdate:modelValue":[e[0]||(e[0]=r=>i.kvConfig.sources=r),l.saveKvSettings],label:"一言 (Hitokoto)",value:"hitokoto","hide-details":"",density:"compact",class:"mr-4",disabled:i.loading},null,8,["modelValue","disabled","onUpdate:modelValue"]),t(Se,{modelValue:i.kvConfig.sources,"onUpdate:modelValue":[e[1]||(e[1]=r=>i.kvConfig.sources=r),l.saveKvSettings],label:"诏预 (Zhaoyu)",value:"zhaoyu","hide-details":"",density:"compact",class:"mr-4",disabled:i.loading},null,8,["modelValue","disabled","onUpdate:modelValue"]),t(Se,{modelValue:i.kvConfig.sources,"onUpdate:modelValue":[e[2]||(e[2]=r=>i.kvConfig.sources=r),l.saveKvSettings],label:"今日诗词 (Jinrishici)",value:"jinrishici","hide-details":"",density:"compact",disabled:i.loading},null,8,["modelValue","disabled","onUpdate:modelValue"])]),c("div",ki,[t(g,{size:"x-small",color:"orange",class:"mr-1"},{default:n(()=>[...e[9]||(e[9]=[a("mdi-alert",-1)])]),_:1}),e[10]||(e[10]=a(" 一言Hitokoto数据源已收到关于存在负面内容的大量反馈请用户谨慎启用。 ",-1))])]),_:1}),i.kvConfig.sources.includes("hitokoto")?(m(),h(D,{key:0},{default:n(()=>[t(z,{class:"mb-2"},{default:n(()=>[...e[11]||(e[11]=[a("一言句子类型",-1)])]),_:1}),e[12]||(e[12]=c("div",{class:"text-caption text-grey mb-2"},"不选则返回所有类型;可多选。",-1)),c("div",xi,[(m(!0),y(H,null,ne(i.hitokotoCategories,r=>(m(),h(Se,{key:r.value,modelValue:i.kvConfig.hitokotoCategories,"onUpdate:modelValue":[e[3]||(e[3]=w=>i.kvConfig.hitokotoCategories=w),l.saveKvSettings],label:r.label,value:r.value,"hide-details":"",density:"compact",class:"mr-4",disabled:i.loading},null,8,["modelValue","label","value","disabled","onUpdate:modelValue"]))),128))])]),_:1})):b("",!0),i.kvConfig.sources.includes("jinrishici")?(m(),h(D,{key:1},{default:n(()=>[t(N,{modelValue:i.kvConfig.jinrishiciToken,"onUpdate:modelValue":e[4]||(e[4]=r=>i.kvConfig.jinrishiciToken=r),label:"今日诗词 Token",variant:"outlined",density:"comfortable",disabled:i.loading,hint:"留空则自动获取,也可以手动输入已有 Token","persistent-hint":"",class:"mt-2",onChange:l.saveKvSettings},null,8,["modelValue","disabled","onChange"])]),_:1})):b("",!0),i.kvConfig.sources.includes("jinrishici")?(m(),h(D,{key:2},{default:n(()=>[c("div",Si,[t(p,{loading:i.testLoading,color:"primary",variant:"outlined",class:"mr-sm-4 mb-2 mb-sm-0",onClick:l.testJinrishici},{default:n(()=>[...e[13]||(e[13]=[a(" 测试今日诗词接口 ",-1)])]),_:1},8,["loading","onClick"]),i.testMessage?(m(),h(Y,{key:0,type:i.testColor,density:"comfortable",border:"start",class:"flex-grow-1"},{default:n(()=>[a(v(i.testMessage),1)]),_:1},8,["type"])):b("",!0)])]),_:1})):b("",!0),t(D,null,{default:n(()=>[t(Pe,{modelValue:i.kvConfig.sensitiveWords,"onUpdate:modelValue":e[5]||(e[5]=r=>i.kvConfig.sensitiveWords=r),disabled:i.loading,label:"敏感词过滤 (用逗号分隔)",variant:"outlined",rows:"3","auto-grow":"","hide-details":"",class:"mt-2 mb-2",onChange:l.saveKvSettings},null,8,["modelValue","disabled","onChange"])]),_:1}),t(D,null,{default:n(()=>[t(Se,{label:"启用云端敏感词列表","hide-details":"",modelValue:i.enableCloudSensitiveWords,"onUpdate:modelValue":e[6]||(e[6]=r=>i.enableCloudSensitiveWords=r),density:"compact",disabled:"",class:"mb-2"},null,8,["modelValue"]),e[14]||(e[14]=c("div",{class:"text-caption text-grey"},[a(" 已启用的数据源将在获取一言时随机尝试,直到成功获取内容为止。"),c("br"),a(" 敏感词过滤会将包含任意敏感词的句子过滤掉,避免显示不当内容。"),c("br")],-1))]),_:1}),i.loading?(m(),y("div",Ci,[t(Jt,{indeterminate:"",size:"24",color:"primary"}),e[15]||(e[15]=c("span",{class:"ml-2 text-caption"},"正在同步配置...",-1))])):b("",!0)]),_:1}),t(we,{modelValue:i.testResultDialog,"onUpdate:modelValue":e[7]||(e[7]=r=>i.testResultDialog=r),"max-width":"600"},{default:n(()=>[i.testResultData?(m(),h(M,{key:0,class:"rounded-lg"},{default:n(()=>[t(j,{class:"pa-0"},{default:n(()=>[t(O,{lines:"two",class:"py-0"},{default:n(()=>[t(D,{class:"px-4 py-3"},{prepend:n(()=>[t(et,{color:"primary",variant:"tonal",class:"mr-2"},{default:n(()=>[t(g,{icon:"mdi-key-variant"})]),_:1})]),default:n(()=>[t(z,{class:"text-subtitle-2 font-weight-bold mb-1"},{default:n(()=>[...e[17]||(e[17]=[a("Token",-1)])]),_:1}),t(te,{class:"text-body-2 text-high-emphasis",style:{"word-break":"break-all"}},{default:n(()=>[a(v(i.testResultData.data.token),1)]),_:1})]),_:1}),t(U),t(de,{"no-gutters":""},{default:n(()=>[t(R,{cols:"6"},{default:n(()=>[t(D,{class:"px-4 py-2"},{prepend:n(()=>[t(g,{icon:"mdi-ip-network",color:"grey-darken-1",class:"mr-2"})]),default:n(()=>[t(z,{class:"text-caption text-grey-darken-1"},{default:n(()=>[...e[18]||(e[18]=[a("IP 地址",-1)])]),_:1}),t(te,{class:"text-body-2"},{default:n(()=>[a(v(i.testResultData.data.ip),1)]),_:1})]),_:1})]),_:1}),t(R,{cols:"6"},{default:n(()=>[t(D,{class:"px-4 py-2"},{prepend:n(()=>[t(g,{icon:"mdi-map-marker-radius",color:"grey-darken-1",class:"mr-2"})]),default:n(()=>[t(z,{class:"text-caption text-grey-darken-1"},{default:n(()=>[...e[19]||(e[19]=[a("地区",-1)])]),_:1}),t(te,{class:"text-body-2"},{default:n(()=>[a(v(i.testResultData.data.region),1)]),_:1})]),_:1})]),_:1})]),_:1}),t(U),t(bt,{class:"px-4 py-3"},{default:n(()=>[t(de,{dense:""},{default:n(()=>[t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Vi,[t(g,{icon:"mdi-thermometer",color:"orange",class:"mr-2"}),c("div",null,[e[20]||(e[20]=c("div",{class:"text-caption text-grey"},"温度",-1)),c("div",_i,v(i.testResultData.data.weatherData.temperature)+"°C",1)])])]),_:1}),t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Di,[t(g,{icon:"mdi-weather-cloudy",color:"blue-grey",class:"mr-2"}),c("div",null,[e[21]||(e[21]=c("div",{class:"text-caption text-grey"},"天气",-1)),c("div",Ai,v(i.testResultData.data.weatherData.weather),1)])])]),_:1}),t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Ii,[t(g,{icon:"mdi-water-percent",color:"blue",class:"mr-2"}),c("div",null,[e[22]||(e[22]=c("div",{class:"text-caption text-grey"},"湿度",-1)),c("div",Ti,v(i.testResultData.data.weatherData.humidity)+"%",1)])])]),_:1}),t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Ui,[t(g,{icon:"mdi-weather-windy",color:"teal",class:"mr-2"}),c("div",null,[e[23]||(e[23]=c("div",{class:"text-caption text-grey"},"风向/风力",-1)),c("div",ji,v(i.testResultData.data.weatherData.windDirection)+" "+v(i.testResultData.data.weatherData.windPower)+"级 ",1)])])]),_:1}),t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Bi,[t(g,{icon:"mdi-blur",color:"grey",class:"mr-2"}),c("div",null,[e[24]||(e[24]=c("div",{class:"text-caption text-grey"},"PM2.5",-1)),c("div",Mi,v(i.testResultData.data.weatherData.pm25),1)])])]),_:1}),t(R,{cols:"6",sm:"4"},{default:n(()=>[c("div",Ni,[t(g,{icon:"mdi-eye",color:"indigo",class:"mr-2"}),c("div",null,[e[25]||(e[25]=c("div",{class:"text-caption text-grey"},"能见度",-1)),c("div",Pi,v(i.testResultData.data.weatherData.visibility),1)])])]),_:1})]),_:1})]),_:1}),t(U),c("div",zi,[e[26]||(e[26]=c("div",{class:"text-caption text-grey mb-2"},"环境标签",-1)),c("div",Ei,[(m(!0),y(H,null,ne(i.testResultData.data.tags,r=>(m(),h(G,{key:r,size:"small",color:"primary",variant:"tonal",class:"mr-1 mb-1"},{default:n(()=>[a(v(r),1)]),_:2},1024))),128))])]),t(U),t(D,{class:"px-4 py-2"},{prepend:n(()=>[t(g,{icon:"mdi-clock-outline",size:"small",class:"mr-2"})]),default:n(()=>[t(z,{class:"text-caption text-grey-darken-1"},{default:n(()=>[a(" 北京时间: "+v(new Date(i.testResultData.data.beijingTime).toLocaleString()),1)]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})):b("",!0)]),_:1},8,["modelValue"])])}const ln=Q(bi,[["render",Li]]),Ri={name:"NotificationSoundSettings",data(){return{singleSound:"",urgentSound:"",currentAudio:null,showAutoplayWarning:!0}},computed:{soundOptions(){return ls.map(s=>({title:s.replace(".mp3",""),value:s}))}},mounted(){this.loadSettings()},beforeUnmount(){this.stopPreview()},methods:{loadSettings(){this.singleSound=k("notification.singleSound"),this.urgentSound=k("notification.urgentSound")},onSingleSoundChange(s){var e;re("notification.singleSound",s),(e=this.$message)==null||e.success("设置已保存",`单次通知铃声: ${s}`)},onUrgentSoundChange(s){var e;re("notification.urgentSound",s),(e=this.$message)==null||e.success("设置已保存",`紧急通知铃声: ${s}`)},async previewSound(s){var e,o;this.showAutoplayWarning=!1,this.stopPreview();try{const u=await this.playSoundWithPromise(s,!1);this.currentAudio=u,this.currentAudio&&this.currentAudio.addEventListener("ended",()=>{this.currentAudio=null},{once:!0})}catch(u){console.error("播放音频失败:",u),u.name==="NotAllowedError"?(e=this.$message)==null||e.warning("无法播放音频","浏览器阻止了自动播放,请再次点击试听按钮"):(o=this.$message)==null||o.error("播放失败","音频文件加载失败,请稍后重试")}},playSoundWithPromise(s,e=!1){return new Promise((o,u)=>{const i=this.getSoundPath(s);if(!i){u(new Error("音频文件不存在"));return}try{const l=new Audio(i);l.loop=e,l.play().then(()=>{o(l)}).catch(d=>{u(d)})}catch(l){u(l)}})},getSoundPath(s){if(!s)return null;try{return`/sounds/${s}`}catch{return null}},stopPreview(){this.currentAudio&&(is(this.currentAudio),this.currentAudio=null)},resetSingleSound(){var s;this.singleSound="Teams 默认.mp3",re("notification.singleSound",this.singleSound),(s=this.$message)==null||s.success("已恢复单次通知铃声默认设置")},resetUrgentSound(){var s;this.urgentSound="Teams 默认通话铃.mp3",re("notification.urgentSound",this.urgentSound),(s=this.$message)==null||s.success("已恢复紧急通知铃声默认设置")}}},Ki={class:"d-flex align-center"},Fi={class:"mt-3 d-flex gap-2"},Oi={class:"mt-3 d-flex gap-2"};function Ji(s,e,o,u,i,l){return m(),h(M,{class:"notification-sound-settings"},{default:n(()=>[t(K,null,{default:n(()=>[...e[5]||(e[5]=[a(" 通知铃声设置 ",-1)])]),_:1}),t(j,null,{default:n(()=>[i.showAutoplayWarning?(m(),h(Y,{key:0,type:"info",variant:"tonal",closable:"",class:"mb-4","onClick:close":e[0]||(e[0]=d=>i.showAutoplayWarning=!1)},{default:n(()=>[c("div",Ki,[t(g,{class:"mr-2"},{default:n(()=>[...e[6]||(e[6]=[a("mdi-information",-1)])]),_:1}),e[7]||(e[7]=c("span",null,"首次使用请点击试听按钮测试音频播放是否正常",-1))])]),_:1})):b("",!0),t(de,null,{default:n(()=>[t(R,{cols:"12"},{default:n(()=>[t(M,{border:""},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[t(g,{left:""},{default:n(()=>[...e[8]||(e[8]=[a("mdi-bell-ring",-1)])]),_:1}),e[9]||(e[9]=a(" 单次通知铃声 ",-1))]),_:1}),t(j,null,{default:n(()=>[t(Ze,{modelValue:i.singleSound,"onUpdate:modelValue":[e[1]||(e[1]=d=>i.singleSound=d),l.onSingleSoundChange],items:l.soundOptions,label:"选择铃声","prepend-icon":"mdi-music-note",variant:"outlined",density:"comfortable"},{item:n(({props:d,item:f})=>[t(D,Ve(d,{onClick:r=>l.previewSound(f.value)}),{prepend:n(()=>[t(g,null,{default:n(()=>[...e[10]||(e[10]=[a("mdi-music-note",-1)])]),_:1})]),append:n(()=>[t(p,{icon:"",size:"small",variant:"text",onClick:Ae(r=>l.previewSound(f.value),["stop"])},{default:n(()=>[t(g,null,{default:n(()=>[...e[11]||(e[11]=[a("mdi-play",-1)])]),_:1})]),_:1},8,["onClick"])]),_:2},1040,["onClick"])]),_:1},8,["modelValue","items","onUpdate:modelValue"]),c("div",Fi,[t(p,{color:"primary",variant:"tonal",onClick:e[2]||(e[2]=d=>l.previewSound(i.singleSound))},{default:n(()=>[t(g,{left:""},{default:n(()=>[...e[12]||(e[12]=[a("mdi-play",-1)])]),_:1}),e[13]||(e[13]=a(" 试听 ",-1))]),_:1}),t(p,{onClick:l.resetSingleSound},{default:n(()=>[t(g,{left:""},{default:n(()=>[...e[14]||(e[14]=[a("mdi-restore",-1)])]),_:1}),e[15]||(e[15]=a(" 恢复 ",-1))]),_:1},8,["onClick"])])]),_:1})]),_:1})]),_:1}),t(R,{cols:"12"},{default:n(()=>[t(M,{border:""},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[t(g,{left:"",color:"error"},{default:n(()=>[...e[16]||(e[16]=[a("mdi-bell-alert",-1)])]),_:1}),e[17]||(e[17]=a(" 紧急通知铃声 ",-1))]),_:1}),t(j,null,{default:n(()=>[t(Ze,{modelValue:i.urgentSound,"onUpdate:modelValue":[e[3]||(e[3]=d=>i.urgentSound=d),l.onUrgentSoundChange],items:l.soundOptions,label:"选择铃声","prepend-icon":"mdi-music-note",variant:"outlined",density:"comfortable"},{item:n(({props:d,item:f})=>[t(D,Ve(d,{onClick:r=>l.previewSound(f.value)}),{prepend:n(()=>[t(g,null,{default:n(()=>[...e[18]||(e[18]=[a("mdi-music-note",-1)])]),_:1})]),append:n(()=>[t(p,{icon:"",size:"small",variant:"text",onClick:Ae(r=>l.previewSound(f.value),["stop"])},{default:n(()=>[t(g,null,{default:n(()=>[...e[19]||(e[19]=[a("mdi-play",-1)])]),_:1})]),_:1},8,["onClick"])]),_:2},1040,["onClick"])]),_:1},8,["modelValue","items","onUpdate:modelValue"]),c("div",Oi,[t(p,{color:"error",variant:"tonal",onClick:e[4]||(e[4]=d=>l.previewSound(i.urgentSound))},{default:n(()=>[t(g,{left:""},{default:n(()=>[...e[20]||(e[20]=[a("mdi-play",-1)])]),_:1}),e[21]||(e[21]=a(" 试听 ",-1))]),_:1}),t(p,{onClick:l.resetUrgentSound},{default:n(()=>[t(g,{left:""},{default:n(()=>[...e[22]||(e[22]=[a("mdi-restore",-1)])]),_:1}),e[23]||(e[23]=a(" 恢复 ",-1))]),_:1},8,["onClick"])])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const on=Q(Ri,[["render",Ji],["__scopeId","data-v-55be56a4"]]),Lt={sessions:[{name:"第1节晚自习",start:"19:20",duration:70,enabled:!0},{name:"第2节晚自习",start:"20:20",duration:110,enabled:!0}],alertThresholdDb:55},Hi={name:"NoiseSettingsCard",components:{SettingsCard:W,SettingItem:ve},data(){return{sessionLoading:!0,sessionSaving:!1,editSessions:[],editAlertThreshold:55,timePickerMenus:{}}},mounted(){this.loadSessionConfig()},methods:{async loadSessionConfig(){this.sessionLoading=!0;try{const s=await ie.loadData("noise-session-config"),e=(s==null?void 0:s.data)||s;e&&e.sessions?(this.editSessions=JSON.parse(JSON.stringify(e.sessions)),this.editAlertThreshold=e.alertThresholdDb||55):this.resetSessionConfig()}catch{this.resetSessionConfig()}finally{this.sessionLoading=!1}},async saveSessionConfig(){this.sessionSaving=!0;try{const s={sessions:this.editSessions,alertThresholdDb:this.editAlertThreshold};await ie.saveData("noise-session-config",s)}catch(s){console.error("保存自习配置失败:",s)}finally{this.sessionSaving=!1}},resetSessionConfig(){this.editSessions=JSON.parse(JSON.stringify(Lt.sessions)),this.editAlertThreshold=Lt.alertThresholdDb},addSession(){this.editSessions.push({name:`${this.editSessions.length+1}节晚自习`,start:"19:00",duration:70,enabled:!0})},sessionEndTime(s){if(!(s!=null&&s.start)||!(s!=null&&s.duration))return"--:--";const[e,o]=s.start.split(":").map(Number),u=e*60+o+(s.duration||0),i=Math.floor(u/60)%24,l=u%60;return`${String(i).padStart(2,"0")}:${String(l).padStart(2,"0")}`}}},Qi={class:"px-4 pb-4"},Gi={class:"d-flex align-center mb-4"},Wi={class:"d-flex align-center ga-3 flex-wrap"},Yi={class:"text-caption text-medium-emphasis"},qi={key:0,class:"text-center text-medium-emphasis py-4"},Zi={class:"d-flex align-center mb-4"},Xi={class:"d-flex align-center flex-wrap ga-4 mb-4"},$i={class:"d-flex justify-end ga-3 mb-2"};function el(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{border:"",icon:"mdi-microphone",title:"噪音监测"},{default:n(()=>[t(O,null,{default:n(()=>[t(d,{"setting-key":"noiseMonitor.enabled"}),t(U,{class:"my-2"}),t(d,{"setting-key":"noiseMonitor.autoStart"}),t(U,{class:"my-2"}),t(d,{"setting-key":"noiseMonitor.permissionDismissed"})]),_:1}),t(U,{class:"mb-4"}),c("div",Qi,[c("div",Gi,[t(g,{class:"mr-2",color:"teal"},{default:n(()=>[...e[1]||(e[1]=[a(" mdi-clock-edit-outline ",-1)])]),_:1}),e[3]||(e[3]=c("span",{class:"text-subtitle-1 font-weight-bold"},"晚自习时间段",-1)),t(Z),t(p,{color:"primary",variant:"tonal",size:"small","prepend-icon":"mdi-plus",onClick:l.addSession},{default:n(()=>[...e[2]||(e[2]=[a(" 添加时段 ",-1)])]),_:1},8,["onClick"])]),e[10]||(e[10]=c("div",{class:"text-caption text-medium-emphasis mb-4"}," 配置晚自习时间段后,系统会在对应时段内自动开启噪音监测并记录统计报告。时间段外不会长期记录。 ",-1)),i.sessionLoading?(m(),h(os,{key:0,type:"card",class:"mb-4"})):(m(),y(H,{key:1},[(m(!0),y(H,null,ne(i.editSessions,(r,w)=>(m(),y("div",{key:w,class:"mb-3"},[t(M,{variant:"outlined",rounded:"xl"},{default:n(()=>[t(j,{class:"pa-4"},{default:n(()=>[c("div",Wi,[t(N,{modelValue:r.name,"onUpdate:modelValue":x=>r.name=x,density:"compact",variant:"outlined",label:"名称","hide-details":"",style:{"max-width":"160px"}},null,8,["modelValue","onUpdate:modelValue"]),t(gt,{modelValue:i.timePickerMenus[w],"onUpdate:modelValue":x=>i.timePickerMenus[w]=x,"close-on-content-click":!1,location:"bottom"},{activator:n(({props:x})=>[t(N,Ve({ref_for:!0},x,{"model-value":r.start,density:"compact",variant:"outlined",label:"开始时间",readonly:"","hide-details":"","prepend-inner-icon":"mdi-clock-outline",style:{"max-width":"170px"}}),null,16,["model-value"])]),default:n(()=>[t(as,{modelValue:r.start,"onUpdate:modelValue":[x=>r.start=x,x=>i.timePickerMenus[w]=!1],color:"primary",format:"24hr",scrollable:""},null,8,["modelValue","onUpdate:modelValue"])]),_:2},1032,["modelValue","onUpdate:modelValue"]),t(N,{modelValue:r.duration,"onUpdate:modelValue":x=>r.duration=x,modelModifiers:{number:!0},density:"compact",variant:"outlined",type:"number",label:"时长",suffix:"分钟","hide-details":"",style:{"max-width":"130px"},min:10,max:300},null,8,["modelValue","onUpdate:modelValue"]),c("span",Yi," 至 "+v(l.sessionEndTime(r)),1),t(ht,{modelValue:r.enabled,"onUpdate:modelValue":x=>r.enabled=x,density:"compact",color:"primary","hide-details":"",label:"启用"},null,8,["modelValue","onUpdate:modelValue"]),t(p,{icon:"mdi-delete",color:"error",size:"x-small",variant:"text",onClick:x=>i.editSessions.splice(w,1)},null,8,["onClick"])])]),_:2},1024)]),_:2},1024)]))),128)),i.editSessions.length===0?(m(),y("div",qi,[t(g,{class:"mb-1"},{default:n(()=>[...e[4]||(e[4]=[a(" mdi-clock-outline ",-1)])]),_:1}),e[5]||(e[5]=c("div",{class:"text-caption"}," 暂无时间段,点击上方「添加时段」创建 ",-1))])):b("",!0)],64)),t(U,{class:"my-5"}),c("div",Zi,[t(g,{class:"mr-2",color:"orange"},{default:n(()=>[...e[6]||(e[6]=[a(" mdi-alert-decagram ",-1)])]),_:1}),e[7]||(e[7]=c("span",{class:"text-subtitle-1 font-weight-bold"},"监测参数",-1))]),c("div",Xi,[t(N,{modelValue:i.editAlertThreshold,"onUpdate:modelValue":e[0]||(e[0]=r=>i.editAlertThreshold=r),modelModifiers:{number:!0},density:"compact",variant:"outlined",type:"number",label:"噪音报警阈值",suffix:"dB","hide-details":"",style:{"max-width":"200px"},min:30,max:90},null,8,["modelValue"])]),c("div",$i,[t(p,{variant:"text","prepend-icon":"mdi-restore",onClick:l.resetSessionConfig},{default:n(()=>[...e[8]||(e[8]=[a(" 重置 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"primary",variant:"elevated","prepend-icon":"mdi-content-save",loading:i.sessionSaving,onClick:l.saveSessionConfig},{default:n(()=>[...e[9]||(e[9]=[a(" 保存配置 ",-1)])]),_:1},8,["loading","onClick"])])])]),_:1})}const an=Q(Hi,[["render",el]]),tl={name:"DisplaySettingsCard",components:{SettingsCard:W,SettingItem:ve},setup(){return{theme:$n()}},data(){return{localTheme:k("theme.mode")}},watch:{localTheme(s){re("theme.mode",s),this.theme.global.name.value=s}}};function nl(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{border:"",icon:"mdi-monitor",title:"显示设置"},{default:n(()=>[t(O,null,{default:n(()=>[t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-theme-light-dark"})]),append:n(()=>[t(Ot,{modelValue:i.localTheme,"onUpdate:modelValue":e[0]||(e[0]=r=>i.localTheme=r),color:"primary",density:"comfortable"},{default:n(()=>[t(p,{value:"light"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-white-balance-sunny"}),e[3]||(e[3]=a(" 明亮 ",-1))]),_:1}),t(p,{value:"dark"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-moon-waning-crescent"}),e[4]||(e[4]=a(" 暗黑 ",-1))]),_:1})]),_:1},8,["modelValue"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[1]||(e[1]=[a("主题模式",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[2]||(e[2]=[a("选择明亮或暗黑主题",-1)])]),_:1})]),_:1}),t(U,{class:"my-2"}),t(d,{"setting-key":"timeCard.enabled"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.emptySubjectDisplay"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.dynamicSort"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.showRandomButton"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.showFullscreenButton"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.cardHoverEffect"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.enhancedTouchMode"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.showQuickTools"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.showAntiScreenBurnCard"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.showExamScheduleButton"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.forceDesktopMode"}),t(U,{class:"my-2"}),t(d,{"setting-key":"display.lateStudentsArePresent"})]),_:1})]),_:1})}const rn=Q(tl,[["render",nl]]),sl={};function il(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{icon:"mdi-cog",title:"编辑设置"},{default:n(()=>[t(O,null,{default:n(()=>[t(d,{"setting-key":"edit.autoSave"}),t(U,{class:"my-2"}),t(d,{"setting-key":"edit.blockNonTodayAutoSave"}),t(U,{class:"my-2"}),t(d,{"setting-key":"edit.confirmNonTodaySave"}),t(U,{class:"my-2"}),t(d,{"setting-key":"edit.refreshBeforeEdit"}),t(U,{class:"my-2"}),t(d,{"setting-key":"edit.autoSavePromptText"}),t(U,{class:"my-2"}),t(d,{"setting-key":"edit.manualSavePromptText"})]),_:1})]),_:1})}const un=Q(sl,[["render",il]]),ll={name:"RefreshSettingsCard",components:{SettingsCard:W},data(){return{}}};function ol(s,e,o,u,i,l){const d=ve,f=W;return m(),h(f,{icon:"mdi-refresh-circle",title:"刷新设置"},{default:n(()=>[t(Yt,null,{default:n(()=>[t(O,null,{default:n(()=>[t(d,{"setting-key":"refresh.auto",title:"自动刷新"}),t(U,{class:"my-2"}),t(d,{"setting-key":"refresh.interval",title:"刷新间隔"})]),_:1})]),_:1})]),_:1})}const dn=Q(ll,[["render",ol]]),al={name:"SettingsLinkGenerator",data(){return{selectedItems:[],generatedLink:"",linkCopied:!1,search:"",preconfigForm:{namespace:"",authCode:"",autoExecute:!1},unifiedLink:"",headers:[{title:"",key:"data-table-select"},{title:"设置项",key:"description",sortable:!0},{title:"当前值",key:"value",sortable:!0},{title:"键名",key:"key",class:"d-none d-sm-table-cell",sortable:!0},{title:"状态",key:"isChanged",sortable:!0}]}},computed:{settingItems(){const s=Re(),e=[];for(const[o,u]of Object.entries(ut)){if(u.requireDeveloper&&!s["developer.enabled"])continue;const i=s[o]!==u.default;e.push({key:o,description:u.description||o,value:s[o],icon:u.icon||"mdi-cog",isChanged:i,defaultValue:u.default})}return e.sort((o,u)=>o.key.localeCompare(u.key))},filteredItems(){if(!this.search)return this.settingItems;const s=this.search.toLowerCase();return s==="已修改"?this.settingItems.filter(e=>e.isChanged):s==="是"||s==="否"?this.settingItems.filter(e=>typeof e.value=="boolean"&&(s==="是"?e.value:!e.value)):this.settingItems.filter(e=>{const o=e.description.toLowerCase(),u=e.key.toLowerCase(),i=String(e.value).toLowerCase(),l=e.isChanged?"已修改":"默认";return o.includes(s)||u.includes(s)||i.includes(s)||l.includes(s)})},hasDisplaySettings(){return this.selectedItems.some(s=>s.startsWith("display."))},hasEditSettings(){return this.selectedItems.some(s=>s.startsWith("edit."))},hasServerSettings(){return this.selectedItems.some(s=>s.startsWith("server."))},hasChangedSettings(){const s=Re();return this.selectedItems.some(e=>{const o=ut[e];return o&&s[e]!==o.default})}},methods:{handleSelectionChange(s){this.selectedItems=s.map(e=>e.key),this.generateLink()},generateLink(){const s=`${window.location.protocol}//${window.location.host}/`,e=Re(),o={};for(const u of this.selectedItems)o[u]=e[u];if(Object.keys(o).length===0){this.generatedLink=s;return}try{const u=JSON.stringify(o),l=new TextEncoder().encode(u),f={config:btoa(Array.from(l).map(I=>String.fromCharCode(I)).join(""))},w=new URLSearchParams(window.location.search).get("date");w&&(f.date=w);const x=new URLSearchParams(f).toString();this.generatedLink=`${s}?${x}`}catch(u){console.error("生成链接失败:",u),this.generatedLink="链接生成失败,请重试"}this.linkCopied=!1},async copyLink(){this.generatedLink||this.generateLink();try{await navigator.clipboard.writeText(this.generatedLink),this.linkCopied=!0,setTimeout(()=>{this.linkCopied=!1},3e3)}catch(s){console.error("复制链接失败:",s)}},resetSelection(){this.selectedItems=[],this.generatedLink="",this.linkCopied=!1},selectAll(){this.selectedItems=this.settingItems.map(s=>s.key),this.generateLink()},selectDataSourceSettings(){const s=this.settingItems.filter(e=>e.key.startsWith("server.")&&e.key!=="server.kvToken").map(e=>e.key);this.selectedItems=s,this.generateLink()},selectChangedSettings(){const s=this.settingItems.filter(e=>e.isChanged&&e.key!=="server.kvToken").map(e=>e.key);this.selectedItems=s,this.generateLink()},selectByPrefix(s){const e=this.settingItems.filter(o=>o.key.startsWith(`${s}.`)).map(o=>o.key);this.selectedItems=e},autoGenerateLink(){this.selectedItems.length>0?this.generateLink():this.generatedLink=""},getSettingDescription(s){const e=this.settingItems.find(o=>o.key===s);return e?e.description:s},generateUnifiedLink(){if(this.preconfigForm.namespace.trim())try{const s=`${window.location.protocol}//${window.location.host}/`,e=new URLSearchParams;if(e.append("namespace",this.preconfigForm.namespace.trim()),this.preconfigForm.authCode.trim()&&e.append("authCode",this.preconfigForm.authCode.trim()),this.preconfigForm.autoExecute&&e.append("autoExecute","true"),this.selectedItems.length>0){const o=Re(),u={};for(const r of this.selectedItems)u[r]=o[r];const i=JSON.stringify(u),d=new TextEncoder().encode(i),f=btoa(Array.from(d).map(r=>String.fromCharCode(r)).join(""));e.append("config",f)}this.unifiedLink=`${s}?${e.toString()}`,this.linkCopied=!1,console.log("生成统一链接:",this.unifiedLink),console.log("包含预配置:",!!this.preconfigForm.namespace),console.log("包含设置数量:",this.selectedItems.length)}catch(s){console.error("生成统一链接失败:",s),this.unifiedLink="链接生成失败,请重试"}},async copyUnifiedLink(){if(this.unifiedLink||this.generateUnifiedLink(),!(!this.unifiedLink||this.unifiedLink.includes("失败")))try{await navigator.clipboard.writeText(this.unifiedLink),this.linkCopied=!0,setTimeout(()=>{this.linkCopied=!1},3e3)}catch(s){console.error("复制统一链接失败:",s)}},openTestLink(){this.unifiedLink&&!this.unifiedLink.includes("失败")&&window.open(this.unifiedLink,"_blank")},clearAll(){this.preconfigForm={namespace:"",authCode:"",autoExecute:!1},this.selectedItems=[],this.unifiedLink="",this.generatedLink="",this.linkCopied=!1}},watch:{selectedItems:{handler(){this.preconfigForm.namespace.trim()&&this.generateUnifiedLink()},deep:!0},"preconfigForm.namespace":{handler(){this.preconfigForm.namespace.trim()?this.generateUnifiedLink():this.unifiedLink=""}},"preconfigForm.authCode":{handler(){this.preconfigForm.namespace.trim()&&this.generateUnifiedLink()}},"preconfigForm.autoExecute":{handler(){this.preconfigForm.namespace.trim()&&this.generateUnifiedLink()}}}},rl={class:"d-flex mb-3 gap-2 flex-wrap"},ul={class:"d-flex align-center mb-3 flex-wrap gap-2"},dl={class:"d-flex align-center"},cl={class:"d-flex align-center"},ml={key:0},fl={key:1},pl={key:2},hl={class:"text-caption text-grey"},gl={class:"d-flex mb-3 gap-2 flex-wrap"},wl={class:"d-flex flex-wrap gap-1"};function vl(s,e,o,u,i,l){return m(),y("div",null,[t(M,{border:"",class:"unified-link-generator"},{default:n(()=>[t(K,{class:"text-h6"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-link-variant",start:""}),e[6]||(e[6]=a(" 统一链接生成器 ",-1))]),_:1}),t(j,null,{default:n(()=>[e[35]||(e[35]=c("div",{class:"text-body-2 text-medium-emphasis mb-4"}," 生成包含预配置认证信息和设置的统一链接。可以同时预配置设备认证和应用设置。 ",-1)),t(M,{class:"mb-4",variant:"tonal"},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[t(g,{start:""},{default:n(()=>[...e[7]||(e[7]=[a("mdi-account-key",-1)])]),_:1}),e[8]||(e[8]=a(" 预配置认证信息 ",-1))]),_:1}),t(j,null,{default:n(()=>[t(de,null,{default:n(()=>[t(R,{cols:"12",md:"6"},{default:n(()=>[t(N,{modelValue:i.preconfigForm.namespace,"onUpdate:modelValue":e[0]||(e[0]=d=>i.preconfigForm.namespace=d),hint:"设备的命名空间标识符",label:"命名空间","persistent-hint":"",placeholder:"例如: classroom-001","prepend-inner-icon":"mdi-identifier",variant:"outlined"},null,8,["modelValue"])]),_:1}),t(R,{cols:"12",md:"6"},{default:n(()=>[t(N,{modelValue:i.preconfigForm.authCode,"onUpdate:modelValue":e[1]||(e[1]=d=>i.preconfigForm.authCode=d),hint:"留空则需要用户手动输入",label:"认证码","persistent-hint":"",placeholder:"设备认证码(可选)","prepend-inner-icon":"mdi-lock-outline",variant:"outlined"},null,8,["modelValue"])]),_:1})]),_:1}),t(de,{class:"mt-2"},{default:n(()=>[t(R,{cols:"12"},{default:n(()=>[t(Se,{modelValue:i.preconfigForm.autoExecute,"onUpdate:modelValue":e[2]||(e[2]=d=>i.preconfigForm.autoExecute=d),density:"compact",hint:"启用后会自动尝试认证,即使没有认证码也会尝试",label:"自动执行认证","persistent-hint":""},null,8,["modelValue"])]),_:1})]),_:1}),i.preconfigForm.namespace?(m(),h(Y,{key:0,class:"mt-3",type:"info",variant:"tonal"},{default:n(()=>[e[13]||(e[13]=c("div",{class:"text-subtitle-2 mb-2"},"预配置信息:",-1)),t(G,{class:"mr-2 mb-1",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[9]||(e[9]=[a("mdi-identifier",-1)])]),_:1}),a(" 命名空间: "+v(i.preconfigForm.namespace),1)]),_:1}),i.preconfigForm.authCode?(m(),h(G,{key:0,class:"mr-2 mb-1",color:"warning",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[10]||(e[10]=[a("mdi-lock",-1)])]),_:1}),a(" 认证码: "+v(i.preconfigForm.authCode.length>8?i.preconfigForm.authCode.substring(0,8)+"...":i.preconfigForm.authCode),1)]),_:1})):(m(),h(G,{key:1,class:"mr-2 mb-1",color:"grey",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[11]||(e[11]=[a("mdi-lock-open",-1)])]),_:1}),e[12]||(e[12]=a(" 无认证码 ",-1))]),_:1})),t(G,{color:i.preconfigForm.autoExecute?"success":"orange",class:"mr-2 mb-1",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[a(v(i.preconfigForm.autoExecute?"mdi-play-circle":"mdi-hand-back-left"),1)]),_:1}),a(" "+v(i.preconfigForm.autoExecute?"自动认证":"手动认证"),1)]),_:1},8,["color"])]),_:1})):b("",!0)]),_:1})]),_:1}),t(M,{class:"mb-4",variant:"tonal"},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[t(g,{start:""},{default:n(()=>[...e[14]||(e[14]=[a("mdi-cog-transfer",-1)])]),_:1}),e[15]||(e[15]=a(" 设置分享(可选) ",-1))]),_:1}),t(j,null,{default:n(()=>[e[22]||(e[22]=c("div",{class:"text-body-2 text-medium-emphasis mb-3"}," 选择需要包含在链接中的设置项。如果不选择任何设置,将只生成预配置认证链接。 ",-1)),c("div",rl,[t(p,{color:"primary","prepend-icon":"mdi-server-network",size:"small",variant:"tonal",onClick:l.selectDataSourceSettings},{default:n(()=>[...e[16]||(e[16]=[a(" 数据源设置 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"primary","prepend-icon":"mdi-compare",size:"small",variant:"tonal",onClick:l.selectChangedSettings},{default:n(()=>[...e[17]||(e[17]=[a(" 已变更设置 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"success","prepend-icon":"mdi-select-all",size:"small",variant:"tonal",onClick:l.selectAll},{default:n(()=>[...e[18]||(e[18]=[a(" 全选 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"error","prepend-icon":"mdi-select-remove",size:"small",variant:"tonal",onClick:l.resetSelection},{default:n(()=>[...e[19]||(e[19]=[a(" 清除选择 ",-1)])]),_:1},8,["onClick"])]),c("div",ul,[t(G,{class:"mr-2",color:"primary"},{default:n(()=>[a(" 已选 "+v(i.selectedItems.length)+" 项设置 ",1)]),_:1}),i.selectedItems.length>0?(m(),y(H,{key:0},[(m(!0),y(H,null,ne(i.selectedItems.slice(0,3),d=>(m(),h(G,{key:d,class:"mr-1",size:"small",variant:"text"},{default:n(()=>[a(v(l.getSettingDescription(d)),1)]),_:2},1024))),128)),i.selectedItems.length>3?(m(),h(G,{key:0,color:"grey",size:"small",variant:"text"},{default:n(()=>[a(" +"+v(i.selectedItems.length-3)+" 更多 ",1)]),_:1})):b("",!0)],64)):b("",!0)]),t(yt,{variant:"accordion"},{default:n(()=>[t(kt,null,{default:n(()=>[t(qt,null,{default:n(({expanded:d})=>[c("div",dl,[t(g,{class:"mr-2"},{default:n(()=>[a(v(d?"mdi-chevron-up":"mdi-chevron-down"),1)]),_:2},1024),e[20]||(e[20]=a(" 显示设置列表详情 ",-1))])]),_:1}),t(xt,null,{default:n(()=>[t(N,{modelValue:i.search,"onUpdate:modelValue":e[3]||(e[3]=d=>i.search=d),class:"mb-4",clearable:"","hide-details":"",label:"搜索设置","prepend-inner-icon":"mdi-magnify","single-line":""},null,8,["modelValue"]),t(Zt,{modelValue:i.selectedItems,"onUpdate:modelValue":e[4]||(e[4]=d=>i.selectedItems=d),headers:i.headers,items:l.filteredItems,"items-per-page":l.settingItems.length,"sort-by":[{key:"isChanged",order:"desc"}],class:"rounded setting-table",density:"compact","item-value":"key","show-select":"","onUpdate:selected":l.handleSelectionChange},{"item.description":n(({item:d})=>[c("div",cl,[t(g,{icon:d.icon,class:"mr-2",size:"small"},null,8,["icon"]),a(" "+v(d.description)+" ",1),d.key==="server.kvToken"?(m(),h(G,{key:0,class:"ml-2",color:"error",size:"x-small"},{default:n(()=>[...e[21]||(e[21]=[a(" 敏感 ",-1)])]),_:1})):b("",!0)])]),"item.value":n(({item:d})=>[typeof d.value=="boolean"?(m(),y("span",ml,v(d.value?"是":"否"),1)):d.key==="server.kvToken"&&d.value?(m(),y("span",fl,v(d.value.substring(0,8))+"... ",1)):(m(),y("span",pl,v(d.value),1))]),"item.key":n(({item:d})=>[c("span",hl,v(d.key),1)]),"item.isChanged":n(({item:d})=>[t(G,{color:d.isChanged?"warning":"success",text:d.isChanged?"已修改":"默认",density:"compact",size:"x-small"},null,8,["color","text"])]),_:2},1032,["modelValue","headers","items","items-per-page","onUpdate:selected"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(M,{class:"mb-4",variant:"outlined"},{default:n(()=>[t(K,{class:"text-subtitle-1"},{default:n(()=>[t(g,{start:""},{default:n(()=>[...e[23]||(e[23]=[a("mdi-link",-1)])]),_:1}),e[24]||(e[24]=a(" 生成的统一链接 ",-1))]),_:1}),t(j,null,{default:n(()=>[c("div",gl,[t(p,{disabled:!i.preconfigForm.namespace.trim(),color:"primary","prepend-icon":"mdi-auto-fix",variant:"flat",onClick:l.generateUnifiedLink},{default:n(()=>[...e[25]||(e[25]=[a(" 生成统一链接 ",-1)])]),_:1},8,["disabled","onClick"]),t(p,{disabled:!i.unifiedLink,color:"success","prepend-icon":"mdi-test-tube",variant:"tonal",onClick:l.openTestLink},{default:n(()=>[...e[26]||(e[26]=[a(" 测试链接 ",-1)])]),_:1},8,["disabled","onClick"]),t(p,{color:"error","prepend-icon":"mdi-delete",variant:"tonal",onClick:l.clearAll},{default:n(()=>[...e[27]||(e[27]=[a(" 清空所有 ",-1)])]),_:1},8,["onClick"])]),t(N,{modelValue:i.unifiedLink,"onUpdate:modelValue":e[5]||(e[5]=d=>i.unifiedLink=d),"append-inner-icon":i.linkCopied?"mdi-check":"mdi-content-copy",placeholder:i.preconfigForm.namespace?"点击「生成统一链接」按钮":"请先输入命名空间",class:"mb-3",label:"统一链接",readonly:"",variant:"outlined","onClick:appendInner":l.copyUnifiedLink},null,8,["modelValue","append-inner-icon","placeholder","onClick:appendInner"]),i.unifiedLink?(m(),h(Y,{key:0,class:"mb-3",type:"success",variant:"tonal"},{default:n(()=>[e[33]||(e[33]=c("div",{class:"text-subtitle-2 mb-2"},"链接包含内容:",-1)),c("div",wl,[t(G,{color:"primary",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[28]||(e[28]=[a("mdi-account-key",-1)])]),_:1}),e[29]||(e[29]=a(" 预配置认证 ",-1))]),_:1}),i.selectedItems.length>0?(m(),h(G,{key:0,color:"secondary",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[30]||(e[30]=[a("mdi-cog",-1)])]),_:1}),a(" "+v(i.selectedItems.length)+" 项设置 ",1)]),_:1})):(m(),h(G,{key:1,color:"grey",size:"small"},{default:n(()=>[t(g,{size:"small",start:""},{default:n(()=>[...e[31]||(e[31]=[a("mdi-cog-off",-1)])]),_:1}),e[32]||(e[32]=a(" 无额外设置 ",-1))]),_:1}))])]),_:1})):b("",!0)]),_:1})]),_:1}),t(Y,{type:"warning",variant:"tonal"},{default:n(()=>[...e[34]||(e[34]=[c("div",{class:"text-subtitle-2 mb-2"},"⚠️ 安全提醒",-1),c("ul",{class:"text-body-2 pl-4"},[c("li",null,"认证码和设置信息会在URL中传输请谨慎分发"),c("li",null,"建议仅在受信任的网络环境中使用"),c("li",null,"生产环境建议使用HTTPS协议"),c("li",null,"数据源设置和已变更设置默认不包含敏感Token信息")],-1)])]),_:1})]),_:1})]),_:1})])}const cn=Q(al,[["render",vl]]),bl={name:"UnsavedWarning",props:{show:Boolean,message:{type:String,default:"未保存"}}},yl={class:"warning-container"};function kl(s,e,o,u,i,l){return m(),y("div",yl,[o.show?(m(),h(G,{key:0,class:"warning-chip",color:"warning",size:"small"},{default:n(()=>[a(v(o.message),1)]),_:1})):b("",!0)])}const st=Q(bl,[["render",kl],["__scopeId","data-v-0f36b655"]]),xl=Fe({disabled:Boolean,modelValue:{type:Boolean,default:null},...Bn()},"VHover"),mn=tt()({name:"VHover",props:xl(),emits:{"update:modelValue":s=>!0},setup(s,e){let{slots:o}=e;const u=Wt(s,"modelValue"),{runOpenDelay:i,runCloseDelay:l}=jn(s,d=>!s.disabled&&(u.value=d));return()=>{var d;return(d=o.default)==null?void 0:d.call(o,{isHovering:u.value,props:{onMouseenter:i,onMouseleave:l}})}}}),Sl={name:"TeacherListCard",components:{UnsavedWarning:st},props:{isMobile:Boolean},data(){return{newTeacher:{name:"",subjects:[],isHeadTeacher:!1},editState:{index:-1,teacher:null},modelValue:{list:[],text:"",advanced:!1},loading:!1,error:null,lastSavedData:null,unsavedChanges:!1,commonSubjects:["语文","数学","英语","物理","化学","生物","政治","历史","地理","信息技术","音乐","美术","体育"]}},watch:{modelValue:{handler(s){this.lastSavedData&&(this.unsavedChanges=JSON.stringify(s.list)!==JSON.stringify(this.lastSavedData)),this.modelValue.advanced||(this.modelValue.text=JSON.stringify(s.list,null,2))},deep:!0}},mounted(){this.loadTeachers()},methods:{async loadTeachers(){var s;this.error=null;try{if(this.loading=!0,!k("server.classNumber"))throw new Error("请先设置班号");try{const o=await ie.loadData("classworks-list-teacher");o.success!==!1&&Array.isArray(o)&&(this.modelValue.list=o.map(u=>({name:u.name||"",subjects:Array.isArray(u.subjects)?u.subjects:[],isHeadTeacher:!!u.isHeadTeacher})),this.modelValue.text=JSON.stringify(this.modelValue.list,null,2),this.lastSavedData=JSON.parse(JSON.stringify(this.modelValue.list)),this.unsavedChanges=!1)}catch(o){console.warn("Failed to load teacher list, initializing empty list",o),this.modelValue.list=[],this.modelValue.text="[]",this.lastSavedData=[]}}catch(e){console.error("加载教师列表失败:",e),this.error=e.message||"加载失败,请检查设置",(s=this.$message)==null||s.error("加载失败",this.error)}finally{this.loading=!1}},async saveTeachers(){var s,e,o;try{if(!k("server.classNumber"))throw new Error("请先设置班号");const i=this.modelValue.list.map(d=>({name:d.name,subjects:Array.isArray(d.subjects)?d.subjects:[],isHeadTeacher:!!d.isHeadTeacher})),l=await ie.saveData("classworks-list-teacher",i);if(l.success===!1)throw new Error(((s=l.error)==null?void 0:s.message)||"保存失败");this.modelValue.list=i,this.lastSavedData=JSON.parse(JSON.stringify(i)),this.unsavedChanges=!1,(e=this.$message)==null||e.success("保存成功","教师列表已更新")}catch(u){console.error("保存教师列表失败:",u),(o=this.$message)==null||o.error("保存失败",u.message||"请重试")}},toggleAdvanced(){this.modelValue.advanced=!this.modelValue.advanced,this.modelValue.advanced&&(this.modelValue.text=JSON.stringify(this.modelValue.list,null,2))},handleTextInput(s){if(this.modelValue.advanced)try{const e=JSON.parse(s);Array.isArray(e)?(this.modelValue.list=e.map(o=>({name:o.name||"",subjects:Array.isArray(o.subjects)?o.subjects:[],isHeadTeacher:!!o.isHeadTeacher})),this.error=null):this.error="JSON 必须是一个数组"}catch(e){this.error="JSON 格式错误: "+e.message}},addTeacher(){var e,o;const s=this.newTeacher.name.trim();if(!s){(e=this.$message)==null||e.warning("提示","请输入教师姓名");return}if(this.newTeacher.subjects.length===0){(o=this.$message)==null||o.warning("提示","请选择至少一个任教科目");return}this.modelValue.list.push({name:s,subjects:[...this.newTeacher.subjects],isHeadTeacher:this.newTeacher.isHeadTeacher}),this.newTeacher={name:"",subjects:[],isHeadTeacher:!1}},startEdit(s,e){this.editState.index=s,this.editState.teacher={name:e.name,subjects:[...e.subjects],isHeadTeacher:e.isHeadTeacher}},saveEdit(){var s,e;if(this.editState.index!==-1){const o=this.editState.teacher.name.trim();if(!o){(s=this.$message)==null||s.warning("提示","教师姓名不能为空");return}if(this.editState.teacher.subjects.length===0){(e=this.$message)==null||e.warning("提示","请选择至少一个任教科目");return}this.modelValue.list[this.editState.index]={name:o,subjects:[...this.editState.teacher.subjects],isHeadTeacher:this.editState.teacher.isHeadTeacher},this.editState.index=-1,this.editState.teacher=null}},cancelEdit(){this.editState.index=-1,this.editState.teacher=null},removeTeacher(s){s!==void 0&&this.modelValue.list.splice(s,1)},handleClick(s,e){this.isMobile&&this.startEdit(s,e)}}},Cl={key:0},Vl={class:"d-flex align-start mb-3"},_l={class:"flex-grow-1"},Dl={class:"d-flex align-center mb-1"},Al=["onClick"],Il={key:0,class:"mt-2"},Tl={key:1,class:"mt-1"},Ul={key:1,class:"pt-2"};function jl(s,e,o,u,i,l){const d=st;return m(),h(M,{class:pe({"unsaved-changes":i.unsavedChanges}),color:i.unsavedChanges?"warning-subtle":void 0,border:""},{default:n(()=>[t(ze,null,{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-account-tie",size:"large"})]),append:n(()=>[t(d,{show:i.unsavedChanges,message:"有未保存的更改"},null,8,["show"]),t(p,{color:i.modelValue.advanced?"primary":void 0,"prepend-icon":"mdi-code-braces",variant:"text",onClick:l.toggleAdvanced},{default:n(()=>[a(v(i.modelValue.advanced?"返回基础编辑":"高级编辑"),1)]),_:1},8,["color","onClick"])]),default:n(()=>[t(K,{class:"text-h6"},{default:n(()=>[...e[4]||(e[4]=[a("教师列表",-1)])]),_:1})]),_:1}),t(j,null,{default:n(()=>[i.loading?(m(),h($e,{key:0,class:"mb-4",color:"primary",indeterminate:""})):b("",!0),i.error?(m(),h(Y,{key:1,class:"mb-4",closable:"",type:"error",variant:"tonal"},{default:n(()=>[a(v(i.error),1)]),_:1})):b("",!0),t(Ht,null,{default:n(()=>[i.modelValue.advanced?(m(),y("div",Ul,[t(Pe,{modelValue:i.modelValue.text,"onUpdate:modelValue":[e[3]||(e[3]=f=>i.modelValue.text=f),l.handleTextInput],hint:"JSON 格式编辑教师列表。每个教师需包含 name、subjects数组、isHeadTeacher布尔值",label:"批量编辑教师列表 (JSON)","persistent-hint":"",placeholder:'[{"name":"教师姓名","subjects":["语文","数学"],"isHeadTeacher":true}]',rows:"15",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue"])])):(m(),y("div",Cl,[t(M,{class:"mb-6",variant:"outlined"},{default:n(()=>[t(j,null,{default:n(()=>[t(de,null,{default:n(()=>[t(R,{cols:"12",md:"4"},{default:n(()=>[t(N,{modelValue:i.newTeacher.name,"onUpdate:modelValue":e[0]||(e[0]=f=>i.newTeacher.name=f),density:"comfortable","hide-details":"",label:"教师姓名",placeholder:"输入教师姓名","prepend-inner-icon":"mdi-account",variant:"outlined"},null,8,["modelValue"])]),_:1}),t(R,{cols:"12",md:"5"},{default:n(()=>[t(Ut,{modelValue:i.newTeacher.subjects,"onUpdate:modelValue":e[1]||(e[1]=f=>i.newTeacher.subjects=f),items:i.commonSubjects,chips:"",clearable:"","closable-chips":"",density:"comfortable","hide-details":"",label:"任教科目",multiple:"",placeholder:"选择或输入科目","prepend-inner-icon":"mdi-book-open-variant",variant:"outlined"},null,8,["modelValue","items"])]),_:1}),t(R,{cols:"12",md:"3",class:"d-flex align-center gap-2"},{default:n(()=>[t(Se,{modelValue:i.newTeacher.isHeadTeacher,"onUpdate:modelValue":e[2]||(e[2]=f=>i.newTeacher.isHeadTeacher=f),density:"comfortable","hide-details":"",label:"班主任"},null,8,["modelValue"]),t(p,{disabled:!i.newTeacher.name.trim()||i.newTeacher.subjects.length===0,color:"primary","prepend-icon":"mdi-plus",onClick:l.addTeacher},{default:n(()=>[...e[5]||(e[5]=[a(" 添加教师 ",-1)])]),_:1},8,["disabled","onClick"])]),_:1})]),_:1})]),_:1})]),_:1}),i.modelValue.list.length===0?(m(),h(de,{key:0},{default:n(()=>[t(R,{cols:"12"},{default:n(()=>[t(Y,{type:"info",variant:"tonal"},{default:n(()=>[...e[6]||(e[6]=[a(" 暂无教师信息,请添加教师 ",-1)])]),_:1})]),_:1})]),_:1})):(m(),h(de,{key:1},{default:n(()=>[(m(!0),y(H,null,ne(i.modelValue.list,(f,r)=>(m(),h(R,{key:r,cols:"12",lg:"6",xl:"4"},{default:n(()=>[t(mn,null,{default:n(({isHovering:w,props:x})=>[t(M,Ve({elevation:o.isMobile?1:w?4:1,border:"",class:"teacher-card"},{ref_for:!0},x),{default:n(()=>[t(j,{class:"pa-4"},{default:n(()=>[c("div",Vl,[t(et,{color:f.isHeadTeacher?"primary":"grey-lighten-1",class:"mr-3",size:"48"},{default:n(()=>[t(g,{icon:f.isHeadTeacher?"mdi-star":"mdi-account",size:"28"},null,8,["icon"])]),_:2},1032,["color"]),c("div",_l,[c("div",Dl,[i.editState.index===r?(m(),h(N,{key:0,modelValue:i.editState.teacher.name,"onUpdate:modelValue":I=>i.editState.teacher.name=I,autofocus:"",class:"flex-grow-1",density:"compact","hide-details":"",variant:"underlined"},null,8,["modelValue","onUpdate:modelValue"])):(m(),y("span",{key:1,class:"text-h6 font-weight-medium",onClick:I=>l.handleClick(r,f)},v(f.name),9,Al)),f.isHeadTeacher?(m(),h(G,{key:2,class:"ml-2",color:"primary",density:"comfortable",size:"small",variant:"flat"},{default:n(()=>[...e[7]||(e[7]=[a(" 班主任 ",-1)])]),_:1})):b("",!0)]),i.editState.index===r?(m(),y("div",Il,[t(Ut,{modelValue:i.editState.teacher.subjects,"onUpdate:modelValue":I=>i.editState.teacher.subjects=I,items:i.commonSubjects,chips:"","closable-chips":"",density:"compact","hide-details":"",label:"任教科目",multiple:"",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue","items"]),t(Se,{modelValue:i.editState.teacher.isHeadTeacher,"onUpdate:modelValue":I=>i.editState.teacher.isHeadTeacher=I,class:"mt-2",density:"compact","hide-details":"",label:"班主任"},null,8,["modelValue","onUpdate:modelValue"])])):(m(),y("div",Tl,[(m(!0),y(H,null,ne(f.subjects,(I,F)=>(m(),h(G,{key:F,class:"mr-1 mb-1",density:"comfortable",size:"small",variant:"tonal"},{default:n(()=>[a(v(I),1)]),_:2},1024))),128))]))]),c("div",{class:pe([{"opacity-100":w||o.isMobile||i.editState.index===r},"d-flex gap-1 action-buttons ml-2"])},[i.editState.index===r?(m(),h(p,{key:0,color:"success",icon:"mdi-check",size:"small",variant:"text",onClick:l.saveEdit},null,8,["onClick"])):b("",!0),i.editState.index===r?(m(),h(p,{key:1,color:"grey",icon:"mdi-close",size:"small",variant:"text",onClick:l.cancelEdit},null,8,["onClick"])):(m(),h(p,{key:2,color:"primary",icon:"mdi-pencil",size:"small",variant:"text",onClick:I=>l.startEdit(r,f)},null,8,["onClick"])),i.editState.index!==r?(m(),h(p,{key:3,color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:I=>l.removeTeacher(r)},null,8,["onClick"])):b("",!0)],2)])]),_:2},1024)]),_:2},1040,["elevation"])]),_:2},1024)]),_:2},1024))),128))]),_:1}))]))]),_:1}),t(de,{class:"mt-6"},{default:n(()=>[t(R,{class:"d-flex gap-2",cols:"12"},{default:n(()=>[t(p,{disabled:i.loading,loading:i.loading,color:"primary","prepend-icon":"mdi-content-save",size:"large",onClick:l.saveTeachers},{default:n(()=>[...e[8]||(e[8]=[a(" 保存教师列表 ",-1)])]),_:1},8,["disabled","loading","onClick"]),t(p,{disabled:i.loading,loading:i.loading,color:"error","prepend-icon":"mdi-refresh",size:"large",variant:"outlined",onClick:l.loadTeachers},{default:n(()=>[...e[9]||(e[9]=[a(" 重载教师列表 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1})]),_:1})]),_:1},8,["class","color"])}const fn=Q(Sl,[["render",jl],["__scopeId","data-v-16455a49"]]);let rt=null;async function Bl(){return rt||(rt=(await Ft(async()=>{const{pinyin:s}=await import("./index-DdToQrR8.js");return{pinyin:s}},[],import.meta.url)).pinyin),rt}const Ml={name:"StudentListCard",components:{UnsavedWarning:st},props:{isMobile:Boolean},data(){return{newStudentName:"",editState:{index:-1,name:""},modelValue:{list:[],text:"",advanced:!1},loading:!1,error:null,lastSavedData:null,unsavedChanges:!1}},watch:{modelValue:{handler(s){this.lastSavedData&&(this.unsavedChanges=JSON.stringify(s.list)!==JSON.stringify(this.lastSavedData)),this.modelValue.advanced||(this.modelValue.text=s.list.slice().sort((e,o)=>e.id-o.id).map(e=>e.name).join(`
`))},deep:!0}},mounted(){this.loadStudents()},methods:{async loadStudents(){var s;this.error=null;try{if(this.loading=!0,!k("server.classNumber"))throw new Error("请先设置班号");try{const o=await ie.loadData("classworks-list-main");o.success!=!1&&Array.isArray(o)&&(this.modelValue.list=o.map((u,i)=>typeof u=="string"?{id:i+1,name:u}:{id:u.id||i+1,name:u.name||u.toString()}),this.modelValue.list.sort((u,i)=>u.id-i.id),this.modelValue.text=this.modelValue.list.map(u=>u.name).join(`
`),this.lastSavedData=JSON.parse(JSON.stringify(this.modelValue.list)),this.unsavedChanges=!1)}catch(o){console.warn("Failed to load student list from dedicated key, falling back to config",o)}}catch(e){console.error("加载学生列表失败:",e),this.error=e.message||"加载失败,请检查设置",(s=this.$message)==null||s.error("加载失败",this.error)}finally{this.loading=!1}},async saveStudents(){var s,e,o;try{if(!k("server.classNumber"))throw new Error("请先设置班号");const i=this.modelValue.list.slice().sort((d,f)=>d.id-f.id).map((d,f)=>({id:f+1,name:d.name})),l=await ie.saveData("classworks-list-main",i);if(l.success===!1)throw new Error(((s=l.error)==null?void 0:s.message)||"保存失败");this.modelValue.list=i,this.lastSavedData=JSON.parse(JSON.stringify(i)),this.unsavedChanges=!1,(e=this.$message)==null||e.success("保存成功","学生列表已更新")}catch(u){console.error("保存学生列表失败:",u),(o=this.$message)==null||o.error("保存失败",u.message||"请重试")}},toggleAdvanced(){this.modelValue.advanced=!this.modelValue.advanced},handleTextInput(s){if(!this.modelValue.advanced)return;const e=s.split(`
`).filter(l=>l.trim()),o=new Map(this.modelValue.list.map(l=>[l.name,l.id]));let u=Math.max(0,...this.modelValue.list.map(l=>l.id));const i=e.map(l=>(l=l.trim(),o.has(l)?{id:o.get(l),name:l}:{id:++u,name:l}));this.modelValue.list=i},addStudent(){const s=this.newStudentName.trim();if(s&&!this.modelValue.list.some(e=>e.name===s)){const e=Math.max(0,...this.modelValue.list.map(o=>o.id));this.modelValue.list.push({id:e+1,name:s}),this.newStudentName=""}},startEdit(s,e){this.editState.index=s,this.editState.name=e.name},saveEdit(){if(this.editState.index!==-1){const s=this.editState.name.trim();s&&s!==this.modelValue.list[this.editState.index].name&&(this.modelValue.list[this.editState.index].name=s),this.editState.index=-1,this.editState.name=""}},removeStudent(s){s!==void 0&&this.modelValue.list.splice(s,1)},moveStudent(s,e){if(e==="top"){if(s>0){const o=this.modelValue.list[s];this.modelValue.list.splice(s,1),this.modelValue.list.unshift(o),this.modelValue.list.forEach((u,i)=>u.id=i+1)}}else{const o=e==="up"?s-1:s+1;o>=0&&o<this.modelValue.list.length&&([this.modelValue.list[s],this.modelValue.list[o]]=[this.modelValue.list[o],this.modelValue.list[s]],[this.modelValue.list[s].id,this.modelValue.list[o].id]=[this.modelValue.list[o].id,this.modelValue.list[s].id])}},handleClick(s,e){this.isMobile&&this.startEdit(s,e)},async sortStudentsByPinyin(){const s=await Bl(),e=[...this.modelValue.list].sort((o,u)=>{const i=s(o.name,{toneType:"none"}),l=s(u.name,{toneType:"none"});return i.localeCompare(l)});e.forEach((o,u)=>o.id=u+1),this.modelValue.list=e}}},Nl={key:0},Pl=["onClick"],zl={key:1,class:"pt-2"};function El(s,e,o,u,i,l){const d=st;return m(),h(M,{class:pe({"unsaved-changes":i.unsavedChanges}),color:i.unsavedChanges?"warning-subtle":void 0,border:""},{default:n(()=>[t(ze,null,{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-account-group",size:"large"})]),append:n(()=>[t(d,{show:i.unsavedChanges,message:"有未保存的更改"},null,8,["show"]),t(p,{disabled:i.modelValue.list.length===0,class:"mr-2","prepend-icon":"mdi-sort-alphabetical-variant",variant:"text",onClick:l.sortStudentsByPinyin},{default:n(()=>[...e[4]||(e[4]=[a(" 按姓名首字母排序 ",-1)])]),_:1},8,["disabled","onClick"]),t(p,{color:i.modelValue.advanced?"primary":void 0,"prepend-icon":"mdi-code-braces",variant:"text",onClick:l.toggleAdvanced},{default:n(()=>[a(v(i.modelValue.advanced?"返回基础编辑":"高级编辑"),1)]),_:1},8,["color","onClick"])]),default:n(()=>[t(K,{class:"text-h6"},{default:n(()=>[...e[3]||(e[3]=[a("学生列表",-1)])]),_:1})]),_:1}),t(j,null,{default:n(()=>[i.loading?(m(),h($e,{key:0,class:"mb-4",color:"primary",indeterminate:""})):b("",!0),i.error?(m(),h(Y,{key:1,class:"mb-4",closable:"",type:"error",variant:"tonal"},{default:n(()=>[a(v(i.error),1)]),_:1})):b("",!0),t(Ht,null,{default:n(()=>[i.modelValue.advanced?(m(),y("div",zl,[t(Pe,{modelValue:i.modelValue.text,"onUpdate:modelValue":[e[2]||(e[2]=f=>i.modelValue.text=f),l.handleTextInput],hint:"使用文本编辑模式批量编辑学生名单,保存时会自动去除空行",label:"批量编辑学生列表","persistent-hint":"",placeholder:"每行输入一个学生姓名",rows:"10",variant:"outlined"},null,8,["modelValue","onUpdate:modelValue"])])):(m(),y("div",Nl,[t(de,{class:"mb-6"},{default:n(()=>[t(R,{cols:"12",md:"4",sm:"6"},{default:n(()=>[t(N,{modelValue:i.newStudentName,"onUpdate:modelValue":e[0]||(e[0]=f=>i.newStudentName=f),class:"mb-4","hide-details":"",label:"添加学生",placeholder:"输入学生姓名后回车添加","prepend-inner-icon":"mdi-account-plus",variant:"outlined",onKeyup:_e(l.addStudent,["enter"])},{append:n(()=>[t(p,{disabled:!i.newStudentName.trim(),color:"primary",icon:"mdi-plus",variant:"text",onClick:l.addStudent},null,8,["disabled","onClick"])]),_:1},8,["modelValue","onKeyup"])]),_:1})]),_:1}),t(de,null,{default:n(()=>[(m(!0),y(H,null,ne(i.modelValue.list,(f,r)=>(m(),h(R,{key:r,cols:"12",lg:"3",md:"4",sm:"6"},{default:n(()=>[t(mn,null,{default:n(({isHovering:w,props:x})=>[t(M,Ve({elevation:o.isMobile?1:w?4:1,border:"",class:"student-card"},{ref_for:!0},x),{default:n(()=>[t(j,{class:"d-flex align-center pa-3"},{default:n(()=>[t(gt,{"open-on-hover":!o.isMobile,location:"bottom"},{activator:n(({props:I})=>[t(p,Ve({class:"mr-3 font-weight-medium",size:"small"},{ref_for:!0},I,{variant:"tonal"}),{default:n(()=>[a(v(r+1),1)]),_:2},1040)]),default:n(()=>[t(O,{density:"compact",nav:""},{default:n(()=>[t(D,{disabled:r===0,"prepend-icon":"mdi-arrow-up-bold",onClick:I=>l.moveStudent(r,"top")},{default:n(()=>[...e[5]||(e[5]=[a(" 置顶 ",-1)])]),_:1},8,["disabled","onClick"]),t(U),t(D,{disabled:r===0,"prepend-icon":"mdi-arrow-up",onClick:I=>l.moveStudent(r,"up")},{default:n(()=>[...e[6]||(e[6]=[a(" 上移 ",-1)])]),_:1},8,["disabled","onClick"]),t(D,{disabled:r===i.modelValue.list.length-1,"prepend-icon":"mdi-arrow-down",onClick:I=>l.moveStudent(r,"down")},{default:n(()=>[...e[7]||(e[7]=[a(" 下移 ",-1)])]),_:1},8,["disabled","onClick"])]),_:2},1024)]),_:2},1032,["open-on-hover"]),i.editState.index===r?(m(),h(N,{key:0,modelValue:i.editState.name,"onUpdate:modelValue":e[1]||(e[1]=I=>i.editState.name=I),autofocus:"",class:"flex-grow-1",density:"compact","hide-details":"",variant:"underlined",onBlur:l.saveEdit,onKeyup:_e(l.saveEdit,["enter"])},null,8,["modelValue","onBlur","onKeyup"])):(m(),y("span",{key:1,class:"text-body-1 flex-grow-1",onClick:I=>l.handleClick(r,f)},v(f.name),9,Pl)),c("div",{class:pe([{"opacity-100":w||o.isMobile},"d-flex gap-1 action-buttons"])},[t(p,{color:"primary",icon:"mdi-pencil",size:"small",variant:"text",onClick:I=>l.startEdit(r,f)},null,8,["onClick"]),t(p,{color:"error",icon:"mdi-delete",size:"small",variant:"text",onClick:I=>l.removeStudent(r)},null,8,["onClick"])],2)]),_:2},1024)]),_:2},1040,["elevation"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]))]),_:1}),t(de,{class:"mt-6"},{default:n(()=>[t(R,{class:"d-flex gap-2",cols:"12"},{default:n(()=>[t(p,{disabled:i.loading,loading:i.loading,color:"primary","prepend-icon":"mdi-content-save",size:"large",onClick:l.saveStudents},{default:n(()=>[...e[8]||(e[8]=[a(" 保存名单 ",-1)])]),_:1},8,["disabled","loading","onClick"]),t(p,{disabled:i.loading,loading:i.loading,color:"error","prepend-icon":"mdi-refresh",size:"large",variant:"outlined",onClick:l.loadStudents},{default:n(()=>[...e[9]||(e[9]=[a(" 重载名单 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1})]),_:1})]),_:1},8,["class","color"])}const pn=Q(Ml,[["render",El],["__scopeId","data-v-4feed29c"]]),Ll={key:0,class:"d-flex justify-center align-center fill-height"},Rl={key:1,class:"d-flex justify-center align-center fill-height"},Kl={key:2},Fl={class:"text-caption ml-4 text-medium-emphasis"},Ol={key:0},Jl={key:1},Hl={class:"text-error"},hn={__name:"CloudMigrationDialog",props:{modelValue:Boolean},emits:["update:modelValue"],setup(s,{emit:e}){const o=s,u=e,i=se(!1),l=se(!1),d=se(!1),f=se([]),r=se([]),w=se(!1),x=se(null),I=se(null),F=[{id:"student-list",label:"学生列表",description:"classworks-list-main",matcher:C=>C==="classworks-list-main"||C.startsWith("classworks-list-main")},{id:"homework-data",label:"作业数据",description:"classworks-data-*",matcher:C=>C.startsWith("classworks-data-")},{id:"lists",label:"列表",description:"classworks-list-*",matcher:C=>C.startsWith("classworks-list-")},{id:"other",label:"其他",description:"所有其他键",matcher:C=>!C.startsWith("classworks-data-")&&!C.startsWith("classworks-list-")}];ct(()=>o.modelValue,C=>{i.value=C,C&&$()}),ct(i,C=>{u("update:modelValue",C)});const $=async()=>{l.value=!0;try{const C=await Tt.loadKeys({limit:1e3});f.value=C.keys||[],r.value=[]}catch(C){console.error(C)}finally{l.value=!1}},J=C=>f.value.filter(C.matcher),he=C=>J(C).length,ae=C=>{const V=J(C);return V.length===0?!1:V.filter(_=>r.value.includes(_)).length===V.length},ce=C=>{const V=J(C);if(V.length===0)return!1;const T=V.filter(_=>r.value.includes(_)).length;return T>0&&T<V.length},le=C=>{const V=J(C);if(V.length===0)return;const T=ae(C),_=new Set(r.value);T?V.forEach(E=>_.delete(E)):V.forEach(E=>_.add(E)),r.value=Array.from(_)},oe=async()=>{var C,V,T;d.value=!0,I.value=null,x.value=null;try{const _={};for(const A of r.value){const X=await Tt.loadData(A);if(X){if(X&&X.success===!1&&X.error){console.warn(`Skipping key ${A} due to load error`,X.error);continue}_[A]=X}}const E=k("server.domain"),q=k("server.kvToken");if(!E||!q)throw new Error("请先配置服务器地址和 Token");const P=E.replace(/\/$/,""),ee=await ts.post(`${P}/kv/_batchimport`,_,{headers:{Authorization:`Bearer ${q}`,"Content-Type":"application/json"}});if(ee.data&&ee.data.code===200)x.value=ee.data.data,w.value=!0,i.value=!1;else throw new Error(((C=ee.data)==null?void 0:C.message)||"迁移失败")}catch(_){console.error(_),I.value=((T=(V=_.response)==null?void 0:V.data)==null?void 0:T.message)||_.message||"发生未知错误",w.value=!0}finally{d.value=!1}};return(C,V)=>(m(),y(H,null,[t(we,{modelValue:i.value,"onUpdate:modelValue":V[2]||(V[2]=T=>i.value=T),"max-width":"600",scrollable:""},{default:n(()=>[t(M,null,{default:n(()=>[t(K,null,{default:n(()=>[...V[5]||(V[5]=[a("迁移到云端",-1)])]),_:1}),t(j,{style:{height:"400px"}},{default:n(()=>[l.value?(m(),y("div",Ll,[t(Jt,{indeterminate:"",color:"primary"})])):f.value.length===0?(m(),y("div",Rl," 没有找到本地数据 ")):(m(),y("div",Kl,[t(O,{"select-strategy":"classic",class:"mb-4"},{default:n(()=>[t(Mn,null,{default:n(()=>[...V[6]||(V[6]=[a("选择数据类型",-1)])]),_:1}),(m(),y(H,null,ne(F,T=>t(D,{key:T.id,onClick:_=>le(T)},{prepend:n(()=>[t(jt,{"model-value":ae(T),indeterminate:ce(T),onClick:Ae(_=>le(T),["stop"])},null,8,["model-value","indeterminate","onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[a(v(T.label),1)]),_:2},1024),t(te,null,{default:n(()=>[a(v(T.description)+" ("+v(he(T))+" 项)",1)]),_:2},1024)]),_:2},1032,["onClick"])),64))]),_:1}),t(U,{class:"mb-4"}),t(yt,null,{default:n(()=>[t(kt,{title:"详细数据列表"},{default:n(()=>[t(xt,null,{default:n(()=>[t(O,{"select-strategy":"classic",density:"compact"},{default:n(()=>[(m(!0),y(H,null,ne(f.value,T=>(m(),h(D,{key:T,value:T},{prepend:n(()=>[t(jt,{modelValue:r.value,"onUpdate:modelValue":V[0]||(V[0]=_=>r.value=_),value:T},null,8,["modelValue","value"])]),default:n(()=>[t(z,null,{default:n(()=>[a(v(T),1)]),_:2},1024)]),_:2},1032,["value"]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]))]),_:1}),t(U),t(ue,null,{default:n(()=>[c("div",Fl," 已选择 "+v(r.value.length)+" 项 ",1),t(Z),t(p,{variant:"text",onClick:V[1]||(V[1]=T=>i.value=!1)},{default:n(()=>[...V[7]||(V[7]=[a("取消",-1)])]),_:1}),t(p,{color:"primary",onClick:oe,loading:d.value,disabled:r.value.length===0},{default:n(()=>[...V[8]||(V[8]=[a(" 开始迁移 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:w.value,"onUpdate:modelValue":V[4]||(V[4]=T=>w.value=T),"max-width":"500"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,null,{default:n(()=>[...V[9]||(V[9]=[a("迁移结果",-1)])]),_:1}),t(j,null,{default:n(()=>[x.value?(m(),y("div",Ol,[c("p",null,"总计: "+v(x.value.summary.total),1),c("p",null,"成功: "+v(x.value.summary.successful),1),c("p",null,"失败: "+v(x.value.summary.failed),1)])):I.value?(m(),y("div",Jl,[c("p",Hl,v(I.value),1)])):b("",!0)]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{color:"primary",onClick:V[3]||(V[3]=T=>w.value=!1)},{default:n(()=>[...V[10]||(V[10]=[a("关闭",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])],64))}},Ql={name:"KvDatabaseCard",components:{SettingsCard:W,CloudMigrationDialog:hn},data(){return{loading:!1,loadingData:!1,savingData:!1,deletingData:!1,kvData:[],searchQuery:"",viewDialog:!1,editDialog:!1,deleteDialog:!1,createDialog:!1,cloudUrlDialog:!1,showMigrationDialog:!1,selectedItem:null,editingItem:null,itemToDelete:null,selectedCloudItem:null,gettingCloudUrl:!1,cloudUrlResult:null,cloudUrlError:null,cloudUrlOptions:{migrateFromLocal:!0,autoConfigureCloud:!0},editingData:"",newKey:"",newData:"",tableHeaders:[{title:"键名",key:"key",sortable:!0},{title:"操作",key:"actions",sortable:!1,width:"120px"}]}},computed:{currentProvider(){return k("server.provider")},isKvProvider(){return this.currentProvider==="kv-local"||this.currentProvider==="kv-server"||this.currentProvider==="classworkscloud"},connectionStatus(){return this.isKvProvider?this.currentProvider==="kv-local"?"本地数据库":"服务器数据库":"当前数据提供者不支持KV数据库管理"},connectionIcon(){return this.isKvProvider?this.currentProvider==="kv-local"?"mdi-database":"mdi-database-sync":"mdi-database-off"},connectionColor(){return this.isKvProvider?"success":"error"},filteredKvData(){return this.searchQuery?this.kvData.filter(s=>s.key.toLowerCase().includes(this.searchQuery.toLowerCase())):this.kvData},isValidJson(){if(!this.editingData)return!0;try{return JSON.parse(this.editingData),!0}catch{return!1}},isValidNewJson(){if(!this.newData)return!0;try{return JSON.parse(this.newData),!0}catch{return!1}},isValidKey(){return!this.newKey||this.newKey.trim()===""?!1:!this.kvData.some(s=>s.key===this.newKey.trim())}},async mounted(){this.isKvProvider&&await this.loadKvData()},methods:{async refreshConnection(){this.loading=!0;try{await new Promise(s=>setTimeout(s,500)),this.$message.success("连接状态已刷新")}catch(s){this.$message.error("刷新失败",s.message)}finally{this.loading=!1}},async loadKvData(){var s;if(!this.isKvProvider){this.$message.warning("当前数据提供者不支持KV数据库管理");return}this.loadingData=!0;try{this.kvData=[];const e=await ie.loadKeys({sortBy:"key",sortDir:"asc",limit:1e3});if(e.success===!1)throw new Error(((s=e.error)==null?void 0:s.message)||"获取键名列表失败");this.kvData=e.keys.map(o=>({key:o,value:null,loaded:!1})),this.$message.success("键名加载完成",`共找到 ${this.kvData.length} 个键,总计 ${e.total_rows} 个键`)}catch(e){this.$message.error("加载数据失败",e.message)}finally{this.loadingData=!1}},async viewItem(s){this.selectedItem=s,this.viewDialog=!0,(!s.loaded||s.value===null)&&await this.loadItemData(s)},async editItem(s){this.editingItem=s,(!s.loaded||s.value===null)&&await this.loadItemData(s),this.editingData=this.formatJsonData(s.value),this.editDialog=!0},async loadItemData(s){try{const e=await ie.loadData(s.key);if(e&&e.success!==!1)s.value=e,s.loaded=!0;else throw new Error("数据加载失败")}catch(e){this.$message.error("加载数据失败",e.message),s.value=null,s.loaded=!1}},closeEditDialog(){this.editDialog=!1,this.editingItem=null,this.editingData=""},createNewItem(){this.newKey="",this.newData=`{
"example": "value"
}`,this.createDialog=!0},closeCreateDialog(){this.createDialog=!1,this.newKey="",this.newData=""},async saveNewData(){var s;if(!(!this.isValidKey||!this.isValidNewJson)){this.savingData=!0;try{const e=JSON.parse(this.newData),o=this.newKey.trim(),u=await ie.saveData(o,e);if(u&&!u.error)this.kvData.push({key:o,value:e,loaded:!0}),this.$message.success("数据创建成功"),this.closeCreateDialog();else throw new Error(((s=u.error)==null?void 0:s.message)||"创建失败")}catch(e){this.$message.error("创建失败",e.message)}finally{this.savingData=!1}}},async saveEditedData(){var s;if(!(!this.isValidJson||!this.editingItem)){this.savingData=!0;try{const e=JSON.parse(this.editingData),o=await ie.saveData(this.editingItem.key,e);if(o&&!o.error){const u=this.kvData.findIndex(i=>i.key===this.editingItem.key);u!==-1&&(this.kvData[u].value=e,this.kvData[u].loaded=!0),this.$message.success("数据保存成功"),this.closeEditDialog()}else throw new Error(((s=o.error)==null?void 0:s.message)||"保存失败")}catch(e){this.$message.error("保存失败",e.message)}finally{this.savingData=!1}}},confirmDelete(s){this.itemToDelete=s,this.deleteDialog=!0},async deleteItem(){if(this.itemToDelete){this.deletingData=!0;try{this.currentProvider==="kv-local"?await(await ns("ClassworksDB",2)).transaction("kv","readwrite").objectStore("kv").delete(this.itemToDelete.key):await ie.saveData(this.itemToDelete.key,null);const s=this.kvData.findIndex(e=>e.key===this.itemToDelete.key);s!==-1&&this.kvData.splice(s,1),this.$message.success("数据删除成功"),this.deleteDialog=!1,this.itemToDelete=null}catch(s){this.$message.error("删除失败",s.message)}finally{this.deletingData=!1}}},formatJsonData(s){try{return JSON.stringify(s,null,2)}catch{return String(s)}},async copyToClipboard(s){try{const e=this.formatJsonData(s);await navigator.clipboard.writeText(e),this.$message.success("数据已复制到剪贴板")}catch(e){this.$message.error("复制失败",e.message)}},async getCloudUrl(s){this.selectedCloudItem=s,this.cloudUrlResult=null,this.cloudUrlError=null,this.cloudUrlDialog=!0,await this.fetchCloudUrl()},async fetchCloudUrl(){var s;if(this.selectedCloudItem){this.gettingCloudUrl=!0,this.cloudUrlError=null;try{const e=await ie.getKeyCloudUrl(this.selectedCloudItem.key,this.cloudUrlOptions);e.success?(this.cloudUrlResult=e,this.$message.success("云端地址获取成功")):(this.cloudUrlError=((s=e.error)==null?void 0:s.message)||"获取云端地址失败",this.$message.error("获取失败",this.cloudUrlError))}catch(e){this.cloudUrlError=e.message||"获取云端地址时发生错误",this.$message.error("获取失败",this.cloudUrlError)}finally{this.gettingCloudUrl=!1}}},async refreshCloudUrl(){await this.fetchCloudUrl()},async copyCloudUrl(){var s;if((s=this.cloudUrlResult)!=null&&s.url)try{await navigator.clipboard.writeText(this.cloudUrlResult.url),this.$message.success("云端地址已复制到剪贴板")}catch(e){this.$message.error("复制失败",e.message)}},openCloudUrl(){var s;if((s=this.cloudUrlResult)!=null&&s.url)try{window.open(this.cloudUrlResult.url,"_blank")}catch(e){this.$message.error("打开链接失败",e.message)}}}},Gl={class:"text-primary"},Wl={class:"mt-2"},Yl={key:0,class:"mb-2"},ql={key:1,class:"mb-2"};function Zl(s,e,o,u,i,l){const d=hn,f=W;return m(),h(f,{loading:i.loading,icon:"mdi-database-edit",title:"KV数据库管理"},{default:n(()=>[t(O,null,{default:n(()=>[t(D,null,{prepend:n(()=>[t(g,{color:l.connectionColor,icon:l.connectionIcon,class:"mr-3"},null,8,["color","icon"])]),append:n(()=>[t(p,{loading:i.loading,variant:"tonal",onClick:l.refreshConnection},{default:n(()=>[...e[20]||(e[20]=[a(" 刷新 ",-1)])]),_:1},8,["loading","onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[19]||(e[19]=[a("数据库状态",-1)])]),_:1}),t(te,null,{default:n(()=>[a(v(l.connectionStatus),1)]),_:1})]),_:1}),t(U,{class:"my-2"}),t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-format-list-bulleted"})]),append:n(()=>[t(_t,{variant:"tonal"},{default:n(()=>[t(p,{loading:i.loadingData,onClick:l.loadKvData},{default:n(()=>[...e[22]||(e[22]=[a(" 加载数据 ",-1)])]),_:1},8,["loading","onClick"]),t(p,{disabled:!l.isKvProvider,onClick:l.createNewItem},{default:n(()=>[t(g,{class:"mr-1",icon:"mdi-plus"}),e[23]||(e[23]=a(" 新建 ",-1))]),_:1},8,["disabled","onClick"]),t(p,{onClick:e[0]||(e[0]=r=>i.showMigrationDialog=!0)},{default:n(()=>[t(g,{class:"mr-1",icon:"mdi-cloud-upload"}),e[24]||(e[24]=a(" 从本地迁移 ",-1))]),_:1})]),_:1})]),default:n(()=>[t(z,null,{default:n(()=>[...e[21]||(e[21]=[a("数据条目",-1)])]),_:1}),t(te,null,{default:n(()=>[a("共 "+v(i.kvData.length)+" 条记录",1)]),_:1})]),_:1})]),_:1}),i.kvData.length>0?(m(),h(M,{key:0,class:"mt-4",variant:"outlined"},{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-table"}),e[25]||(e[25]=a(" KV数据列表 ",-1)),t(Z),t(N,{modelValue:i.searchQuery,"onUpdate:modelValue":e[1]||(e[1]=r=>i.searchQuery=r),clearable:"",density:"compact","hide-details":"",label:"搜索键名","prepend-inner-icon":"mdi-magnify",style:{"max-width":"300px"},variant:"outlined"},null,8,["modelValue"])]),_:1}),t(Zt,{headers:i.tableHeaders,items:l.filteredKvData,"items-per-page":10,loading:i.loadingData,class:"elevation-0","item-value":"key"},{"item.key":n(({item:r})=>[c("code",Gl,v(r.key),1)]),"item.actions":n(({item:r})=>[t(_t,{density:"compact",variant:"text"},{default:n(()=>[t(p,{icon:"mdi-eye",size:"small",title:"查看",onClick:w=>l.viewItem(r)},null,8,["onClick"]),t(p,{icon:"mdi-pencil",size:"small",title:"编辑",onClick:w=>l.editItem(r)},null,8,["onClick"]),t(p,{color:"primary",icon:"mdi-cloud-download",size:"small",title:"获取云端地址",onClick:w=>l.getCloudUrl(r)},null,8,["onClick"]),t(p,{color:"error",icon:"mdi-delete",size:"small",title:"删除",onClick:w=>l.confirmDelete(r)},null,8,["onClick"])]),_:2},1024)]),_:2},1032,["headers","items","loading"])]),_:1})):b("",!0),t(we,{modelValue:i.viewDialog,"onUpdate:modelValue":e[5]||(e[5]=r=>i.viewDialog=r),"max-width":"800px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-eye"}),e[26]||(e[26]=a(" 查看数据 ",-1)),t(Z),t(p,{icon:"mdi-close",variant:"text",onClick:e[2]||(e[2]=r=>i.viewDialog=!1)})]),_:1}),i.selectedItem?(m(),h(Ke,{key:0},{default:n(()=>[e[27]||(e[27]=a(" 键名: ",-1)),c("code",null,v(i.selectedItem.key),1)]),_:1})):b("",!0),t(j,null,{default:n(()=>[i.selectedItem?(m(),h(Pe,{key:0,"model-value":l.formatJsonData(i.selectedItem.value),class:"font-monospace",label:"数据内容",readonly:"",rows:"15",variant:"outlined"},null,8,["model-value"])):b("",!0)]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"tonal",onClick:e[3]||(e[3]=r=>{var w;return l.copyToClipboard((w=i.selectedItem)==null?void 0:w.value)})},{default:n(()=>[t(g,{class:"mr-1",icon:"mdi-content-copy"}),e[28]||(e[28]=a(" 复制数据 ",-1))]),_:1}),t(p,{variant:"text",onClick:e[4]||(e[4]=r=>i.viewDialog=!1)},{default:n(()=>[...e[29]||(e[29]=[a(" 关闭 ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:i.editDialog,"onUpdate:modelValue":e[7]||(e[7]=r=>i.editDialog=r),"max-width":"800px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-pencil"}),e[30]||(e[30]=a(" 编辑数据 ",-1)),t(Z),t(p,{icon:"mdi-close",variant:"text",onClick:l.closeEditDialog},null,8,["onClick"])]),_:1}),i.editingItem?(m(),h(Ke,{key:0},{default:n(()=>[e[31]||(e[31]=a(" 键名: ",-1)),c("code",null,v(i.editingItem.key),1)]),_:1})):b("",!0),t(j,null,{default:n(()=>[t(Pe,{modelValue:i.editingData,"onUpdate:modelValue":e[6]||(e[6]=r=>i.editingData=r),error:!l.isValidJson,"error-messages":l.isValidJson?[]:["请输入有效的JSON格式"],class:"font-monospace",label:"数据内容 (JSON格式)",rows:"15",variant:"outlined"},null,8,["modelValue","error","error-messages"])]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:l.closeEditDialog},{default:n(()=>[...e[32]||(e[32]=[a(" 取消 ",-1)])]),_:1},8,["onClick"]),t(p,{disabled:!l.isValidJson,loading:i.savingData,color:"primary",variant:"tonal",onClick:l.saveEditedData},{default:n(()=>[...e[33]||(e[33]=[a(" 保存 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:i.createDialog,"onUpdate:modelValue":e[10]||(e[10]=r=>i.createDialog=r),"max-width":"800px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-plus"}),e[34]||(e[34]=a(" 新建数据 ",-1)),t(Z),t(p,{icon:"mdi-close",variant:"text",onClick:l.closeCreateDialog},null,8,["onClick"])]),_:1}),t(j,null,{default:n(()=>[t(N,{modelValue:i.newKey,"onUpdate:modelValue":e[8]||(e[8]=r=>i.newKey=r),error:!l.isValidKey,"error-messages":l.isValidKey?[]:["键名不能为空且不能与现有键重复"],class:"mb-4",label:"键名",placeholder:"请输入键名my-config",variant:"outlined"},null,8,["modelValue","error","error-messages"]),t(Pe,{modelValue:i.newData,"onUpdate:modelValue":e[9]||(e[9]=r=>i.newData=r),error:!l.isValidNewJson,"error-messages":l.isValidNewJson?[]:["请输入有效的JSON格式"],class:"font-monospace",label:"数据内容 (JSON格式)",placeholder:'请输入JSON数据{"name": "value"}',rows:"15",variant:"outlined"},null,8,["modelValue","error","error-messages"])]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:l.closeCreateDialog},{default:n(()=>[...e[35]||(e[35]=[a(" 取消 ",-1)])]),_:1},8,["onClick"]),t(p,{disabled:!l.isValidKey||!l.isValidNewJson,loading:i.savingData,color:"primary",variant:"tonal",onClick:l.saveNewData},{default:n(()=>[...e[36]||(e[36]=[a(" 创建 ",-1)])]),_:1},8,["disabled","loading","onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:i.cloudUrlDialog,"onUpdate:modelValue":e[15]||(e[15]=r=>i.cloudUrlDialog=r),"max-width":"800px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-cloud-download"}),e[37]||(e[37]=a(" 获取云端访问地址 ",-1)),t(Z),t(p,{icon:"mdi-close",variant:"text",onClick:e[11]||(e[11]=r=>i.cloudUrlDialog=!1)})]),_:1}),i.selectedCloudItem?(m(),h(Ke,{key:0},{default:n(()=>[e[38]||(e[38]=a(" 键名: ",-1)),c("code",null,v(i.selectedCloudItem.key),1)]),_:1})):b("",!0),t(j,null,{default:n(()=>[i.cloudUrlError?(m(),h(Y,{key:0,class:"mb-4",type:"error",variant:"tonal"},{default:n(()=>[a(v(i.cloudUrlError),1)]),_:1})):b("",!0),i.cloudUrlResult&&i.cloudUrlResult.success?(m(),h(Y,{key:1,class:"mb-4",type:"success",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[39]||(e[39]=[a("云端地址获取成功",-1)])]),_:1}),c("div",Wl,[i.cloudUrlResult.migrated?(m(),y("div",Yl,[t(g,{class:"mr-1",color:"success",icon:"mdi-database-arrow-up"}),e[40]||(e[40]=a(" 数据已从本地迁移到云端 ",-1))])):b("",!0),i.cloudUrlResult.configured?(m(),y("div",ql,[t(g,{class:"mr-1",color:"info",icon:"mdi-cog"}),e[41]||(e[41]=a(" 云端配置已自动设置 ",-1))])):b("",!0)])]),_:1})):b("",!0),i.cloudUrlResult&&i.cloudUrlResult.url?(m(),h(N,{key:2,"model-value":i.cloudUrlResult.url,"append-inner-icon":"mdi-content-copy",class:"font-monospace",label:"云端访问地址",readonly:"",variant:"outlined","onClick:appendInner":l.copyCloudUrl},null,8,["model-value","onClick:appendInner"])):b("",!0),i.cloudUrlResult&&i.cloudUrlResult.url?(m(),h(yt,{key:3,class:"mt-4"},{default:n(()=>[t(kt,null,{default:n(()=>[t(qt,null,{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-cog"}),e[42]||(e[42]=a(" 高级选项 ",-1))]),_:1}),t(xt,null,{default:n(()=>[t(Se,{modelValue:i.cloudUrlOptions.migrateFromLocal,"onUpdate:modelValue":e[12]||(e[12]=r=>i.cloudUrlOptions.migrateFromLocal=r),density:"compact",label:"从本地迁移数据到云端"},null,8,["modelValue"]),t(Se,{modelValue:i.cloudUrlOptions.autoConfigureCloud,"onUpdate:modelValue":e[13]||(e[13]=r=>i.cloudUrlOptions.autoConfigureCloud=r),density:"compact",label:"自动配置云端默认设置"},null,8,["modelValue"]),t(p,{loading:i.gettingCloudUrl,class:"mt-2",color:"primary",variant:"tonal",onClick:l.refreshCloudUrl},{default:n(()=>[t(g,{class:"mr-1",icon:"mdi-refresh"}),e[43]||(e[43]=a(" 重新获取 ",-1))]),_:1},8,["loading","onClick"])]),_:1})]),_:1})]),_:1})):b("",!0)]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:e[14]||(e[14]=r=>i.cloudUrlDialog=!1)},{default:n(()=>[...e[44]||(e[44]=[a(" 关闭 ",-1)])]),_:1}),i.cloudUrlResult&&i.cloudUrlResult.url?(m(),h(p,{key:0,color:"primary",variant:"tonal",onClick:l.openCloudUrl},{default:n(()=>[t(g,{class:"mr-1",icon:"mdi-open-in-new"}),e[45]||(e[45]=a(" 在新窗口打开 ",-1))]),_:1},8,["onClick"])):b("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:i.deleteDialog,"onUpdate:modelValue":e[17]||(e[17]=r=>i.deleteDialog=r),"max-width":"400px"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,{class:"d-flex align-center text-error"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-alert"}),e[46]||(e[46]=a(" 确认删除 ",-1))]),_:1}),t(j,null,{default:n(()=>{var r;return[e[48]||(e[48]=a(" 确定要删除键名为 ",-1)),c("code",null,v((r=i.itemToDelete)==null?void 0:r.key),1),e[49]||(e[49]=a(" 的数据吗? ",-1)),e[50]||(e[50]=c("br",null,null,-1)),e[51]||(e[51]=c("br",null,null,-1)),t(Y,{class:"mt-2",type:"warning",variant:"tonal"},{default:n(()=>[...e[47]||(e[47]=[a(" 此操作不可撤销,请谨慎操作! ",-1)])]),_:1})]}),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:e[16]||(e[16]=r=>i.deleteDialog=!1)},{default:n(()=>[...e[52]||(e[52]=[a(" 取消 ",-1)])]),_:1}),t(p,{loading:i.deletingData,color:"error",variant:"tonal",onClick:l.deleteItem},{default:n(()=>[...e[53]||(e[53]=[a(" 删除 ",-1)])]),_:1},8,["loading","onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(d,{modelValue:i.showMigrationDialog,"onUpdate:modelValue":e[18]||(e[18]=r=>i.showMigrationDialog=r)},null,8,["modelValue"])]),_:1},8,["loading"])}const gn=Q(Ql,[["render",Zl],["__scopeId","data-v-67879974"]]),Xl={name:"DataProviderSettingsCard",components:{SettingsCard:W},data(){return{loading:!1,serverchecktime:{},confirmDialog:!1,confirmTitle:"",confirmMessage:"",confirmAction:null,machineId:null,migrateLoading:!1}},computed:{currentProvider(){return k("server.provider")},isKvProvider(){return this.currentProvider==="kv-local"||this.currentProvider==="kv-server"||this.currentProvider==="classworkscloud"}},async created(){this.machineId=k("device.uuid")},methods:{async checkServerConnection(){this.loading=!0,this.serverchecktime=new Date;const s=[];try{const e=k("server.siteKey"),o={Accept:"application/json"};if(e&&(o["x-site-key"]=e),rs()){const u=await us(async f=>{const r=await Xe.get(`${f}/check`,{method:"GET",headers:o});if(r.data.status!=="success")throw new Error("服务器响应异常");return r},{onServerTried:({url:f,status:r,tried:w})=>{s.length=0,s.push(...w)}}),i=new Date-this.serverchecktime,l=s.find(f=>f.status==="success");let d=`服务器连接正常 延迟${i}ms`;if(s.length>1){const f=s.map((r,w)=>`${w+1}. ${r.url} (${r.status==="success"?"成功":"失败"})`).join(`
`);d+=`
依次尝试的服务器:
${f}`}else l&&(d+=`
服务器: ${l.url}`);this.$message.success("连接成功",d)}else{const u=k("server.domain");if((await Xe.get(`${u}/check`,{method:"GET",headers:o})).data.status==="success")this.$message.success("连接成功","服务器连接正常 延迟"+(new Date-this.serverchecktime)+"ms");else throw new Error("服务器响应异常")}}catch(e){let o=e.message||"无法连接到服务器";if(s.length>0){const u=s.map((i,l)=>`${l+1}. ${i.url} (失败${i.error?`: ${i.error}`:""})`).join(`
`);o+=`
依次尝试的服务器:
${u}
所有服务器均连接失败`}this.$message.error("连接失败",o)}finally{this.loading=!1}},confirmClearLocalStorage(){this.confirmTitle="确认清除",this.confirmMessage="此操作将清除所有本地存储的数据,确定要继续吗?",this.confirmAction=this.clearLocalStorage,this.confirmDialog=!0},clearLocalStorage(){try{localStorage.clear(),this.$message.success("清除成功","本地存储数据已清除"),this.confirmDialog=!1}catch(s){this.$message.error("清除失败",s.message)}},confirmClearIndexedDB(){this.confirmTitle="确认清除",this.confirmMessage="此操作将清除所有IndexedDB中的数据确定要继续吗",this.confirmAction=this.clearIndexedDB,this.confirmDialog=!0},async clearIndexedDB(){try{await window.indexedDB.deleteDatabase("ClassworksDB"),this.$message.success("清除成功","数据库缓存已清除"),this.confirmDialog=!1,this.isKvProvider&&setTimeout(()=>{window.location.reload()},1500)}catch(s){this.$message.error("清除失败",s.message)}},async exportData(){try{const s="ClassworksDB",e={indexedDB:{}},o=await new Promise((r,w)=>{const x=window.indexedDB.open(s);x.onerror=()=>w(x.error),x.onsuccess=()=>r(x.result)}),u=Array.from(o.objectStoreNames);for(const r of u){const x=o.transaction(r,"readonly").objectStore(r),I=await new Promise((F,$)=>{const J=x.getAll();J.onerror=()=>$(J.error),J.onsuccess=()=>F(J.result)});e.indexedDB[r]=I}const i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),l=URL.createObjectURL(i),d=document.createElement("a"),f=new Date().toISOString().split("T")[0];d.href=l,d.download=`homework-indexeddb-${f}.json`,d.click(),URL.revokeObjectURL(l),this.$message.success("导出成功","IndexedDB数据已导出")}catch(s){console.error("导出失败:",s),this.$message.error("导出失败",s.message||"无法导出数据库数据")}},async migrateData(){this.migrateLoading=!0,this.$router.push("/datamigration"),this.migrateLoading=!1},handleConfirm(){this.confirmAction&&this.confirmAction()}}};function $l(s,e,o,u,i,l){const d=W;return m(),h(d,{icon:"mdi-database-cog",title:"数据源设置"},{default:n(()=>[t(O,null,{default:n(()=>[l.currentProvider==="kv-server"||l.currentProvider==="classworkscloud"?(m(),h(D,{key:0},{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-lan-connect"})]),append:n(()=>[t(p,{loading:i.loading,variant:"tonal",onClick:l.checkServerConnection},{default:n(()=>[...e[3]||(e[3]=[a(" 测试连接 ",-1)])]),_:1},8,["loading","onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[2]||(e[2]=[a("检查服务器连接",-1)])]),_:1})]),_:1})):b("",!0),l.currentProvider==="kv-local"?(m(),y(H,{key:1},[t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-database"})]),append:n(()=>[t(p,{color:"error",variant:"tonal",onClick:l.confirmClearIndexedDB},{default:n(()=>[...e[6]||(e[6]=[a(" 清除 ",-1)])]),_:1},8,["onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[4]||(e[4]=[a("清除数据库缓存",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[5]||(e[5]=[a("这将清除所有本地数据库中的数据 ",-1)])]),_:1})]),_:1}),t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-database-export"})]),append:n(()=>[t(p,{variant:"tonal",onClick:l.exportData},{default:n(()=>[...e[8]||(e[8]=[a(" 导出",-1)])]),_:1},8,["onClick"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[7]||(e[7]=[a("导出数据库",-1)])]),_:1})]),_:1})],64)):b("",!0),t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-lan-connect"})]),append:n(()=>[t(p,{to:"/cachemanagement",variant:"tonal"},{default:n(()=>[...e[10]||(e[10]=[a(" 查看",-1)])]),_:1})]),default:n(()=>[t(z,null,{default:n(()=>[...e[9]||(e[9]=[a("查看本地缓存",-1)])]),_:1})]),_:1})]),_:1}),t(we,{modelValue:i.confirmDialog,"onUpdate:modelValue":e[1]||(e[1]=f=>i.confirmDialog=f),"max-width":"400"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,null,{default:n(()=>[a(v(i.confirmTitle),1)]),_:1}),t(j,null,{default:n(()=>[a(v(i.confirmMessage),1)]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{color:"grey",variant:"text",onClick:e[0]||(e[0]=f=>i.confirmDialog=!1)},{default:n(()=>[...e[11]||(e[11]=[a("取消 ",-1)])]),_:1}),t(p,{color:"error",variant:"tonal",onClick:l.handleConfirm},{default:n(()=>[...e[12]||(e[12]=[a("确认 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})}const wn=Q(Xl,[["render",$l]]),eo={name:"CloudNamespaceInfoCard",props:{visible:{type:Boolean,default:!0}},data(){return{namespaceInfo:{},loading:!1,hasNamespaceInfo:!1,showReinitDialog:!1,defaultAuthServer:k("server.authDomain")}},watch:{visible(s){s===!0&&this.fetchNamespaceInfo()}},mounted(){this.visible&&this.fetchNamespaceInfo()},methods:{formatDate(s){if(!s)return"未知";try{return new Date(s).toLocaleString("zh-CN")}catch{return s}},async fetchNamespaceInfo(){this.loading=!0;try{const s=await ss.loadNamespaceInfo();this.namespaceInfo=s,this.hasNamespaceInfo=!0,this.loading=!1}catch(s){console.error("获取命名空间信息失败:",s),this.hasNamespaceInfo=!1,this.namespaceInfo={}}finally{this.loading=!1}},async reloadInfo(){await this.fetchNamespaceInfo()},getBindAccountUrl(){var e,o;const s=(o=(e=this.namespaceInfo)==null?void 0:e.device)==null?void 0:o.uuid;return s?`${this.defaultAuthServer}?uuid=${encodeURIComponent(s)}&tolinktoaccount=true`:this.defaultAuthServer},confirmReinitialize(){re("server.kvToken",""),re("device.uuid",""),this.showReinitDialog=!1,this.$router.push("/")}}},to={key:0,class:"mb-4"},no={key:1,class:"d-flex align-center mb-4"},so={class:"d-flex flex-column gap-1"},io={class:"d-flex align-center"},lo={class:"d-flex align-center"},oo={key:0,class:"d-flex align-center"},ao={class:"text-truncate"},ro={class:"d-flex align-center"},uo={key:1,class:"d-flex align-center"};function co(s,e,o,u,i,l){return m(),h(M,{disabled:!i.hasNamespaceInfo,loading:i.loading,class:"my-4"},{loader:n(()=>[i.loading?(m(),h($e,{key:0,color:"primary",indeterminate:""})):b("",!0)]),default:n(()=>[t(K,null,{default:n(()=>[t(g,{class:"me-2"},{default:n(()=>[...e[3]||(e[3]=[a(" mdi-cloud-check ",-1)])]),_:1}),e[4]||(e[4]=a(" 设备信息 ",-1))]),_:1}),i.hasNamespaceInfo?(m(),h(j,{key:0},{default:n(()=>[i.namespaceInfo.hasAccount===!1?(m(),y("div",to,[t(Y,{border:"",type:"warning",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[5]||(e[5]=[a("设备未绑定账号",-1)])]),_:1}),e[7]||(e[7]=c("div",null,"当前设备尚未绑定账号,部分功能可能受限。请前往绑定账号以获得完整体验。",-1)),t(p,{href:l.getBindAccountUrl(),"append-icon":"mdi-open-in-new",class:"mt-3",target:"_blank",variant:"outlined"},{default:n(()=>[...e[6]||(e[6]=[a(" 前往绑定账号 ",-1)])]),_:1},8,["href"])]),_:1})])):b("",!0),i.namespaceInfo.hasAccount&&i.namespaceInfo.account?(m(),y("div",no,[t(M,{"prepend-avatar":i.namespaceInfo.account.avatarUrl,subtitle:"此设备由贵校管理 管理员账号 ID: "+i.namespaceInfo.account.id,title:i.namespaceInfo.account.name||"未命名用户",border:"",class:"w-100",hover:"",variant:"tonal"},{default:n(()=>[t(j,null,{default:n(()=>[...e[8]||(e[8]=[a(" 此设备由贵校或贵单位管理,该管理员系此空间所有者,如有疑问请咨询他,对于恶意绑定、滥用行为请反馈。 ",-1)])]),_:1})]),_:1},8,["prepend-avatar","subtitle","title"])])):b("",!0),i.namespaceInfo.device?(m(),h(M,{key:2,border:"",class:"mb-4",hover:"",variant:"tonal"},{default:n(()=>[t(K,{class:"pb-1"},{default:n(()=>[...e[9]||(e[9]=[a(" 设备信息 ",-1)])]),_:1}),t(j,null,{default:n(()=>[c("div",so,[c("div",io,[t(g,{class:"me-2",size:"small"},{default:n(()=>[...e[10]||(e[10]=[a(" mdi-tag ",-1)])]),_:1}),e[11]||(e[11]=c("span",{class:"font-weight-medium me-2"},"设备名称:",-1)),c("span",null,v(i.namespaceInfo.device.name||"未命名设备"),1)]),c("div",lo,[t(g,{class:"me-2",size:"small"},{default:n(()=>[...e[12]||(e[12]=[a(" mdi-identifier ",-1)])]),_:1}),e[13]||(e[13]=c("span",{class:"font-weight-medium me-2"},"设备 ID:",-1)),c("span",null,v(i.namespaceInfo.device.id),1)]),i.namespaceInfo.hasAccount===!1&&i.namespaceInfo.device.uuid?(m(),y("div",oo,[t(g,{class:"me-2",size:"small"},{default:n(()=>[...e[14]||(e[14]=[a(" mdi-uuid ",-1)])]),_:1}),e[15]||(e[15]=c("span",{class:"font-weight-medium me-2"},"UUID:",-1)),c("span",ao,v(i.namespaceInfo.device.uuid),1)])):b("",!0),c("div",ro,[t(g,{class:"me-2",size:"small"},{default:n(()=>[...e[16]||(e[16]=[a(" mdi-calendar ",-1)])]),_:1}),e[17]||(e[17]=c("span",{class:"font-weight-medium me-2"},"创建时间:",-1)),c("span",null,v(l.formatDate(i.namespaceInfo.device.createdAt)),1)]),i.namespaceInfo.device.updatedAt?(m(),y("div",uo,[t(g,{class:"me-2",size:"small"},{default:n(()=>[...e[18]||(e[18]=[a(" mdi-calendar-clock ",-1)])]),_:1}),e[19]||(e[19]=c("span",{class:"font-weight-medium me-2"},"更新时间:",-1)),c("span",null,v(l.formatDate(i.namespaceInfo.device.updatedAt)),1)])):b("",!0)])]),_:1})]),_:1})):b("",!0),t(M,{border:"",hover:"",subtitle:"文档形键值数据库",title:"Classworks KV"},{default:n(()=>[t(j,null,{default:n(()=>[...e[20]||(e[20]=[a(" Classworks KV 是厚浪云推出的文档形键值数据库,其是一个开放的云应用平台,为各种应用提供存储服务。此设备正在使用其服务,如果您希望管理设备信息,请前往 Classworks KV 的网站,如果您在服务推出前就在使用 Classworks您的数据已被自动迁移。 ",-1),c("br",null,null,-1),c("br",null,null,-1),a(" Classworks KV 的全域管理员是 ",-1),c("a",{href:"https://wuyuan.dev",target:"_blank"}," 孙悟元 ",-1)])]),_:1}),t(ue,null,{default:n(()=>[t(p,{href:i.defaultAuthServer,"append-icon":"mdi-open-in-new",class:"text-none",target:"_blank"},{default:n(()=>[...e[21]||(e[21]=[a(" 前往 Classworks KV ",-1)])]),_:1},8,["href"])]),_:1})]),_:1})]),_:1})):(m(),h(j,{key:1},{default:n(()=>[t(Y,{type:"info",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[22]||(e[22]=[a("未获取到设备信息",-1)])]),_:1}),e[23]||(e[23]=c("p",null,"您尚未完成云端存储授权或连接失败,请点击下方按钮进行初始化。",-1))]),_:1})]),_:1})),t(ue,null,{default:n(()=>[t(Z),t(p,{loading:i.loading,color:"primary",variant:"outlined",onClick:l.reloadInfo},{default:n(()=>[...e[24]||(e[24]=[a(" 刷新设备信息 ",-1)])]),_:1},8,["loading","onClick"]),t(p,{color:"error",variant:"outlined",onClick:e[0]||(e[0]=d=>i.showReinitDialog=!0)},{default:n(()=>[...e[25]||(e[25]=[a(" 重新初始化云端存储 ",-1)])]),_:1})]),_:1}),t(we,{modelValue:i.showReinitDialog,"onUpdate:modelValue":e[2]||(e[2]=d=>i.showReinitDialog=d),"max-width":"500"},{default:n(()=>[t(M,null,{default:n(()=>[t(K,null,{default:n(()=>[...e[26]||(e[26]=[a("确认重新初始化",-1)])]),_:1}),t(j,null,{default:n(()=>[t(Y,{class:"mb-3",type:"warning",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[27]||(e[27]=[a("警告",-1)])]),_:1}),e[28]||(e[28]=a(" 此操作将清除当前的云端存储配置(包括 Token您需要重新进行授权。 ",-1))]),_:1}),e[29]||(e[29]=c("p",null,"您确定要重新初始化云端存储吗?",-1))]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:e[1]||(e[1]=d=>i.showReinitDialog=!1)},{default:n(()=>[...e[30]||(e[30]=[a(" 取消 ",-1)])]),_:1}),t(p,{color:"error",onClick:l.confirmReinitialize},{default:n(()=>[...e[31]||(e[31]=[a(" 确认 ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["disabled","loading"])}const vn=Q(eo,[["render",co]]),mo={name:"ServerSettingsCard",components:{SettingsCard:W,CloudNamespaceInfoCard:vn},props:{loading:Boolean},data(){return{unwatch:null,serverSettings:{provider:k("server.provider"),domain:k("server.domain"),classNumber:k("server.classNumber"),kvToken:k("server.kvToken")},settingsChangeTimeout:null}},computed:{currentProvider(){return this.serverSettings.provider},isKvProvider(){return this.currentProvider==="kv-local"||this.currentProvider==="kv-server"},isClassworksCloud(){return this.currentProvider==="classworkscloud"},useServer(){return this.currentProvider==="server"||this.currentProvider==="kv-server"||this.currentProvider==="classworkscloud"}},watch:{serverSettings:{handler(){this.settingsChangeTimeout&&clearTimeout(this.settingsChangeTimeout),this.settingsChangeTimeout=setTimeout(()=>{this.saveAllSettings()},100)},deep:!0}},mounted(){this.loadAllSettings(),this.unwatch=pt(()=>{this.loadAllSettings(),this.$forceUpdate&&this.$forceUpdate()})},beforeUnmount(){this.unwatch&&this.unwatch()},methods:{loadAllSettings(){this.serverSettings={provider:k("server.provider"),domain:k("server.domain"),classNumber:k("server.classNumber"),kvToken:k("server.kvToken")}},saveAllSettings(){Object.entries(this.serverSettings).forEach(([s,e])=>{const o=`server.${s}`,u=k(o);e!==u&&(re(o,e)?console.log(`设置已更新: ${o} = ${e}`):(console.error(`设置失败: ${o}`),this.serverSettings[s]=u))})}}},fo={key:0},po={key:2},ho={key:3},go={key:4};function wo(s,e,o,u,i,l){const d=vn,f=W;return m(),h(f,{loading:o.loading,icon:"mdi-database",title:"数据源设置"},{default:n(()=>[t(Yt,null,{default:n(()=>[t(Ze,{modelValue:i.serverSettings.provider,"onUpdate:modelValue":e[0]||(e[0]=r=>i.serverSettings.provider=r),items:[{title:"Classworks云端存储",value:"classworkscloud"},{title:"KV本地存储",value:"kv-local"},{title:"KV远程服务器",value:"kv-server"}],class:"mb-3",density:"comfortable","item-title":"title","item-value":"value",label:"数据提供者","prepend-icon":"mdi-database",variant:"outlined"},null,8,["modelValue"]),l.isKvProvider?(m(),h(Y,{key:0,class:"my-2",type:"info",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[5]||(e[5]=[a("KV 存储系统",-1)])]),_:1}),e[7]||(e[7]=c("p",null,"KV存储系统使用本机唯一标识符(UUID)来区分不同设备的数据。",-1)),l.currentProvider==="kv-server"?(m(),y("p",fo,[...e[6]||(e[6]=[a(" 服务器端点格式: ",-1),c("code",null,"http(s)://服务器域名/",-1),c("br",null,null,-1),a(" 在服务器域名处仅填写基础URL不需要任何路径。 ",-1)])])):b("",!0)]),_:1})):b("",!0),l.isClassworksCloud?(m(),h(Y,{key:1,class:"my-2",color:"success",type:"info",variant:"tonal"},{default:n(()=>[t(Ne,null,{default:n(()=>[...e[8]||(e[8]=[a("Classworks云端存储",-1)])]),_:1}),e[9]||(e[9]=c("p",null,"Classworks云端存储是官方提供的存储解决方案自动配置了最优的访问设置。",-1)),e[10]||(e[10]=c("p",null,"使用此选项时,服务器域名和网站令牌将自动配置,无需手动设置。",-1))]),_:1})):b("",!0),t(U,{class:"my-2"}),l.isClassworksCloud?(m(),y("div",po,[t(N,{modelValue:i.serverSettings.kvToken,"onUpdate:modelValue":e[1]||(e[1]=r=>i.serverSettings.kvToken=r),class:"mb-2",density:"comfortable",hint:"令牌用于云端存储授权",label:"KV 授权令牌","persistent-hint":"","prepend-icon":"mdi-shield-key",variant:"outlined"},null,8,["modelValue"]),t(d,{visible:l.isClassworksCloud,class:"mt-4"},null,8,["visible"])])):l.currentProvider==="kv-server"?(m(),y("div",ho,[t(N,{modelValue:i.serverSettings.domain,"onUpdate:modelValue":e[2]||(e[2]=r=>i.serverSettings.domain=r),class:"mb-2",density:"comfortable",hint:"例如: https://example.com (不需要路径)",label:"服务器域名","persistent-hint":"","prepend-icon":"mdi-web",variant:"outlined"},null,8,["modelValue"]),t(N,{modelValue:i.serverSettings.kvToken,"onUpdate:modelValue":e[3]||(e[3]=r=>i.serverSettings.kvToken=r),class:"mb-2",density:"comfortable",hint:"令牌用于服务器验证",label:"KV 授权令牌","persistent-hint":"","prepend-icon":"mdi-shield-key",variant:"outlined"},null,8,["modelValue"])])):l.currentProvider==="kv-local"?(m(),y("div",go,[t(N,{modelValue:i.serverSettings.classNumber,"onUpdate:modelValue":e[4]||(e[4]=r=>i.serverSettings.classNumber=r),class:"mb-2",density:"comfortable",hint:"例如: 高三八班",label:"班级编号","persistent-hint":"","prepend-icon":"mdi-account-group",variant:"outlined"},null,8,["modelValue"])])):b("",!0)]),_:1})]),_:1},8,["loading"])}const bn=Q(mo,[["render",wo]]),vo="classworks",bo="module",yo="0.0.0",ko={dev:"vite --host",build:"vite build",preview:"vite preview",lint:"eslint . --fix",prebuild:"node scripts/generate-sound-list.js"},xo={"@fingerprintjs/fingerprintjs":"^5.0.1","@mdi/font":"7.4.47","@microsoft/clarity":"^1.0.2","@sentry/vue":"^10.36.0","@vueuse/core":"^14.1.0","@wydev/noise-core":"^0.1.0",axios:"^1.13.2",idb:"^8.0.3","js-base64":"^3.7.8","lucide-vue-next":"^0.555.0","pinyin-pro":"^3.27.0","ratelimit-header-parser":"^0.1.0","roboto-fontface":"*","socket.io-client":"^4.8.1","typewriter-effect":"^2.22.0",uuid:"^13.0.0",vue:"^3.5.25","vue-sonner":"^2.0.9",vuetify:"^3.11.0"},So={"@eslint/js":"^9.39.1","@vite-pwa/assets-generator":"^1.0.2","@vitejs/plugin-vue":"^6.0.2",eslint:"^9.39.1","eslint-plugin-import":"^2.32.0","eslint-plugin-n":"^17.23.1","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^7.2.1","eslint-plugin-vue":"^10.6.2",pinia:"^3.0.4",sass:"1.94.2","sass-embedded":"^1.93.3","unplugin-auto-import":"^20.3.0","unplugin-fonts":"^1.4.0","unplugin-vue-components":"^30.0.0","unplugin-vue-router":"^0.18.0",vite:"^5.4.11","vite-plugin-pwa":"^1.2.0","vite-plugin-vue-devtools":"^7.6.8","vite-plugin-vue-layouts":"^0.11.0","vite-plugin-vuetify":"^2.1.2","vue-router":"^4.6.3"},Le={name:vo,private:!0,type:bo,version:yo,scripts:ko,dependencies:xo,devDependencies:So},Co="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAAXNSR0IArs4c6QAAAARzQklUCAgICHwIZIgAAAa9SURBVHic7dY9jlxVFIXRY8SsCEDyMCAjgRFBYokARoGQQII5EDIJYhNgyb9td9euqvfu3WuN4CTf1nn2958/vRyg0mdHHwAcxwBAMQMAxQwAFDMAUMwAQDEDAMUMABQzAFDMAEAxAwDFDAAUMwBQzABAMQMAxQwAFDMAUMwAQDEDAMUMABQzAFDMAEAxAwDFDAAUMwBQzABAMQMAxQwAFDMAUMwAQDEDAMUMABQzAFDMAEAxAwDFDAAUMwBQzABAMQMAxQwAFDMAUMwAQDEDAMUMABQzAFDMAEAxAwDFPj/6AI7z2+9/zW9//HX0Gct6/uUX8/yrL44+I+IDKCX+zA7xzxiASuLP7BL/jAGoI/7MTvHPGIAq4s/sFv+MAagh/syO8c8YgAriz+wa/4wB2J74MzvHP2MAtib+zO7xzxiAbYk/0xD/jAHYkvgzLfHPGIDtiD/TFP+MAdiK+DNt8c8YgG2IP9MY/4wB2IL4M63xzxiA5Yk/0xz/jAFYmvgz7fHPGIBliT8j/v8ZgAWJPyP+1wzAYsSfEf/bDMBCxJ8R//sMwCLEnxH/hxmABYg/I/6HGYCTE39G/B9nAE5M/Bnxf5oBOCnxZ8T/OAbghMSfEf/jGYCTEX9G/E9jAE5E/BnxP50BOAnxZ8R/GQNwAuLPiP9yBuBg4s+IP2MADiT+jPhzBuAg4s+I/zoMwAHEnxH/9RiAOxN/RvzXZQDuSPwZ8V+fAbgT8WfEfxsG4A7EnxH/7RiAGxN/Rvy3ZQBuSPwZ8d+eAbgR8WfEfx8G4AbEnxH//RiAKxN/Rvz3ZQCuSPwZ8d+fAbgS8WfEfwwDcAXiz4j/OAYgJP6M+I9lAALiz4j/eAbgQuLPiP8cDMAFxJ8R/3kYgCcSf0b852IAnkD8GfGfjwF4JPFnxH9OBuARxJ8R/3kZgE8Qf0b852YAPkL8GfGfnwF4gPgz4l+DAfgA8WfEvw4D8A7xZ8S/FgPwBvFnxL8eA/CK+DPiX5MBGPGnxL+u+gEQf0b8a6seAPFnxL++2gEQf0b8e6gcAPFnxL+PugEQf0b8e6kaAPFnxL+fmgEQf0b8e6oYAPFnxL+v7QdA/Bnx723rARB/Rvz723YAxJ8Rf4ctB0D8GfH32G4AxJ8Rf5etBkD8GfH32WYAxJ8Rf6ctBkD8GfH3Wn4AxJ8Rf7dn//7z68ujj+AYP774ZX548fPRZyzr+2+/me++/froMyLLfwBcRvyZHeKfMQCVxJ/ZJf4ZA1BH/Jmd4p8xAFXEn9kt/hkDUEP8mR3jnzEAFcSf2TX+GQOwPfFndo5/xgBsTfyZ3eOfMQDbEn+mIf4ZA7Al8Wda4p8xANsRf6Yp/hkDsBXxZ9rinzEA2xB/pjH+GQOwBfFnWuOfMQDLE3+mOf4ZA7A08Wfa458xAMsSf0b8/zMACxJ/RvyvGYDFiD8j/rcZgIWIPyP+9xmARYg/I/4PMwALEH9G/A8zACcn/oz4P84AnJj4M+L/NANwUuLPiP9xDMAJiT8j/sczACcj/oz4n8YAnIj4M+J/OgNwEuLPiP8yBuAExJ8R/+UMwMHEnxF/xgAcSPwZ8ecMwEHEnxH/dRiAA4g/I/7rMQB3Jv6M+K/LANyR+DPivz4DcCfiz4j/NgzAHYg/I/7bMQA3Jv6M+G/LANyQ+DPivz0DcCPiz4j/PgzADYg/I/77MQBXJv6M+O/LAFyR+DPivz8DcCXiz4j/GAbgCsSfEf9xDEBI/BnxH8sABMSfEf/xDMCFxJ8R/zkYgAuIPyP+8zAATyT+jPjPxQA8gfgz4j8fA/BI4s+I/5wMwCOIPyP+8zIAnyD+jPjPzQB8hPgz4j8/A/AA8WfEvwYD8AHiz4h/HQbgHeLPiH8tBuAN4s+Ifz0G4BXxZ8S/JgMw4k+Jf131AyD+jPjXVj0A4s+If321AyD+jPj3UDkA4s+Ifx91AyD+jPj3UjUA4s+Ifz81AyD+jPj3VDEA4s+If1/bD4D4M+Lf29YDIP6M+Pe37QCIPyP+DlsOgPgz4u+x3QCIPyP+LlsNgPgz4u+zzQCIPyP+TlsMgPgz4u+1/ACIPyP+bs/+/efXl0cfARxj+Q8AuJwBgGIGAIoZAChmAKCYAYBiBgCKGQAoZgCgmAGAYgYAihkAKGYAoJgBgGIGAIoZAChmAKCYAYBiBgCKGQAoZgCgmAGAYgYAihkAKGYAoJgBgGIGAIoZAChmAKCYAYBiBgCKGQAoZgCgmAGAYgYAihkAKGYAoJgBgGIGAIoZAChmAKCYAYBiBgCKGQAoZgCgmAGAYgYAiv0Hs2PMhrt8KlMAAAAASUVORK5CYII=",Vo={name:"AboutCard",setup(){const s=se([]),e=se(!1),o=se(!1),u=se(""),i=se(!1),l=se(!1),d="964979747",f="https://qm.qq.com/q/T6qImKJjGi",r=Kn(),w=()=>{try{const _={...Le.dependencies||{},...Le.devDependencies||{}},E=Object.entries(_).map(([q,P])=>({name:q,version:P.replace(/[\^~]/g,""),description:x(q)}));s.value=E}catch(_){console.error("加载依赖信息失败:",_),s.value=[]}},x=_=>({vue:"渐进式 JavaScript 框架",vuetify:"材料设计组件框架",axios:"Promise 基础的 HTTP 客户端",pinia:"Vue 状态管理库","vue-router":"Vue.js 官方路由管理器","@vitejs/plugin-vue":"Vite 的 Vue 插件"})[_]||"",I=()=>{r.push("/debug")},F=async()=>{i.value=!0;try{const _=await ds();u.value=_||""}catch(_){console.error("获取访客ID失败",_)}finally{i.value=!1}},$=()=>F(),J=async()=>{o.value=!0,u.value||await F()},he=async()=>{try{await navigator.clipboard.writeText(ce.value),l.value=!0,setTimeout(()=>l.value=!1,1800)}catch(_){console.error("复制失败",_)}},ae=L(()=>{var A,X;const _=navigator||{},E=typeof Intl<"u"&&Intl.DateTimeFormat?Intl.DateTimeFormat().resolvedOptions():{},q=E&&E.timeZone?E.timeZone:"",P=((X=(A=r.currentRoute)==null?void 0:A.value)==null?void 0:X.fullPath)||location.pathname;return[`App 版本: v${Le==null?void 0:Le.version}`,`URL: ${location.href}`,`路由: ${P}`,`UserAgent: ${_.userAgent||""}`,`语言: ${_.language||""}`,`时区: ${q}`,`平台: ${_.platform||""}`,`在线: ${String(_.onLine)}`,`屏幕: ${(screen==null?void 0:screen.width)||"-"}x${(screen==null?void 0:screen.height)||"-"}`,`视口: ${window.innerWidth||"-"}x${window.innerHeight||"-"}`].join(`
`)}),ce=L(()=>`调试ID: ${u.value||"获取失败"}
浏览器/环境信息:
${ae.value}`),le=L(()=>["问题描述:","1. 期望行为:","2. 实际行为:","3. 复现步骤:","",ce.value].join(`
`)),oe=L(()=>{const _="https://github.com/ZeroCatDev/Classworks/issues/new",E=encodeURIComponent("问题报告"),q=encodeURIComponent(le.value);return`${_}?title=${E}&body=${q}`}),C=L(()=>{const _=encodeURIComponent("Classworks 问题报告"),E=encodeURIComponent(le.value);return`mailto:sun@wuyuan.dev?subject=${_}&body=${E}`}),V=()=>{typeof window.openSentryFeedback=="function"?window.openSentryFeedback():console.warn("Sentry Feedback 功能不可用")},T=()=>{window.open("https://afdian.com/a/wydev","_blank")};return Fn(()=>{w()}),{Dependencies:s,showDeps:e,showReportDialog:o,debugIdInput:u,visitorLoading:i,copyOk:l,qqGroupNumber:d,qqGroupLink:f,goToDebug:I,reloadVisitorId:$,openReportDialog:J,copyEnvInfo:he,openFeedback:V,openDonationLink:T,envBoxText:ce,envInfo:ae,reportBody:le,githubIssueUrl:oe,mailtoLink:C}}},_o={class:"mt-4"},Do={class:"d-flex flex-column align-start"},Ao={class:"d-flex gap-2 flex-wrap mb-6"},Io={class:"text-body-2",style:{"white-space":"pre-wrap",margin:"0"}},To={class:"d-flex gap-2 flex-wrap mb-4"},Uo={class:"d-flex gap-2 mb-4"},jo={class:"text-caption text-medium-emphasis"};function Bo(s,e,o,u,i,l){return m(),h(M,{border:"",hover:"",rounded:"xl"},{default:n(()=>[t(ze,null,{prepend:n(()=>[t(g,{class:"mr-2",icon:"mdi-information",size:"large"})]),default:n(()=>[t(K,{class:"text-h6"},{default:n(()=>[...e[6]||(e[6]=[a("关于",-1)])]),_:1})]),_:1}),t(j,null,{default:n(()=>[t(de,null,{default:n(()=>[t(R,{class:"mx-auto",cols:"12",md:"8"},{default:n(()=>[t(M,{border:"",class:"donation-card gradient-donation clickable mb-6",color:"pink-lighten-4",elevation:"8",hover:"",rounded:"xl",variant:"tonal",onClick:u.openDonationLink},{default:n(()=>[t(ze,null,{default:n(()=>[...e[7]||(e[7]=[c("div",{class:"card-content"},[c("div",null,[c("div",{class:"text-h6 font-weight-bold"},"请支持我们 Classworks")])],-1)])]),_:1}),t(j,null,{default:n(()=>[e[9]||(e[9]=c("p",{class:"text-body-2 mb-3"}," 我是Classworks的开发者孙悟元是一名高二的中国在校学生。Classworks 是一个完全开源免费的项目。如果可以,欢迎打赏。 ",-1)),c("div",_o,[t(p,{"append-icon":"mdi-heart","aria-label":"Support Classworks on Aifadian",class:"text-none",color:"pink",rounded:"xl",variant:"elevated",onClick:u.openDonationLink},{default:n(()=>[...e[8]||(e[8]=[a(" 爱发电 ",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["onClick"]),c("div",Do,[t(et,{class:"mb-4",size:"120"},{default:n(()=>[t(Kt,{alt:"Classworks",src:Co})]),_:1}),e[40]||(e[40]=c("h2",{class:"text-h5 mb-2"},"Classworks",-1)),e[41]||(e[41]=c("p",{class:"text-body-1 mb-4"},"适用于班级大屏的作业板小工具",-1)),c("div",Ao,[t(p,{color:"red","prepend-icon":"mdi-bug",variant:"tonal",onClick:u.openReportDialog},{default:n(()=>[...e[10]||(e[10]=[a(" 报告问题 ",-1)])]),_:1},8,["onClick"]),t(p,{color:"primary",href:"https://qm.qq.com/q/qNBX4ZZVeg","prepend-icon":"mdi-qqchat",target:"_blank",variant:"tonal"},{default:n(()=>[...e[11]||(e[11]=[a(" QQ 群 ",-1)])]),_:1}),t(p,{href:"https://github.com/ClassworksDev/Classworks","prepend-icon":"mdi-github",target:"_blank",variant:"text"},{default:n(()=>[...e[12]||(e[12]=[a(" 前端 ",-1)])]),_:1}),t(p,{href:"https://github.com/ClassworksDev/ClassworksServer","prepend-icon":"mdi-github",target:"_blank",variant:"text"},{default:n(()=>[...e[13]||(e[13]=[a(" 后端 ",-1)])]),_:1})]),t(U,{class:"mb-4 w-100"}),e[42]||(e[42]=c("h3",{class:"text-h6 mb-2"},"备注与致谢",-1)),t(O,{class:"mb-4 bg-transparent"},{default:n(()=>[t(D,{"append-icon":"mdi-link",href:"https://github.com/EnderWolf006/HomeworkBoard",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[...e[14]||(e[14]=[a(" 本项目受到 HomeworkBoard 的启发而开发 ",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[15]||(e[15]=[a(" 感谢 EnderWolf006 (@EnderWolf) fhzit(@Hellofhz) KeyFac 等人的贡献 ",-1)])]),_:1})]),_:1}),t(D,{"append-icon":"mdi-link",href:"https://hlyun.org",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[...e[16]||(e[16]=[a(" Classworks 由",-1),c("strong",null,"厚浪云",-1),a("提供 ",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[17]||(e[17]=[a(" 长江后浪推前浪 浮事新人换旧人 ",-1)])]),_:1})]),_:1}),t(D,{"append-icon":"mdi-link",href:"https://clock.qqhkx.com/",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[...e[18]||(e[18]=[a(" 感谢 沉浸式时钟 ",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[19]||(e[19]=[a(" https://clock.qqhkx.com/ ",-1)])]),_:1})]),_:1}),t(U,{class:"ma-1"}),t(D,{"append-icon":"mdi-link",href:"https://github.com/HUSX100/IslandCaller",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[...e[20]||(e[20]=[a(" 本项目与 IslandCaller 没有从属关系 ",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[21]||(e[21]=[a(" IslandCaller 是由 HUSX100 开发的基于 ClassIsland 提醒服务的轻量级点名器 ",-1)])]),_:1})]),_:1}),t(D,{"append-icon":"mdi-link",href:"https://classisland.tech",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[...e[22]||(e[22]=[a(" 本项目与 ClassIsland 没有从属关系 ",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[23]||(e[23]=[a(" ClassIsland 是由 HelloWRC 开发的适用于班级大屏的课表信息显示工具 ",-1)])]),_:1})]),_:1})]),_:1}),t(p,{class:"mb-4","prepend-icon":"mdi-package-variant",variant:"text",onClick:e[0]||(e[0]=d=>u.showDeps=!0)},{default:n(()=>[...e[24]||(e[24]=[a(" 查看使用的第三方库 ",-1)])]),_:1}),t(we,{modelValue:u.showDeps,"onUpdate:modelValue":e[2]||(e[2]=d=>u.showDeps=d),fullscreen:"",transition:"dialog-bottom-transition"},{default:n(()=>[t(M,null,{default:n(()=>[t(Bt,null,{default:n(()=>[t(p,{icon:"mdi-close",onClick:e[1]||(e[1]=d=>u.showDeps=!1)}),t(Mt,null,{default:n(()=>[...e[25]||(e[25]=[a("使用的第三方库",-1)])]),_:1}),t(Z)]),_:1}),t(j,null,{default:n(()=>[t(O,null,{default:n(()=>[(m(!0),y(H,null,ne(u.Dependencies,d=>(m(),h(D,{key:d.name,href:"https://www.npmjs.com/package/"+d.name,"append-icon":"mdi-link",target:"_blank"},{default:n(()=>[t(z,null,{default:n(()=>[a(v(d.name),1)]),_:2},1024),t(te,null,{default:n(()=>[a(" v"+v(d.version),1)]),_:2},1024)]),_:2},1032,["href"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),t(we,{modelValue:u.showReportDialog,"onUpdate:modelValue":e[5]||(e[5]=d=>u.showReportDialog=d),"max-width":"640"},{default:n(()=>[t(M,null,{default:n(()=>[t(Bt,{density:"compact"},{default:n(()=>[t(p,{icon:"mdi-close",onClick:e[3]||(e[3]=d=>u.showReportDialog=!1)}),t(Mt,null,{default:n(()=>[...e[26]||(e[26]=[a("报告问题",-1)])]),_:1}),t(Z)]),_:1}),t(j,null,{default:n(()=>[e[37]||(e[37]=c("p",{class:"mb-4"}," 调试ID与下方的浏览器环境信息将帮助我们快速定位问题请在反馈中一并附上。 ",-1)),t(Yn,{class:"mb-3 pa-3 bg-grey-lighten-4 rounded",style:{"max-height":"260px",overflow:"auto"}},{default:n(()=>[c("pre",Io,v(u.envBoxText),1)]),_:1}),c("div",To,[t(p,{size:"small",variant:"text","prepend-icon":"mdi-refresh",onClick:u.reloadVisitorId,loading:u.visitorLoading},{default:n(()=>[...e[27]||(e[27]=[a("刷新",-1)])]),_:1},8,["onClick","loading"]),t(p,{size:"small",variant:"text","prepend-icon":"mdi-content-copy",onClick:u.copyEnvInfo},{default:n(()=>[...e[28]||(e[28]=[a("复制信息",-1)])]),_:1},8,["onClick"]),t(p,{size:"small",variant:"text","prepend-icon":"mdi-open-in-new",onClick:u.goToDebug},{default:n(()=>[...e[29]||(e[29]=[a("查看 /debug 页面",-1)])]),_:1},8,["onClick"])]),u.copyOk?(m(),h(Y,{key:0,type:"success",density:"compact",class:"mb-4"},{default:n(()=>[...e[30]||(e[30]=[a("已复制到剪贴板",-1)])]),_:1})):b("",!0),c("div",Uo,[t(p,{size:"small",color:"primary",variant:"elevated","prepend-icon":"mdi-message-alert",onClick:u.openFeedback,block:""},{default:n(()=>[...e[31]||(e[31]=[a(" 发送错误反馈到 Sentry ",-1)])]),_:1},8,["onClick"])]),e[38]||(e[38]=c("h4",{class:"text-subtitle-1 mb-2"},"反馈渠道",-1)),t(O,{lines:"one",class:"bg-transparent"},{default:n(()=>[t(D,{href:u.qqGroupLink,target:"_blank","prepend-icon":"mdi-qqchat"},{default:n(()=>[t(z,null,{default:n(()=>[a("QQ群 ("+v(u.qqGroupNumber)+")",1)]),_:1}),t(te,null,{default:n(()=>[...e[32]||(e[32]=[a("964979747",-1)])]),_:1})]),_:1},8,["href"]),t(D,{href:u.githubIssueUrl,target:"_blank","prepend-icon":"mdi-github"},{default:n(()=>[t(z,null,{default:n(()=>[...e[33]||(e[33]=[a("GitHub Issue",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[34]||(e[34]=[a("ZeroCatDev/Classworks",-1)])]),_:1})]),_:1},8,["href"]),t(D,{href:u.mailtoLink,target:"_blank","prepend-icon":"mdi-email"},{default:n(()=>[t(z,null,{default:n(()=>[...e[35]||(e[35]=[a("邮件",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[36]||(e[36]=[a("sun@wuyuan.dev",-1)])]),_:1})]),_:1},8,["href"])]),_:1})]),_:1}),t(ue,null,{default:n(()=>[t(Z),t(p,{variant:"text",onClick:e[4]||(e[4]=d=>u.showReportDialog=!1)},{default:n(()=>[...e[39]||(e[39]=[a("关闭",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),c("p",jo," Copyright © "+v(new Date().getFullYear())+" Sunwuyuan ",1)])]),_:1})]),_:1})]),_:1})]),_:1})}const yn=Q(Vo,[["render",Bo],["__scopeId","data-v-b1ceac93"]]),Mo={name:"Settings",components:{ServerSettingsCard:bn,EditSettingsCard:un,RefreshSettingsCard:dn,DisplaySettingsCard:rn,MessageLog:Rt,SettingsCard:W,StudentListCard:pn,TeacherListCard:fn,AboutCard:yn,DataProviderSettingsCard:wn,EchoChamberCard:Xt,SettingsExplorer:$t,SettingsLinkGenerator:cn,RandomPickerCard:sn,HomeworkTemplateCard:tn,SubjectManagementCard:nn,KvDatabaseCard:gn,HitokotoSettings:ln,NotificationSoundSettings:on,NoiseSettingsCard:an,BackgroundSettingsCard:en},setup(){const{mobile:s}=es();return{isMobile:s}},data(){return k("server.provider"),{settings:{server:{domain:k("server.domain"),classNumber:k("server.classNumber"),provider:k("server.provider")},refresh:{auto:k("refresh.auto"),interval:k("refresh.interval")},font:{size:k("font.size")},edit:{autoSave:k("edit.autoSave"),blockNonTodayAutoSave:k("edit.blockNonTodayAutoSave"),confirmNonTodaySave:k("edit.confirmNonTodaySave"),refreshBeforeEdit:k("edit.refreshBeforeEdit")},display:{emptySubjectDisplay:k("display.emptySubjectDisplay"),dynamicSort:k("display.dynamicSort"),showRandomButton:k("display.showRandomButton"),showFullscreenButton:k("display.showFullscreenButton")},developer:{enabled:k("developer.enabled"),showDebugConfig:k("developer.showDebugConfig")},message:{showSidebar:k("message.showSidebar"),maxActiveMessages:k("message.maxActiveMessages"),timeout:k("message.timeout"),saveHistory:k("message.saveHistory")}},dataProviders:[{title:"服务器",value:"server"},{title:"本地数据库",value:"indexedDB"}],studentData:{list:[],text:"",advanced:!1},newStudent:"",editingIndex:-1,editingName:"",deleteDialog:!1,studentToDelete:null,numberDialog:!1,newPosition:"",studentToMove:null,touchStartTime:0,touchTimeout:null,studentsLoading:!1,studentsError:null,debugConfig:"",loading:{server:!1,students:!1},hasUnsavedChanges:!1,lastSavedData:null,settingsTab:"index",settingsTabs:[{title:"首页",icon:"mdi-home",value:"index"},{title:"服务器",icon:"mdi-server",value:"server"},{title:"科目",icon:"mdi-book-edit",value:"subject"},{title:"花名册",icon:"mdi-account-group",value:"student"},{title:"预配链接",icon:"mdi-share",value:"share"},{title:"刷新",icon:"mdi-refresh",value:"refresh"},{title:"编辑",icon:"mdi-pencil",value:"edit"},{title:"显示",icon:"mdi-eye",value:"display"},{title:"噪音监测",icon:"mdi-microphone",value:"noise"},{title:"通知铃声",icon:"mdi-bell-ring",value:"notification"},{title:"一言",icon:"mdi-comment-quote",value:"hitokoto"},{title:"随机点名",icon:"mdi-dice-multiple",value:"randomPicker"},{title:"背景",icon:"mdi-image",value:"background"},{title:"开发者",icon:"mdi-developer-board",value:"developer"},{title:"关于",icon:"mdi-information",value:"about"}],drawer:!1}},watch:{settings:{handler(s){this.handleSettingsChange(s)},deep:!0},isMobile:{handler(s){this.drawer=!s},immediate:!0},studentData:{handler(s){this.lastSavedData&&(this.hasUnsavedChanges=JSON.stringify(s.list)!==JSON.stringify(this.lastSavedData)),this.studentData.text=s.list.join(`
`)},deep:!0}},mounted(){this.loadAllSettings(),this.unwatchSettings=pt(()=>{this.loadAllSettings()}),this.drawer=!this.isMobile},beforeUnmount(){this.unwatchSettings&&this.unwatchSettings()},methods:{openClassworksKV(){window.open(k("server.authDomain"),"_blank")},loadAllSettings(){Object.keys(this.settings).forEach(s=>{Object.keys(this.settings[s]).forEach(e=>{this.settings[s][e]=k(`${s}.${e}`)})})},handleSettingsChange(s){this.settingsChangeTimeout&&clearTimeout(this.settingsChangeTimeout),this.settingsChangeTimeout=setTimeout(()=>{Object.entries(s).forEach(([e,o])=>{Object.entries(o).forEach(([u,i])=>{const l=`${e}.${u}`,d=k(l);i!==d&&(re(l,i)?this.showMessage("设置已更新",`${l} 已保存`):(this.showError("保存失败",`${l} 设置失败`),this.settings[e][u]=d))})})},100)},showMessage(s,e="",o="success"){this.$message[o](s,e)},showError(s,e=""){this.$message.error(s,e)},saveEdit(){if(this.editingIndex!==-1){const s=this.editingName.trim();s&&s!==this.studentData.list[this.editingIndex]&&(this.studentData.list[this.editingIndex]=s),this.editingIndex=-1,this.editingName=""}},startEdit(s,e){this.editingIndex=s,this.editingName=e},confirmDelete(s){this.studentToDelete={index:s,name:this.studentData.list[s]},this.deleteDialog=!0},moveStudent(s,e){const o=e==="up"?s-1:s+1;o>=0&&o<this.studentData.list.length&&([this.studentData.list[s],this.studentData.list[o]]=[this.studentData.list[o],this.studentData.list[s]])},applyNewPosition(){const s=parseInt(this.newPosition)-1;if(this.studentToMove!==null&&s>=0&&s<this.studentData.list.length&&s!==this.studentToMove){const e=this.studentData.list[this.studentToMove];this.studentData.list.splice(this.studentToMove,1),this.studentData.list.splice(s,0,e)}this.numberDialog=!1,this.studentToMove=null,this.newPosition=""},moveToTop(s){if(s>0){const e=this.studentData.list[s];this.studentData.list.splice(s,1),this.studentData.list.unshift(e)}},addStudent(){const s=this.newStudent.trim();s&&!this.studentData.list.includes(s)&&(this.studentData.list.push(s),this.newStudent="")},removeStudent(s){s!==void 0&&(this.studentData.list.splice(s,1),this.deleteDialog=!1,this.studentToDelete=null)},resetFontSize(){Te("font.size"),this.settings.font.size=k("font.size"),this.showMessage("字体已重置","字体大小已恢复默认值")},handleDeveloperChange(s){s||(this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0})},resetDeveloperSettings(){this.settings.developer={enabled:!1},this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0},this.handleSettingsChange(this.settings),this.showMessage("已重置","开发者设置已重置为默认值","warning")},adjustFontSize(s){const o=this.settings.font.size;s==="up"&&o<100?this.settings.font.size=o+2:s==="down"&&o>16&&(this.settings.font.size=o-2),this.handleSettingsChange(this.settings)},onSettingsSaved(){this.showMessage("设置已更新","您的设置已成功保存")},onSettingUpdate(s,e){this.showMessage("设置已更新",`${s} 已保存为 ${e}`)}}},No={class:"settings-page"},Po={class:"mt-4"};function zo(s,e,o,u,i,l){const d=yn,f=bn,r=wn,w=gn,x=pn,I=fn,F=cn,$=dn,J=un,he=rn,ae=an,ce=on,le=ln,oe=sn,C=nn,V=tn,T=en,_=W,E=On("developer-settings-card"),q=$t,P=Xt,ee=Rt;return m(),y("div",No,[t(ms,{elevation:"1"},{prepend:n(()=>[t(p,{icon:"mdi-arrow-left",variant:"text",onClick:e[0]||(e[0]=A=>s.$router.push("/"))}),t(p,{icon:"mdi-menu",variant:"text",onClick:e[1]||(e[1]=A=>i.drawer=!i.drawer)})]),default:n(()=>[t(cs,{class:"text-h6"},{default:n(()=>[...e[5]||(e[5]=[a("设置",-1)])]),_:1})]),_:1}),t(bt,{fluid:""},{default:n(()=>[t(Sn,{modelValue:i.drawer,"onUpdate:modelValue":e[2]||(e[2]=A=>i.drawer=A),permanent:!u.isMobile,temporary:u.isMobile},{default:n(()=>[t(O,null,{default:n(()=>[(m(!0),y(H,null,ne(i.settingsTabs,A=>(m(),h(D,{key:A.value,active:i.settingsTab===A.value,color:i.settingsTab===A.value?"primary":"default","prepend-icon":A.icon,class:"rounded-e-xl",onClick:X=>i.settingsTab=A.value},{default:n(()=>[t(z,null,{default:n(()=>[a(v(A.title),1)]),_:2},1024)]),_:2},1032,["active","color","prepend-icon","onClick"]))),128))]),_:1})]),_:1},8,["modelValue","permanent","temporary"]),t(fs,{modelValue:i.settingsTab,"onUpdate:modelValue":e[4]||(e[4]=A=>i.settingsTab=A),direction:"vertical",style:{width:"100%"}},{default:n(()=>[t(fe,{value:"index"},{default:n(()=>[t(M,{border:"",class:"service-card gradient-right clickable mb-4",color:"primary",elevation:"8",hover:"",rounded:"xl",variant:"tonal",onClick:l.openClassworksKV},{default:n(()=>[t(ze,null,{default:n(()=>[...e[6]||(e[6]=[c("div",{class:"card-title"},[c("div",null,[c("div",{class:"text-h6"},"在寻找 Classworks KV "),c("div",{class:"text-caption text-medium-emphasis"}," 文档形键值数据库 ")])],-1)])]),_:1}),t(j,null,{default:n(()=>[c("div",Po,[t(p,{"append-icon":"mdi-arrow-right",class:"text-none",rounded:"xl",variant:"text",onClick:l.openClassworksKV},{default:n(()=>[...e[7]||(e[7]=[a(" 打开 Classworks KV ",-1)])]),_:1},8,["onClick"])])]),_:1})]),_:1},8,["onClick"]),t(M,{border:"",class:"rounded-xl mb-4",subtitle:"设置",title:"Classworks"},{default:n(()=>[t(j,null,{default:n(()=>[t(Y,{class:"rounded-xl",color:"error",icon:"mdi-alert-circle",variant:"tonal"},{default:n(()=>[...e[8]||(e[8]=[a("Classworks 是开源免费的软件,官方没有提供任何形式的付费支持服务,源代码仓库地址在 ",-1),c("a",{href:"https://github.com/ZeroCatDev/Classworks",target:"_blank"},"https://github.com/ZeroCatDev/Classworks",-1),a("。如果您通过有偿协助等付费方式取得本应用,在遇到问题时请在与卖家约定的服务框架下,优先向卖家求助。如果卖家没有提供您预期的服务,请退款或通过其它形式积极维护您的合法权益。 ",-1)])]),_:1}),t(Y,{class:"mt-4 rounded-xl",color:"info",icon:"mdi-information",variant:"tonal"},{default:n(()=>[...e[9]||(e[9]=[a("请不要使用浏览器清除缓存功能,否则会导致配置丢失。 ",-1),c("del",null,"恶意的操作可能导致您受到贵校教师的处理 ",-1)])]),_:1}),t(Y,{class:"mt-4 rounded-xl",color:"warning",icon:"mdi-information",variant:"tonal"},{default:n(()=>[e[11]||(e[11]=c("p",null," 请不要使用包括但不限于360极速浏览器、360安全浏览器、夸克浏览器、QQ浏览器等浏览器使用 Classworks 这些浏览器过时且存在严重的一致性问题。在Windows上使用新版 Microsoft Edge 浏览器是最推荐的选择。 ",-1)),e[12]||(e[12]=c("p",{style:{color:"#666"}}," 上述浏览器商标为其所属公司所有Classworks™ 与上述浏览器所属公司无竞争关系。 ",-1)),e[13]||(e[13]=c("br",null,null,-1)),t(p,{"append-icon":"mdi-open-in-new",class:"text-none rounded-xl",color:"warning",href:"https://www.microsoft.com/zh-cn/windows/microsoft-edge",target:"_blank",variant:"tonal"},{default:n(()=>[...e[10]||(e[10]=[a("下载 Microsoft Edge微软边缘浏览器 ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(d)]),_:1}),t(fe,{value:"server"},{default:n(()=>[t(f,{loading:i.loading.server,border:"",onSaved:l.onSettingsSaved},null,8,["loading","onSaved"]),t(r,{border:"",class:"mt-4"}),t(w,{border:"",class:"mt-4"})]),_:1}),t(fe,{value:"student"},{default:n(()=>[t(x,{"is-mobile":u.isMobile,border:""},null,8,["is-mobile"]),t(I,{"is-mobile":u.isMobile,border:"",class:"mt-4"},null,8,["is-mobile"])]),_:1}),t(fe,{value:"share"},{default:n(()=>[t(F,{border:"",class:"mt-4"})]),_:1}),t(fe,{value:"refresh"},{default:n(()=>[t($,{loading:i.loading.refresh,border:"",onSaved:l.onSettingsSaved},null,8,["loading","onSaved"])]),_:1}),t(fe,{value:"edit"},{default:n(()=>[t(J,{loading:i.loading.edit,border:"",onSaved:l.onSettingsSaved},null,8,["loading","onSaved"])]),_:1}),t(fe,{value:"display"},{default:n(()=>[t(he,{loading:i.loading.display,border:"",onSaved:l.onSettingsSaved},null,8,["loading","onSaved"])]),_:1}),t(fe,{value:"noise"},{default:n(()=>[t(ae,{border:""})]),_:1}),t(fe,{value:"notification"},{default:n(()=>[t(ce,{border:""})]),_:1}),t(fe,{value:"hitokoto"},{default:n(()=>[t(le,{border:""})]),_:1}),t(fe,{value:"randomPicker"},{default:n(()=>[t(oe,{"is-mobile":u.isMobile,border:""},null,8,["is-mobile"])]),_:1}),t(fe,{value:"subject"},{default:n(()=>[t(C,{border:""}),e[14]||(e[14]=c("br",null,null,-1)),t(V,{border:""})]),_:1}),t(fe,{value:"background"},{default:n(()=>[t(T,{border:""})]),_:1}),t(fe,{value:"developer"},{default:n(()=>[t(_,{border:"",icon:"mdi-developer-board",title:"开发者选项"},{default:n(()=>[t(O,null,{default:n(()=>[t(D,null,{prepend:n(()=>[t(g,{class:"mr-3",icon:"mdi-code-tags"})]),append:n(()=>[t(ht,{modelValue:i.settings.developer.enabled,"onUpdate:modelValue":e[3]||(e[3]=A=>i.settings.developer.enabled=A),density:"comfortable","hide-details":"",onChange:l.handleDeveloperChange},null,8,["modelValue","onChange"])]),default:n(()=>[t(z,null,{default:n(()=>[...e[15]||(e[15]=[a("启用开发者选项",-1)])]),_:1}),t(te,null,{default:n(()=>[...e[16]||(e[16]=[a("启用后可以查看和修改开发者设置 ",-1)])]),_:1})]),_:1})]),_:1})]),_:1}),t(E,{loading:i.loading.developer,border:"",onSaved:l.onSettingsSaved},null,8,["loading","onSaved"]),i.settings.developer.enabled?(m(),h(M,{key:0,border:"",class:"mt-4 rounded-lg"},{default:n(()=>[t(K,{class:"d-flex align-center"},{default:n(()=>[t(g,{class:"mr-2",icon:"mdi-cog-outline"}),e[17]||(e[17]=a(" 所有设置 ",-1))]),_:1}),t(Ke,null,{default:n(()=>[...e[18]||(e[18]=[a(" 浏览和修改所有可用设置",-1)])]),_:1}),t(j,null,{default:n(()=>[t(q,{onUpdate:l.onSettingUpdate},null,8,["onUpdate"])]),_:1})]),_:1})):b("",!0),i.settings.developer.enabled?(m(),h(R,{key:1,cols:"12"})):b("",!0)]),_:1}),t(fe,{value:"about"},{default:n(()=>[t(d),t(P,{border:"",class:"mt-4"})]),_:1})]),_:1},8,["modelValue"])]),_:1}),t(ee,{ref:"messageLog"},null,512)])}const pa=Q(Mo,[["render",zo]]);export{pa as default};