1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2025-07-03 01:39:22 +00:00
Classworks/assets/settings-DgSwjIkS.js

14 lines
98 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{b as Mt,c as Ot,p as Fe,_ as Ze,V as Pt,a as jt,d as Ke,k as Ut}from"./VAppBarTitle-B1isSkjU.js";import{_ as K,b7 as $e,R as v,ay as Ne,b8 as Bt,F as M,D as p,k as t,B as j,E as s,aw as P,J as l,K as I,ax as H,G as V,A as S,W as x,ao as G,ap as A,V as N,au as L,Y as De,as as Rt,H as ue,b9 as ve,aA as et,az as Te,I as xe,T as le,X as $,av as Ae,U as Le,S as se,r as Ee,ad as Ft,ba as Me,at as tt,aC as nt,a0 as st,bb as ze,bc as it,bd as Kt,g as at,p as rt,a7 as zt,be as Qt,bf as Ht,bg as ot,bh as Qe,$ as He,aF as qt,b3 as Wt,j as Jt,aN as Gt,x as Yt,ar as Xt,z as Zt}from"./index-7-L2UI-v.js";import{V as Ie}from"./VSwitch-Bdeo8Cd_.js";import{g as $t,a as en}from"./VDataTable-BMIvqTp4.js";import{a as oe,V as ut,g as tn,h as nn}from"./VTextField-Ri6wEYQH.js";import{b as fe,a as R,V as sn}from"./VRow-CO1xLAsA.js";import{V as me}from"./VChip-e_kpo9z2.js";import{V as ye,a as qe}from"./VAlert-BpAWcWb6.js";import{V as lt}from"./VTextarea-BeoHVEre.js";import{V as an,a as rn,b as on,c as un}from"./VExpansionPanels-DZG8WMj3.js";import{b as ln}from"./index-DETZRgwE.js";const dn={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":{"kv-local":"KV本地存储","kv-server":"KV远程服务器",classworkscloud:"Classworks云端存储"}},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 n=this.settingKey.split(".");return n[n.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=Bt(this.settingKey),!this.definition){console.error(`未找到设置项定义: ${this.settingKey}`);return}if(this.type=this.definition.type,this.localValue=v(this.settingKey),this.type==="string"){if(this.isFontFamily)this.selectOptions=this.fontFamilies,this.hasOptions=!0;else if(this.settingKey in this.displayValueMappings){const n=this.displayValueMappings[this.settingKey];this.selectOptions=Object.entries(n).map(([e,i])=>({title:i,value:e})),this.hasOptions=!0}else if(this.definition.validate){const e=this.definition.validate.toString().match(/\[(.*?)\]/);if(e){const d=e[1].split(",").map(a=>{const u=a.trim().replace(/['"]/g,"");return{title:this.getDisplayValue(u)||u,value:u}});d.length>0&&(this.selectOptions=d,this.hasOptions=!0)}}}if(this.type==="number"&&this.definition.validate){const n=this.definition.validate.toString(),e=n.match(/value\s*>=\s*(\d+)/);e&&(this.minValue=Number(e[1]));const i=n.match(/value\s*<=\s*(\d+)/);i&&(this.maxValue=Number(i[1]));const d=this.maxValue-this.minValue;d>100?this.stepValue=10:d>20?this.stepValue=5:d>10?this.stepValue=2:this.stepValue=1}},getDisplayValue(n){return this.settingKey in this.displayValueMappings&&this.displayValueMappings[this.settingKey][n]||n},updateSetting(n){let e=n;this.type==="boolean"?e=!!n:this.type==="number"&&(e=Number(n),e<this.minValue&&(e=this.minValue),e>this.maxValue&&(e=this.maxValue)),Ne(this.settingKey,e)?this.$emit("update",this.settingKey,e):(this.localValue=v(this.settingKey),this.$emit("error",this.settingKey))},adjustValue(n){if(this.type!=="number")return;const e=this.localValue+n;e>=this.minValue&&e<=this.maxValue&&(this.localValue=e,this.updateSetting(e))},copySettingId(){navigator.clipboard.writeText(this.settingKey).then(()=>{this.showSnackbarMessage("设置ID已复制到剪贴板")}).catch(n=>{console.error("复制失败:",n)})},copySettingValue(){let n="";typeof this.localValue=="object"&&this.localValue!==null?n=JSON.stringify(this.localValue):n=String(this.localValue),navigator.clipboard.writeText(n).then(()=>{this.showSnackbarMessage("设置值已复制到剪贴板")}).catch(e=>{console.error("复制失败:",e)})},resetToDefault(){this.definition&&($e(this.settingKey),this.localValue=v(this.settingKey),this.showSnackbarMessage("已重置为默认值"),this.$emit("update",this.settingKey,this.localValue))},showSnackbarMessage(n){this.snackbarText=n,this.showSnackbar=!0}}},cn={class:"text-caption text-grey-darken-1"},hn={class:"d-flex flex-column flex-sm-row align-center"},wn={key:0,class:"me-2"},pn={key:2,class:"d-flex align-center"},fn={key:0,class:"px-4 pb-2 pt-0"};function mn(n,e,i,d,a,u){return p(),M(ue,null,[t(A,{class:"setting-item",disabled:i.disabled},{prepend:s(()=>[t(N,{icon:u.settingIcon},null,8,["icon"])]),append:s(()=>[V("div",hn,[a.type!=="string"||a.hasOptions?(p(),M("div",wn,[a.type==="boolean"?(p(),S(Ie,{key:0,modelValue:a.localValue,"onUpdate:modelValue":[e[0]||(e[0]=r=>a.localValue=r),u.updateSetting],density:"comfortable","hide-details":"",disabled:i.disabled},null,8,["modelValue","disabled","onUpdate:modelValue"])):a.type==="string"&&a.hasOptions?(p(),S($t,{key:1,modelValue:a.localValue,"onUpdate:modelValue":[e[1]||(e[1]=r=>a.localValue=r),u.updateSetting],items:a.selectOptions,density:"compact","hide-details":"",disabled:i.disabled,class:"setting-select",variant:"outlined","bg-color":"surface","item-title":"title","item-value":"value"},null,8,["modelValue","items","disabled","onUpdate:modelValue"])):a.type==="number"?(p(),M("div",pn,[t(x,{icon:"mdi-minus",size:"small",variant:"text",disabled:i.disabled||a.localValue<=a.minValue,onClick:e[2]||(e[2]=r=>u.adjustValue(-a.stepValue))},null,8,["disabled"]),t(oe,{modelValue:a.localValue,"onUpdate:modelValue":[e[3]||(e[3]=r=>a.localValue=r),u.updateSetting],modelModifiers:{number:!0},type:"number",density:"compact","hide-details":"",min:a.minValue,max:a.maxValue,step:a.stepValue,disabled:i.disabled,class:"mx-2 setting-number-field",style:{width:"80px"},variant:"outlined","bg-color":"surface"},null,8,["modelValue","min","max","step","disabled","onUpdate:modelValue"]),t(x,{icon:"mdi-plus",size:"small",variant:"text",disabled:i.disabled||a.localValue>=a.maxValue,onClick:e[4]||(e[4]=r=>u.adjustValue(a.stepValue))},null,8,["disabled"])])):j("",!0)])):j("",!0),t(ut,{location:"bottom"},{activator:s(({props:r})=>[t(x,De({icon:"mdi-dots-vertical",size:"small",variant:"text"},r,{class:"ml-2",disabled:i.disabled}),null,16,["disabled"])]),default:s(()=>[t(G,{density:"compact"},{default:s(()=>[t(A,{onClick:u.copySettingId},{prepend:s(()=>[t(N,{icon:"mdi-key",size:"small"})]),default:s(()=>[t(P,null,{default:s(()=>e[7]||(e[7]=[l("复制设置ID")])),_:1})]),_:1},8,["onClick"]),t(A,{onClick:u.copySettingValue},{prepend:s(()=>[t(N,{icon:"mdi-content-copy",size:"small"})]),default:s(()=>[t(P,null,{default:s(()=>e[8]||(e[8]=[l("复制设置值")])),_:1})]),_:1},8,["onClick"]),t(L),t(A,{onClick:u.resetToDefault,disabled:u.isDefaultValue},{prepend:s(()=>[t(N,{icon:"mdi-restore",size:"small"})]),default:s(()=>[t(P,null,{default:s(()=>e[9]||(e[9]=[l("重置为默认值")])),_:1})]),_:1},8,["onClick","disabled"])]),_:1})]),_:1})])]),default:s(()=>[t(P,{class:"text-wrap"},{default:s(()=>[l(I(u.displayTitle),1)]),_:1}),t(H,{class:"d-flex align-center text-wrap"},{default:s(()=>[V("span",cn,I(i.settingKey),1)]),_:1})]),_:1},8,["disabled"]),a.type==="string"&&!a.hasOptions?(p(),M("div",fn,[t(oe,{modelValue:a.localValue,"onUpdate:modelValue":[e[5]||(e[5]=r=>a.localValue=r),u.updateSetting],density:"compact","hide-details":"",disabled:i.disabled,class:"setting-text-field mt-1",variant:"outlined","bg-color":"surface"},null,8,["modelValue","disabled","onUpdate:modelValue"])])):j("",!0),t(Rt,{modelValue:a.showSnackbar,"onUpdate:modelValue":e[6]||(e[6]=r=>a.showSnackbar=r),timeout:2e3,color:"success",location:"top"},{default:s(()=>[l(I(a.snackbarText),1)]),_:1},8,["modelValue"])],64)}const re=K(dn,[["render",mn],["__scopeId","data-v-309c3042"]]),gn={name:"SettingsExplorer",components:{SettingItem:re},data(){return{searchQuery:"",currentSettings:{},unwatchFunction:null}},computed:{isDeveloperMode(){return v("developer.enabled")},allSettings(){var e;const n=[];for(const[i,d]of Object.entries(Te))this.searchQuery&&!i.toLowerCase().includes(this.searchQuery.toLowerCase())&&!((e=d.description)!=null&&e.toLowerCase().includes(this.searchQuery.toLowerCase()))||n.push({key:i,...d});return n},formattedSettings(){return JSON.stringify(this.currentSettings,null,2)}},created(){this.updateCurrentSettings(),this.unwatchFunction=et(()=>{this.updateCurrentSettings()})},beforeUnmount(){this.unwatchFunction&&this.unwatchFunction()},methods:{updateCurrentSettings(){this.currentSettings=ve()},onSettingUpdate(n,e){this.$emit("update",n,e),this.updateCurrentSettings()},onSettingError(n){this.$emit("error",n)},copySettingsToClipboard(){navigator.clipboard.writeText(JSON.stringify(this.currentSettings)).then(()=>{this.$emit("message",{type:"success",text:"设置已复制到剪贴板"})}).catch(n=>{console.error("复制到剪贴板失败:",n),this.$emit("message",{type:"error",text:"复制到剪贴板失败"})})}}},bn={class:"settings-explorer"},vn={class:"settings-json"};function yn(n,e,i,d,a,u){const r=re;return p(),M("div",bn,[V("div",null,[t(oe,{modelValue:a.searchQuery,"onUpdate:modelValue":e[0]||(e[0]=c=>a.searchQuery=c),label:"搜索设置","prepend-inner-icon":"mdi-magnify",clearable:"",variant:"outlined",density:"comfortable",class:"mb-4"},null,8,["modelValue"]),t(G,null,{default:s(()=>[(p(!0),M(ue,null,xe(u.allSettings,c=>(p(),M("div",{key:c.key},[(p(),S(r,{key:c.key,"setting-key":c.key,disabled:c.requireDeveloper&&!u.isDeveloperMode,onUpdate:u.onSettingUpdate,onError:u.onSettingError},null,8,["setting-key","disabled","onUpdate","onError"])),t(L,{class:"my-2"})]))),128))]),_:1}),t(se,{border:""},{default:s(()=>[t(le,{class:"text-subtitle-1"},{default:s(()=>e[1]||(e[1]=[l("当前配置")])),_:1}),t($,null,{default:s(()=>[V("pre",vn,I(u.formattedSettings),1)]),_:1}),t(Ae,null,{default:s(()=>[t(Le),t(x,{onClick:u.copySettingsToClipboard},{default:s(()=>[e[3]||(e[3]=l(" 复制到剪贴板 ")),t(N,{right:""},{default:s(()=>e[2]||(e[2]=[l("mdi-content-copy")])),_:1})]),_:1},8,["onClick"])]),_:1})]),_:1})])])}const dt=K(gn,[["render",yn],["__scopeId","data-v-da09fd0e"]]),xn="Classworks",Sn="module",kn="0.0.0",_n={dev:"vite --host",build:"vite build",preview:"vite preview",lint:"eslint . --fix"},Cn={"@mdi/font":"7.4.47","@microsoft/clarity":"^1.0.0",axios:"^1.8.4",idb:"^8.0.2","js-yaml":"^4.1.0","pinyin-pro":"^3.26.0","ratelimit-header-parser":"^0.1.0","roboto-fontface":"*","typewriter-effect":"^2.21.0",uuid:"^9.0.1",vue:"^3.4.31",vuetify:"^3.8.0"},Vn={"@eslint/js":"^9.14.0","@vite-pwa/assets-generator":"^1.0.0","@vitejs/plugin-vue":"^5.2.3",eslint:"^9.14.0","eslint-plugin-import":"^2.29.1","eslint-plugin-n":"^16.6.2","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^6.4.0","eslint-plugin-vue":"^9.30.0",pinia:"^3.0.1",sass:"1.86.3","sass-embedded":"^1.86.3","unplugin-auto-import":"^19.1.2","unplugin-fonts":"^1.3.1","unplugin-vue-components":"^28.4.1","unplugin-vue-router":"^0.12.0",vite:"^5.4.17","vite-plugin-pwa":"^1.0.0","vite-plugin-vue-layouts":"^0.11.0","vite-plugin-vuetify":"^2.1.1","vue-router":"^4.5.0"},We={name:xn,private:!0,type:Sn,version:kn,scripts:_n,dependencies:Cn,devDependencies:Vn},Dn={name:"AboutCard",setup(){const n=Ee([]),e=Ee(!1),i=()=>{try{const a={...We.dependencies||{},...We.devDependencies||{}},u=Object.entries(a).map(([r,c])=>({name:r,version:c.replace(/[\^~]/g,""),description:d(r)}));n.value=u}catch(a){console.error("加载依赖信息失败:",a),n.value=[]}},d=a=>({vue:"渐进式 JavaScript 框架",vuetify:"材料设计组件框架",axios:"Promise 基础的 HTTP 客户端",pinia:"Vue 状态管理库","vue-router":"Vue.js 官方路由管理器","@vitejs/plugin-vue":"Vite 的 Vue 插件"})[a]||"";return Ft(()=>{i()}),{Dependencies:n,showDeps:e}}},Tn={class:"d-flex flex-column align-start"},En={class:"d-flex gap-2 flex-wrap mb-6"},In={class:"text-caption text-medium-emphasis"};function Nn(n,e,i,d,a,u){return p(),S(se,{border:""},{default:s(()=>[t(Me,null,{prepend:s(()=>[t(N,{icon:"mdi-information",size:"large",class:"mr-2"})]),default:s(()=>[t(le,{class:"text-h6"},{default:s(()=>e[3]||(e[3]=[l("关于")])),_:1})]),_:1}),t($,null,{default:s(()=>[t(fe,null,{default:s(()=>[t(R,{cols:"12",md:"8",class:"mx-auto"},{default:s(()=>[V("div",Tn,[t(tt,{size:"120",class:"mb-4"},{default:s(()=>[t(nt,{src:"https://github.com/SunWuyuan.png",alt:"Sunwuyuan"})]),_:1}),e[20]||(e[20]=V("h2",{class:"text-h5 mb-2"},"Classworks",-1)),e[21]||(e[21]=V("p",{class:"text-body-1 mb-4"},"适用于班级大屏的作业板小工具",-1)),V("div",En,[t(x,{color:"red",variant:"tonal",href:"https://github.com/ClassworksDev/Classworks/issues",target:"_blank","prepend-icon":"mdi-bug"},{default:s(()=>e[4]||(e[4]=[l(" 报告问题 ")])),_:1}),t(x,{color:"primary",variant:"tonal",href:"https://qm.qq.com/q/qNBX4ZZVeg",target:"_blank","prepend-icon":"mdi-qqchat"},{default:s(()=>e[5]||(e[5]=[l(" QQ 群 ")])),_:1}),t(x,{variant:"text",href:"https://github.com/ClassworksDev/Classworks",target:"_blank","prepend-icon":"mdi-github"},{default:s(()=>e[6]||(e[6]=[l(" 前端 ")])),_:1}),t(x,{variant:"text",href:"https://github.com/ClassworksDev/ClassworksServer",target:"_blank","prepend-icon":"mdi-github"},{default:s(()=>e[7]||(e[7]=[l(" 后端 ")])),_:1})]),t(L,{class:"mb-4 w-100"}),e[22]||(e[22]=V("h3",{class:"text-h6 mb-2"},"备注与致谢",-1)),t(G,{class:"mb-4 bg-transparent"},{default:s(()=>[t(A,{href:"https://github.com/EnderWolf006/HomeworkBoard",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>e[8]||(e[8]=[l(" 本项目受到 HomeworkBoard 的启发而开发 ")])),_:1}),t(H,null,{default:s(()=>e[9]||(e[9]=[l(" 感谢 EnderWolf006 (@EnderWolf) fhzit(@Hellofhz) KeyFac 等人的贡献 ")])),_:1})]),_:1}),t(A,{href:"https://hlyun.org",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>e[10]||(e[10]=[l(" Classworks 由"),V("strong",null,"厚浪云",-1),l("提供 ")])),_:1}),t(H,null,{default:s(()=>e[11]||(e[11]=[l(" 长江后浪推前浪 浮事新人换旧人 ")])),_:1})]),_:1}),t(A,{href:"https://zerocat.houlangs.com",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>e[12]||(e[12]=[l(" 感谢 ZeroCat 社区的开发者们 ")])),_:1}),t(H,null,{default:s(()=>e[13]||(e[13]=[l(" 新一代,开源,编程社区 ")])),_:1})]),_:1}),t(L,{class:"ma-1"}),t(A,{href:"https://github.com/HUSX100/IslandCaller",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>e[14]||(e[14]=[l(" 本项目与 IslandCaller 没有从属关系 ")])),_:1}),t(H,null,{default:s(()=>e[15]||(e[15]=[l(" IslandCaller 是由 HUSX100 开发的基于 ClassIsland 提醒服务的轻量级点名器 ")])),_:1})]),_:1}),t(A,{href:"https://classisland.tech",target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>e[16]||(e[16]=[l(" 本项目与 ClassIsland 没有从属关系 ")])),_:1}),t(H,null,{default:s(()=>e[17]||(e[17]=[l(" ClassIsland 是由 HelloWRC 开发的适用于班级大屏的课表信息显示工具 ")])),_:1})]),_:1})]),_:1}),t(x,{variant:"text",class:"mb-4","prepend-icon":"mdi-package-variant",onClick:e[0]||(e[0]=r=>d.showDeps=!0)},{default:s(()=>e[18]||(e[18]=[l(" 查看使用的第三方库 ")])),_:1}),t(st,{modelValue:d.showDeps,"onUpdate:modelValue":e[2]||(e[2]=r=>d.showDeps=r),transition:"dialog-bottom-transition",fullscreen:""},{default:s(()=>[t(se,null,{default:s(()=>[t(Mt,null,{default:s(()=>[t(x,{icon:"mdi-close",onClick:e[1]||(e[1]=r=>d.showDeps=!1)}),t(Ot,null,{default:s(()=>e[19]||(e[19]=[l("使用的第三方库")])),_:1}),t(Le)]),_:1}),t($,null,{default:s(()=>[t(G,null,{default:s(()=>[(p(!0),M(ue,null,xe(d.Dependencies,r=>(p(),S(A,{key:r.name,href:"https://www.npmjs.com/package/"+r.name,target:"_blank","append-icon":"mdi-link"},{default:s(()=>[t(P,null,{default:s(()=>[l(I(r.name),1)]),_:2},1024),t(H,null,{default:s(()=>[l(" v"+I(r.version),1)]),_:2},1024)]),_:2},1032,["href"]))),128))]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"]),V("p",In," Copyright © "+I(new Date().getFullYear())+" Sunwuyuan ",1)])]),_:1})]),_:1})]),_:1})]),_:1})}const ct=K(Dn,[["render",Nn]]),An={name:"SettingsCard",props:{title:{type:String,required:!0},icon:{type:String,required:!0},loading:{type:Boolean,default:!1}}};function Ln(n,e,i,d,a,u){return p(),S(se,{elevation:"2",class:"settings-card rounded-lg"},{default:s(()=>[t(Me,null,{prepend:s(()=>[t(N,{icon:i.icon,size:"large",class:"mr-2"},null,8,["icon"])]),default:s(()=>[t(le,{class:"text-h6"},{default:s(()=>[l(I(i.title),1)]),_:1})]),_:1}),t($,null,{default:s(()=>[i.loading?(p(),S(it,{key:0,indeterminate:"",color:"primary",class:"mb-4"})):j("",!0),ze(n.$slots,"default",{},void 0,!0)]),_:3}),n.$slots.actions?(p(),S(Ae,{key:0,class:"pa-4"},{default:s(()=>[ze(n.$slots,"actions",{},void 0,!0)]),_:3})):j("",!0)]),_:3})}const z=K(An,[["render",Ln],["__scopeId","data-v-3e8918ff"]]);var Mn=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function On(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}var ht={exports:{}};(function(n,e){(function(i,d){n.exports=d()})(typeof self<"u"?self:Mn,()=>(()=>{var i={3146:(r,c,f)=>{for(var _=f(3491),g=typeof window>"u"?f.g:window,k=["moz","webkit"],O="AnimationFrame",E=g["request"+O],F=g["cancel"+O]||g["cancelRequest"+O],Y=0;!E&&Y<k.length;Y++)E=g[k[Y]+"Request"+O],F=g[k[Y]+"Cancel"+O]||g[k[Y]+"CancelRequest"+O];if(!E||!F){var ie=0,ee=0,W=[],Q=1e3/60;E=function(q){if(W.length===0){var X=_(),ae=Math.max(0,Q-(X-ie));ie=ae+X,setTimeout(function(){var de=W.slice(0);W.length=0;for(var te=0;te<de.length;te++)if(!de[te].cancelled)try{de[te].callback(ie)}catch(ne){setTimeout(function(){throw ne},0)}},Math.round(ae))}return W.push({handle:++ee,callback:q,cancelled:!1}),ee},F=function(q){for(var X=0;X<W.length;X++)W[X].handle===q&&(W[X].cancelled=!0)}}r.exports=function(q){return E.call(g,q)},r.exports.cancel=function(){F.apply(g,arguments)},r.exports.polyfill=function(q){q||(q=g),q.requestAnimationFrame=E,q.cancelAnimationFrame=F}},3491:function(r){(function(){var c,f,_,g,k,O;typeof performance<"u"&&performance!==null&&performance.now?r.exports=function(){return performance.now()}:typeof process<"u"&&process!==null&&process.hrtime?(r.exports=function(){return(c()-k)/1e6},f=process.hrtime,g=(c=function(){var E;return 1e9*(E=f())[0]+E[1]})(),O=1e9*process.uptime(),k=g-O):Date.now?(r.exports=function(){return Date.now()-_},_=Date.now()):(r.exports=function(){return new Date().getTime()-_},_=new Date().getTime())}).call(this)}},d={};function a(r){var c=d[r];if(c!==void 0)return c.exports;var f=d[r]={exports:{}};return i[r].call(f.exports,f,f.exports,a),f.exports}a.n=r=>{var c=r&&r.__esModule?()=>r.default:()=>r;return a.d(c,{a:c}),c},a.d=(r,c)=>{for(var f in c)a.o(c,f)&&!a.o(r,f)&&Object.defineProperty(r,f,{enumerable:!0,get:c[f]})},a.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}(),a.o=(r,c)=>Object.prototype.hasOwnProperty.call(r,c);var u={};return(()=>{a.d(u,{default:()=>Ct});var r=a(3146),c=a.n(r);const f=function(b){return new RegExp(/<[a-z][\s\S]*>/i).test(b)},_=function(b,h){return Math.floor(Math.random()*(h-b+1))+b};var g="TYPE_CHARACTER",k="REMOVE_CHARACTER",O="REMOVE_ALL",E="REMOVE_LAST_VISIBLE_NODE",F="PAUSE_FOR",Y="CALL_FUNCTION",ie="ADD_HTML_TAG_ELEMENT",ee="CHANGE_DELETE_SPEED",W="CHANGE_DELAY",Q="CHANGE_CURSOR",q="PASTE_STRING",X="HTML_TAG";function ae(b){return ae=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(h){return typeof h}:function(h){return h&&typeof Symbol=="function"&&h.constructor===Symbol&&h!==Symbol.prototype?"symbol":typeof h},ae(b)}function de(b,h){var y=Object.keys(b);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(b);h&&(m=m.filter(function(Z){return Object.getOwnPropertyDescriptor(b,Z).enumerable})),y.push.apply(y,m)}return y}function te(b){for(var h=1;h<arguments.length;h++){var y=arguments[h]!=null?arguments[h]:{};h%2?de(Object(y),!0).forEach(function(m){D(b,m,y[m])}):Object.getOwnPropertyDescriptors?Object.defineProperties(b,Object.getOwnPropertyDescriptors(y)):de(Object(y)).forEach(function(m){Object.defineProperty(b,m,Object.getOwnPropertyDescriptor(y,m))})}return b}function ne(b){return function(h){if(Array.isArray(h))return Se(h)}(b)||function(h){if(typeof Symbol<"u"&&h[Symbol.iterator]!=null||h["@@iterator"]!=null)return Array.from(h)}(b)||function(h,y){if(h){if(typeof h=="string")return Se(h,y);var m={}.toString.call(h).slice(8,-1);return m==="Object"&&h.constructor&&(m=h.constructor.name),m==="Map"||m==="Set"?Array.from(h):m==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(m)?Se(h,y):void 0}}(b)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function Se(b,h){(h==null||h>b.length)&&(h=b.length);for(var y=0,m=Array(h);y<h;y++)m[y]=b[y];return m}function _t(b,h){for(var y=0;y<h.length;y++){var m=h[y];m.enumerable=m.enumerable||!1,m.configurable=!0,"value"in m&&(m.writable=!0),Object.defineProperty(b,Oe(m.key),m)}}function D(b,h,y){return(h=Oe(h))in b?Object.defineProperty(b,h,{value:y,enumerable:!0,configurable:!0,writable:!0}):b[h]=y,b}function Oe(b){var h=function(y){if(ae(y)!="object"||!y)return y;var m=y[Symbol.toPrimitive];if(m!==void 0){var Z=m.call(y,"string");if(ae(Z)!="object")return Z;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(y)}(b);return ae(h)=="symbol"?h:h+""}const Ct=function(){function b(m,Z){var o=this;if(function(w,C){if(!(w instanceof C))throw new TypeError("Cannot call a class as a function")}(this,b),D(this,"state",{cursorAnimation:null,lastFrameTime:null,pauseUntil:null,eventQueue:[],eventLoop:null,eventLoopPaused:!1,reverseCalledEvents:[],calledEvents:[],visibleNodes:[],initialOptions:null,elements:{container:null,wrapper:document.createElement("span"),cursor:document.createElement("span")}}),D(this,"options",{strings:null,cursor:"|",delay:"natural",pauseFor:1500,deleteSpeed:"natural",loop:!1,autoStart:!1,devMode:!1,skipAddStyles:!1,wrapperClassName:"Typewriter__wrapper",cursorClassName:"Typewriter__cursor",stringSplitter:null,onCreateTextNode:null,onRemoveNode:null}),D(this,"setupWrapperElement",function(){o.state.elements.container&&(o.state.elements.wrapper.className=o.options.wrapperClassName,o.state.elements.cursor.className=o.options.cursorClassName,o.state.elements.cursor.innerHTML=o.options.cursor,o.state.elements.container.innerHTML="",o.state.elements.container.appendChild(o.state.elements.wrapper),o.state.elements.container.appendChild(o.state.elements.cursor))}),D(this,"start",function(){return o.state.eventLoopPaused=!1,o.runEventLoop(),o}),D(this,"pause",function(){return o.state.eventLoopPaused=!0,o}),D(this,"stop",function(){return o.state.eventLoop&&((0,r.cancel)(o.state.eventLoop),o.state.eventLoop=null),o}),D(this,"pauseFor",function(w){return o.addEventToQueue(F,{ms:w}),o}),D(this,"typeOutAllStrings",function(){return typeof o.options.strings=="string"?(o.typeString(o.options.strings).pauseFor(o.options.pauseFor),o):(o.options.strings.forEach(function(w){o.typeString(w).pauseFor(o.options.pauseFor).deleteAll(o.options.deleteSpeed)}),o)}),D(this,"typeString",function(w){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(f(w))return o.typeOutHTMLString(w,C);if(w){var U=(o.options||{}).stringSplitter,B=typeof U=="function"?U(w):w.split("");o.typeCharacters(B,C)}return o}),D(this,"pasteString",function(w){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;return f(w)?o.typeOutHTMLString(w,C,!0):(w&&o.addEventToQueue(q,{character:w,node:C}),o)}),D(this,"typeOutHTMLString",function(w){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null,U=arguments.length>2?arguments[2]:void 0,B=function(he){var we=document.createElement("div");return we.innerHTML=he,we.childNodes}(w);if(B.length>0)for(var T=0;T<B.length;T++){var J=B[T],ce=J.innerHTML;J&&J.nodeType!==3?(J.innerHTML="",o.addEventToQueue(ie,{node:J,parentNode:C}),U?o.pasteString(ce,J):o.typeString(ce,J)):J.textContent&&(U?o.pasteString(J.textContent,C):o.typeString(J.textContent,C))}return o}),D(this,"deleteAll",function(){var w=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"natural";return o.addEventToQueue(O,{speed:w}),o}),D(this,"changeDeleteSpeed",function(w){if(!w)throw new Error("Must provide new delete speed");return o.addEventToQueue(ee,{speed:w}),o}),D(this,"changeDelay",function(w){if(!w)throw new Error("Must provide new delay");return o.addEventToQueue(W,{delay:w}),o}),D(this,"changeCursor",function(w){if(!w)throw new Error("Must provide new cursor");return o.addEventToQueue(Q,{cursor:w}),o}),D(this,"deleteChars",function(w){if(!w)throw new Error("Must provide amount of characters to delete");for(var C=0;C<w;C++)o.addEventToQueue(k);return o}),D(this,"callFunction",function(w,C){if(!w||typeof w!="function")throw new Error("Callback must be a function");return o.addEventToQueue(Y,{cb:w,thisArg:C}),o}),D(this,"typeCharacters",function(w){var C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!w||!Array.isArray(w))throw new Error("Characters must be an array");return w.forEach(function(U){o.addEventToQueue(g,{character:U,node:C})}),o}),D(this,"removeCharacters",function(w){if(!w||!Array.isArray(w))throw new Error("Characters must be an array");return w.forEach(function(){o.addEventToQueue(k)}),o}),D(this,"addEventToQueue",function(w,C){var U=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return o.addEventToStateProperty(w,C,U,"eventQueue")}),D(this,"addReverseCalledEvent",function(w,C){var U=arguments.length>2&&arguments[2]!==void 0&&arguments[2];return o.options.loop?o.addEventToStateProperty(w,C,U,"reverseCalledEvents"):o}),D(this,"addEventToStateProperty",function(w,C){var U=arguments.length>2&&arguments[2]!==void 0&&arguments[2],B=arguments.length>3?arguments[3]:void 0,T={eventName:w,eventArgs:C||{}};return o.state[B]=U?[T].concat(ne(o.state[B])):[].concat(ne(o.state[B]),[T]),o}),D(this,"runEventLoop",function(){o.state.lastFrameTime||(o.state.lastFrameTime=Date.now());var w=Date.now(),C=w-o.state.lastFrameTime;if(!o.state.eventQueue.length){if(!o.options.loop)return;o.state.eventQueue=ne(o.state.calledEvents),o.state.calledEvents=[],o.options=te({},o.state.initialOptions)}if(o.state.eventLoop=c()(o.runEventLoop),!o.state.eventLoopPaused){if(o.state.pauseUntil){if(w<o.state.pauseUntil)return;o.state.pauseUntil=null}var U,B=ne(o.state.eventQueue),T=B.shift();if(!(C<=(U=T.eventName===E||T.eventName===k?o.options.deleteSpeed==="natural"?_(40,80):o.options.deleteSpeed:o.options.delay==="natural"?_(120,160):o.options.delay))){var J=T.eventName,ce=T.eventArgs;switch(o.logInDevMode({currentEvent:T,state:o.state,delay:U}),J){case q:case g:var he=ce.character,we=ce.node,je=document.createTextNode(he),pe=je;o.options.onCreateTextNode&&typeof o.options.onCreateTextNode=="function"&&(pe=o.options.onCreateTextNode(he,je)),pe&&(we?we.appendChild(pe):o.state.elements.wrapper.appendChild(pe)),o.state.visibleNodes=[].concat(ne(o.state.visibleNodes),[{type:"TEXT_NODE",character:he,node:pe}]);break;case k:B.unshift({eventName:E,eventArgs:{removingCharacterNode:!0}});break;case F:var Vt=T.eventArgs.ms;o.state.pauseUntil=Date.now()+parseInt(Vt);break;case Y:var Ue=T.eventArgs,Dt=Ue.cb,Tt=Ue.thisArg;Dt.call(Tt,{elements:o.state.elements});break;case ie:var Be=T.eventArgs,ke=Be.node,_e=Be.parentNode;_e?_e.appendChild(ke):o.state.elements.wrapper.appendChild(ke),o.state.visibleNodes=[].concat(ne(o.state.visibleNodes),[{type:X,node:ke,parentNode:_e||o.state.elements.wrapper}]);break;case O:var Et=o.state.visibleNodes,Ce=ce.speed,ge=[];Ce&&ge.push({eventName:ee,eventArgs:{speed:Ce,temp:!0}});for(var Re=0,It=Et.length;Re<It;Re++)ge.push({eventName:E,eventArgs:{removingCharacterNode:!1}});Ce&&ge.push({eventName:ee,eventArgs:{speed:o.options.deleteSpeed,temp:!0}}),B.unshift.apply(B,ge);break;case E:var Nt=T.eventArgs.removingCharacterNode;if(o.state.visibleNodes.length){var Ve=o.state.visibleNodes.pop(),At=Ve.type,be=Ve.node,Lt=Ve.character;o.options.onRemoveNode&&typeof o.options.onRemoveNode=="function"&&o.options.onRemoveNode({node:be,character:Lt}),be&&be.parentNode.removeChild(be),At===X&&Nt&&B.unshift({eventName:E,eventArgs:{}})}break;case ee:o.options.deleteSpeed=T.eventArgs.speed;break;case W:o.options.delay=T.eventArgs.delay;break;case Q:o.options.cursor=T.eventArgs.cursor,o.state.elements.cursor.innerHTML=T.eventArgs.cursor}o.options.loop&&(T.eventName===E||T.eventArgs&&T.eventArgs.temp||(o.state.calledEvents=[].concat(ne(o.state.calledEvents),[T]))),o.state.eventQueue=B,o.state.lastFrameTime=w}}}),m)if(typeof m=="string"){var Pe=document.querySelector(m);if(!Pe)throw new Error("Could not find container element");this.state.elements.container=Pe}else this.state.elements.container=m;Z&&(this.options=te(te({},this.options),Z)),this.state.initialOptions=te({},this.options),this.init()}var h,y;return h=b,(y=[{key:"init",value:function(){var m,Z;this.setupWrapperElement(),this.addEventToQueue(Q,{cursor:this.options.cursor},!0),this.addEventToQueue(O,null,!0),!window||window.___TYPEWRITER_JS_STYLES_ADDED___||this.options.skipAddStyles||(m=".Typewriter__cursor{-webkit-animation:Typewriter-cursor 1s infinite;animation:Typewriter-cursor 1s infinite;margin-left:1px}@-webkit-keyframes Typewriter-cursor{0%{opacity:0}50%{opacity:1}100%{opacity:0}}@keyframes Typewriter-cursor{0%{opacity:0}50%{opacity:1}100%{opacity:0}}",(Z=document.createElement("style")).appendChild(document.createTextNode(m)),document.head.appendChild(Z),window.___TYPEWRITER_JS_STYLES_ADDED___=!0),this.options.autoStart===!0&&this.options.strings&&this.typeOutAllStrings().start()}},{key:"logInDevMode",value:function(m){this.options.devMode&&console.log(m)}}])&&_t(h.prototype,y),Object.defineProperty(h,"prototype",{writable:!1}),b}()})(),u.default})())})(ht);var Pn=ht.exports;const Je=On(Pn),jn=[{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"}],Ge={quotes:jn},Ye={text:"点击此处可以查看 Classworks 用户群里沙雕群友们的发言",author:"点击后会复制当前句子到剪贴板中"},Xe={main:{delay:50,deleteSpeed:100},source:{delay:10,deleteSpeed:10,cursor:""}},Un={name:"EchoChamberCard",components:{SettingsCard:z},data:()=>({typewriter:null,sourceWriter:null,currentQuote:Ye,hasClicked:!1}),mounted(){this.initTypewriters()},methods:{initTypewriters(){this.typewriter=new Je(this.$refs.typewriter,Xe.main),this.sourceWriter=new Je(this.$refs.sourceWriter,Xe.source),this.typeQuote(Ye)},typeQuote(n){this.typewriter.deleteAll(30).typeString(n.text).start(),n.author&&this.sourceWriter.deleteAll(20).typeString(n.author).start()},async handleClick(){this.hasClicked||(this.hasClicked=!0),await this.copyToClipboard(),this.currentQuote=this.getRandomQuote(),this.typeQuote(this.currentQuote)},getRandomQuote(){return Ge.quotes[Math.floor(Math.random()*Ge.quotes.length)]},async copyToClipboard(){if(!this.currentQuote)return;const{text:n,author:e,contributor:i,link:d}=this.currentQuote,a=[n,e&&`作者:${e}`,i&&`贡献者:${i}`,(d||i)&&`来源:${d||`https://github.com/${i}`}`].filter(Boolean);try{await navigator.clipboard.writeText(a.join(`
`))}catch(u){console.error("复制失败:",u)}}},beforeUnmount(){[this.typewriter,this.sourceWriter].forEach(n=>n==null?void 0:n.stop())}},Bn={ref:"typewriter",class:"typewriter-text"},Rn={ref:"sourceWriter",class:"source-text"};function Fn(n,e,i,d,a,u){const r=z;return p(),S(r,{border:"",title:"回声洞",icon:"mdi-thought-bubble",onClick:u.handleClick},{default:s(()=>[t($,null,{default:s(()=>[V("div",Bn,null,512),V("div",Rn,null,512)]),_:1}),t(Kt,{name:"fade"},{default:s(()=>{var c;return[(c=n.currentQuote)!=null&&c.contributor?(p(),S(me,{key:0,class:"contributor"},{default:s(()=>[t(tt,{start:""},{default:s(()=>[t(nt,{src:`https://github.com/${n.currentQuote.contributor}.png`},null,8,["src"])]),_:1}),l(" "+I(n.currentQuote.contributor),1)]),_:1})):j("",!0)]}),_:1})]),_:1},8,["onClick"])}const wt=K(Un,[["render",Fn],["__scopeId","data-v-5c15976c"]]),Kn={name:"UnsavedWarning",props:{show:Boolean,message:{type:String,default:"未保存"}}},zn={class:"warning-container"};function Qn(n,e,i,d,a,u){return p(),M("div",zn,[i.show?(p(),S(me,{key:0,color:"warning",size:"small",class:"warning-chip"},{default:s(()=>[l(I(i.message),1)]),_:1})):j("",!0)])}const pt=K(Kn,[["render",Qn],["__scopeId","data-v-0668f179"]]),Hn=rt({disabled:Boolean,modelValue:{type:Boolean,default:null},...Ht()},"VHover"),qn=at()({name:"VHover",props:Hn(),emits:{"update:modelValue":n=>!0},setup(n,e){let{slots:i}=e;const d=zt(n,"modelValue"),{runOpenDelay:a,runCloseDelay:u}=Qt(n,r=>!n.disabled&&(d.value=r));return()=>{var r;return(r=i.default)==null?void 0:r.call(i,{isHovering:d.value,props:{onMouseenter:a,onMouseleave:u}})}}}),Wn={name:"StudentListCard",components:{UnsavedWarning:pt},props:{modelValue:{type:Object,required:!0,default:()=>({list:[],text:"",advanced:!1})},loading:Boolean,error:String,isMobile:Boolean,unsavedChanges:Boolean},data(){return{newStudentName:"",editState:{index:-1,name:""}}},emits:["update:modelValue","save","reload"],computed:{text:{get(){return this.modelValue.text},set(n){this.handleTextInput(n)}}},methods:{toggleAdvanced(){const n=!this.modelValue.advanced;this.updateModelValue({advanced:n,text:n?this.modelValue.list.join(`
`):this.modelValue.text,list:this.modelValue.list})},updateModelValue(n){this.$emit("update:modelValue",{...this.modelValue,...n})},addStudent(){const n=this.newStudentName.trim();if(!n||this.modelValue.list.includes(n))return;const e=[...this.modelValue.list,n];this.updateModelValue({list:e,text:e.join(`
`)}),this.newStudentName=""},removeStudent(n){const e=this.modelValue.list.filter((i,d)=>d!==n);this.updateModelValue({list:e,text:e.join(`
`)})},moveStudent(n,e){const i=[...this.modelValue.list];let d;if(e==="top"?d=0:e==="up"?d=n-1:d=n+1,d>=0&&d<i.length){const[a]=i.splice(n,1);i.splice(d,0,a),this.updateModelValue({list:i,text:i.join(`
`)})}},startEdit(n,e){this.editState={index:n,name:e}},saveEdit(){const{index:n,name:e}=this.editState;if(n===-1||!e.trim())return;const i=[...this.modelValue.list];i[n]=e.trim(),this.updateModelValue({list:i,text:i.join(`
`)}),this.editState={index:-1,name:""}},handleClick(n,e){this.isMobile&&this.startEdit(n,e)},handleTextInput(n){const e=n.split(`
`).map(i=>i.trim()).filter(i=>i);this.updateModelValue({text:n,list:e})},sortStudentsByPinyin(){const n=[...this.modelValue.list].sort((e,i)=>{const d=Fe(e,{toneType:"none",mode:"surname"}),a=Fe(i,{toneType:"none",mode:"surname"});return d.localeCompare(a)});this.updateModelValue({list:n,text:n.join(`
`)})}}},Jn={key:0},Gn=["onClick"],Yn={key:1,class:"pt-2"};function Xn(n,e,i,d,a,u){const r=pt;return p(),S(se,{border:"",color:i.unsavedChanges?"warning-subtle":void 0,class:He({"unsaved-changes":i.unsavedChanges})},{default:s(()=>[t(Me,null,{prepend:s(()=>[t(N,{icon:"mdi-account-group",size:"large",class:"mr-2"})]),append:s(()=>[t(r,{show:i.unsavedChanges,message:"有未保存的更改"},null,8,["show"]),t(x,{"prepend-icon":"mdi-sort-alphabetical-variant",variant:"text",class:"mr-2",onClick:u.sortStudentsByPinyin,disabled:i.modelValue.list.length===0},{default:s(()=>e[6]||(e[6]=[l(" 按姓名首字母排序 ")])),_:1},8,["onClick","disabled"]),t(x,{color:i.modelValue.advanced?"primary":void 0,variant:"text","prepend-icon":"mdi-code-braces",onClick:u.toggleAdvanced},{default:s(()=>[l(I(i.modelValue.advanced?"返回基础编辑":"高级编辑"),1)]),_:1},8,["color","onClick"])]),default:s(()=>[t(le,{class:"text-h6"},{default:s(()=>e[5]||(e[5]=[l("学生列表")])),_:1})]),_:1}),t($,null,{default:s(()=>[i.loading?(p(),S(it,{key:0,indeterminate:"",color:"primary",class:"mb-4"})):j("",!0),i.error?(p(),S(ye,{key:1,type:"error",variant:"tonal",closable:"",class:"mb-4"},{default:s(()=>[l(I(i.error),1)]),_:1})):j("",!0),t(ot,null,{default:s(()=>[i.modelValue.advanced?(p(),M("div",Yn,[t(lt,{modelValue:u.text,"onUpdate:modelValue":e[2]||(e[2]=c=>u.text=c),label:"批量编辑学生列表",placeholder:"每行输入一个学生姓名",hint:"使用文本编辑模式批量编辑学生名单,保存时会自动去除空行","persistent-hint":"",variant:"outlined",rows:"10",onInput:u.handleTextInput},null,8,["modelValue","onInput"])])):(p(),M("div",Jn,[t(fe,{class:"mb-6"},{default:s(()=>[t(R,{cols:"12",sm:"6",md:"4"},{default:s(()=>[t(oe,{modelValue:a.newStudentName,"onUpdate:modelValue":e[0]||(e[0]=c=>a.newStudentName=c),label:"添加学生",placeholder:"输入学生姓名后回车添加","prepend-inner-icon":"mdi-account-plus",variant:"outlined","hide-details":"",class:"mb-4",onKeyup:Qe(u.addStudent,["enter"])},{append:s(()=>[t(x,{icon:"mdi-plus",variant:"text",color:"primary",disabled:!a.newStudentName.trim(),onClick:u.addStudent},null,8,["disabled","onClick"])]),_:1},8,["modelValue","onKeyup"])]),_:1})]),_:1}),t(fe,null,{default:s(()=>[(p(!0),M(ue,null,xe(i.modelValue.list,(c,f)=>(p(),S(R,{key:f,cols:"12",sm:"6",md:"4",lg:"3"},{default:s(()=>[t(qn,null,{default:s(({isHovering:_,props:g})=>[t(se,De({ref_for:!0},g,{elevation:i.isMobile?1:_?4:1,class:"student-card",border:""}),{default:s(()=>[t($,{class:"d-flex align-center pa-3"},{default:s(()=>[t(ut,{location:"bottom","open-on-hover":!i.isMobile},{activator:s(({props:k})=>[t(x,De({variant:"tonal",size:"small",class:"mr-3 font-weight-medium",ref_for:!0},k),{default:s(()=>[l(I(f+1),1)]),_:2},1040)]),default:s(()=>[t(G,{density:"compact",nav:""},{default:s(()=>[t(A,{"prepend-icon":"mdi-arrow-up-bold",disabled:f===0,onClick:k=>u.moveStudent(f,"top")},{default:s(()=>e[7]||(e[7]=[l(" 置顶 ")])),_:2},1032,["disabled","onClick"]),t(L),t(A,{"prepend-icon":"mdi-arrow-up",disabled:f===0,onClick:k=>u.moveStudent(f,"up")},{default:s(()=>e[8]||(e[8]=[l(" 上移 ")])),_:2},1032,["disabled","onClick"]),t(A,{"prepend-icon":"mdi-arrow-down",disabled:f===i.modelValue.list.length-1,onClick:k=>u.moveStudent(f,"down")},{default:s(()=>e[9]||(e[9]=[l(" 下移 ")])),_:2},1032,["disabled","onClick"])]),_:2},1024)]),_:2},1032,["open-on-hover"]),a.editState.index===f?(p(),S(oe,{key:0,modelValue:a.editState.name,"onUpdate:modelValue":e[1]||(e[1]=k=>a.editState.name=k),density:"compact",variant:"underlined","hide-details":"",class:"flex-grow-1",autofocus:"",onKeyup:Qe(u.saveEdit,["enter"]),onBlur:u.saveEdit},null,8,["modelValue","onKeyup","onBlur"])):(p(),M("span",{key:1,class:"text-body-1 flex-grow-1",onClick:k=>u.handleClick(f,c)},I(c),9,Gn)),V("div",{class:He(["d-flex gap-1 action-buttons",{"opacity-100":_||i.isMobile}])},[t(x,{icon:"mdi-pencil",variant:"text",color:"primary",size:"small",onClick:k=>u.startEdit(f,c)},null,8,["onClick"]),t(x,{icon:"mdi-delete",variant:"text",color:"error",size:"small",onClick:k=>u.removeStudent(f)},null,8,["onClick"])],2)]),_:2},1024)]),_:2},1040,["elevation"])]),_:2},1024)]),_:2},1024))),128))]),_:1})]))]),_:1}),t(fe,{class:"mt-6"},{default:s(()=>[t(R,{cols:"12",class:"d-flex gap-2"},{default:s(()=>[t(x,{color:"primary","prepend-icon":"mdi-content-save",size:"large",loading:i.loading,disabled:i.loading,onClick:e[3]||(e[3]=c=>n.$emit("save"))},{default:s(()=>e[10]||(e[10]=[l(" 保存名单 ")])),_:1},8,["loading","disabled"]),t(x,{color:"error",variant:"outlined","prepend-icon":"mdi-refresh",size:"large",loading:i.loading,disabled:i.loading,onClick:e[4]||(e[4]=c=>n.$emit("reload"))},{default:s(()=>e[11]||(e[11]=[l(" 重载名单 ")])),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1})]),_:1},8,["color","class"])}const ft=K(Wn,[["render",Xn],["__scopeId","data-v-9de1f8ce"]]),Zn={name:"SettingsLinkGenerator",data(){return{selectedItems:[],generatedLink:"",linkCopied:!1,search:"",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 n=ve(),e=[];for(const[i,d]of Object.entries(Te)){if(d.requireDeveloper&&!n["developer.enabled"])continue;const a=n[i]!==d.default;e.push({key:i,description:d.description||i,value:n[i],icon:d.icon||"mdi-cog",isChanged:a,defaultValue:d.default})}return e.sort((i,d)=>i.key.localeCompare(d.key))},filteredItems(){if(!this.search)return this.settingItems;const n=this.search.toLowerCase();return n==="已修改"?this.settingItems.filter(e=>e.isChanged):n==="是"||n==="否"?this.settingItems.filter(e=>typeof e.value=="boolean"&&(n==="是"?e.value:!e.value)):this.settingItems.filter(e=>{const i=e.description.toLowerCase(),d=e.key.toLowerCase(),a=String(e.value).toLowerCase(),u=e.isChanged?"已修改":"默认";return i.includes(n)||d.includes(n)||a.includes(n)||u.includes(n)})},hasDisplaySettings(){return this.selectedItems.some(n=>n.startsWith("display."))},hasEditSettings(){return this.selectedItems.some(n=>n.startsWith("edit."))},hasServerSettings(){return this.selectedItems.some(n=>n.startsWith("server."))},hasChangedSettings(){const n=ve();return this.selectedItems.some(e=>{const i=Te[e];return i&&n[e]!==i.default})}},methods:{handleSelectionChange(n){this.selectedItems=n.map(e=>e.key),this.generateLink()},generateLink(){const n=`${window.location.protocol}//${window.location.host}/`,e=ve(),i={};for(const d of this.selectedItems)i[d]=e[d];if(Object.keys(i).length===0){this.generatedLink=n;return}try{const d=JSON.stringify(i),u=new TextEncoder().encode(d),c={config:btoa(Array.from(u).map(k=>String.fromCharCode(k)).join(""))},_=new URLSearchParams(window.location.search).get("date");_&&(c.date=_);const g=new URLSearchParams(c).toString();this.generatedLink=`${n}?${g}`}catch(d){console.error("生成链接失败:",d),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(n){console.error("复制链接失败:",n)}},resetSelection(){this.selectedItems=[],this.generatedLink="",this.linkCopied=!1},selectAll(){this.selectedItems=this.settingItems.map(n=>n.key),this.generateLink()},selectDataSourceSettings(){const n=this.settingItems.filter(e=>e.key.startsWith("server.")).map(e=>e.key);this.selectedItems=n,this.generateLink()},selectChangedSettings(){const n=this.settingItems.filter(e=>e.isChanged).map(e=>e.key);this.selectedItems=n,this.generateLink()},selectByPrefix(n){const e=this.settingItems.filter(i=>i.key.startsWith(`${n}.`)).map(i=>i.key);this.selectedItems=e},autoGenerateLink(){this.selectedItems.length>0?this.generateLink():this.generatedLink=""},getSettingDescription(n){const e=this.settingItems.find(i=>i.key===n);return e?e.description:n}},watch:{selectedItems:{handler(){this.autoGenerateLink()},deep:!0}}},$n={class:"d-flex mb-3 gap-2 flex-wrap"},es={class:"d-flex align-center mt-3 mb-3 flex-wrap gap-2"},ts={class:"d-flex align-center"},ns={key:0},ss={key:1},is={class:"text-caption text-grey"};function as(n,e,i,d,a,u){return p(),S(se,{border:"",class:"settings-link-generator mb-4"},{default:s(()=>[t(le,{class:"text-h6"},{default:s(()=>[t(N,{start:"",icon:"mdi-link-variant",class:"mr-2"}),e[3]||(e[3]=l(" 设置分享 "))]),_:1}),t($,null,{default:s(()=>[V("div",$n,[t(x,{size:"small",variant:"tonal",color:"primary","prepend-icon":"mdi-select-all",onClick:u.selectAll},{default:s(()=>e[4]||(e[4]=[l(" 全选 ")])),_:1},8,["onClick"]),t(x,{size:"small",variant:"tonal",color:"primary","prepend-icon":"mdi-server-network",onClick:u.selectDataSourceSettings},{default:s(()=>e[5]||(e[5]=[l(" 数据源设置 ")])),_:1},8,["onClick"]),t(x,{size:"small",variant:"tonal",color:"primary","prepend-icon":"mdi-compare",onClick:u.selectChangedSettings},{default:s(()=>e[6]||(e[6]=[l(" 已变更设置 ")])),_:1},8,["onClick"]),t(x,{size:"small",variant:"tonal",color:"error","prepend-icon":"mdi-select-remove",onClick:u.resetSelection},{default:s(()=>e[7]||(e[7]=[l(" 取消选择 ")])),_:1},8,["onClick"])]),V("div",es,[t(me,{color:"primary",class:"mr-2"},{default:s(()=>[l(" 已选 "+I(a.selectedItems.length)+" 项设置 ",1)]),_:1}),a.selectedItems.length>0?(p(!0),M(ue,{key:0},xe(a.selectedItems,r=>(p(),S(me,{key:r,size:"small",class:"mr-1",variant:"text"},{default:s(()=>[l(I(u.getSettingDescription(r)),1)]),_:2},1024))),128)):j("",!0)]),t(oe,{modelValue:a.generatedLink,"onUpdate:modelValue":e[0]||(e[0]=r=>a.generatedLink=r),label:"生成的链接",readonly:"",variant:"outlined",class:"mb-2","append-inner-icon":a.linkCopied?"mdi-check":"mdi-content-copy","onClick:appendInner":u.copyLink},null,8,["modelValue","append-inner-icon","onClick:appendInner"]),t(an,{variant:"accordion"},{default:s(()=>[t(rn,null,{default:s(()=>[t(on,null,{default:s(()=>e[8]||(e[8]=[l(" 显示设置列表详情 ")])),_:1}),t(un,null,{default:s(()=>[t(en,{"items-per-page":u.settingItems.length,headers:a.headers,items:u.filteredItems,"item-value":"key",modelValue:a.selectedItems,"onUpdate:modelValue":e[2]||(e[2]=r=>a.selectedItems=r),"show-select":"",density:"compact",class:"rounded setting-table","onUpdate:selected":u.handleSelectionChange,"sort-by":[{key:"isChanged",order:"desc"}]},{top:s(()=>[t(oe,{modelValue:a.search,"onUpdate:modelValue":e[1]||(e[1]=r=>a.search=r),label:"搜索设置","prepend-inner-icon":"mdi-magnify","single-line":"","hide-details":"",class:"mb-4"},null,8,["modelValue"])]),"item.description":s(({item:r})=>[V("div",ts,[t(N,{size:"small",icon:r.icon,class:"mr-2"},null,8,["icon"]),l(" "+I(r.description),1)])]),"item.value":s(({item:r})=>[typeof r.value=="boolean"?(p(),M("span",ns,I(r.value?"是":"否"),1)):(p(),M("span",ss,I(r.value),1))]),"item.key":s(({item:r})=>[V("span",is,I(r.key),1)]),"item.isChanged":s(({item:r})=>[t(me,{size:"x-small",color:r.isChanged?"warning":"success",text:r.isChanged?"已修改":"默认",density:"compact"},null,8,["color","text"])]),_:2},1032,["items-per-page","headers","items","modelValue","onUpdate:selected"])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})}const mt=K(Zn,[["render",as]]),rs={name:"ThemeSettingsCard",components:{SettingsCard:z},data(){return{localTheme:v("theme.mode")}},watch:{localTheme(n){Ne("theme.mode",n),this.updateTheme(n)}},setup(){return{theme:qt()}},methods:{updateTheme(n){this.theme.global.name.value=n}}};function os(n,e,i,d,a,u){const r=z;return p(),S(r,{title:"主题设置",icon:"mdi-palette"},{default:s(()=>[t(G,null,{default:s(()=>[t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-theme-light-dark",class:"mr-3"})]),append:s(()=>[t(Wt,{modelValue:a.localTheme,"onUpdate:modelValue":e[0]||(e[0]=c=>a.localTheme=c),density:"comfortable",color:"primary"},{default:s(()=>[t(x,{value:"light"},{default:s(()=>[t(N,{icon:"mdi-white-balance-sunny",class:"mr-2"}),e[3]||(e[3]=l(" 明亮 "))]),_:1}),t(x,{value:"dark"},{default:s(()=>[t(N,{icon:"mdi-moon-waning-crescent",class:"mr-2"}),e[4]||(e[4]=l(" 暗黑 "))]),_:1})]),_:1},8,["modelValue"])]),default:s(()=>[t(P,null,{default:s(()=>e[1]||(e[1]=[l("主题模式")])),_:1}),t(H,null,{default:s(()=>e[2]||(e[2]=[l("选择明亮或暗黑主题")])),_:1})]),_:1})]),_:1})]),_:1})}const gt=K(rs,[["render",os]]),us={name:"DisplaySettingsCard",components:{SettingsCard:z,SettingItem:re},data(){return{}}};function ls(n,e,i,d,a,u){const r=re,c=z;return p(),S(c,{title:"显示设置",icon:"mdi-monitor",border:""},{default:s(()=>[t(G,null,{default:s(()=>[t(r,{"setting-key":"display.emptySubjectDisplay"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.dynamicSort"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.showRandomButton"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.showFullscreenButton"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.cardHoverEffect"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.enhancedTouchMode"}),t(L,{class:"my-2"}),t(r,{"setting-key":"display.showAntiScreenBurnCard"})]),_:1})]),_:1})}const bt=K(us,[["render",ls]]),ds=rt({...Yt(),...nn()},"VForm"),vt=at()({name:"VForm",props:ds(),emits:{"update:modelValue":n=>!0,submit:n=>!0},setup(n,e){let{slots:i,emit:d}=e;const a=tn(n),u=Ee();function r(f){f.preventDefault(),a.reset()}function c(f){const _=f,g=a.validate();_.then=g.then.bind(g),_.catch=g.catch.bind(g),_.finally=g.finally.bind(g),d("submit",_),_.defaultPrevented||g.then(k=>{var E;let{valid:O}=k;O&&((E=u.value)==null||E.submit())}),_.preventDefault()}return Jt(()=>{var f;return t("form",{ref:u,class:["v-form",n.class],style:n.style,novalidate:!0,onReset:r,onSubmit:c},[(f=i.default)==null?void 0:f.call(i,a)])}),Gt(a,u)}}),cs={name:"RefreshSettingsCard",components:{SettingsCard:z},data(){return{}}};function hs(n,e,i,d,a,u){const r=re,c=z;return p(),S(c,{title:"刷新设置",icon:"mdi-refresh-circle"},{default:s(()=>[t(vt,null,{default:s(()=>[t(G,null,{default:s(()=>[t(r,{"setting-key":"refresh.auto",title:"自动刷新"}),e[0]||(e[0]=l()),t(L,{class:"my-2"}),t(r,{"setting-key":"refresh.interval",title:"刷新间隔"})]),_:1})]),_:1})]),_:1})}const yt=K(cs,[["render",hs]]),ws={};function ps(n,e,i,d,a,u){const r=re,c=z;return p(),S(c,{title:"编辑设置",icon:"mdi-cog"},{default:s(()=>[t(G,null,{default:s(()=>[t(r,{"setting-key":"edit.autoSave"}),t(L,{class:"my-2"}),t(r,{"setting-key":"edit.blockNonTodayAutoSave"}),t(L,{class:"my-2"}),t(r,{"setting-key":"edit.confirmNonTodaySave"}),t(L,{class:"my-2"}),t(r,{"setting-key":"edit.refreshBeforeEdit"})]),_:1})]),_:1})}const xt=K(ws,[["render",ps]]),fs={name:"DataProviderSettingsCard",components:{SettingsCard:z},data(){return{loading:!1,serverchecktime:{},confirmDialog:!1,confirmTitle:"",confirmMessage:"",confirmAction:null,machineId:null,migrateLoading:!1}},computed:{currentProvider(){return v("server.provider")},isKvProvider(){return this.currentProvider==="kv-local"||this.currentProvider==="kv-server"||this.currentProvider==="classworkscloud"}},async created(){this.machineId=v("device.uuid")},methods:{async checkServerConnection(){this.loading=!0,this.serverchecktime=new Date;try{const n=v("server.domain"),e=v("server.siteKey"),i={Accept:"application/json"};if(e&&(i["x-site-key"]=e),(await ln.get(`${n}/check`,{method:"GET",headers:i})).data.status==="success")this.$message.success("连接成功","服务器连接正常 延迟"+(new Date-this.serverchecktime)+"ms");else throw new Error("服务器响应异常")}catch(n){this.$message.error("连接失败",n.message||"无法连接到服务器")}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(n){this.$message.error("清除失败",n.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(n){this.$message.error("清除失败",n.message)}},async exportData(){try{const n="ClassworksDB",e={indexedDB:{}},i=await new Promise((f,_)=>{const g=window.indexedDB.open(n);g.onerror=()=>_(g.error),g.onsuccess=()=>f(g.result)}),d=Array.from(i.objectStoreNames);for(const f of d){const g=i.transaction(f,"readonly").objectStore(f),k=await new Promise((O,E)=>{const F=g.getAll();F.onerror=()=>E(F.error),F.onsuccess=()=>O(F.result)});e.indexedDB[f]=k}const a=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),u=URL.createObjectURL(a),r=document.createElement("a"),c=new Date().toISOString().split("T")[0];r.href=u,r.download=`homework-indexeddb-${c}.json`,r.click(),URL.revokeObjectURL(u),this.$message.success("导出成功","IndexedDB数据已导出")}catch(n){console.error("导出失败:",n),this.$message.error("导出失败",n.message||"无法导出数据库数据")}},async migrateData(){this.migrateLoading=!0,this.$router.push("/datamigration"),this.migrateLoading=!1},handleConfirm(){this.confirmAction&&this.confirmAction()}}};function ms(n,e,i,d,a,u){const r=z;return p(),S(r,{title:"数据源设置",icon:"mdi-database-cog"},{default:s(()=>[t(G,null,{default:s(()=>[u.currentProvider==="kv-server"||u.currentProvider==="classworkscloud"?(p(),S(A,{key:0},{prepend:s(()=>[t(N,{icon:"mdi-lan-connect",class:"mr-3"})]),append:s(()=>[t(x,{loading:a.loading,variant:"tonal",onClick:u.checkServerConnection},{default:s(()=>e[3]||(e[3]=[l(" 测试连接 ")])),_:1},8,["loading","onClick"])]),default:s(()=>[t(P,null,{default:s(()=>e[2]||(e[2]=[l("检查服务器连接")])),_:1})]),_:1})):j("",!0),u.currentProvider==="kv-local"?(p(),M(ue,{key:1},[t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-database",class:"mr-3"})]),append:s(()=>[t(x,{color:"error",variant:"tonal",onClick:u.confirmClearIndexedDB},{default:s(()=>e[6]||(e[6]=[l(" 清除 ")])),_:1},8,["onClick"])]),default:s(()=>[t(P,null,{default:s(()=>e[4]||(e[4]=[l("清除数据库缓存")])),_:1}),t(H,null,{default:s(()=>e[5]||(e[5]=[l("这将清除所有本地数据库中的数据")])),_:1})]),_:1}),t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-database-export",class:"mr-3"})]),append:s(()=>[t(x,{variant:"tonal",onClick:u.exportData},{default:s(()=>e[8]||(e[8]=[l(" 导出 ")])),_:1},8,["onClick"])]),default:s(()=>[t(P,null,{default:s(()=>e[7]||(e[7]=[l("导出数据库")])),_:1})]),_:1})],64)):j("",!0),t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-database-import",class:"mr-3"})]),append:s(()=>[t(x,{loading:a.migrateLoading,variant:"tonal",onClick:u.migrateData},{default:s(()=>e[11]||(e[11]=[l(" 迁移 ")])),_:1},8,["loading","onClick"])]),default:s(()=>[t(P,null,{default:s(()=>e[9]||(e[9]=[l("迁移旧数据")])),_:1}),t(H,null,{default:s(()=>e[10]||(e[10]=[l("将旧的存储格式数据转移到新的KV存储")])),_:1})]),_:1}),t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-identifier",class:"mr-3"})]),default:s(()=>[t(P,null,{default:s(()=>e[12]||(e[12]=[l("本机唯一标识符")])),_:1}),a.machineId?(p(),S(H,{key:0},{default:s(()=>[l(I(a.machineId),1)]),_:1})):(p(),S(H,{key:1},{default:s(()=>e[13]||(e[13]=[l("正在加载...")])),_:1}))]),_:1}),t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-lan-connect",class:"mr-3"})]),append:s(()=>[t(x,{variant:"tonal",to:"/cachemanagement"},{default:s(()=>e[15]||(e[15]=[l(" 查看 ")])),_:1})]),default:s(()=>[t(P,null,{default:s(()=>e[14]||(e[14]=[l("查看本地缓存")])),_:1})]),_:1})]),_:1}),t(st,{modelValue:a.confirmDialog,"onUpdate:modelValue":e[1]||(e[1]=c=>a.confirmDialog=c),"max-width":"400"},{default:s(()=>[t(se,null,{default:s(()=>[t(le,null,{default:s(()=>[l(I(a.confirmTitle),1)]),_:1}),t($,null,{default:s(()=>[l(I(a.confirmMessage),1)]),_:1}),t(Ae,null,{default:s(()=>[t(Le),t(x,{color:"grey",variant:"text",onClick:e[0]||(e[0]=c=>a.confirmDialog=!1)},{default:s(()=>e[16]||(e[16]=[l("取消")])),_:1}),t(x,{color:"error",variant:"tonal",onClick:u.handleConfirm},{default:s(()=>e[17]||(e[17]=[l("确认")])),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})}const St=K(fs,[["render",ms]]),gs={name:"ServerSettingsCard",components:{SettingsCard:z,SettingItem:re},props:{loading:Boolean},data(){return{}},computed:{currentProvider(){return v("server.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"}}},bs={key:0};function vs(n,e,i,d,a,u){const r=re,c=z;return p(),S(c,{title:"数据源设置",icon:"mdi-database",loading:i.loading},{default:s(()=>[t(vt,null,{default:s(()=>[t(r,{"setting-key":"server.provider",title:"数据提供者"}),u.isKvProvider?(p(),S(ye,{key:0,type:"info",variant:"tonal",class:"my-2"},{default:s(()=>[t(qe,null,{default:s(()=>e[0]||(e[0]=[l("KV 存储系统")])),_:1}),e[2]||(e[2]=V("p",null,"KV存储系统使用本机唯一标识符(UUID)来区分不同设备的数据。",-1)),u.currentProvider==="kv-server"?(p(),M("p",bs,e[1]||(e[1]=[l(" 服务器端点格式: "),V("code",null,"http(s)://服务器域名/",-1),V("br",null,null,-1),l(" 在服务器域名处仅填写基础URL不需要任何路径。 ")]))):j("",!0)]),_:1})):j("",!0),u.isClassworksCloud?(p(),S(ye,{key:1,type:"info",color:"success",variant:"tonal",class:"my-2"},{default:s(()=>[t(qe,null,{default:s(()=>e[3]||(e[3]=[l("Classworks云端存储")])),_:1}),e[4]||(e[4]=V("p",null,"Classworks云端存储是官方提供的存储解决方案自动配置了最优的访问设置。",-1)),e[5]||(e[5]=V("p",null,"使用此选项时,服务器域名和网站令牌将自动配置,无需手动设置。",-1))]),_:1})):j("",!0),t(L,{class:"my-2"}),t(r,{"setting-key":"server.domain",title:"服务器域名",disabled:u.isClassworksCloud},null,8,["disabled"]),t(L,{class:"my-2"}),t(r,{"setting-key":"server.classNumber",title:"班号"}),t(L,{class:"my-2"}),t(r,{"setting-key":"server.siteKey",title:"网站令牌",disabled:u.isClassworksCloud},{description:s(()=>e[6]||(e[6]=[l(" 用于后端验证请求的安全令牌。如需要,请从系统管理员获取。 ")])),_:1},8,["disabled"]),u.useServer?(p(),S(ye,{key:2,type:"info",variant:"tonal",class:"my-2"},{default:s(()=>[t(N,{icon:"mdi-information-outline",class:"mr-2"}),e[7]||(e[7]=V("span",null,[l("网站令牌将作为 "),V("code",null,"x-site-key"),l(" 请求头发送给服务器,用于验证请求的合法性。如果您的服务器需要此验证,请在上方输入有效的令牌。")],-1))]),_:1})):j("",!0),t(L,{class:"my-2"}),t(r,{"setting-key":"device.uuid",title:"设备UUID"})]),_:1})]),_:1},8,["loading"])}const kt=K(gs,[["render",vs]]),ys={name:"Settings",components:{ServerSettingsCard:kt,EditSettingsCard:xt,RefreshSettingsCard:yt,DisplaySettingsCard:bt,MessageLog:Ze,SettingsCard:z,StudentListCard:ft,AboutCard:ct,DataProviderSettingsCard:St,ThemeSettingsCard:gt,EchoChamberCard:wt,SettingsExplorer:dt,SettingsLinkGenerator:mt},setup(){const{mobile:n}=Zt();return{isMobile:n}},data(){return{settings:{server:{domain:v("server.domain"),classNumber:v("server.classNumber"),provider:v("server.provider")},refresh:{auto:v("refresh.auto"),interval:v("refresh.interval")},font:{size:v("font.size")},edit:{autoSave:v("edit.autoSave"),blockNonTodayAutoSave:v("edit.blockNonTodayAutoSave"),confirmNonTodaySave:v("edit.confirmNonTodaySave"),refreshBeforeEdit:v("edit.refreshBeforeEdit")},display:{emptySubjectDisplay:v("display.emptySubjectDisplay"),dynamicSort:v("display.dynamicSort"),showRandomButton:v("display.showRandomButton"),showFullscreenButton:v("display.showFullscreenButton")},developer:{enabled:v("developer.enabled"),showDebugConfig:v("developer.showDebugConfig")},message:{showSidebar:v("message.showSidebar"),maxActiveMessages:v("message.maxActiveMessages"),timeout:v("message.timeout"),saveHistory:v("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}},watch:{settings:{handler(n){this.handleSettingsChange(n)},deep:!0},studentData:{handler(n){this.lastSavedData&&(this.hasUnsavedChanges=JSON.stringify(n.list)!==JSON.stringify(this.lastSavedData)),this.studentData.text=n.list.join(`
`)},deep:!0}},mounted(){this.loadAllSettings(),this.unwatchSettings=et(()=>{this.loadAllSettings()}),this.loadStudents(),this.refreshDebugConfig(),this.settings.developer.enabled||(this.settings.developer.showDebugConfig=!1,this.handleSettingsChange(this.settings))},beforeUnmount(){this.unwatchSettings&&this.unwatchSettings()},methods:{loadAllSettings(){Object.keys(this.settings).forEach(n=>{Object.keys(this.settings[n]).forEach(e=>{this.settings[n][e]=v(`${n}.${e}`)})})},handleSettingsChange(n){this.settingsChangeTimeout&&clearTimeout(this.settingsChangeTimeout),this.settingsChangeTimeout=setTimeout(()=>{Object.entries(n).forEach(([e,i])=>{Object.entries(i).forEach(([d,a])=>{const u=`${e}.${d}`,r=v(u);a!==r&&(Ne(u,a)?this.showMessage("设置已更新",`${u} 已保存`):(this.showError("保存失败",`${u} 设置失败`),this.settings[e][d]=r))})})},100)},showMessage(n,e="",i="success"){this.$message[i](n,e)},showError(n,e=""){this.$message.error(n,e)},async loadStudents(){this.studentsError=null;try{if(this.loading.students=!0,!v("server.classNumber"))throw new Error("请先设置班号");try{const i=await Ke.loadData("classworks-list-main");if(i.success&&Array.isArray(i.data)){this.studentData.list=i.data.map(d=>d.name),this.studentData.text=this.studentData.list.join(`
`),this.lastSavedData=[...this.studentData.list],this.hasUnsavedChanges=!1;return}}catch(i){console.warn("Failed to load student list from dedicated key, falling back to config",i)}const e=await Ut.local.loadConfig();e.success&&e.data&&Array.isArray(e.data.studentList)?(this.studentData.list=e.data.studentList,this.studentData.text=e.data.studentList.join(`
`),this.lastSavedData=[...e.data.studentList],this.hasUnsavedChanges=!1):(this.studentData.list=[],this.studentData.text="",this.lastSavedData=[])}catch(n){console.error("加载学生列表失败:",n),this.studentsError=n.message||"加载失败,请检查设置",this.showError("加载失败",this.studentsError)}finally{this.loading.students=!1}},async saveStudents(){var n;try{if(!v("server.classNumber"))throw new Error("请先设置班号");const i=this.studentData.list.map((a,u)=>({id:u+1,name:a})),d=await Ke.saveData("classworks-list-main",i);if(!d.success)throw new Error(((n=d.error)==null?void 0:n.message)||"保存失败");this.lastSavedData=[...this.studentData.list],this.hasUnsavedChanges=!1,this.showMessage("保存成功","学生列表已更新")}catch(e){console.error("保存学生列表失败:",e),this.showError("保存失败",e.message||"请重试")}},handleStudentDataChange(n){JSON.stringify(n.list)!==JSON.stringify(this.studentData.list)&&(this.studentData={...n},this.hasUnsavedChanges=!0)},saveEdit(){if(this.editingIndex!==-1){const n=this.editingName.trim();n&&n!==this.studentData.list[this.editingIndex]&&(this.studentData.list[this.editingIndex]=n),this.editingIndex=-1,this.editingName=""}},startEdit(n,e){this.editingIndex=n,this.editingName=e},confirmDelete(n){this.studentToDelete={index:n,name:this.studentData.list[n]},this.deleteDialog=!0},moveStudent(n,e){const i=e==="up"?n-1:n+1;i>=0&&i<this.studentData.list.length&&([this.studentData.list[n],this.studentData.list[i]]=[this.studentData.list[i],this.studentData.list[n]])},setStudentNumber(n){this.studentToMove=n,this.newPosition=String(n+1),this.numberDialog=!0},applyNewPosition(){const n=parseInt(this.newPosition)-1;if(this.studentToMove!==null&&n>=0&&n<this.studentData.list.length&&n!==this.studentToMove){const e=this.studentData.list[this.studentToMove];this.studentData.list.splice(this.studentToMove,1),this.studentData.list.splice(n,0,e)}this.numberDialog=!1,this.studentToMove=null,this.newPosition=""},moveToTop(n){if(n>0){const e=this.studentData.list[n];this.studentData.list.splice(n,1),this.studentData.list.unshift(e)}},addStudent(){const n=this.newStudent.trim();n&&!this.studentData.list.includes(n)&&(this.studentData.list.push(n),this.newStudent="")},removeStudent(n){n!==void 0&&(this.studentData.list.splice(n,1),this.deleteDialog=!1,this.studentToDelete=null)},resetFontSize(){$e("font.size"),this.settings.font.size=v("font.size"),this.showMessage("字体已重置","字体大小已恢复默认值")},refreshDebugConfig(){const n={};Object.keys(this.settings).forEach(e=>{n[e]={},Object.keys(this.settings[e]).forEach(i=>{n[e][i]=v(`${e}.${i}`)})}),this.debugConfig=JSON.stringify(n,null,2)},async copyDebugConfig(){try{await navigator.clipboard.writeText(this.debugConfig),this.showMessage("复制成功","配置信息已复制到剪贴板")}catch(n){console.error("复制失败:",n),this.showError("复制失败","请手动复制")}},handleDeveloperChange(n){n||(this.settings.developer.showDebugConfig=!1,this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0})},resetDeveloperSettings(){this.settings.developer={enabled:!1,showDebugConfig:!1},this.settings.message={showSidebar:!0,maxActiveMessages:5,timeout:5e3,saveHistory:!0},this.handleSettingsChange(this.settings),this.showMessage("已重置","开发者设置已重置为默认值","warning")},adjustFontSize(n){const i=this.settings.font.size;n==="up"&&i<100?this.settings.font.size=i+2:n==="down"&&i>16&&(this.settings.font.size=i-2),this.handleSettingsChange(this.settings)},onSettingsSaved(){this.showMessage("设置已更新","您的设置已成功保存")},onSettingUpdate(n,e){this.showMessage("设置已更新",`${n} 已保存为 ${e}`)}}},xs={class:"settings-page"},Ss={key:0},ks={class:"d-flex gap-2"};function _s(n,e,i,d,a,u){const r=kt,c=St,f=xt,_=yt,g=bt,k=gt,O=mt,E=z,F=ft,Y=wt,ie=ct,ee=dt,W=Ze;return p(),M("div",xs,[t(jt,{elevation:"1"},{prepend:s(()=>[t(x,{icon:"mdi-arrow-left",variant:"text",onClick:e[0]||(e[0]=Q=>n.$router.push("/"))})]),default:s(()=>[t(Pt,{class:"text-h6"},{default:s(()=>e[5]||(e[5]=[l("设置")])),_:1})]),_:1}),t(sn,{class:"py-4"},{default:s(()=>[t(fe,null,{default:s(()=>[t(R,{cols:"12",md:"6"},{default:s(()=>[t(r,{border:"",loading:a.loading.server,onSaved:u.onSettingsSaved},null,8,["loading","onSaved"])]),_:1}),t(R,{cols:"12",md:"6"},{default:s(()=>[t(c,{border:""})]),_:1}),t(R,{cols:"12",md:"6"},{default:s(()=>[t(f,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),t(R,{cols:"12",md:"6"},{default:s(()=>[t(_,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),t(R,{cols:"12",md:"6"},{default:s(()=>[t(g,{onSaved:u.onSettingsSaved,border:""},null,8,["onSaved"])]),_:1}),t(R,{cols:"12",md:"6"},{default:s(()=>[t(k,{border:""})]),_:1}),t(R,{cols:"12"},{default:s(()=>[t(O,{border:""})]),_:1}),t(R,{cols:12,md:a.settings.developer.enabled?12:6},{default:s(()=>[t(E,{border:"",title:"开发者选项",icon:"mdi-developer-board"},{default:s(()=>[t(G,null,{default:s(()=>[t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-code-tags",class:"mr-3"})]),append:s(()=>[t(Ie,{modelValue:a.settings.developer.enabled,"onUpdate:modelValue":e[1]||(e[1]=Q=>a.settings.developer.enabled=Q),density:"comfortable","hide-details":"",onChange:u.handleDeveloperChange},null,8,["modelValue","onChange"])]),default:s(()=>[t(P,null,{default:s(()=>e[6]||(e[6]=[l("启用开发者选项")])),_:1}),t(H,null,{default:s(()=>e[7]||(e[7]=[l("启用后可以查看和修改开发者设置")])),_:1})]),_:1}),a.settings.developer.enabled?(p(),M(ue,{key:0},[t(L,{class:"my-2"}),t(A,null,{prepend:s(()=>[t(N,{icon:"mdi-file-code",class:"mr-3"})]),append:s(()=>[t(Ie,{modelValue:a.settings.developer.showDebugConfig,"onUpdate:modelValue":e[2]||(e[2]=Q=>a.settings.developer.showDebugConfig=Q),density:"comfortable","hide-details":""},null,8,["modelValue"])]),default:s(()=>[t(P,null,{default:s(()=>e[8]||(e[8]=[l("显示调试配置")])),_:1}),t(H,null,{default:s(()=>e[9]||(e[9]=[l("显示当前的调试配置信息")])),_:1})]),_:1}),t(ot,null,{default:s(()=>[a.settings.developer.showDebugConfig?(p(),M("div",Ss,[t(L,{class:"my-2"}),t(lt,{modelValue:a.debugConfig,"onUpdate:modelValue":e[3]||(e[3]=Q=>a.debugConfig=Q),label:"调试配置",readonly:"",rows:"10",class:"font-monospace mt-2"},null,8,["modelValue"]),V("div",ks,[t(x,{"prepend-icon":"mdi-refresh",variant:"text",onClick:u.refreshDebugConfig},{default:s(()=>e[10]||(e[10]=[l(" 刷新 ")])),_:1},8,["onClick"]),t(x,{"prepend-icon":"mdi-content-copy",variant:"text",onClick:u.copyDebugConfig},{default:s(()=>e[11]||(e[11]=[l(" 复制 ")])),_:1},8,["onClick"])])])):j("",!0)]),_:1})],64)):j("",!0)]),_:1})]),_:1})]),_:1},8,["md"]),t(R,{cols:"12"},{default:s(()=>[t(F,{modelValue:a.studentData,"onUpdate:modelValue":[e[4]||(e[4]=Q=>a.studentData=Q),u.handleStudentDataChange],loading:a.loading.students,error:a.studentsError,"is-mobile":d.isMobile,"unsaved-changes":a.hasUnsavedChanges,onSave:u.saveStudents,onReload:u.loadStudents},null,8,["modelValue","loading","error","is-mobile","unsaved-changes","onSave","onReload","onUpdate:modelValue"])]),_:1}),t(R,{cols:"12"},{default:s(()=>[t(Y,{border:""})]),_:1}),t(R,{cols:"12"},{default:s(()=>[t(ie)]),_:1}),a.settings.developer.enabled?(p(),S(R,{key:0,cols:"12"},{default:s(()=>[t(se,{border:""},{default:s(()=>[t(le,{class:"d-flex align-center"},{default:s(()=>[t(N,{icon:"mdi-cog-outline",class:"mr-2"}),e[12]||(e[12]=l(" 所有设置 "))]),_:1}),t(Xt,null,{default:s(()=>e[13]||(e[13]=[l(" 浏览和修改所有可用设置 ")])),_:1}),t($,null,{default:s(()=>[t(ee,{onUpdate:u.onSettingUpdate},null,8,["onUpdate"])]),_:1})]),_:1})]),_:1})):j("",!0)]),_:1})]),_:1}),t(W,{ref:"messageLog"},null,512)])}const Ps=K(ys,[["render",_s]]);export{Ps as default};