1
0
mirror of https://github.com/ZeroCatDev/Classworks.git synced 2025-07-02 00:59:23 +00:00
Classworks/assets/_id_-DfxnsV9d.js

2 lines
13 KiB
JavaScript

import{g as T,p as U,j as B,k as i,n as J,l as E,q as O,z as F,_ as z,F as u,D as m,E as l,C as p,J as o,Z as f,W as r,G as M,V as h,b1 as P,S as c,Y as x,T as D,U as y,$ as K,X as V,ao as L,H as k,I as W,ap as _,ax as C,b2 as j,av as b,a2 as R,aw as N,aA as I}from"./index-DpRopL3V.js";import{V as A,a as q}from"./VAppBarTitle-BZkfRM3W.js";import{V as v}from"./VTextField-BILbZBCf.js";import{V as G}from"./VCheckboxBtn-BMVogzxc.js";import{V as H}from"./VChip-BTSKEMFl.js";import{V as X}from"./VTextarea-DOaAGxnK.js";import{V as Y}from"./VSwitch-ClUOf-t2.js";import{V as Z}from"./VContainer-SydirbBl.js";const Q=U({start:Boolean,end:Boolean,...F(),...O()},"VListItemAction"),$=T()({name:"VListItemAction",props:Q(),setup(t,e){let{slots:n}=e;return B(()=>i(t.tag,{class:E(["v-list-item-action",{"v-list-item-action--start":t.start,"v-list-item-action--end":t.end},t.class]),style:J(t.style)},n)),{}}}),ee={data(){return{listId:null,list:null,items:[],originalItems:[],newItemName:"",sortSeed:"1",sortType:"default",isRandomSorted:!1,deleteDialog:{show:!1,title:"",text:"",itemId:null,action:null},isRenaming:!1,newListName:"",itemDialog:{show:!1,item:null,isEditing:!1,editedItem:null}}},computed:{sortedItems(){return this.sortType==="completed"?[...this.items].sort((t,e)=>t.completed===e.completed?0:t.completed?1:-1):this.items},hasCompletedItems(){return this.items.some(t=>t.completed)}},async created(){this.listId=this.$route.params.id,await Promise.all([this.loadListInfo(),this.loadItems()])},methods:{async loadListInfo(){try{const t=await I.loadData("classworks-list-info");t&&Array.isArray(t)&&(this.list=t.find(e=>e.id===this.listId)),this.list||this.$router.push("/list")}catch(t){console.error("Failed to load list info",t),this.$router.push("/list")}},startRenaming(){this.list&&(this.newListName=this.list.name,this.isRenaming=!0)},cancelRenaming(){this.isRenaming=!1,this.newListName=""},async saveListName(){if(this.newListName.trim())try{const t=await I.loadData("classworks-list-info");if(t&&Array.isArray(t)){const e=t.findIndex(n=>n.id===this.listId);e!==-1&&(t[e].name=this.newListName.trim(),await I.saveData("classworks-list-info",t),this.list.name=this.newListName.trim())}this.isRenaming=!1}catch(t){console.error("Failed to update list name",t)}},async loadItems(){try{let t=await I.loadData(`classworks-list-${this.listId}`);(!t||!Array.isArray(t))&&(t=[],await I.saveData(`classworks-list-${this.listId}`,t)),this.items=t.map(e=>typeof e.completed>"u"?{id:e.id||Date.now()+Math.floor(Math.random()*1e3),name:e.name,completed:!1,description:e.description||""}:{...e,description:e.description||""}),this.originalItems=JSON.parse(JSON.stringify(this.items))}catch(t){console.error("Failed to load items",t),this.items=[],this.originalItems=[]}},async addItem(){if(!this.newItemName)return;const t={id:Date.now().toString(),name:this.newItemName,completed:!1,description:""};this.items.push(t),this.originalItems.push(JSON.parse(JSON.stringify(t))),await this.saveItems(),this.newItemName=""},openItemDetails(t){this.itemDialog={show:!0,item:t,isEditing:!1,editedItem:null}},startEditingItem(){this.itemDialog.item&&(this.itemDialog.isEditing=!0,this.itemDialog.editedItem=JSON.parse(JSON.stringify(this.itemDialog.item)))},cancelEditingItem(){this.itemDialog.isEditing=!1,this.itemDialog.editedItem=null},async saveItemChanges(){if(!this.itemDialog.editedItem)return;const t=this.items.findIndex(e=>e.id===this.itemDialog.item.id);if(t!==-1){this.items[t]={...this.itemDialog.editedItem};const e=this.originalItems.findIndex(n=>n.id===this.itemDialog.item.id);e!==-1&&(this.originalItems[e]=JSON.parse(JSON.stringify(this.items[t]))),await this.saveItems(),this.itemDialog.item=this.items[t],this.itemDialog.isEditing=!1,this.itemDialog.editedItem=null}},confirmDeleteItem(t){var n;const e=this.items.find(g=>g.id===t);e&&(this.deleteDialog={show:!0,title:"删除确认",text:`确定要删除 "${e.name}" 吗?`,itemId:t,action:"deleteItem"},this.itemDialog.show&&((n=this.itemDialog.item)==null?void 0:n.id)===t&&(this.itemDialog.show=!1))},confirmDeleteCompleted(){const t=this.items.filter(e=>e.completed).length;this.deleteDialog={show:!0,title:"删除已完成项目",text:`确定要删除所有已完成的项目吗?(共 ${t} 项)`,action:"deleteCompleted"}},confirmDelete(){this.deleteDialog.action==="deleteItem"&&this.deleteDialog.itemId?this.deleteItem(this.deleteDialog.itemId):this.deleteDialog.action==="deleteCompleted"&&this.deleteCompletedItems(),this.deleteDialog.show=!1},async deleteItem(t){this.items=this.items.filter(e=>e.id!==t),this.originalItems=this.originalItems.filter(e=>e.id!==t),await this.saveItems()},async deleteCompletedItems(){this.items=this.items.filter(t=>!t.completed),this.originalItems=this.originalItems.filter(t=>!t.completed),await this.saveItems()},async updateItemStatus(t,e){const n=this.items.find(g=>g.id===t);if(n){n.completed=e;const g=this.originalItems.find(s=>s.id===t);g&&(g.completed=e),await this.saveItems()}},async saveItems(){try{await I.saveData(`classworks-list-${this.listId}`,this.items)}catch(t){console.error("Failed to save items",t)}},randomSort(){const t=this.items.map(e=>{const n=this.hashCode(e.id+this.sortSeed);return{...e,randomValue:this.seededRandom(n)}});t.sort((e,n)=>e.randomValue-n.randomValue),this.items=t.map(e=>{const n={...e};return delete n.randomValue,n}),this.isRandomSorted=!0,this.saveItems()},resetSort(){this.items=JSON.parse(JSON.stringify(this.originalItems)),this.isRandomSorted=!1,this.saveItems()},hashCode(t){let e=0;for(let n=0;n<t.length;n++){const g=t.charCodeAt(n);e=(e<<5)-e+g,e=e&e}return Math.abs(e)},seededRandom(t){const e=Math.sin(t)*1e4;return e-Math.floor(e)}}},te={class:"d-flex align-center mb-4"},ie={key:0},le={key:1,class:"d-flex align-center"},se={key:2},oe={key:0},ae={key:1},ne={key:0},de={key:1,class:"pa-2"};function me(t,e,n,g,s,d){return m(),u(k,null,[i(q,{elevation:"1"},{prepend:l(()=>[i(r,{icon:"mdi-arrow-left",variant:"text",onClick:e[0]||(e[0]=a=>t.$router.push("/"))})]),default:l(()=>[s.list&&!s.isRenaming?(m(),p(A,{key:0,class:"text-h6"},{default:l(()=>[o(f(s.list.name),1)]),_:1})):(m(),p(A,{key:1,class:"text-h6"},{default:l(()=>e[14]||(e[14]=[o("列表")])),_:1,__:[14]}))]),_:1}),i(Z,null,{default:l(()=>[M("div",te,[i(r,{icon:"",class:"mr-2",to:"/list",border:""},{default:l(()=>[i(h,null,{default:l(()=>e[15]||(e[15]=[o("mdi-arrow-left")])),_:1,__:[15]})]),_:1}),s.list&&!s.isRenaming?(m(),u("h1",ie,[o(f(s.list.name)+" ",1),i(r,{icon:"",size:"small",onClick:d.startRenaming,border:""},{default:l(()=>[i(h,null,{default:l(()=>e[16]||(e[16]=[o("mdi-pencil")])),_:1,__:[16]})]),_:1},8,["onClick"])])):s.list&&s.isRenaming?(m(),u("div",le,[i(v,{modelValue:s.newListName,"onUpdate:modelValue":e[1]||(e[1]=a=>s.newListName=a),label:"列表名称","hide-details":"",density:"compact",class:"mr-2",style:{"min-width":"200px"},autofocus:"",onKeyup:P(d.saveListName,["enter"])},null,8,["modelValue","onKeyup"]),i(r,{color:"primary",size:"small",class:"mr-2",onClick:d.saveListName},{default:l(()=>[i(h,null,{default:l(()=>e[17]||(e[17]=[o("mdi-check")])),_:1,__:[17]})]),_:1},8,["onClick"]),i(r,{color:"error",size:"small",onClick:d.cancelRenaming},{default:l(()=>[i(h,null,{default:l(()=>e[18]||(e[18]=[o("mdi-close")])),_:1,__:[18]})]),_:1},8,["onClick"])])):(m(),u("h1",se," 加载中... "))]),i(c,{class:"mb-5",border:"",rounded:"xl"},{default:l(()=>[i(D,{class:"d-flex align-center"},{default:l(()=>[e[21]||(e[21]=o(" 项目列表 ")),i(y),i(K,{modelValue:s.sortType,"onUpdate:modelValue":e[2]||(e[2]=a=>s.sortType=a),mandatory:""},{default:l(()=>[i(r,{value:"default"},{default:l(()=>[i(h,null,{default:l(()=>e[19]||(e[19]=[o("mdi-sort-alphabetical-ascending")])),_:1,__:[19]})]),_:1}),i(r,{value:"completed"},{default:l(()=>[i(h,null,{default:l(()=>e[20]||(e[20]=[o("mdi-check-circle-outline")])),_:1,__:[20]})]),_:1})]),_:1},8,["modelValue"])]),_:1,__:[21]}),d.sortedItems.length===0?(m(),p(V,{key:0},{default:l(()=>e[22]||(e[22]=[o(" 暂无项目,请添加新项目 ")])),_:1,__:[22]})):(m(),p(L,{key:1,"select-strategy":"leaf"},{default:l(()=>[(m(!0),u(k,null,W(d.sortedItems,(a,w)=>(m(),p(_,{key:a.id,class:E({"text-decoration-line-through":a.completed}),onClick:S=>d.openItemDetails(a)},{prepend:l(()=>[i($,{start:""},{default:l(()=>[i(G,{"model-value":a.completed,"onUpdate:modelValue":S=>d.updateItemStatus(a.id,S),onClick:e[3]||(e[3]=j(()=>{},["stop"]))},null,8,["model-value","onUpdate:modelValue"])]),_:2},1024)]),append:l(()=>[o(f(w+1),1)]),default:l(()=>[o(" "+f(a.name)+" ",1),i(C,null,{default:l(()=>[o(f(a.description),1)]),_:2},1024)]),_:2},1032,["class","onClick"]))),128))]),_:1})),d.sortedItems.length>0?(m(),p(b,{key:2},{default:l(()=>[i(y),i(r,{color:"error","prepend-icon":"mdi-delete-sweep",onClick:d.confirmDeleteCompleted,disabled:!d.hasCompletedItems},{default:l(()=>e[23]||(e[23]=[o(" 删除已完成项目 ")])),_:1,__:[23]},8,["onClick","disabled"])]),_:1})):x("",!0)]),_:1}),i(c,{class:"mb-5",border:"",rounded:"xl"},{default:l(()=>[i(D,null,{default:l(()=>e[24]||(e[24]=[o("添加新项目")])),_:1,__:[24]}),i(V,null,{default:l(()=>[i(v,{modelValue:s.newItemName,"onUpdate:modelValue":e[4]||(e[4]=a=>s.newItemName=a),label:"项目名称",rules:[a=>!!a||"名称不能为空"]},null,8,["modelValue","rules"]),i(r,{color:"primary",disabled:!s.newItemName,onClick:d.addItem},{default:l(()=>e[25]||(e[25]=[o(" 添加 ")])),_:1,__:[25]},8,["disabled","onClick"])]),_:1})]),_:1}),i(c,{class:"mb-5",border:"",rounded:"xl"},{default:l(()=>[i(D,null,{default:l(()=>e[26]||(e[26]=[o("列表排序")])),_:1,__:[26]}),i(V,null,{default:l(()=>[i(v,{modelValue:s.sortSeed,"onUpdate:modelValue":e[5]||(e[5]=a=>s.sortSeed=a),label:"排序种子 (任意数字或文本)",hint:"输入相同的种子值可以得到相同的排序结果","persistent-hint":"",class:"mb-3"},null,8,["modelValue"]),i(r,{color:"primary",class:"mr-2",onClick:d.randomSort},{default:l(()=>e[27]||(e[27]=[o(" 随机排序 ")])),_:1,__:[27]},8,["onClick"]),i(r,{variant:"text",onClick:d.resetSort},{default:l(()=>e[28]||(e[28]=[o(" 撤销 ")])),_:1,__:[28]},8,["onClick"])]),_:1})]),_:1}),i(R,{modelValue:s.deleteDialog.show,"onUpdate:modelValue":e[7]||(e[7]=a=>s.deleteDialog.show=a),"max-width":"500"},{default:l(()=>[i(c,{border:"",rounded:"xl"},{default:l(()=>[i(D,null,{default:l(()=>[o(f(s.deleteDialog.title),1)]),_:1}),i(V,null,{default:l(()=>[o(f(s.deleteDialog.text),1)]),_:1}),i(b,null,{default:l(()=>[i(y),i(r,{color:"primary",variant:"text",onClick:e[6]||(e[6]=a=>s.deleteDialog.show=!1)},{default:l(()=>e[29]||(e[29]=[o(" 取消 ")])),_:1,__:[29]}),i(r,{color:"error",variant:"text",onClick:d.confirmDelete},{default:l(()=>e[30]||(e[30]=[o(" 确认删除 ")])),_:1,__:[30]},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"]),i(R,{modelValue:s.itemDialog.show,"onUpdate:modelValue":e[13]||(e[13]=a=>s.itemDialog.show=a),"max-width":"600"},{default:l(()=>[i(c,{border:"",rounded:"xl"},{default:l(()=>[i(D,null,{default:l(()=>[s.itemDialog.isEditing?(m(),u("span",ae,"编辑项目")):(m(),u("span",oe,"项目详情"))]),_:1}),i(V,null,{default:l(()=>[!s.itemDialog.isEditing&&s.itemDialog.item?(m(),u("div",ne,[i(L,null,{default:l(()=>[i(_,null,{default:l(()=>[i(N,{class:"text-subtitle-1 font-weight-bold"},{default:l(()=>[o(f(s.itemDialog.item.name),1)]),_:1}),i(C,null,{default:l(()=>[o(f(s.itemDialog.item.id),1)]),_:1})]),_:1}),i(_,null,{default:l(()=>[i(N,{class:"text-subtitle-1 font-weight-bold"},{default:l(()=>e[31]||(e[31]=[o("状态")])),_:1,__:[31]}),i(C,null,{default:l(()=>[i(H,{color:s.itemDialog.item.completed?"success":"warning",size:"small"},{default:l(()=>[o(f(s.itemDialog.item.completed?"已完成":"未完成"),1)]),_:1},8,["color"])]),_:1})]),_:1}),s.itemDialog.item.description?(m(),p(_,{key:0},{default:l(()=>[i(N,{class:"text-subtitle-1 font-weight-bold"},{default:l(()=>e[32]||(e[32]=[o("描述")])),_:1,__:[32]}),i(C,null,{default:l(()=>[o(f(s.itemDialog.item.description),1)]),_:1})]),_:1})):x("",!0)]),_:1})])):s.itemDialog.isEditing&&s.itemDialog.item?(m(),u("div",de,[i(v,{modelValue:s.itemDialog.editedItem.name,"onUpdate:modelValue":e[8]||(e[8]=a=>s.itemDialog.editedItem.name=a),label:"名称",variant:"outlined",class:"mb-3"},null,8,["modelValue"]),i(X,{modelValue:s.itemDialog.editedItem.description,"onUpdate:modelValue":e[9]||(e[9]=a=>s.itemDialog.editedItem.description=a),label:"描述",variant:"outlined",rows:"3",class:"mb-3"},null,8,["modelValue"]),i(Y,{modelValue:s.itemDialog.editedItem.completed,"onUpdate:modelValue":e[10]||(e[10]=a=>s.itemDialog.editedItem.completed=a),label:"已完成",color:"success","hide-details":""},null,8,["modelValue"])])):x("",!0)]),_:1}),i(b,null,{default:l(()=>[i(y),s.itemDialog.isEditing?(m(),u(k,{key:1},[i(r,{color:"success",variant:"text",onClick:d.saveItemChanges},{default:l(()=>e[36]||(e[36]=[o(" 保存 ")])),_:1,__:[36]},8,["onClick"]),i(r,{color:"secondary",variant:"text",onClick:d.cancelEditingItem},{default:l(()=>e[37]||(e[37]=[o(" 取消 ")])),_:1,__:[37]},8,["onClick"])],64)):(m(),u(k,{key:0},[i(r,{color:"primary",variant:"text",onClick:d.startEditingItem},{default:l(()=>e[33]||(e[33]=[o(" 编辑 ")])),_:1,__:[33]},8,["onClick"]),i(r,{color:"error",variant:"text",onClick:e[11]||(e[11]=a=>{var w;return d.confirmDeleteItem((w=s.itemDialog.item)==null?void 0:w.id)})},{default:l(()=>e[34]||(e[34]=[o(" 删除 ")])),_:1,__:[34]}),i(r,{color:"secondary",variant:"text",onClick:e[12]||(e[12]=a=>s.itemDialog.show=!1)},{default:l(()=>e[35]||(e[35]=[o(" 关闭 ")])),_:1,__:[35]})],64))]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1})],64)}const De=z(ee,[["render",me]]);export{De as default};