diff --git a/intern-log/dist/assets/index-DXlhKHmS.css b/intern-log/dist/assets/index-DWsZ3Bb0.css similarity index 87% rename from intern-log/dist/assets/index-DXlhKHmS.css rename to intern-log/dist/assets/index-DWsZ3Bb0.css index 76fa863..82152e6 100644 --- a/intern-log/dist/assets/index-DXlhKHmS.css +++ b/intern-log/dist/assets/index-DWsZ3Bb0.css @@ -1 +1 @@ -.mask[data-v-f27041d4]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:100}.dialog[data-v-f27041d4]{width:380px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float);padding:20px}.dialog-title[data-v-f27041d4]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-msg[data-v-f27041d4]{margin-top:8px;color:var(--text-2);font-size:13px;line-height:1.7;word-break:break-all}.dialog-btns[data-v-f27041d4]{margin-top:20px;display:flex;justify-content:flex-end;gap:8px}.btn-danger-solid[data-v-f27041d4]{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger-solid[data-v-f27041d4]:hover{background:#d13a3f}.modal-enter-active[data-v-f27041d4],.modal-leave-active[data-v-f27041d4]{transition:opacity .15s ease}.modal-enter-from[data-v-f27041d4],.modal-leave-to[data-v-f27041d4]{opacity:0}.mask[data-v-63bc0b48]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-63bc0b48]{width:560px;max-width:calc(100vw - 32px);max-height:85vh;background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float);display:flex;flex-direction:column}.dialog-head[data-v-63bc0b48]{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);flex:none}.dialog-title[data-v-63bc0b48]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-sub[data-v-63bc0b48]{font-size:12px;margin-top:2px}.dialog-body[data-v-63bc0b48]{padding:16px 20px;overflow:auto}.dialog-btns[data-v-63bc0b48]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border);flex:none}.form-grid[data-v-63bc0b48]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-63bc0b48]{grid-column:span 2}.field label[data-v-63bc0b48]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.form-error[data-v-63bc0b48]{color:var(--danger);font-size:12px;margin-top:4px}.input.invalid[data-v-63bc0b48],.input.invalid[data-v-63bc0b48]:focus{border-color:var(--danger)}.toggle-btn[data-v-63bc0b48]{height:32px;width:100%;border:1px solid var(--border-strong);background:var(--bg-page);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text-2)}.toggle-btn[data-v-63bc0b48]:hover{background:var(--bg-hover)}.toggle-btn.on[data-v-63bc0b48]{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.toggle-btn.onwarn[data-v-63bc0b48]{color:var(--warn);border-color:var(--warn)}.modal-enter-active[data-v-63bc0b48],.modal-leave-active[data-v-63bc0b48]{transition:opacity .15s ease}.modal-enter-from[data-v-63bc0b48],.modal-leave-to[data-v-63bc0b48]{opacity:0}.dp-head[data-v-2e90c9d8]{margin-bottom:12px}.dp-date[data-v-2e90c9d8]{font-size:14px;font-weight:600}.sec[data-v-2e90c9d8]{padding:14px 16px;margin-bottom:12px}.sec-title[data-v-2e90c9d8]{font-size:13px;font-weight:600;margin-bottom:10px;color:var(--text-1)}.sec-head[data-v-2e90c9d8]{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}.sec-head .sec-title[data-v-2e90c9d8]{margin-bottom:0}.form-hint[data-v-2e90c9d8]{font-size:12px}.att-grid[data-v-2e90c9d8]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.att-cell label[data-v-2e90c9d8],.field label[data-v-2e90c9d8]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.att-val[data-v-2e90c9d8]{display:flex;align-items:center;gap:6px;min-height:32px;font-size:13px}.status-val[data-v-2e90c9d8]{min-height:32px}.val-empty[data-v-2e90c9d8]{color:var(--text-3)}.edit-row[data-v-2e90c9d8]{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.time-input[data-v-2e90c9d8]{width:104px}.att-note[data-v-2e90c9d8]{margin-top:10px;font-size:12px}.att-actions[data-v-2e90c9d8]{display:flex;gap:8px;margin-top:12px}.form-grid[data-v-2e90c9d8]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-2e90c9d8]{grid-column:span 2}.form-footer[data-v-2e90c9d8]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.form-error[data-v-2e90c9d8]{color:var(--danger);font-size:12px;margin-top:4px}.input.invalid[data-v-2e90c9d8]{border-color:var(--danger)}.input.invalid[data-v-2e90c9d8]:focus{border-color:var(--danger)}.list-sec[data-v-2e90c9d8]{margin-bottom:4px}.item[data-v-2e90c9d8]{border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;margin-bottom:6px;background:var(--bg-page)}.item-main[data-v-2e90c9d8]{display:flex;align-items:center;gap:8px;min-height:26px;flex-wrap:wrap}.item-content[data-v-2e90c9d8]{cursor:text;word-break:break-all}.item-meta[data-v-2e90c9d8]{font-size:12px}.item-sub[data-v-2e90c9d8]{margin-top:6px;padding-top:6px;border-top:1px dashed var(--border);font-size:12px;display:flex;flex-direction:column;gap:2px}.empty[data-v-2e90c9d8]{text-align:center;padding:24px 0}.dp-foot[data-v-2e90c9d8]{margin-top:10px;font-size:12px;text-align:right}@media (max-width: 560px){.att-grid[data-v-2e90c9d8],.form-grid[data-v-2e90c9d8]{grid-template-columns:1fr}.field.span2[data-v-2e90c9d8]{grid-column:auto}}.cal-toolbar[data-v-6a6322fa]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.cal-title[data-v-6a6322fa]{font-size:14px;font-weight:600;min-width:96px;text-align:center}.cal-head[data-v-6a6322fa]{display:grid;grid-template-columns:repeat(7,1fr);border-top:1px solid var(--border);border-left:1px solid var(--border)}.cal-week[data-v-6a6322fa]{text-align:center;padding:6px 0;font-size:12px;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.cal-grid[data-v-6a6322fa]{display:grid;grid-template-columns:repeat(7,1fr);border-top:1px solid var(--border);border-left:1px solid var(--border)}.cal-cell[data-v-6a6322fa]{min-height:92px;padding:6px 8px;text-align:left;background:var(--bg-page);border:none;border-right:1px solid var(--border);border-bottom:1px solid var(--border);cursor:pointer;display:block;font-size:13px}.cal-cell[data-v-6a6322fa]:hover{background:var(--bg-subtle)}.cal-cell.blank[data-v-6a6322fa]{cursor:default}.cal-cell.blank[data-v-6a6322fa]:hover{background:var(--bg-page)}.cal-cell.selected[data-v-6a6322fa]{background:var(--accent-bg)}.daynum.today[data-v-6a6322fa]{color:var(--accent);font-weight:600}.cal-cell.weekend .daynum[data-v-6a6322fa]{color:var(--text-3)}.cal-marks[data-v-6a6322fa]{display:flex;align-items:center;gap:4px;margin-top:8px;height:14px}.mark-log[data-v-6a6322fa]{color:var(--text-3)}.mark-star[data-v-6a6322fa]{color:var(--accent)}.drawer[data-v-6a6322fa]{position:fixed;top:0;right:0;bottom:0;width:min(420px,100%);background:var(--bg-page);border-left:1px solid var(--border);box-shadow:var(--shadow-float);z-index:20;display:flex;flex-direction:column}.drawer-head[data-v-6a6322fa]{height:48px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border)}.drawer-title[data-v-6a6322fa]{font-weight:600}.drawer-body[data-v-6a6322fa]{flex:1;overflow:auto;padding:16px}.drawer-enter-active[data-v-6a6322fa],.drawer-leave-active[data-v-6a6322fa]{transition:opacity .15s ease}.drawer-enter-from[data-v-6a6322fa],.drawer-leave-to[data-v-6a6322fa]{opacity:0}.detail-toolbar[data-v-ac366cf6]{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.date-title[data-v-ac366cf6]{font-size:14px;font-weight:600;min-width:170px;text-align:center}.date-title.is-today[data-v-ac366cf6]{color:var(--accent)}.w-date[data-v-ac366cf6]{width:150px}.cards[data-v-73e5ba49]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat-card[data-v-73e5ba49]{padding:14px 16px}.stat-num[data-v-73e5ba49]{font-size:20px;font-weight:600;margin-top:4px}.section[data-v-73e5ba49]{padding:14px 16px;margin-top:12px}.section-title[data-v-73e5ba49]{font-weight:600;margin-bottom:10px;font-size:13px}.heat[data-v-73e5ba49]{display:flex;gap:3px;overflow-x:auto;padding-bottom:4px}.heat-col[data-v-73e5ba49]{display:flex;flex-direction:column;gap:3px}.heat-cell[data-v-73e5ba49]{width:12px;height:12px;border-radius:2px;display:inline-block}.lv0[data-v-73e5ba49]{background:var(--bg-subtle);border:1px solid var(--border)}.lv1[data-v-73e5ba49]{background:#d8ecdf}.lv2[data-v-73e5ba49]{background:#a9d8bc}.lv3[data-v-73e5ba49]{background:#6fbf92}.lv4[data-v-73e5ba49]{background:var(--ok)}.heat-legend[data-v-73e5ba49]{display:flex;align-items:center;gap:3px;margin-top:8px;font-size:12px}.two-col[data-v-73e5ba49]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.bar-row[data-v-73e5ba49]{display:flex;align-items:center;gap:10px;margin:6px 0}.bar-label[data-v-73e5ba49]{width:72px;flex:none;color:var(--text-2);font-size:12px;text-align:right}.bar-track[data-v-73e5ba49]{flex:1;height:8px;border-radius:4px;background:var(--bg-subtle);overflow:hidden}.bar-fill[data-v-73e5ba49]{display:block;height:100%;background:var(--accent);border-radius:4px}.bar-num[data-v-73e5ba49]{font-size:12px;width:92px;flex:none}.loc-label[data-v-73e5ba49]{width:110px;text-align:left}@media (max-width: 720px){.cards[data-v-73e5ba49]{grid-template-columns:repeat(2,1fr)}.two-col[data-v-73e5ba49]{grid-template-columns:1fr}}.report-toolbar[data-v-43f9c59b]{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.ai-error[data-v-43f9c59b]{color:var(--danger);font-size:12px;margin:0 0 8px}.seg[data-v-43f9c59b]{display:inline-flex;border:1px solid var(--border-strong);border-radius:6px;overflow:hidden}.seg-btn[data-v-43f9c59b]{height:28px;padding:0 12px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:12px;border-right:1px solid var(--border)}.seg-btn[data-v-43f9c59b]:last-child{border-right:none}.seg-btn[data-v-43f9c59b]:hover{background:var(--bg-hover)}.seg-btn.active[data-v-43f9c59b]{background:var(--accent-bg);color:var(--accent)}.w-date[data-v-43f9c59b]{width:140px}.report-grid[data-v-43f9c59b]{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:12px;align-items:start}.section[data-v-43f9c59b]{padding:14px 16px}.section-title[data-v-43f9c59b]{font-weight:600;margin-bottom:8px;font-size:13px}.section+.section[data-v-43f9c59b]{margin-top:12px}.note-label[data-v-43f9c59b]{display:block;font-size:12px;margin:8px 0 4px}.note-saved[data-v-43f9c59b]{font-size:12px;margin-top:6px}.md-editor[data-v-43f9c59b]{min-height:420px;line-height:1.7}.sum-row[data-v-43f9c59b]{display:flex;justify-content:space-between;padding:3px 0;font-size:12px}.section-sub[data-v-43f9c59b]{font-weight:600;margin:10px 0 4px;font-size:12px}.sum-item[data-v-43f9c59b]{font-size:12px;padding:2px 0;word-break:break-all}.sum-empty[data-v-43f9c59b]{font-size:12px}@media (max-width: 960px){.report-grid[data-v-43f9c59b]{grid-template-columns:1fr}}.mask[data-v-e3568c0d]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-e3568c0d]{width:480px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-e3568c0d]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-e3568c0d]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-body[data-v-e3568c0d]{padding:16px 20px}.dialog-btns[data-v-e3568c0d]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.form-grid[data-v-e3568c0d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-e3568c0d]{grid-column:span 2}.field label[data-v-e3568c0d]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.seg[data-v-e3568c0d]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-e3568c0d]{height:30px;padding:0 14px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-e3568c0d]{border-left:1px solid var(--border)}.seg-btn.active[data-v-e3568c0d]{background:var(--accent-bg);color:var(--accent)}.form-error[data-v-e3568c0d]{color:var(--danger);font-size:12px;margin-top:8px}.input.invalid[data-v-e3568c0d],.input.invalid[data-v-e3568c0d]:focus{border-color:var(--danger)}.modal-enter-active[data-v-e3568c0d],.modal-leave-active[data-v-e3568c0d]{transition:opacity .15s ease}.modal-enter-from[data-v-e3568c0d],.modal-leave-to[data-v-e3568c0d]{opacity:0}.ledger-toolbar[data-v-8acec676]{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}.month-title[data-v-8acec676]{font-size:14px;font-weight:600;min-width:88px;text-align:center}.w-filter[data-v-8acec676]{width:110px;flex:none}.cards[data-v-8acec676]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.stat-card[data-v-8acec676]{padding:14px 16px}.stat-num[data-v-8acec676]{font-size:20px;font-weight:600;margin-top:4px}.amt-income[data-v-8acec676]{color:var(--ok)}.amt-expense[data-v-8acec676]{color:var(--text-1)}.amt-warn[data-v-8acec676]{color:var(--warn)}.sec[data-v-8acec676]{padding:14px 16px;margin-top:12px}.sec-title[data-v-8acec676]{font-size:13px;font-weight:600;margin-bottom:10px}.sec-head[data-v-8acec676]{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}.sec-head .sec-title[data-v-8acec676]{margin-bottom:0}.form-hint[data-v-8acec676]{font-size:12px}.form-grid[data-v-8acec676]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-8acec676]{grid-column:span 2}.field label[data-v-8acec676]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.form-error[data-v-8acec676]{color:var(--danger);font-size:12px;margin-top:8px}.form-footer[data-v-8acec676]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.seg[data-v-8acec676]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-8acec676]{height:30px;padding:0 14px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-8acec676]{border-left:1px solid var(--border)}.seg-btn.active[data-v-8acec676]{background:var(--accent-bg);color:var(--accent)}.toggle-btn[data-v-8acec676]{height:32px;width:100%;border:1px solid var(--border-strong);background:var(--bg-page);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text-2)}.toggle-btn[data-v-8acec676]:hover{background:var(--bg-hover)}.toggle-btn.on[data-v-8acec676]{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.bar-row[data-v-8acec676]{display:flex;align-items:center;gap:10px;margin:6px 0}.bar-label[data-v-8acec676]{width:56px;flex:none;color:var(--text-2);font-size:12px;text-align:right}.bar-track[data-v-8acec676]{flex:1;height:8px;border-radius:4px;background:var(--bg-subtle);overflow:hidden}.bar-fill[data-v-8acec676]{display:block;height:100%;background:var(--accent);border-radius:4px}.bar-num[data-v-8acec676]{font-size:12px;width:110px;flex:none}.table-card[data-v-8acec676]{overflow-x:auto}.tx-table[data-v-8acec676]{width:100%;border-collapse:collapse;font-size:13px}.tx-table th[data-v-8acec676]{text-align:left;font-weight:500;color:var(--text-2);background:var(--bg-subtle);padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}.tx-table td[data-v-8acec676]{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;word-break:break-all}.tx-table tbody tr[data-v-8acec676]:hover{background:var(--bg-subtle)}.tx-table tbody tr:last-child td[data-v-8acec676]{border-bottom:none}.td-note[data-v-8acec676]{color:var(--text-2)}.tx-pending[data-v-8acec676]{color:var(--warn);font-size:12px}.tx-done[data-v-8acec676]{color:var(--ok);font-size:12px}.th-ops[data-v-8acec676]{width:220px}.ops[data-v-8acec676]{display:flex;gap:4px;flex-wrap:wrap}.empty[data-v-8acec676]{text-align:center;padding:24px 0}.vault-note[data-v-8acec676]{margin-top:10px;font-size:12px;text-align:right}.memo-page[data-v-74d60dba]{display:grid;grid-template-columns:280px minmax(0,1fr);gap:12px;align-items:stretch}.memo-list[data-v-74d60dba]{display:flex;flex-direction:column;max-height:calc(100vh - 140px)}.pane-head[data-v-74d60dba]{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 8px;border-bottom:1px solid var(--border);flex:none}.pane-title[data-v-74d60dba]{font-size:13px;font-weight:600}.memo-scroll[data-v-74d60dba]{overflow:auto;padding:6px}.memo-item[data-v-74d60dba]{padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;margin-bottom:2px}.memo-item[data-v-74d60dba]:hover{background:var(--bg-hover)}.memo-item.active[data-v-74d60dba]{background:var(--accent-bg)}.memo-item.active .memo-item-title[data-v-74d60dba]{color:var(--accent)}.memo-item-title[data-v-74d60dba]{font-size:13px;font-weight:500;word-break:break-all}.memo-item-sub[data-v-74d60dba]{font-size:12px;margin-top:2px;word-break:break-all}.memo-item-time[data-v-74d60dba]{font-size:11px;margin-top:2px}.memo-editor[data-v-74d60dba]{padding:16px;min-height:420px;display:flex;flex-direction:column}.title-input[data-v-74d60dba]{font-size:14px;font-weight:500;margin-bottom:10px}.content-textarea[data-v-74d60dba]{flex:1;min-height:340px;line-height:1.8}.editor-foot[data-v-74d60dba]{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.foot-info[data-v-74d60dba]{font-size:12px}.editor-empty[data-v-74d60dba]{display:flex;align-items:center;justify-content:center;flex:1;padding:60px 0}@media (max-width: 800px){.memo-page[data-v-74d60dba]{grid-template-columns:1fr}.memo-list[data-v-74d60dba]{max-height:240px}.content-textarea[data-v-74d60dba]{min-height:240px}}.mask[data-v-f383b0a6]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-f383b0a6]{width:480px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-f383b0a6]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-f383b0a6]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-body[data-v-f383b0a6]{padding:16px 20px}.dialog-btns[data-v-f383b0a6]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.form-grid[data-v-f383b0a6]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-f383b0a6]{grid-column:span 2}.field label[data-v-f383b0a6]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.pwd-row[data-v-f383b0a6]{display:flex;gap:8px}.pwd-row .input[data-v-f383b0a6]{flex:1}.form-error[data-v-f383b0a6]{color:var(--danger);font-size:12px;margin-top:8px}.modal-enter-active[data-v-f383b0a6],.modal-leave-active[data-v-f383b0a6]{transition:opacity .15s ease}.modal-enter-from[data-v-f383b0a6],.modal-leave-to[data-v-f383b0a6]{opacity:0}.lock-card[data-v-6820bc9c]{max-width:380px;margin:60px auto 0;padding:28px 24px;text-align:center;display:flex;flex-direction:column;gap:10px}.lock-badge[data-v-6820bc9c]{width:52px;height:52px;margin:0 auto;border-radius:50%;background:var(--bg-subtle);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--text-2)}.lock-title[data-v-6820bc9c]{font-size:14px;font-weight:600}.lock-tip[data-v-6820bc9c]{font-size:12px;line-height:1.7}.lock-btn[data-v-6820bc9c]{margin-top:4px}.form-error[data-v-6820bc9c]{color:var(--danger);font-size:12px}.empty[data-v-6820bc9c]{text-align:center;padding:24px 0}.vault-toolbar[data-v-6820bc9c]{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}.search-wrap[data-v-6820bc9c]{position:relative;width:280px;max-width:100%}.search-wrap .input[data-v-6820bc9c]{padding-left:30px}.search-icon[data-v-6820bc9c]{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-3)}.table-card[data-v-6820bc9c]{overflow-x:auto}.cred-table[data-v-6820bc9c]{width:100%;border-collapse:collapse;font-size:13px}.cred-table th[data-v-6820bc9c]{text-align:left;font-weight:500;color:var(--text-2);background:var(--bg-subtle);padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}.cred-table td[data-v-6820bc9c]{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;word-break:break-all}.cred-table tbody tr[data-v-6820bc9c]:hover{background:var(--bg-subtle)}.cred-table tbody tr:last-child td[data-v-6820bc9c]{border-bottom:none}.td-system[data-v-6820bc9c]{font-weight:500}.th-ops[data-v-6820bc9c]{width:150px}.pwd-cell[data-v-6820bc9c]{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.pwd-text[data-v-6820bc9c]{letter-spacing:1px}.copyable[data-v-6820bc9c]{cursor:pointer}.copyable[data-v-6820bc9c]:hover{color:var(--accent)}.ops[data-v-6820bc9c]{display:flex;gap:4px;flex-wrap:wrap}.vault-note[data-v-6820bc9c]{margin-top:10px;font-size:12px;text-align:right}.mask[data-v-6820bc9c]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-6820bc9c]{width:440px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-6820bc9c]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-6820bc9c]{font-size:14px;font-weight:600}.dialog-body[data-v-6820bc9c]{padding:16px 20px}.dialog-btns[data-v-6820bc9c]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.vp-field[data-v-6820bc9c]{margin-bottom:10px}.vp-field label[data-v-6820bc9c]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.vp-tip[data-v-6820bc9c]{font-size:12px;margin-top:8px}.modal-enter-active[data-v-6820bc9c],.modal-leave-active[data-v-6820bc9c]{transition:opacity .15s ease}.modal-enter-from[data-v-6820bc9c],.modal-leave-to[data-v-6820bc9c]{opacity:0}.settings[data-v-bbfd64cb]{display:flex;flex-direction:column;gap:12px;max-width:640px}.acc-line[data-v-bbfd64cb]{font-size:12px;margin-bottom:10px;line-height:1.7}.section[data-v-bbfd64cb]{padding:14px 16px}.section-title[data-v-bbfd64cb]{font-weight:600;margin-bottom:10px;font-size:13px}.rule-grid[data-v-bbfd64cb]{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}.rule-item label[data-v-bbfd64cb]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.rule-save[data-v-bbfd64cb]{display:flex;align-items:center;gap:10px;margin-top:12px}.proj-add[data-v-bbfd64cb]{display:flex;gap:8px}.proj-tip[data-v-bbfd64cb]{font-size:12px;margin-top:6px}.proj-row[data-v-bbfd64cb]{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border)}.proj-row[data-v-bbfd64cb]:last-child{border-bottom:none}.proj-name[data-v-bbfd64cb]{flex:1;word-break:break-all}.proj-name.archived[data-v-bbfd64cb]{color:var(--text-3);text-decoration:line-through}.loc-note[data-v-bbfd64cb]{font-size:12px}.ai-grid[data-v-bbfd64cb]{display:flex;flex-direction:column;gap:10px}.backup-row[data-v-bbfd64cb]{display:flex;gap:8px}.import-error[data-v-bbfd64cb]{color:var(--danger);font-size:12px;margin-top:8px}.backup-note[data-v-bbfd64cb]{font-size:12px;margin-top:10px}.login-page[data-v-d3d6c8cb]{min-height:100vh;background:var(--bg-subtle);display:flex;align-items:center;justify-content:center;padding:20px}.login-card[data-v-d3d6c8cb]{width:400px;max-width:100%;padding:28px 26px;display:flex;flex-direction:column;gap:12px;background:var(--bg-page)}.login-brand[data-v-d3d6c8cb]{text-align:center;margin-bottom:6px}.brand-icon[data-v-d3d6c8cb]{width:46px;height:46px;margin:0 auto 10px;border-radius:var(--radius-md);background:var(--accent-bg);color:var(--accent);display:flex;align-items:center;justify-content:center}.login-title[data-v-d3d6c8cb]{font-size:18px;font-weight:600;color:var(--text-1)}.login-sub[data-v-d3d6c8cb]{font-size:12px;margin-top:4px;line-height:1.7}.seg[data-v-d3d6c8cb]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-d3d6c8cb]{flex:1;height:30px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-d3d6c8cb]{border-left:1px solid var(--border)}.seg-btn.active[data-v-d3d6c8cb]{background:var(--accent-bg);color:var(--accent)}.mig-row[data-v-d3d6c8cb]{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--text-2);cursor:pointer;line-height:1.6}.mig-row input[data-v-d3d6c8cb]{margin-top:3px}.form-error[data-v-d3d6c8cb]{color:var(--danger);font-size:12px}.login-btn[data-v-d3d6c8cb]{margin-top:2px}.login-note[data-v-d3d6c8cb]{font-size:12px;text-align:center;line-height:1.7}.app[data-v-219a8436]{display:flex;height:100vh;overflow:hidden}.side[data-v-219a8436]{width:56px;flex:none;border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding-top:10px;gap:4px;background:var(--bg-page)}.nav-btn[data-v-219a8436]{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);color:var(--text-3);cursor:pointer;border:none;background:transparent;position:relative}.nav-btn[data-v-219a8436]:hover{background:var(--bg-hover);color:var(--text-1)}.nav-btn.active[data-v-219a8436]{background:var(--accent-bg);color:var(--accent)}.nav-btn[data-v-219a8436]:after{content:attr(data-tip);position:absolute;left:46px;top:50%;transform:translateY(-50%);background:var(--text-1);color:#fff;font-size:12px;line-height:1.4;padding:2px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s}.nav-btn[data-v-219a8436]:hover:after{opacity:1}.main[data-v-219a8436]{flex:1;display:flex;flex-direction:column;min-width:0}.topbar[data-v-219a8436]{height:56px;flex:none;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 20px}.title[data-v-219a8436]{font-size:14px;font-weight:600}.gsearch[data-v-219a8436]{position:relative;width:300px;max-width:38vw}.gs-icon[data-v-219a8436]{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-3)}.gs-input[data-v-219a8436]{height:30px;padding-left:30px}.gs-panel[data-v-219a8436]{position:absolute;top:36px;left:0;right:0;background:var(--bg-page);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-float);z-index:50;max-height:420px;overflow:auto;padding:6px}.gs-group[data-v-219a8436]{font-size:12px;padding:6px 8px 2px}.gs-item[data-v-219a8436]{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer}.gs-item[data-v-219a8436]:hover{background:var(--bg-hover)}.gs-text[data-v-219a8436],.gs-sub[data-v-219a8436]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gs-text[data-v-219a8436]{font-size:13px}.gs-sub[data-v-219a8436]{font-size:12px}.gs-date[data-v-219a8436]{font-size:12px;flex:none}.gs-empty[data-v-219a8436]{padding:10px;font-size:12px;text-align:center}.user-chip[data-v-219a8436]{font-size:12px;color:var(--text-2);padding:0 4px}.week-tip[data-v-219a8436]{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--warn);color:var(--warn);background:var(--bg-page);border-radius:999px;height:26px;padding:0 10px;font-size:12px;cursor:pointer}.week-tip[data-v-219a8436]:hover{background:var(--bg-subtle)}.content[data-v-219a8436]{flex:1;overflow:auto}.content-inner[data-v-219a8436]{max-width:1200px;margin:0 auto;padding:20px}.toast-wrap[data-v-219a8436]{position:fixed;top:68px;right:20px;z-index:60;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.toast[data-v-219a8436]{background:var(--bg-page);border:1px solid var(--border);box-shadow:var(--shadow-float);border-radius:var(--radius-sm);padding:8px 14px;font-size:13px;color:var(--text-1)}.toast-enter-from[data-v-219a8436],.toast-leave-to[data-v-219a8436]{opacity:0;transform:translateY(-4px)}.toast-enter-active[data-v-219a8436],.toast-leave-active[data-v-219a8436]{transition:all .15s ease}@media (max-width: 720px){.app[data-v-219a8436]{flex-direction:column}.side[data-v-219a8436]{order:2;width:100%;height:56px;flex-direction:row;justify-content:center;border-right:none;border-top:1px solid var(--border);padding-top:0}.main[data-v-219a8436]{order:1;height:calc(100vh - 56px)}.nav-btn[data-v-219a8436]:after{display:none}}:root{--bg-page: #FFFFFF;--bg-subtle: #F7F8FA;--bg-hover: #F2F3F5;--border: #EBEDF0;--border-strong: #DCDEE3;--text-1: #1D2129;--text-2: #4E5969;--text-3: #86909C;--accent: #3370FF;--accent-bg: #F0F5FF;--ok: #23A757;--warn: #E8842C;--danger: #E5484D;--dot-empty: #C9CDD4;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--shadow-float: 0 4px 16px rgba(29, 33, 41, .08)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg-page);color:var(--text-1);font-family:-apple-system,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-size:13px;line-height:1.6;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}.num{font-variant-numeric:tabular-nums}.flex1{flex:1}.muted{color:var(--text-3)}.muted2{color:var(--text-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 12px;height:32px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg-page);color:var(--text-1);cursor:pointer;white-space:nowrap}.btn:hover{background:var(--bg-hover)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#2b5fd9}.btn-danger{color:var(--danger);border-color:var(--danger)}.btn-sm{height:26px;padding:0 10px;font-size:12px}.btn-xs{height:22px;padding:0 8px;font-size:12px}.input,.select,.textarea{height:32px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-page);outline:none;width:100%}.textarea{height:auto;min-height:56px;padding:8px 10px;resize:vertical}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent)}.input::placeholder,.textarea::placeholder{color:var(--text-3)}.card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-page)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;flex:none;border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-3);cursor:pointer}.icon-btn:hover{background:var(--bg-hover);color:var(--text-1)}.icon-btn.active{color:var(--accent)}.icon-btn.active-warn{color:var(--warn)}.tag{display:inline-block;padding:0 8px;height:22px;line-height:20px;border-radius:4px;font-size:12px;background:var(--bg-subtle);color:var(--text-2);border:1px solid var(--border);white-space:nowrap}.dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex:none}.dot.normal{background:var(--ok)}.dot.late,.dot.early,.dot.incomplete{background:var(--warn)}.dot.absent{background:var(--danger)}.dot.none,.dot.leave{background:var(--dot-empty)}@media (max-width: 720px){input,select,textarea{font-size:16px!important}input[type=checkbox]{font-size:initial}}.dot.rest{background:var(--border)}.icon{display:inline-flex;align-items:center;justify-content:center;flex:none}.icon svg{width:100%;height:100%;display:block} +.mask[data-v-f27041d4]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:100}.dialog[data-v-f27041d4]{width:380px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float);padding:20px}.dialog-title[data-v-f27041d4]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-msg[data-v-f27041d4]{margin-top:8px;color:var(--text-2);font-size:13px;line-height:1.7;word-break:break-all}.dialog-btns[data-v-f27041d4]{margin-top:20px;display:flex;justify-content:flex-end;gap:8px}.btn-danger-solid[data-v-f27041d4]{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger-solid[data-v-f27041d4]:hover{background:#d13a3f}.modal-enter-active[data-v-f27041d4],.modal-leave-active[data-v-f27041d4]{transition:opacity .15s ease}.modal-enter-from[data-v-f27041d4],.modal-leave-to[data-v-f27041d4]{opacity:0}.mask[data-v-63bc0b48]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-63bc0b48]{width:560px;max-width:calc(100vw - 32px);max-height:85vh;background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float);display:flex;flex-direction:column}.dialog-head[data-v-63bc0b48]{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border);flex:none}.dialog-title[data-v-63bc0b48]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-sub[data-v-63bc0b48]{font-size:12px;margin-top:2px}.dialog-body[data-v-63bc0b48]{padding:16px 20px;overflow:auto}.dialog-btns[data-v-63bc0b48]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border);flex:none}.form-grid[data-v-63bc0b48]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-63bc0b48]{grid-column:span 2}.field label[data-v-63bc0b48]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.form-error[data-v-63bc0b48]{color:var(--danger);font-size:12px;margin-top:4px}.input.invalid[data-v-63bc0b48],.input.invalid[data-v-63bc0b48]:focus{border-color:var(--danger)}.toggle-btn[data-v-63bc0b48]{height:32px;width:100%;border:1px solid var(--border-strong);background:var(--bg-page);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text-2)}.toggle-btn[data-v-63bc0b48]:hover{background:var(--bg-hover)}.toggle-btn.on[data-v-63bc0b48]{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.toggle-btn.onwarn[data-v-63bc0b48]{color:var(--warn);border-color:var(--warn)}.modal-enter-active[data-v-63bc0b48],.modal-leave-active[data-v-63bc0b48]{transition:opacity .15s ease}.modal-enter-from[data-v-63bc0b48],.modal-leave-to[data-v-63bc0b48]{opacity:0}.dp-head[data-v-2e90c9d8]{margin-bottom:12px}.dp-date[data-v-2e90c9d8]{font-size:14px;font-weight:600}.sec[data-v-2e90c9d8]{padding:14px 16px;margin-bottom:12px}.sec-title[data-v-2e90c9d8]{font-size:13px;font-weight:600;margin-bottom:10px;color:var(--text-1)}.sec-head[data-v-2e90c9d8]{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}.sec-head .sec-title[data-v-2e90c9d8]{margin-bottom:0}.form-hint[data-v-2e90c9d8]{font-size:12px}.att-grid[data-v-2e90c9d8]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.att-cell label[data-v-2e90c9d8],.field label[data-v-2e90c9d8]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.att-val[data-v-2e90c9d8]{display:flex;align-items:center;gap:6px;min-height:32px;font-size:13px}.status-val[data-v-2e90c9d8]{min-height:32px}.val-empty[data-v-2e90c9d8]{color:var(--text-3)}.edit-row[data-v-2e90c9d8]{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.time-input[data-v-2e90c9d8]{width:104px}.att-note[data-v-2e90c9d8]{margin-top:10px;font-size:12px}.att-actions[data-v-2e90c9d8]{display:flex;gap:8px;margin-top:12px}.form-grid[data-v-2e90c9d8]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-2e90c9d8]{grid-column:span 2}.form-footer[data-v-2e90c9d8]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.form-error[data-v-2e90c9d8]{color:var(--danger);font-size:12px;margin-top:4px}.input.invalid[data-v-2e90c9d8]{border-color:var(--danger)}.input.invalid[data-v-2e90c9d8]:focus{border-color:var(--danger)}.list-sec[data-v-2e90c9d8]{margin-bottom:4px}.item[data-v-2e90c9d8]{border:1px solid var(--border);border-radius:var(--radius-sm);padding:8px 10px;margin-bottom:6px;background:var(--bg-page)}.item-main[data-v-2e90c9d8]{display:flex;align-items:center;gap:8px;min-height:26px;flex-wrap:wrap}.item-content[data-v-2e90c9d8]{cursor:text;word-break:break-all}.item-meta[data-v-2e90c9d8]{font-size:12px}.item-sub[data-v-2e90c9d8]{margin-top:6px;padding-top:6px;border-top:1px dashed var(--border);font-size:12px;display:flex;flex-direction:column;gap:2px}.empty[data-v-2e90c9d8]{text-align:center;padding:24px 0}.dp-foot[data-v-2e90c9d8]{margin-top:10px;font-size:12px;text-align:right}@media (max-width: 560px){.att-grid[data-v-2e90c9d8],.form-grid[data-v-2e90c9d8]{grid-template-columns:1fr}.field.span2[data-v-2e90c9d8]{grid-column:auto}}.cal-toolbar[data-v-6a6322fa]{display:flex;align-items:center;gap:10px;margin-bottom:12px}.cal-title[data-v-6a6322fa]{font-size:14px;font-weight:600;min-width:96px;text-align:center}.cal-head[data-v-6a6322fa]{display:grid;grid-template-columns:repeat(7,1fr);border-top:1px solid var(--border);border-left:1px solid var(--border)}.cal-week[data-v-6a6322fa]{text-align:center;padding:6px 0;font-size:12px;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.cal-grid[data-v-6a6322fa]{display:grid;grid-template-columns:repeat(7,1fr);border-top:1px solid var(--border);border-left:1px solid var(--border)}.cal-cell[data-v-6a6322fa]{min-height:92px;padding:6px 8px;text-align:left;background:var(--bg-page);border:none;border-right:1px solid var(--border);border-bottom:1px solid var(--border);cursor:pointer;display:block;font-size:13px}.cal-cell[data-v-6a6322fa]:hover{background:var(--bg-subtle)}.cal-cell.blank[data-v-6a6322fa]{cursor:default}.cal-cell.blank[data-v-6a6322fa]:hover{background:var(--bg-page)}.cal-cell.selected[data-v-6a6322fa]{background:var(--accent-bg)}.daynum.today[data-v-6a6322fa]{color:var(--accent);font-weight:600}.cal-cell.weekend .daynum[data-v-6a6322fa]{color:var(--text-3)}.cal-marks[data-v-6a6322fa]{display:flex;align-items:center;gap:4px;margin-top:8px;height:14px}.mark-log[data-v-6a6322fa]{color:var(--text-3)}.mark-star[data-v-6a6322fa]{color:var(--accent)}.drawer[data-v-6a6322fa]{position:fixed;top:0;right:0;bottom:0;width:min(420px,100%);background:var(--bg-page);border-left:1px solid var(--border);box-shadow:var(--shadow-float);z-index:20;display:flex;flex-direction:column}.drawer-head[data-v-6a6322fa]{height:48px;flex:none;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid var(--border)}.drawer-title[data-v-6a6322fa]{font-weight:600}.drawer-body[data-v-6a6322fa]{flex:1;overflow:auto;padding:16px}.drawer-enter-active[data-v-6a6322fa],.drawer-leave-active[data-v-6a6322fa]{transition:opacity .15s ease}.drawer-enter-from[data-v-6a6322fa],.drawer-leave-to[data-v-6a6322fa]{opacity:0}.detail-toolbar[data-v-ac366cf6]{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.date-title[data-v-ac366cf6]{font-size:14px;font-weight:600;min-width:170px;text-align:center}.date-title.is-today[data-v-ac366cf6]{color:var(--accent)}.w-date[data-v-ac366cf6]{width:150px}.cards[data-v-73e5ba49]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.stat-card[data-v-73e5ba49]{padding:14px 16px}.stat-num[data-v-73e5ba49]{font-size:20px;font-weight:600;margin-top:4px}.section[data-v-73e5ba49]{padding:14px 16px;margin-top:12px}.section-title[data-v-73e5ba49]{font-weight:600;margin-bottom:10px;font-size:13px}.heat[data-v-73e5ba49]{display:flex;gap:3px;overflow-x:auto;padding-bottom:4px}.heat-col[data-v-73e5ba49]{display:flex;flex-direction:column;gap:3px}.heat-cell[data-v-73e5ba49]{width:12px;height:12px;border-radius:2px;display:inline-block}.lv0[data-v-73e5ba49]{background:var(--bg-subtle);border:1px solid var(--border)}.lv1[data-v-73e5ba49]{background:#d8ecdf}.lv2[data-v-73e5ba49]{background:#a9d8bc}.lv3[data-v-73e5ba49]{background:#6fbf92}.lv4[data-v-73e5ba49]{background:var(--ok)}.heat-legend[data-v-73e5ba49]{display:flex;align-items:center;gap:3px;margin-top:8px;font-size:12px}.two-col[data-v-73e5ba49]{display:grid;grid-template-columns:1fr 1fr;gap:12px}.bar-row[data-v-73e5ba49]{display:flex;align-items:center;gap:10px;margin:6px 0}.bar-label[data-v-73e5ba49]{width:72px;flex:none;color:var(--text-2);font-size:12px;text-align:right}.bar-track[data-v-73e5ba49]{flex:1;height:8px;border-radius:4px;background:var(--bg-subtle);overflow:hidden}.bar-fill[data-v-73e5ba49]{display:block;height:100%;background:var(--accent);border-radius:4px}.bar-num[data-v-73e5ba49]{font-size:12px;width:92px;flex:none}.loc-label[data-v-73e5ba49]{width:110px;text-align:left}@media (max-width: 720px){.cards[data-v-73e5ba49]{grid-template-columns:repeat(2,1fr)}.two-col[data-v-73e5ba49]{grid-template-columns:1fr}}.report-toolbar[data-v-43f9c59b]{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}.ai-error[data-v-43f9c59b]{color:var(--danger);font-size:12px;margin:0 0 8px}.seg[data-v-43f9c59b]{display:inline-flex;border:1px solid var(--border-strong);border-radius:6px;overflow:hidden}.seg-btn[data-v-43f9c59b]{height:28px;padding:0 12px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:12px;border-right:1px solid var(--border)}.seg-btn[data-v-43f9c59b]:last-child{border-right:none}.seg-btn[data-v-43f9c59b]:hover{background:var(--bg-hover)}.seg-btn.active[data-v-43f9c59b]{background:var(--accent-bg);color:var(--accent)}.w-date[data-v-43f9c59b]{width:140px}.report-grid[data-v-43f9c59b]{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:12px;align-items:start}.section[data-v-43f9c59b]{padding:14px 16px}.section-title[data-v-43f9c59b]{font-weight:600;margin-bottom:8px;font-size:13px}.section+.section[data-v-43f9c59b]{margin-top:12px}.note-label[data-v-43f9c59b]{display:block;font-size:12px;margin:8px 0 4px}.note-saved[data-v-43f9c59b]{font-size:12px;margin-top:6px}.md-editor[data-v-43f9c59b]{min-height:420px;line-height:1.7}.sum-row[data-v-43f9c59b]{display:flex;justify-content:space-between;padding:3px 0;font-size:12px}.section-sub[data-v-43f9c59b]{font-weight:600;margin:10px 0 4px;font-size:12px}.sum-item[data-v-43f9c59b]{font-size:12px;padding:2px 0;word-break:break-all}.sum-empty[data-v-43f9c59b]{font-size:12px}@media (max-width: 960px){.report-grid[data-v-43f9c59b]{grid-template-columns:1fr}}.mask[data-v-e3568c0d]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-e3568c0d]{width:480px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-e3568c0d]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-e3568c0d]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-body[data-v-e3568c0d]{padding:16px 20px}.dialog-btns[data-v-e3568c0d]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.form-grid[data-v-e3568c0d]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-e3568c0d]{grid-column:span 2}.field label[data-v-e3568c0d]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.seg[data-v-e3568c0d]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-e3568c0d]{height:30px;padding:0 14px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-e3568c0d]{border-left:1px solid var(--border)}.seg-btn.active[data-v-e3568c0d]{background:var(--accent-bg);color:var(--accent)}.form-error[data-v-e3568c0d]{color:var(--danger);font-size:12px;margin-top:8px}.input.invalid[data-v-e3568c0d],.input.invalid[data-v-e3568c0d]:focus{border-color:var(--danger)}.modal-enter-active[data-v-e3568c0d],.modal-leave-active[data-v-e3568c0d]{transition:opacity .15s ease}.modal-enter-from[data-v-e3568c0d],.modal-leave-to[data-v-e3568c0d]{opacity:0}.ledger-toolbar[data-v-848ec3d4]{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}.month-title[data-v-848ec3d4]{font-size:14px;font-weight:600;min-width:88px;text-align:center}.w-filter[data-v-848ec3d4]{width:110px;flex:none}.cards[data-v-848ec3d4]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}.stat-card[data-v-848ec3d4]{padding:14px 16px}.stat-num[data-v-848ec3d4]{font-size:20px;font-weight:600;margin-top:4px}.amt-income[data-v-848ec3d4]{color:var(--ok)}.amt-expense[data-v-848ec3d4]{color:var(--text-1)}.amt-warn[data-v-848ec3d4]{color:var(--warn)}.sec[data-v-848ec3d4]{padding:14px 16px;margin-top:12px}.sec-title[data-v-848ec3d4]{font-size:13px;font-weight:600;margin-bottom:10px}.sec-head[data-v-848ec3d4]{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}.sec-head .sec-title[data-v-848ec3d4]{margin-bottom:0}.form-hint[data-v-848ec3d4]{font-size:12px}.form-grid[data-v-848ec3d4]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-848ec3d4]{grid-column:span 2}.field label[data-v-848ec3d4]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.form-error[data-v-848ec3d4]{color:var(--danger);font-size:12px;margin-top:8px}.form-footer[data-v-848ec3d4]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}.seg[data-v-848ec3d4]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-848ec3d4]{height:30px;padding:0 14px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-848ec3d4]{border-left:1px solid var(--border)}.seg-btn.active[data-v-848ec3d4]{background:var(--accent-bg);color:var(--accent)}.toggle-btn[data-v-848ec3d4]{height:32px;width:100%;border:1px solid var(--border-strong);background:var(--bg-page);border-radius:var(--radius-sm);cursor:pointer;font-size:13px;color:var(--text-2)}.toggle-btn[data-v-848ec3d4]:hover{background:var(--bg-hover)}.toggle-btn.on[data-v-848ec3d4]{color:var(--accent);border-color:var(--accent);background:var(--accent-bg)}.bar-row[data-v-848ec3d4]{display:flex;align-items:center;gap:10px;margin:6px 0}.bar-label[data-v-848ec3d4]{width:56px;flex:none;color:var(--text-2);font-size:12px;text-align:right}.bar-track[data-v-848ec3d4]{flex:1;height:8px;border-radius:4px;background:var(--bg-subtle);overflow:hidden}.bar-fill[data-v-848ec3d4]{display:block;height:100%;background:var(--accent);border-radius:4px}.bar-num[data-v-848ec3d4]{font-size:12px;width:110px;flex:none}.table-card[data-v-848ec3d4]{overflow-x:auto}.tx-table[data-v-848ec3d4]{width:100%;border-collapse:collapse;font-size:13px}.tx-table th[data-v-848ec3d4]{text-align:left;font-weight:500;color:var(--text-2);background:var(--bg-subtle);padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}.tx-table td[data-v-848ec3d4]{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;word-break:break-all}.tx-table tbody tr[data-v-848ec3d4]:hover{background:var(--bg-subtle)}.tx-table tbody tr:last-child td[data-v-848ec3d4]{border-bottom:none}.td-note[data-v-848ec3d4]{color:var(--text-2)}.tx-pending[data-v-848ec3d4]{color:var(--warn);font-size:12px}.tx-done[data-v-848ec3d4]{color:var(--ok);font-size:12px}.th-ops[data-v-848ec3d4]{width:220px}.ops[data-v-848ec3d4]{display:flex;gap:4px;flex-wrap:wrap}.empty[data-v-848ec3d4]{text-align:center;padding:24px 0}.vault-note[data-v-848ec3d4]{margin-top:10px;font-size:12px;text-align:right}.memo-page[data-v-74d60dba]{display:grid;grid-template-columns:280px minmax(0,1fr);gap:12px;align-items:stretch}.memo-list[data-v-74d60dba]{display:flex;flex-direction:column;max-height:calc(100vh - 140px)}.pane-head[data-v-74d60dba]{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 8px;border-bottom:1px solid var(--border);flex:none}.pane-title[data-v-74d60dba]{font-size:13px;font-weight:600}.memo-scroll[data-v-74d60dba]{overflow:auto;padding:6px}.memo-item[data-v-74d60dba]{padding:8px 10px;border-radius:var(--radius-sm);cursor:pointer;margin-bottom:2px}.memo-item[data-v-74d60dba]:hover{background:var(--bg-hover)}.memo-item.active[data-v-74d60dba]{background:var(--accent-bg)}.memo-item.active .memo-item-title[data-v-74d60dba]{color:var(--accent)}.memo-item-title[data-v-74d60dba]{font-size:13px;font-weight:500;word-break:break-all}.memo-item-sub[data-v-74d60dba]{font-size:12px;margin-top:2px;word-break:break-all}.memo-item-time[data-v-74d60dba]{font-size:11px;margin-top:2px}.memo-editor[data-v-74d60dba]{padding:16px;min-height:420px;display:flex;flex-direction:column}.title-input[data-v-74d60dba]{font-size:14px;font-weight:500;margin-bottom:10px}.content-textarea[data-v-74d60dba]{flex:1;min-height:340px;line-height:1.8}.editor-foot[data-v-74d60dba]{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.foot-info[data-v-74d60dba]{font-size:12px}.editor-empty[data-v-74d60dba]{display:flex;align-items:center;justify-content:center;flex:1;padding:60px 0}@media (max-width: 800px){.memo-page[data-v-74d60dba]{grid-template-columns:1fr}.memo-list[data-v-74d60dba]{max-height:240px}.content-textarea[data-v-74d60dba]{min-height:240px}}.mask[data-v-f383b0a6]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-f383b0a6]{width:480px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-f383b0a6]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-f383b0a6]{font-size:14px;font-weight:600;color:var(--text-1)}.dialog-body[data-v-f383b0a6]{padding:16px 20px}.dialog-btns[data-v-f383b0a6]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.form-grid[data-v-f383b0a6]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 16px}.field.span2[data-v-f383b0a6]{grid-column:span 2}.field label[data-v-f383b0a6]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.pwd-row[data-v-f383b0a6]{display:flex;gap:8px}.pwd-row .input[data-v-f383b0a6]{flex:1}.form-error[data-v-f383b0a6]{color:var(--danger);font-size:12px;margin-top:8px}.modal-enter-active[data-v-f383b0a6],.modal-leave-active[data-v-f383b0a6]{transition:opacity .15s ease}.modal-enter-from[data-v-f383b0a6],.modal-leave-to[data-v-f383b0a6]{opacity:0}.lock-card[data-v-6820bc9c]{max-width:380px;margin:60px auto 0;padding:28px 24px;text-align:center;display:flex;flex-direction:column;gap:10px}.lock-badge[data-v-6820bc9c]{width:52px;height:52px;margin:0 auto;border-radius:50%;background:var(--bg-subtle);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;color:var(--text-2)}.lock-title[data-v-6820bc9c]{font-size:14px;font-weight:600}.lock-tip[data-v-6820bc9c]{font-size:12px;line-height:1.7}.lock-btn[data-v-6820bc9c]{margin-top:4px}.form-error[data-v-6820bc9c]{color:var(--danger);font-size:12px}.empty[data-v-6820bc9c]{text-align:center;padding:24px 0}.vault-toolbar[data-v-6820bc9c]{display:flex;align-items:center;gap:8px;margin-bottom:12px;flex-wrap:wrap}.search-wrap[data-v-6820bc9c]{position:relative;width:280px;max-width:100%}.search-wrap .input[data-v-6820bc9c]{padding-left:30px}.search-icon[data-v-6820bc9c]{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-3)}.table-card[data-v-6820bc9c]{overflow-x:auto}.cred-table[data-v-6820bc9c]{width:100%;border-collapse:collapse;font-size:13px}.cred-table th[data-v-6820bc9c]{text-align:left;font-weight:500;color:var(--text-2);background:var(--bg-subtle);padding:10px 12px;border-bottom:1px solid var(--border);white-space:nowrap}.cred-table td[data-v-6820bc9c]{padding:10px 12px;border-bottom:1px solid var(--border);vertical-align:top;word-break:break-all}.cred-table tbody tr[data-v-6820bc9c]:hover{background:var(--bg-subtle)}.cred-table tbody tr:last-child td[data-v-6820bc9c]{border-bottom:none}.td-system[data-v-6820bc9c]{font-weight:500}.th-ops[data-v-6820bc9c]{width:150px}.pwd-cell[data-v-6820bc9c]{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.pwd-text[data-v-6820bc9c]{letter-spacing:1px}.copyable[data-v-6820bc9c]{cursor:pointer}.copyable[data-v-6820bc9c]:hover{color:var(--accent)}.ops[data-v-6820bc9c]{display:flex;gap:4px;flex-wrap:wrap}.vault-note[data-v-6820bc9c]{margin-top:10px;font-size:12px;text-align:right}.mask[data-v-6820bc9c]{position:fixed;top:0;right:0;bottom:0;left:0;background:#1d212966;display:flex;align-items:center;justify-content:center;z-index:90}.dialog[data-v-6820bc9c]{width:440px;max-width:calc(100vw - 32px);background:var(--bg-page);border-radius:var(--radius-lg);box-shadow:var(--shadow-float)}.dialog-head[data-v-6820bc9c]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid var(--border)}.dialog-title[data-v-6820bc9c]{font-size:14px;font-weight:600}.dialog-body[data-v-6820bc9c]{padding:16px 20px}.dialog-btns[data-v-6820bc9c]{display:flex;justify-content:flex-end;gap:8px;padding:12px 20px 16px;border-top:1px solid var(--border)}.vp-field[data-v-6820bc9c]{margin-bottom:10px}.vp-field label[data-v-6820bc9c]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.vp-tip[data-v-6820bc9c]{font-size:12px;margin-top:8px}.modal-enter-active[data-v-6820bc9c],.modal-leave-active[data-v-6820bc9c]{transition:opacity .15s ease}.modal-enter-from[data-v-6820bc9c],.modal-leave-to[data-v-6820bc9c]{opacity:0}.settings[data-v-81598f02]{display:flex;flex-direction:column;gap:12px;max-width:640px}.acc-line[data-v-81598f02]{font-size:12px;margin-bottom:10px;line-height:1.7}.section[data-v-81598f02]{padding:14px 16px}.section-title[data-v-81598f02]{font-weight:600;margin-bottom:10px;font-size:13px}.rule-grid[data-v-81598f02]{display:grid;grid-template-columns:1fr 1fr;gap:10px 16px}.rule-item label[data-v-81598f02]{display:block;font-size:12px;color:var(--text-2);margin-bottom:4px}.rule-save[data-v-81598f02]{display:flex;align-items:center;gap:10px;margin-top:12px}.proj-add[data-v-81598f02]{display:flex;gap:8px}.proj-tip[data-v-81598f02]{font-size:12px;margin-top:6px}.proj-row[data-v-81598f02]{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border)}.proj-row[data-v-81598f02]:last-child{border-bottom:none}.proj-name[data-v-81598f02]{flex:1;word-break:break-all}.proj-name.archived[data-v-81598f02]{color:var(--text-3);text-decoration:line-through}.loc-note[data-v-81598f02]{font-size:12px}.ai-grid[data-v-81598f02]{display:flex;flex-direction:column;gap:10px}.backup-row[data-v-81598f02]{display:flex;gap:8px}.import-error[data-v-81598f02]{color:var(--danger);font-size:12px;margin-top:8px}.backup-note[data-v-81598f02]{font-size:12px;margin-top:10px}.login-page[data-v-d3d6c8cb]{min-height:100vh;background:var(--bg-subtle);display:flex;align-items:center;justify-content:center;padding:20px}.login-card[data-v-d3d6c8cb]{width:400px;max-width:100%;padding:28px 26px;display:flex;flex-direction:column;gap:12px;background:var(--bg-page)}.login-brand[data-v-d3d6c8cb]{text-align:center;margin-bottom:6px}.brand-icon[data-v-d3d6c8cb]{width:46px;height:46px;margin:0 auto 10px;border-radius:var(--radius-md);background:var(--accent-bg);color:var(--accent);display:flex;align-items:center;justify-content:center}.login-title[data-v-d3d6c8cb]{font-size:18px;font-weight:600;color:var(--text-1)}.login-sub[data-v-d3d6c8cb]{font-size:12px;margin-top:4px;line-height:1.7}.seg[data-v-d3d6c8cb]{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius-sm);overflow:hidden}.seg-btn[data-v-d3d6c8cb]{flex:1;height:30px;border:none;background:var(--bg-page);color:var(--text-2);cursor:pointer;font-size:13px}.seg-btn+.seg-btn[data-v-d3d6c8cb]{border-left:1px solid var(--border)}.seg-btn.active[data-v-d3d6c8cb]{background:var(--accent-bg);color:var(--accent)}.mig-row[data-v-d3d6c8cb]{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--text-2);cursor:pointer;line-height:1.6}.mig-row input[data-v-d3d6c8cb]{margin-top:3px}.form-error[data-v-d3d6c8cb]{color:var(--danger);font-size:12px}.login-btn[data-v-d3d6c8cb]{margin-top:2px}.login-note[data-v-d3d6c8cb]{font-size:12px;text-align:center;line-height:1.7}.app[data-v-219a8436]{display:flex;height:100vh;overflow:hidden}.side[data-v-219a8436]{width:56px;flex:none;border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding-top:10px;gap:4px;background:var(--bg-page)}.nav-btn[data-v-219a8436]{width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);color:var(--text-3);cursor:pointer;border:none;background:transparent;position:relative}.nav-btn[data-v-219a8436]:hover{background:var(--bg-hover);color:var(--text-1)}.nav-btn.active[data-v-219a8436]{background:var(--accent-bg);color:var(--accent)}.nav-btn[data-v-219a8436]:after{content:attr(data-tip);position:absolute;left:46px;top:50%;transform:translateY(-50%);background:var(--text-1);color:#fff;font-size:12px;line-height:1.4;padding:2px 8px;border-radius:4px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .15s}.nav-btn[data-v-219a8436]:hover:after{opacity:1}.main[data-v-219a8436]{flex:1;display:flex;flex-direction:column;min-width:0}.topbar[data-v-219a8436]{height:56px;flex:none;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px;padding:0 20px}.title[data-v-219a8436]{font-size:14px;font-weight:600}.gsearch[data-v-219a8436]{position:relative;width:300px;max-width:38vw}.gs-icon[data-v-219a8436]{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--text-3)}.gs-input[data-v-219a8436]{height:30px;padding-left:30px}.gs-panel[data-v-219a8436]{position:absolute;top:36px;left:0;right:0;background:var(--bg-page);border:1px solid var(--border);border-radius:var(--radius-md);box-shadow:var(--shadow-float);z-index:50;max-height:420px;overflow:auto;padding:6px}.gs-group[data-v-219a8436]{font-size:12px;padding:6px 8px 2px}.gs-item[data-v-219a8436]{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer}.gs-item[data-v-219a8436]:hover{background:var(--bg-hover)}.gs-text[data-v-219a8436],.gs-sub[data-v-219a8436]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.gs-text[data-v-219a8436]{font-size:13px}.gs-sub[data-v-219a8436]{font-size:12px}.gs-date[data-v-219a8436]{font-size:12px;flex:none}.gs-empty[data-v-219a8436]{padding:10px;font-size:12px;text-align:center}.user-chip[data-v-219a8436]{font-size:12px;color:var(--text-2);padding:0 4px}.week-tip[data-v-219a8436]{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--warn);color:var(--warn);background:var(--bg-page);border-radius:999px;height:26px;padding:0 10px;font-size:12px;cursor:pointer}.week-tip[data-v-219a8436]:hover{background:var(--bg-subtle)}.content[data-v-219a8436]{flex:1;overflow:auto}.content-inner[data-v-219a8436]{max-width:1200px;margin:0 auto;padding:20px}.toast-wrap[data-v-219a8436]{position:fixed;top:68px;right:20px;z-index:60;display:flex;flex-direction:column;gap:8px;align-items:flex-end;pointer-events:none}.toast[data-v-219a8436]{background:var(--bg-page);border:1px solid var(--border);box-shadow:var(--shadow-float);border-radius:var(--radius-sm);padding:8px 14px;font-size:13px;color:var(--text-1)}.toast-enter-from[data-v-219a8436],.toast-leave-to[data-v-219a8436]{opacity:0;transform:translateY(-4px)}.toast-enter-active[data-v-219a8436],.toast-leave-active[data-v-219a8436]{transition:all .15s ease}@media (max-width: 720px){.app[data-v-219a8436]{flex-direction:column}.side[data-v-219a8436]{order:2;width:100%;height:56px;flex-direction:row;justify-content:center;border-right:none;border-top:1px solid var(--border);padding-top:0}.main[data-v-219a8436]{order:1;height:calc(100vh - 56px)}.nav-btn[data-v-219a8436]:after{display:none}}:root{--bg-page: #FFFFFF;--bg-subtle: #F7F8FA;--bg-hover: #F2F3F5;--border: #EBEDF0;--border-strong: #DCDEE3;--text-1: #1D2129;--text-2: #4E5969;--text-3: #86909C;--accent: #3370FF;--accent-bg: #F0F5FF;--ok: #23A757;--warn: #E8842C;--danger: #E5484D;--dot-empty: #C9CDD4;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 12px;--shadow-float: 0 4px 16px rgba(29, 33, 41, .08)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg-page);color:var(--text-1);font-family:-apple-system,PingFang SC,Microsoft YaHei,system-ui,sans-serif;font-size:13px;line-height:1.6;-webkit-font-smoothing:antialiased}button,input,select,textarea{font:inherit;color:inherit}.num{font-variant-numeric:tabular-nums}.flex1{flex:1}.muted{color:var(--text-3)}.muted2{color:var(--text-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:0 12px;height:32px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--bg-page);color:var(--text-1);cursor:pointer;white-space:nowrap}.btn:hover{background:var(--bg-hover)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#2b5fd9}.btn-danger{color:var(--danger);border-color:var(--danger)}.btn-sm{height:26px;padding:0 10px;font-size:12px}.btn-xs{height:22px;padding:0 8px;font-size:12px}.input,.select,.textarea{height:32px;padding:0 10px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg-page);outline:none;width:100%}.textarea{height:auto;min-height:56px;padding:8px 10px;resize:vertical}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent)}.input::placeholder,.textarea::placeholder{color:var(--text-3)}.card{border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-page)}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;flex:none;border:none;background:transparent;border-radius:var(--radius-sm);color:var(--text-3);cursor:pointer}.icon-btn:hover{background:var(--bg-hover);color:var(--text-1)}.icon-btn.active{color:var(--accent)}.icon-btn.active-warn{color:var(--warn)}.tag{display:inline-block;padding:0 8px;height:22px;line-height:20px;border-radius:4px;font-size:12px;background:var(--bg-subtle);color:var(--text-2);border:1px solid var(--border);white-space:nowrap}.dot{width:6px;height:6px;border-radius:50%;display:inline-block;flex:none}.dot.normal{background:var(--ok)}.dot.late,.dot.early,.dot.incomplete{background:var(--warn)}.dot.absent{background:var(--danger)}.dot.none,.dot.leave{background:var(--dot-empty)}@media (max-width: 720px){input,select,textarea{font-size:16px!important}input[type=checkbox]{font-size:initial}}.dot.rest{background:var(--border)}.icon{display:inline-flex;align-items:center;justify-content:center;flex:none}.icon svg{width:100%;height:100%;display:block} diff --git a/intern-log/dist/assets/index-DpHejoml.js b/intern-log/dist/assets/index-DqacfBXY.js similarity index 69% rename from intern-log/dist/assets/index-DpHejoml.js rename to intern-log/dist/assets/index-DqacfBXY.js index 3dcaf97..abba2ba 100644 --- a/intern-log/dist/assets/index-DpHejoml.js +++ b/intern-log/dist/assets/index-DqacfBXY.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./web-CP24IQDG.js","./index-DS0rgMh0.js","./index-DXlhKHmS.css"])))=>i.map(i=>d[i]); -import{r as s,_ as i}from"./index-DS0rgMh0.js";var t;(function(e){e.Documents="DOCUMENTS",e.Data="DATA",e.Library="LIBRARY",e.Cache="CACHE",e.External="EXTERNAL",e.ExternalStorage="EXTERNAL_STORAGE"})(t||(t={}));var a;(function(e){e.UTF8="utf8",e.ASCII="ascii",e.UTF16="utf16"})(a||(a={}));const E=s("Filesystem",{web:()=>i(()=>import("./web-CP24IQDG.js"),__vite__mapDeps([0,1,2]),import.meta.url).then(e=>new e.FilesystemWeb)});export{t as Directory,a as Encoding,E as Filesystem}; +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./web-D50Vc2g1.js","./index-y5cGVWNn.js","./index-DWsZ3Bb0.css"])))=>i.map(i=>d[i]); +import{r as s,_ as i}from"./index-y5cGVWNn.js";var t;(function(e){e.Documents="DOCUMENTS",e.Data="DATA",e.Library="LIBRARY",e.Cache="CACHE",e.External="EXTERNAL",e.ExternalStorage="EXTERNAL_STORAGE"})(t||(t={}));var a;(function(e){e.UTF8="utf8",e.ASCII="ascii",e.UTF16="utf16"})(a||(a={}));const E=s("Filesystem",{web:()=>i(()=>import("./web-D50Vc2g1.js"),__vite__mapDeps([0,1,2]),import.meta.url).then(e=>new e.FilesystemWeb)});export{t as Directory,a as Encoding,E as Filesystem}; diff --git a/intern-log/dist/assets/index-DS0rgMh0.js b/intern-log/dist/assets/index-y5cGVWNn.js similarity index 68% rename from intern-log/dist/assets/index-DS0rgMh0.js rename to intern-log/dist/assets/index-y5cGVWNn.js index c05c8dd..79a8703 100644 --- a/intern-log/dist/assets/index-DS0rgMh0.js +++ b/intern-log/dist/assets/index-y5cGVWNn.js @@ -2,23 +2,23 @@ * @vue/shared v3.5.44 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Ma(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ct={},Ar=[],En=()=>{},Du=()=>!1,Jo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Xo=e=>e.startsWith("onUpdate:"),Et=Object.assign,Ia=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Jf=Object.prototype.hasOwnProperty,ot=(e,t)=>Jf.call(e,t),Le=Array.isArray,rr=e=>Fs(e)==="[object Map]",Bn=e=>Fs(e)==="[object Set]",Kl=e=>Fs(e)==="[object Date]",We=e=>typeof e=="function",bt=e=>typeof e=="string",$n=e=>typeof e=="symbol",at=e=>e!==null&&typeof e=="object",Ru=e=>(at(e)||We(e))&&We(e.then)&&We(e.catch),Lu=Object.prototype.toString,Fs=e=>Lu.call(e),Xf=e=>Fs(e).slice(8,-1),Ku=e=>Fs(e)==="[object Object]",ja=e=>bt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bs=Ma(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Qo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Qf=/-\w/g,hn=Qo(e=>e.replace(Qf,t=>t.slice(1).toUpperCase())),Zf=/\B([A-Z])/g,cr=Qo(e=>e.replace(Zf,"-$1").toLowerCase()),Fu=Qo(e=>e.charAt(0).toUpperCase()+e.slice(1)),zi=Qo(e=>e?`on${Fu(e)}`:""),Cn=(e,t)=>!Object.is(e,t),So=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Zo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ed=e=>{const t=bt(e)?Number(e):NaN;return isNaN(t)?e:t};let Fl;const ei=()=>Fl||(Fl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function sr(e){if(Le(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(td).forEach(n=>{if(n){const s=n.split(nd);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function et(e){let t="";if(bt(e))t=e;else if(Le(e))for(let n=0;nUn(n,t))}const Bu=e=>!!(e&&e.__v_isRef===!0),re=e=>bt(e)?e:e==null?"":Le(e)||at(e)&&(e.toString===Lu||!We(e.toString))?Bu(e)?re(e.value):JSON.stringify(e,Uu,2):String(e),Uu=(e,t)=>Bu(t)?Uu(e,t.value):rr(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],a)=>(n[Gi(s,a)+" =>"]=o,n),{})}:Bn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Gi(n))}:$n(t)?Gi(t):at(t)&&!Le(t)&&!Ku(t)?String(t):t,Gi=(e,t="")=>{var n;return $n(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** +**/function Ma(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const ct={},Ar=[],En=()=>{},Du=()=>!1,Jo=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Xo=e=>e.startsWith("onUpdate:"),Et=Object.assign,Ia=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Jf=Object.prototype.hasOwnProperty,ot=(e,t)=>Jf.call(e,t),Le=Array.isArray,rr=e=>Fs(e)==="[object Map]",Bn=e=>Fs(e)==="[object Set]",Kl=e=>Fs(e)==="[object Date]",ze=e=>typeof e=="function",bt=e=>typeof e=="string",$n=e=>typeof e=="symbol",at=e=>e!==null&&typeof e=="object",Ru=e=>(at(e)||ze(e))&&ze(e.then)&&ze(e.catch),Lu=Object.prototype.toString,Fs=e=>Lu.call(e),Xf=e=>Fs(e).slice(8,-1),Ku=e=>Fs(e)==="[object Object]",ja=e=>bt(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,bs=Ma(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Qo=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Qf=/-\w/g,hn=Qo(e=>e.replace(Qf,t=>t.slice(1).toUpperCase())),Zf=/\B([A-Z])/g,cr=Qo(e=>e.replace(Zf,"-$1").toLowerCase()),Fu=Qo(e=>e.charAt(0).toUpperCase()+e.slice(1)),zi=Qo(e=>e?`on${Fu(e)}`:""),Cn=(e,t)=>!Object.is(e,t),So=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Zo=e=>{const t=parseFloat(e);return isNaN(t)?e:t},ed=e=>{const t=bt(e)?Number(e):NaN;return isNaN(t)?e:t};let Fl;const ei=()=>Fl||(Fl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function sr(e){if(Le(e)){const t={};for(let n=0;nn.startsWith("/*")?"":n).split(td).forEach(n=>{if(n){const s=n.split(nd);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function et(e){let t="";if(bt(e))t=e;else if(Le(e))for(let n=0;nUn(n,t))}const Bu=e=>!!(e&&e.__v_isRef===!0),re=e=>bt(e)?e:e==null?"":Le(e)||at(e)&&(e.toString===Lu||!ze(e.toString))?Bu(e)?re(e.value):JSON.stringify(e,Uu,2):String(e),Uu=(e,t)=>Bu(t)?Uu(e,t.value):rr(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],a)=>(n[Gi(s,a)+" =>"]=o,n),{})}:Bn(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Gi(n))}:$n(t)?Gi(t):at(t)&&!Le(t)&&!Ku(t)?String(t):t,Gi=(e,t="")=>{var n;return $n(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};/** * @vue/reactivity v3.5.44 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Mt;class ud{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Mt&&(Mt.active?(this.parent=Mt,this.index=(Mt.scopes||(Mt.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Mt===this)Mt=this.prevScope;else{let t=Mt;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(_s){let t=_s;for(_s=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ws;){let t=ws;for(ws=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function zu(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Gu(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Ka(s),fd(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function ua(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Yu(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Yu(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===As)||(e.globalVersion=As,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ua(e))))return;e.flags|=2;const t=e.dep,n=dt,s=vn;dt=e,vn=!0;try{zu(e);const o=e.fn(e._value);(t.version===0||Cn(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{dt=n,vn=s,Gu(e),e.flags&=-3}}function Ka(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let a=n.computed.deps;a;a=a.nextDep)Ka(a,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function fd(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let vn=!0;const Ju=[];function An(){Ju.push(vn),vn=!1}function Pn(){const e=Ju.pop();vn=e===void 0?!0:e}function Bl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=dt;dt=void 0;try{t()}finally{dt=n}}}let As=0;class dd{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Fa{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!dt||!vn||dt===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==dt)n=this.activeLink=new dd(dt,this),dt.deps?(n.prevDep=dt.depsTail,dt.depsTail.nextDep=n,dt.depsTail=n):dt.deps=dt.depsTail=n,Xu(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=dt.depsTail,n.nextDep=void 0,dt.depsTail.nextDep=n,dt.depsTail=n,dt.deps===n&&(dt.deps=s)}return n}trigger(t){this.version++,As++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{La()}}}function Xu(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Xu(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ca=new WeakMap,Pr=Symbol(""),fa=Symbol(""),Ps=Symbol("");function Kt(e,t,n){if(vn&&dt){let s=ca.get(e);s||ca.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new Fa),o.map=s,o.key=n),o.track()}}function Rn(e,t,n,s,o,a){const c=ca.get(e);if(!c){As++;return}const d=h=>{h&&h.trigger()};if(Ra(),t==="clear")c.forEach(d);else{const h=Le(e),y=h&&ja(n);if(h&&n==="length"){const m=Number(s);c.forEach((k,D)=>{(D==="length"||D===Ps||!$n(D)&&D>=m)&&d(k)})}else switch((n!==void 0||c.has(void 0))&&d(c.get(n)),y&&d(c.get(Ps)),t){case"add":h?y&&d(c.get("length")):(d(c.get(Pr)),rr(e)&&d(c.get(fa)));break;case"delete":h||(d(c.get(Pr)),rr(e)&&d(c.get(fa)));break;case"set":rr(e)&&d(c.get(Pr));break}}La()}function qr(e){const t=rt(e);return t===e||(Kt(t,"iterate",Ps),ln(e))?t:Tn(e)?or(e)?t.map(n=>ir(un(n))):t.map(ir):t.map(un)}function ti(e){return Kt(e=rt(e),"iterate",Ps),e}function _n(e,t){return Tn(e)?ir(or(e)?un(t):t):un(t)}const pd={__proto__:null,[Symbol.iterator](){return Ji(this,Symbol.iterator,e=>_n(this,e))},concat(...e){return qr(this).concat(...e.map(t=>Le(t)?qr(t):t))},entries(){return Ji(this,"entries",e=>(e[1]=_n(this,e[1]),e))},every(e,t){return In(this,"every",e,t,void 0,arguments)},filter(e,t){return In(this,"filter",e,t,n=>n.map(s=>_n(this,s)),arguments)},find(e,t){return In(this,"find",e,t,n=>_n(this,n),arguments)},findIndex(e,t){return In(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return In(this,"findLast",e,t,n=>_n(this,n),arguments)},findLastIndex(e,t){return In(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return In(this,"forEach",e,t,void 0,arguments)},includes(...e){return Xi(this,"includes",e)},indexOf(...e){return Xi(this,"indexOf",e)},join(e){return qr(this).join(e)},lastIndexOf(...e){return Xi(this,"lastIndexOf",e)},map(e,t){return In(this,"map",e,t,void 0,arguments)},pop(){return ps(this,"pop")},push(...e){return ps(this,"push",e)},reduce(e,...t){return ql(this,"reduce",e,t)},reduceRight(e,...t){return ql(this,"reduceRight",e,t)},shift(){return ps(this,"shift")},some(e,t){return In(this,"some",e,t,void 0,arguments)},splice(...e){return ps(this,"splice",e)},toReversed(){return qr(this).toReversed()},toSorted(e){return qr(this).toSorted(e)},toSpliced(...e){return qr(this).toSpliced(...e)},unshift(...e){return ps(this,"unshift",e)},values(){return Ji(this,"values",e=>_n(this,e))}};function Ji(e,t,n){const s=ti(e),o=s[t],a=o.call(s);if(s!==e&&!ln(e)){if(a[Symbol.toStringTag]==="Array Iterator"){const c=Object.create(Object.getPrototypeOf(a));return c.next=()=>Ul(a.next(),n),o!==Qu[t]&&Object.defineProperties(c,{return:{get(){const d=a.return;return typeof d=="function"?d.bind(a):d}},throw:{get(){const d=a.throw;return typeof d=="function"?d.bind(a):d}}}),c}a._next=a.next,a.next=()=>Ul(a._next(),n)}return a}function Ul(e,t){return e.done||(e.value=t(e.value)),e}const Qu=Array.prototype;function In(e,t,n,s,o,a){const c=ti(e),d=c!==e&&!ln(e),h=c[t];if(h!==Qu[t]){const k=h.apply(e,a);return d?un(k):k}let y=n;c!==e&&(d?y=function(k,D){return n.call(this,_n(e,k),D,e)}:n.length>2&&(y=function(k,D){return n.call(this,k,D,e)}));const m=h.call(c,y,s);return d&&o?o(m):m}function ql(e,t,n,s){const o=ti(e),a=o!==e&&!ln(e);let c=n,d=!1;o!==e&&(a?(d=s.length===0,c=function(y,m,k){return d&&(d=!1,y=_n(e,y)),n.call(this,y,_n(e,m),k,e)}):n.length>3&&(c=function(y,m,k){return n.call(this,y,m,k,e)}));const h=o[t](c,...s);return d?_n(e,h):h}function Xi(e,t,n){const s=rt(e);Kt(s,"iterate",Ps);const o=s[t](...n);return(o===-1||o===!1)&&Ua(n[0])?(n[0]=rt(n[0]),s[t](...n)):o}function ps(e,t,n=[]){An(),Ra();const s=rt(e)[t].apply(e,n);return La(),Pn(),s}const hd=Ma("__proto__,__v_isRef,__isVue"),Zu=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter($n));function vd(e){$n(e)||(e=String(e));const t=rt(this);return Kt(t,"has",e),t.hasOwnProperty(e)}class ec{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,a=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return a;if(n==="__v_raw")return s===(o?a?Sd:sc:a?rc:nc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const c=Le(t);if(!o){let h;if(c&&(h=pd[n]))return h;if(n==="hasOwnProperty")return vd}const d=Reflect.get(t,n,Nt(t)?t:s);if(($n(n)?Zu.has(n):hd(n))||(o||Kt(t,"get",n),a))return d;if(Nt(d)){const h=c&&ja(n)?d:d.value;return o&&at(h)?pa(h):h}return at(d)?o?pa(d):Va(d):d}}class tc extends ec{constructor(t=!1){super(!1,t)}set(t,n,s,o){let a=t[n];const c=Le(t)&&ja(n);if(!this._isShallow){const y=Tn(a);if(!ln(s)&&!Tn(s)&&(a=rt(a),s=rt(s)),!c&&Nt(a)&&!Nt(s))return y||(a.value=s),!0}const d=c?Number(n)e,go=e=>Reflect.getPrototypeOf(e);function wd(e,t,n){return function(...s){const o=this.__v_raw,a=rt(o),c=rr(a),d=e==="entries"||e===Symbol.iterator&&c,h=e==="keys"&&c,y=o[e](...s),m=n?da:t?ir:un;return!t&&Kt(a,"iterate",h?fa:Pr),Et(Object.create(y),{next(){const{value:k,done:D}=y.next();return D?{value:k,done:D}:{value:d?[m(k[0]),m(k[1])]:m(k),done:D}}})}}function bo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function _d(e,t){const n={get(o){const a=this.__v_raw,c=rt(a),d=rt(o);e||(Cn(o,d)&&Kt(c,"get",o),Kt(c,"get",d));const{has:h}=go(c),y=t?da:e?ir:un;if(h.call(c,o))return y(a.get(o));if(h.call(c,d))return y(a.get(d));a!==c&&a.get(o)},get size(){const o=this.__v_raw;return!e&&Kt(rt(o),"iterate",Pr),o.size},has(o){const a=this.__v_raw,c=rt(a),d=rt(o);return e||(Cn(o,d)&&Kt(c,"has",o),Kt(c,"has",d)),o===d?a.has(o):a.has(o)||a.has(d)},forEach(o,a){const c=this,d=c.__v_raw,h=rt(d),y=t?da:e?ir:un;return!e&&Kt(h,"iterate",Pr),d.forEach((m,k)=>o.call(a,y(m),y(k),c))}};return Et(n,e?{add:bo("add"),set:bo("set"),delete:bo("delete"),clear:bo("clear")}:{add(o){const a=rt(this),c=go(a),d=rt(o),h=!t&&!ln(o)&&!Tn(o)?d:o;return c.has.call(a,h)||Cn(o,h)&&c.has.call(a,o)||Cn(d,h)&&c.has.call(a,d)||(a.add(h),Rn(a,"add",h,h)),this},set(o,a){!t&&!ln(a)&&!Tn(a)&&(a=rt(a));const c=rt(this),{has:d,get:h}=go(c);let y=d.call(c,o);y||(o=rt(o),y=d.call(c,o));const m=h.call(c,o);return c.set(o,a),y?Cn(a,m)&&Rn(c,"set",o,a):Rn(c,"add",o,a),this},delete(o){const a=rt(this),{has:c,get:d}=go(a);let h=c.call(a,o);h||(o=rt(o),h=c.call(a,o)),d&&d.call(a,o);const y=a.delete(o);return h&&Rn(a,"delete",o,void 0),y},clear(){const o=rt(this),a=o.size!==0,c=o.clear();return a&&Rn(o,"clear",void 0,void 0),c}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=wd(o,e,t)}),n}function Na(e,t){const n=_d(e,t);return(s,o,a)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_isShallow"?t:o==="__v_raw"?s:Reflect.get(ot(n,o)&&o in s?n:s,o,a)}const kd={get:Na(!1,!1)},xd={get:Na(!1,!0)},Cd={get:Na(!0,!1)};const nc=new WeakMap,rc=new WeakMap,sc=new WeakMap,Sd=new WeakMap;function Ed(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Va(e){return Tn(e)?e:Ba(e,!1,yd,kd,nc)}function $d(e){return Ba(e,!1,bd,xd,rc)}function pa(e){return Ba(e,!0,gd,Cd,sc)}function Ba(e,t,n,s,o){if(!at(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const a=o.get(e);if(a)return a;const c=Ed(Xf(e));if(c===0)return e;const d=new Proxy(e,c===2?s:n);return o.set(e,d),d}function or(e){return Tn(e)?or(e.__v_raw):!!(e&&e.__v_isReactive)}function Tn(e){return!!(e&&e.__v_isReadonly)}function ln(e){return!!(e&&e.__v_isShallow)}function Ua(e){return e?!!e.__v_raw:!1}function rt(e){const t=e&&e.__v_raw;return t?rt(t):e}function Ad(e){return!ot(e,"__v_skip")&&Object.isExtensible(e)&&Nu(e,"__v_skip",!0),e}const un=e=>at(e)?Va(e):e,ir=e=>at(e)?pa(e):e;function Nt(e){return e?e.__v_isRef===!0:!1}function N(e){return Pd(e,!1)}function Pd(e,t){return Nt(e)?e:new Td(e,t)}class Td{constructor(t,n){this.dep=new Fa,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:rt(t),this._value=n?t:un(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||ln(t)||Tn(t);t=s?t:rt(t),Cn(t,n)&&(this._rawValue=t,this._value=s?t:un(t),this.dep.trigger())}}function Qt(e){return Nt(e)?e.value:e}const Od={get:(e,t,n)=>t==="__v_raw"?e:Qt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Nt(o)&&!Nt(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function oc(e){return or(e)?e:new Proxy(e,Od)}class Md{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Fa(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=As-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&dt!==this)return Wu(this,!0),!0}get value(){const t=this.dep.track();return Yu(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Id(e,t,n=!1){let s,o;return We(e)?s=e:(s=e.get,o=e.set),new Md(s,o,n)}const wo={},Oo=new WeakMap;let Cr;function jd(e,t=!1,n=Cr){if(n){let s=Oo.get(n);s||Oo.set(n,s=[]),s.push(e)}}function Dd(e,t,n=ct){const{immediate:s,deep:o,once:a,scheduler:c,augmentJob:d,call:h}=n,y=Q=>o?Q:ln(Q)||o===!1||o===0?Ln(Q,1):Ln(Q);let m,k,D,O,K=!1,W=!1;if(Nt(e)?(k=()=>e.value,K=ln(e)):or(e)?(k=()=>y(e),K=!0):Le(e)?(W=!0,K=e.some(Q=>or(Q)||ln(Q)),k=()=>e.map(Q=>{if(Nt(Q))return Q.value;if(or(Q))return y(Q);if(We(Q))return h?h(Q,2):Q()})):We(e)?t?k=h?()=>h(e,2):e:k=()=>{if(D){An();try{D()}finally{Pn()}}const Q=Cr;Cr=m;try{return h?h(e,3,[O]):e(O)}finally{Cr=Q}}:k=En,t&&o){const Q=k,le=o===!0?1/0:o;k=()=>Ln(Q(),le)}const fe=cd(),ee=()=>{m.stop(),fe&&fe.active&&Ia(fe.effects,m)};if(a&&t){const Q=t;t=(...le)=>{try{return Q(...le)}finally{ee()}}}let E=W?new Array(e.length).fill(wo):wo;const L=Q=>{if(!(!(m.flags&1)||!m.dirty&&!Q))if(t){const le=m.run();if(Q||o||K||(W?le.some((ce,Z)=>Cn(ce,E[Z])):Cn(le,E))){const ce=Cr;An();try{D&&D(),Cr=m;const Z=[le,E===wo?void 0:W&&E[0]===wo?[]:E,O];E=le,h?h(t,3,Z):t(...Z)}finally{Cr=ce,Pn()}}}else m.run()};return d&&d(L),m=new qu(k),m.scheduler=c?()=>c(L,!1):L,O=Q=>jd(Q,!1,m),D=m.onStop=()=>{const Q=Oo.get(m);if(Q){if(h)h(Q,4);else for(const le of Q)le();Oo.delete(m)}},t?s?L(!0):E=m.run():c?c(L.bind(null,!0),!0):m.run(),ee.pause=m.pause.bind(m),ee.resume=m.resume.bind(m),ee.stop=ee,ee}function Ln(e,t=1/0,n){if(t<=0||!at(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Nt(e))Ln(e.value,t,n);else if(Le(e))for(let s=0;s{Ln(s,t,n)});else if(Ku(e)){for(const s in e)Ln(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ln(e[s],t,n)}return e}/** +**/let Mt;class ud{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!t&&Mt&&(Mt.active?(this.parent=Mt,this.index=(Mt.scopes||(Mt.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes){const s=this.scopes.slice();for(t=0,n=s.length;t0&&--this._on===0){if(Mt===this)Mt=this.prevScope;else{let t=Mt;for(;t;){if(t.prevScope===this){t.prevScope=this.prevScope;break}t=t.prevScope}}this.prevScope=void 0}}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(_s){let t=_s;for(_s=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ws;){let t=ws;for(ws=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function zu(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Gu(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),Ka(s),fd(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function ua(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Yu(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Yu(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===As)||(e.globalVersion=As,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ua(e))))return;e.flags|=2;const t=e.dep,n=dt,s=vn;dt=e,vn=!0;try{zu(e);const o=e.fn(e._value);(t.version===0||Cn(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{dt=n,vn=s,Gu(e),e.flags&=-3}}function Ka(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let a=n.computed.deps;a;a=a.nextDep)Ka(a,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function fd(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let vn=!0;const Ju=[];function An(){Ju.push(vn),vn=!1}function Pn(){const e=Ju.pop();vn=e===void 0?!0:e}function Bl(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=dt;dt=void 0;try{t()}finally{dt=n}}}let As=0;class dd{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Fa{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!dt||!vn||dt===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==dt)n=this.activeLink=new dd(dt,this),dt.deps?(n.prevDep=dt.depsTail,dt.depsTail.nextDep=n,dt.depsTail=n):dt.deps=dt.depsTail=n,Xu(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=dt.depsTail,n.nextDep=void 0,dt.depsTail.nextDep=n,dt.depsTail=n,dt.deps===n&&(dt.deps=s)}return n}trigger(t){this.version++,As++,this.notify(t)}notify(t){Ra();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{La()}}}function Xu(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)Xu(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const ca=new WeakMap,Pr=Symbol(""),fa=Symbol(""),Ps=Symbol("");function Kt(e,t,n){if(vn&&dt){let s=ca.get(e);s||ca.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new Fa),o.map=s,o.key=n),o.track()}}function Rn(e,t,n,s,o,a){const c=ca.get(e);if(!c){As++;return}const d=h=>{h&&h.trigger()};if(Ra(),t==="clear")c.forEach(d);else{const h=Le(e),y=h&&ja(n);if(h&&n==="length"){const m=Number(s);c.forEach((k,D)=>{(D==="length"||D===Ps||!$n(D)&&D>=m)&&d(k)})}else switch((n!==void 0||c.has(void 0))&&d(c.get(n)),y&&d(c.get(Ps)),t){case"add":h?y&&d(c.get("length")):(d(c.get(Pr)),rr(e)&&d(c.get(fa)));break;case"delete":h||(d(c.get(Pr)),rr(e)&&d(c.get(fa)));break;case"set":rr(e)&&d(c.get(Pr));break}}La()}function qr(e){const t=rt(e);return t===e||(Kt(t,"iterate",Ps),ln(e))?t:Tn(e)?or(e)?t.map(n=>ir(un(n))):t.map(ir):t.map(un)}function ti(e){return Kt(e=rt(e),"iterate",Ps),e}function _n(e,t){return Tn(e)?ir(or(e)?un(t):t):un(t)}const pd={__proto__:null,[Symbol.iterator](){return Ji(this,Symbol.iterator,e=>_n(this,e))},concat(...e){return qr(this).concat(...e.map(t=>Le(t)?qr(t):t))},entries(){return Ji(this,"entries",e=>(e[1]=_n(this,e[1]),e))},every(e,t){return In(this,"every",e,t,void 0,arguments)},filter(e,t){return In(this,"filter",e,t,n=>n.map(s=>_n(this,s)),arguments)},find(e,t){return In(this,"find",e,t,n=>_n(this,n),arguments)},findIndex(e,t){return In(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return In(this,"findLast",e,t,n=>_n(this,n),arguments)},findLastIndex(e,t){return In(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return In(this,"forEach",e,t,void 0,arguments)},includes(...e){return Xi(this,"includes",e)},indexOf(...e){return Xi(this,"indexOf",e)},join(e){return qr(this).join(e)},lastIndexOf(...e){return Xi(this,"lastIndexOf",e)},map(e,t){return In(this,"map",e,t,void 0,arguments)},pop(){return ps(this,"pop")},push(...e){return ps(this,"push",e)},reduce(e,...t){return ql(this,"reduce",e,t)},reduceRight(e,...t){return ql(this,"reduceRight",e,t)},shift(){return ps(this,"shift")},some(e,t){return In(this,"some",e,t,void 0,arguments)},splice(...e){return ps(this,"splice",e)},toReversed(){return qr(this).toReversed()},toSorted(e){return qr(this).toSorted(e)},toSpliced(...e){return qr(this).toSpliced(...e)},unshift(...e){return ps(this,"unshift",e)},values(){return Ji(this,"values",e=>_n(this,e))}};function Ji(e,t,n){const s=ti(e),o=s[t],a=o.call(s);if(s!==e&&!ln(e)){if(a[Symbol.toStringTag]==="Array Iterator"){const c=Object.create(Object.getPrototypeOf(a));return c.next=()=>Ul(a.next(),n),o!==Qu[t]&&Object.defineProperties(c,{return:{get(){const d=a.return;return typeof d=="function"?d.bind(a):d}},throw:{get(){const d=a.throw;return typeof d=="function"?d.bind(a):d}}}),c}a._next=a.next,a.next=()=>Ul(a._next(),n)}return a}function Ul(e,t){return e.done||(e.value=t(e.value)),e}const Qu=Array.prototype;function In(e,t,n,s,o,a){const c=ti(e),d=c!==e&&!ln(e),h=c[t];if(h!==Qu[t]){const k=h.apply(e,a);return d?un(k):k}let y=n;c!==e&&(d?y=function(k,D){return n.call(this,_n(e,k),D,e)}:n.length>2&&(y=function(k,D){return n.call(this,k,D,e)}));const m=h.call(c,y,s);return d&&o?o(m):m}function ql(e,t,n,s){const o=ti(e),a=o!==e&&!ln(e);let c=n,d=!1;o!==e&&(a?(d=s.length===0,c=function(y,m,k){return d&&(d=!1,y=_n(e,y)),n.call(this,y,_n(e,m),k,e)}):n.length>3&&(c=function(y,m,k){return n.call(this,y,m,k,e)}));const h=o[t](c,...s);return d?_n(e,h):h}function Xi(e,t,n){const s=rt(e);Kt(s,"iterate",Ps);const o=s[t](...n);return(o===-1||o===!1)&&Ua(n[0])?(n[0]=rt(n[0]),s[t](...n)):o}function ps(e,t,n=[]){An(),Ra();const s=rt(e)[t].apply(e,n);return La(),Pn(),s}const hd=Ma("__proto__,__v_isRef,__isVue"),Zu=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter($n));function vd(e){$n(e)||(e=String(e));const t=rt(this);return Kt(t,"has",e),t.hasOwnProperty(e)}class ec{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,a=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return a;if(n==="__v_raw")return s===(o?a?Sd:sc:a?rc:nc).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const c=Le(t);if(!o){let h;if(c&&(h=pd[n]))return h;if(n==="hasOwnProperty")return vd}const d=Reflect.get(t,n,Nt(t)?t:s);if(($n(n)?Zu.has(n):hd(n))||(o||Kt(t,"get",n),a))return d;if(Nt(d)){const h=c&&ja(n)?d:d.value;return o&&at(h)?pa(h):h}return at(d)?o?pa(d):Va(d):d}}class tc extends ec{constructor(t=!1){super(!1,t)}set(t,n,s,o){let a=t[n];const c=Le(t)&&ja(n);if(!this._isShallow){const y=Tn(a);if(!ln(s)&&!Tn(s)&&(a=rt(a),s=rt(s)),!c&&Nt(a)&&!Nt(s))return y||(a.value=s),!0}const d=c?Number(n)e,go=e=>Reflect.getPrototypeOf(e);function wd(e,t,n){return function(...s){const o=this.__v_raw,a=rt(o),c=rr(a),d=e==="entries"||e===Symbol.iterator&&c,h=e==="keys"&&c,y=o[e](...s),m=n?da:t?ir:un;return!t&&Kt(a,"iterate",h?fa:Pr),Et(Object.create(y),{next(){const{value:k,done:D}=y.next();return D?{value:k,done:D}:{value:d?[m(k[0]),m(k[1])]:m(k),done:D}}})}}function bo(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function _d(e,t){const n={get(o){const a=this.__v_raw,c=rt(a),d=rt(o);e||(Cn(o,d)&&Kt(c,"get",o),Kt(c,"get",d));const{has:h}=go(c),y=t?da:e?ir:un;if(h.call(c,o))return y(a.get(o));if(h.call(c,d))return y(a.get(d));a!==c&&a.get(o)},get size(){const o=this.__v_raw;return!e&&Kt(rt(o),"iterate",Pr),o.size},has(o){const a=this.__v_raw,c=rt(a),d=rt(o);return e||(Cn(o,d)&&Kt(c,"has",o),Kt(c,"has",d)),o===d?a.has(o):a.has(o)||a.has(d)},forEach(o,a){const c=this,d=c.__v_raw,h=rt(d),y=t?da:e?ir:un;return!e&&Kt(h,"iterate",Pr),d.forEach((m,k)=>o.call(a,y(m),y(k),c))}};return Et(n,e?{add:bo("add"),set:bo("set"),delete:bo("delete"),clear:bo("clear")}:{add(o){const a=rt(this),c=go(a),d=rt(o),h=!t&&!ln(o)&&!Tn(o)?d:o;return c.has.call(a,h)||Cn(o,h)&&c.has.call(a,o)||Cn(d,h)&&c.has.call(a,d)||(a.add(h),Rn(a,"add",h,h)),this},set(o,a){!t&&!ln(a)&&!Tn(a)&&(a=rt(a));const c=rt(this),{has:d,get:h}=go(c);let y=d.call(c,o);y||(o=rt(o),y=d.call(c,o));const m=h.call(c,o);return c.set(o,a),y?Cn(a,m)&&Rn(c,"set",o,a):Rn(c,"add",o,a),this},delete(o){const a=rt(this),{has:c,get:d}=go(a);let h=c.call(a,o);h||(o=rt(o),h=c.call(a,o)),d&&d.call(a,o);const y=a.delete(o);return h&&Rn(a,"delete",o,void 0),y},clear(){const o=rt(this),a=o.size!==0,c=o.clear();return a&&Rn(o,"clear",void 0,void 0),c}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=wd(o,e,t)}),n}function Na(e,t){const n=_d(e,t);return(s,o,a)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_isShallow"?t:o==="__v_raw"?s:Reflect.get(ot(n,o)&&o in s?n:s,o,a)}const kd={get:Na(!1,!1)},xd={get:Na(!1,!0)},Cd={get:Na(!0,!1)};const nc=new WeakMap,rc=new WeakMap,sc=new WeakMap,Sd=new WeakMap;function Ed(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Va(e){return Tn(e)?e:Ba(e,!1,yd,kd,nc)}function $d(e){return Ba(e,!1,bd,xd,rc)}function pa(e){return Ba(e,!0,gd,Cd,sc)}function Ba(e,t,n,s,o){if(!at(e)||e.__v_raw&&!(t&&e.__v_isReactive)||e.__v_skip||!Object.isExtensible(e))return e;const a=o.get(e);if(a)return a;const c=Ed(Xf(e));if(c===0)return e;const d=new Proxy(e,c===2?s:n);return o.set(e,d),d}function or(e){return Tn(e)?or(e.__v_raw):!!(e&&e.__v_isReactive)}function Tn(e){return!!(e&&e.__v_isReadonly)}function ln(e){return!!(e&&e.__v_isShallow)}function Ua(e){return e?!!e.__v_raw:!1}function rt(e){const t=e&&e.__v_raw;return t?rt(t):e}function Ad(e){return!ot(e,"__v_skip")&&Object.isExtensible(e)&&Nu(e,"__v_skip",!0),e}const un=e=>at(e)?Va(e):e,ir=e=>at(e)?pa(e):e;function Nt(e){return e?e.__v_isRef===!0:!1}function N(e){return Pd(e,!1)}function Pd(e,t){return Nt(e)?e:new Td(e,t)}class Td{constructor(t,n){this.dep=new Fa,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:rt(t),this._value=n?t:un(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||ln(t)||Tn(t);t=s?t:rt(t),Cn(t,n)&&(this._rawValue=t,this._value=s?t:un(t),this.dep.trigger())}}function Qt(e){return Nt(e)?e.value:e}const Od={get:(e,t,n)=>t==="__v_raw"?e:Qt(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Nt(o)&&!Nt(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function oc(e){return or(e)?e:new Proxy(e,Od)}class Md{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Fa(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=As-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&dt!==this)return Wu(this,!0),!0}get value(){const t=this.dep.track();return Yu(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Id(e,t,n=!1){let s,o;return ze(e)?s=e:(s=e.get,o=e.set),new Md(s,o,n)}const wo={},Oo=new WeakMap;let Cr;function jd(e,t=!1,n=Cr){if(n){let s=Oo.get(n);s||Oo.set(n,s=[]),s.push(e)}}function Dd(e,t,n=ct){const{immediate:s,deep:o,once:a,scheduler:c,augmentJob:d,call:h}=n,y=Q=>o?Q:ln(Q)||o===!1||o===0?Ln(Q,1):Ln(Q);let m,k,D,O,K=!1,W=!1;if(Nt(e)?(k=()=>e.value,K=ln(e)):or(e)?(k=()=>y(e),K=!0):Le(e)?(W=!0,K=e.some(Q=>or(Q)||ln(Q)),k=()=>e.map(Q=>{if(Nt(Q))return Q.value;if(or(Q))return y(Q);if(ze(Q))return h?h(Q,2):Q()})):ze(e)?t?k=h?()=>h(e,2):e:k=()=>{if(D){An();try{D()}finally{Pn()}}const Q=Cr;Cr=m;try{return h?h(e,3,[O]):e(O)}finally{Cr=Q}}:k=En,t&&o){const Q=k,le=o===!0?1/0:o;k=()=>Ln(Q(),le)}const de=cd(),ee=()=>{m.stop(),de&&de.active&&Ia(de.effects,m)};if(a&&t){const Q=t;t=(...le)=>{try{return Q(...le)}finally{ee()}}}let E=W?new Array(e.length).fill(wo):wo;const L=Q=>{if(!(!(m.flags&1)||!m.dirty&&!Q))if(t){const le=m.run();if(Q||o||K||(W?le.some((ce,Z)=>Cn(ce,E[Z])):Cn(le,E))){const ce=Cr;An();try{D&&D(),Cr=m;const Z=[le,E===wo?void 0:W&&E[0]===wo?[]:E,O];E=le,h?h(t,3,Z):t(...Z)}finally{Cr=ce,Pn()}}}else m.run()};return d&&d(L),m=new qu(k),m.scheduler=c?()=>c(L,!1):L,O=Q=>jd(Q,!1,m),D=m.onStop=()=>{const Q=Oo.get(m);if(Q){if(h)h(Q,4);else for(const le of Q)le();Oo.delete(m)}},t?s?L(!0):E=m.run():c?c(L.bind(null,!0),!0):m.run(),ee.pause=m.pause.bind(m),ee.resume=m.resume.bind(m),ee.stop=ee,ee}function Ln(e,t=1/0,n){if(t<=0||!at(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Nt(e))Ln(e.value,t,n);else if(Le(e))for(let s=0;s{Ln(s,t,n)});else if(Ku(e)){for(const s in e)Ln(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Ln(e[s],t,n)}return e}/** * @vue/runtime-core v3.5.44 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Ns(e,t,n,s){try{return s?e(...s):e()}catch(o){ni(o,t,n)}}function cn(e,t,n,s){if(We(e)){const o=Ns(e,t,n,s);return o&&Ru(o)&&o.catch(a=>{ni(a,t,n)}),o}if(Le(e)){const o=[];for(let a=0;a>>1,o=Wt[s],a=Ts(o);a=Ts(n)?Wt.push(e):Wt.splice(Ld(t),0,e),e.flags|=1,ac()}}function ac(){Mo||(Mo=ic.then(cc))}function Kd(e){if(!Le(e))tr&&e.id===-1?tr.splice(Hr+1,0,e):e.flags&1||(kn.push(e),e.flags|=1);else for(let t=0;t=t))continue;Wt.splice(s,1),s=e?s-1:pn,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function uc(e,t,n=0){if(kn.length){let s=kn,o=0;if(t){s=[];for(let c=0;cTs(c)-Ts(d));if(kn.length=o,tr){for(let c=0;ce.id==null?e.flags&2?-1:1/0:e.id;function cc(e){try{for(pn=0;pn{s._d&&Lo(-1);const a=Io(t),c=Tr.length;let d;try{d=e(...o)}finally{for(let h=Tr.length;h>c;h--)Fc();Io(a),s._d&&Lo(1)}return d};return s._n=!0,s._c=!0,s._d=!0,s}function $e(e,t){if(an===null)return e;const n=li(an),s=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&We(t)?t.call(s&&s.proxy):t}}const Vd=Symbol.for("v-scx"),Bd=()=>Eo(Vd);function gt(e,t,n){return dc(e,t,n)}function dc(e,t,n=ct){const{immediate:s,deep:o,flush:a,once:c}=n,d=Et({},n),h=t&&s||!t&&a!=="post";let y;if(Rs){if(a==="sync"){const O=Bd();y=O.__watcherHandles||(O.__watcherHandles=[])}else if(!h){const O=()=>{};return O.stop=En,O.resume=En,O.pause=En,O}}const m=zt;d.call=(O,K,W)=>cn(O,m,K,W);let k=!1;a==="post"?d.scheduler=O=>{O.i=m,Ht(O,m&&m.suspense)}:a!=="sync"&&(k=!0,d.scheduler=(O,K)=>{K?O():qa(O)}),d.augmentJob=O=>{t&&(O.flags|=4),k&&(O.flags|=2,m&&(O.id=m.uid,O.i=m))};const D=Dd(e,t,d);return Rs&&(y?y.push(D):h&&D()),D}function Ud(e,t,n){const s=this.proxy,o=bt(e)?e.includes(".")?pc(s,e):()=>s[e]:e.bind(s,s);let a;We(t)?a=t:(a=t.handler,n=t);const c=Bs(this),d=dc(o,a.bind(s),n);return c(),d}function pc(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,Er=e=>e&&(e.disabled||e.disabled===""),qd=e=>e&&(e.defer||e.defer===""),Hl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Wl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ha=(e,t)=>{const n=e&&e.to;return bt(n)?t?t(n):null:n},Hd={name:"Teleport",__isTeleport:!0,process(e,t,n,s,o,a,c,d,h,y){const{mc:m,pc:k,pbc:D,o:{insert:O,querySelector:K,createText:W,createComment:fe,parentNode:ee}}=y,E=Er(t.props);let{dynamicChildren:L}=t;const Q=(Z,A,x)=>{Z.shapeFlag&16&&m(Z.children,A,x,o,a,c,d,h)},le=(Z=t)=>{const A=Er(Z.props),x=Z.target=ha(Z.props,K),ie=va(x,Z,W,O);x&&(c!=="svg"&&Hl(x)?c="svg":c!=="mathml"&&Wl(x)&&(c="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(x),A||(Q(Z,x,ie),ms(Z,!1)))},ce=Z=>{const A=()=>{if(Zn.get(Z)===A){if(Zn.delete(Z),Er(Z.props)){const x=ee(Z.el)||n;Q(Z,x,Z.anchor),ms(Z,!0)}le(Z)}};Zn.set(Z,A),Ht(A,a)};if(e==null){const Z=t.el=W(""),A=t.anchor=W("");if(O(Z,n,s),O(A,n,s),qd(t.props)||a&&a.pendingBranch){ce(t);return}E&&(Q(t,n,A),ms(t,!0)),le()}else{t.el=e.el;const Z=t.anchor=e.anchor,A=Zn.get(e);if(A){A.flags|=8,Zn.delete(e),ce(t);return}t.targetStart=e.targetStart;const x=t.target=e.target,ie=t.targetAnchor=e.targetAnchor,xe=Er(e.props),Y=xe?n:x,Ce=xe?Z:ie;if(c==="svg"||Hl(x)?c="svg":(c==="mathml"||Wl(x))&&(c="mathml"),L?(D(e.dynamicChildren,L,Y,o,a,c,d),Ga(e,t,!0)):h||k(e,t,Y,Ce,o,a,c,d,!1),E)xe?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):_o(t,n,Z,y,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Ne=ha(t.props,K);Ne&&(t.target=Ne,_o(t,Ne,null,y,0))}else xe&&_o(t,x,ie,y,1);ms(t,E)}},remove(e,t,n,{um:s,o:{remove:o}},a){const{shapeFlag:c,children:d,anchor:h,targetStart:y,targetAnchor:m,target:k,props:D}=e,O=Er(D),K=a||!O,W=Zn.get(e);if(W&&(W.flags|=8,Zn.delete(e)),k&&(o(y),o(m)),a&&o(h),!W&&(O||k)&&c&16)for(let fe=0;fe{e.isMounted=!0}),kc(()=>{e.isUnmounting=!0}),e}const sn=[Function,Array],mc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:sn,onEnter:sn,onAfterEnter:sn,onEnterCancelled:sn,onBeforeLeave:sn,onLeave:sn,onAfterLeave:sn,onLeaveCancelled:sn,onBeforeAppear:sn,onAppear:sn,onAfterAppear:sn,onAppearCancelled:sn},zd={name:"BaseTransition",props:mc,setup(e,{slots:t}){const n=Ya(),s=vc();return()=>{const o=t.default&&Ha(t.default(),!0),a=o&&o.length?yc(o):n.subTree?Ee():void 0;if(!a)return;const c=rt(e),{mode:d}=c;if(s.isLeaving)return Zi(a);const h=jo(a);if(!h)return Zi(a);let y=Os(h,c,s,n,k=>y=k);h.type!==Ft&&ar(h,y);let m=n.subTree&&jo(n.subTree);if(m&&m.type!==Ft&&!$r(m,h)&&Ms(n.subTree)){let k=Os(m,c,s,n);if(ar(m,k),d==="out-in"&&h.type!==Ft)return s.isLeaving=!0,k.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete k.afterLeave,m=void 0},Zi(a);d==="in-out"&&h.type!==Ft?k.delayLeave=(D,O,K)=>{const W=gc(s,m);W[String(m.key)]=m,D[on]=()=>{O(),D[on]=void 0,delete y.delayedLeave,m=void 0},y.delayedLeave=()=>{K(),delete y.delayedLeave,m=void 0}}:m=void 0}else m&&(m=void 0);return a}}};function yc(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ft){t=n;break}}return t}const Gd=zd;function gc(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Os(e,t,n,s,o){const{appear:a,mode:c,persisted:d=!1,onBeforeEnter:h,onEnter:y,onAfterEnter:m,onEnterCancelled:k,onBeforeLeave:D,onLeave:O,onAfterLeave:K,onLeaveCancelled:W,onBeforeAppear:fe,onAppear:ee,onAfterAppear:E,onAppearCancelled:L}=t,Q=String(e.key),le=gc(n,e),ce=(x,ie)=>{x&&cn(x,s,9,ie)},Z=(x,ie)=>{const xe=ie[1];ce(x,ie),Le(x)?x.every(Y=>Y.length<=1)&&xe():x.length<=1&&xe()},A={mode:c,persisted:d,beforeEnter(x){let ie=h;if(!n.isMounted)if(a)ie=fe||h;else return;x[on]&&x[on](!0);const xe=le[Q];if(xe&&$r(e,xe)){let Y=xe.el[on];if(!Y){const Ce=Ms(xe);Y=Ce&&Ce.el[on]}Y&&Y()}ce(ie,[x])},enter(x){if(le[Q]===e)return;let ie=y,xe=m,Y=k;if(!n.isMounted)if(a)ie=ee||y,xe=E||m,Y=L||k;else return;let Ce=!1;x[hs]=Xe=>{Ce||(Ce=!0,Xe?ce(Y,[x]):ce(xe,[x]),A.delayedLeave&&A.delayedLeave(),x[hs]=void 0)};const Ne=x[hs].bind(null,!1);ie?Z(ie,[x,Ne]):Ne()},leave(x,ie){const xe=String(e.key);if(x[hs]&&x[hs](!0),n.isUnmounting)return ie();ce(D,[x]);let Y=!1;x[on]=Ne=>{Y||(Y=!0,ie(),Ne?ce(W,[x]):ce(K,[x]),x[on]=void 0,le[xe]===e&&delete le[xe])};const Ce=x[on].bind(null,!1);le[xe]=e,O?Z(O,[x,Ce]):Ce()},clone(x){const ie=Os(x,t,n,s,o);return o&&o(ie),ie}};return A}function Zi(e){if(si(e))return e=lr(e),e.children=null,e}function jo(e){if(!si(e))return ri(e.type)&&e.children?yc(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&We(n.default))return n.default()}}function ar(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;ar(ri(n.type)&&jo(n)||n,t)}else if(e.shapeFlag&128)e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback);else if(e.transition=t,e.type===Re&&Le(e.children)){const n=$c(e.children,!1);n&&ar(n,t)}}function Ha(e,t=!1,n){let s=[],o=0;for(let a=0;a1)for(let a=0;aks(W,t&&(Le(t)?t[fe]:t),n,s,o));return}if(xs(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&ks(e,t,n,s.component.subTree);return}const a=s.shapeFlag&4?li(s.component):s.el,c=o?null:a,{i:d,r:h}=e,y=t&&t.r,m=d.refs===ct?d.refs={}:d.refs,k=d.setupState,D=rt(k),O=k===ct?Du:W=>zl(m,W)?!1:ot(D,W),K=(W,fe)=>!(fe&&zl(m,fe));if(y!=null&&y!==h){if(Gl(t),bt(y))m[y]=null,O(y)&&(k[y]=null);else if(Nt(y)){const W=t;K(y,W.k)&&(y.value=null),W.k&&(m[W.k]=null)}}if(We(h))Ns(h,d,12,[c,m]);else{const W=bt(h),fe=Nt(h);if(W||fe){const ee=()=>{if(e.f){const E=W?O(h)?k[h]:m[h]:K()||!e.k?h.value:m[e.k];if(o)Le(E)&&Ia(E,a);else if(Le(E))E.includes(a)||E.push(a);else if(W)m[h]=[a],O(h)&&(k[h]=m[h]);else{const L=[a];K(h,e.k)&&(h.value=L),e.k&&(m[e.k]=L)}}else W?(m[h]=c,O(h)&&(k[h]=c)):fe&&(K(h,e.k)&&(h.value=c),e.k&&(m[e.k]=c))};if(c){const E=()=>{ee(),Do.delete(e)};E.id=-1,Do.set(e,E),Ht(E,n)}else Gl(e),ee()}}}function Gl(e){const t=Do.get(e);t&&(t.flags|=8,Do.delete(e))}ei().requestIdleCallback;ei().cancelIdleCallback;const xs=e=>!!e.type.__asyncLoader,si=e=>e.type.__isKeepAlive;function Yd(e,t){wc(e,"a",t)}function Jd(e,t){wc(e,"da",t)}function wc(e,t,n=zt){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(oi(t,s,n),n){let o=n.parent;for(;o&&o.parent;)si(o.parent.vnode)&&Xd(s,t,n,o),o=o.parent}}function Xd(e,t,n,s){const o=oi(t,e,s,!0);dr(()=>{Ia(s[t],o)},n)}function oi(e,t,n=zt,s=!1){if(n){const o=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...c)=>{An();const d=Bs(n),h=cn(t,n,e,c);return d(),Pn(),h});return s?o.unshift(a):o.push(a),a}}const qn=e=>(t,n=zt)=>{(!Rs||e==="sp")&&oi(e,(...s)=>t(...s),n)},Qd=qn("bm"),fn=qn("m"),Zd=qn("bu"),_c=qn("u"),kc=qn("bum"),dr=qn("um"),ep=qn("sp"),tp=qn("rtg"),np=qn("rtc");function rp(e,t=zt){oi("ec",e,t)}const sp=Symbol.for("v-ndc");function ut(e,t,n,s){let o;const a=n,c=Le(e);if(c||bt(e)){const d=c&&or(e);let h=!1,y=!1;d&&(h=!ln(e),y=Tn(e),e=ti(e)),o=new Array(e.length);for(let m=0,k=e.length;mt(d,h,void 0,a));else{const d=Object.keys(e);o=new Array(d.length);for(let h=0,y=d.length;he?Uc(e)?li(e):ma(e.parent):null,Cs=Et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ma(e.parent),$root:e=>ma(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Cc(e),$forceUpdate:e=>e.f||(e.f=()=>{qa(e.update)}),$nextTick:e=>e.n||(e.n=ts.bind(e.proxy)),$watch:e=>Ud.bind(e)}),ea=(e,t)=>e!==ct&&!e.__isScriptSetup&&ot(e,t),op={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:a,accessCache:c,type:d,appContext:h}=e;if(t[0]!=="$"){const D=c[t];if(D!==void 0)switch(D){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return a[t]}else{if(ea(s,t))return c[t]=1,s[t];if(o!==ct&&ot(o,t))return c[t]=2,o[t];if(ot(a,t))return c[t]=3,a[t];if(n!==ct&&ot(n,t))return c[t]=4,n[t];ya&&(c[t]=0)}}const y=Cs[t];let m,k;if(y)return t==="$attrs"&&Kt(e.attrs,"get",""),y(e);if((m=d.__cssModules)&&(m=m[t]))return m;if(n!==ct&&ot(n,t))return c[t]=4,n[t];if(k=h.config.globalProperties,ot(k,t))return k[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:a}=e;return ea(o,t)?(o[t]=n,!0):s!==ct&&ot(s,t)?(s[t]=n,!0):ot(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:a,type:c}},d){let h;return!!(n[d]||e!==ct&&d[0]!=="$"&&ot(e,d)||ea(t,d)||ot(a,d)||ot(s,d)||ot(Cs,d)||ot(o.config.globalProperties,d)||(h=c.__cssModules)&&h[d])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ot(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Yl(e){return Le(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ya=!0;function ip(e){const t=Cc(e),n=e.proxy,s=e.ctx;ya=!1,t.beforeCreate&&Jl(t.beforeCreate,e,"bc");const{data:o,computed:a,methods:c,watch:d,provide:h,inject:y,created:m,beforeMount:k,mounted:D,beforeUpdate:O,updated:K,activated:W,deactivated:fe,beforeDestroy:ee,beforeUnmount:E,destroyed:L,unmounted:Q,render:le,renderTracked:ce,renderTriggered:Z,errorCaptured:A,serverPrefetch:x,expose:ie,inheritAttrs:xe,components:Y,directives:Ce,filters:Ne}=t;if(y&&ap(y,s,null),c)for(const Ue in c){const ge=c[Ue];We(ge)&&(s[Ue]=ge.bind(n))}if(o){const Ue=o.call(n,n);at(Ue)&&(e.data=Va(Ue))}if(ya=!0,a)for(const Ue in a){const ge=a[Ue],Me=We(ge)?ge.bind(n,n):We(ge.get)?ge.get.bind(n,n):En,Ke=!We(ge)&&We(ge.set)?ge.set.bind(n):En,de=it({get:Me,set:Ke});Object.defineProperty(s,Ue,{enumerable:!0,configurable:!0,get:()=>de.value,set:X=>de.value=X})}if(d)for(const Ue in d)xc(d[Ue],s,n,Ue);if(h){const Ue=We(h)?h.call(n):h;Reflect.ownKeys(Ue).forEach(ge=>{Nd(ge,Ue[ge])})}m&&Jl(m,e,"c");function qe(Ue,ge){Le(ge)?ge.forEach(Me=>Ue(Me.bind(n))):ge&&Ue(ge.bind(n))}if(qe(Qd,k),qe(fn,D),qe(Zd,O),qe(_c,K),qe(Yd,W),qe(Jd,fe),qe(rp,A),qe(np,ce),qe(tp,Z),qe(kc,E),qe(dr,Q),qe(ep,x),Le(ie))if(ie.length){const Ue=e.exposed||(e.exposed={});ie.forEach(ge=>{Object.defineProperty(Ue,ge,{get:()=>n[ge],set:Me=>n[ge]=Me,enumerable:!0})})}else e.exposed||(e.exposed={});le&&e.render===En&&(e.render=le),xe!=null&&(e.inheritAttrs=xe),Y&&(e.components=Y),Ce&&(e.directives=Ce),x&&bc(e)}function ap(e,t,n=En){Le(e)&&(e=ga(e));for(const s in e){const o=e[s];let a;at(o)?"default"in o?a=Eo(o.from||s,o.default,!0):a=Eo(o.from||s):a=Eo(o),Nt(a)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>a.value,set:c=>a.value=c}):t[s]=a}}function Jl(e,t,n){cn(Le(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function xc(e,t,n,s){let o=s.includes(".")?pc(n,s):()=>n[s];if(bt(e)){const a=t[e];We(a)&>(o,a)}else if(We(e))gt(o,e.bind(n));else if(at(e))if(Le(e))e.forEach(a=>xc(a,t,n,s));else{const a=We(e.handler)?e.handler.bind(n):t[e.handler];We(a)&>(o,a,e)}}function Cc(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:a,config:{optionMergeStrategies:c}}=e.appContext,d=a.get(t);let h;return d?h=d:!o.length&&!n&&!s?h=t:(h={},o.length&&o.forEach(y=>Ro(h,y,c,!0)),Ro(h,t,c)),at(t)&&a.set(t,h),h}function Ro(e,t,n,s=!1){const{mixins:o,extends:a}=t;a&&Ro(e,a,n,!0),o&&o.forEach(c=>Ro(e,c,n,!0));for(const c in t)if(!(s&&c==="expose")){const d=lp[c]||n&&n[c];e[c]=d?d(e[c],t[c]):t[c]}return e}const lp={data:Xl,props:Ql,emits:Ql,methods:ys,computed:ys,beforeCreate:qt,created:qt,beforeMount:qt,mounted:qt,beforeUpdate:qt,updated:qt,beforeDestroy:qt,beforeUnmount:qt,destroyed:qt,unmounted:qt,activated:qt,deactivated:qt,errorCaptured:qt,serverPrefetch:qt,components:ys,directives:ys,watch:cp,provide:Xl,inject:up};function Xl(e,t){return t?e?function(){return Et(We(e)?e.call(this,this):e,We(t)?t.call(this,this):t)}:t:e}function up(e,t){return ys(ga(e),ga(t))}function ga(e){if(Le(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${hn(t)}Modifiers`]||e[`${cr(t)}Modifiers`];function hp(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ct;let o=n;const a=t.startsWith("update:"),c=a&&pp(s,t.slice(7));c&&(c.trim&&(o=n.map(m=>bt(m)?m.trim():m)),c.number&&(o=o.map(Zo)));let d,h=s[d=zi(t)]||s[d=zi(hn(t))];!h&&a&&(h=s[d=zi(cr(t))]),h&&cn(h,e,6,o);const y=s[d+"Once"];if(y){if(!e.emitted)e.emitted={};else if(e.emitted[d])return;e.emitted[d]=!0,cn(y,e,6,o)}}const vp=new WeakMap;function Ec(e,t,n=!1){const s=n?vp:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const a=e.emits;let c={},d=!1;if(!We(e)){const h=y=>{const m=Ec(y,t,!0);m&&(d=!0,Et(c,m))};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}return!a&&!d?(at(e)&&s.set(e,null),null):(Le(a)?a.forEach(h=>c[h]=null):Et(c,a),at(e)&&s.set(e,c),c)}function ii(e,t){return!e||!Jo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ot(e,t[0].toLowerCase()+t.slice(1))||ot(e,cr(t))||ot(e,t))}function Zl(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[a],slots:c,attrs:d,emit:h,render:y,renderCache:m,props:k,data:D,setupState:O,ctx:K,inheritAttrs:W}=e,fe=Io(e);let ee,E;try{if(n.shapeFlag&4){const Q=o||s,le=Q;ee=xn(y.call(le,Q,m,k,O,D,K)),E=d}else{const Q=t;ee=xn(Q.length>1?Q(k,{attrs:d,slots:c,emit:h}):Q(k,null)),E=t.props?d:mp(d)}}catch(Q){Tr.length=0,ni(Q,e,1),ee=Oe(Ft)}let L=ee;if(E&&W!==!1){const Q=Object.keys(E),{shapeFlag:le}=L;Q.length&&le&7&&(a&&Q.some(Xo)&&(E=yp(E,a)),L=lr(L,E,!1,!0))}if(n.dirs&&(L=lr(L,null,!1,!0),L.dirs=L.dirs?L.dirs.concat(n.dirs):n.dirs),n.transition){const Q=ri(L.type)&&jo(L)||L;ar(Q,n.transition)}return ee=L,Io(fe),ee}function $c(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Jo(n))&&((t||(t={}))[n]=e[n]);return t},yp=(e,t)=>{const n={};for(const s in e)(!Xo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function gp(e,t,n){const{props:s,children:o,component:a}=e,{props:c,children:d,patchFlag:h}=t,y=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&h>=0){if(h&1024)return!0;if(h&16)return s?eu(s,c,y):!!c;if(h&8){const m=t.dynamicProps;for(let k=0;kObject.create(Pc),Oc=e=>Object.getPrototypeOf(e)===Pc;function wp(e,t,n,s=!1){const o={},a=Tc();e.propsDefaults=Object.create(null),Mc(e,t,o,a);for(const c in e.propsOptions[0])c in o||(o[c]=void 0);n?e.props=s?o:$d(o):e.type.props?e.props=o:e.props=a,e.attrs=a}function _p(e,t,n,s){const{props:o,attrs:a,vnode:{patchFlag:c}}=e,d=rt(o),[h]=e.propsOptions;let y=!1;if((s||c>0)&&!(c&16)){if(c&8){const m=e.vnode.dynamicProps;for(let k=0;k{h=!0;const[D,O]=Ic(k,t,!0);Et(c,D),O&&d.push(...O)};!n&&t.mixins.length&&t.mixins.forEach(m),e.extends&&m(e.extends),e.mixins&&e.mixins.forEach(m)}if(!a&&!h)return at(e)&&s.set(e,Ar),Ar;if(Le(a))for(let m=0;me==="_"||e==="_ctx"||e==="$stable",za=e=>Le(e)?e.map(xn):[xn(e)],xp=(e,t,n)=>{if(t._n)return t;const s=fr((...o)=>za(t(...o)),n);return s._c=!1,s},jc=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Wa(o))continue;const a=e[o];if(We(a))t[o]=xp(o,a,s);else if(a!=null){const c=za(a);t[o]=()=>c}}},Dc=(e,t)=>{const n=za(t);e.slots.default=()=>n},Rc=(e,t,n)=>{for(const s in t)(n||!Wa(s))&&(e[s]=t[s])},Cp=(e,t,n)=>{const s=e.slots=Tc();if(e.vnode.shapeFlag&32){const o=t._;o?(Rc(s,t,n),n&&Nu(s,"_",o,!0)):jc(t,s)}else t&&Dc(e,t)},Sp=(e,t,n)=>{const{vnode:s,slots:o}=e;let a=!0,c=ct;if(s.shapeFlag&32){const d=t._;d?n&&d===1?a=!1:Rc(o,t,n):(a=!t.$stable,jc(t,o)),c=t}else t&&(Dc(e,t),c={default:1});if(a)for(const d in o)!Wa(d)&&c[d]==null&&delete o[d]},Ht=Tp;function Ep(e){return $p(e)}function $p(e,t){const n=ei();n.__VUE__=!0;const{insert:s,remove:o,patchProp:a,createElement:c,createText:d,createComment:h,setText:y,setElementText:m,parentNode:k,nextSibling:D,setScopeId:O=En,insertStaticContent:K}=e,W=(w,g,P,ae=null,se=null,ue=null,ye=void 0,oe=null,we=!!g.dynamicChildren)=>{if(w===g)return;w&&!$r(w,g)&&(ae=ht(w),X(w,se,ue,!0),w=null),g.patchFlag===-2&&(we=!1,g.dynamicChildren=null),g.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(g.dynamicChildren===Ar&&(g.dynamicChildren=[]),g.dynamicChildren.hasOnce=!0);const{type:H,ref:U,shapeFlag:G}=g;switch(H){case ai:fe(w,g,P,ae);break;case Ft:ee(w,g,P,ae);break;case $o:w==null&&E(g,P,ae,ye);break;case Re:Y(w,g,P,ae,se,ue,ye,oe,we);break;default:G&1?le(w,g,P,ae,se,ue,ye,oe,we):G&6?Ce(w,g,P,ae,se,ue,ye,oe,we):(G&64||G&128)&&H.process(w,g,P,ae,se,ue,ye,oe,we,Jt)}U!=null&&se?ks(U,w&&w.ref,ue,g||w,!g):U==null&&w&&w.ref!=null&&ks(w.ref,null,ue,w,!0)},fe=(w,g,P,ae)=>{if(w==null)s(g.el=d(g.children),P,ae);else{const se=g.el=w.el;g.children!==w.children&&y(se,g.children)}},ee=(w,g,P,ae)=>{w==null?s(g.el=h(g.children||""),P,ae):g.el=w.el},E=(w,g,P,ae)=>{[w.el,w.anchor]=K(w.children,g,P,ae,w.el,w.anchor)},L=({el:w,anchor:g},P,ae)=>{let se;for(;w&&w!==g;)se=D(w),s(w,P,ae),w=se;s(g,P,ae)},Q=({el:w,anchor:g})=>{let P;for(;w&&w!==g;)P=D(w),o(w),w=P;o(g)},le=(w,g,P,ae,se,ue,ye,oe,we)=>{if(g.type==="svg"?ye="svg":g.type==="math"&&(ye="mathml"),w==null)ce(g,P,ae,se,ue,ye,oe,we);else{const H=w.el&&w.el._isVueCE?w.el:null;try{H&&H._beginPatch(),x(w,g,se,ue,ye,oe,we)}finally{H&&H._endPatch()}}},ce=(w,g,P,ae,se,ue,ye,oe)=>{let we,H;const{props:U,shapeFlag:G,transition:Ae,dirs:Fe}=w;if(we=w.el=c(w.type,ue,U&&U.is,U),G&8?m(we,w.children):G&16&&A(w.children,we,null,ae,se,ta(w,ue),ye,oe),Fe&&_r(w,null,ae,"created"),Z(we,w,w.scopeId,ye,ae),U){for(const Ye in U)Ye!=="value"&&!bs(Ye)&&a(we,Ye,null,U[Ye],ue,ae);"value"in U&&a(we,"value",null,U.value,ue),(H=U.onVnodeBeforeMount)&&gn(H,ae,w)}Fe&&_r(w,null,ae,"beforeMount");const Je=Ap(se,Ae);Je&&Ae.beforeEnter(we),s(we,g,P),((H=U&&U.onVnodeMounted)||Je||Fe)&&Ht(()=>{try{H&&gn(H,ae,w),Je&&Ae.enter(we),Fe&&_r(w,null,ae,"mounted")}finally{}},se)},Z=(w,g,P,ae,se)=>{if(P&&O(w,P),ae)for(let ue=0;ue{for(let H=we;H{const oe=g.el=w.el;let{patchFlag:we,dynamicChildren:H,dirs:U}=g;we|=w.patchFlag&16;const G=w.props||ct,Ae=g.props||ct;let Fe;if(P&&kr(P,!1),(Fe=Ae.onVnodeBeforeUpdate)&&gn(Fe,P,g,w),U&&_r(g,w,P,"beforeUpdate"),P&&kr(P,!0),H&&(!w.dynamicChildren||w.dynamicChildren.length!==H.length)&&(we=0,ye=!1,H=null),(G.innerHTML&&Ae.innerHTML==null||G.textContent&&Ae.textContent==null)&&m(oe,""),H?ie(w.dynamicChildren,H,oe,P,ae,ta(g,se),ue):ye||ge(w,g,oe,null,P,ae,ta(g,se),ue,!1),we>0){if(we&16)xe(oe,G,Ae,P,se);else if(we&2&&G.class!==Ae.class&&a(oe,"class",null,Ae.class,se),we&4&&a(oe,"style",G.style,Ae.style,se),we&8){const Je=g.dynamicProps;for(let Ye=0;Ye{Fe&&gn(Fe,P,g,w),U&&_r(g,w,P,"updated")},ae)},ie=(w,g,P,ae,se,ue,ye)=>{for(let oe=0;oe{if(g!==P){if(g!==ct)for(const ue in g)!bs(ue)&&!(ue in P)&&a(w,ue,g[ue],null,se,ae);for(const ue in P){if(bs(ue))continue;const ye=P[ue],oe=g[ue];ye!==oe&&ue!=="value"&&a(w,ue,oe,ye,se,ae)}"value"in P&&a(w,"value",g.value,P.value,se)}},Y=(w,g,P,ae,se,ue,ye,oe,we)=>{const H=g.el=w?w.el:d(""),U=g.anchor=w?w.anchor:d("");let{patchFlag:G,dynamicChildren:Ae,slotScopeIds:Fe}=g;Fe&&(oe=oe?oe.concat(Fe):Fe),w==null?(s(H,P,ae),s(U,P,ae),A(g.children||[],P,U,se,ue,ye,oe,we)):G>0&&G&64&&Ae&&w.dynamicChildren&&w.dynamicChildren.length===Ae.length?(ie(w.dynamicChildren,Ae,P,se,ue,ye,oe),(g.key!=null||se&&g===se.subTree)&&Ga(w,g,!0)):ge(w,g,P,U,se,ue,ye,oe,we)},Ce=(w,g,P,ae,se,ue,ye,oe,we)=>{g.slotScopeIds=oe,w==null?g.shapeFlag&512?se.ctx.activate(g,P,ae,ye,we):Ne(g,P,ae,se,ue,ye,we):Xe(w,g,we)},Ne=(w,g,P,ae,se,ue,ye)=>{const oe=w.component=Lp(w,ae,se);if(si(w)&&(oe.ctx.renderer=Jt),Kp(oe,!1,ye),oe.asyncDep){if(se&&se.registerDep(oe,qe,ye,ue),!w.el){const we=oe.subTree=Oe(Ft);ee(null,we,g,P),w.placeholder=we.el}}else qe(oe,w,g,P,se,ue,ye)},Xe=(w,g,P)=>{const ae=g.component=w.component;if(gp(w,g,P))if(ae.asyncDep&&!ae.asyncResolved){g.el=w.el,g.placeholder=w.placeholder,Ue(ae,g,P);return}else ae.next=g,ae.update();else g.el=w.el,g.placeholder=w.placeholder,ae.vnode=g},qe=(w,g,P,ae,se,ue,ye)=>{const oe=()=>{if(w.isMounted){let{next:G,bu:Ae,u:Fe,parent:Je,vnode:Ye}=w;{const Bt=Lc(w);if(Bt){G&&(G.el=Ye.el,Ue(w,G,ye)),Bt.asyncDep.then(()=>{Ht(()=>{w.isUnmounted||H()},se)});return}}let Qe=G,vt;kr(w,!1),G?(G.el=Ye.el,Ue(w,G,ye)):G=Ye,Ae&&So(Ae),(vt=G.props&&G.props.onVnodeBeforeUpdate)&&gn(vt,Je,G,Ye),kr(w,!0);const _t=Zl(w),Xt=w.subTree;w.subTree=_t,W(Xt,_t,k(Xt.el),ht(Xt),w,se,ue),G.el=_t.el,Qe===null&&bp(w,_t.el),Fe&&Ht(Fe,se),(vt=G.props&&G.props.onVnodeUpdated)&&Ht(()=>gn(vt,Je,G,Ye),se)}else{let G;const{el:Ae,props:Fe}=g,{bm:Je,m:Ye,parent:Qe,root:vt,type:_t}=w,Xt=xs(g);kr(w,!1),Je&&So(Je),!Xt&&(G=Fe&&Fe.onVnodeBeforeMount)&&gn(G,Qe,g),kr(w,!0);{vt.ce&&vt.ce._hasShadowRoot()&&vt.ce._injectChildStyle(_t,w.parent?w.parent.type:void 0);const Bt=w.subTree=Zl(w);W(null,Bt,P,ae,w,se,ue),g.el=Bt.el}if(Ye&&Ht(Ye,se),!Xt&&(G=Fe&&Fe.onVnodeMounted)){const Bt=g;Ht(()=>gn(G,Qe,Bt),se)}(g.shapeFlag&256||Qe&&xs(Qe.vnode)&&Qe.vnode.shapeFlag&256)&&w.a&&Ht(w.a,se),w.isMounted=!0,g=P=ae=null}};w.scope.on();const we=w.effect=new qu(oe);w.scope.off();const H=w.update=we.run.bind(we),U=w.job=we.runIfDirty.bind(we);U.i=w,U.id=w.uid,we.scheduler=()=>qa(U),kr(w,!0),H()},Ue=(w,g,P)=>{g.component=w;const ae=w.vnode.props;w.vnode=g,w.next=null,_p(w,g.props,ae,P),Sp(w,g.children,P),An(),lc(w),Pn()},ge=(w,g,P,ae,se,ue,ye,oe,we=!1)=>{const H=w&&w.children,U=w?w.shapeFlag:0,G=g.children,{patchFlag:Ae,shapeFlag:Fe}=g;if(Ae>0){if(Ae&128){Ke(H,G,P,ae,se,ue,ye,oe,we);return}else if(Ae&256){Me(H,G,P,ae,se,ue,ye,oe,we);return}}Fe&8?(U&16&&pt(H,se,ue),G!==H&&m(P,G)):U&16?Fe&16?Ke(H,G,P,ae,se,ue,ye,oe,we):pt(H,se,ue,!0):(U&8&&m(P,""),Fe&16&&A(G,P,ae,se,ue,ye,oe,we))},Me=(w,g,P,ae,se,ue,ye,oe,we)=>{w=w||Ar,g=g||Ar;const H=w.length,U=g.length,G=Math.min(H,U);let Ae;for(Ae=0;AeU?pt(w,se,ue,!0,!1,G):A(g,P,ae,se,ue,ye,oe,we,G)},Ke=(w,g,P,ae,se,ue,ye,oe,we)=>{let H=0;const U=g.length;let G=w.length-1,Ae=U-1;for(;H<=G&&H<=Ae;){const Fe=w[H],Je=g[H]=we?Dn(g[H]):xn(g[H]);if($r(Fe,Je))W(Fe,Je,P,null,se,ue,ye,oe,we);else break;H++}for(;H<=G&&H<=Ae;){const Fe=w[G],Je=g[Ae]=we?Dn(g[Ae]):xn(g[Ae]);if($r(Fe,Je))W(Fe,Je,P,null,se,ue,ye,oe,we);else break;G--,Ae--}if(H>G){if(H<=Ae){const Fe=Ae+1,Je=FeAe)for(;H<=G;)X(w[H],se,ue,!0),H++;else{const Fe=H,Je=H,Ye=new Map;for(H=Je;H<=Ae;H++){const Ot=g[H]=we?Dn(g[H]):xn(g[H]);Ot.key!=null&&Ye.set(Ot.key,H)}let Qe,vt=0;const _t=Ae-Je+1;let Xt=!1,Bt=0;const Zt=new Array(_t);for(H=0;H<_t;H++)Zt[H]=0;for(H=Fe;H<=G;H++){const Ot=w[H];if(vt>=_t){X(Ot,se,ue,!0);continue}let $t;if(Ot.key!=null)$t=Ye.get(Ot.key);else for(Qe=Je;Qe<=Ae;Qe++)if(Zt[Qe-Je]===0&&$r(Ot,g[Qe])){$t=Qe;break}$t===void 0?X(Ot,se,ue,!0):(Zt[$t-Je]=H+1,$t>=Bt?Bt=$t:Xt=!0,W(Ot,g[$t],P,null,se,ue,ye,oe,we),vt++)}const pr=Xt?Pp(Zt):Ar;for(Qe=pr.length-1,H=_t-1;H>=0;H--){const Ot=Je+H,$t=g[Ot],Ie=g[Ot+1],Hn=Ot+1{const{el:ue,type:ye,transition:oe,children:we,shapeFlag:H}=w;if(H&6){de(w.component.subTree,g,P,ae);return}if(H&128){w.suspense.move(g,P,ae);return}if(H&64){ye.move(w,g,P,Jt);return}if(ye===Re){s(ue,g,P);for(let G=0;Goe.enter(ue),se));else{const{leave:G,delayLeave:Ae,afterLeave:Fe}=oe,Je=()=>{w.ctx.isUnmounted?o(ue):s(ue,g,P)},Ye=()=>{const Qe=ue._isLeaving||!!ue[on];ue._isLeaving&&ue[on](!0),oe.persisted&&!Qe?Je():G(ue,()=>{Je(),Fe&&Fe()})};Ae?Ae(ue,Je,Ye):Ye()}else s(ue,g,P)},X=(w,g,P,ae=!1,se=!1)=>{const{type:ue,props:ye,ref:oe,children:we,dynamicChildren:H,shapeFlag:U,patchFlag:G,dirs:Ae,cacheIndex:Fe,memo:Je}=w;if((G===-2||H&&H.hasOnce)&&(se=!1),oe!=null&&(An(),ks(oe,null,P,w,!0),Pn()),Fe!=null&&(!w.ctx||w.ctx===g)&&(g.renderCache[Fe]=void 0),U&256){g.ctx.deactivate(w);return}const Ye=U&1&&Ae,Qe=!xs(w);let vt;if(Qe&&(vt=ye&&ye.onVnodeBeforeUnmount)&&gn(vt,g,w),U&6)st(w.component,P,ae);else{if(U&128){w.suspense.unmount(P,ae);return}Ye&&_r(w,null,g,"beforeUnmount"),U&64?w.type.remove(w,g,P,Jt,ae):H&&!H.hasOnce&&(ue!==Re||G>0&&G&64)?pt(H,g,P,!1,!0):(ue===Re&&G&384||!se&&U&16)&&pt(we,g,P),ae&&J(w)}const _t=Je!=null&&Fe==null;(Qe&&(vt=ye&&ye.onVnodeUnmounted)||Ye||_t)&&Ht(()=>{vt&&gn(vt,g,w),Ye&&_r(w,null,g,"unmounted"),_t&&(w.el=null)},P)},J=w=>{const{type:g,el:P,anchor:ae,transition:se}=w,ue=g===Re;if(ue&&!se){ke(P,ae);return}if(g===$o){Q(w),se&&!se.persisted&&se.afterLeave&&se.afterLeave();return}const ye=ue?Ms(w):w,oe=()=>{ue?k(P)&&ke(P,ae):o(P),se&&!se.persisted&&se.afterLeave&&se.afterLeave()};if(ye&&ye.shapeFlag&1&&se&&!se.persisted){const{leave:we,delayLeave:H}=se,U=ye.el,G=()=>we(U,oe);H?H(U,oe,G):G()}else oe()},ke=(w,g)=>{let P;for(;w!==g;)P=D(w),o(w),w=P;o(g)},st=(w,g,P)=>{const{bum:ae,scope:se,job:ue,subTree:ye,um:oe,m:we,a:H}=w;nu(we),nu(H),ae&&So(ae),se.stop(),ue?(ue.flags|=8,X(ye,w,g,P)):w.vnode.el&&ye&&(ye.transition=w.vnode.transition,X(ye,w,g,P)),oe&&Ht(oe,g),Ht(()=>{w.isUnmounted=!0},g)},pt=(w,g,P,ae=!1,se=!1,ue=0)=>{for(let ye=ue;ye{if(w.shapeFlag&6)return ht(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const g=D(w.anchor||w.el),P=g&&g[hc];return P?D(P):g},Yt=(w,g,P)=>{const ae=w&&g._vnode?void 0:w&&w.component?w.component.uid:Rp();Fd(()=>{w==null?g._vnode&&X(g._vnode,null,null,!0):W(g._vnode||null,w,g,null,null,null,P),g._vnode=w},ae)},Jt={p:W,um:X,m:de,r:J,mt:Ne,mc:A,pc:ge,pbc:ie,n:ht,o:e};return{render:Yt,hydrate:void 0,createApp:dp(Yt)}}function ta({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function kr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ap(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ga(e,t,n=!1){const s=e.children,o=t.children;if(Le(s)&&Le(o))for(let a=0;a>1,e[n[d]]0&&(t[s]=n[a-1]),n[a]=s)}}for(a=n.length,c=n[a-1];a-- >0;)n[a]=c,c=t[c];return n}function Lc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Lc(t)}function nu(e){if(e)for(let t=0;te.__isSuspense;function Tp(e,t){t&&t.pendingBranch?Le(e)?t.effects.push(...e):t.effects.push(e):Kd(e)}const Re=Symbol.for("v-fgt"),ai=Symbol.for("v-txt"),Ft=Symbol.for("v-cmt"),$o=Symbol.for("v-stc"),Tr=[];let rn=null;function F(e=!1){Tr.push(rn=e?null:[])}function Fc(){Tr.pop(),rn=Tr[Tr.length-1]||null}let Is=1;function Lo(e,t=!1){Is+=e,e<0&&rn&&t&&(rn.hasOnce=!0)}function Nc(e){return e.dynamicChildren=Is>0?rn||Ar:null,Fc(),Is>0&&rn&&rn.push(e),e}function q(e,t,n,s,o,a){return Nc(u(e,t,n,s,o,a,!0))}function It(e,t,n,s,o){return Nc(Oe(e,t,n,s,o,!0))}function js(e){return e?e.__v_isVNode===!0:!1}function $r(e,t){return e.type===t.type&&e.key===t.key}const Vc=({key:e})=>e??null,Ao=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?bt(e)||Nt(e)||We(e)?{i:an,r:e,k:t,f:!!n}:e:null);function u(e,t=null,n=null,s=0,o=null,a=e===Re?0:1,c=!1,d=!1){const h={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vc(t),ref:t&&Ao(t),scopeId:fc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:an};return d?(Ko(h,n),a&128&&e.normalize(h)):n&&(h.shapeFlag|=bt(n)?8:16),Is>0&&!c&&rn&&(h.patchFlag>0||a&6)&&h.patchFlag!==32&&rn.push(h),h}const Oe=Op;function Op(e,t=null,n=null,s=0,o=null,a=!1){if((!e||e===sp)&&(e=Ft),js(e)){const d=lr(e,t,!0);return n&&Ko(d,n),Is>0&&!a&&rn&&(d.shapeFlag&6?rn[rn.indexOf(e)]=d:rn.push(d)),d.patchFlag=-2,d}if(Bp(e)&&(e=e.__vccOpts),t){t=Mp(t);let{class:d,style:h}=t;d&&!bt(d)&&(t.class=et(d)),at(h)&&(Ua(h)&&!Le(h)&&(h=Et({},h)),t.style=sr(h))}const c=bt(e)?1:Kc(e)?128:ri(e)?64:at(e)?4:We(e)?2:0;return u(e,t,n,s,o,c,a,!0)}function Mp(e){return e?Ua(e)||Oc(e)?Et({},e):e:null}function lr(e,t,n=!1,s=!1){const{props:o,ref:a,patchFlag:c,children:d,transition:h}=e,y=t?jp(o||{},t):o,m={__v_isVNode:!0,__v_skip:!0,type:e.type,props:y,key:y&&Vc(y),ref:t&&t.ref?n&&a?Le(a)?a.concat(Ao(t)):[a,Ao(t)]:Ao(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:d,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Re?c===-1?16:c|16:c,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:h,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&lr(e.ssContent),ssFallback:e.ssFallback&&lr(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return h&&s&&ar(m,h.clone(m)),m}function nn(e=" ",t=0){return Oe(ai,null,e,t)}function Ip(e,t){const n=Oe($o,null,e);return n.staticCount=t,n}function Ee(e="",t=!1){return t?(F(),It(Ft,null,e)):Oe(Ft,null,e)}function xn(e){return e==null||typeof e=="boolean"?Oe(Ft):Le(e)?Oe(Re,null,e.slice()):js(e)?Dn(e):Oe(ai,null,String(e))}function Dn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:lr(e)}function Ko(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Le(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),Ko(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Oc(t)?t._ctx=an:o===3&&an&&(an.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(We(t)){if(s&65){Ko(e,{default:t});return}t={default:t,_ctx:an},n=32}else t=String(t),s&64?(n=16,t=[nn(t)]):n=8;e.children=t,e.shapeFlag|=n}function jp(...e){const t={};for(let n=0;nzt||an;let Fo,Ds;{const e=ei(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),a=>{o.length>1?o.forEach(c=>c(a)):o[0](a)}};Fo=t("__VUE_INSTANCE_SETTERS__",n=>zt=n),Ds=t("__VUE_SSR_SETTERS__",n=>Rs=n)}const Bs=e=>{const t=zt;return Fo(e),e.scope.on(),()=>{e.scope.off(),Fo(t)}},ru=()=>{zt&&zt.scope.off(),Fo(null)};function Uc(e){return e.vnode.shapeFlag&4}let Rs=!1;function Kp(e,t=!1,n=!1){t&&Ds(t);const{props:s,children:o}=e.vnode,a=Uc(e);wp(e,s,a,t),Cp(e,o,n||t);const c=a?Fp(e,t):void 0;return t&&Ds(!1),c}function Fp(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,op);const{setup:s}=n;if(s){An();const o=e.setupContext=s.length>1?Vp(e):null,a=Bs(e),c=Ns(s,e,0,[e.props,o]),d=Ru(c);if(Pn(),a(),(d||e.sp)&&!xs(e)&&bc(e),d){if(c.then(ru,ru),t)return c.then(h=>{Ds(!0);try{su(e,h,t)}finally{Ds(!1)}}).catch(h=>{ni(h,e,0)});e.asyncDep=c}else su(e,c)}else qc(e)}function su(e,t,n){We(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:at(t)&&(e.setupState=oc(t)),qc(e)}function qc(e,t,n){const s=e.type;e.render||(e.render=s.render||En);{const o=Bs(e);An();try{ip(e)}finally{Pn(),o()}}}const Np={get(e,t){return Kt(e,"get",""),e[t]}};function Vp(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Np),slots:e.slots,emit:e.emit,expose:t}}function li(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(oc(Ad(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Bp(e){return We(e)&&"__vccOpts"in e}const it=(e,t)=>Id(e,t,Rs);function Up(e,t,n){try{Lo(-1);const s=arguments.length;return s===2?at(t)&&!Le(t)?js(t)?Oe(e,null,[t]):Oe(e,t):Oe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&js(n)&&(n=[n]),Oe(e,t,n))}finally{Lo(1)}}const qp="3.5.44";/** +**/function Ns(e,t,n,s){try{return s?e(...s):e()}catch(o){ni(o,t,n)}}function cn(e,t,n,s){if(ze(e)){const o=Ns(e,t,n,s);return o&&Ru(o)&&o.catch(a=>{ni(a,t,n)}),o}if(Le(e)){const o=[];for(let a=0;a>>1,o=Wt[s],a=Ts(o);a=Ts(n)?Wt.push(e):Wt.splice(Ld(t),0,e),e.flags|=1,ac()}}function ac(){Mo||(Mo=ic.then(cc))}function Kd(e){if(!Le(e))tr&&e.id===-1?tr.splice(Hr+1,0,e):e.flags&1||(kn.push(e),e.flags|=1);else for(let t=0;t=t))continue;Wt.splice(s,1),s=e?s-1:pn,o.flags&4&&(o.flags&=-2),o(),o.flags&4||(o.flags&=-2)}}}function uc(e,t,n=0){if(kn.length){let s=kn,o=0;if(t){s=[];for(let c=0;cTs(c)-Ts(d));if(kn.length=o,tr){for(let c=0;ce.id==null?e.flags&2?-1:1/0:e.id;function cc(e){try{for(pn=0;pn{s._d&&Lo(-1);const a=Io(t),c=Tr.length;let d;try{d=e(...o)}finally{for(let h=Tr.length;h>c;h--)Fc();Io(a),s._d&&Lo(1)}return d};return s._n=!0,s._c=!0,s._d=!0,s}function $e(e,t){if(an===null)return e;const n=li(an),s=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&ze(t)?t.call(s&&s.proxy):t}}const Vd=Symbol.for("v-scx"),Bd=()=>Eo(Vd);function gt(e,t,n){return dc(e,t,n)}function dc(e,t,n=ct){const{immediate:s,deep:o,flush:a,once:c}=n,d=Et({},n),h=t&&s||!t&&a!=="post";let y;if(Rs){if(a==="sync"){const O=Bd();y=O.__watcherHandles||(O.__watcherHandles=[])}else if(!h){const O=()=>{};return O.stop=En,O.resume=En,O.pause=En,O}}const m=zt;d.call=(O,K,W)=>cn(O,m,K,W);let k=!1;a==="post"?d.scheduler=O=>{O.i=m,Ht(O,m&&m.suspense)}:a!=="sync"&&(k=!0,d.scheduler=(O,K)=>{K?O():qa(O)}),d.augmentJob=O=>{t&&(O.flags|=4),k&&(O.flags|=2,m&&(O.id=m.uid,O.i=m))};const D=Dd(e,t,d);return Rs&&(y?y.push(D):h&&D()),D}function Ud(e,t,n){const s=this.proxy,o=bt(e)?e.includes(".")?pc(s,e):()=>s[e]:e.bind(s,s);let a;ze(t)?a=t:(a=t.handler,n=t);const c=Bs(this),d=dc(o,a.bind(s),n);return c(),d}function pc(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;oe.__isTeleport,Er=e=>e&&(e.disabled||e.disabled===""),qd=e=>e&&(e.defer||e.defer===""),Hl=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Wl=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ha=(e,t)=>{const n=e&&e.to;return bt(n)?t?t(n):null:n},Hd={name:"Teleport",__isTeleport:!0,process(e,t,n,s,o,a,c,d,h,y){const{mc:m,pc:k,pbc:D,o:{insert:O,querySelector:K,createText:W,createComment:de,parentNode:ee}}=y,E=Er(t.props);let{dynamicChildren:L}=t;const Q=(Z,A,x)=>{Z.shapeFlag&16&&m(Z.children,A,x,o,a,c,d,h)},le=(Z=t)=>{const A=Er(Z.props),x=Z.target=ha(Z.props,K),ie=va(x,Z,W,O);x&&(c!=="svg"&&Hl(x)?c="svg":c!=="mathml"&&Wl(x)&&(c="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(x),A||(Q(Z,x,ie),ms(Z,!1)))},ce=Z=>{const A=()=>{if(Zn.get(Z)===A){if(Zn.delete(Z),Er(Z.props)){const x=ee(Z.el)||n;Q(Z,x,Z.anchor),ms(Z,!0)}le(Z)}};Zn.set(Z,A),Ht(A,a)};if(e==null){const Z=t.el=W(""),A=t.anchor=W("");if(O(Z,n,s),O(A,n,s),qd(t.props)||a&&a.pendingBranch){ce(t);return}E&&(Q(t,n,A),ms(t,!0)),le()}else{t.el=e.el;const Z=t.anchor=e.anchor,A=Zn.get(e);if(A){A.flags|=8,Zn.delete(e),ce(t);return}t.targetStart=e.targetStart;const x=t.target=e.target,ie=t.targetAnchor=e.targetAnchor,xe=Er(e.props),J=xe?n:x,Ce=xe?Z:ie;if(c==="svg"||Hl(x)?c="svg":(c==="mathml"||Wl(x))&&(c="mathml"),L?(D(e.dynamicChildren,L,J,o,a,c,d),Ga(e,t,!0)):h||k(e,t,J,Ce,o,a,c,d,!1),E)xe?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):_o(t,n,Z,y,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const Ne=ha(t.props,K);Ne&&(t.target=Ne,_o(t,Ne,null,y,0))}else xe&&_o(t,x,ie,y,1);ms(t,E)}},remove(e,t,n,{um:s,o:{remove:o}},a){const{shapeFlag:c,children:d,anchor:h,targetStart:y,targetAnchor:m,target:k,props:D}=e,O=Er(D),K=a||!O,W=Zn.get(e);if(W&&(W.flags|=8,Zn.delete(e)),k&&(o(y),o(m)),a&&o(h),!W&&(O||k)&&c&16)for(let de=0;de{e.isMounted=!0}),kc(()=>{e.isUnmounting=!0}),e}const sn=[Function,Array],mc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:sn,onEnter:sn,onAfterEnter:sn,onEnterCancelled:sn,onBeforeLeave:sn,onLeave:sn,onAfterLeave:sn,onLeaveCancelled:sn,onBeforeAppear:sn,onAppear:sn,onAfterAppear:sn,onAppearCancelled:sn},zd={name:"BaseTransition",props:mc,setup(e,{slots:t}){const n=Ya(),s=vc();return()=>{const o=t.default&&Ha(t.default(),!0),a=o&&o.length?yc(o):n.subTree?Ee():void 0;if(!a)return;const c=rt(e),{mode:d}=c;if(s.isLeaving)return Zi(a);const h=jo(a);if(!h)return Zi(a);let y=Os(h,c,s,n,k=>y=k);h.type!==Ft&&ar(h,y);let m=n.subTree&&jo(n.subTree);if(m&&m.type!==Ft&&!$r(m,h)&&Ms(n.subTree)){let k=Os(m,c,s,n);if(ar(m,k),d==="out-in"&&h.type!==Ft)return s.isLeaving=!0,k.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete k.afterLeave,m=void 0},Zi(a);d==="in-out"&&h.type!==Ft?k.delayLeave=(D,O,K)=>{const W=gc(s,m);W[String(m.key)]=m,D[on]=()=>{O(),D[on]=void 0,delete y.delayedLeave,m=void 0},y.delayedLeave=()=>{K(),delete y.delayedLeave,m=void 0}}:m=void 0}else m&&(m=void 0);return a}}};function yc(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ft){t=n;break}}return t}const Gd=zd;function gc(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function Os(e,t,n,s,o){const{appear:a,mode:c,persisted:d=!1,onBeforeEnter:h,onEnter:y,onAfterEnter:m,onEnterCancelled:k,onBeforeLeave:D,onLeave:O,onAfterLeave:K,onLeaveCancelled:W,onBeforeAppear:de,onAppear:ee,onAfterAppear:E,onAppearCancelled:L}=t,Q=String(e.key),le=gc(n,e),ce=(x,ie)=>{x&&cn(x,s,9,ie)},Z=(x,ie)=>{const xe=ie[1];ce(x,ie),Le(x)?x.every(J=>J.length<=1)&&xe():x.length<=1&&xe()},A={mode:c,persisted:d,beforeEnter(x){let ie=h;if(!n.isMounted)if(a)ie=de||h;else return;x[on]&&x[on](!0);const xe=le[Q];if(xe&&$r(e,xe)){let J=xe.el[on];if(!J){const Ce=Ms(xe);J=Ce&&Ce.el[on]}J&&J()}ce(ie,[x])},enter(x){if(le[Q]===e)return;let ie=y,xe=m,J=k;if(!n.isMounted)if(a)ie=ee||y,xe=E||m,J=L||k;else return;let Ce=!1;x[hs]=Xe=>{Ce||(Ce=!0,Xe?ce(J,[x]):ce(xe,[x]),A.delayedLeave&&A.delayedLeave(),x[hs]=void 0)};const Ne=x[hs].bind(null,!1);ie?Z(ie,[x,Ne]):Ne()},leave(x,ie){const xe=String(e.key);if(x[hs]&&x[hs](!0),n.isUnmounting)return ie();ce(D,[x]);let J=!1;x[on]=Ne=>{J||(J=!0,ie(),Ne?ce(W,[x]):ce(K,[x]),x[on]=void 0,le[xe]===e&&delete le[xe])};const Ce=x[on].bind(null,!1);le[xe]=e,O?Z(O,[x,Ce]):Ce()},clone(x){const ie=Os(x,t,n,s,o);return o&&o(ie),ie}};return A}function Zi(e){if(si(e))return e=lr(e),e.children=null,e}function jo(e){if(!si(e))return ri(e.type)&&e.children?yc(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ze(n.default))return n.default()}}function ar(e,t){if(e.shapeFlag&6&&e.component){e.transition=t;const n=e.component.subTree;ar(ri(n.type)&&jo(n)||n,t)}else if(e.shapeFlag&128)e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback);else if(e.transition=t,e.type===Re&&Le(e.children)){const n=$c(e.children,!1);n&&ar(n,t)}}function Ha(e,t=!1,n){let s=[],o=0;for(let a=0;a1)for(let a=0;aks(W,t&&(Le(t)?t[de]:t),n,s,o));return}if(xs(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&ks(e,t,n,s.component.subTree);return}const a=s.shapeFlag&4?li(s.component):s.el,c=o?null:a,{i:d,r:h}=e,y=t&&t.r,m=d.refs===ct?d.refs={}:d.refs,k=d.setupState,D=rt(k),O=k===ct?Du:W=>zl(m,W)?!1:ot(D,W),K=(W,de)=>!(de&&zl(m,de));if(y!=null&&y!==h){if(Gl(t),bt(y))m[y]=null,O(y)&&(k[y]=null);else if(Nt(y)){const W=t;K(y,W.k)&&(y.value=null),W.k&&(m[W.k]=null)}}if(ze(h))Ns(h,d,12,[c,m]);else{const W=bt(h),de=Nt(h);if(W||de){const ee=()=>{if(e.f){const E=W?O(h)?k[h]:m[h]:K()||!e.k?h.value:m[e.k];if(o)Le(E)&&Ia(E,a);else if(Le(E))E.includes(a)||E.push(a);else if(W)m[h]=[a],O(h)&&(k[h]=m[h]);else{const L=[a];K(h,e.k)&&(h.value=L),e.k&&(m[e.k]=L)}}else W?(m[h]=c,O(h)&&(k[h]=c)):de&&(K(h,e.k)&&(h.value=c),e.k&&(m[e.k]=c))};if(c){const E=()=>{ee(),Do.delete(e)};E.id=-1,Do.set(e,E),Ht(E,n)}else Gl(e),ee()}}}function Gl(e){const t=Do.get(e);t&&(t.flags|=8,Do.delete(e))}ei().requestIdleCallback;ei().cancelIdleCallback;const xs=e=>!!e.type.__asyncLoader,si=e=>e.type.__isKeepAlive;function Yd(e,t){wc(e,"a",t)}function Jd(e,t){wc(e,"da",t)}function wc(e,t,n=zt){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(oi(t,s,n),n){let o=n.parent;for(;o&&o.parent;)si(o.parent.vnode)&&Xd(s,t,n,o),o=o.parent}}function Xd(e,t,n,s){const o=oi(t,e,s,!0);dr(()=>{Ia(s[t],o)},n)}function oi(e,t,n=zt,s=!1){if(n){const o=n[e]||(n[e]=[]),a=t.__weh||(t.__weh=(...c)=>{An();const d=Bs(n),h=cn(t,n,e,c);return d(),Pn(),h});return s?o.unshift(a):o.push(a),a}}const qn=e=>(t,n=zt)=>{(!Rs||e==="sp")&&oi(e,(...s)=>t(...s),n)},Qd=qn("bm"),fn=qn("m"),Zd=qn("bu"),_c=qn("u"),kc=qn("bum"),dr=qn("um"),ep=qn("sp"),tp=qn("rtg"),np=qn("rtc");function rp(e,t=zt){oi("ec",e,t)}const sp=Symbol.for("v-ndc");function ut(e,t,n,s){let o;const a=n,c=Le(e);if(c||bt(e)){const d=c&&or(e);let h=!1,y=!1;d&&(h=!ln(e),y=Tn(e),e=ti(e)),o=new Array(e.length);for(let m=0,k=e.length;mt(d,h,void 0,a));else{const d=Object.keys(e);o=new Array(d.length);for(let h=0,y=d.length;he?Uc(e)?li(e):ma(e.parent):null,Cs=Et(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ma(e.parent),$root:e=>ma(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>Cc(e),$forceUpdate:e=>e.f||(e.f=()=>{qa(e.update)}),$nextTick:e=>e.n||(e.n=ts.bind(e.proxy)),$watch:e=>Ud.bind(e)}),ea=(e,t)=>e!==ct&&!e.__isScriptSetup&&ot(e,t),op={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:a,accessCache:c,type:d,appContext:h}=e;if(t[0]!=="$"){const D=c[t];if(D!==void 0)switch(D){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return a[t]}else{if(ea(s,t))return c[t]=1,s[t];if(o!==ct&&ot(o,t))return c[t]=2,o[t];if(ot(a,t))return c[t]=3,a[t];if(n!==ct&&ot(n,t))return c[t]=4,n[t];ya&&(c[t]=0)}}const y=Cs[t];let m,k;if(y)return t==="$attrs"&&Kt(e.attrs,"get",""),y(e);if((m=d.__cssModules)&&(m=m[t]))return m;if(n!==ct&&ot(n,t))return c[t]=4,n[t];if(k=h.config.globalProperties,ot(k,t))return k[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:a}=e;return ea(o,t)?(o[t]=n,!0):s!==ct&&ot(s,t)?(s[t]=n,!0):ot(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,props:a,type:c}},d){let h;return!!(n[d]||e!==ct&&d[0]!=="$"&&ot(e,d)||ea(t,d)||ot(a,d)||ot(s,d)||ot(Cs,d)||ot(o.config.globalProperties,d)||(h=c.__cssModules)&&h[d])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:ot(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Yl(e){return Le(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let ya=!0;function ip(e){const t=Cc(e),n=e.proxy,s=e.ctx;ya=!1,t.beforeCreate&&Jl(t.beforeCreate,e,"bc");const{data:o,computed:a,methods:c,watch:d,provide:h,inject:y,created:m,beforeMount:k,mounted:D,beforeUpdate:O,updated:K,activated:W,deactivated:de,beforeDestroy:ee,beforeUnmount:E,destroyed:L,unmounted:Q,render:le,renderTracked:ce,renderTriggered:Z,errorCaptured:A,serverPrefetch:x,expose:ie,inheritAttrs:xe,components:J,directives:Ce,filters:Ne}=t;if(y&&ap(y,s,null),c)for(const Ue in c){const ge=c[Ue];ze(ge)&&(s[Ue]=ge.bind(n))}if(o){const Ue=o.call(n,n);at(Ue)&&(e.data=Va(Ue))}if(ya=!0,a)for(const Ue in a){const ge=a[Ue],Me=ze(ge)?ge.bind(n,n):ze(ge.get)?ge.get.bind(n,n):En,Ke=!ze(ge)&&ze(ge.set)?ge.set.bind(n):En,fe=it({get:Me,set:Ke});Object.defineProperty(s,Ue,{enumerable:!0,configurable:!0,get:()=>fe.value,set:G=>fe.value=G})}if(d)for(const Ue in d)xc(d[Ue],s,n,Ue);if(h){const Ue=ze(h)?h.call(n):h;Reflect.ownKeys(Ue).forEach(ge=>{Nd(ge,Ue[ge])})}m&&Jl(m,e,"c");function He(Ue,ge){Le(ge)?ge.forEach(Me=>Ue(Me.bind(n))):ge&&Ue(ge.bind(n))}if(He(Qd,k),He(fn,D),He(Zd,O),He(_c,K),He(Yd,W),He(Jd,de),He(rp,A),He(np,ce),He(tp,Z),He(kc,E),He(dr,Q),He(ep,x),Le(ie))if(ie.length){const Ue=e.exposed||(e.exposed={});ie.forEach(ge=>{Object.defineProperty(Ue,ge,{get:()=>n[ge],set:Me=>n[ge]=Me,enumerable:!0})})}else e.exposed||(e.exposed={});le&&e.render===En&&(e.render=le),xe!=null&&(e.inheritAttrs=xe),J&&(e.components=J),Ce&&(e.directives=Ce),x&&bc(e)}function ap(e,t,n=En){Le(e)&&(e=ga(e));for(const s in e){const o=e[s];let a;at(o)?"default"in o?a=Eo(o.from||s,o.default,!0):a=Eo(o.from||s):a=Eo(o),Nt(a)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>a.value,set:c=>a.value=c}):t[s]=a}}function Jl(e,t,n){cn(Le(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function xc(e,t,n,s){let o=s.includes(".")?pc(n,s):()=>n[s];if(bt(e)){const a=t[e];ze(a)&>(o,a)}else if(ze(e))gt(o,e.bind(n));else if(at(e))if(Le(e))e.forEach(a=>xc(a,t,n,s));else{const a=ze(e.handler)?e.handler.bind(n):t[e.handler];ze(a)&>(o,a,e)}}function Cc(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:a,config:{optionMergeStrategies:c}}=e.appContext,d=a.get(t);let h;return d?h=d:!o.length&&!n&&!s?h=t:(h={},o.length&&o.forEach(y=>Ro(h,y,c,!0)),Ro(h,t,c)),at(t)&&a.set(t,h),h}function Ro(e,t,n,s=!1){const{mixins:o,extends:a}=t;a&&Ro(e,a,n,!0),o&&o.forEach(c=>Ro(e,c,n,!0));for(const c in t)if(!(s&&c==="expose")){const d=lp[c]||n&&n[c];e[c]=d?d(e[c],t[c]):t[c]}return e}const lp={data:Xl,props:Ql,emits:Ql,methods:ys,computed:ys,beforeCreate:qt,created:qt,beforeMount:qt,mounted:qt,beforeUpdate:qt,updated:qt,beforeDestroy:qt,beforeUnmount:qt,destroyed:qt,unmounted:qt,activated:qt,deactivated:qt,errorCaptured:qt,serverPrefetch:qt,components:ys,directives:ys,watch:cp,provide:Xl,inject:up};function Xl(e,t){return t?e?function(){return Et(ze(e)?e.call(this,this):e,ze(t)?t.call(this,this):t)}:t:e}function up(e,t){return ys(ga(e),ga(t))}function ga(e){if(Le(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${hn(t)}Modifiers`]||e[`${cr(t)}Modifiers`];function hp(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||ct;let o=n;const a=t.startsWith("update:"),c=a&&pp(s,t.slice(7));c&&(c.trim&&(o=n.map(m=>bt(m)?m.trim():m)),c.number&&(o=o.map(Zo)));let d,h=s[d=zi(t)]||s[d=zi(hn(t))];!h&&a&&(h=s[d=zi(cr(t))]),h&&cn(h,e,6,o);const y=s[d+"Once"];if(y){if(!e.emitted)e.emitted={};else if(e.emitted[d])return;e.emitted[d]=!0,cn(y,e,6,o)}}const vp=new WeakMap;function Ec(e,t,n=!1){const s=n?vp:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const a=e.emits;let c={},d=!1;if(!ze(e)){const h=y=>{const m=Ec(y,t,!0);m&&(d=!0,Et(c,m))};!n&&t.mixins.length&&t.mixins.forEach(h),e.extends&&h(e.extends),e.mixins&&e.mixins.forEach(h)}return!a&&!d?(at(e)&&s.set(e,null),null):(Le(a)?a.forEach(h=>c[h]=null):Et(c,a),at(e)&&s.set(e,c),c)}function ii(e,t){return!e||!Jo(t)?!1:(t=t.slice(2),t=t==="Once"?t:t.replace(/Once$/,""),ot(e,t[0].toLowerCase()+t.slice(1))||ot(e,cr(t))||ot(e,t))}function Zl(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[a],slots:c,attrs:d,emit:h,render:y,renderCache:m,props:k,data:D,setupState:O,ctx:K,inheritAttrs:W}=e,de=Io(e);let ee,E;try{if(n.shapeFlag&4){const Q=o||s,le=Q;ee=xn(y.call(le,Q,m,k,O,D,K)),E=d}else{const Q=t;ee=xn(Q.length>1?Q(k,{attrs:d,slots:c,emit:h}):Q(k,null)),E=t.props?d:mp(d)}}catch(Q){Tr.length=0,ni(Q,e,1),ee=Oe(Ft)}let L=ee;if(E&&W!==!1){const Q=Object.keys(E),{shapeFlag:le}=L;Q.length&&le&7&&(a&&Q.some(Xo)&&(E=yp(E,a)),L=lr(L,E,!1,!0))}if(n.dirs&&(L=lr(L,null,!1,!0),L.dirs=L.dirs?L.dirs.concat(n.dirs):n.dirs),n.transition){const Q=ri(L.type)&&jo(L)||L;ar(Q,n.transition)}return ee=L,Io(de),ee}function $c(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Jo(n))&&((t||(t={}))[n]=e[n]);return t},yp=(e,t)=>{const n={};for(const s in e)(!Xo(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function gp(e,t,n){const{props:s,children:o,component:a}=e,{props:c,children:d,patchFlag:h}=t,y=a.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&h>=0){if(h&1024)return!0;if(h&16)return s?eu(s,c,y):!!c;if(h&8){const m=t.dynamicProps;for(let k=0;kObject.create(Pc),Oc=e=>Object.getPrototypeOf(e)===Pc;function wp(e,t,n,s=!1){const o={},a=Tc();e.propsDefaults=Object.create(null),Mc(e,t,o,a);for(const c in e.propsOptions[0])c in o||(o[c]=void 0);n?e.props=s?o:$d(o):e.type.props?e.props=o:e.props=a,e.attrs=a}function _p(e,t,n,s){const{props:o,attrs:a,vnode:{patchFlag:c}}=e,d=rt(o),[h]=e.propsOptions;let y=!1;if((s||c>0)&&!(c&16)){if(c&8){const m=e.vnode.dynamicProps;for(let k=0;k{h=!0;const[D,O]=Ic(k,t,!0);Et(c,D),O&&d.push(...O)};!n&&t.mixins.length&&t.mixins.forEach(m),e.extends&&m(e.extends),e.mixins&&e.mixins.forEach(m)}if(!a&&!h)return at(e)&&s.set(e,Ar),Ar;if(Le(a))for(let m=0;me==="_"||e==="_ctx"||e==="$stable",za=e=>Le(e)?e.map(xn):[xn(e)],xp=(e,t,n)=>{if(t._n)return t;const s=fr((...o)=>za(t(...o)),n);return s._c=!1,s},jc=(e,t,n)=>{const s=e._ctx;for(const o in e){if(Wa(o))continue;const a=e[o];if(ze(a))t[o]=xp(o,a,s);else if(a!=null){const c=za(a);t[o]=()=>c}}},Dc=(e,t)=>{const n=za(t);e.slots.default=()=>n},Rc=(e,t,n)=>{for(const s in t)(n||!Wa(s))&&(e[s]=t[s])},Cp=(e,t,n)=>{const s=e.slots=Tc();if(e.vnode.shapeFlag&32){const o=t._;o?(Rc(s,t,n),n&&Nu(s,"_",o,!0)):jc(t,s)}else t&&Dc(e,t)},Sp=(e,t,n)=>{const{vnode:s,slots:o}=e;let a=!0,c=ct;if(s.shapeFlag&32){const d=t._;d?n&&d===1?a=!1:Rc(o,t,n):(a=!t.$stable,jc(t,o)),c=t}else t&&(Dc(e,t),c={default:1});if(a)for(const d in o)!Wa(d)&&c[d]==null&&delete o[d]},Ht=Tp;function Ep(e){return $p(e)}function $p(e,t){const n=ei();n.__VUE__=!0;const{insert:s,remove:o,patchProp:a,createElement:c,createText:d,createComment:h,setText:y,setElementText:m,parentNode:k,nextSibling:D,setScopeId:O=En,insertStaticContent:K}=e,W=(w,g,P,ae=null,se=null,ue=null,ye=void 0,oe=null,we=!!g.dynamicChildren)=>{if(w===g)return;w&&!$r(w,g)&&(ae=ht(w),G(w,se,ue,!0),w=null),g.patchFlag===-2&&(we=!1,g.dynamicChildren=null),g.dynamicChildren&&w&&w.dynamicChildren&&w.dynamicChildren.hasOnce&&(g.dynamicChildren===Ar&&(g.dynamicChildren=[]),g.dynamicChildren.hasOnce=!0);const{type:H,ref:U,shapeFlag:Y}=g;switch(H){case ai:de(w,g,P,ae);break;case Ft:ee(w,g,P,ae);break;case $o:w==null&&E(g,P,ae,ye);break;case Re:J(w,g,P,ae,se,ue,ye,oe,we);break;default:Y&1?le(w,g,P,ae,se,ue,ye,oe,we):Y&6?Ce(w,g,P,ae,se,ue,ye,oe,we):(Y&64||Y&128)&&H.process(w,g,P,ae,se,ue,ye,oe,we,Jt)}U!=null&&se?ks(U,w&&w.ref,ue,g||w,!g):U==null&&w&&w.ref!=null&&ks(w.ref,null,ue,w,!0)},de=(w,g,P,ae)=>{if(w==null)s(g.el=d(g.children),P,ae);else{const se=g.el=w.el;g.children!==w.children&&y(se,g.children)}},ee=(w,g,P,ae)=>{w==null?s(g.el=h(g.children||""),P,ae):g.el=w.el},E=(w,g,P,ae)=>{[w.el,w.anchor]=K(w.children,g,P,ae,w.el,w.anchor)},L=({el:w,anchor:g},P,ae)=>{let se;for(;w&&w!==g;)se=D(w),s(w,P,ae),w=se;s(g,P,ae)},Q=({el:w,anchor:g})=>{let P;for(;w&&w!==g;)P=D(w),o(w),w=P;o(g)},le=(w,g,P,ae,se,ue,ye,oe,we)=>{if(g.type==="svg"?ye="svg":g.type==="math"&&(ye="mathml"),w==null)ce(g,P,ae,se,ue,ye,oe,we);else{const H=w.el&&w.el._isVueCE?w.el:null;try{H&&H._beginPatch(),x(w,g,se,ue,ye,oe,we)}finally{H&&H._endPatch()}}},ce=(w,g,P,ae,se,ue,ye,oe)=>{let we,H;const{props:U,shapeFlag:Y,transition:Ae,dirs:Fe}=w;if(we=w.el=c(w.type,ue,U&&U.is,U),Y&8?m(we,w.children):Y&16&&A(w.children,we,null,ae,se,ta(w,ue),ye,oe),Fe&&_r(w,null,ae,"created"),Z(we,w,w.scopeId,ye,ae),U){for(const Ye in U)Ye!=="value"&&!bs(Ye)&&a(we,Ye,null,U[Ye],ue,ae);"value"in U&&a(we,"value",null,U.value,ue),(H=U.onVnodeBeforeMount)&&gn(H,ae,w)}Fe&&_r(w,null,ae,"beforeMount");const Je=Ap(se,Ae);Je&&Ae.beforeEnter(we),s(we,g,P),((H=U&&U.onVnodeMounted)||Je||Fe)&&Ht(()=>{try{H&&gn(H,ae,w),Je&&Ae.enter(we),Fe&&_r(w,null,ae,"mounted")}finally{}},se)},Z=(w,g,P,ae,se)=>{if(P&&O(w,P),ae)for(let ue=0;ue{for(let H=we;H{const oe=g.el=w.el;let{patchFlag:we,dynamicChildren:H,dirs:U}=g;we|=w.patchFlag&16;const Y=w.props||ct,Ae=g.props||ct;let Fe;if(P&&kr(P,!1),(Fe=Ae.onVnodeBeforeUpdate)&&gn(Fe,P,g,w),U&&_r(g,w,P,"beforeUpdate"),P&&kr(P,!0),H&&(!w.dynamicChildren||w.dynamicChildren.length!==H.length)&&(we=0,ye=!1,H=null),(Y.innerHTML&&Ae.innerHTML==null||Y.textContent&&Ae.textContent==null)&&m(oe,""),H?ie(w.dynamicChildren,H,oe,P,ae,ta(g,se),ue):ye||ge(w,g,oe,null,P,ae,ta(g,se),ue,!1),we>0){if(we&16)xe(oe,Y,Ae,P,se);else if(we&2&&Y.class!==Ae.class&&a(oe,"class",null,Ae.class,se),we&4&&a(oe,"style",Y.style,Ae.style,se),we&8){const Je=g.dynamicProps;for(let Ye=0;Ye{Fe&&gn(Fe,P,g,w),U&&_r(g,w,P,"updated")},ae)},ie=(w,g,P,ae,se,ue,ye)=>{for(let oe=0;oe{if(g!==P){if(g!==ct)for(const ue in g)!bs(ue)&&!(ue in P)&&a(w,ue,g[ue],null,se,ae);for(const ue in P){if(bs(ue))continue;const ye=P[ue],oe=g[ue];ye!==oe&&ue!=="value"&&a(w,ue,oe,ye,se,ae)}"value"in P&&a(w,"value",g.value,P.value,se)}},J=(w,g,P,ae,se,ue,ye,oe,we)=>{const H=g.el=w?w.el:d(""),U=g.anchor=w?w.anchor:d("");let{patchFlag:Y,dynamicChildren:Ae,slotScopeIds:Fe}=g;Fe&&(oe=oe?oe.concat(Fe):Fe),w==null?(s(H,P,ae),s(U,P,ae),A(g.children||[],P,U,se,ue,ye,oe,we)):Y>0&&Y&64&&Ae&&w.dynamicChildren&&w.dynamicChildren.length===Ae.length?(ie(w.dynamicChildren,Ae,P,se,ue,ye,oe),(g.key!=null||se&&g===se.subTree)&&Ga(w,g,!0)):ge(w,g,P,U,se,ue,ye,oe,we)},Ce=(w,g,P,ae,se,ue,ye,oe,we)=>{g.slotScopeIds=oe,w==null?g.shapeFlag&512?se.ctx.activate(g,P,ae,ye,we):Ne(g,P,ae,se,ue,ye,we):Xe(w,g,we)},Ne=(w,g,P,ae,se,ue,ye)=>{const oe=w.component=Lp(w,ae,se);if(si(w)&&(oe.ctx.renderer=Jt),Kp(oe,!1,ye),oe.asyncDep){if(se&&se.registerDep(oe,He,ye,ue),!w.el){const we=oe.subTree=Oe(Ft);ee(null,we,g,P),w.placeholder=we.el}}else He(oe,w,g,P,se,ue,ye)},Xe=(w,g,P)=>{const ae=g.component=w.component;if(gp(w,g,P))if(ae.asyncDep&&!ae.asyncResolved){g.el=w.el,g.placeholder=w.placeholder,Ue(ae,g,P);return}else ae.next=g,ae.update();else g.el=w.el,g.placeholder=w.placeholder,ae.vnode=g},He=(w,g,P,ae,se,ue,ye)=>{const oe=()=>{if(w.isMounted){let{next:Y,bu:Ae,u:Fe,parent:Je,vnode:Ye}=w;{const Bt=Lc(w);if(Bt){Y&&(Y.el=Ye.el,Ue(w,Y,ye)),Bt.asyncDep.then(()=>{Ht(()=>{w.isUnmounted||H()},se)});return}}let Qe=Y,vt;kr(w,!1),Y?(Y.el=Ye.el,Ue(w,Y,ye)):Y=Ye,Ae&&So(Ae),(vt=Y.props&&Y.props.onVnodeBeforeUpdate)&&gn(vt,Je,Y,Ye),kr(w,!0);const _t=Zl(w),Xt=w.subTree;w.subTree=_t,W(Xt,_t,k(Xt.el),ht(Xt),w,se,ue),Y.el=_t.el,Qe===null&&bp(w,_t.el),Fe&&Ht(Fe,se),(vt=Y.props&&Y.props.onVnodeUpdated)&&Ht(()=>gn(vt,Je,Y,Ye),se)}else{let Y;const{el:Ae,props:Fe}=g,{bm:Je,m:Ye,parent:Qe,root:vt,type:_t}=w,Xt=xs(g);kr(w,!1),Je&&So(Je),!Xt&&(Y=Fe&&Fe.onVnodeBeforeMount)&&gn(Y,Qe,g),kr(w,!0);{vt.ce&&vt.ce._hasShadowRoot()&&vt.ce._injectChildStyle(_t,w.parent?w.parent.type:void 0);const Bt=w.subTree=Zl(w);W(null,Bt,P,ae,w,se,ue),g.el=Bt.el}if(Ye&&Ht(Ye,se),!Xt&&(Y=Fe&&Fe.onVnodeMounted)){const Bt=g;Ht(()=>gn(Y,Qe,Bt),se)}(g.shapeFlag&256||Qe&&xs(Qe.vnode)&&Qe.vnode.shapeFlag&256)&&w.a&&Ht(w.a,se),w.isMounted=!0,g=P=ae=null}};w.scope.on();const we=w.effect=new qu(oe);w.scope.off();const H=w.update=we.run.bind(we),U=w.job=we.runIfDirty.bind(we);U.i=w,U.id=w.uid,we.scheduler=()=>qa(U),kr(w,!0),H()},Ue=(w,g,P)=>{g.component=w;const ae=w.vnode.props;w.vnode=g,w.next=null,_p(w,g.props,ae,P),Sp(w,g.children,P),An(),lc(w),Pn()},ge=(w,g,P,ae,se,ue,ye,oe,we=!1)=>{const H=w&&w.children,U=w?w.shapeFlag:0,Y=g.children,{patchFlag:Ae,shapeFlag:Fe}=g;if(Ae>0){if(Ae&128){Ke(H,Y,P,ae,se,ue,ye,oe,we);return}else if(Ae&256){Me(H,Y,P,ae,se,ue,ye,oe,we);return}}Fe&8?(U&16&&pt(H,se,ue),Y!==H&&m(P,Y)):U&16?Fe&16?Ke(H,Y,P,ae,se,ue,ye,oe,we):pt(H,se,ue,!0):(U&8&&m(P,""),Fe&16&&A(Y,P,ae,se,ue,ye,oe,we))},Me=(w,g,P,ae,se,ue,ye,oe,we)=>{w=w||Ar,g=g||Ar;const H=w.length,U=g.length,Y=Math.min(H,U);let Ae;for(Ae=0;AeU?pt(w,se,ue,!0,!1,Y):A(g,P,ae,se,ue,ye,oe,we,Y)},Ke=(w,g,P,ae,se,ue,ye,oe,we)=>{let H=0;const U=g.length;let Y=w.length-1,Ae=U-1;for(;H<=Y&&H<=Ae;){const Fe=w[H],Je=g[H]=we?Dn(g[H]):xn(g[H]);if($r(Fe,Je))W(Fe,Je,P,null,se,ue,ye,oe,we);else break;H++}for(;H<=Y&&H<=Ae;){const Fe=w[Y],Je=g[Ae]=we?Dn(g[Ae]):xn(g[Ae]);if($r(Fe,Je))W(Fe,Je,P,null,se,ue,ye,oe,we);else break;Y--,Ae--}if(H>Y){if(H<=Ae){const Fe=Ae+1,Je=FeAe)for(;H<=Y;)G(w[H],se,ue,!0),H++;else{const Fe=H,Je=H,Ye=new Map;for(H=Je;H<=Ae;H++){const Ot=g[H]=we?Dn(g[H]):xn(g[H]);Ot.key!=null&&Ye.set(Ot.key,H)}let Qe,vt=0;const _t=Ae-Je+1;let Xt=!1,Bt=0;const Zt=new Array(_t);for(H=0;H<_t;H++)Zt[H]=0;for(H=Fe;H<=Y;H++){const Ot=w[H];if(vt>=_t){G(Ot,se,ue,!0);continue}let $t;if(Ot.key!=null)$t=Ye.get(Ot.key);else for(Qe=Je;Qe<=Ae;Qe++)if(Zt[Qe-Je]===0&&$r(Ot,g[Qe])){$t=Qe;break}$t===void 0?G(Ot,se,ue,!0):(Zt[$t-Je]=H+1,$t>=Bt?Bt=$t:Xt=!0,W(Ot,g[$t],P,null,se,ue,ye,oe,we),vt++)}const pr=Xt?Pp(Zt):Ar;for(Qe=pr.length-1,H=_t-1;H>=0;H--){const Ot=Je+H,$t=g[Ot],Ie=g[Ot+1],Hn=Ot+1{const{el:ue,type:ye,transition:oe,children:we,shapeFlag:H}=w;if(H&6){fe(w.component.subTree,g,P,ae);return}if(H&128){w.suspense.move(g,P,ae);return}if(H&64){ye.move(w,g,P,Jt);return}if(ye===Re){s(ue,g,P);for(let Y=0;Yoe.enter(ue),se));else{const{leave:Y,delayLeave:Ae,afterLeave:Fe}=oe,Je=()=>{w.ctx.isUnmounted?o(ue):s(ue,g,P)},Ye=()=>{const Qe=ue._isLeaving||!!ue[on];ue._isLeaving&&ue[on](!0),oe.persisted&&!Qe?Je():Y(ue,()=>{Je(),Fe&&Fe()})};Ae?Ae(ue,Je,Ye):Ye()}else s(ue,g,P)},G=(w,g,P,ae=!1,se=!1)=>{const{type:ue,props:ye,ref:oe,children:we,dynamicChildren:H,shapeFlag:U,patchFlag:Y,dirs:Ae,cacheIndex:Fe,memo:Je}=w;if((Y===-2||H&&H.hasOnce)&&(se=!1),oe!=null&&(An(),ks(oe,null,P,w,!0),Pn()),Fe!=null&&(!w.ctx||w.ctx===g)&&(g.renderCache[Fe]=void 0),U&256){g.ctx.deactivate(w);return}const Ye=U&1&&Ae,Qe=!xs(w);let vt;if(Qe&&(vt=ye&&ye.onVnodeBeforeUnmount)&&gn(vt,g,w),U&6)st(w.component,P,ae);else{if(U&128){w.suspense.unmount(P,ae);return}Ye&&_r(w,null,g,"beforeUnmount"),U&64?w.type.remove(w,g,P,Jt,ae):H&&!H.hasOnce&&(ue!==Re||Y>0&&Y&64)?pt(H,g,P,!1,!0):(ue===Re&&Y&384||!se&&U&16)&&pt(we,g,P),ae&&X(w)}const _t=Je!=null&&Fe==null;(Qe&&(vt=ye&&ye.onVnodeUnmounted)||Ye||_t)&&Ht(()=>{vt&&gn(vt,g,w),Ye&&_r(w,null,g,"unmounted"),_t&&(w.el=null)},P)},X=w=>{const{type:g,el:P,anchor:ae,transition:se}=w,ue=g===Re;if(ue&&!se){ke(P,ae);return}if(g===$o){Q(w),se&&!se.persisted&&se.afterLeave&&se.afterLeave();return}const ye=ue?Ms(w):w,oe=()=>{ue?k(P)&&ke(P,ae):o(P),se&&!se.persisted&&se.afterLeave&&se.afterLeave()};if(ye&&ye.shapeFlag&1&&se&&!se.persisted){const{leave:we,delayLeave:H}=se,U=ye.el,Y=()=>we(U,oe);H?H(U,oe,Y):Y()}else oe()},ke=(w,g)=>{let P;for(;w!==g;)P=D(w),o(w),w=P;o(g)},st=(w,g,P)=>{const{bum:ae,scope:se,job:ue,subTree:ye,um:oe,m:we,a:H}=w;nu(we),nu(H),ae&&So(ae),se.stop(),ue?(ue.flags|=8,G(ye,w,g,P)):w.vnode.el&&ye&&(ye.transition=w.vnode.transition,G(ye,w,g,P)),oe&&Ht(oe,g),Ht(()=>{w.isUnmounted=!0},g)},pt=(w,g,P,ae=!1,se=!1,ue=0)=>{for(let ye=ue;ye{if(w.shapeFlag&6)return ht(w.component.subTree);if(w.shapeFlag&128)return w.suspense.next();const g=D(w.anchor||w.el),P=g&&g[hc];return P?D(P):g},Yt=(w,g,P)=>{const ae=w&&g._vnode?void 0:w&&w.component?w.component.uid:Rp();Fd(()=>{w==null?g._vnode&&G(g._vnode,null,null,!0):W(g._vnode||null,w,g,null,null,null,P),g._vnode=w},ae)},Jt={p:W,um:G,m:fe,r:X,mt:Ne,mc:A,pc:ge,pbc:ie,n:ht,o:e};return{render:Yt,hydrate:void 0,createApp:dp(Yt)}}function ta({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function kr({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Ap(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ga(e,t,n=!1){const s=e.children,o=t.children;if(Le(s)&&Le(o))for(let a=0;a>1,e[n[d]]0&&(t[s]=n[a-1]),n[a]=s)}}for(a=n.length,c=n[a-1];a-- >0;)n[a]=c,c=t[c];return n}function Lc(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Lc(t)}function nu(e){if(e)for(let t=0;te.__isSuspense;function Tp(e,t){t&&t.pendingBranch?Le(e)?t.effects.push(...e):t.effects.push(e):Kd(e)}const Re=Symbol.for("v-fgt"),ai=Symbol.for("v-txt"),Ft=Symbol.for("v-cmt"),$o=Symbol.for("v-stc"),Tr=[];let rn=null;function F(e=!1){Tr.push(rn=e?null:[])}function Fc(){Tr.pop(),rn=Tr[Tr.length-1]||null}let Is=1;function Lo(e,t=!1){Is+=e,e<0&&rn&&t&&(rn.hasOnce=!0)}function Nc(e){return e.dynamicChildren=Is>0?rn||Ar:null,Fc(),Is>0&&rn&&rn.push(e),e}function q(e,t,n,s,o,a){return Nc(u(e,t,n,s,o,a,!0))}function It(e,t,n,s,o){return Nc(Oe(e,t,n,s,o,!0))}function js(e){return e?e.__v_isVNode===!0:!1}function $r(e,t){return e.type===t.type&&e.key===t.key}const Vc=({key:e})=>e??null,Ao=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?bt(e)||Nt(e)||ze(e)?{i:an,r:e,k:t,f:!!n}:e:null);function u(e,t=null,n=null,s=0,o=null,a=e===Re?0:1,c=!1,d=!1){const h={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Vc(t),ref:t&&Ao(t),scopeId:fc,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:an};return d?(Ko(h,n),a&128&&e.normalize(h)):n&&(h.shapeFlag|=bt(n)?8:16),Is>0&&!c&&rn&&(h.patchFlag>0||a&6)&&h.patchFlag!==32&&rn.push(h),h}const Oe=Op;function Op(e,t=null,n=null,s=0,o=null,a=!1){if((!e||e===sp)&&(e=Ft),js(e)){const d=lr(e,t,!0);return n&&Ko(d,n),Is>0&&!a&&rn&&(d.shapeFlag&6?rn[rn.indexOf(e)]=d:rn.push(d)),d.patchFlag=-2,d}if(Bp(e)&&(e=e.__vccOpts),t){t=Mp(t);let{class:d,style:h}=t;d&&!bt(d)&&(t.class=et(d)),at(h)&&(Ua(h)&&!Le(h)&&(h=Et({},h)),t.style=sr(h))}const c=bt(e)?1:Kc(e)?128:ri(e)?64:at(e)?4:ze(e)?2:0;return u(e,t,n,s,o,c,a,!0)}function Mp(e){return e?Ua(e)||Oc(e)?Et({},e):e:null}function lr(e,t,n=!1,s=!1){const{props:o,ref:a,patchFlag:c,children:d,transition:h}=e,y=t?jp(o||{},t):o,m={__v_isVNode:!0,__v_skip:!0,type:e.type,props:y,key:y&&Vc(y),ref:t&&t.ref?n&&a?Le(a)?a.concat(Ao(t)):[a,Ao(t)]:Ao(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:d,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Re?c===-1?16:c|16:c,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:h,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&lr(e.ssContent),ssFallback:e.ssFallback&&lr(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce,cacheIndex:e.cacheIndex};return h&&s&&ar(m,h.clone(m)),m}function nn(e=" ",t=0){return Oe(ai,null,e,t)}function Ip(e,t){const n=Oe($o,null,e);return n.staticCount=t,n}function Ee(e="",t=!1){return t?(F(),It(Ft,null,e)):Oe(Ft,null,e)}function xn(e){return e==null||typeof e=="boolean"?Oe(Ft):Le(e)?Oe(Re,null,e.slice()):js(e)?Dn(e):Oe(ai,null,String(e))}function Dn(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:lr(e)}function Ko(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(Le(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),Ko(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!Oc(t)?t._ctx=an:o===3&&an&&(an.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else if(ze(t)){if(s&65){Ko(e,{default:t});return}t={default:t,_ctx:an},n=32}else t=String(t),s&64?(n=16,t=[nn(t)]):n=8;e.children=t,e.shapeFlag|=n}function jp(...e){const t={};for(let n=0;nzt||an;let Fo,Ds;{const e=ei(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),a=>{o.length>1?o.forEach(c=>c(a)):o[0](a)}};Fo=t("__VUE_INSTANCE_SETTERS__",n=>zt=n),Ds=t("__VUE_SSR_SETTERS__",n=>Rs=n)}const Bs=e=>{const t=zt;return Fo(e),e.scope.on(),()=>{e.scope.off(),Fo(t)}},ru=()=>{zt&&zt.scope.off(),Fo(null)};function Uc(e){return e.vnode.shapeFlag&4}let Rs=!1;function Kp(e,t=!1,n=!1){t&&Ds(t);const{props:s,children:o}=e.vnode,a=Uc(e);wp(e,s,a,t),Cp(e,o,n||t);const c=a?Fp(e,t):void 0;return t&&Ds(!1),c}function Fp(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,op);const{setup:s}=n;if(s){An();const o=e.setupContext=s.length>1?Vp(e):null,a=Bs(e),c=Ns(s,e,0,[e.props,o]),d=Ru(c);if(Pn(),a(),(d||e.sp)&&!xs(e)&&bc(e),d){if(c.then(ru,ru),t)return c.then(h=>{Ds(!0);try{su(e,h,t)}finally{Ds(!1)}}).catch(h=>{ni(h,e,0)});e.asyncDep=c}else su(e,c)}else qc(e)}function su(e,t,n){ze(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:at(t)&&(e.setupState=oc(t)),qc(e)}function qc(e,t,n){const s=e.type;e.render||(e.render=s.render||En);{const o=Bs(e);An();try{ip(e)}finally{Pn(),o()}}}const Np={get(e,t){return Kt(e,"get",""),e[t]}};function Vp(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Np),slots:e.slots,emit:e.emit,expose:t}}function li(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(oc(Ad(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Cs)return Cs[n](e)},has(t,n){return n in t||n in Cs}})):e.proxy}function Bp(e){return ze(e)&&"__vccOpts"in e}const it=(e,t)=>Id(e,t,Rs);function Up(e,t,n){try{Lo(-1);const s=arguments.length;return s===2?at(t)&&!Le(t)?js(t)?Oe(e,null,[t]):Oe(e,t):Oe(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&js(n)&&(n=[n]),Oe(e,t,n))}finally{Lo(1)}}const qp="3.5.44";/** * @vue/runtime-dom v3.5.44 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let _a;const ou=typeof window<"u"&&window.trustedTypes;if(ou)try{_a=ou.createPolicy("vue",{createHTML:e=>e})}catch{}const Hc=_a?e=>_a.createHTML(e):e=>e,Hp="http://www.w3.org/2000/svg",Wp="http://www.w3.org/1998/Math/MathML",jn=typeof document<"u"?document:null,iu=jn&&jn.createElement("template"),zp={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?jn.createElementNS(Hp,e):t==="mathml"?jn.createElementNS(Wp,e):n?jn.createElement(e,{is:n}):jn.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>jn.createTextNode(e),createComment:e=>jn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>jn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,a){const c=n?n.previousSibling:t.lastChild;if(o&&(o===a||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===a||!(o=o.nextSibling)););else{iu.innerHTML=Hc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const d=iu.content;if(s==="svg"||s==="mathml"){const h=d.firstChild;for(;h.firstChild;)d.appendChild(h.firstChild);d.removeChild(h)}t.insertBefore(d,n)}return[c?c.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Qn="transition",vs="animation",Jr=Symbol("_vtc"),Wc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},zc=Et({},mc,Wc),Gp=e=>(e.displayName="Transition",e.props=zc,e),ns=Gp((e,{slots:t})=>Up(Gd,Gc(e),t)),xr=(e,t=[])=>{Le(e)?e.forEach(n=>n(...t)):e&&e(...t)},au=e=>e?Le(e)?e.some(t=>t.length>1):e.length>1:!1;function Gc(e){const t={};for(const Y in e)Y in Wc||(t[Y]=e[Y]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:a=`${n}-enter-from`,enterActiveClass:c=`${n}-enter-active`,enterToClass:d=`${n}-enter-to`,appearFromClass:h=a,appearActiveClass:y=c,appearToClass:m=d,leaveFromClass:k=`${n}-leave-from`,leaveActiveClass:D=`${n}-leave-active`,leaveToClass:O=`${n}-leave-to`}=e,K=Yp(o),W=K&&K[0],fe=K&&K[1],{onBeforeEnter:ee,onEnter:E,onEnterCancelled:L,onLeave:Q,onLeaveCancelled:le,onBeforeAppear:ce=ee,onAppear:Z=E,onAppearCancelled:A=L}=t,x=(Y,Ce,Ne,Xe)=>{Y._enterCancelled=Xe,er(Y,Ce?m:d),er(Y,Ce?y:c),Ne&&Ne()},ie=(Y,Ce)=>{Y._isLeaving=!1,er(Y,k),er(Y,O),er(Y,D),Ce&&Ce()},xe=Y=>(Ce,Ne)=>{const Xe=Y?Z:E,qe=()=>x(Ce,Y,Ne);xr(Xe,[Ce,qe]),lu(()=>{er(Ce,Y?h:a),bn(Ce,Y?m:d),au(Xe)||uu(Ce,s,W,qe)})};return Et(t,{onBeforeEnter(Y){xr(ee,[Y]),bn(Y,a),bn(Y,c)},onBeforeAppear(Y){xr(ce,[Y]),bn(Y,h),bn(Y,y)},onEnter:xe(!1),onAppear:xe(!0),onLeave(Y,Ce){Y._isLeaving=!0;const Ne=()=>ie(Y,Ce);bn(Y,k),Y._enterCancelled?(bn(Y,D),ka(Y)):(ka(Y),bn(Y,D)),lu(()=>{Y._isLeaving&&(er(Y,k),bn(Y,O),au(Q)||uu(Y,s,fe,Ne))}),xr(Q,[Y,Ne])},onEnterCancelled(Y){x(Y,!1,void 0,!0),xr(L,[Y])},onAppearCancelled(Y){x(Y,!0,void 0,!0),xr(A,[Y])},onLeaveCancelled(Y){ie(Y),xr(le,[Y])}})}function Yp(e){if(e==null)return null;if(at(e))return[na(e.enter),na(e.leave)];{const t=na(e);return[t,t]}}function na(e){return ed(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jr]||(e[Jr]=new Set)).add(t)}function er(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jr];n&&(n.delete(t),n.size||(e[Jr]=void 0))}function lu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Jp=0;function uu(e,t,n,s){const o=e._endId=++Jp,a=()=>{o===e._endId&&s()};if(n!=null)return setTimeout(a,n);const{type:c,timeout:d,propCount:h}=Yc(e,t);if(!c)return s();const y=c+"end";let m=0;const k=()=>{e.removeEventListener(y,D),a()},D=O=>{O.target===e&&++m>=h&&k()};setTimeout(()=>{m(n[K]||"").split(", "),o=s(`${Qn}Delay`),a=s(`${Qn}Duration`),c=cu(o,a),d=s(`${vs}Delay`),h=s(`${vs}Duration`),y=cu(d,h);let m=null,k=0,D=0;t===Qn?c>0&&(m=Qn,k=c,D=a.length):t===vs?y>0&&(m=vs,k=y,D=h.length):(k=Math.max(c,y),m=k>0?c>y?Qn:vs:null,D=m?m===Qn?a.length:h.length:0);const O=m===Qn&&/\b(?:transform|all)(?:,|$)/.test(s(`${Qn}Property`).toString());return{type:m,timeout:k,propCount:D,hasTransform:O}}function cu(e,t){for(;e.lengthfu(n)+fu(e[s])))}function fu(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ka(e){return(e?e.ownerDocument:document).body.offsetHeight}function Xp(e,t,n){const s=e[Jr];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const du=Symbol("_vod"),Jc=Symbol("_vsh"),Qp=Symbol(""),Zp=/(?:^|;)\s*display\s*:/;function eh(e,t,n){const s=e.style,o=bt(n);let a=!1;if(n&&!o){if(t)if(bt(t))for(const c of t.split(";")){const d=c.slice(0,c.indexOf(":")).trim();n[d]==null&&gs(s,d,"")}else for(const c in t)n[c]==null&&gs(s,c,"");for(const c in n){c==="display"&&(a=!0);const d=n[c];d!=null?nh(e,c,!bt(t)&&t?t[c]:void 0,d)||gs(s,c,d):gs(s,c,"")}}else if(o){if(t!==n){const c=s[Qp];c&&(n+=";"+c),s.cssText=n,a=Zp.test(n)}}else t&&e.removeAttribute("style");du in e&&((!o||t!==n)&&(e[du]=a?s.display:""),e[Jc]&&(s.display="none"))}const ko=/\s*!important$/;function gs(e,t,n){if(Le(n))n.forEach(s=>gs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))ko.test(n)?e.setProperty(t,n.replace(ko,""),"important"):e.setProperty(t,n);else{const s=th(e,t);ko.test(n)?e.setProperty(cr(s),n.replace(ko,""),"important"):e[s]=n}}const pu=["Webkit","Moz","ms"],ra={};function th(e,t){const n=ra[t];if(n)return n;let s=hn(t);if(s!=="filter"&&s in e)return ra[t]=s;s=Fu(s);for(let o=0;osa||(lh.then(()=>sa=0),sa=Date.now());function ch(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(Le(o)){const a=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{a.call(s),s._stopped=!0};const c=o.slice(),d=[s];for(let h=0;he.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fh=(e,t,n,s,o,a)=>{const c=o==="svg";t==="class"?Xp(e,s,c):t==="style"?eh(e,n,s):Jo(t)?Xo(t)||sh(e,t,n,s,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):dh(e,t,s,c))?(mu(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&vu(e,t,s,c,a,t!=="value")):e._isVueCE&&(ph(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!bt(s)))?mu(e,hn(t),s,a,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),vu(e,t,s,c))};function dh(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&gu(t)&&We(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return gu(t)&&bt(n)?!1:t in e}function ph(e,t){const n=e._def.props;if(!n)return!1;const s=hn(t);return Array.isArray(n)?n.some(o=>hn(o)===s):Object.keys(n).some(o=>hn(o)===s)}const Xc=new WeakMap,Qc=new WeakMap,No=Symbol("_moveCb"),bu=Symbol("_enterCb"),xa=new WeakMap,hh=e=>(delete e.props.mode,e),vh=hh({name:"TransitionGroup",props:Et({},zc,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ya(),s=vc();let o,a,c,d;const h=()=>(d===void 0&&(d=o.length>0&&xh(o[0].el,n.vnode.el,wu(e))),d);return _c(()=>{if(xa.delete(n),!h()){o=[],c=void 0;return}const y=wu(e);o.forEach(yh);const m=c&&kh(c,n.vnode.el);c=void 0,o.forEach(D=>gh(D,m));const k=o.filter(bh);ka(n.vnode.el),k.forEach(D=>{const O=D.el,K=O.style;bn(O,y),K.transform=K.webkitTransform=K.transitionDuration="";const W=O[No]=fe=>{fe&&fe.target!==O||(!fe||fe.propertyName.endsWith("transform"))&&(O.removeEventListener("transitionend",W),O[No]=null,er(O,y))};O.addEventListener("transitionend",W)}),o=[]}),()=>{const y=rt(e),m=Gc(y);let k=y.tag||Re;if(o=[],d=void 0,a)for(let D=0;Ds.willMove()&&s.item.contains(t));return n&&ui(n.item,n)}function xh(e,t,n){const s=e.cloneNode(),o=e[Jr];o&&o.forEach(d=>{d.split(/\s+/).forEach(h=>h&&s.classList.remove(h))}),n.split(/\s+/).forEach(d=>d&&s.classList.add(d)),s.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(s);const{hasTransform:c}=Yc(s);return a.removeChild(s),c}const Xr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Le(t)?n=>So(t,n):t};function Ch(e){e.target.composing=!0}function _u(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Sn=Symbol("_assign"),xo=Symbol("_initialValue");function oa(e,t,n){return t&&(e=e.trim()),n&&(e=Zo(e)),e}const De={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e.parentNode&&(e.type==="text"?e[xo]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[xo]=e.defaultValue.replace(/\r\n?/g,` -`))),e[Sn]=Xr(o);const a=s||o.props&&o.props.type==="number";nr(e,t?"change":"input",c=>{c.target.composing||e[Sn](oa(e.value,n,a))}),(n||a)&&nr(e,"change",()=>{e.value=oa(e.value,n,a)}),t||(nr(e,"compositionstart",Ch),nr(e,"compositionend",_u),nr(e,"change",_u))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const o=t??"",a=e[xo];delete e[xo],a!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==a?e[Sn](oa(e.value,n,s)):e.value=o},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:a}},c){if(e[Sn]=Xr(c),e.composing)return;const d=(a||e.type==="number")&&!/^0\d/.test(e.value)?Zo(e.value):e.value,h=t??"";if(d===h)return;const y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===h)||(e.value=h)}},Sh={deep:!0,created(e,t,n){e[Sn]=Xr(n),nr(e,"change",()=>{const s=e._modelValue,o=Ls(e),a=e.checked,c=e[Sn];if(Le(s)){const d=Da(s,o),h=d!==-1;if(a&&!h)c(s.concat(o));else if(!a&&h){const y=[...s];y.splice(d,1),c(y)}}else if(Bn(s)){const d=new Set(s);a?d.add(o):d.delete(o),c(d)}else c(Zc(e,a))})},mounted:ku,beforeUpdate(e,t,n){e[Sn]=Xr(n),ku(e,t,n)}};function ku(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(Le(t))o=Da(t,s.props.value)>-1;else if(Bn(t))o=t.has(s.props.value);else{if(t===n)return;o=Un(t,Zc(e,!0))}e.checked!==o&&(e.checked=o)}const Fn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,nr(e,"change",()=>{const o=Array.prototype.filter.call(e.options,h=>h.selected).map(h=>n?Zo(Ls(h)):Ls(h)),a=e.multiple,c=a?Bn(e._modelValue)?new Set(o):o:o[0],d=e._pendingValue=[a,a?Le(c)?o.slice():o:c];try{e[Sn](c)}finally{ts(()=>{e._pendingValue===d&&(e._pendingValue=void 0)})}}),e[Sn]=Xr(s)},mounted(e,{value:t}){xu(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Sn]=Xr(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Eh(t,n[1],n[0]))&&xu(e,t)}};function Eh(e,t,n){if(!n||Le(e))return Un(e,t);if(Bn(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function xu(e,t){const n=e.multiple,s=Le(t);if(!(n&&!s&&!Bn(t))){for(let o=0,a=e.options.length;oString(y)===String(d)):c.selected=Da(t,d)>-1}else c.selected=t.has(d);else if(Un(Ls(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ls(e){return"_value"in e?e._value:e.value}function Zc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const $h=["ctrl","shift","alt","meta"],Ah={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>$h.some(n=>e[`${n}Key`]&&!t.includes(n))},Mr=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(o,...a)=>{for(let c=0;c{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=o=>{if(!("key"in o))return;const a=cr(o.key);if(t.some(c=>c===a||Ph[c]===a))return e(o)})},Th=Et({patchProp:fh},zp);let Cu;function Oh(){return Cu||(Cu=Ep(Th))}const Mh=(...e)=>{const t=Oh().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=jh(s);if(!o)return;const a=t._component;!We(a)&&!a.render&&!a.template&&(a.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const c=n(o,!1,Ih(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),c},t};function Ih(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function jh(e){return bt(e)?document.querySelector(e):e}function At(e){return''+e+""}const Dh={calendar:At(''),clock:At(''),"check-circle":At(''),edit:At(''),tag:At(''),star:At(''),close:At(''),flag:At(''),chart:At(''),export:At(''),"chevron-left":At(''),"chevron-right":At(''),"chevron-down":At(''),plus:At(''),search:At(''),settings:At(''),memo:At(''),lock:At(''),wallet:At('')},Rh=["innerHTML"],lt=Vt({__name:"Icon",props:{name:{},size:{default:16}},setup(e){const t=e,n=it(()=>Dh[t.name]||"");return(s,o)=>(F(),q("span",{class:"icon",style:sr({width:e.size+"px",height:e.size+"px"}),innerHTML:n.value},null,12,Rh))}}),Lh=["aria-label"],Kh={class:"dialog-title"},Fh={class:"dialog-msg"},Nh={class:"dialog-btns"},Vh=Vt({__name:"ConfirmDialog",props:{open:{type:Boolean},title:{},message:{},confirmText:{default:"确认"},cancelText:{default:"取消"},danger:{type:Boolean,default:!1}},emits:["cancel","confirm"],setup(e,{emit:t}){const n=e,s=t;function o(a){n.open&&a.key==="Escape"&&s("cancel")}return gt(()=>n.open,a=>{a?window.addEventListener("keydown",o):window.removeEventListener("keydown",o)}),dr(()=>window.removeEventListener("keydown",o)),(a,c)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:c[2]||(c[2]=Mr(d=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Kh,re(e.title),1),u("div",Fh,re(e.message),1),u("div",Nh,[u("button",{class:"btn btn-sm",onClick:c[0]||(c[0]=d=>s("cancel"))},re(e.cancelText),1),u("button",{class:et(["btn btn-sm",e.danger?"btn-danger-solid":"btn-primary"]),onClick:c[1]||(c[1]=d=>s("confirm"))},re(e.confirmText),3)])],8,Lh)])):Ee("",!0)]),_:1})]))}}),Gt=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},ur=Gt(Vh,[["__scopeId","data-v-f27041d4"]]);var Su=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Bh(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ef={exports:{}};(function(e,t){((n,s)=>{e.exports=s()})(Su,function(){var n=function(r,i){return(n=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(l,f){l.__proto__=f}:function(l,f){for(var p in f)Object.prototype.hasOwnProperty.call(f,p)&&(l[p]=f[p])}))(r,i)},s=function(){return(s=Object.assign||function(r){for(var i,l=1,f=arguments.length;l"u"||a.Promise||(a.Promise=Promise);var y=Object.getPrototypeOf,m={}.hasOwnProperty;function k(r,i){return m.call(r,i)}function D(r,i){typeof i=="function"&&(i=i(y(r))),(typeof Reflect>"u"?c:Reflect.ownKeys)(i).forEach(function(l){K(r,l,i[l])})}var O=Object.defineProperty;function K(r,i,l,f){O(r,i,h(l&&k(l,"get")&&typeof l.get=="function"?{get:l.get,set:l.set,configurable:!0}:{value:l,configurable:!0,writable:!0},f))}function W(r){return{from:function(i){return r.prototype=Object.create(i.prototype),K(r.prototype,"constructor",r),{extend:D.bind(null,r.prototype)}}}}var fe=Object.getOwnPropertyDescriptor,ee=[].slice;function E(r,i,l){return ee.call(r,i,l)}function L(r,i){return i(r)}function Q(r){if(!r)throw new Error("Assertion Failed")}function le(r){a.setImmediate?setImmediate(r):setTimeout(r,0)}function ce(r,i){if(typeof i=="string"&&k(r,i))return r[i];if(!i)return r;if(typeof i!="string"){for(var l=[],f=0,p=i.length;fe})}catch{}const Hc=_a?e=>_a.createHTML(e):e=>e,Hp="http://www.w3.org/2000/svg",Wp="http://www.w3.org/1998/Math/MathML",jn=typeof document<"u"?document:null,iu=jn&&jn.createElement("template"),zp={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?jn.createElementNS(Hp,e):t==="mathml"?jn.createElementNS(Wp,e):n?jn.createElement(e,{is:n}):jn.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>jn.createTextNode(e),createComment:e=>jn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>jn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,a){const c=n?n.previousSibling:t.lastChild;if(o&&(o===a||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===a||!(o=o.nextSibling)););else{iu.innerHTML=Hc(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const d=iu.content;if(s==="svg"||s==="mathml"){const h=d.firstChild;for(;h.firstChild;)d.appendChild(h.firstChild);d.removeChild(h)}t.insertBefore(d,n)}return[c?c.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Qn="transition",vs="animation",Jr=Symbol("_vtc"),Wc={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},zc=Et({},mc,Wc),Gp=e=>(e.displayName="Transition",e.props=zc,e),ns=Gp((e,{slots:t})=>Up(Gd,Gc(e),t)),xr=(e,t=[])=>{Le(e)?e.forEach(n=>n(...t)):e&&e(...t)},au=e=>e?Le(e)?e.some(t=>t.length>1):e.length>1:!1;function Gc(e){const t={};for(const J in e)J in Wc||(t[J]=e[J]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:a=`${n}-enter-from`,enterActiveClass:c=`${n}-enter-active`,enterToClass:d=`${n}-enter-to`,appearFromClass:h=a,appearActiveClass:y=c,appearToClass:m=d,leaveFromClass:k=`${n}-leave-from`,leaveActiveClass:D=`${n}-leave-active`,leaveToClass:O=`${n}-leave-to`}=e,K=Yp(o),W=K&&K[0],de=K&&K[1],{onBeforeEnter:ee,onEnter:E,onEnterCancelled:L,onLeave:Q,onLeaveCancelled:le,onBeforeAppear:ce=ee,onAppear:Z=E,onAppearCancelled:A=L}=t,x=(J,Ce,Ne,Xe)=>{J._enterCancelled=Xe,er(J,Ce?m:d),er(J,Ce?y:c),Ne&&Ne()},ie=(J,Ce)=>{J._isLeaving=!1,er(J,k),er(J,O),er(J,D),Ce&&Ce()},xe=J=>(Ce,Ne)=>{const Xe=J?Z:E,He=()=>x(Ce,J,Ne);xr(Xe,[Ce,He]),lu(()=>{er(Ce,J?h:a),bn(Ce,J?m:d),au(Xe)||uu(Ce,s,W,He)})};return Et(t,{onBeforeEnter(J){xr(ee,[J]),bn(J,a),bn(J,c)},onBeforeAppear(J){xr(ce,[J]),bn(J,h),bn(J,y)},onEnter:xe(!1),onAppear:xe(!0),onLeave(J,Ce){J._isLeaving=!0;const Ne=()=>ie(J,Ce);bn(J,k),J._enterCancelled?(bn(J,D),ka(J)):(ka(J),bn(J,D)),lu(()=>{J._isLeaving&&(er(J,k),bn(J,O),au(Q)||uu(J,s,de,Ne))}),xr(Q,[J,Ne])},onEnterCancelled(J){x(J,!1,void 0,!0),xr(L,[J])},onAppearCancelled(J){x(J,!0,void 0,!0),xr(A,[J])},onLeaveCancelled(J){ie(J),xr(le,[J])}})}function Yp(e){if(e==null)return null;if(at(e))return[na(e.enter),na(e.leave)];{const t=na(e);return[t,t]}}function na(e){return ed(e)}function bn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Jr]||(e[Jr]=new Set)).add(t)}function er(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Jr];n&&(n.delete(t),n.size||(e[Jr]=void 0))}function lu(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Jp=0;function uu(e,t,n,s){const o=e._endId=++Jp,a=()=>{o===e._endId&&s()};if(n!=null)return setTimeout(a,n);const{type:c,timeout:d,propCount:h}=Yc(e,t);if(!c)return s();const y=c+"end";let m=0;const k=()=>{e.removeEventListener(y,D),a()},D=O=>{O.target===e&&++m>=h&&k()};setTimeout(()=>{m(n[K]||"").split(", "),o=s(`${Qn}Delay`),a=s(`${Qn}Duration`),c=cu(o,a),d=s(`${vs}Delay`),h=s(`${vs}Duration`),y=cu(d,h);let m=null,k=0,D=0;t===Qn?c>0&&(m=Qn,k=c,D=a.length):t===vs?y>0&&(m=vs,k=y,D=h.length):(k=Math.max(c,y),m=k>0?c>y?Qn:vs:null,D=m?m===Qn?a.length:h.length:0);const O=m===Qn&&/\b(?:transform|all)(?:,|$)/.test(s(`${Qn}Property`).toString());return{type:m,timeout:k,propCount:D,hasTransform:O}}function cu(e,t){for(;e.lengthfu(n)+fu(e[s])))}function fu(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function ka(e){return(e?e.ownerDocument:document).body.offsetHeight}function Xp(e,t,n){const s=e[Jr];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const du=Symbol("_vod"),Jc=Symbol("_vsh"),Qp=Symbol(""),Zp=/(?:^|;)\s*display\s*:/;function eh(e,t,n){const s=e.style,o=bt(n);let a=!1;if(n&&!o){if(t)if(bt(t))for(const c of t.split(";")){const d=c.slice(0,c.indexOf(":")).trim();n[d]==null&&gs(s,d,"")}else for(const c in t)n[c]==null&&gs(s,c,"");for(const c in n){c==="display"&&(a=!0);const d=n[c];d!=null?nh(e,c,!bt(t)&&t?t[c]:void 0,d)||gs(s,c,d):gs(s,c,"")}}else if(o){if(t!==n){const c=s[Qp];c&&(n+=";"+c),s.cssText=n,a=Zp.test(n)}}else t&&e.removeAttribute("style");du in e&&((!o||t!==n)&&(e[du]=a?s.display:""),e[Jc]&&(s.display="none"))}const ko=/\s*!important$/;function gs(e,t,n){if(Le(n))n.forEach(s=>gs(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))ko.test(n)?e.setProperty(t,n.replace(ko,""),"important"):e.setProperty(t,n);else{const s=th(e,t);ko.test(n)?e.setProperty(cr(s),n.replace(ko,""),"important"):e[s]=n}}const pu=["Webkit","Moz","ms"],ra={};function th(e,t){const n=ra[t];if(n)return n;let s=hn(t);if(s!=="filter"&&s in e)return ra[t]=s;s=Fu(s);for(let o=0;osa||(lh.then(()=>sa=0),sa=Date.now());function ch(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;const o=n.value;if(Le(o)){const a=s.stopImmediatePropagation;s.stopImmediatePropagation=()=>{a.call(s),s._stopped=!0};const c=o.slice(),d=[s];for(let h=0;he.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,fh=(e,t,n,s,o,a)=>{const c=o==="svg";t==="class"?Xp(e,s,c):t==="style"?eh(e,n,s):Jo(t)?Xo(t)||sh(e,t,n,s,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):dh(e,t,s,c))?(mu(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&vu(e,t,s,c,a,t!=="value")):e._isVueCE&&(ph(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!bt(s)))?mu(e,hn(t),s,a,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),vu(e,t,s,c))};function dh(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&gu(t)&&ze(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return gu(t)&&bt(n)?!1:t in e}function ph(e,t){const n=e._def.props;if(!n)return!1;const s=hn(t);return Array.isArray(n)?n.some(o=>hn(o)===s):Object.keys(n).some(o=>hn(o)===s)}const Xc=new WeakMap,Qc=new WeakMap,No=Symbol("_moveCb"),bu=Symbol("_enterCb"),xa=new WeakMap,hh=e=>(delete e.props.mode,e),vh=hh({name:"TransitionGroup",props:Et({},zc,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=Ya(),s=vc();let o,a,c,d;const h=()=>(d===void 0&&(d=o.length>0&&xh(o[0].el,n.vnode.el,wu(e))),d);return _c(()=>{if(xa.delete(n),!h()){o=[],c=void 0;return}const y=wu(e);o.forEach(yh);const m=c&&kh(c,n.vnode.el);c=void 0,o.forEach(D=>gh(D,m));const k=o.filter(bh);ka(n.vnode.el),k.forEach(D=>{const O=D.el,K=O.style;bn(O,y),K.transform=K.webkitTransform=K.transitionDuration="";const W=O[No]=de=>{de&&de.target!==O||(!de||de.propertyName.endsWith("transform"))&&(O.removeEventListener("transitionend",W),O[No]=null,er(O,y))};O.addEventListener("transitionend",W)}),o=[]}),()=>{const y=rt(e),m=Gc(y);let k=y.tag||Re;if(o=[],d=void 0,a)for(let D=0;Ds.willMove()&&s.item.contains(t));return n&&ui(n.item,n)}function xh(e,t,n){const s=e.cloneNode(),o=e[Jr];o&&o.forEach(d=>{d.split(/\s+/).forEach(h=>h&&s.classList.remove(h))}),n.split(/\s+/).forEach(d=>d&&s.classList.add(d)),s.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(s);const{hasTransform:c}=Yc(s);return a.removeChild(s),c}const Xr=e=>{const t=e.props["onUpdate:modelValue"]||!1;return Le(t)?n=>So(t,n):t};function Ch(e){e.target.composing=!0}function _u(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Sn=Symbol("_assign"),xo=Symbol("_initialValue");function oa(e,t,n){return t&&(e=e.trim()),n&&(e=Zo(e)),e}const De={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e.parentNode&&(e.type==="text"?e[xo]=e.defaultValue.replace(/[\r\n]/g,""):e.type==="textarea"&&(e[xo]=e.defaultValue.replace(/\r\n?/g,` +`))),e[Sn]=Xr(o);const a=s||o.props&&o.props.type==="number";nr(e,t?"change":"input",c=>{c.target.composing||e[Sn](oa(e.value,n,a))}),(n||a)&&nr(e,"change",()=>{e.value=oa(e.value,n,a)}),t||(nr(e,"compositionstart",Ch),nr(e,"compositionend",_u),nr(e,"change",_u))},mounted(e,{value:t,modifiers:{trim:n,number:s}}){const o=t??"",a=e[xo];delete e[xo],a!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==a?e[Sn](oa(e.value,n,s)):e.value=o},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:a}},c){if(e[Sn]=Xr(c),e.composing)return;const d=(a||e.type==="number")&&!/^0\d/.test(e.value)?Zo(e.value):e.value,h=t??"";if(d===h)return;const y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===h)||(e.value=h)}},Sh={deep:!0,created(e,t,n){e[Sn]=Xr(n),nr(e,"change",()=>{const s=e._modelValue,o=Ls(e),a=e.checked,c=e[Sn];if(Le(s)){const d=Da(s,o),h=d!==-1;if(a&&!h)c(s.concat(o));else if(!a&&h){const y=[...s];y.splice(d,1),c(y)}}else if(Bn(s)){const d=new Set(s);a?d.add(o):d.delete(o),c(d)}else c(Zc(e,a))})},mounted:ku,beforeUpdate(e,t,n){e[Sn]=Xr(n),ku(e,t,n)}};function ku(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(Le(t))o=Da(t,s.props.value)>-1;else if(Bn(t))o=t.has(s.props.value);else{if(t===n)return;o=Un(t,Zc(e,!0))}e.checked!==o&&(e.checked=o)}const Fn={deep:!0,created(e,{value:t,modifiers:{number:n}},s){e._modelValue=t,nr(e,"change",()=>{const o=Array.prototype.filter.call(e.options,h=>h.selected).map(h=>n?Zo(Ls(h)):Ls(h)),a=e.multiple,c=a?Bn(e._modelValue)?new Set(o):o:o[0],d=e._pendingValue=[a,a?Le(c)?o.slice():o:c];try{e[Sn](c)}finally{ts(()=>{e._pendingValue===d&&(e._pendingValue=void 0)})}}),e[Sn]=Xr(s)},mounted(e,{value:t}){xu(e,t)},beforeUpdate(e,{value:t},n){e._modelValue=t,e[Sn]=Xr(n)},updated(e,{value:t}){const n=e._pendingValue;e._pendingValue=void 0,(!n||n[0]!==e.multiple||!Eh(t,n[1],n[0]))&&xu(e,t)}};function Eh(e,t,n){if(!n||Le(e))return Un(e,t);if(Bn(e)){if(e.size!==t.length)return!1;for(const s of t)if(!e.has(s))return!1;return!0}return!1}function xu(e,t){const n=e.multiple,s=Le(t);if(!(n&&!s&&!Bn(t))){for(let o=0,a=e.options.length;oString(y)===String(d)):c.selected=Da(t,d)>-1}else c.selected=t.has(d);else if(Un(Ls(c),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function Ls(e){return"_value"in e?e._value:e.value}function Zc(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const $h=["ctrl","shift","alt","meta"],Ah={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>$h.some(n=>e[`${n}Key`]&&!t.includes(n))},Mr=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(o,...a)=>{for(let c=0;c{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=o=>{if(!("key"in o))return;const a=cr(o.key);if(t.some(c=>c===a||Ph[c]===a))return e(o)})},Th=Et({patchProp:fh},zp);let Cu;function Oh(){return Cu||(Cu=Ep(Th))}const Mh=(...e)=>{const t=Oh().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=jh(s);if(!o)return;const a=t._component;!ze(a)&&!a.render&&!a.template&&(a.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const c=n(o,!1,Ih(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),c},t};function Ih(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function jh(e){return bt(e)?document.querySelector(e):e}function At(e){return''+e+""}const Dh={calendar:At(''),clock:At(''),"check-circle":At(''),edit:At(''),tag:At(''),star:At(''),close:At(''),flag:At(''),chart:At(''),export:At(''),"chevron-left":At(''),"chevron-right":At(''),"chevron-down":At(''),plus:At(''),search:At(''),settings:At(''),memo:At(''),lock:At(''),wallet:At('')},Rh=["innerHTML"],lt=Vt({__name:"Icon",props:{name:{},size:{default:16}},setup(e){const t=e,n=it(()=>Dh[t.name]||"");return(s,o)=>(F(),q("span",{class:"icon",style:sr({width:e.size+"px",height:e.size+"px"}),innerHTML:n.value},null,12,Rh))}}),Lh=["aria-label"],Kh={class:"dialog-title"},Fh={class:"dialog-msg"},Nh={class:"dialog-btns"},Vh=Vt({__name:"ConfirmDialog",props:{open:{type:Boolean},title:{},message:{},confirmText:{default:"确认"},cancelText:{default:"取消"},danger:{type:Boolean,default:!1}},emits:["cancel","confirm"],setup(e,{emit:t}){const n=e,s=t;function o(a){n.open&&a.key==="Escape"&&s("cancel")}return gt(()=>n.open,a=>{a?window.addEventListener("keydown",o):window.removeEventListener("keydown",o)}),dr(()=>window.removeEventListener("keydown",o)),(a,c)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:c[2]||(c[2]=Mr(d=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Kh,re(e.title),1),u("div",Fh,re(e.message),1),u("div",Nh,[u("button",{class:"btn btn-sm",onClick:c[0]||(c[0]=d=>s("cancel"))},re(e.cancelText),1),u("button",{class:et(["btn btn-sm",e.danger?"btn-danger-solid":"btn-primary"]),onClick:c[1]||(c[1]=d=>s("confirm"))},re(e.confirmText),3)])],8,Lh)])):Ee("",!0)]),_:1})]))}}),Gt=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},ur=Gt(Vh,[["__scopeId","data-v-f27041d4"]]);var Su=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Bh(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var ef={exports:{}};(function(e,t){((n,s)=>{e.exports=s()})(Su,function(){var n=function(r,i){return(n=Object.setPrototypeOf||({__proto__:[]}instanceof Array?function(l,f){l.__proto__=f}:function(l,f){for(var p in f)Object.prototype.hasOwnProperty.call(f,p)&&(l[p]=f[p])}))(r,i)},s=function(){return(s=Object.assign||function(r){for(var i,l=1,f=arguments.length;l"u"||a.Promise||(a.Promise=Promise);var y=Object.getPrototypeOf,m={}.hasOwnProperty;function k(r,i){return m.call(r,i)}function D(r,i){typeof i=="function"&&(i=i(y(r))),(typeof Reflect>"u"?c:Reflect.ownKeys)(i).forEach(function(l){K(r,l,i[l])})}var O=Object.defineProperty;function K(r,i,l,f){O(r,i,h(l&&k(l,"get")&&typeof l.get=="function"?{get:l.get,set:l.set,configurable:!0}:{value:l,configurable:!0,writable:!0},f))}function W(r){return{from:function(i){return r.prototype=Object.create(i.prototype),K(r.prototype,"constructor",r),{extend:D.bind(null,r.prototype)}}}}var de=Object.getOwnPropertyDescriptor,ee=[].slice;function E(r,i,l){return ee.call(r,i,l)}function L(r,i){return i(r)}function Q(r){if(!r)throw new Error("Assertion Failed")}function le(r){a.setImmediate?setImmediate(r):setTimeout(r,0)}function ce(r,i){if(typeof i=="string"&&k(r,i))return r[i];if(!i)return r;if(typeof i!="string"){for(var l=[],f=0,p=i.length;f"u"?[]:(Ye=Promise.resolve(),typeof crypto<"u"&&crypto.subtle?[Je=crypto.subtle.digest("SHA-512",new Uint8Array([0])),y(Je),Ye]:[Ye,y(Ye),Ye]),Ye=Je[0],Br=Je[1],Br=Br&&Br.then,Qe=Ye&&Ye.constructor,vt=!!Je[2],_t=function(r,i){Hn.push([r,i]),Bt&&(queueMicrotask(Ef),Bt=!1)},Xt=!0,Bt=!0,Zt=[],pr=[],Ot=P,$t={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:g,pgp:!1,env:{},finalize:g},Ie=$t,Hn=[],hr=0,Ws=[];function Se(r){if(typeof this!="object")throw new TypeError("Promises must be constructed via new");this._listeners=[],this._lib=!1;var i=this._PSD=Ie;if(typeof r!="function"){if(r!==Ae)throw new TypeError("Not a function");this._state=arguments[1],this._value=arguments[2],this._state===!1&&yi(this,this._value)}else this._state=null,this._value=null,++i.ref,function l(f,p){try{p(function(v){if(f._state===null){if(v===f)throw new TypeError("A promise cannot be resolved with itself.");var b=f._lib&&Rr();v&&typeof v.then=="function"?l(f,function(_,S){v instanceof Se?v._then(_,S):v.then(_,S)}):(f._state=!0,f._value=v,il(f)),b&&Lr()}},yi.bind(null,f))}catch(v){yi(f,v)}}(this,r)}var mi={get:function(){var r=Ie,i=Js;function l(f,p){var v=this,b=!r.global&&(r!==Ie||i!==Js),_=b&&!zn(),S=new Se(function(V,T){gi(v,new ol(ll(f,r,b,_),ll(p,r,b,_),V,T,r))});return this._consoleTask&&(S._consoleTask=this._consoleTask),S}return l.prototype=Ae,l},set:function(r){K(this,"then",r&&r.prototype===Ae?mi:{get:function(){return r},set:mi.set})}};function ol(r,i,l,f,p){this.onFulfilled=typeof r=="function"?r:null,this.onRejected=typeof i=="function"?i:null,this.resolve=l,this.reject=f,this.psd=p}function yi(r,i){var l,f;pr.push(i),r._state===null&&(l=r._lib&&Rr(),i=Ot(i),r._state=!1,r._value=i,f=r,Zt.some(function(p){return p._value===f._value})||Zt.push(f),il(r),l)&&Lr()}function il(r){var i=r._listeners;r._listeners=[];for(var l=0,f=i.length;l{for(var b=Zt.length;b;)if(Zt[--b]._value===v._value)return Zt.splice(b,1)})(i),l.resolve(f)}catch(v){l.reject(v)}finally{--hr==0&&bi(),--l.psd.ref||l.psd.finalize()}}function Ef(){vr($t,function(){Rr()&&Lr()})}function Rr(){var r=Xt;return Bt=Xt=!1,r}function Lr(){var r,i,l;do for(;0.",ul="String expected.",Qs="__dbnames",_i="readonly",ki="readwrite";function yr(r,i){return r?i?function(){return r.apply(this,arguments)&&i.apply(this,arguments)}:r:i}var cl={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function Zs(r){return typeof r!="string"||/\./.test(r)?function(i){return i}:function(i){return i[r]===void 0&&r in i&&delete(i=Ce(i))[r],i}}function fl(){throw je.Type("Entity instances must never be new:ed. Instances are generated by the framework bypassing the constructor.")}function tt(r,i){try{var l=dl(r),f=dl(i);if(l!==f)return l==="Array"?1:f==="Array"?-1:l==="binary"?1:f==="binary"?-1:l==="string"?1:f==="string"?-1:l==="Date"?1:f!=="Date"?NaN:-1;switch(l){case"number":case"Date":case"string":return i{var _=T,S=b;if(typeof S!="function"&&S!==null)throw new TypeError("Class extends value "+String(S)+" is not a constructor or null");function V(){this.constructor=_}function T(){return b!==null&&b.apply(this,arguments)||this}return n(_,S),_.prototype=S===null?Object.create(S):(V.prototype=S.prototype,new V),Object.defineProperty(T.prototype,"db",{get:function(){return i},enumerable:!1,configurable:!0}),T.prototype.table=function(){return l},T})(r)),new Set),p=r.prototype;p;p=y(p))Object.getOwnPropertyNames(p).forEach(function(b){return f.add(b)});function v(b){if(!b)return b;var _,S=Object.create(r.prototype);for(_ in b)if(!f.has(_))try{S[_]=b[_]}catch{}return S}return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=v,this.hook("reading",v),r},ft.prototype.defineClass=function(){return this.mapToClass(function(r){h(this,r)})},ft.prototype.add=function(r,i){var l=this,f=this.schema.primKey,p=f.auto,v=f.keyPath,b=r;return v&&p&&(b=Zs(v)(r)),this._trans("readwrite",function(_){return l.core.mutate({trans:_,type:"add",keys:i!=null?[i]:null,values:[b]})}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):_.lastResult}).then(function(_){if(v)try{Z(r,v,_)}catch{}return _})},ft.prototype.upsert=function(r,i){var l=this,f=this.schema.primKey.keyPath;return this._trans("readwrite",function(p){return l.core.get({trans:p,key:r}).then(function(v){var b=v??{};return vl(b,i),f&&Z(b,f,r),l.core.mutate({trans:p,type:"put",values:[b],keys:[r],upsert:!0,updates:{keys:[r],changeSpecs:[i]}}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):!!v})})})},ft.prototype.update=function(r,i){return typeof r!="object"||d(r)?this.where(":id").equals(r).modify(i):(r=ce(r,this.schema.primKey.keyPath))===void 0?Ct(new je.InvalidArgument("Given object does not contain its primary key")):this.where(":id").equals(r).modify(i)},ft.prototype.put=function(r,i){var l=this,f=this.schema.primKey,p=f.auto,v=f.keyPath,b=r;return v&&p&&(b=Zs(v)(r)),this._trans("readwrite",function(_){return l.core.mutate({trans:_,type:"put",values:[b],keys:i!=null?[i]:null})}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):_.lastResult}).then(function(_){if(v)try{Z(r,v,_)}catch{}return _})},ft.prototype.delete=function(r){var i=this;return this._trans("readwrite",function(l){return i.core.mutate({trans:l,type:"delete",keys:[r]}).then(function(f){return eo(i,[r],f)}).then(function(f){return f.numFailures?Se.reject(f.failures[0]):void 0})})},ft.prototype.clear=function(){var r=this;return this._trans("readwrite",function(i){return r.core.mutate({trans:i,type:"deleteRange",range:cl}).then(function(l){return eo(r,null,l)})}).then(function(i){return i.numFailures?Se.reject(i.failures[0]):void 0})},ft.prototype.bulkGet=function(r){var i=this;return this._trans("readonly",function(l){return i.core.getMany({keys:r,trans:l}).then(function(f){return f.map(function(p){return i.hook.reading.fire(p)})})})},ft.prototype.bulkAdd=function(r,i,l){var f=this,p=Array.isArray(i)?i:void 0,v=(l=l||(p?void 0:i))?l.allKeys:void 0;return this._trans("readwrite",function(b){var _=f.schema.primKey,V=_.auto,_=_.keyPath;if(_&&p)throw new je.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(p&&p.length!==r.length)throw new je.InvalidArgument("Arguments objects and keys must have the same length");var S=r.length,V=_&&V?r.map(Zs(_)):r;return f.core.mutate({trans:b,type:"add",keys:p,values:V,wantResults:v}).then(function(T){var C=T.numFailures,$=T.failures;if(C===0)return v?T.results:T.lastResult;throw new ht("".concat(f.name,".bulkAdd(): ").concat(C," of ").concat(S," operations failed"),$)})})},ft.prototype.bulkPut=function(r,i,l){var f=this,p=Array.isArray(i)?i:void 0,v=(l=l||(p?void 0:i))?l.allKeys:void 0;return this._trans("readwrite",function(b){var _=f.schema.primKey,V=_.auto,_=_.keyPath;if(_&&p)throw new je.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(p&&p.length!==r.length)throw new je.InvalidArgument("Arguments objects and keys must have the same length");var S=r.length,V=_&&V?r.map(Zs(_)):r;return f.core.mutate({trans:b,type:"put",keys:p,values:V,wantResults:v}).then(function(T){var C=T.numFailures,$=T.failures;if(C===0)return v?T.results:T.lastResult;throw new ht("".concat(f.name,".bulkPut(): ").concat(C," of ").concat(S," operations failed"),$)})})},ft.prototype.bulkUpdate=function(r){var i=this,l=this.core,f=r.map(function(b){return b.key}),p=r.map(function(b){return b.changes}),v=[];return this._trans("readwrite",function(b){return l.getMany({trans:b,keys:f,cache:"clone"}).then(function(_){var S=[],V=[],T=(r.forEach(function(C,$){var R=C.key,I=C.changes,M=_[$];if(M){for(var j=0,z=Object.keys(I);jB+te&&j(B+V)})})}var z=Fr(l)&&l.limit===1/0&&(typeof r!="function"||I)&&{index:l.index,range:l.range};return j(0).then(function(){if(0{for(var Be=Math.min(me.length,Te.length),ze=-1,Ze=0;Ze=$})).length===0?Se.resolve():(j.forEach(function(B){M.push(function(){var te,pe,ve,_e=z,me=B._cfg.dbschema,Pe=(uo(C,_e,I),uo(C,me,I),z=C._dbSchema=me,Ti(_e,me)),be=(Pe.add.forEach(function(Te){Oi(I,Te[0],Te[1].primKey,Te[1].indexes)}),Pe.change.forEach(function(Te){if(Te.recreate)throw new je.Upgrade("Not yet support for changing primary key");var he=I.objectStore(Te.name);Te.add.forEach(function(Ve){return ao(he,Ve)}),Te.change.forEach(function(Ve){he.deleteIndex(Ve.name),ao(he,Ve)}),Te.del.forEach(function(Ve){return he.deleteIndex(Ve)})}),B._cfg.contentUpgrade);if(be&&B._cfg.version>$)return oo(C,I),R._memoizedTables={},te=A(me),Pe.del.forEach(function(Te){te[Te]=_e[Te]}),Pi(C,[C.Transaction.prototype]),io(C,[C.Transaction.prototype],c(te),te),R.schema=te,(pe=de(be))&&Kr(),me=Se.follow(function(){var Te;(ve=be(R))&&pe&&(Te=zn.bind(null,null),ve.then(Te,Te))}),ve&&typeof ve.then=="function"?Se.resolve(ve):me.then(function(){return ve})}),M.push(function(te){var pe,ve,_e=B._cfg.dbschema;pe=_e,ve=te,[].slice.call(ve.db.objectStoreNames).forEach(function(me){return pe[me]==null&&ve.db.deleteObjectStore(me)}),Pi(C,[C.Transaction.prototype]),io(C,[C.Transaction.prototype],C._storeNames,C._dbSchema),R.schema=C._dbSchema}),M.push(function(te){C.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(C.idbdb.version/10)===B._cfg.version?(C.idbdb.deleteObjectStore("$meta"),delete C._dbSchema.$meta,C._storeNames=C._storeNames.filter(function(pe){return pe!=="$meta"})):te.objectStore("$meta").put(B._cfg.version,"version"))})}),function B(){return M.length?Se.resolve(M.shift()(R.idbtrans)).then(B):Se.resolve()}().then(function(){Cl(z,I)}))}).catch(b);var S,V;c(p).forEach(function(T){Oi(l,T,p[T].primKey,p[T].indexes)}),oo(r,l),Se.follow(function(){return r.on.populate.fire(v)}).catch(b)})}function Ff(r,i){Cl(r._dbSchema,i),i.db.version%10!=0||i.objectStoreNames.contains("$meta")||i.db.createObjectStore("$meta").add(Math.ceil(i.db.version/10-1),"version");var l=lo(0,r.idbdb,i);uo(r,r._dbSchema,i);for(var f=0,p=Ti(l,r._dbSchema).change;f{if(b.change.length||b.recreate)return console.warn("Unable to patch indexes of table ".concat(b.name," because it has changes on the type of index or primary key.")),{value:void 0};var _=i.objectStore(b.name);b.add.forEach(function(S){U&&console.debug("Dexie upgrade patch: Creating missing index ".concat(b.name,".").concat(S.src)),ao(_,S)})})(p[f]);if(typeof v=="object")return v.value}}function Ti(r,i){var l,f={del:[],add:[],change:[]};for(l in r)i[l]||f.del.push(l);for(l in i){var p=r[l],v=i[l];if(p){var b={name:l,def:v,recreate:!1,del:[],add:[],change:[]};if(""+(p.primKey.keyPath||"")!=""+(v.primKey.keyPath||"")||p.primKey.auto!==v.primKey.auto)b.recreate=!0,f.change.push(b);else{var _=p.idxByName,S=v.idxByName,V=void 0;for(V in _)S[V]||b.del.push(V);for(V in S){var T=_[V],C=S[V];T?T.src!==C.src&&b.change.push(C):b.add.push(C)}(0{var r,i,l;return typeof FinalizationRegistry<"u"&&typeof WeakRef<"u"?(r=new Set,i=new FinalizationRegistry(function(f){r.delete(f)}),{toArray:function(){return Array.from(r).map(function(f){return f.deref()}).filter(function(f){return f!==void 0})},add:function(f){var p=new WeakRef(f._novip);r.add(p),i.register(f._novip,p,p),r.size>f._options.maxConnections&&(p=r.values().next().value,r.delete(p),i.unregister(p))},remove:function(f){if(f)for(var p=r.values(),v=p.next();!v.done;){var b=v.value;if(b.deref()===f._novip)return r.delete(b),void i.unregister(b);v=p.next()}}}):(l=[],{toArray:function(){return l},add:function(f){l.push(f._novip)},remove:function(f){f&&(f=l.indexOf(f._novip))!==-1&&l.splice(f,1)}})})();function Mi(r,i){var l=r._dbNamesDB;return l||(l=r._dbNamesDB=new Mn(Qs,{addons:[],indexedDB:r,IDBKeyRange:i})).version(1).stores({dbnames:"name"}),l.table("dbnames")}function Ii(r){return r&&typeof r.databases=="function"}function ji(r){return Wn(function(){return Ie.letThrough=!0,r()})}function Di(r){return!("from"in r)}var Dt=function(r,i){var l;if(!this)return l=new Dt,r&&"d"in r&&h(l,r),l;h(this,arguments.length?{d:1,from:r,to:1Math.pow(2,62)?0:j.oldVersion,C=z<1,r.idbdb=M.result,v&&Ff(r,T),Kf(r,z/10,T,R))},R),M.onsuccess=mt(function(){T=null;var j,z,B,te,pe,ve,_e=r.idbdb=M.result,me=E(_e.objectStoreNames);if(0"u"?Se.resolve():!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function($){function R(){return indexedDB.databases().finally($)}S=setInterval(R,100),R()}).finally(function(){return clearInterval(S)}):Promise.resolve()).then(_)]).then(function(){return b(),i.onReadyBeingFired=[],Se.resolve(ji(function(){return r.on.ready.fire(r.vip)})).then(function $(){var R;if(0i.limit?f.length=i.limit:r.length===i.limit&&f.length{if(l===void 0)return f!==void 0?-1:0;if(f===void 0)return 1;if((l=tt(l,f))===0){if(p&&v)return 0;if(p)return 1;if(v)return-1}return l})(r.lower,i.lower,r.lowerOpen,i.lowerOpen)<=0&&0<=((l,f,p,v)=>{if(l===void 0)return f!==void 0?1:0;if(f===void 0)return-1;if((l=tt(l,f))===0){if(p&&v)return 0;if(p)return-1;if(v)return 1}return l})(r.upper,i.upper,r.upperOpen,i.upperOpen)}function zf(r,i,l,f){r.subscribers.add(l),f.addEventListener("abort",function(){var p,v;r.subscribers.delete(l),r.subscribers.size===0&&(p=r,v=i,setTimeout(function(){p.subscribers.size===0&&ge(v,p)},3e3))})}var Gf={stack:"dbcore",level:0,name:"Cache",create:function(r){var i=r.schema.name;return s(s({},r),{transaction:function(l,f,p){var v,b,_=r.transaction(l,f,p);return f==="readwrite"&&(p=(v=new AbortController).signal,_.addEventListener("abort",(b=function(S){return function(){if(v.abort(),f==="readwrite"){for(var V=new Set,T=0,C=l;T{var z=gr["idb://".concat(R,"/").concat(I)];if(!z)return[];if(!(R=z.queries[M]))return[null,!1,z,null];var B=R[(j.query?j.query.index.name:null)||""];if(!B)return[null,!1,z,null];switch(M){case"query":var te=(pe=j.direction)!=null?pe:"next",pe=B.find(function(ve){var _e;return ve.req.limit===j.limit&&ve.req.values===j.values&&((_e=ve.req.direction)!=null?_e:"next")===te&&Dl(ve.req.query.range,j.query.range)});return pe?[pe,!0,z,B]:[B.find(function(ve){var _e;return("limit"in ve.req?ve.req.limit:1/0)>=j.limit&&((_e=ve.req.direction)!=null?_e:"next")===te&&(!j.values||ve.req.values)&&Wf(ve.req.query.range,j.query.range)}),!1,z,B];case"count":return pe=B.find(function(ve){return Dl(ve.req.query.range,j.query.range)}),[pe,!!pe,z,B]}})(i,l,"query",v),$=C[0],V=C[2],T=C[3],$&&C[1]?$.obsSet=v.obsSet:(C=f.query(v).then(function(R){var I=R.result;if($&&($.res=I),b){for(var M=0,j=I.length;M{var pe=Rr();try{v&&Kr();var ve=Wn(r,te);return ve=v?ve.finally(zn):ve}finally{pe&&Lr()}})(z={subscr:j,signal:b.signal,requery:$,querier:r,trans:null}),C||(Jn.storagemutated.subscribe(I),C=!0),Promise.resolve(B).then(function(te){l=!0,i=te,_||z.signal.aborted||(R()||(V=j,R())?$():(S={},wi(function(){return!_&&p.next&&p.next(te)})))},function(te){l=!1,["DatabaseClosedError","AbortError"].includes(te==null?void 0:te.name)||_||wi(function(){_||p.error&&p.error(te)})}))};return setTimeout($,0),T});return f.hasValue=function(){return l},f.getValue=function(){return i},f}var br=Mn;function Hi(r){var i=Xn;try{Xn=!0,Jn.storagemutated.fire(r),Fi(r,!0)}finally{Xn=i}}D(br,s(s({},X),{delete:function(r){return new br(r,{addons:[]}).delete()},exists:function(r){return new br(r,{addons:[]}).open().then(function(i){return i.close(),!0}).catch("NoSuchDatabaseError",function(){return!1})},getDatabaseNames:function(r){try{return i=br.dependencies,l=i.indexedDB,i=i.IDBKeyRange,(Ii(l)?Promise.resolve(l.databases()).then(function(f){return f.map(function(p){return p.name}).filter(function(p){return p!==Qs})}):Mi(l,i).toCollection().primaryKeys()).then(r)}catch{return Ct(new je.MissingAPI)}var i,l},defineClass:function(){return function(r){h(this,r)}},ignoreTransaction:function(r){return Ie.trans?vr(Ie.transless||$t,r):r()},vip:ji,async:function(r){return function(){try{var i=Ni(r.apply(this,arguments));return i&&typeof i.then=="function"?i:Se.resolve(i)}catch(l){return Ct(l)}}},spawn:function(r,i,l){try{var f=Ni(r.apply(l,i||[]));return f&&typeof f.then=="function"?f:Se.resolve(f)}catch(p){return Ct(p)}},currentTransaction:{get:function(){return Ie.trans||null}},waitFor:function(r,i){return r=Se.resolve(typeof r=="function"?br.ignoreTransaction(r):r).timeout(i||6e4),Ie.trans?Ie.trans.waitFor(r):r},Promise:Se,debug:{get:function(){return U},set:function(r){G(r)}},derive:W,extend:h,props:D,override:L,Events:os,on:Jn,liveQuery:Rl,extendObservabilitySet:fo,getByKeyPath:ce,setByKeyPath:Z,delByKeyPath:function(r,i){typeof i=="string"?Z(r,i,void 0):"length"in i&&[].map.call(i,function(l){Z(r,l,void 0)})},shallowClone:A,deepClone:Ce,getObjectDiff:Vi,cmp:tt,asap:le,minKey:-1/0,addons:[],connections:{get:cs.toArray},errnames:Yt,dependencies:mo,cache:gr,semVer:"4.4.6",version:"4.4.6".split(".").map(function(r){return parseInt(r)}).reduce(function(r,i,l){return r+i/Math.pow(10,2*l)})})),br.maxKey=ls(br.dependencies.IDBKeyRange),typeof dispatchEvent<"u"&&typeof addEventListener<"u"&&(Jn(so,function(r){Xn||(r=new CustomEvent(Si,{detail:r}),Xn=!0,dispatchEvent(r),Xn=!1)}),addEventListener(Si,function(r){r=r.detail,Xn||Hi(r)}));var Ur,Xn=!1,Ll=function(){};return typeof BroadcastChannel<"u"&&((Ll=function(){(Ur=new BroadcastChannel(Si)).onmessage=function(r){return r.data&&Hi(r.data)}})(),typeof Ur.unref=="function"&&Ur.unref(),Jn(so,function(r){Xn||Ur.postMessage(r)})),typeof addEventListener<"u"&&(addEventListener("pagehide",function(r){if(!Mn.disableBfCache&&r.persisted){U&&console.debug("Dexie: handling persisted pagehide"),Ur!=null&&Ur.close();for(var i=0,l=cs.toArray();in.key===e);return t?t.label:"其他"}const Wh={class:"dialog",role:"dialog","aria-label":"编辑工作记录"},zh={class:"dialog-head"},Gh={key:0,class:"muted dialog-sub"},Yh={class:"dialog-body"},Jh={class:"form-grid"},Xh={class:"field span2"},Qh={key:0,class:"form-error"},Zh={class:"field"},ev=["value"],tv={class:"field"},nv=["value"],rv={class:"field"},sv={class:"field"},ov={class:"field span2"},iv={class:"field"},av={class:"field"},lv={class:"dialog-btns"},uv=Vt({__name:"EditLogDialog",props:{open:{type:Boolean},item:{},projects:{},date:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N(""),a=N(null),c=N("dev"),d=N(null),h=N(""),y=N(""),m=N(0),k=N(0),D=N(""),O=N(null),K=it(()=>{var L;const ee=n.projects.filter(Q=>Q.archived!==1),E=(L=n.item)==null?void 0:L.project_id;if(E&&!ee.some(Q=>Q.id===E)){const Q=n.projects.find(ce=>ce.id===E),le=ee.slice();return Q&&le.unshift({...Q,name:Q.name+"(已归档)"}),le}return ee});function W(ee){n.open&&ee.key==="Escape"&&s("cancel")}gt(()=>n.open,async ee=>{var E;if(ee){const L=n.item;o.value=(L==null?void 0:L.content)??"",a.value=(L==null?void 0:L.project_id)??null,c.value=(L==null?void 0:L.category)??"dev",d.value=(L==null?void 0:L.minutes)??null,h.value=(L==null?void 0:L.takeaway)??"",y.value=(L==null?void 0:L.remark)??"",m.value=(L==null?void 0:L.is_milestone)??0,k.value=(L==null?void 0:L.needs_followup)??0,D.value="",window.addEventListener("keydown",W),await ts(),(E=O.value)==null||E.focus()}else window.removeEventListener("keydown",W)}),dr(()=>window.removeEventListener("keydown",W)),gt(o,()=>{D.value&&(D.value="")});function fe(){const ee=o.value.trim();if(!ee){D.value="请填写工作内容";return}if(!n.item||!n.item.id){s("cancel");return}s("save",{id:n.item.id,content:ee,project_id:a.value,category:c.value,minutes:d.value&&d.value>0?d.value:null,takeaway:h.value.trim()||null,remark:y.value.trim()||null,is_milestone:m.value?1:0,needs_followup:k.value?1:0})}return(ee,E)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:E[10]||(E[10]=Mr(L=>s("cancel"),["self"]))},[u("div",Wh,[u("div",zh,[u("div",null,[E[11]||(E[11]=u("div",{class:"dialog-title"},"编辑工作记录",-1)),e.date?(F(),q("div",Gh,re(e.date),1)):Ee("",!0)]),u("button",{class:"icon-btn",title:"关闭",onClick:E[0]||(E[0]=L=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",Yh,[u("div",Jh,[u("div",Xh,[E[12]||(E[12]=u("label",null,"工作内容(必填)",-1)),$e(u("input",{ref_key:"contentInput",ref:O,class:et(["input",{invalid:D.value}]),"onUpdate:modelValue":E[1]||(E[1]=L=>o.value=L),onKeydown:jt(fe,["enter"])},null,34),[[De,o.value]]),D.value?(F(),q("div",Qh,re(D.value),1)):Ee("",!0)]),u("div",Zh,[E[14]||(E[14]=u("label",null,"所属项目",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[2]||(E[2]=L=>a.value=L)},[E[13]||(E[13]=u("option",{value:null},"无项目",-1)),(F(!0),q(Re,null,ut(K.value,L=>(F(),q("option",{key:L.id,value:L.id},re(L.name),9,ev))),128))],512),[[Fn,a.value]])]),u("div",tv,[E[15]||(E[15]=u("label",null,"工作分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[3]||(E[3]=L=>c.value=L)},[(F(!0),q(Re,null,ut(Qt(Us),L=>(F(),q("option",{key:L.key,value:L.key},re(L.label),9,nv))),128))],512),[[Fn,c.value]])]),u("div",rv,[E[16]||(E[16]=u("label",null,"耗时(分钟)",-1)),$e(u("input",{class:"input",type:"number",min:"0","onUpdate:modelValue":E[4]||(E[4]=L=>d.value=L),placeholder:"选填"},null,512),[[De,d.value,void 0,{number:!0}]])]),u("div",sv,[E[17]||(E[17]=u("label",null,"主要收获",-1)),$e(u("input",{class:"input","onUpdate:modelValue":E[5]||(E[5]=L=>h.value=L),placeholder:"一句话:学到了什么"},null,512),[[De,h.value]])]),u("div",ov,[E[18]||(E[18]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":E[6]||(E[6]=L=>y.value=L),placeholder:"背景、链接、未决事项(选填)"},null,512),[[De,y.value]])]),u("div",iv,[E[19]||(E[19]=u("label",null,"成果标记",-1)),u("button",{class:et(["toggle-btn",{on:m.value===1}]),onClick:E[7]||(E[7]=L=>m.value=m.value===1?0:1)},re(m.value===1?"已标记为成果":"未标记"),3)]),u("div",av,[E[20]||(E[20]=u("label",null,"待跟进",-1)),u("button",{class:et(["toggle-btn",{onwarn:k.value===1}]),onClick:E[8]||(E[8]=L=>k.value=k.value===1?0:1)},re(k.value===1?"需要跟进":"无需跟进"),3)])])]),u("div",lv,[u("button",{class:"btn btn-sm",onClick:E[9]||(E[9]=L=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:fe},"保存修改")])])])):Ee("",!0)]),_:1})]))}}),cv=Gt(uv,[["__scopeId","data-v-63bc0b48"]]);function Ss(e){return e<10?"0"+e:String(e)}function Nn(e){return e.getFullYear()+"-"+Ss(e.getMonth()+1)+"-"+Ss(e.getDate())}function xt(){return Nn(new Date)}function wt(){const e=new Date;return Nn(e)+"T"+Ss(e.getHours())+":"+Ss(e.getMinutes())+":"+Ss(e.getSeconds())}function Vn(e){if(!e)return"--:--";const t=e.indexOf("T");return t>=0?e.slice(t+1,t+6):e.slice(0,5)}function rs(e){const t=e.split("-").map(Number);return new Date(t[0],t[1]-1,t[2])}function Kn(e,t){const n=rs(e);return n.setDate(n.getDate()+t),Nn(n)}function Bo(e,t){const n=rs(e),s=n.getDate();n.setDate(1),n.setMonth(n.getMonth()+t);const o=new Date(n.getFullYear(),n.getMonth()+1,0).getDate();return n.setDate(Math.min(s,o)),Nn(n)}function Es(e){const t=rs(e),n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),Nn(t)}function fv(e){const t=rs(e).getDay();return t===0||t===6}function dv(e,t){return Math.round((new Date(t).getTime()-new Date(e).getTime())/6e4)}function rf(e){const t=rs(e),n=["周日","周一","周二","周三","周四","周五","周六"];return t.getFullYear()+" 年 "+(t.getMonth()+1)+" 月 "+t.getDate()+" 日 "+n[t.getDay()]}async function yt(e,t){const n=await ne.setting.get(e);return n?n.value:t}async function kt(e,t){await ne.setting.put({key:e,value:t})}async function jr(){const e=await Promise.all([yt("work_start","09:00"),yt("work_end","18:00"),yt("grace_minutes","10"),yt("lunch_minutes","60"),yt("remind_weekly","friday")]);return{work_start:e[0],work_end:e[1],grace_minutes:Number(e[2])||0,lunch_minutes:Number(e[3])||0,remind_weekly:e[4]}}async function pv(){const e=await yt("last_project",""),t=await yt("last_category","dev");return{project_id:e?Number(e):null,category:t||"dev"}}async function hv(){return yt("last_location","")}async function vv(e,t){const n=t.trim();await kt("last_location",n),n&&await Uo(n);const s=await mn(e);s&&s.id?await ne.attendance.update(s.id,{location:n||null}):n&&await ne.attendance.add({date:e,clock_in_at:null,clock_out_at:null,kind:"normal",note:null,location:n,created_at:wt()})}async function Xa(){const e=await yt("location_presets","");if(!e)return $u.slice();try{const t=JSON.parse(e);if(Array.isArray(t))return t.filter(n=>typeof n=="string"&&n.trim()).map(n=>n.trim())}catch{}return $u.slice()}async function sf(e){const t=Array.from(new Set(e.map(n=>n.trim()).filter(Boolean)));await kt("location_presets",JSON.stringify(t))}async function Uo(e){const t=e.trim();if(!t)return;const n=await Xa();n.includes(t)||await sf([...n,t])}async function Ks(e=!1){const t=await ne.project.orderBy("name").toArray();return e?t:t.filter(n=>n.archived!==1)}async function mv(e){await ne.project.add({name:e.trim(),archived:0,created_at:wt()})}async function yv(e,t){await ne.project.update(e,{name:t.trim()})}async function gv(e,t){await ne.project.update(e,{archived:t?1:0})}async function mn(e){return ne.attendance.where("date").equals(e).first()}async function of(e,t){const n=((t===void 0?await yt("last_location",""):t)||"").trim(),s=await mn(e);if(s&&s.id){if(!s.clock_in_at){const o={clock_in_at:wt()};n&&(o.location=n),await ne.attendance.update(s.id,o)}n&&(await kt("last_location",n),await Uo(n));return}await ne.attendance.add({date:e,clock_in_at:wt(),clock_out_at:null,kind:"normal",note:null,location:n||null,created_at:wt()}),n&&(await kt("last_location",n),await Uo(n))}async function bv(e){const t=await mn(e);t&&t.id&&t.clock_in_at&&!t.clock_out_at&&await ne.attendance.update(t.id,{clock_out_at:wt()})}async function wv(){const e=new Date,t=Nn(e);if(e.getHours()<4){const s=await mn(Kn(t,-1));if(s&&s.id&&s.clock_in_at&&!s.clock_out_at)return await ne.attendance.update(s.id,{clock_out_at:wt()}),s.date}const n=await mn(t);if(n&&n.id&&n.clock_in_at&&!n.clock_out_at)return await ne.attendance.update(n.id,{clock_out_at:wt()}),n.date;throw new Error("没有进行中的打卡")}async function _v(e,t,n,s,o){(o||"").trim()&&await Uo(o);const a=await mn(e),c={date:e,clock_in_at:t,clock_out_at:n,kind:"makeup",note:s||null,location:(o||"").trim()||null,created_at:wt()};a&&a.id?await ne.attendance.update(a.id,c):await ne.attendance.add(c)}async function kv(e,t,n){const s=(n||"").trim();if(!s)return;const o=await mn(e);o&&o.id&&await ne.attendance.update(o.id,{[t]:e+"T"+s+":00"})}async function ci(e,t){return ne.attendance.where("date").between(e,t,!0,!0).toArray()}async function xv(e,t){const n=await mn(e);if(t){const s={date:e,kind:"leave",clock_in_at:null,clock_out_at:null,created_at:wt()};n&&n.id?await ne.attendance.update(n.id,s):await ne.attendance.add({...s,note:null,location:null})}else n&&n.id&&await ne.attendance.update(n.id,{kind:"normal"})}async function Cv(e){const t=await ne.work_log.where("date").equals(e).first();return t||{id:await ne.work_log.add({date:e,created_at:wt()}),date:e,created_at:wt()}}async function Sv(e){return ne.work_log.where("date").equals(e).first()}async function Ev(e){const t=await Sv(e);return!t||!t.id?[]:(await ne.log_item.where("work_log_id").equals(t.id).toArray()).sort((s,o)=>o.id-s.id)}async function $v(e,t){const n=await Cv(e);await ne.log_item.add({work_log_id:n.id,content:t.content,project_id:t.project_id,category:t.category,minutes:t.minutes,is_milestone:0,needs_followup:0,takeaway:t.takeaway,remark:t.remark,sort_order:0,created_at:wt()}),await kt("last_project",t.project_id?String(t.project_id):""),await kt("last_category",t.category)}async function ia(e,t){await ne.log_item.update(e,t)}async function Av(e){await ne.log_item.delete(e)}async function fi(e,t){const n=await ne.work_log.where("date").between(e,t,!0,!0).toArray();if(!n.length)return[];const s=new Map(n.map(a=>[a.id,a.date]));return(await ne.log_item.where("work_log_id").anyOf(n.map(a=>a.id)).toArray()).map(a=>({...a,date:s.get(a.work_log_id)||""})).sort((a,c)=>a.date===c.date?a.id-c.id:a.datet.updated_at[c.id,c.date]));return(await ne.log_item.toArray()).filter(c=>((c.content||"")+" "+(c.takeaway||"")+" "+(c.remark||"")).toLowerCase().includes(n)).sort((c,d)=>d.id-c.id).slice(0,t).map(c=>({...c,date:o.get(c.work_log_id)||""}))}async function Rv(e,t=4){const n=e.trim().toLowerCase();return n?(await ne.memo.toArray()).filter(o=>((o.title||"")+" "+(o.content||"")).toLowerCase().includes(n)).sort((o,a)=>o.updated_at{await Promise.all([ne.project.clear(),ne.work_log.clear(),ne.log_item.clear(),ne.attendance.clear(),ne.weekly_note.clear(),ne.setting.clear(),ne.memo.clear(),ne.credential.clear(),ne.transaction.clear()]),n.project&&n.project.length&&await ne.project.bulkAdd(n.project),n.work_log&&n.work_log.length&&await ne.work_log.bulkAdd(n.work_log),n.log_item&&n.log_item.length&&await ne.log_item.bulkAdd(n.log_item),n.attendance&&n.attendance.length&&await ne.attendance.bulkAdd(n.attendance),n.weekly_note&&n.weekly_note.length&&await ne.weekly_note.bulkAdd(n.weekly_note),n.setting&&n.setting.length&&await ne.setting.bulkAdd(n.setting),n.memo&&n.memo.length&&await ne.memo.bulkAdd(n.memo),n.credential&&n.credential.length&&await ne.credential.bulkAdd(n.credential),n.transaction&&n.transaction.length&&await ne.transaction.bulkAdd(n.transaction)})}function Co(e){const t=e.split(":");return Number(t[0])*60+Number(t[1])}function qs(e,t,n,s){if(e&&e.kind==="leave")return{status:"leave",label:"请假",makeup:!1,workedMinutes:null};if(fv(t))return{status:"rest",label:"休息日",makeup:!1,workedMinutes:null};if(!e||!e.clock_in_at)return s?{status:"none",label:"未打卡",makeup:!1,workedMinutes:null}:{status:"absent",label:"缺勤",makeup:!!(e&&e.kind==="makeup"),workedMinutes:null};const o=e.kind==="makeup";if(!e.clock_out_at)return{status:"incomplete",label:s?"进行中":"未完成",makeup:o,workedMinutes:null};const a=Co(Vn(e.clock_in_at)),c=Co(Vn(e.clock_out_at)),d=Co(n.work_start),h=Co(n.work_end);let y="normal";!o&&a>d+n.grace_minutes?y="late":!o&&c{Po.value=Po.value.filter(n=>n.id!==t)},2e3)}function Hv(){return Po}const Sa=N(null),Ea=N(null),Hs=N(0);function Sr(){Hs.value++}const Wv={class:"day-panel"},zv={class:"dp-head"},Gv={class:"dp-date"},Yv={class:"card sec"},Jv={class:"att-grid"},Xv={class:"att-cell"},Qv={key:0,class:"edit-row"},Zv={key:1,class:"att-val"},em={class:"att-cell"},tm={key:0,class:"edit-row"},nm={key:1,class:"att-val"},rm={class:"att-cell"},sm=["list"],om=["id"],im=["value"],am={class:"att-cell"},lm={class:"att-val status-val"},um={key:0,class:"tag"},cm={key:1,class:"muted"},fm={key:0,class:"att-note muted"},dm={class:"att-actions"},pm=["disabled"],hm=["disabled"],vm=["disabled"],mm=["disabled"],ym={key:0,class:"card sec makeup"},gm={class:"form-grid"},bm={class:"field"},wm={class:"field"},_m={class:"field span2"},km=["list"],xm={class:"field span2"},Cm={key:0,class:"form-error"},Sm={class:"form-footer"},Em={class:"card sec"},$m={class:"form-grid"},Am={class:"field span2"},Pm={key:0,class:"form-error"},Tm={class:"field"},Om=["value"],Mm={class:"field"},Im=["value"],jm={class:"field"},Dm={class:"field"},Rm={class:"field span2"},Lm={class:"form-footer"},Km=["disabled"],Fm=["disabled"],Nm={class:"list-sec"},Vm={class:"sec-title"},Bm={key:0,class:"empty muted"},Um={class:"item-main"},qm={class:"tag"},Hm=["onClick"],Wm={key:0,class:"muted item-meta"},zm={key:1,class:"muted num item-meta"},Gm=["onClick"],Ym=["onClick"],Jm=["onClick"],Xm=["onClick"],Qm={key:0,class:"item-sub"},Zm={key:0,class:"muted2"},ey={key:1,class:"muted"},ty={key:1,class:"dp-foot muted num"},ny=Vt({__name:"DayPanel",props:{date:{}},setup(e){const t=e,n=N(!0),s=N(null),o=N(void 0),a=N([]),c=N([]),d=N(""),h=N([]),y=it(()=>"loc-list-"+t.date),m=it(()=>t.date===xt());async function k(){n.value=!0,s.value=await jr(),o.value=await mn(t.date),a.value=await Ev(t.date),c.value=await Ks(!0),h.value=await Xa(),d.value=o.value&&o.value.location||await hv(),n.value=!1}fn(k),gt(()=>t.date,k),gt(Hs,()=>{k()});const D=it(()=>c.value.filter(H=>H.archived!==1));function O(H){if(!H)return"";const U=c.value.find(G=>G.id===H);return U?U.name:"已删除项目"}const K=it(()=>s.value?qs(o.value,t.date,s.value,m.value):null),W=it(()=>a.value.reduce((H,U)=>H+(U.minutes||0),0)),fe=N(!1);async function ee(){fe.value||(fe.value=!0,await of(t.date,d.value),await k(),Sr(),Ge("上班打卡成功"),fe.value=!1)}async function E(){fe.value||(fe.value=!0,await bv(t.date),await k(),Sr(),Ge("下班打卡成功"),fe.value=!1)}async function L(){await vv(t.date,d.value),Sr(),Ge("地点已更新")}const Q=N(!1),le=it(()=>{var H;return((H=o.value)==null?void 0:H.kind)==="leave"});function ce(){if(o.value&&o.value.clock_in_at){Q.value=!0;return}Z(!0)}async function Z(H){Q.value=!1,await xv(t.date,H),await k(),Sr(),Ge(H?"已标记为休假":"已取消休假")}const A=N(null),x=N(""),ie=N(null);gt(A,async H=>{var U;H&&(await ts(),(U=ie.value)==null||U.focus())});function xe(H){var G,Ae;const U=H==="in"?(G=o.value)==null?void 0:G.clock_in_at:(Ae=o.value)==null?void 0:Ae.clock_out_at;A.value=H,x.value=U?Vn(U):H==="in"?"09:00":"18:00"}function Y(){A.value=null}async function Ce(){const H=A.value;H&&(A.value=null,x.value&&(await kv(t.date,H==="in"?"clock_in_at":"clock_out_at",x.value),await k(),Sr(),Ge("打卡时间已修改")))}const Ne=N(!1),Xe=N("09:00"),qe=N("18:00"),Ue=N(""),ge=N(""),Me=N("");function Ke(){ge.value=d.value,Me.value="",Ne.value=!Ne.value}async function de(){if(!Xe.value||!qe.value){Me.value="请填写上班与下班时间";return}await _v(t.date,t.date+"T"+Xe.value+":00",t.date+"T"+qe.value+":00",Ue.value.trim(),ge.value),Ne.value=!1,Ue.value="",Me.value="",await k(),Sr(),Ge("补卡已保存")}const X=N(""),J=N("");gt(X,()=>{J.value&&(J.value="")});const ke=N(null),st=N("dev"),pt=N(null),ht=N(""),Yt=N(""),Jt=N(!1),je=it(()=>!!(X.value.trim()||pt.value||ht.value.trim()||Yt.value.trim()));fn(async()=>{const H=await pv();ke.value=H.project_id,st.value=H.category});function w(){X.value="",pt.value=null,ht.value="",Yt.value="",J.value=""}async function g(){const H=X.value.trim();if(!H){J.value="请填写工作内容";return}Jt.value||(Jt.value=!0,await $v(t.date,{content:H,project_id:ke.value,category:st.value,minutes:pt.value&&pt.value>0?pt.value:null,takeaway:ht.value.trim()||null,remark:Yt.value.trim()||null}),w(),await k(),Ge("记录已添加"),Jt.value=!1)}const P=N(null);function ae(H){P.value=H}async function se(H){const U=H.id,G={content:H.content,project_id:H.project_id,category:H.category,minutes:H.minutes,takeaway:H.takeaway,remark:H.remark,is_milestone:H.is_milestone,needs_followup:H.needs_followup};await ia(U,G),P.value=null,await k(),Ge("修改已保存")}async function ue(H){await ia(H.id,{is_milestone:H.is_milestone?0:1}),await k()}async function ye(H){await ia(H.id,{needs_followup:H.needs_followup?0:1}),await k()}const oe=N(null);async function we(){oe.value&&oe.value.id&&await Av(oe.value.id),oe.value=null,await k(),Ge("记录已删除")}return(H,U)=>(F(),q("div",Wv,[u("div",zv,[u("div",Gv,re(Qt(rf)(e.date)),1)]),u("div",Yv,[U[25]||(U[25]=u("div",{class:"sec-title"},"出勤信息",-1)),u("div",Jv,[u("div",Xv,[U[21]||(U[21]=u("label",null,"上班时间",-1)),A.value==="in"?(F(),q("div",Qv,[$e(u("input",{ref_key:"timeInput",ref:ie,type:"time",class:"input time-input","onUpdate:modelValue":U[0]||(U[0]=G=>x.value=G),onKeydown:[jt(Ce,["enter"]),jt(Y,["esc"])]},null,544),[[De,x.value]]),u("button",{class:"btn btn-primary btn-sm",onClick:Ce},"确认"),u("button",{class:"btn btn-sm",onClick:Y},"取消")])):(F(),q("div",Zv,[u("span",{class:et(["num",{"val-empty":!(o.value&&o.value.clock_in_at)}])},re(o.value&&o.value.clock_in_at?Qt(Vn)(o.value.clock_in_at):"未打卡"),3),o.value&&o.value.id?(F(),q("button",{key:0,class:"icon-btn",title:"修改上班时间",onClick:U[1]||(U[1]=G=>xe("in"))},[Oe(lt,{name:"edit",size:13})])):Ee("",!0)]))]),u("div",em,[U[22]||(U[22]=u("label",null,"下班时间",-1)),A.value==="out"?(F(),q("div",tm,[$e(u("input",{ref_key:"timeInput",ref:ie,type:"time",class:"input time-input","onUpdate:modelValue":U[2]||(U[2]=G=>x.value=G),onKeydown:[jt(Ce,["enter"]),jt(Y,["esc"])]},null,544),[[De,x.value]]),u("button",{class:"btn btn-primary btn-sm",onClick:Ce},"确认"),u("button",{class:"btn btn-sm",onClick:Y},"取消")])):(F(),q("div",nm,[u("span",{class:et(["num",{"val-empty":!(o.value&&o.value.clock_out_at)}])},re(o.value&&o.value.clock_out_at?Qt(Vn)(o.value.clock_out_at):"未打卡"),3),o.value&&o.value.id?(F(),q("button",{key:0,class:"icon-btn",title:"修改下班时间",onClick:U[3]||(U[3]=G=>xe("out"))},[Oe(lt,{name:"edit",size:13})])):Ee("",!0)]))]),u("div",rm,[U[23]||(U[23]=u("label",null,"上班地点",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[4]||(U[4]=G=>d.value=G),list:y.value,placeholder:"可直接输入",title:"上班地点,可自由输入",onChange:L},null,40,sm),[[De,d.value]]),u("datalist",{id:y.value},[(F(!0),q(Re,null,ut(h.value,G=>(F(),q("option",{key:G,value:G},null,8,im))),128))],8,om)]),u("div",am,[U[24]||(U[24]=u("label",null,"考勤状态",-1)),u("div",lm,[K.value?(F(),q(Re,{key:0},[u("span",{class:et(["dot",K.value.status])},null,2),u("span",null,re(K.value.label),1),o.value&&o.value.kind==="makeup"?(F(),q("span",um,"补卡")):Ee("",!0)],64)):(F(),q("span",cm,"--"))])])]),o.value&&o.value.note?(F(),q("div",fm,"补卡说明:"+re(o.value.note),1)):Ee("",!0),u("div",dm,[m.value&&(!o.value||!o.value.clock_in_at)?(F(),q("button",{key:0,class:"btn btn-primary btn-sm",disabled:fe.value,onClick:ee},"上班打卡",8,pm)):m.value&&o.value&&o.value.clock_in_at&&!o.value.clock_out_at?(F(),q("button",{key:1,class:"btn btn-primary btn-sm",disabled:fe.value,onClick:E},"下班打卡",8,hm)):Ee("",!0),!m.value&&(!o.value||!o.value.clock_in_at)?(F(),q("button",{key:2,class:"btn btn-sm",onClick:Ke},"补卡")):Ee("",!0),le.value?(F(),q("button",{key:4,class:"btn btn-sm",disabled:fe.value,onClick:U[5]||(U[5]=G=>Z(!1))},"取消休假",8,mm)):(F(),q("button",{key:3,class:"btn btn-sm",disabled:fe.value,onClick:ce},"标记休假",8,vm))])]),Ne.value?(F(),q("div",ym,[U[30]||(U[30]=u("div",{class:"sec-title"},"补卡登记",-1)),u("div",gm,[u("div",bm,[U[26]||(U[26]=u("label",null,"上班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":U[6]||(U[6]=G=>Xe.value=G)},null,512),[[De,Xe.value]])]),u("div",wm,[U[27]||(U[27]=u("label",null,"下班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":U[7]||(U[7]=G=>qe.value=G)},null,512),[[De,qe.value]])]),u("div",_m,[U[28]||(U[28]=u("label",null,"上班地点",-1)),$e(u("input",{class:"input",list:y.value,"onUpdate:modelValue":U[8]||(U[8]=G=>ge.value=G),placeholder:"可直接输入"},null,8,km),[[De,ge.value]])]),u("div",xm,[U[29]||(U[29]=u("label",null,"补卡原因",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[9]||(U[9]=G=>Ue.value=G),placeholder:"如:外出拜访客户忘记打卡"},null,512),[[De,Ue.value]])])]),Me.value?(F(),q("div",Cm,re(Me.value),1)):Ee("",!0),u("div",Sm,[u("button",{class:"btn btn-sm",onClick:U[10]||(U[10]=G=>Ne.value=!1)},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:de},"保存补卡")])])):Ee("",!0),u("div",Em,[U[38]||(U[38]=u("div",{class:"sec-head"},[u("span",{class:"sec-title"},"新增工作记录"),u("span",{class:"muted form-hint"},"内容必填,其余选填")],-1)),u("div",$m,[u("div",Am,[U[31]||(U[31]=u("label",null,"工作内容(必填)",-1)),$e(u("input",{class:et(["input",{invalid:J.value}]),"onUpdate:modelValue":U[11]||(U[11]=G=>X.value=G),placeholder:"做了什么,一句话一条",onKeydown:jt(g,["enter"])},null,34),[[De,X.value]]),J.value?(F(),q("div",Pm,re(J.value),1)):Ee("",!0)]),u("div",Tm,[U[33]||(U[33]=u("label",null,"所属项目",-1)),$e(u("select",{class:"select","onUpdate:modelValue":U[12]||(U[12]=G=>ke.value=G)},[U[32]||(U[32]=u("option",{value:null},"无项目",-1)),(F(!0),q(Re,null,ut(D.value,G=>(F(),q("option",{key:G.id,value:G.id},re(G.name),9,Om))),128))],512),[[Fn,ke.value]])]),u("div",Mm,[U[34]||(U[34]=u("label",null,"工作分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":U[13]||(U[13]=G=>st.value=G)},[(F(!0),q(Re,null,ut(Qt(Us),G=>(F(),q("option",{key:G.key,value:G.key},re(G.label),9,Im))),128))],512),[[Fn,st.value]])]),u("div",jm,[U[35]||(U[35]=u("label",null,"耗时(分钟)",-1)),$e(u("input",{class:"input",type:"number",min:"0","onUpdate:modelValue":U[14]||(U[14]=G=>pt.value=G),placeholder:"选填"},null,512),[[De,pt.value,void 0,{number:!0}]])]),u("div",Dm,[U[36]||(U[36]=u("label",null,"主要收获",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[15]||(U[15]=G=>ht.value=G),placeholder:"一句话:学到了什么"},null,512),[[De,ht.value]])]),u("div",Rm,[U[37]||(U[37]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":U[16]||(U[16]=G=>Yt.value=G),placeholder:"背景、链接、未决事项(选填)"},null,512),[[De,Yt.value]])])]),u("div",Lm,[u("button",{class:"btn btn-sm",disabled:!je.value,onClick:w},"重置",8,Km),u("button",{class:"btn btn-primary btn-sm",disabled:Jt.value,onClick:g},"添加记录",8,Fm)])]),u("div",Nm,[u("div",Vm,"工作记录("+re(a.value.length)+")",1),!a.value.length&&!n.value?(F(),q("div",Bm,"暂无记录")):Ee("",!0),(F(!0),q(Re,null,ut(a.value,G=>(F(),q("div",{key:G.id,class:"item"},[u("div",Um,[u("span",qm,re(Qt(Ja)(G.category)),1),u("span",{class:"item-content",title:"点击编辑",onClick:Ae=>ae(G)},re(G.content),9,Hm),G.project_id?(F(),q("span",Wm,re(O(G.project_id)),1)):Ee("",!0),G.minutes?(F(),q("span",zm,re(G.minutes)+" 分钟",1)):Ee("",!0),U[39]||(U[39]=u("span",{class:"flex1"},null,-1)),u("button",{class:"icon-btn",title:"编辑完整信息",onClick:Ae=>ae(G)},[Oe(lt,{name:"edit",size:14})],8,Gm),u("button",{class:et(["icon-btn",{active:G.is_milestone===1}]),title:"成果标记",onClick:Ae=>ue(G)},[Oe(lt,{name:"star",size:14})],10,Ym),u("button",{class:et(["icon-btn",{"active-warn":G.needs_followup===1}]),title:"待跟进",onClick:Ae=>ye(G)},[Oe(lt,{name:"flag",size:14})],10,Jm),u("button",{class:"icon-btn",title:"删除",onClick:Ae=>oe.value=G},[Oe(lt,{name:"close",size:14})],8,Xm)]),G.takeaway||G.remark?(F(),q("div",Qm,[G.takeaway?(F(),q("div",Zm,"收获:"+re(G.takeaway),1)):Ee("",!0),G.remark?(F(),q("div",ey,"备注:"+re(G.remark),1)):Ee("",!0)])):Ee("",!0)]))),128)),a.value.length?(F(),q("div",ty,[nn(" 共 "+re(a.value.length)+" 条事项 ",1),W.value?(F(),q(Re,{key:0},[nn(" · "+re((W.value/60).toFixed(1))+" 小时",1)],64)):Ee("",!0)])):Ee("",!0)]),Oe(ur,{open:!!oe.value,title:"删除确认",message:oe.value?"将删除工作记录「"+oe.value.content+"」。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:U[17]||(U[17]=G=>oe.value=null),onConfirm:we},null,8,["open","message"]),Oe(ur,{open:Q.value,title:"标记休假确认",message:"该日已有打卡记录,标记休假将清空上下班时间。是否继续?","confirm-text":"标记休假",danger:"",onCancel:U[18]||(U[18]=G=>Q.value=!1),onConfirm:U[19]||(U[19]=G=>Z(!0))},null,8,["open"]),Oe(cv,{open:!!P.value,item:P.value,projects:c.value,date:e.date,onCancel:U[20]||(U[20]=G=>P.value=null),onSave:se},null,8,["open","item","projects","date"])]))}}),af=Gt(ny,[["__scopeId","data-v-2e90c9d8"]]),ry={class:"cal-page"},sy={class:"cal-toolbar"},oy={class:"cal-title num"},iy={class:"cal-head"},ay={class:"cal-grid"},ly=["title","onClick"],uy={class:"cal-marks"},cy={key:0,class:"drawer"},fy={class:"drawer-head"},dy={class:"drawer-body"},py=Vt({__name:"CalendarView",setup(e){const t=N(xt()),n=it(()=>Number(t.value.slice(0,4))),s=it(()=>Number(t.value.slice(5,7))-1),o=it(()=>n.value+" 年 "+(s.value+1)+" 月"),a=["一","二","三","四","五","六","日"],c=it(()=>{const Q=(new Date(n.value,s.value,1).getDay()+6)%7,le=new Date(n.value,s.value+1,0).getDate(),ce=[];for(let Z=0;Z[xe.date,xe])),A=le[2],x=new Map;for(const xe of c.value){if(!xe.inMonth)continue;const Y=qs(Z.get(xe.date),xe.date,ce,xe.date===h),Ce=A.filter(Ne=>Ne.date===xe.date);x.set(xe.date,{status:Y.status,label:Y.label,location:((ie=Z.get(xe.date))==null?void 0:ie.location)||"",hasLog:Ce.length>0,hasMilestone:Ce.some(Ne=>Ne.is_milestone===1)})}d.value=x}gt([n,s],y,{immediate:!0}),gt(Hs,()=>{y()});function m(L){var Q;return((Q=d.value.get(L))==null?void 0:Q.status)??""}function k(L){const Q=d.value.get(L);return Q?L+" · "+Q.label+(Q.location?" · "+Q.location:""):L}function D(L){var Q;return!!((Q=d.value.get(L))!=null&&Q.hasLog)}function O(L){var Q;return!!((Q=d.value.get(L))!=null&&Q.hasMilestone)}function K(){t.value=Bo(t.value,-1)}function W(){t.value=Bo(t.value,1)}function fe(){t.value=xt()}const ee=N(null);function E(L,Q){Q&&(ee.value=L)}return gt(Sa,L=>{L&&(t.value=L,ee.value=L,Sa.value=null)},{immediate:!0}),(L,Q)=>(F(),q("div",ry,[u("div",sy,[u("button",{class:"icon-btn",onClick:K},[Oe(lt,{name:"chevron-left",size:16})]),u("span",oy,re(o.value),1),u("button",{class:"icon-btn",onClick:W},[Oe(lt,{name:"chevron-right",size:16})]),u("button",{class:"btn btn-sm",onClick:fe},"回到今天")]),u("div",iy,[(F(),q(Re,null,ut(a,le=>u("span",{key:le,class:"cal-week muted"},re(le),1)),64))]),u("div",ay,[(F(!0),q(Re,null,ut(c.value,(le,ce)=>(F(),q("button",{key:ce,class:et(["cal-cell",{blank:!le.inMonth,weekend:le.weekend,selected:ee.value===le.date}]),title:le.inMonth?k(le.date):void 0,onClick:Z=>E(le.date,le.inMonth)},[le.inMonth?(F(),q(Re,{key:0},[u("span",{class:et(["daynum num",{today:le.date===Qt(h)}])},re(Number(le.date.slice(8,10))),3),u("span",uy,[m(le.date)?(F(),q("span",{key:0,class:et(["dot",m(le.date)])},null,2)):Ee("",!0),D(le.date)?(F(),It(lt,{key:1,name:"check-circle",size:12,class:"mark-log"})):Ee("",!0),O(le.date)?(F(),It(lt,{key:2,name:"star",size:12,class:"mark-star"})):Ee("",!0)])],64)):Ee("",!0)],10,ly))),128))]),Oe(ns,{name:"drawer"},{default:fr(()=>[ee.value?(F(),q("aside",cy,[u("div",fy,[Q[1]||(Q[1]=u("span",{class:"drawer-title"},"当日详情",-1)),u("button",{class:"icon-btn",onClick:Q[0]||(Q[0]=le=>ee.value=null)},[Oe(lt,{name:"close",size:16})])]),u("div",dy,[Oe(af,{date:ee.value},null,8,["date"])])])):Ee("",!0)]),_:1})]))}}),hy=Gt(py,[["__scopeId","data-v-6a6322fa"]]),vy={class:"detail-page"},my={class:"detail-toolbar"},yy=["value"],gy=["disabled"],by=Vt({__name:"TodayView",setup(e){const t=N(xt()),n=it(()=>t.value===xt());function s(){t.value=Kn(t.value,-1)}function o(){t.value=Kn(t.value,1)}function a(){t.value=xt()}function c(d){const h=d.target.value;h&&(t.value=h)}return(d,h)=>(F(),q("div",vy,[u("div",my,[u("button",{class:"icon-btn",title:"前一天",onClick:s},[Oe(lt,{name:"chevron-left",size:16})]),u("span",{class:et(["date-title num",{"is-today":n.value}])},re(Qt(rf)(t.value)),3),u("button",{class:"icon-btn",title:"后一天",onClick:o},[Oe(lt,{name:"chevron-right",size:16})]),u("input",{type:"date",class:"input w-date",value:t.value,onChange:c},null,40,yy),u("button",{class:"btn btn-sm",disabled:n.value,onClick:a},"回到今天",8,gy)]),Oe(af,{date:t.value},null,8,["date"])]))}}),wy=Gt(by,[["__scopeId","data-v-ac366cf6"]]),_y={class:"stats"},ky={class:"cards"},xy={class:"card stat-card"},Cy={class:"stat-num num"},Sy={class:"card stat-card"},Ey={class:"stat-num num"},$y={class:"card stat-card"},Ay={class:"stat-num num"},Py={class:"card stat-card"},Ty={class:"stat-num num"},Oy={class:"card section"},My={class:"heat"},Iy=["title"],jy={class:"two-col"},Dy={class:"card section"},Ry={class:"bar-label"},Ly={class:"bar-track"},Ky={class:"muted num bar-num"},Fy={key:0,class:"muted"},Ny={class:"card section"},Vy={class:"bar-label"},By={class:"bar-track"},Uy={class:"muted num bar-num"},qy={key:0,class:"muted"},Hy={class:"card section"},Wy={class:"bar-label loc-label"},zy={class:"bar-track"},Gy={class:"muted num bar-num"},Yy={key:0,class:"muted"},Jy=Vt({__name:"StatsView",setup(e){const t=N({attendDays:0,totalHours:"0",itemCount:0,streak:0}),n=N([]),s=N([]),o=N([]),a=N([]);async function c(){const y=xt(),m="2000-01-01",k=await Promise.all([jr(),ci(m,y),fi(m,y),Ks(!0)]),D=k[0],O=k[1],K=k[2],W=k[3],fe=O.filter(Y=>Y.clock_in_at||Y.kind==="makeup");let ee=0;for(const Y of fe){const Ce=qs(Y,Y.date,D,Y.date===y);ee+=Ce.workedMinutes??0}const E=new Set(K.map(Y=>Y.date));let L=0,Q=y;for(E.has(Q)||(Q=Kn(y,-1));E.has(Q);)L++,Q=Kn(Q,-1);t.value={attendDays:fe.length,totalHours:(ee/60).toFixed(1),itemCount:K.length,streak:L};const le=new Map;for(const Y of fe){const Ce=Y.location||"未记录";le.set(Ce,(le.get(Ce)||0)+1)}a.value=Array.from(le.entries()).map(Y=>({name:Y[0],count:Y[1],percent:Math.round(Y[1]/(fe.length||1)*100)})).sort((Y,Ce)=>Ce.count-Y.count);const ce=K.length||1;s.value=Us.map(Y=>{const Ce=K.filter(Ne=>Ne.category===Y.key).length;return{key:Y.key,label:Y.label,count:Ce,percent:Math.round(Ce/ce*100)}}).filter(Y=>Y.count>0).sort((Y,Ce)=>Ce.count-Y.count);const Z=new Map(W.map(Y=>[Y.id,Y.name])),A=new Map;for(const Y of K){const Ce=Y.project_id?Z.get(Y.project_id)||"已删除项目":"无项目";A.set(Ce,(A.get(Ce)||0)+1)}o.value=Array.from(A.entries()).map(Y=>({name:Y[0],count:Y[1],percent:Math.round(Y[1]/ce*100)})).sort((Y,Ce)=>Ce.count-Y.count);const x=new Map;for(const Y of K)x.set(Y.date,(x.get(Y.date)||0)+1);const ie=Es(y),xe=[];for(let Y=11;Y>=0;Y--){const Ce=Kn(ie,-7*Y),Ne=[];for(let Xe=0;Xe<7;Xe++){const qe=Kn(Ce,Xe);Ne.push({date:qe,count:x.get(qe)||0})}xe.push(Ne)}n.value=xe}fn(async()=>{await c()}),gt(Hs,()=>{c()});function d(y){return y===0?0:y===1?1:y<=3?2:y<=5?3:4}function h(y,m){return y+" · "+(m?m+" 条":"无记录")}return(y,m)=>(F(),q("div",_y,[u("div",ky,[u("div",xy,[m[0]||(m[0]=u("div",{class:"muted"},"出勤天数",-1)),u("div",Cy,re(t.value.attendDays),1)]),u("div",Sy,[m[1]||(m[1]=u("div",{class:"muted"},"累计工时(小时)",-1)),u("div",Ey,re(t.value.totalHours),1)]),u("div",$y,[m[2]||(m[2]=u("div",{class:"muted"},"记录条数",-1)),u("div",Ay,re(t.value.itemCount),1)]),u("div",Py,[m[3]||(m[3]=u("div",{class:"muted"},"连续记录(天)",-1)),u("div",Ty,re(t.value.streak),1)])]),u("div",Oy,[m[4]||(m[4]=u("div",{class:"section-title"},"记录热力图(近 12 周)",-1)),u("div",My,[(F(!0),q(Re,null,ut(n.value,(k,D)=>(F(),q("div",{key:D,class:"heat-col"},[(F(!0),q(Re,null,ut(k,O=>(F(),q("span",{key:O.date,class:et(["heat-cell","lv"+d(O.count)]),title:h(O.date,O.count)},null,10,Iy))),128))]))),128))]),m[5]||(m[5]=Ip('
少多
',1))]),u("div",jy,[u("div",Dy,[m[6]||(m[6]=u("div",{class:"section-title"},"分类分布",-1)),(F(!0),q(Re,null,ut(s.value,k=>(F(),q("div",{key:k.key,class:"bar-row"},[u("span",Ry,re(k.label),1),u("span",Ly,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Ky,re(k.count)+" 条 · "+re(k.percent)+"%",1)]))),128)),s.value.length?Ee("",!0):(F(),q("div",Fy,"暂无数据"))]),u("div",Ny,[m[7]||(m[7]=u("div",{class:"section-title"},"项目投入",-1)),(F(!0),q(Re,null,ut(o.value,k=>(F(),q("div",{key:k.name,class:"bar-row"},[u("span",Vy,re(k.name),1),u("span",By,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Uy,re(k.count)+" 条 · "+re(k.percent)+"%",1)]))),128)),o.value.length?Ee("",!0):(F(),q("div",qy,"暂无数据"))])]),u("div",Hy,[m[8]||(m[8]=u("div",{class:"section-title"},"地点分布(按出勤天)",-1)),(F(!0),q(Re,null,ut(a.value,k=>(F(),q("div",{key:k.name,class:"bar-row"},[u("span",Wy,re(k.name),1),u("span",zy,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Gy,re(k.count)+" 天 · "+re(k.percent)+"%",1)]))),128)),a.value.length?Ee("",!0):(F(),q("div",Yy,"暂无数据"))])]))}}),Xy=Gt(Jy,[["__scopeId","data-v-73e5ba49"]]);async function Qy(e,t,n){const s=xt(),o=await Promise.all([jr(),ci(e,t),fi(e,t),Ks(!0),Tv(e,t)]),a=o[0],c=o[1],d=o[2],h=o[3],y=o[4];let m=0,k=0,D=0;for(const A of c){(A.clock_in_at||A.kind==="makeup")&&m++,A.kind==="makeup"&&D++;const x=qs(A,A.date,a,A.date===s);k+=x.workedMinutes??0}const O=new Map;for(const A of c){if(!(A.clock_in_at||A.kind==="makeup"))continue;const x=A.location||"未记录";O.set(x,(O.get(x)||0)+1)}const K=Array.from(O.entries()).map(A=>({name:A[0],count:A[1]})).sort((A,x)=>x.count-A.count),W=d.length||1,fe=Us.map(A=>{const x=d.filter(ie=>ie.category===A.key).length;return{key:A.key,label:A.label,count:x,percent:Math.round(x/W*100)}}).filter(A=>A.count>0).sort((A,x)=>x.count-A.count),ee=new Map(h.map(A=>[A.id,A.name])),E=new Map;for(const A of d){const x=A.project_id?ee.get(A.project_id)||"已删除项目":"无项目";E.set(x,(E.get(x)||0)+1)}const L=Array.from(E.entries()).map(A=>({name:A[0],count:A[1]})).sort((A,x)=>x.count-A.count),Q=d.filter(A=>A.is_milestone===1).map(A=>({date:A.date,content:A.content})),le=d.filter(A=>A.needs_followup===1).map(A=>({date:A.date,content:A.content,remark:A.remark||""})),ce=d.filter(A=>!!A.takeaway).map(A=>({date:A.date,text:A.takeaway})),Z=y.map(A=>({weekStart:A.week_start,highlights:A.highlights||"",challenges:A.challenges||"",plan_next:A.plan_next||""}));return{range:{start:e,end:t,label:n},attendDays:m,totalHours:(k/60).toFixed(1),makeupCount:D,leaveCount:c.filter(A=>A.kind==="leave").length,itemCount:d.length,categoryStats:fe,projectStats:L,locationStats:K,milestones:Q,followups:le,takeaways:ce,weekNotes:Z}}function Zy(e){const t=[];t.push("# 实习工作总结("+e.range.start+" ~ "+e.range.end+")"),t.push(""),t.push("## 一、考勤概况"),t.push(""),t.push("出勤 "+e.attendDays+" 天,累计工时 "+e.totalHours+" 小时,补卡 "+e.makeupCount+" 次"+(e.leaveCount?",请假 "+e.leaveCount+" 天":""));const n=e.locationStats.filter(s=>s.name!=="未记录");n.length&&t.push("其中:"+n.map(s=>s.name+" "+s.count+" 天").join(",")),t.push(""),t.push("## 二、工作内容分布"),t.push(""),t.push(e.categoryStats.length?e.categoryStats.map(s=>s.label+" "+s.percent+"%("+s.count+" 条)").join(","):"(无记录)"),t.push(""),t.push("## 三、项目投入"),t.push(""),t.push(e.projectStats.length?e.projectStats.map(s=>s.name+" "+s.count+" 条").join(","):"(无记录)"),t.push(""),t.push("## 四、主要成果"),t.push(""),e.milestones.length?e.milestones.forEach((s,o)=>t.push(o+1+". 【成果】"+s.content+"("+s.date+")")):t.push("(无)"),t.push(""),t.push("## 五、待跟进事项"),t.push(""),e.followups.length?e.followups.forEach(s=>t.push("- 【待跟进】"+s.content+(s.remark?"("+s.date+" 备注:"+s.remark+")":"("+s.date+")"))):t.push("(无)"),t.push(""),t.push("## 六、学习与成长"),t.push(""),e.takeaways.length?e.takeaways.forEach(s=>t.push("- "+s.text+"("+s.date+")")):t.push("(无)");for(const s of e.weekNotes)t.push(""),t.push("### 周记("+s.weekStart+" 起)"),t.push(""),t.push("- 本周亮点:"+(s.highlights||"(无)")),t.push("- 踩的坑:"+(s.challenges||"(无)")),t.push("- 下周计划:"+(s.plan_next||"(无)"));return t.push(""),t.join(` -`)}const eg="modulepreload",tg=function(e,t){return new URL(e,t).href},Au={},lf=function(t,n,s){let o=Promise.resolve();if(n&&n.length>0){const c=document.getElementsByTagName("link"),d=document.querySelector("meta[property=csp-nonce]"),h=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));o=Promise.allSettled(n.map(y=>{if(y=tg(y,s),y in Au)return;Au[y]=!0;const m=y.endsWith(".css"),k=m?'[rel="stylesheet"]':"";if(!!s)for(let K=c.length-1;K>=0;K--){const W=c[K];if(W.href===y&&(!m||W.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${y}"]${k}`))return;const O=document.createElement("link");if(O.rel=m?"stylesheet":eg,m||(O.as="script"),O.crossOrigin="",O.href=y,h&&O.setAttribute("nonce",h),document.head.appendChild(O),m)return new Promise((K,W)=>{O.addEventListener("load",K),O.addEventListener("error",()=>W(new Error(`Unable to preload CSS for ${y}`)))})}))}function a(c){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=c,window.dispatchEvent(d),!d.defaultPrevented)throw c}return o.then(c=>{for(const d of c||[])d.status==="rejected"&&a(d.reason);return t().catch(a)})};/*! Capacitor: https://capacitorjs.com/ - MIT License */const ng=e=>{const t=new Map;t.set("web",{name:"web"});const n=e.CapacitorPlatforms||{currentPlatform:{name:"web"},platforms:t},s=(a,c)=>{n.platforms.set(a,c)},o=a=>{n.platforms.has(a)&&(n.currentPlatform=n.platforms.get(a))};return n.addPlatform=s,n.setPlatform=o,n},rg=e=>e.CapacitorPlatforms=ng(e),uf=rg(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});uf.addPlatform;uf.setPlatform;var Qr;(function(e){e.Unimplemented="UNIMPLEMENTED",e.Unavailable="UNAVAILABLE"})(Qr||(Qr={}));class aa extends Error{constructor(t,n,s){super(t),this.message=t,this.code=n,this.data=s}}const sg=e=>{var t,n;return e!=null&&e.androidBridge?"android":!((n=(t=e==null?void 0:e.webkit)===null||t===void 0?void 0:t.messageHandlers)===null||n===void 0)&&n.bridge?"ios":"web"},og=e=>{var t,n,s,o,a;const c=e.CapacitorCustomPlatform||null,d=e.Capacitor||{},h=d.Plugins=d.Plugins||{},y=e.CapacitorPlatforms,m=()=>c!==null?c.name:sg(e),k=((t=y==null?void 0:y.currentPlatform)===null||t===void 0?void 0:t.getPlatform)||m,D=()=>k()!=="web",O=((n=y==null?void 0:y.currentPlatform)===null||n===void 0?void 0:n.isNativePlatform)||D,K=Z=>{const A=Q.get(Z);return!!(A!=null&&A.platforms.has(k())||ee(Z))},W=((s=y==null?void 0:y.currentPlatform)===null||s===void 0?void 0:s.isPluginAvailable)||K,fe=Z=>{var A;return(A=d.PluginHeaders)===null||A===void 0?void 0:A.find(x=>x.name===Z)},ee=((o=y==null?void 0:y.currentPlatform)===null||o===void 0?void 0:o.getPluginHeader)||fe,E=Z=>e.console.error(Z),L=(Z,A,x)=>Promise.reject(`${x} does not have an implementation of "${A}".`),Q=new Map,le=(Z,A={})=>{const x=Q.get(Z);if(x)return console.warn(`Capacitor plugin "${Z}" already registered. Cannot register plugins twice.`),x.proxy;const ie=k(),xe=ee(Z);let Y;const Ce=async()=>(!Y&&ie in A?Y=typeof A[ie]=="function"?Y=await A[ie]():Y=A[ie]:c!==null&&!Y&&"web"in A&&(Y=typeof A.web=="function"?Y=await A.web():Y=A.web),Y),Ne=(Ke,de)=>{var X,J;if(xe){const ke=xe==null?void 0:xe.methods.find(st=>de===st.name);if(ke)return ke.rtype==="promise"?st=>d.nativePromise(Z,de.toString(),st):(st,pt)=>d.nativeCallback(Z,de.toString(),st,pt);if(Ke)return(X=Ke[de])===null||X===void 0?void 0:X.bind(Ke)}else{if(Ke)return(J=Ke[de])===null||J===void 0?void 0:J.bind(Ke);throw new aa(`"${Z}" plugin is not implemented on ${ie}`,Qr.Unimplemented)}},Xe=Ke=>{let de;const X=(...J)=>{const ke=Ce().then(st=>{const pt=Ne(st,Ke);if(pt){const ht=pt(...J);return de=ht==null?void 0:ht.remove,ht}else throw new aa(`"${Z}.${Ke}()" is not implemented on ${ie}`,Qr.Unimplemented)});return Ke==="addListener"&&(ke.remove=async()=>de()),ke};return X.toString=()=>`${Ke.toString()}() { [capacitor code] }`,Object.defineProperty(X,"name",{value:Ke,writable:!1,configurable:!1}),X},qe=Xe("addListener"),Ue=Xe("removeListener"),ge=(Ke,de)=>{const X=qe({eventName:Ke},de),J=async()=>{const st=await X;Ue({eventName:Ke,callbackId:st},de)},ke=new Promise(st=>X.then(()=>st({remove:J})));return ke.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await J()},ke},Me=new Proxy({},{get(Ke,de){switch(de){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return xe?ge:qe;case"removeListener":return Ue;default:return Xe(de)}}});return h[Z]=Me,Q.set(Z,{name:Z,proxy:Me,platforms:new Set([...Object.keys(A),...xe?[ie]:[]])}),Me},ce=((a=y==null?void 0:y.currentPlatform)===null||a===void 0?void 0:a.registerPlugin)||le;return d.convertFileSrc||(d.convertFileSrc=Z=>Z),d.getPlatform=k,d.handleError=E,d.isNativePlatform=O,d.isPluginAvailable=W,d.pluginMethodNoop=L,d.registerPlugin=ce,d.Exception=aa,d.DEBUG=!!d.DEBUG,d.isLoggingEnabled=!!d.isLoggingEnabled,d.platform=d.getPlatform(),d.isNative=d.isNativePlatform(),d},ig=e=>e.Capacitor=og(e),Zr=ig(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),cf=Zr.registerPlugin;Zr.Plugins;class ff{constructor(t){this.listeners={},this.retainedEventArguments={},this.windowListeners={},t&&(console.warn(`Capacitor WebPlugin "${t.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=t)}addListener(t,n){let s=!1;this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(n);const a=this.windowListeners[t];a&&!a.registered&&this.addWindowListener(a),s&&this.sendRetainedArgumentsForEvent(t);const c=async()=>this.removeListener(t,n);return Promise.resolve({remove:c})}async removeAllListeners(){this.listeners={};for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);this.windowListeners={}}notifyListeners(t,n,s){const o=this.listeners[t];if(!o){if(s){let a=this.retainedEventArguments[t];a||(a=[]),a.push(n),this.retainedEventArguments[t]=a}return}o.forEach(a=>a(n))}hasListeners(t){return!!this.listeners[t].length}registerWindowListener(t,n){this.windowListeners[n]={registered:!1,windowEventName:t,pluginEventName:n,handler:s=>{this.notifyListeners(n,s)}}}unimplemented(t="not implemented"){return new Zr.Exception(t,Qr.Unimplemented)}unavailable(t="not available"){return new Zr.Exception(t,Qr.Unavailable)}async removeListener(t,n){const s=this.listeners[t];if(!s)return;const o=s.indexOf(n);this.listeners[t].splice(o,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}addWindowListener(t){window.addEventListener(t.windowEventName,t.handler),t.registered=!0}removeWindowListener(t){t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}sendRetainedArgumentsForEvent(t){const n=this.retainedEventArguments[t];n&&(delete this.retainedEventArguments[t],n.forEach(s=>{this.notifyListeners(t,s)}))}}const Pu=e=>encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Tu=e=>e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class ag extends ff{async getCookies(){const t=document.cookie,n={};return t.split(";").forEach(s=>{if(s.length<=0)return;let[o,a]=s.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");o=Tu(o).trim(),a=Tu(a).trim(),n[o]=a}),n}async setCookie(t){try{const n=Pu(t.key),s=Pu(t.value),o=`; expires=${(t.expires||"").replace("expires=","")}`,a=(t.path||"/").replace("path=",""),c=t.url!=null&&t.url.length>0?`domain=${t.url}`:"";document.cookie=`${n}=${s||""}${o}; path=${a}; ${c};`}catch(n){return Promise.reject(n)}}async deleteCookie(t){try{document.cookie=`${t.key}=; Max-Age=0`}catch(n){return Promise.reject(n)}}async clearCookies(){try{const t=document.cookie.split(";")||[];for(const n of t)document.cookie=n.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(t){return Promise.reject(t)}}async clearAllCookies(){try{await this.clearCookies()}catch(t){return Promise.reject(t)}}}cf("CapacitorCookies",{web:()=>new ag});const lg=async e=>new Promise((t,n)=>{const s=new FileReader;s.onload=()=>{const o=s.result;t(o.indexOf(",")>=0?o.split(",")[1]:o)},s.onerror=o=>n(o),s.readAsDataURL(e)}),ug=(e={})=>{const t=Object.keys(e);return Object.keys(e).map(o=>o.toLocaleLowerCase()).reduce((o,a,c)=>(o[a]=e[t[c]],o),{})},cg=(e,t=!0)=>e?Object.entries(e).reduce((s,o)=>{const[a,c]=o;let d,h;return Array.isArray(c)?(h="",c.forEach(y=>{d=t?encodeURIComponent(y):y,h+=`${a}=${d}&`}),h.slice(0,-1)):(d=t?encodeURIComponent(c):c,h=`${a}=${d}`),`${s}&${h}`},"").substr(1):null,fg=(e,t={})=>{const n=Object.assign({method:e.method||"GET",headers:e.headers},t),o=ug(e.headers)["content-type"]||"";if(typeof e.data=="string")n.body=e.data;else if(o.includes("application/x-www-form-urlencoded")){const a=new URLSearchParams;for(const[c,d]of Object.entries(e.data||{}))a.set(c,d);n.body=a.toString()}else if(o.includes("multipart/form-data")||e.data instanceof FormData){const a=new FormData;if(e.data instanceof FormData)e.data.forEach((d,h)=>{a.append(h,d)});else for(const d of Object.keys(e.data))a.append(d,e.data[d]);n.body=a;const c=new Headers(n.headers);c.delete("content-type"),n.headers=c}else(o.includes("application/json")||typeof e.data=="object")&&(n.body=JSON.stringify(e.data));return n};class dg extends ff{async request(t){const n=fg(t,t.webFetchExtra),s=cg(t.params,t.shouldEncodeUrlParams),o=s?`${t.url}?${s}`:t.url,a=await fetch(o,n),c=a.headers.get("content-type")||"";let{responseType:d="text"}=a.ok?t:{};c.includes("application/json")&&(d="json");let h,y;switch(d){case"arraybuffer":case"blob":y=await a.blob(),h=await lg(y);break;case"json":h=await a.json();break;case"document":case"text":default:h=await a.text()}const m={};return a.headers.forEach((k,D)=>{m[D]=k}),{data:h,headers:m,status:a.status,url:a.url}}async get(t){return this.request(Object.assign(Object.assign({},t),{method:"GET"}))}async post(t){return this.request(Object.assign(Object.assign({},t),{method:"POST"}))}async put(t){return this.request(Object.assign(Object.assign({},t),{method:"PUT"}))}async patch(t){return this.request(Object.assign(Object.assign({},t),{method:"PATCH"}))}async delete(t){return this.request(Object.assign(Object.assign({},t),{method:"DELETE"}))}}cf("CapacitorHttp",{web:()=>new dg});async function Za(e,t){const n=window;if(n.electronAPI&&n.electronAPI.saveFile){const c=await n.electronAPI.saveFile(e,t);return c&&c.saved?c.path:""}if(Zr.isNativePlatform()){const{Filesystem:c,Directory:d,Encoding:h}=await lf(async()=>{const{Filesystem:y,Directory:m,Encoding:k}=await import("./index-DpHejoml.js");return{Filesystem:y,Directory:m,Encoding:k}},[],import.meta.url);try{return(await c.writeFile({path:e,data:t,directory:d.Documents,encoding:h.UTF8,recursive:!0})).uri}catch{return(await c.writeFile({path:e,data:t,directory:d.Cache,encoding:h.UTF8,recursive:!0})).uri}}const s=new Blob([t],{type:"text/plain;charset=utf-8"}),o=URL.createObjectURL(s),a=document.createElement("a");return a.href=o,a.download=e,a.click(),window.setTimeout(()=>URL.revokeObjectURL(o),1e4),""}const pg=Object.freeze(Object.defineProperty({__proto__:null,downloadText:Za},Symbol.toStringTag,{value:"Module"}));async function $a(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}async function hg(e){const t=await Promise.all([yt("ai_base_url",""),yt("ai_api_key",""),yt("ai_model","")]),n=t[0].trim().replace(/\/+$/,""),s=t[1].trim(),o=t[2].trim();if(!n||!o)throw new Error("请先在设置页配置 AI 接口地址与模型名称");const a=n+"/chat/completions",c={"Content-Type":"application/json"};s&&(c.Authorization="Bearer "+s);const h=JSON.stringify({model:o,messages:[{role:"system",content:"你是一名严谨的中文助理。请将用户提供的工作总结 Markdown 草稿润色为通顺、专业、简洁的工作总结。要求:保留原有章节结构与全部事实数据(数字、日期、条目),不得虚构或遗漏内容,只输出 Markdown 正文。"},{role:"user",content:e}],temperature:.3});let y;try{y=await fetch(a,{method:"POST",headers:c,body:h})}catch{throw new Error("无法访问 AI 接口:请检查地址是否正确、服务端是否允许浏览器跨域访问")}if(!y.ok){let D="接口返回 "+y.status;try{const O=await y.json();O&&O.error&&O.error.message&&(D+=":"+O.error.message)}catch{}throw new Error(D)}const m=await y.json(),k=m&&m.choices&&m.choices[0]&&m.choices[0].message&&m.choices[0].message.content;if(!k)throw new Error("接口未返回内容");return String(k)}const vg={class:"report"},mg={class:"report-toolbar"},yg={class:"seg"},gg=["onClick"],bg=["disabled"],wg=["disabled"],_g={key:0,class:"ai-error"},kg={class:"report-grid"},xg={class:"report-left"},Cg={class:"card section"},Sg={class:"section-title"},Eg={class:"muted note-saved"},$g={class:"card section"},Ag={class:"report-right"},Pg={key:0,class:"card section"},Tg={class:"sum-row"},Og={class:"num"},Mg={class:"sum-row"},Ig={class:"num"},jg={class:"sum-row"},Dg={class:"num"},Rg={class:"sum-row"},Lg={class:"num"},Kg={class:"sum-row"},Fg={class:"num"},Ng={class:"muted"},Vg={class:"num"},Bg={key:0,class:"muted sum-empty"},Ug={class:"muted"},qg={key:1,class:"muted sum-empty"},Hg={class:"muted"},Wg={key:2,class:"muted sum-empty"},zg={class:"muted"},Gg={key:3,class:"muted sum-empty"},Yg=Vt({__name:"ReportView",setup(e){const t=[{key:"week",label:"本周"},{key:"month",label:"本月"},{key:"all",label:"全部"},{key:"custom",label:"自定义"}],n=N("week"),s=N(Es(xt())),o=N(xt()),a=N(null),c=N(""),d=N(!1),h=N(!1),y=N(null),m=N(""),k=N(Es(xt())),D=N(""),O=N(""),K=N(""),W=N(!1);async function fe(){const A=await Qa(k.value);D.value=(A==null?void 0:A.highlights)||"",O.value=(A==null?void 0:A.challenges)||"",K.value=(A==null?void 0:A.plan_next)||"",W.value=!1}async function ee(){await Pv(k.value,{highlights:D.value.trim()||null,challenges:O.value.trim()||null,plan_next:K.value.trim()||null}),W.value=!0,await L()}function E(A){const x=xt();if(A==="week"){const ie=Es(x);return{start:ie,end:Kn(ie,6),label:"本周"}}if(A==="month"){const ie=x.slice(0,7);return{start:ie+"-01",end:x,label:ie+" 本月"}}return A==="all"?{start:"2000-01-01",end:x,label:"全部实习期"}:{start:s.value,end:o.value,label:s.value+" ~ "+o.value}}async function L(){d.value=!0;const A=E(n.value),x=await Qy(A.start,A.end,A.label);a.value=x,c.value=Zy(x),d.value=!1}gt(n,L),gt([s,o],()=>{n.value==="custom"&&L()}),fn(async()=>{await fe(),await L()});async function Q(){const A=xt().replace(/-/g,""),x=await Za("实习工作总结_"+A+".md",c.value);Ge(x?"总结已导出到:"+x:"总结已导出到系统下载目录")}async function le(){await $a(c.value),Ge("总结已复制到剪贴板")}async function ce(){if(h.value)return;m.value="";const A=c.value.trim();if(!A){m.value="当前草稿为空,无法润色";return}h.value=!0;try{y.value=c.value,c.value=await hg(A),Ge("AI 润色完成")}catch(x){y.value=null,m.value=x instanceof Error?x.message:"润色失败"}h.value=!1}function Z(){y.value!==null&&(c.value=y.value),y.value=null}return(A,x)=>(F(),q("div",vg,[u("div",mg,[u("div",yg,[(F(),q(Re,null,ut(t,ie=>u("button",{key:ie.key,class:et(["seg-btn",{active:n.value===ie.key}]),onClick:xe=>n.value=ie.key},re(ie.label),11,gg)),64))]),n.value==="custom"?(F(),q(Re,{key:0},[$e(u("input",{type:"date",class:"input w-date","onUpdate:modelValue":x[0]||(x[0]=ie=>s.value=ie)},null,512),[[De,s.value]]),x[6]||(x[6]=u("span",{class:"muted"},"至",-1)),$e(u("input",{type:"date",class:"input w-date","onUpdate:modelValue":x[1]||(x[1]=ie=>o.value=ie)},null,512),[[De,o.value]])],64)):Ee("",!0),x[10]||(x[10]=u("span",{class:"flex1"},null,-1)),u("button",{class:"btn btn-sm",disabled:h.value,onClick:ce},[Oe(lt,{name:"edit",size:14}),x[7]||(x[7]=nn("AI 润色 ",-1))],8,bg),y.value!==null?(F(),q("button",{key:1,class:"btn btn-sm",onClick:Z},"还原润色前")):Ee("",!0),u("button",{class:"btn btn-sm",disabled:d.value,onClick:L},[Oe(lt,{name:"edit",size:14}),x[8]||(x[8]=nn("重新生成 ",-1))],8,wg),u("button",{class:"btn btn-sm",onClick:le},"复制"),u("button",{class:"btn btn-primary btn-sm",onClick:Q},[Oe(lt,{name:"export",size:14}),x[9]||(x[9]=nn("导出 Markdown ",-1))])]),m.value?(F(),q("div",_g,re(m.value),1)):Ee("",!0),u("div",kg,[u("div",xg,[u("div",Cg,[u("div",Sg,"本周周记("+re(k.value)+" 起)",1),x[11]||(x[11]=u("label",{class:"note-label muted"},"本周亮点",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[2]||(x[2]=ie=>D.value=ie),placeholder:"本周最有价值的一件事",onBlur:ee},null,544),[[De,D.value]]),x[12]||(x[12]=u("label",{class:"note-label muted"},"踩的坑",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[3]||(x[3]=ie=>O.value=ie),placeholder:"遇到的问题与教训",onBlur:ee},null,544),[[De,O.value]]),x[13]||(x[13]=u("label",{class:"note-label muted"},"下周计划",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[4]||(x[4]=ie=>K.value=ie),placeholder:"下周准备做什么",onBlur:ee},null,544),[[De,K.value]]),u("div",Eg,re(W.value?"已保存":"失焦自动保存"),1)]),u("div",$g,[x[14]||(x[14]=u("div",{class:"section-title"},"总结草稿(可编辑)",-1)),$e(u("textarea",{class:"textarea md-editor","onUpdate:modelValue":x[5]||(x[5]=ie=>c.value=ie),spellcheck:"false"},null,512),[[De,c.value]])])]),u("div",Ag,[a.value?(F(),q("div",Pg,[x[20]||(x[20]=u("div",{class:"section-title"},"数据摘要",-1)),u("div",Tg,[x[15]||(x[15]=u("span",{class:"muted"},"出勤",-1)),u("span",Og,re(a.value.attendDays)+" 天",1)]),u("div",Mg,[x[16]||(x[16]=u("span",{class:"muted"},"工时",-1)),u("span",Ig,re(a.value.totalHours)+" 小时",1)]),u("div",jg,[x[17]||(x[17]=u("span",{class:"muted"},"补卡",-1)),u("span",Dg,re(a.value.makeupCount)+" 次",1)]),u("div",Rg,[x[18]||(x[18]=u("span",{class:"muted"},"请假",-1)),u("span",Lg,re(a.value.leaveCount)+" 天",1)]),u("div",Kg,[x[19]||(x[19]=u("span",{class:"muted"},"记录",-1)),u("span",Fg,re(a.value.itemCount)+" 条",1)]),x[21]||(x[21]=u("div",{class:"section-sub"},"分类分布",-1)),(F(!0),q(Re,null,ut(a.value.categoryStats,ie=>(F(),q("div",{key:ie.key,class:"sum-row"},[u("span",Ng,re(ie.label),1),u("span",Vg,re(ie.count)+" 条 · "+re(ie.percent)+"%",1)]))),128)),a.value.categoryStats.length?Ee("",!0):(F(),q("div",Bg,"(无)")),x[22]||(x[22]=u("div",{class:"section-sub"},"主要成果",-1)),(F(!0),q(Re,null,ut(a.value.milestones,(ie,xe)=>(F(),q("div",{key:"m"+xe,class:"sum-item"},[nn(re(ie.content),1),u("span",Ug,"("+re(ie.date)+")",1)]))),128)),a.value.milestones.length?Ee("",!0):(F(),q("div",qg,"(无)")),x[23]||(x[23]=u("div",{class:"section-sub"},"待跟进",-1)),(F(!0),q(Re,null,ut(a.value.followups,(ie,xe)=>(F(),q("div",{key:"f"+xe,class:"sum-item"},[nn(re(ie.content),1),u("span",Hg,"("+re(ie.date)+")",1)]))),128)),a.value.followups.length?Ee("",!0):(F(),q("div",Wg,"(无)")),x[24]||(x[24]=u("div",{class:"section-sub"},"学习与成长",-1)),(F(!0),q(Re,null,ut(a.value.takeaways,(ie,xe)=>(F(),q("div",{key:"t"+xe,class:"sum-item"},[nn(re(ie.text),1),u("span",zg,"("+re(ie.date)+")",1)]))),128)),a.value.takeaways.length?Ee("",!0):(F(),q("div",Gg,"(无)"))])):Ee("",!0)])])]))}}),Jg=Gt(Yg,[["__scopeId","data-v-43f9c59b"]]),Xg=["aria-label"],Qg={class:"dialog-head"},Zg={class:"dialog-title"},eb={class:"dialog-body"},tb={class:"form-grid"},nb={class:"field span2"},rb={class:"seg"},sb={class:"field"},ob={class:"field"},ib={class:"field"},ab=["value"],lb={key:0,class:"field"},ub={class:"seg"},cb={class:"field span2"},fb={key:0,class:"form-error"},db={class:"dialog-btns"},pb=Vt({__name:"TransactionDialog",props:{open:{type:Boolean},title:{},initial:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N("expense"),a=N("餐饮"),c=N(""),d=N(""),h=N(""),y=N(!1),m=N(!1),k=N(""),D=N(null);function O(ee){n.open&&ee.key==="Escape"&&s("cancel")}gt(()=>n.open,async ee=>{var E;ee?(o.value=n.initial.type==="income"?"income":"expense",a.value=n.initial.category,c.value=n.initial.amountYuan,d.value=n.initial.date,h.value=n.initial.note,y.value=n.initial.reimbursable===1,m.value=n.initial.reimbursed===1,k.value="",window.addEventListener("keydown",O),await ts(),(E=D.value)==null||E.focus()):window.removeEventListener("keydown",O)}),dr(()=>window.removeEventListener("keydown",O)),gt(o,ee=>{a.value=ee==="expense"?Wr[0]:Vo[0]});const K=it(()=>o.value==="expense"?Wr:Vo);function W(){return a.value&&K.value.includes(a.value)?a.value:K.value[0]}function fe(){const ee=Number(c.value);if(!c.value.trim()||!isFinite(ee)||ee<=0){k.value="请填写大于 0 的金额";return}if(!d.value){k.value="请选择日期";return}const E=o.value==="expense"&&y.value?1:0;s("save",{type:o.value,category:W(),amount:Math.round(ee*100),date:d.value,note:h.value.trim(),reimbursable:E,reimbursed:E&&m.value?1:0})}return(ee,E)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:E[11]||(E[11]=Mr(L=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Qg,[u("span",Zg,re(e.title),1),u("button",{class:"icon-btn",title:"关闭",onClick:E[0]||(E[0]=L=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",eb,[u("div",tb,[u("div",nb,[E[12]||(E[12]=u("label",null,"类型",-1)),u("div",rb,[u("button",{class:et(["seg-btn",{active:o.value==="expense"}]),onClick:E[1]||(E[1]=L=>o.value="expense")},"支出",2),u("button",{class:et(["seg-btn",{active:o.value==="income"}]),onClick:E[2]||(E[2]=L=>o.value="income")},"收入",2)])]),u("div",sb,[E[13]||(E[13]=u("label",null,"金额(元,必填)",-1)),$e(u("input",{ref_key:"amountInput",ref:D,class:et(["input",{invalid:k.value}]),"onUpdate:modelValue":E[3]||(E[3]=L=>c.value=L),type:"number",min:"0",step:"0.01",placeholder:"0.00"},null,2),[[De,c.value]])]),u("div",ob,[E[14]||(E[14]=u("label",null,"日期(必填)",-1)),$e(u("input",{class:"input",type:"date","onUpdate:modelValue":E[4]||(E[4]=L=>d.value=L)},null,512),[[De,d.value]])]),u("div",ib,[E[15]||(E[15]=u("label",null,"分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[5]||(E[5]=L=>a.value=L)},[(F(!0),q(Re,null,ut(K.value,L=>(F(),q("option",{key:L,value:L},re(L),9,ab))),128))],512),[[Fn,a.value]])]),o.value==="expense"?(F(),q("div",lb,[E[16]||(E[16]=u("label",null,"报销状态",-1)),u("div",ub,[u("button",{class:et(["seg-btn",{active:!y.value}]),onClick:E[6]||(E[6]=L=>{y.value=!1,m.value=!1})},"无需报销",2),u("button",{class:et(["seg-btn",{active:y.value&&!m.value}]),onClick:E[7]||(E[7]=L=>{y.value=!0,m.value=!1})},"待报销",2),u("button",{class:et(["seg-btn",{active:y.value&&m.value}]),onClick:E[8]||(E[8]=L=>{y.value=!0,m.value=!0})},"已报销",2)])])):Ee("",!0),u("div",cb,[E[17]||(E[17]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":E[9]||(E[9]=L=>h.value=L),placeholder:"选填"},null,512),[[De,h.value]])])]),k.value?(F(),q("div",fb,re(k.value),1)):Ee("",!0)]),u("div",db,[u("button",{class:"btn btn-sm",onClick:E[10]||(E[10]=L=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:fe},"保存")])],8,Xg)])):Ee("",!0)]),_:1})]))}}),hb=Gt(pb,[["__scopeId","data-v-e3568c0d"]]),vb={class:"ledger-page"},mb={class:"ledger-toolbar"},yb={class:"month-title num"},gb={class:"cards"},bb={class:"card stat-card"},wb={class:"stat-num num amt-income"},_b={class:"card stat-card"},kb={class:"stat-num num"},xb={class:"card stat-card"},Cb={class:"card stat-card"},Sb={class:"stat-num num amt-warn"},Eb={class:"card sec"},$b={class:"form-grid"},Ab={class:"field span2"},Pb={class:"seg"},Tb={class:"field"},Ob={class:"field"},Mb={class:"field"},Ib=["value"],jb={key:0,class:"field"},Db={class:"field span2"},Rb={key:0,class:"form-error"},Lb={class:"form-footer"},Kb=["disabled"],Fb=["disabled"],Nb={key:0,class:"card sec"},Vb={class:"bar-label"},Bb={class:"bar-track"},Ub={class:"muted num bar-num"},qb={class:"card table-card"},Hb={class:"tx-table"},Wb={class:"num"},zb={class:"tag"},Gb={class:"td-note"},Yb={key:0,class:"muted"},Jb={key:1,class:"tx-done"},Xb={key:2,class:"tx-pending"},Qb={class:"ops"},Zb=["onClick"],ew=["onClick"],tw=["onClick"],nw={key:0},rw={class:"muted vault-note num"},sw=Vt({__name:"LedgerView",setup(e){const t=N(xt()),n=N([]),s=N(!0),o=N("expense"),a=N(""),c=N(Wr[0]),d=N(xt()),h=N(""),y=N(!1),m=N(""),k=N(!1),D=N(!1),O=N(null),K=N({type:"expense",category:Wr[0],amountYuan:"",date:xt(),note:"",reimbursable:0,reimbursed:0}),W=N(null),fe=it(()=>t.value.slice(0,7)+"-01"),ee=it(()=>{const de=Number(t.value.slice(0,4)),X=Number(t.value.slice(5,7))-1,J=new Date(de,X+1,0).getDate();return t.value.slice(0,7)+"-"+(J<10?"0"+J:String(J))}),E=it(()=>Number(t.value.slice(0,4))+" 年 "+Number(t.value.slice(5,7))+" 月");async function L(){s.value=!0,n.value=await Lv(fe.value,ee.value),s.value=!1}fn(L),gt(t,L),gt(o,de=>{c.value=de==="expense"?Wr[0]:Vo[0]});const Q=it(()=>n.value.slice().sort((de,X)=>de.date===X.date?X.id-de.id:de.date{let de=0,X=0,J=0;for(const ke of n.value)ke.type==="income"?de+=ke.amount:(X+=ke.amount,ke.reimbursable===1&&ke.reimbursed!==1&&(J+=ke.amount));return{income:de,expense:X,pending:J,balance:de-X}}),ce=N("all"),Z=N("all"),A=it(()=>Q.value.filter(de=>!(ce.value!=="all"&&de.type!==ce.value||Z.value==="pending"&&!(de.type==="expense"&&de.reimbursable===1&&de.reimbursed!==1)||Z.value==="done"&&!(de.reimbursable===1&&de.reimbursed===1)))),x=it(()=>{const de=new Map;let X=0;for(const ke of n.value)ke.type==="expense"&&(de.set(ke.category,(de.get(ke.category)||0)+ke.amount),X+=ke.amount);const J=X||1;return Array.from(de.entries()).map(ke=>({name:ke[0],amount:ke[1],percent:Math.round(ke[1]/J*100)})).sort((ke,st)=>st.amount-ke.amount)});function ie(de){return(de/100).toFixed(2)}function xe(de){return(de.type==="income"?"+":"-")+ie(de.amount)}function Y(){t.value=Bo(t.value,-1)}function Ce(){t.value=Bo(t.value,1)}function Ne(){t.value=xt()}gt(a,()=>{m.value&&(m.value="")});async function Xe(){const de=Number(a.value);if(!a.value.trim()||!isFinite(de)||de<=0){m.value="请填写大于 0 的金额";return}if(!d.value){m.value="请选择日期";return}k.value||(k.value=!0,await Kv({type:o.value,category:c.value,amount:Math.round(de*100),date:d.value,note:h.value.trim(),reimbursable:o.value==="expense"&&y.value?1:0,reimbursed:0}),a.value="",h.value="",y.value=!1,m.value="",await L(),Ge("记账已添加"),k.value=!1)}function qe(){a.value="",h.value="",y.value=!1,m.value=""}async function Ue(de){await Vv(de.id),await L(),Ge("已标记为已报销")}function ge(de){O.value=de.id,K.value={type:de.type,category:de.category,amountYuan:ie(de.amount),date:de.date,note:de.note||"",reimbursable:de.reimbursable,reimbursed:de.reimbursed},D.value=!0}async function Me(de){const X=O.value;await Fv(X,de),D.value=!1,await L(),Ge("账目已更新")}async function Ke(){W.value&&W.value.id&&await Nv(W.value.id),W.value=null,await L(),Ge("账目已删除")}return(de,X)=>(F(),q("div",vb,[u("div",mb,[u("button",{class:"icon-btn",onClick:Y},[Oe(lt,{name:"chevron-left",size:16})]),u("span",yb,re(E.value),1),u("button",{class:"icon-btn",onClick:Ce},[Oe(lt,{name:"chevron-right",size:16})]),u("button",{class:"btn btn-sm",onClick:Ne},"回到本月"),X[13]||(X[13]=u("span",{class:"flex1"},null,-1)),$e(u("select",{class:"select w-filter","onUpdate:modelValue":X[0]||(X[0]=J=>ce.value=J)},[...X[11]||(X[11]=[u("option",{value:"all"},"全部类型",-1),u("option",{value:"expense"},"仅支出",-1),u("option",{value:"income"},"仅收入",-1)])],512),[[Fn,ce.value]]),$e(u("select",{class:"select w-filter","onUpdate:modelValue":X[1]||(X[1]=J=>Z.value=J)},[...X[12]||(X[12]=[u("option",{value:"all"},"全部报销",-1),u("option",{value:"pending"},"待报销",-1),u("option",{value:"done"},"已报销",-1)])],512),[[Fn,Z.value]])]),u("div",gb,[u("div",bb,[X[14]||(X[14]=u("div",{class:"muted"},"本月收入(元)",-1)),u("div",wb,re(ie(le.value.income)),1)]),u("div",_b,[X[15]||(X[15]=u("div",{class:"muted"},"本月支出(元)",-1)),u("div",kb,re(ie(le.value.expense)),1)]),u("div",xb,[X[16]||(X[16]=u("div",{class:"muted"},"本月结余(元)",-1)),u("div",{class:et(["stat-num num",{"amt-income":le.value.balance>=0,"amt-expense":le.value.balance<0}])},re(ie(le.value.balance)),3)]),u("div",Cb,[X[17]||(X[17]=u("div",{class:"muted"},"待报销(元)",-1)),u("div",Sb,re(ie(le.value.pending)),1)])]),u("div",Eb,[X[24]||(X[24]=u("div",{class:"sec-head"},[u("span",{class:"sec-title"},"新增一笔"),u("span",{class:"muted form-hint"},"金额必填,回车快速添加")],-1)),u("div",$b,[u("div",Ab,[X[18]||(X[18]=u("label",null,"类型",-1)),u("div",Pb,[u("button",{class:et(["seg-btn",{active:o.value==="expense"}]),onClick:X[2]||(X[2]=J=>o.value="expense")},"支出",2),u("button",{class:et(["seg-btn",{active:o.value==="income"}]),onClick:X[3]||(X[3]=J=>o.value="income")},"收入",2)])]),u("div",Tb,[X[19]||(X[19]=u("label",null,"金额(元,必填)",-1)),$e(u("input",{class:et(["input",{invalid:m.value}]),"onUpdate:modelValue":X[4]||(X[4]=J=>a.value=J),type:"number",min:"0",step:"0.01",placeholder:"0.00",onKeydown:jt(Xe,["enter"])},null,34),[[De,a.value]])]),u("div",Ob,[X[20]||(X[20]=u("label",null,"日期",-1)),$e(u("input",{class:"input",type:"date","onUpdate:modelValue":X[5]||(X[5]=J=>d.value=J)},null,512),[[De,d.value]])]),u("div",Mb,[X[21]||(X[21]=u("label",null,"分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":X[6]||(X[6]=J=>c.value=J)},[(F(!0),q(Re,null,ut(o.value==="expense"?Qt(Wr):Qt(Vo),J=>(F(),q("option",{key:J,value:J},re(J),9,Ib))),128))],512),[[Fn,c.value]])]),o.value==="expense"?(F(),q("div",jb,[X[22]||(X[22]=u("label",null,"报销",-1)),u("button",{class:et(["toggle-btn",{on:y.value}]),onClick:X[7]||(X[7]=J=>y.value=!y.value)},re(y.value?"需要报销":"无需报销"),3)])):Ee("",!0),u("div",Db,[X[23]||(X[23]=u("label",null,"备注",-1)),$e(u("input",{class:"input","onUpdate:modelValue":X[8]||(X[8]=J=>h.value=J),placeholder:"选填,如:客户现场午餐",onKeydown:jt(Xe,["enter"])},null,544),[[De,h.value]])])]),m.value?(F(),q("div",Rb,re(m.value),1)):Ee("",!0),u("div",Lb,[u("button",{class:"btn btn-sm",disabled:!(a.value.trim()||h.value.trim()),onClick:qe},"重置",8,Kb),u("button",{class:"btn btn-primary btn-sm",disabled:k.value,onClick:Xe},"添加记录",8,Fb)])]),x.value.length?(F(),q("div",Nb,[X[25]||(X[25]=u("div",{class:"sec-title"},"本月支出分类",-1)),(F(!0),q(Re,null,ut(x.value,J=>(F(),q("div",{key:J.name,class:"bar-row"},[u("span",Vb,re(J.name),1),u("span",Bb,[u("span",{class:"bar-fill",style:sr({width:J.percent+"%"})},null,4)]),u("span",Ub,re(ie(J.amount))+" 元 · "+re(J.percent)+"%",1)]))),128))])):Ee("",!0),u("div",qb,[u("table",Hb,[X[27]||(X[27]=u("thead",null,[u("tr",null,[u("th",null,"日期"),u("th",null,"分类"),u("th",null,"金额(元)"),u("th",null,"备注"),u("th",null,"报销"),u("th",{class:"th-ops"},"操作")])],-1)),u("tbody",null,[(F(!0),q(Re,null,ut(A.value,J=>(F(),q("tr",{key:J.id},[u("td",Wb,re(J.date),1),u("td",null,[u("span",zb,re(J.category),1)]),u("td",{class:et(["num",J.type==="income"?"amt-income":"amt-expense"])},re(xe(J)),3),u("td",Gb,re(J.note||"--"),1),u("td",null,[J.type!=="expense"||J.reimbursable!==1?(F(),q("span",Yb,"--")):J.reimbursed===1?(F(),q("span",Jb,"已报销")):(F(),q("span",Xb,"待报销"))]),u("td",null,[u("div",Qb,[J.type==="expense"&&J.reimbursable===1&&J.reimbursed!==1?(F(),q("button",{key:0,class:"btn btn-xs",onClick:ke=>Ue(J)},"标记已报销",8,Zb)):Ee("",!0),u("button",{class:"btn btn-xs",onClick:ke=>ge(J)},"编辑",8,ew),u("button",{class:"btn btn-xs",onClick:ke=>W.value=J},"删除",8,tw)])])]))),128)),!A.value.length&&!s.value?(F(),q("tr",nw,[...X[26]||(X[26]=[u("td",{colspan:"6",class:"empty muted"},"本月暂无账目",-1)])])):Ee("",!0)])])]),u("div",rw,"筛选结果 "+re(A.value.length)+" 条 / 本月共 "+re(n.value.length)+" 条",1),Oe(hb,{open:D.value,title:(O.value,"编辑账目"),initial:K.value,onCancel:X[9]||(X[9]=J=>D.value=!1),onSave:Me},null,8,["open","title","initial"]),Oe(ur,{open:!!W.value,title:"删除确认",message:W.value?"将删除 "+W.value.date+" 的账目("+W.value.category+" "+ie(W.value.amount)+" 元)。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:X[10]||(X[10]=J=>W.value=null),onConfirm:Ke},null,8,["open","message"])]))}}),ow=Gt(sw,[["__scopeId","data-v-8acec676"]]),iw={class:"memo-page"},aw={class:"card memo-list"},lw={class:"pane-head"},uw={class:"pane-title"},cw={class:"memo-scroll"},fw=["onClick"],dw={class:"memo-item-title"},pw={class:"muted memo-item-sub"},hw={class:"muted num memo-item-time"},vw={key:0,class:"muted empty"},mw={class:"card memo-editor"},yw={class:"editor-foot"},gw={class:"muted foot-info"},bw=["disabled"],ww=["disabled"],_w={key:1,class:"empty muted editor-empty"},kw=Vt({__name:"MemoView",setup(e){const t=N([]),n=N(null),s=N(!1),o=N(""),a=N(""),c=N(null),d=N(null);async function h(){if(t.value=await Ov(),n.value&&n.value.id){const ce=t.value.find(Z=>Z.id===n.value.id);ce&&(n.value=ce)}}fn(async()=>{await h(),t.value.length&&k(t.value[0]),window.addEventListener("keydown",y)}),dr(()=>window.removeEventListener("keydown",y)),gt(Ea,async ce=>{if(!ce)return;t.value.length||await h();const Z=t.value.find(A=>A.id===ce);Ea.value=null,Z&&D(Z)},{immediate:!0});function y(ce){(ce.ctrlKey||ce.metaKey)&&ce.key.toLowerCase()==="s"&&s.value&&m.value&&(ce.preventDefault(),fe())}const m=it(()=>{if(!s.value)return!1;const ce=n.value?n.value.title:"",Z=n.value?n.value.content:"";return o.value!==ce||a.value!==Z});function k(ce){n.value=ce,s.value=!0,o.value=ce.title,a.value=ce.content}function D(ce){if(!(s.value&&n.value&&n.value.id===ce.id)){if(m.value){d.value={type:"select",memo:ce};return}k(ce)}}function O(){if(m.value){d.value={type:"new"};return}K()}function K(){n.value=null,s.value=!0,o.value="",a.value=""}function W(){n.value?k(n.value):K()}async function fe(){if(!o.value.trim()&&!a.value.trim()){Ge("标题与内容不能都为空");return}if(n.value&&n.value.id)await Iv(n.value.id,o.value,a.value),Ge("备忘已保存");else{const ce=await Mv(o.value,a.value);n.value=ce,o.value=ce.title,a.value=ce.content,Ge("备忘已创建")}await h()}function ee(){n.value&&n.value.id&&(c.value=n.value)}async function E(){c.value&&c.value.id&&(await jv(c.value.id),Ge("备忘已删除")),c.value=null,await h(),K()}function L(){const ce=d.value;d.value=null,ce&&(ce.type==="select"?k(ce.memo):K())}function Q(ce){return(ce.content||"").replace(/\s+/g," ").slice(0,30)}function le(ce){return ce.replace("T"," ").slice(0,16)}return(ce,Z)=>(F(),q("div",iw,[u("aside",aw,[u("div",lw,[u("span",uw,"备忘录("+re(t.value.length)+")",1),u("button",{class:"btn btn-primary btn-sm",onClick:O},"新建")]),u("div",cw,[(F(!0),q(Re,null,ut(t.value,A=>(F(),q("div",{key:A.id,class:et(["memo-item",{active:s.value&&n.value&&n.value.id===A.id}]),onClick:x=>D(A)},[u("div",dw,re(A.title||"无标题"),1),u("div",pw,re(Q(A)||"空"),1),u("div",hw,re(le(A.updated_at)),1)],10,fw))),128)),t.value.length?Ee("",!0):(F(),q("div",vw,"暂无备忘"))])]),u("section",mw,[s.value?(F(),q(Re,{key:0},[$e(u("input",{class:"input title-input","onUpdate:modelValue":Z[0]||(Z[0]=A=>o.value=A),placeholder:"标题"},null,512),[[De,o.value]]),$e(u("textarea",{class:"textarea content-textarea","onUpdate:modelValue":Z[1]||(Z[1]=A=>a.value=A),placeholder:"内容"},null,512),[[De,a.value]]),u("div",yw,[u("span",gw,[m.value?(F(),q(Re,{key:0},[nn("有未保存修改")],64)):n.value&&n.value.id?(F(),q(Re,{key:1},[nn("更新于 "+re(le(n.value.updated_at)),1)],64)):(F(),q(Re,{key:2},[nn("新备忘")],64))]),Z[4]||(Z[4]=u("span",{class:"flex1"},null,-1)),n.value&&n.value.id?(F(),q("button",{key:0,class:"btn btn-sm",onClick:ee},"删除")):Ee("",!0),u("button",{class:"btn btn-sm",disabled:!m.value,onClick:W},"放弃修改",8,bw),u("button",{class:"btn btn-primary btn-sm",disabled:!m.value,onClick:fe},"保存",8,ww)])],64)):(F(),q("div",_w,"选择左侧备忘,或点击右上角新建"))]),Oe(ur,{open:!!c.value,title:"删除确认",message:c.value?"将删除备忘「"+(c.value.title||"无标题")+"」。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:Z[2]||(Z[2]=A=>c.value=null),onConfirm:E},null,8,["open","message"]),Oe(ur,{open:!!d.value,title:"未保存提示",message:"当前备忘有未保存的修改,继续操作将丢失这些修改。","confirm-text":"放弃修改并继续",onCancel:Z[3]||(Z[3]=A=>d.value=null),onConfirm:L},null,8,["open"])]))}}),xw=Gt(kw,[["__scopeId","data-v-74d60dba"]]),Cw=["aria-label"],Sw={class:"dialog-head"},Ew={class:"dialog-title"},$w={class:"dialog-body"},Aw={class:"form-grid"},Pw={class:"field span2"},Tw={class:"field span2"},Ow={class:"field span2"},Mw={class:"pwd-row"},Iw={class:"field span2"},jw={key:0,class:"form-error"},Dw={class:"dialog-btns"},Rw=Vt({__name:"CredentialDialog",props:{open:{type:Boolean},title:{},initial:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N(""),a=N(""),c=N(""),d=N(""),h=N(""),y=N(null);function m(O){n.open&&O.key==="Escape"&&s("cancel")}gt(()=>n.open,async O=>{var K;O?(o.value=n.initial.system,a.value=n.initial.account,c.value=n.initial.password,d.value=n.initial.remark,h.value="",window.addEventListener("keydown",m),await ts(),(K=y.value)==null||K.focus()):window.removeEventListener("keydown",m)}),dr(()=>window.removeEventListener("keydown",m));function k(){const O="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789",K="!@#$%^&*",W=crypto.getRandomValues(new Uint8Array(14));let fe="";for(let ee=0;ee(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:K[6]||(K[6]=Mr(W=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Sw,[u("span",Ew,re(e.title),1),u("button",{class:"icon-btn",title:"关闭",onClick:K[0]||(K[0]=W=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",$w,[u("div",Aw,[u("div",Pw,[K[7]||(K[7]=u("label",null,"系统名称(必填)",-1)),$e(u("input",{ref_key:"systemInput",ref:y,class:"input","onUpdate:modelValue":K[1]||(K[1]=W=>o.value=W),placeholder:"如:企业邮箱 / OA / VPN"},null,512),[[De,o.value]])]),u("div",Tw,[K[8]||(K[8]=u("label",null,"账号(必填)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":K[2]||(K[2]=W=>a.value=W),placeholder:"用户名、工号或邮箱"},null,512),[[De,a.value]])]),u("div",Ow,[K[9]||(K[9]=u("label",null,"密码(必填)",-1)),u("div",Mw,[$e(u("input",{class:"input","onUpdate:modelValue":K[3]||(K[3]=W=>c.value=W),placeholder:"输入或点击生成"},null,512),[[De,c.value]]),u("button",{class:"btn btn-sm",onClick:k},"生成")])]),u("div",Iw,[K[10]||(K[10]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":K[4]||(K[4]=W=>d.value=W),placeholder:"用途、到期时间、负责人等(选填)"},null,512),[[De,d.value]])])]),h.value?(F(),q("div",jw,re(h.value),1)):Ee("",!0)]),u("div",Dw,[u("button",{class:"btn btn-sm",onClick:K[5]||(K[5]=W=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:D},"保存")])],8,Cw)])):Ee("",!0)]),_:1})]))}}),Lw=Gt(Rw,[["__scopeId","data-v-f383b0a6"]]),df=15e4;function qo(e){const t=new Uint8Array(e);let n="";for(let s=0;s{n.value&&(Yo(),n.value=!1,y.value=[],k.value={},Ge("长时间未操作,密码库已自动锁定"))},E_)}function A(){n.value&&Z()}fn(async()=>{t.value=await hf(),window.addEventListener("click",A),window.addEventListener("keydown",A),n.value&&Z()}),dr(()=>{window.removeEventListener("click",A),window.removeEventListener("keydown",A),ce!==null&&window.clearTimeout(ce)});const x=it(()=>{const X=m.value.trim().toLowerCase();return X?y.value.filter(J=>(J.system+" "+J.account+" "+(J.remark||"")).toLowerCase().includes(X)):y.value});async function ie(){if(!s.value){if(c.value="",!o.value){c.value="请输入主密码";return}if(o.value.length<6){c.value="主密码至少 6 位";return}if(o.value!==a.value){c.value="两次输入的主密码不一致";return}s.value=!0;try{await Fw(o.value),o.value="",a.value="",n.value=!0,Z(),await le(),Ge("主密码已设置,密码库已解锁")}catch(X){c.value=X instanceof Error?X.message:"设置失败"}s.value=!1}}async function xe(){if(!s.value){if(h.value="",!d.value){h.value="请输入主密码";return}s.value=!0;try{await Nw(d.value),d.value="",n.value=!0,Z(),await le()}catch(X){h.value=X instanceof Error?X.message:"解锁失败"}s.value=!1}}function Y(){Yo(),n.value=!1,y.value=[],k.value={},ce!==null&&window.clearTimeout(ce),Ge("密码库已锁定")}async function Ce(X){const J=X.id;if(k.value[J]){k.value[J]=!1;return}try{X.passwordPlain=await la(J),k.value[J]=!0}catch(ke){Ge(ke instanceof Error?ke.message:"解密失败")}}async function Ne(X){try{const J=await la(X.id);await $a(J),Ge("密码已复制")}catch(J){Ge(J instanceof Error?J.message:"复制失败")}}async function Xe(X){await $a(X.account),Ge("账号已复制")}function qe(){O.value=null,K.value={system:"",account:"",password:"",remark:""},D.value=!0}async function Ue(X){try{const J=await la(X.id);O.value=X.id,K.value={system:X.system,account:X.account,password:J,remark:X.remark||""},D.value=!0}catch(J){Ge(J instanceof Error?J.message:"解密失败")}}async function ge(X){const J=O.value??void 0;await qw(X,J),D.value=!1,await le(),Ge(J?"账号已更新":"账号已添加")}async function Me(){W.value&&W.value.id&&(await Hw(W.value.id),Ge("账号已删除")),W.value=null,await le()}function Ke(){ee.value="",E.value="",L.value="",Q.value="",fe.value=!0}async function de(){Q.value="";try{const X=await Ww(ee.value,E.value);fe.value=!1,ee.value="",E.value="",L.value="",Ge("主密码已修改,"+X+" 条账号密码已重新加密")}catch(X){Q.value=X instanceof Error?X.message:"修改失败"}}return(X,J)=>(F(),q("div",Gw,[t.value===null?(F(),q("div",Yw,"加载中")):n.value?(F(),q(Re,{key:2},[u("div",n_,[u("div",r_,[Oe(lt,{name:"search",size:14,class:"search-icon"}),$e(u("input",{class:"input","onUpdate:modelValue":J[3]||(J[3]=ke=>m.value=ke),placeholder:"搜索系统名称、账号或备注"},null,512),[[De,m.value]])]),J[16]||(J[16]=u("span",{class:"flex1"},null,-1)),u("button",{class:"btn btn-sm",onClick:Ke},"修改主密码"),u("button",{class:"btn btn-sm",onClick:Y},"锁定"),u("button",{class:"btn btn-primary btn-sm",onClick:qe},"新增账号")]),u("div",s_,[u("table",o_,[J[18]||(J[18]=u("thead",null,[u("tr",null,[u("th",null,"系统名称"),u("th",null,"账号"),u("th",null,"密码"),u("th",null,"备注"),u("th",{class:"th-ops"},"操作")])],-1)),u("tbody",null,[(F(!0),q(Re,null,ut(x.value,ke=>(F(),q("tr",{key:ke.id},[u("td",i_,re(ke.system),1),u("td",null,[u("span",{class:"copyable",title:"点击复制账号",onClick:st=>Xe(ke)},re(ke.account),9,a_)]),u("td",null,[u("div",l_,[u("span",u_,re(k.value[ke.id]?ke.passwordPlain:"........"),1),u("button",{class:"btn btn-xs",onClick:st=>Ce(ke)},re(k.value[ke.id]?"隐藏":"显示"),9,c_),u("button",{class:"btn btn-xs",onClick:st=>Ne(ke)},"复制",8,f_)])]),u("td",d_,re(ke.remark||"--"),1),u("td",null,[u("div",p_,[u("button",{class:"btn btn-xs",onClick:st=>Ue(ke)},"编辑",8,h_),u("button",{class:"btn btn-xs",onClick:st=>W.value=ke},"删除",8,v_)])])]))),128)),x.value.length?Ee("",!0):(F(),q("tr",m_,[...J[17]||(J[17]=[u("td",{colspan:"5",class:"empty muted"},"暂无账号,点击右上角新增",-1)])]))])])]),u("div",y_,"共 "+re(y.value.length)+" 条账号记录 · 密码以 AES-256-GCM 加密存储于本机",1)],64)):(F(),q("div",Jw,[u("div",Xw,[Oe(lt,{name:"lock",size:26})]),t.value===!1?(F(),q(Re,{key:0},[J[12]||(J[12]=u("div",{class:"lock-title"},"设置主密码",-1)),J[13]||(J[13]=u("div",{class:"muted lock-tip"},"主密码用于加密保存在本机的账号密码,遗忘后无法找回,请务必牢记",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[0]||(J[0]=ke=>o.value=ke),placeholder:"设置主密码(至少 6 位)",onKeydown:jt(ie,["enter"])},null,544),[[De,o.value]]),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[1]||(J[1]=ke=>a.value=ke),placeholder:"再次输入主密码",onKeydown:jt(ie,["enter"])},null,544),[[De,a.value]]),c.value?(F(),q("div",Qw,re(c.value),1)):Ee("",!0),u("button",{class:"btn btn-primary lock-btn",disabled:s.value,onClick:ie},"完成设置并解锁",8,Zw)],64)):(F(),q(Re,{key:1},[J[14]||(J[14]=u("div",{class:"lock-title"},"密码库已锁定",-1)),J[15]||(J[15]=u("div",{class:"muted lock-tip"},"输入主密码解锁后查看与复制密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[2]||(J[2]=ke=>d.value=ke),placeholder:"主密码",onKeydown:jt(xe,["enter"])},null,544),[[De,d.value]]),h.value?(F(),q("div",e_,re(h.value),1)):Ee("",!0),u("button",{class:"btn btn-primary lock-btn",disabled:s.value,onClick:xe},"解锁",8,t_)],64))])),Oe(Lw,{open:D.value,title:O.value?"编辑账号":"新增账号",initial:K.value,onCancel:J[4]||(J[4]=ke=>D.value=!1),onSave:ge},null,8,["open","title","initial"]),Oe(ur,{open:!!W.value,title:"删除确认",message:W.value?"将删除系统「"+W.value.system+"」的账号记录。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:J[5]||(J[5]=ke=>W.value=null),onConfirm:Me},null,8,["open","message"]),(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[fe.value?(F(),q("div",{key:0,class:"mask",onClick:J[11]||(J[11]=Mr(ke=>fe.value=!1,["self"]))},[u("div",g_,[u("div",b_,[J[19]||(J[19]=u("span",{class:"dialog-title"},"修改主密码",-1)),u("button",{class:"icon-btn",title:"关闭",onClick:J[6]||(J[6]=ke=>fe.value=!1)},[Oe(lt,{name:"close",size:16})])]),u("div",w_,[u("div",__,[J[20]||(J[20]=u("label",null,"旧主密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[7]||(J[7]=ke=>ee.value=ke)},null,512),[[De,ee.value]])]),u("div",k_,[J[21]||(J[21]=u("label",null,"新主密码(至少 6 位)",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[8]||(J[8]=ke=>E.value=ke)},null,512),[[De,E.value]])]),u("div",x_,[J[22]||(J[22]=u("label",null,"确认新主密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":J[9]||(J[9]=ke=>L.value=ke)},null,512),[[De,L.value]])]),Q.value?(F(),q("div",C_,re(Q.value),1)):Ee("",!0),J[23]||(J[23]=u("div",{class:"muted vp-tip"},"确认后所有账号密码将使用新主密码重新加密",-1))]),u("div",S_,[u("button",{class:"btn btn-sm",onClick:J[10]||(J[10]=ke=>fe.value=!1)},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:de},"确认修改")])])])):Ee("",!0)]),_:1})]))]))}}),A_=Gt($_,[["__scopeId","data-v-6820bc9c"]]);function P_(e){return'"'+(e==null?"":String(e)).replace(/"/g,'""')+'"'}async function Ou(e,t){const s="\uFEFF"+t.map(d=>d.map(P_).join(",")).join(`\r -`);if(Zr.isNativePlatform()){const{downloadText:d}=await lf(async()=>{const{downloadText:h}=await Promise.resolve().then(()=>pg);return{downloadText:h}},void 0,import.meta.url);return d(e,s)}const o=new Blob([s],{type:"text/csv;charset=utf-8"}),a=URL.createObjectURL(o),c=document.createElement("a");return c.href=a,c.download=e,c.click(),window.setTimeout(()=>URL.revokeObjectURL(a),1e4),""}class T_ extends Ir{constructor(){super("intern_worklog_users"),this.version(1).stores({user:"id, &username"})}}const Or=new T_,pi="intern_worklog",tl="dsh_session_user";function hi(){try{const e=localStorage.getItem(tl);if(!e)return null;const t=JSON.parse(e);if(t&&t.userId&&t.username)return t}catch{}return null}function mf(e){localStorage.setItem(tl,JSON.stringify(e))}function yf(){localStorage.removeItem(tl)}const nl="dsh_cloud_creds";function gf(e,t){localStorage.setItem(nl,JSON.stringify({username:e,password:t}))}function vi(){try{const e=localStorage.getItem(nl);if(!e)return null;const t=JSON.parse(e);if(t&&t.username&&t.password)return t}catch{}return null}function bf(){localStorage.removeItem(nl)}function rl(e){qh(new tf(pi+"_"+e))}async function O_(e,t,n){const s=e.trim();if(s.length<2||s.length>20)throw new Error("用户名需 2 到 20 个字符");if(t.length<6)throw new Error("登录密码至少 6 位");if(await Or.user.where("username").equals(s).first())throw new Error("用户名已存在");const a=el(),c=await Wo(t,a),d="u_"+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,6);await Or.user.add({id:d,username:s,pwd_hash:c,pwd_salt:a,created_at:new Date().toISOString()}),rl(d);let h=0;n&&await wf()&&(h=await R_(),await Or.user.update(d,{legacy_imported_at:new Date().toISOString()}));const y={userId:d,username:s};return mf(y),gf(y.username,t),h&&L_(h),y}async function M_(e,t){const n=e.trim(),s=await Or.user.where("username").equals(n).first();if(!s)throw new Error("用户不存在");if(await Wo(t,s.pwd_salt)!==s.pwd_hash)throw new Error("密码不正确");rl(s.id);const a={userId:s.id,username:s.username};return mf(a),gf(a.username,t),a}async function I_(){Yo(),nf(),yf(),bf()}async function j_(e,t){const n=hi();if(!n)throw new Error("未登录");if(t.length<6)throw new Error("新密码至少 6 位");const s=await Or.user.get(n.userId);if(!s)throw new Error("用户不存在");if(await Wo(e,s.pwd_salt)!==s.pwd_hash)throw new Error("旧密码不正确");const a=el(),c=await Wo(t,a);await Or.user.update(s.id,{pwd_hash:c,pwd_salt:a})}async function D_(){const e=hi();if(!e)throw new Error("未登录");Yo(),nf(),await Ir.delete(pi+"_"+e.userId),await Or.user.delete(e.userId),yf(),bf()}async function wf(){return Ir.exists(pi)}async function R_(){if(!ne)throw new Error("用户数据库未就绪");const e=new tf(pi),t=await Promise.all([e.project.toArray(),e.work_log.toArray(),e.log_item.toArray(),e.attendance.toArray(),e.weekly_note.toArray(),e.setting.toArray(),e.memo.toArray(),e.credential.toArray()]);await ne.transaction("rw",[ne.project,ne.work_log,ne.log_item,ne.attendance,ne.weekly_note,ne.setting,ne.memo,ne.credential],async()=>{await Promise.all([ne.project.clear(),ne.work_log.clear(),ne.log_item.clear(),ne.attendance.clear(),ne.weekly_note.clear(),ne.setting.clear(),ne.memo.clear(),ne.credential.clear()]),t[0].length&&await ne.project.bulkAdd(t[0]),t[1].length&&await ne.work_log.bulkAdd(t[1]),t[2].length&&await ne.log_item.bulkAdd(t[2]),t[3].length&&await ne.attendance.bulkAdd(t[3]),t[4].length&&await ne.weekly_note.bulkAdd(t[4]),t[5].length&&await ne.setting.bulkAdd(t[5]),t[6].length&&await ne.memo.bulkAdd(t[6]),t[7].length&&await ne.credential.bulkAdd(t[7])});const n=t[0].length+t[1].length+t[2].length+t[3].length+t[4].length+t[6].length+t[7].length;return e.close(),n}function L_(e){try{sessionStorage.setItem("dsh_migrate_toast",String(e))}catch{}}const K_="https://daywk.linyux.cn",Aa=["project","work_log","log_item","attendance","weekly_note","setting","memo","credential","transaction"],Pa=new Set(["sync_cursor","sync_last_time","sync_token","last_project","last_category"]);function F_(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function Mu(e){const t={...e};return delete t.id,t}function Iu(e){return JSON.stringify(e)}async function N_(e){return ne[e].toArray()}async function V_(){for(const e of Aa){const t=ne[e],n=await t.toArray();for(const s of n){if(e==="setting"&&Pa.has(s.key))continue;const o={};s.uuid||(o.uuid=F_()),s.updated_at||(o.updated_at=s.created_at||wt()),Object.keys(o).length&&await t.update(s.id,o)}}}async function sl(){return await yt("sync_base_url","")||K_}async function _f(){const e=vi();if(!e)throw new Error("未登录,无法同步");return{baseUrl:await sl(),username:e.username,password:e.password}}async function B_(){return Cf(await _f())}async function kf(){const e=vi();if(!e)throw new Error("未登录");const t=await sl(),n={"Content-Type":"application/json"},s=JSON.stringify({username:e.username,password:e.password});let o=await fetch(t+"/api/auth/register",{method:"POST",headers:n,body:s});if(o.status===409){if(o=await fetch(t+"/api/auth/login",{method:"POST",headers:n,body:s}),!o.ok)throw new Error("云端已存在同名账号且密码不一致,请检查")}else if(!o.ok)throw new Error("云端绑定失败:"+o.status)}async function U_(){return vi()!=null}async function q_(){return yt("sync_last_time","")}async function xf(e,t){const n=await fetch(e+"/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:t.username.trim(),password:t.password})});if(!n.ok)throw new Error("云端账号或密码不正确");const s=await n.json();if(!s||!s.token)throw new Error("云端登录异常");return String(s.token)}async function H_(e,t){let n=await yt("sync_token","");return n||(n=await xf(e,t),await kt("sync_token",n),n)}let $s=!1,To=!1,Ta=!1,Gr=null,wn=null,Oa="",ju=!1;async function Yr(){if($s){To=!0;return}try{if(!await U_())return;await Cf(await _f())}catch{}}function W_(){ju||(ju=!0,ne.on("changes",()=>{Ta||$s||(Gr&&window.clearTimeout(Gr),Gr=window.setTimeout(()=>{Yr()},3e3))}))}function z_(){wn&&(wn.close(),wn=null,Oa=""),Gr&&(window.clearTimeout(Gr),Gr=null)}function G_(e,t){const n=e+"|"+t;if(!(wn&&Oa===n)){wn&&(wn.close(),wn=null);try{wn=new EventSource(e+"/api/events?token="+encodeURIComponent(t)),Oa=n,wn.onmessage=()=>{Yr()}}catch{wn=null}}}async function Cf(e){if($s)return To=!0,{pushed:0,pulled:0,removed:0,at:""};$s=!0,Ta=!0;try{const t=await Y_(e);return To&&(To=!1,window.setTimeout(()=>{Yr()},800)),t}finally{$s=!1,Ta=!1}}async function Y_(e){const t=e.baseUrl.trim().replace(/\/+$/,"");if(!t)throw new Error("请先配置同步服务地址");await V_();const n=await ne.sync_mirror.toArray(),s=new Map;for(const ee of n)s.set(ee.table+"|"+ee.uuid,ee);const o={},a=[];let c=0;for(const ee of Aa){let E=await N_(ee);ee==="setting"&&(E=E.filter(Q=>!Pa.has(Q.key)));const L=new Map;for(const Q of E)L.set(Q.uuid,Q);for(const[Q,le]of L){const ce=Mu(le),Z=Iu(ce),A=s.get(ee+"|"+Q);(!A||A.hash!==Z)&&(o[ee]=o[ee]||[],o[ee].push(ce),c++)}for(const[Q,le]of s)Q.startsWith(ee+"|")&&!L.has(le.uuid)&&a.push({table:ee,uuid:le.uuid,deleted_at:wt()});o[ee]=o[ee]||[]}const d=await H_(t,e),h=ee=>fetch(t+"/api/sync",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+ee},body:JSON.stringify({device:"client",tables:o,tombstones:a})});let y=await h(d);if(y.status===401){await kt("sync_token","");const ee=await xf(t,e);await kt("sync_token",ee),y=await h(ee)}if(!y.ok)throw new Error("同步服务返回 "+y.status);const m=await y.json(),k=m.tables||{},D=m.tombstones||[];let O=0,K=0;const W=[];for(const ee of Aa){const E=ne[ee],L=await E.toArray(),Q=new Map;for(const x of L)Q.set(x.uuid,x);const le=k[ee]||[],ce=new Map;for(const x of le)ce.set(x.uuid,x);const Z=new Set(D.filter(x=>x.table===ee).map(x=>x.uuid));for(const[x,ie]of Q)Z.has(x)&&(await E.delete(ie.id),K++);for(const[x,ie]of le){if(Z.has(x))continue;const xe=Q.get(x);if(!xe)await E.add({...ie}),O++;else{const Y=String(xe.updated_at||"");String(ie.updated_at||"")>Y&&(await E.update(xe.id,{...ie}),O++)}}const A=await E.toArray();for(const x of A)ee==="setting"&&Pa.has(x.key)||W.push({table:ee,uuid:x.uuid,hash:Iu(Mu(x))})}await ne.sync_mirror.clear(),W.length&&await ne.sync_mirror.bulkAdd(W.map(ee=>({...ee}))),G_(t,d);const fe=wt();return await kt("sync_last_time",fe),{pushed:c,pulled:O,removed:K,at:fe}}const J_={class:"settings"},X_={class:"card section"},Q_={class:"muted acc-line"},Z_={class:"ai-grid"},e1={class:"rule-item"},t1={class:"rule-item"},n1={class:"rule-item"},r1={key:0,class:"form-error"},s1={class:"rule-save"},o1={class:"card section"},i1={class:"rule-grid"},a1={class:"rule-item"},l1={class:"rule-item"},u1={class:"rule-item"},c1={class:"rule-item"},f1={class:"rule-item"},d1={class:"card section"},p1={class:"proj-add"},h1={key:0,class:"muted proj-tip"},v1=["onKeydown"],m1=["onClick"],y1=["onClick"],g1=["onClick"],b1={key:1,class:"muted"},w1={class:"card section"},_1={class:"card section"},k1={class:"muted acc-line"},x1={class:"rule-item"},C1={class:"rule-save"},S1=["disabled"],E1={key:0,class:"muted acc-line"},$1={key:1,class:"form-error"},A1={class:"card section"},P1={class:"ai-grid"},T1={class:"rule-item"},O1={class:"rule-item"},M1={class:"rule-item"},I1={class:"card section"},j1={class:"backup-row"},D1={key:0,class:"import-error"},R1=Vt({__name:"SettingsView",setup(e){var je;const t=N({work_start:"09:00",work_end:"18:00",grace_minutes:10,lunch_minutes:60,remind_weekly:"friday"}),n=N([]),s=N(""),o=N(""),a=N(""),c=N(""),d=N(""),h=N(""),y=N(null),m=N(""),k=N(null),D=N(null),O=N(""),K=N(((je=hi())==null?void 0:je.username)||""),W=N(""),fe=N(""),ee=N(""),E=N(""),L=N(!1),Q="0.2.0",le=N(""),ce=N(""),Z=N(""),A=N(""),x=N(!1),ie=N("");async function xe(){var w;le.value=await sl(),ce.value=((w=vi())==null?void 0:w.username)||"",ie.value=await q_()}async function Y(){await kt("sync_base_url",le.value.trim()),Ge("同步地址已保存")}async function Ce(){A.value="";try{await kf(),Ge("云端绑定已重建")}catch(w){A.value=w instanceof Error?w.message:"绑定失败"}}async function Ne(){if(!x.value){A.value="",x.value=!0;try{await Y();const w=await B_();ie.value=w.at,Z.value="推送 "+w.pushed+" 条 · 拉取 "+w.pulled+" 条 · 删除 "+w.removed+" 条",Ge("同步完成")}catch(w){A.value=w instanceof Error?w.message:"同步失败"}x.value=!1}}async function Xe(){if(E.value="",fe.value!==ee.value){E.value="两次输入的新密码不一致";return}try{await j_(W.value,fe.value),W.value="",fe.value="",ee.value="",Ge("登录密码已修改")}catch(w){E.value=w instanceof Error?w.message:"修改失败"}}async function qe(){await D_(),window.location.reload()}async function Ue(){t.value=await jr(),n.value=await Ks(!0),a.value=(await Xa()).join(` -`),c.value=await yt("ai_base_url",""),d.value=await yt("ai_api_key",""),h.value=await yt("ai_model",""),await xe()}async function ge(){await kt("ai_base_url",c.value.trim()),await kt("ai_api_key",d.value.trim()),await kt("ai_model",h.value.trim()),Ge("AI 配置已保存")}async function Me(){const w=xt(),g=await Promise.all([fi("2000-01-01",w),Ks(!0)]),P=g[0],ae=g[1],se=new Map(ae.map(oe=>[oe.id,oe.name])),ue=[["日期","分类","项目","内容","耗时(分钟)","成果","待跟进","收获","备注"]];for(const oe of P)ue.push([oe.date,Ja(oe.category),oe.project_id&&se.get(oe.project_id)||"",oe.content,oe.minutes==null?"":oe.minutes,oe.is_milestone?"是":"",oe.needs_followup?"是":"",oe.takeaway||"",oe.remark||""]);const ye=await Ou("工作记录_"+w.replace(/-/g,"")+".csv",ue);Ge(ye?"CSV 已导出到:"+ye:"CSV 已导出到系统下载目录")}async function Ke(){const w=xt(),g=await Promise.all([jr(),ci("2000-01-01",w)]),P=g[0],ae=g[1],se=["周日","周一","周二","周三","周四","周五","周六"],ue=[["日期","星期","状态","上班时间","下班时间","地点","类型","说明"]];for(const oe of ae){const we=qs(oe,oe.date,P,oe.date===w);ue.push([oe.date,se[rs(oe.date).getDay()],we.label,oe.clock_in_at?Vn(oe.clock_in_at):"",oe.clock_out_at?Vn(oe.clock_out_at):"",oe.location||"",oe.kind==="makeup"?"补卡":oe.kind==="leave"?"休假":"正常",oe.note||""])}const ye=await Ou("考勤记录_"+w.replace(/-/g,"")+".csv",ue);Ge(ye?"CSV 已导出到:"+ye:"CSV 已导出到系统下载目录")}fn(Ue);async function de(){await kt("work_start",t.value.work_start),await kt("work_end",t.value.work_end),await kt("grace_minutes",String(t.value.grace_minutes)),await kt("lunch_minutes",String(t.value.lunch_minutes)),await kt("remind_weekly",t.value.remind_weekly),Ge("打卡规则已保存")}async function X(){await sf(a.value.split(` -`)),Ge("常用地点已保存")}async function J(){const w=s.value.trim();if(w){try{await mv(w),o.value="",s.value=""}catch{o.value="项目名已存在"}await Ue()}}function ke(w){y.value=w.id,m.value=w.name}async function st(w){const g=m.value.trim();if(g)try{await yv(w.id,g),o.value=""}catch{o.value="项目名已存在"}y.value=null,await Ue()}async function pt(w){await gv(w.id,w.archived!==1),await Ue()}async function ht(){const w=await Bv(),g=await Za("实习日志备份_"+xt().replace(/-/g,"")+".json",w);Ge(g?"备份已导出到:"+g:"备份已导出到系统下载目录")}function Yt(w){const g=w.target,P=g.files&&g.files[0];if(O.value="",!P)return;const ae=P.name;P.text().then(se=>{D.value={name:ae,text:se}}),g.value=""}async function Jt(){if(D.value)try{await Uv(D.value.text),D.value=null,O.value="",await Ue(),Ge("数据导入完成")}catch(w){D.value=null,O.value=w instanceof Error?w.message:"导入失败"}}return(w,g)=>(F(),q("div",J_,[u("div",X_,[g[23]||(g[23]=u("div",{class:"section-title"},"账号与隐私",-1)),u("div",Q_,"版本 v"+re(Qt(Q))+" · 当前用户:"+re(K.value)+" · 每位用户独立数据库隔离存储于本机 · 登录密码仅保存 PBKDF2 哈希",1),u("div",Z_,[u("div",e1,[g[20]||(g[20]=u("label",null,"旧登录密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[0]||(g[0]=P=>W.value=P)},null,512),[[De,W.value]])]),u("div",t1,[g[21]||(g[21]=u("label",null,"新登录密码(至少 6 位)",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[1]||(g[1]=P=>fe.value=P)},null,512),[[De,fe.value]])]),u("div",n1,[g[22]||(g[22]=u("label",null,"确认新登录密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[2]||(g[2]=P=>ee.value=P)},null,512),[[De,ee.value]])])]),E.value?(F(),q("div",r1,re(E.value),1)):Ee("",!0),u("div",s1,[u("button",{class:"btn btn-primary btn-sm",onClick:Xe},"修改登录密码"),u("button",{class:"btn btn-sm btn-danger",onClick:g[3]||(g[3]=P=>L.value=!0)},"删除此用户及全部数据")])]),u("div",o1,[g[30]||(g[30]=u("div",{class:"section-title"},"打卡规则",-1)),u("div",i1,[u("div",a1,[g[24]||(g[24]=u("label",null,"上班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":g[4]||(g[4]=P=>t.value.work_start=P)},null,512),[[De,t.value.work_start]])]),u("div",l1,[g[25]||(g[25]=u("label",null,"下班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":g[5]||(g[5]=P=>t.value.work_end=P)},null,512),[[De,t.value.work_end]])]),u("div",u1,[g[26]||(g[26]=u("label",null,"迟到宽限(分钟)",-1)),$e(u("input",{type:"number",class:"input",min:"0","onUpdate:modelValue":g[6]||(g[6]=P=>t.value.grace_minutes=P)},null,512),[[De,t.value.grace_minutes,void 0,{number:!0}]])]),u("div",c1,[g[27]||(g[27]=u("label",null,"午休扣除(分钟)",-1)),$e(u("input",{type:"number",class:"input",min:"0","onUpdate:modelValue":g[7]||(g[7]=P=>t.value.lunch_minutes=P)},null,512),[[De,t.value.lunch_minutes,void 0,{number:!0}]])]),u("div",f1,[g[29]||(g[29]=u("label",null,"周记提醒",-1)),$e(u("select",{class:"select","onUpdate:modelValue":g[8]||(g[8]=P=>t.value.remind_weekly=P)},[...g[28]||(g[28]=[u("option",{value:"friday"},"每周五提醒",-1),u("option",{value:"off"},"关闭",-1)])],512),[[Fn,t.value.remind_weekly]])])]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:de},"保存规则")])]),u("div",d1,[g[31]||(g[31]=u("div",{class:"section-title"},"项目管理",-1)),u("div",p1,[$e(u("input",{class:"input","onUpdate:modelValue":g[9]||(g[9]=P=>s.value=P),placeholder:"新项目名称",onKeydown:jt(J,["enter"])},null,544),[[De,s.value]]),u("button",{class:"btn btn-sm",onClick:J},"添加")]),o.value?(F(),q("div",h1,re(o.value),1)):Ee("",!0),(F(!0),q(Re,null,ut(n.value,P=>(F(),q("div",{key:P.id,class:"proj-row"},[y.value===P.id?(F(),q(Re,{key:0},[$e(u("input",{class:"input","onUpdate:modelValue":g[10]||(g[10]=ae=>m.value=ae),onKeydown:jt(ae=>st(P),["enter"])},null,40,v1),[[De,m.value]]),u("button",{class:"btn btn-sm",onClick:ae=>st(P)},"保存",8,m1),u("button",{class:"btn btn-sm",onClick:g[11]||(g[11]=ae=>y.value=null)},"取消")],64)):(F(),q(Re,{key:1},[u("span",{class:et(["proj-name",{archived:P.archived===1}])},re(P.name),3),u("button",{class:"icon-btn",title:"重命名",onClick:ae=>ke(P)},[Oe(lt,{name:"edit",size:14})],8,y1),u("button",{class:"btn btn-sm",onClick:ae=>pt(P)},re(P.archived===1?"恢复":"归档"),9,g1)],64))]))),128)),n.value.length?Ee("",!0):(F(),q("div",b1,"暂无项目,先添加一个"))]),u("div",w1,[g[33]||(g[33]=u("div",{class:"section-title"},"常用地点",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":g[12]||(g[12]=P=>a.value=P),placeholder:"每行一个地点,如:公司、客户现场、出差、居家办公"},null,512),[[De,a.value]]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:X},"保存地点"),g[32]||(g[32]=u("span",{class:"muted loc-note"},"打卡时可直接输入新地点,保存后自动加入列表",-1))])]),u("div",_1,[g[35]||(g[35]=u("div",{class:"section-title"},"多端数据同步",-1)),u("div",k1,"云端账号:"+re(ce.value||"未绑定")+" · 登录即自动绑定并同步(变更实时推送 + 每 5 分钟兜底);密码库以密文同步,主密码永不出本机",1),u("div",x1,[g[34]||(g[34]=u("label",null,"同步服务地址(默认即可)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[13]||(g[13]=P=>le.value=P),placeholder:"https://daywk.linyux.cn"},null,512),[[De,le.value]])]),u("div",C1,[u("button",{class:"btn btn-sm",onClick:Y},"保存地址"),u("button",{class:"btn btn-primary btn-sm",disabled:x.value,onClick:Ne},re(x.value?"同步中":"立即同步"),9,S1),u("button",{class:"btn btn-sm",onClick:Ce},"重建云端绑定")]),Z.value?(F(),q("div",E1,"上次同步:"+re(ie.value||"--")+" · "+re(Z.value),1)):Ee("",!0),A.value?(F(),q("div",$1,re(A.value),1)):Ee("",!0)]),u("div",A1,[g[40]||(g[40]=u("div",{class:"section-title"},"AI 润色配置(可选)",-1)),u("div",P1,[u("div",T1,[g[36]||(g[36]=u("label",null,"接口地址(OpenAI 兼容,到 /v1 为止)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[14]||(g[14]=P=>c.value=P),placeholder:"https://api.example.com/v1"},null,512),[[De,c.value]])]),u("div",O1,[g[37]||(g[37]=u("label",null,"API Key",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[15]||(g[15]=P=>d.value=P),placeholder:"sk-..."},null,512),[[De,d.value]])]),u("div",M1,[g[38]||(g[38]=u("label",null,"模型名称",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[16]||(g[16]=P=>h.value=P),placeholder:"如:deepseek-chat"},null,512),[[De,h.value]])])]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:ge},"保存 AI 配置"),g[39]||(g[39]=u("span",{class:"muted loc-note"},"配置仅保存在本机浏览器;总结页可用 AI 润色草稿,需服务端允许浏览器跨域",-1))])]),u("div",I1,[g[41]||(g[41]=u("div",{class:"section-title"},"数据备份",-1)),u("div",j1,[u("button",{class:"btn btn-sm",onClick:ht},"导出 JSON 备份"),u("button",{class:"btn btn-sm",onClick:g[17]||(g[17]=P=>{var ae;return(ae=k.value)==null?void 0:ae.click()})},"导入 JSON 备份"),u("button",{class:"btn btn-sm",onClick:Me},"导出工作记录 CSV"),u("button",{class:"btn btn-sm",onClick:Ke},"导出考勤 CSV"),u("input",{ref_key:"fileInput",ref:k,type:"file",accept:"application/json,.json",style:{display:"none"},onChange:Yt},null,544)]),O.value?(F(),q("div",D1,re(O.value),1)):Ee("",!0),g[42]||(g[42]=u("div",{class:"muted backup-note"},"数据保存在浏览器 IndexedDB 中,建议定期导出 JSON 备份。",-1))]),Oe(ur,{open:!!D.value,title:"导入确认",message:D.value?"将从文件「"+D.value.name+"」导入备份。现有全部数据将被覆盖,且不可恢复,请先确认已导出当前备份。":"","confirm-text":"覆盖导入",danger:"",onCancel:g[18]||(g[18]=P=>D.value=null),onConfirm:Jt},null,8,["open","message"]),Oe(ur,{open:L.value,title:"删除用户确认",message:"将永久删除用户「"+K.value+"」及其全部数据:工作日志、考勤、备忘录、账号密码库都将被清除,且不可恢复。请确认。","confirm-text":"永久删除",danger:"",onCancel:g[19]||(g[19]=P=>L.value=!1),onConfirm:qe},null,8,["open","message"])]))}}),L1=Gt(R1,[["__scopeId","data-v-bbfd64cb"]]),K1={class:"login-page"},F1={class:"card login-card"},N1={class:"login-brand"},V1={class:"brand-icon"},B1={class:"seg"},U1=["placeholder"],q1={key:1,class:"mig-row"},H1={key:2,class:"form-error"},W1=["disabled"],z1=Vt({__name:"LoginView",emits:["login"],setup(e,{emit:t}){const n=t,s=N("login"),o=N(""),a=N(""),c=N(""),d=N(!0),h=N(!1),y=N(""),m=N(!1);fn(async()=>{h.value=await wf()});function k(O){s.value=O,y.value="",c.value=""}async function D(){if(!m.value){y.value="",m.value=!0;try{let O;if(s.value==="login")O=await M_(o.value,a.value);else{if(a.value.length<6){y.value="登录密码至少 6 位",m.value=!1;return}if(a.value!==c.value){y.value="两次输入的密码不一致",m.value=!1;return}O=await O_(o.value,a.value,d.value)}n("login",O)}catch(O){y.value=O instanceof Error?O.message:"操作失败"}m.value=!1}}return(O,K)=>(F(),q("div",K1,[u("div",F1,[u("div",N1,[u("div",V1,[Oe(lt,{name:"calendar",size:22})]),K[6]||(K[6]=u("div",{class:"login-title"},"实习工作日志",-1)),K[7]||(K[7]=u("div",{class:"muted login-sub"},"打卡 · 记录 · 总结 · 备忘录 · 密码库",-1)),K[8]||(K[8]=u("div",{class:"muted login-sub"},"每位用户独立数据库,数据彼此隔离并保存在本机",-1))]),u("div",B1,[u("button",{class:et(["seg-btn",{active:s.value==="login"}]),onClick:K[0]||(K[0]=W=>k("login"))},"登录",2),u("button",{class:et(["seg-btn",{active:s.value==="create"}]),onClick:K[1]||(K[1]=W=>k("create"))},"创建用户",2)]),$e(u("input",{class:"input","onUpdate:modelValue":K[2]||(K[2]=W=>o.value=W),placeholder:"用户名(2 到 20 个字符)",onKeydown:jt(D,["enter"])},null,544),[[De,o.value]]),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":K[3]||(K[3]=W=>a.value=W),placeholder:s.value==="login"?"登录密码":"设置登录密码(至少 6 位)",onKeydown:jt(D,["enter"])},null,40,U1),[[De,a.value]]),s.value==="create"?$e((F(),q("input",{key:0,type:"password",class:"input","onUpdate:modelValue":K[4]||(K[4]=W=>c.value=W),placeholder:"再次输入密码",onKeydown:jt(D,["enter"])},null,544)),[[De,c.value]]):Ee("",!0),s.value==="create"&&h.value?(F(),q("label",q1,[$e(u("input",{type:"checkbox","onUpdate:modelValue":K[5]||(K[5]=W=>d.value=W)},null,512),[[Sh,d.value]]),K[9]||(K[9]=u("span",null,"导入本机原有工作日志数据到此用户(原数据保留不删除)",-1))])):Ee("",!0),y.value?(F(),q("div",H1,re(y.value),1)):Ee("",!0),u("button",{class:"btn btn-primary login-btn",disabled:m.value,onClick:D},re(s.value==="login"?"登录":"创建并进入"),9,W1),K[10]||(K[10]=u("div",{class:"muted login-note"}," 登录后自动开启云端同步(密码会保存在本机用于云同步);系统只保存密码哈希,忘记密码将无法访问该用户数据 ",-1))])]))}}),G1=Gt(z1,[["__scopeId","data-v-d3d6c8cb"]]),Y1={key:1,class:"app"},J1={class:"side"},X1=["data-tip","onClick"],Q1={class:"main"},Z1={class:"topbar"},e0={class:"title"},t0={class:"gsearch"},n0={key:0,class:"gs-panel"},r0={key:0,class:"gs-group muted"},s0=["onMousedown"],o0={class:"tag"},i0={class:"gs-text"},a0={class:"muted num gs-date"},l0={key:1,class:"gs-group muted"},u0=["onMousedown"],c0={class:"gs-text"},f0={class:"muted gs-sub"},d0={key:1,class:"gs-empty muted"},p0={class:"user-chip num"},h0=["disabled"],v0={class:"num"},m0={class:"content"},y0={class:"content-inner"},g0={class:"toast-wrap"},b0=Vt({__name:"App",setup(e){const t=Hv(),n=N(hi());async function s(ge){n.value=ge,location.hash="#/calendar",le.value="calendar",await xe(),await Ue(),c();try{await kf(),await Yr()}catch{}showToast("欢迎,"+ge.username);const Me=sessionStorage.getItem("dsh_migrate_toast");Me&&(sessionStorage.removeItem("dsh_migrate_toast"),showToast("已迁移原有数据 "+Me+" 条"))}async function o(){z_(),a!==null&&(window.clearInterval(a),a=null),await I_(),n.value=null,le.value="calendar",location.hash="#/calendar",showToast("已退出登录")}let a=null;function c(){W_(),a!==null&&window.clearInterval(a),a=window.setInterval(()=>{Yr()},60*1e3),Yr()}const d=N(null),h=N(""),y=N(!1),m=N({logs:[],memos:[]});let k=null;const D=it(()=>!!(m.value.logs.length||m.value.memos.length));function O(){k&&window.clearTimeout(k);const ge=h.value;k=window.setTimeout(async()=>{const Me=ge.trim();if(!Me){m.value={logs:[],memos:[]};return}const Ke=await Promise.all([Dv(Me,8),Rv(Me,4)]);m.value={logs:Ke[0],memos:Ke[1]}},200)}function K(){h.value="",m.value={logs:[],memos:[]},y.value=!1}function W(ge){Sa.value=ge.date,ce("calendar"),K()}function fe(ge){Ea.value=ge.id,ce("memo"),K()}function ee(){window.setTimeout(()=>{y.value=!1},150)}function E(ge){var Me;(ge.ctrlKey||ge.metaKey)&&ge.key.toLowerCase()==="k"&&(ge.preventDefault(),(Me=d.value)==null||Me.focus())}const L=[{key:"calendar",name:"日历",icon:"calendar"},{key:"today",name:"详情",icon:"edit"},{key:"stats",name:"统计",icon:"chart"},{key:"report",name:"总结",icon:"export"},{key:"ledger",name:"记账",icon:"wallet"},{key:"memo",name:"备忘录",icon:"memo"},{key:"vault",name:"密码库",icon:"lock"},{key:"settings",name:"设置",icon:"settings"}];function Q(){const ge=(location.hash||"").replace("#/","");return L.some(Me=>Me.key===ge)?ge:"calendar"}const le=N(Q());window.addEventListener("hashchange",()=>{le.value=Q()});function ce(ge){location.hash="#/"+ge}const Z=it(()=>L.find(ge=>ge.key===le.value)||L[0]),A=N(xt()),x=N(void 0),ie=N(!1);async function xe(){if(x.value=await mn(A.value),ie.value=!1,new Date().getHours()<4){const Me=await mn(Kn(A.value,-1));ie.value=!!(Me&&Me.clock_in_at&&!Me.clock_out_at)}}const Y=it(()=>{const ge=x.value;return ge&&ge.clock_in_at&&!ge.clock_out_at?!0:ie.value&&!(ge&&ge.clock_in_at)}),Ce=it(()=>{const ge=x.value;return!!(ge&&ge.clock_in_at&&ge.clock_out_at)}),Ne=it(()=>{const ge=x.value;return Y.value?"下班打卡":Ce.value?"已打卡 "+Vn(ge==null?void 0:ge.clock_in_at)+" - "+Vn(ge==null?void 0:ge.clock_out_at):"上班打卡"});async function Xe(){if(Y.value)try{await wv()}catch{}else await of(A.value);await xe(),Sr()}gt(Hs,()=>{n.value&&xe()});const qe=N(!1);async function Ue(){if((await jr()).remind_weekly==="off"){qe.value=!1;return}const Me=new Date().getDay();if(Me===5||Me===6||Me===0){const Ke=await Qa(Es(A.value));qe.value=!Ke||!Ke.highlights&&!Ke.challenges&&!Ke.plan_next}else qe.value=!1}return fn(async()=>{window.addEventListener("keydown",E),n.value&&(rl(n.value.userId),await xe(),await Ue(),c())}),(ge,Me)=>{var Ke;return n.value?(F(),q("div",Y1,[u("nav",J1,[(F(),q(Re,null,ut(L,de=>u("button",{key:de.key,class:et(["nav-btn",{active:le.value===de.key}]),"data-tip":de.name,onClick:X=>ce(de.key)},[Oe(lt,{name:de.icon,size:18},null,8,["name"])],10,X1)),64))]),u("div",Q1,[u("header",Z1,[u("span",e0,re(Z.value.name),1),u("div",t0,[Oe(lt,{name:"search",size:14,class:"gs-icon"}),$e(u("input",{ref_key:"gsInput",ref:d,class:"input gs-input","onUpdate:modelValue":Me[0]||(Me[0]=de=>h.value=de),placeholder:"搜索工作记录与备忘录(Ctrl+K)",onInput:O,onFocus:Me[1]||(Me[1]=de=>y.value=!0),onBlur:ee,onKeydown:jt(K,["esc"])},null,544),[[De,h.value]]),y.value&&h.value.trim()?(F(),q("div",n0,[D.value?(F(),q(Re,{key:0},[m.value.logs.length?(F(),q("div",r0,"工作记录")):Ee("",!0),(F(!0),q(Re,null,ut(m.value.logs,de=>(F(),q("div",{key:"l"+de.id,class:"gs-item",onMousedown:Mr(X=>W(de),["prevent"])},[u("span",o0,re(Qt(Ja)(de.category)),1),u("span",i0,re(de.content),1),u("span",a0,re(de.date),1)],40,s0))),128)),m.value.memos.length?(F(),q("div",l0,"备忘录")):Ee("",!0),(F(!0),q(Re,null,ut(m.value.memos,de=>(F(),q("div",{key:"m"+de.id,class:"gs-item",onMousedown:Mr(X=>fe(de),["prevent"])},[u("span",c0,re(de.title||"无标题"),1),u("span",f0,re(de.content),1)],40,u0))),128))],64)):(F(),q("div",d0,"无匹配结果"))])):Ee("",!0)]),Me[4]||(Me[4]=u("span",{class:"flex1"},null,-1)),qe.value?(F(),q("button",{key:0,class:"week-tip",onClick:Me[2]||(Me[2]=de=>ce("report"))},[...Me[3]||(Me[3]=[u("span",{class:"dot",style:{background:"var(--warn)"}},null,-1),nn(" 填写本周周记 ",-1)])])):Ee("",!0),u("span",p0,re((Ke=n.value)==null?void 0:Ke.username),1),u("button",{class:"btn btn-sm",onClick:o},"退出"),u("button",{class:"btn btn-primary btn-sm",disabled:Ce.value,onClick:Xe},[Oe(lt,{name:Ce.value?"check-circle":"clock",size:14},null,8,["name"]),u("span",v0,re(Ne.value),1)],8,h0)]),u("main",m0,[u("div",y0,[le.value==="calendar"?(F(),It(hy,{key:0})):le.value==="today"?(F(),It(wy,{key:1})):le.value==="stats"?(F(),It(Xy,{key:2})):le.value==="report"?(F(),It(Jg,{key:3})):le.value==="ledger"?(F(),It(ow,{key:4})):le.value==="memo"?(F(),It(xw,{key:5})):le.value==="vault"?(F(),It(A_,{key:6})):(F(),It(L1,{key:7}))])])]),u("div",g0,[Oe(mh,{name:"toast"},{default:fr(()=>[(F(!0),q(Re,null,ut(Qt(t),de=>(F(),q("div",{key:de.id,class:"toast"},re(de.text),1))),128))]),_:1})])])):(F(),It(G1,{key:0,onLogin:s}))}}}),w0=Gt(b0,[["__scopeId","data-v-219a8436"]]);Mh(w0).mount("#app");"serviceWorker"in navigator&&location.protocol.startsWith("http")&&window.addEventListener("load",()=>{navigator.serviceWorker.register("sw.js").catch(()=>{})});export{ff as W,lf as _,fg as b,cf as r}; + `+v:""),this.inner=v||null):typeof p=="object"&&(this.message="".concat(p.name," ").concat(p.message),this.inner=p):(this.message=X[i]||l,this.inner=null)}return W(f).from(Jt),r[i]=f,r},{}),w=(je.Syntax=SyntaxError,je.Type=TypeError,je.Range=RangeError,G.reduce(function(r,i){return r[i+"Error"]=je[i],r},{}));G=Ye.reduce(function(r,i){return["Syntax","Type","Range"].indexOf(i)===-1&&(r[i+"Error"]=je[i]),r},{});function g(){}function P(r){return r}function ae(r,i){return r==null||r===P?i:function(l){return i(r(l))}}function se(r,i){return function(){r.apply(this,arguments),i.apply(this,arguments)}}function ue(r,i){return r===g?i:function(){var l=r.apply(this,arguments),f=(l!==void 0&&(arguments[0]=l),this.onsuccess),p=this.onerror,v=(this.onsuccess=null,this.onerror=null,i.apply(this,arguments));return f&&(this.onsuccess=this.onsuccess?se(f,this.onsuccess):f),p&&(this.onerror=this.onerror?se(p,this.onerror):p),v!==void 0?v:l}}function ye(r,i){return r===g?i:function(){r.apply(this,arguments);var l=this.onsuccess,f=this.onerror;this.onsuccess=this.onerror=null,i.apply(this,arguments),l&&(this.onsuccess=this.onsuccess?se(l,this.onsuccess):l),f&&(this.onerror=this.onerror?se(f,this.onerror):f)}}function oe(r,i){return r===g?i:function(){var l=r.apply(this,arguments),f=(h(arguments[0],l),this.onsuccess),p=this.onerror,v=(this.onsuccess=null,this.onerror=null,i.apply(this,arguments));return f&&(this.onsuccess=this.onsuccess?se(f,this.onsuccess):f),p&&(this.onerror=this.onerror?se(p,this.onerror):p),l===void 0?v===void 0?void 0:v:h(l,v)}}function we(r,i){return r===g?i:function(){return i.apply(this,arguments)!==!1&&r.apply(this,arguments)}}function H(r,i){return r===g?i:function(){var l=r.apply(this,arguments);if(l&&typeof l.then=="function"){for(var f=this,p=arguments.length,v=new Array(p);p--;)v[p]=arguments[p];return l.then(function(){return i.apply(f,v)})}return i.apply(this,arguments)}}G.ModifyError=pt,G.DexieError=ke,G.BulkError=ht;var U=typeof location<"u"&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function Y(r){U=r}var Ae={},Fe=100,Je=typeof Promise>"u"?[]:(Ye=Promise.resolve(),typeof crypto<"u"&&crypto.subtle?[Je=crypto.subtle.digest("SHA-512",new Uint8Array([0])),y(Je),Ye]:[Ye,y(Ye),Ye]),Ye=Je[0],Br=Je[1],Br=Br&&Br.then,Qe=Ye&&Ye.constructor,vt=!!Je[2],_t=function(r,i){Hn.push([r,i]),Bt&&(queueMicrotask(Ef),Bt=!1)},Xt=!0,Bt=!0,Zt=[],pr=[],Ot=P,$t={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:g,pgp:!1,env:{},finalize:g},Ie=$t,Hn=[],hr=0,Ws=[];function Se(r){if(typeof this!="object")throw new TypeError("Promises must be constructed via new");this._listeners=[],this._lib=!1;var i=this._PSD=Ie;if(typeof r!="function"){if(r!==Ae)throw new TypeError("Not a function");this._state=arguments[1],this._value=arguments[2],this._state===!1&&yi(this,this._value)}else this._state=null,this._value=null,++i.ref,function l(f,p){try{p(function(v){if(f._state===null){if(v===f)throw new TypeError("A promise cannot be resolved with itself.");var b=f._lib&&Rr();v&&typeof v.then=="function"?l(f,function(_,S){v instanceof Se?v._then(_,S):v.then(_,S)}):(f._state=!0,f._value=v,il(f)),b&&Lr()}},yi.bind(null,f))}catch(v){yi(f,v)}}(this,r)}var mi={get:function(){var r=Ie,i=Js;function l(f,p){var v=this,b=!r.global&&(r!==Ie||i!==Js),_=b&&!zn(),S=new Se(function(V,T){gi(v,new ol(ll(f,r,b,_),ll(p,r,b,_),V,T,r))});return this._consoleTask&&(S._consoleTask=this._consoleTask),S}return l.prototype=Ae,l},set:function(r){K(this,"then",r&&r.prototype===Ae?mi:{get:function(){return r},set:mi.set})}};function ol(r,i,l,f,p){this.onFulfilled=typeof r=="function"?r:null,this.onRejected=typeof i=="function"?i:null,this.resolve=l,this.reject=f,this.psd=p}function yi(r,i){var l,f;pr.push(i),r._state===null&&(l=r._lib&&Rr(),i=Ot(i),r._state=!1,r._value=i,f=r,Zt.some(function(p){return p._value===f._value})||Zt.push(f),il(r),l)&&Lr()}function il(r){var i=r._listeners;r._listeners=[];for(var l=0,f=i.length;l{for(var b=Zt.length;b;)if(Zt[--b]._value===v._value)return Zt.splice(b,1)})(i),l.resolve(f)}catch(v){l.reject(v)}finally{--hr==0&&bi(),--l.psd.ref||l.psd.finalize()}}function Ef(){vr($t,function(){Rr()&&Lr()})}function Rr(){var r=Xt;return Bt=Xt=!1,r}function Lr(){var r,i,l;do for(;0.",ul="String expected.",Qs="__dbnames",_i="readonly",ki="readwrite";function yr(r,i){return r?i?function(){return r.apply(this,arguments)&&i.apply(this,arguments)}:r:i}var cl={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function Zs(r){return typeof r!="string"||/\./.test(r)?function(i){return i}:function(i){return i[r]===void 0&&r in i&&delete(i=Ce(i))[r],i}}function fl(){throw je.Type("Entity instances must never be new:ed. Instances are generated by the framework bypassing the constructor.")}function tt(r,i){try{var l=dl(r),f=dl(i);if(l!==f)return l==="Array"?1:f==="Array"?-1:l==="binary"?1:f==="binary"?-1:l==="string"?1:f==="string"?-1:l==="Date"?1:f!=="Date"?NaN:-1;switch(l){case"number":case"Date":case"string":return i{var _=T,S=b;if(typeof S!="function"&&S!==null)throw new TypeError("Class extends value "+String(S)+" is not a constructor or null");function V(){this.constructor=_}function T(){return b!==null&&b.apply(this,arguments)||this}return n(_,S),_.prototype=S===null?Object.create(S):(V.prototype=S.prototype,new V),Object.defineProperty(T.prototype,"db",{get:function(){return i},enumerable:!1,configurable:!0}),T.prototype.table=function(){return l},T})(r)),new Set),p=r.prototype;p;p=y(p))Object.getOwnPropertyNames(p).forEach(function(b){return f.add(b)});function v(b){if(!b)return b;var _,S=Object.create(r.prototype);for(_ in b)if(!f.has(_))try{S[_]=b[_]}catch{}return S}return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=v,this.hook("reading",v),r},ft.prototype.defineClass=function(){return this.mapToClass(function(r){h(this,r)})},ft.prototype.add=function(r,i){var l=this,f=this.schema.primKey,p=f.auto,v=f.keyPath,b=r;return v&&p&&(b=Zs(v)(r)),this._trans("readwrite",function(_){return l.core.mutate({trans:_,type:"add",keys:i!=null?[i]:null,values:[b]})}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):_.lastResult}).then(function(_){if(v)try{Z(r,v,_)}catch{}return _})},ft.prototype.upsert=function(r,i){var l=this,f=this.schema.primKey.keyPath;return this._trans("readwrite",function(p){return l.core.get({trans:p,key:r}).then(function(v){var b=v??{};return vl(b,i),f&&Z(b,f,r),l.core.mutate({trans:p,type:"put",values:[b],keys:[r],upsert:!0,updates:{keys:[r],changeSpecs:[i]}}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):!!v})})})},ft.prototype.update=function(r,i){return typeof r!="object"||d(r)?this.where(":id").equals(r).modify(i):(r=ce(r,this.schema.primKey.keyPath))===void 0?Ct(new je.InvalidArgument("Given object does not contain its primary key")):this.where(":id").equals(r).modify(i)},ft.prototype.put=function(r,i){var l=this,f=this.schema.primKey,p=f.auto,v=f.keyPath,b=r;return v&&p&&(b=Zs(v)(r)),this._trans("readwrite",function(_){return l.core.mutate({trans:_,type:"put",values:[b],keys:i!=null?[i]:null})}).then(function(_){return _.numFailures?Se.reject(_.failures[0]):_.lastResult}).then(function(_){if(v)try{Z(r,v,_)}catch{}return _})},ft.prototype.delete=function(r){var i=this;return this._trans("readwrite",function(l){return i.core.mutate({trans:l,type:"delete",keys:[r]}).then(function(f){return eo(i,[r],f)}).then(function(f){return f.numFailures?Se.reject(f.failures[0]):void 0})})},ft.prototype.clear=function(){var r=this;return this._trans("readwrite",function(i){return r.core.mutate({trans:i,type:"deleteRange",range:cl}).then(function(l){return eo(r,null,l)})}).then(function(i){return i.numFailures?Se.reject(i.failures[0]):void 0})},ft.prototype.bulkGet=function(r){var i=this;return this._trans("readonly",function(l){return i.core.getMany({keys:r,trans:l}).then(function(f){return f.map(function(p){return i.hook.reading.fire(p)})})})},ft.prototype.bulkAdd=function(r,i,l){var f=this,p=Array.isArray(i)?i:void 0,v=(l=l||(p?void 0:i))?l.allKeys:void 0;return this._trans("readwrite",function(b){var _=f.schema.primKey,V=_.auto,_=_.keyPath;if(_&&p)throw new je.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(p&&p.length!==r.length)throw new je.InvalidArgument("Arguments objects and keys must have the same length");var S=r.length,V=_&&V?r.map(Zs(_)):r;return f.core.mutate({trans:b,type:"add",keys:p,values:V,wantResults:v}).then(function(T){var C=T.numFailures,$=T.failures;if(C===0)return v?T.results:T.lastResult;throw new ht("".concat(f.name,".bulkAdd(): ").concat(C," of ").concat(S," operations failed"),$)})})},ft.prototype.bulkPut=function(r,i,l){var f=this,p=Array.isArray(i)?i:void 0,v=(l=l||(p?void 0:i))?l.allKeys:void 0;return this._trans("readwrite",function(b){var _=f.schema.primKey,V=_.auto,_=_.keyPath;if(_&&p)throw new je.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(p&&p.length!==r.length)throw new je.InvalidArgument("Arguments objects and keys must have the same length");var S=r.length,V=_&&V?r.map(Zs(_)):r;return f.core.mutate({trans:b,type:"put",keys:p,values:V,wantResults:v}).then(function(T){var C=T.numFailures,$=T.failures;if(C===0)return v?T.results:T.lastResult;throw new ht("".concat(f.name,".bulkPut(): ").concat(C," of ").concat(S," operations failed"),$)})})},ft.prototype.bulkUpdate=function(r){var i=this,l=this.core,f=r.map(function(b){return b.key}),p=r.map(function(b){return b.changes}),v=[];return this._trans("readwrite",function(b){return l.getMany({trans:b,keys:f,cache:"clone"}).then(function(_){var S=[],V=[],T=(r.forEach(function(C,$){var R=C.key,I=C.changes,M=_[$];if(M){for(var j=0,z=Object.keys(I);jB+te&&j(B+V)})})}var z=Fr(l)&&l.limit===1/0&&(typeof r!="function"||I)&&{index:l.index,range:l.range};return j(0).then(function(){if(0{for(var Be=Math.min(me.length,Te.length),Ge=-1,Ze=0;Ze=$})).length===0?Se.resolve():(j.forEach(function(B){M.push(function(){var te,pe,ve,_e=z,me=B._cfg.dbschema,Pe=(uo(C,_e,I),uo(C,me,I),z=C._dbSchema=me,Ti(_e,me)),be=(Pe.add.forEach(function(Te){Oi(I,Te[0],Te[1].primKey,Te[1].indexes)}),Pe.change.forEach(function(Te){if(Te.recreate)throw new je.Upgrade("Not yet support for changing primary key");var he=I.objectStore(Te.name);Te.add.forEach(function(Ve){return ao(he,Ve)}),Te.change.forEach(function(Ve){he.deleteIndex(Ve.name),ao(he,Ve)}),Te.del.forEach(function(Ve){return he.deleteIndex(Ve)})}),B._cfg.contentUpgrade);if(be&&B._cfg.version>$)return oo(C,I),R._memoizedTables={},te=A(me),Pe.del.forEach(function(Te){te[Te]=_e[Te]}),Pi(C,[C.Transaction.prototype]),io(C,[C.Transaction.prototype],c(te),te),R.schema=te,(pe=fe(be))&&Kr(),me=Se.follow(function(){var Te;(ve=be(R))&&pe&&(Te=zn.bind(null,null),ve.then(Te,Te))}),ve&&typeof ve.then=="function"?Se.resolve(ve):me.then(function(){return ve})}),M.push(function(te){var pe,ve,_e=B._cfg.dbschema;pe=_e,ve=te,[].slice.call(ve.db.objectStoreNames).forEach(function(me){return pe[me]==null&&ve.db.deleteObjectStore(me)}),Pi(C,[C.Transaction.prototype]),io(C,[C.Transaction.prototype],C._storeNames,C._dbSchema),R.schema=C._dbSchema}),M.push(function(te){C.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(C.idbdb.version/10)===B._cfg.version?(C.idbdb.deleteObjectStore("$meta"),delete C._dbSchema.$meta,C._storeNames=C._storeNames.filter(function(pe){return pe!=="$meta"})):te.objectStore("$meta").put(B._cfg.version,"version"))})}),function B(){return M.length?Se.resolve(M.shift()(R.idbtrans)).then(B):Se.resolve()}().then(function(){Cl(z,I)}))}).catch(b);var S,V;c(p).forEach(function(T){Oi(l,T,p[T].primKey,p[T].indexes)}),oo(r,l),Se.follow(function(){return r.on.populate.fire(v)}).catch(b)})}function Ff(r,i){Cl(r._dbSchema,i),i.db.version%10!=0||i.objectStoreNames.contains("$meta")||i.db.createObjectStore("$meta").add(Math.ceil(i.db.version/10-1),"version");var l=lo(0,r.idbdb,i);uo(r,r._dbSchema,i);for(var f=0,p=Ti(l,r._dbSchema).change;f{if(b.change.length||b.recreate)return console.warn("Unable to patch indexes of table ".concat(b.name," because it has changes on the type of index or primary key.")),{value:void 0};var _=i.objectStore(b.name);b.add.forEach(function(S){U&&console.debug("Dexie upgrade patch: Creating missing index ".concat(b.name,".").concat(S.src)),ao(_,S)})})(p[f]);if(typeof v=="object")return v.value}}function Ti(r,i){var l,f={del:[],add:[],change:[]};for(l in r)i[l]||f.del.push(l);for(l in i){var p=r[l],v=i[l];if(p){var b={name:l,def:v,recreate:!1,del:[],add:[],change:[]};if(""+(p.primKey.keyPath||"")!=""+(v.primKey.keyPath||"")||p.primKey.auto!==v.primKey.auto)b.recreate=!0,f.change.push(b);else{var _=p.idxByName,S=v.idxByName,V=void 0;for(V in _)S[V]||b.del.push(V);for(V in S){var T=_[V],C=S[V];T?T.src!==C.src&&b.change.push(C):b.add.push(C)}(0{var r,i,l;return typeof FinalizationRegistry<"u"&&typeof WeakRef<"u"?(r=new Set,i=new FinalizationRegistry(function(f){r.delete(f)}),{toArray:function(){return Array.from(r).map(function(f){return f.deref()}).filter(function(f){return f!==void 0})},add:function(f){var p=new WeakRef(f._novip);r.add(p),i.register(f._novip,p,p),r.size>f._options.maxConnections&&(p=r.values().next().value,r.delete(p),i.unregister(p))},remove:function(f){if(f)for(var p=r.values(),v=p.next();!v.done;){var b=v.value;if(b.deref()===f._novip)return r.delete(b),void i.unregister(b);v=p.next()}}}):(l=[],{toArray:function(){return l},add:function(f){l.push(f._novip)},remove:function(f){f&&(f=l.indexOf(f._novip))!==-1&&l.splice(f,1)}})})();function Mi(r,i){var l=r._dbNamesDB;return l||(l=r._dbNamesDB=new Mn(Qs,{addons:[],indexedDB:r,IDBKeyRange:i})).version(1).stores({dbnames:"name"}),l.table("dbnames")}function Ii(r){return r&&typeof r.databases=="function"}function ji(r){return Wn(function(){return Ie.letThrough=!0,r()})}function Di(r){return!("from"in r)}var Dt=function(r,i){var l;if(!this)return l=new Dt,r&&"d"in r&&h(l,r),l;h(this,arguments.length?{d:1,from:r,to:1Math.pow(2,62)?0:j.oldVersion,C=z<1,r.idbdb=M.result,v&&Ff(r,T),Kf(r,z/10,T,R))},R),M.onsuccess=mt(function(){T=null;var j,z,B,te,pe,ve,_e=r.idbdb=M.result,me=E(_e.objectStoreNames);if(0"u"?Se.resolve():!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise(function($){function R(){return indexedDB.databases().finally($)}S=setInterval(R,100),R()}).finally(function(){return clearInterval(S)}):Promise.resolve()).then(_)]).then(function(){return b(),i.onReadyBeingFired=[],Se.resolve(ji(function(){return r.on.ready.fire(r.vip)})).then(function $(){var R;if(0i.limit?f.length=i.limit:r.length===i.limit&&f.length{if(l===void 0)return f!==void 0?-1:0;if(f===void 0)return 1;if((l=tt(l,f))===0){if(p&&v)return 0;if(p)return 1;if(v)return-1}return l})(r.lower,i.lower,r.lowerOpen,i.lowerOpen)<=0&&0<=((l,f,p,v)=>{if(l===void 0)return f!==void 0?1:0;if(f===void 0)return-1;if((l=tt(l,f))===0){if(p&&v)return 0;if(p)return-1;if(v)return 1}return l})(r.upper,i.upper,r.upperOpen,i.upperOpen)}function zf(r,i,l,f){r.subscribers.add(l),f.addEventListener("abort",function(){var p,v;r.subscribers.delete(l),r.subscribers.size===0&&(p=r,v=i,setTimeout(function(){p.subscribers.size===0&&ge(v,p)},3e3))})}var Gf={stack:"dbcore",level:0,name:"Cache",create:function(r){var i=r.schema.name;return s(s({},r),{transaction:function(l,f,p){var v,b,_=r.transaction(l,f,p);return f==="readwrite"&&(p=(v=new AbortController).signal,_.addEventListener("abort",(b=function(S){return function(){if(v.abort(),f==="readwrite"){for(var V=new Set,T=0,C=l;T{var z=gr["idb://".concat(R,"/").concat(I)];if(!z)return[];if(!(R=z.queries[M]))return[null,!1,z,null];var B=R[(j.query?j.query.index.name:null)||""];if(!B)return[null,!1,z,null];switch(M){case"query":var te=(pe=j.direction)!=null?pe:"next",pe=B.find(function(ve){var _e;return ve.req.limit===j.limit&&ve.req.values===j.values&&((_e=ve.req.direction)!=null?_e:"next")===te&&Dl(ve.req.query.range,j.query.range)});return pe?[pe,!0,z,B]:[B.find(function(ve){var _e;return("limit"in ve.req?ve.req.limit:1/0)>=j.limit&&((_e=ve.req.direction)!=null?_e:"next")===te&&(!j.values||ve.req.values)&&Wf(ve.req.query.range,j.query.range)}),!1,z,B];case"count":return pe=B.find(function(ve){return Dl(ve.req.query.range,j.query.range)}),[pe,!!pe,z,B]}})(i,l,"query",v),$=C[0],V=C[2],T=C[3],$&&C[1]?$.obsSet=v.obsSet:(C=f.query(v).then(function(R){var I=R.result;if($&&($.res=I),b){for(var M=0,j=I.length;M{var pe=Rr();try{v&&Kr();var ve=Wn(r,te);return ve=v?ve.finally(zn):ve}finally{pe&&Lr()}})(z={subscr:j,signal:b.signal,requery:$,querier:r,trans:null}),C||(Jn.storagemutated.subscribe(I),C=!0),Promise.resolve(B).then(function(te){l=!0,i=te,_||z.signal.aborted||(R()||(V=j,R())?$():(S={},wi(function(){return!_&&p.next&&p.next(te)})))},function(te){l=!1,["DatabaseClosedError","AbortError"].includes(te==null?void 0:te.name)||_||wi(function(){_||p.error&&p.error(te)})}))};return setTimeout($,0),T});return f.hasValue=function(){return l},f.getValue=function(){return i},f}var br=Mn;function Hi(r){var i=Xn;try{Xn=!0,Jn.storagemutated.fire(r),Fi(r,!0)}finally{Xn=i}}D(br,s(s({},G),{delete:function(r){return new br(r,{addons:[]}).delete()},exists:function(r){return new br(r,{addons:[]}).open().then(function(i){return i.close(),!0}).catch("NoSuchDatabaseError",function(){return!1})},getDatabaseNames:function(r){try{return i=br.dependencies,l=i.indexedDB,i=i.IDBKeyRange,(Ii(l)?Promise.resolve(l.databases()).then(function(f){return f.map(function(p){return p.name}).filter(function(p){return p!==Qs})}):Mi(l,i).toCollection().primaryKeys()).then(r)}catch{return Ct(new je.MissingAPI)}var i,l},defineClass:function(){return function(r){h(this,r)}},ignoreTransaction:function(r){return Ie.trans?vr(Ie.transless||$t,r):r()},vip:ji,async:function(r){return function(){try{var i=Ni(r.apply(this,arguments));return i&&typeof i.then=="function"?i:Se.resolve(i)}catch(l){return Ct(l)}}},spawn:function(r,i,l){try{var f=Ni(r.apply(l,i||[]));return f&&typeof f.then=="function"?f:Se.resolve(f)}catch(p){return Ct(p)}},currentTransaction:{get:function(){return Ie.trans||null}},waitFor:function(r,i){return r=Se.resolve(typeof r=="function"?br.ignoreTransaction(r):r).timeout(i||6e4),Ie.trans?Ie.trans.waitFor(r):r},Promise:Se,debug:{get:function(){return U},set:function(r){Y(r)}},derive:W,extend:h,props:D,override:L,Events:os,on:Jn,liveQuery:Rl,extendObservabilitySet:fo,getByKeyPath:ce,setByKeyPath:Z,delByKeyPath:function(r,i){typeof i=="string"?Z(r,i,void 0):"length"in i&&[].map.call(i,function(l){Z(r,l,void 0)})},shallowClone:A,deepClone:Ce,getObjectDiff:Vi,cmp:tt,asap:le,minKey:-1/0,addons:[],connections:{get:cs.toArray},errnames:Yt,dependencies:mo,cache:gr,semVer:"4.4.6",version:"4.4.6".split(".").map(function(r){return parseInt(r)}).reduce(function(r,i,l){return r+i/Math.pow(10,2*l)})})),br.maxKey=ls(br.dependencies.IDBKeyRange),typeof dispatchEvent<"u"&&typeof addEventListener<"u"&&(Jn(so,function(r){Xn||(r=new CustomEvent(Si,{detail:r}),Xn=!0,dispatchEvent(r),Xn=!1)}),addEventListener(Si,function(r){r=r.detail,Xn||Hi(r)}));var Ur,Xn=!1,Ll=function(){};return typeof BroadcastChannel<"u"&&((Ll=function(){(Ur=new BroadcastChannel(Si)).onmessage=function(r){return r.data&&Hi(r.data)}})(),typeof Ur.unref=="function"&&Ur.unref(),Jn(so,function(r){Xn||Ur.postMessage(r)})),typeof addEventListener<"u"&&(addEventListener("pagehide",function(r){if(!Mn.disableBfCache&&r.persisted){U&&console.debug("Dexie: handling persisted pagehide"),Ur!=null&&Ur.close();for(var i=0,l=cs.toArray();in.key===e);return t?t.label:"其他"}const Wh={class:"dialog",role:"dialog","aria-label":"编辑工作记录"},zh={class:"dialog-head"},Gh={key:0,class:"muted dialog-sub"},Yh={class:"dialog-body"},Jh={class:"form-grid"},Xh={class:"field span2"},Qh={key:0,class:"form-error"},Zh={class:"field"},ev=["value"],tv={class:"field"},nv=["value"],rv={class:"field"},sv={class:"field"},ov={class:"field span2"},iv={class:"field"},av={class:"field"},lv={class:"dialog-btns"},uv=Vt({__name:"EditLogDialog",props:{open:{type:Boolean},item:{},projects:{},date:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N(""),a=N(null),c=N("dev"),d=N(null),h=N(""),y=N(""),m=N(0),k=N(0),D=N(""),O=N(null),K=it(()=>{var L;const ee=n.projects.filter(Q=>Q.archived!==1),E=(L=n.item)==null?void 0:L.project_id;if(E&&!ee.some(Q=>Q.id===E)){const Q=n.projects.find(ce=>ce.id===E),le=ee.slice();return Q&&le.unshift({...Q,name:Q.name+"(已归档)"}),le}return ee});function W(ee){n.open&&ee.key==="Escape"&&s("cancel")}gt(()=>n.open,async ee=>{var E;if(ee){const L=n.item;o.value=(L==null?void 0:L.content)??"",a.value=(L==null?void 0:L.project_id)??null,c.value=(L==null?void 0:L.category)??"dev",d.value=(L==null?void 0:L.minutes)??null,h.value=(L==null?void 0:L.takeaway)??"",y.value=(L==null?void 0:L.remark)??"",m.value=(L==null?void 0:L.is_milestone)??0,k.value=(L==null?void 0:L.needs_followup)??0,D.value="",window.addEventListener("keydown",W),await ts(),(E=O.value)==null||E.focus()}else window.removeEventListener("keydown",W)}),dr(()=>window.removeEventListener("keydown",W)),gt(o,()=>{D.value&&(D.value="")});function de(){const ee=o.value.trim();if(!ee){D.value="请填写工作内容";return}if(!n.item||!n.item.id){s("cancel");return}s("save",{id:n.item.id,content:ee,project_id:a.value,category:c.value,minutes:d.value&&d.value>0?d.value:null,takeaway:h.value.trim()||null,remark:y.value.trim()||null,is_milestone:m.value?1:0,needs_followup:k.value?1:0})}return(ee,E)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:E[10]||(E[10]=Mr(L=>s("cancel"),["self"]))},[u("div",Wh,[u("div",zh,[u("div",null,[E[11]||(E[11]=u("div",{class:"dialog-title"},"编辑工作记录",-1)),e.date?(F(),q("div",Gh,re(e.date),1)):Ee("",!0)]),u("button",{class:"icon-btn",title:"关闭",onClick:E[0]||(E[0]=L=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",Yh,[u("div",Jh,[u("div",Xh,[E[12]||(E[12]=u("label",null,"工作内容(必填)",-1)),$e(u("input",{ref_key:"contentInput",ref:O,class:et(["input",{invalid:D.value}]),"onUpdate:modelValue":E[1]||(E[1]=L=>o.value=L),onKeydown:jt(de,["enter"])},null,34),[[De,o.value]]),D.value?(F(),q("div",Qh,re(D.value),1)):Ee("",!0)]),u("div",Zh,[E[14]||(E[14]=u("label",null,"所属项目",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[2]||(E[2]=L=>a.value=L)},[E[13]||(E[13]=u("option",{value:null},"无项目",-1)),(F(!0),q(Re,null,ut(K.value,L=>(F(),q("option",{key:L.id,value:L.id},re(L.name),9,ev))),128))],512),[[Fn,a.value]])]),u("div",tv,[E[15]||(E[15]=u("label",null,"工作分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[3]||(E[3]=L=>c.value=L)},[(F(!0),q(Re,null,ut(Qt(Us),L=>(F(),q("option",{key:L.key,value:L.key},re(L.label),9,nv))),128))],512),[[Fn,c.value]])]),u("div",rv,[E[16]||(E[16]=u("label",null,"耗时(分钟)",-1)),$e(u("input",{class:"input",type:"number",min:"0","onUpdate:modelValue":E[4]||(E[4]=L=>d.value=L),placeholder:"选填"},null,512),[[De,d.value,void 0,{number:!0}]])]),u("div",sv,[E[17]||(E[17]=u("label",null,"主要收获",-1)),$e(u("input",{class:"input","onUpdate:modelValue":E[5]||(E[5]=L=>h.value=L),placeholder:"一句话:学到了什么"},null,512),[[De,h.value]])]),u("div",ov,[E[18]||(E[18]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":E[6]||(E[6]=L=>y.value=L),placeholder:"背景、链接、未决事项(选填)"},null,512),[[De,y.value]])]),u("div",iv,[E[19]||(E[19]=u("label",null,"成果标记",-1)),u("button",{class:et(["toggle-btn",{on:m.value===1}]),onClick:E[7]||(E[7]=L=>m.value=m.value===1?0:1)},re(m.value===1?"已标记为成果":"未标记"),3)]),u("div",av,[E[20]||(E[20]=u("label",null,"待跟进",-1)),u("button",{class:et(["toggle-btn",{onwarn:k.value===1}]),onClick:E[8]||(E[8]=L=>k.value=k.value===1?0:1)},re(k.value===1?"需要跟进":"无需跟进"),3)])])]),u("div",lv,[u("button",{class:"btn btn-sm",onClick:E[9]||(E[9]=L=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:de},"保存修改")])])])):Ee("",!0)]),_:1})]))}}),cv=Gt(uv,[["__scopeId","data-v-63bc0b48"]]);function Ss(e){return e<10?"0"+e:String(e)}function Nn(e){return e.getFullYear()+"-"+Ss(e.getMonth()+1)+"-"+Ss(e.getDate())}function xt(){return Nn(new Date)}function wt(){const e=new Date;return Nn(e)+"T"+Ss(e.getHours())+":"+Ss(e.getMinutes())+":"+Ss(e.getSeconds())}function Vn(e){if(!e)return"--:--";const t=e.indexOf("T");return t>=0?e.slice(t+1,t+6):e.slice(0,5)}function rs(e){const t=e.split("-").map(Number);return new Date(t[0],t[1]-1,t[2])}function Kn(e,t){const n=rs(e);return n.setDate(n.getDate()+t),Nn(n)}function Bo(e,t){const n=rs(e),s=n.getDate();n.setDate(1),n.setMonth(n.getMonth()+t);const o=new Date(n.getFullYear(),n.getMonth()+1,0).getDate();return n.setDate(Math.min(s,o)),Nn(n)}function Es(e){const t=rs(e),n=(t.getDay()+6)%7;return t.setDate(t.getDate()-n),Nn(t)}function fv(e){const t=rs(e).getDay();return t===0||t===6}function dv(e,t){return Math.round((new Date(t).getTime()-new Date(e).getTime())/6e4)}function rf(e){const t=rs(e),n=["周日","周一","周二","周三","周四","周五","周六"];return t.getFullYear()+" 年 "+(t.getMonth()+1)+" 月 "+t.getDate()+" 日 "+n[t.getDay()]}async function yt(e,t){const n=await ne.setting.get(e);return n?n.value:t}async function kt(e,t){await ne.setting.put({key:e,value:t})}async function jr(){const e=await Promise.all([yt("work_start","09:00"),yt("work_end","18:00"),yt("grace_minutes","10"),yt("lunch_minutes","60"),yt("remind_weekly","friday")]);return{work_start:e[0],work_end:e[1],grace_minutes:Number(e[2])||0,lunch_minutes:Number(e[3])||0,remind_weekly:e[4]}}async function pv(){const e=await yt("last_project",""),t=await yt("last_category","dev");return{project_id:e?Number(e):null,category:t||"dev"}}async function hv(){return yt("last_location","")}async function vv(e,t){const n=t.trim();await kt("last_location",n),n&&await Uo(n);const s=await mn(e);s&&s.id?await ne.attendance.update(s.id,{location:n||null}):n&&await ne.attendance.add({date:e,clock_in_at:null,clock_out_at:null,kind:"normal",note:null,location:n,created_at:wt()})}async function Xa(){const e=await yt("location_presets","");if(!e)return $u.slice();try{const t=JSON.parse(e);if(Array.isArray(t))return t.filter(n=>typeof n=="string"&&n.trim()).map(n=>n.trim())}catch{}return $u.slice()}async function sf(e){const t=Array.from(new Set(e.map(n=>n.trim()).filter(Boolean)));await kt("location_presets",JSON.stringify(t))}async function Uo(e){const t=e.trim();if(!t)return;const n=await Xa();n.includes(t)||await sf([...n,t])}async function Ks(e=!1){const t=await ne.project.orderBy("name").toArray();return e?t:t.filter(n=>n.archived!==1)}async function mv(e){await ne.project.add({name:e.trim(),archived:0,created_at:wt()})}async function yv(e,t){await ne.project.update(e,{name:t.trim()})}async function gv(e,t){await ne.project.update(e,{archived:t?1:0})}async function mn(e){return ne.attendance.where("date").equals(e).first()}async function of(e,t){const n=((t===void 0?await yt("last_location",""):t)||"").trim(),s=await mn(e);if(s&&s.id){if(!s.clock_in_at){const o={clock_in_at:wt()};n&&(o.location=n),await ne.attendance.update(s.id,o)}n&&(await kt("last_location",n),await Uo(n));return}await ne.attendance.add({date:e,clock_in_at:wt(),clock_out_at:null,kind:"normal",note:null,location:n||null,created_at:wt()}),n&&(await kt("last_location",n),await Uo(n))}async function bv(e){const t=await mn(e);t&&t.id&&t.clock_in_at&&!t.clock_out_at&&await ne.attendance.update(t.id,{clock_out_at:wt()})}async function wv(){const e=new Date,t=Nn(e);if(e.getHours()<4){const s=await mn(Kn(t,-1));if(s&&s.id&&s.clock_in_at&&!s.clock_out_at)return await ne.attendance.update(s.id,{clock_out_at:wt()}),s.date}const n=await mn(t);if(n&&n.id&&n.clock_in_at&&!n.clock_out_at)return await ne.attendance.update(n.id,{clock_out_at:wt()}),n.date;throw new Error("没有进行中的打卡")}async function _v(e,t,n,s,o){(o||"").trim()&&await Uo(o);const a=await mn(e),c={date:e,clock_in_at:t,clock_out_at:n,kind:"makeup",note:s||null,location:(o||"").trim()||null,created_at:wt()};a&&a.id?await ne.attendance.update(a.id,c):await ne.attendance.add(c)}async function kv(e,t,n){const s=(n||"").trim();if(!s)return;const o=await mn(e);o&&o.id&&await ne.attendance.update(o.id,{[t]:e+"T"+s+":00"})}async function ci(e,t){return ne.attendance.where("date").between(e,t,!0,!0).toArray()}async function xv(e,t){const n=await mn(e);if(t){const s={date:e,kind:"leave",clock_in_at:null,clock_out_at:null,created_at:wt()};n&&n.id?await ne.attendance.update(n.id,s):await ne.attendance.add({...s,note:null,location:null})}else n&&n.id&&await ne.attendance.update(n.id,{kind:"normal"})}async function Cv(e){const t=await ne.work_log.where("date").equals(e).first();return t||{id:await ne.work_log.add({date:e,created_at:wt()}),date:e,created_at:wt()}}async function Sv(e){return ne.work_log.where("date").equals(e).first()}async function Ev(e){const t=await Sv(e);return!t||!t.id?[]:(await ne.log_item.where("work_log_id").equals(t.id).toArray()).sort((s,o)=>o.id-s.id)}async function $v(e,t){const n=await Cv(e);await ne.log_item.add({work_log_id:n.id,content:t.content,project_id:t.project_id,category:t.category,minutes:t.minutes,is_milestone:0,needs_followup:0,takeaway:t.takeaway,remark:t.remark,sort_order:0,created_at:wt()}),await kt("last_project",t.project_id?String(t.project_id):""),await kt("last_category",t.category)}async function ia(e,t){await ne.log_item.update(e,t)}async function Av(e){await ne.log_item.delete(e)}async function fi(e,t){const n=await ne.work_log.where("date").between(e,t,!0,!0).toArray();if(!n.length)return[];const s=new Map(n.map(a=>[a.id,a.date]));return(await ne.log_item.where("work_log_id").anyOf(n.map(a=>a.id)).toArray()).map(a=>({...a,date:s.get(a.work_log_id)||""})).sort((a,c)=>a.date===c.date?a.id-c.id:a.datet.updated_at[c.id,c.date]));return(await ne.log_item.toArray()).filter(c=>((c.content||"")+" "+(c.takeaway||"")+" "+(c.remark||"")).toLowerCase().includes(n)).sort((c,d)=>d.id-c.id).slice(0,t).map(c=>({...c,date:o.get(c.work_log_id)||""}))}async function Rv(e,t=4){const n=e.trim().toLowerCase();return n?(await ne.memo.toArray()).filter(o=>((o.title||"")+" "+(o.content||"")).toLowerCase().includes(n)).sort((o,a)=>o.updated_at{await Promise.all([ne.project.clear(),ne.work_log.clear(),ne.log_item.clear(),ne.attendance.clear(),ne.weekly_note.clear(),ne.setting.clear(),ne.memo.clear(),ne.credential.clear(),ne.table("transaction").clear()]),n.project&&n.project.length&&await ne.project.bulkAdd(n.project),n.work_log&&n.work_log.length&&await ne.work_log.bulkAdd(n.work_log),n.log_item&&n.log_item.length&&await ne.log_item.bulkAdd(n.log_item),n.attendance&&n.attendance.length&&await ne.attendance.bulkAdd(n.attendance),n.weekly_note&&n.weekly_note.length&&await ne.weekly_note.bulkAdd(n.weekly_note),n.setting&&n.setting.length&&await ne.setting.bulkAdd(n.setting),n.memo&&n.memo.length&&await ne.memo.bulkAdd(n.memo),n.credential&&n.credential.length&&await ne.credential.bulkAdd(n.credential),n.transaction&&n.transaction.length&&await ne.table("transaction").bulkAdd(n.transaction)})}function Co(e){const t=e.split(":");return Number(t[0])*60+Number(t[1])}function qs(e,t,n,s){if(e&&e.kind==="leave")return{status:"leave",label:"请假",makeup:!1,workedMinutes:null};if(fv(t))return{status:"rest",label:"休息日",makeup:!1,workedMinutes:null};if(!e||!e.clock_in_at)return s?{status:"none",label:"未打卡",makeup:!1,workedMinutes:null}:{status:"absent",label:"缺勤",makeup:!!(e&&e.kind==="makeup"),workedMinutes:null};const o=e.kind==="makeup";if(!e.clock_out_at)return{status:"incomplete",label:s?"进行中":"未完成",makeup:o,workedMinutes:null};const a=Co(Vn(e.clock_in_at)),c=Co(Vn(e.clock_out_at)),d=Co(n.work_start),h=Co(n.work_end);let y="normal";!o&&a>d+n.grace_minutes?y="late":!o&&c{Po.value=Po.value.filter(n=>n.id!==t)},2e3)}function Hv(){return Po}const Sa=N(null),Ea=N(null),Hs=N(0);function Sr(){Hs.value++}const Wv={class:"day-panel"},zv={class:"dp-head"},Gv={class:"dp-date"},Yv={class:"card sec"},Jv={class:"att-grid"},Xv={class:"att-cell"},Qv={key:0,class:"edit-row"},Zv={key:1,class:"att-val"},em={class:"att-cell"},tm={key:0,class:"edit-row"},nm={key:1,class:"att-val"},rm={class:"att-cell"},sm=["list"],om=["id"],im=["value"],am={class:"att-cell"},lm={class:"att-val status-val"},um={key:0,class:"tag"},cm={key:1,class:"muted"},fm={key:0,class:"att-note muted"},dm={class:"att-actions"},pm=["disabled"],hm=["disabled"],vm=["disabled"],mm=["disabled"],ym={key:0,class:"card sec makeup"},gm={class:"form-grid"},bm={class:"field"},wm={class:"field"},_m={class:"field span2"},km=["list"],xm={class:"field span2"},Cm={key:0,class:"form-error"},Sm={class:"form-footer"},Em={class:"card sec"},$m={class:"form-grid"},Am={class:"field span2"},Pm={key:0,class:"form-error"},Tm={class:"field"},Om=["value"],Mm={class:"field"},Im=["value"],jm={class:"field"},Dm={class:"field"},Rm={class:"field span2"},Lm={class:"form-footer"},Km=["disabled"],Fm=["disabled"],Nm={class:"list-sec"},Vm={class:"sec-title"},Bm={key:0,class:"empty muted"},Um={class:"item-main"},qm={class:"tag"},Hm=["onClick"],Wm={key:0,class:"muted item-meta"},zm={key:1,class:"muted num item-meta"},Gm=["onClick"],Ym=["onClick"],Jm=["onClick"],Xm=["onClick"],Qm={key:0,class:"item-sub"},Zm={key:0,class:"muted2"},ey={key:1,class:"muted"},ty={key:1,class:"dp-foot muted num"},ny=Vt({__name:"DayPanel",props:{date:{}},setup(e){const t=e,n=N(!0),s=N(null),o=N(void 0),a=N([]),c=N([]),d=N(""),h=N([]),y=it(()=>"loc-list-"+t.date),m=it(()=>t.date===xt());async function k(){n.value=!0,s.value=await jr(),o.value=await mn(t.date),a.value=await Ev(t.date),c.value=await Ks(!0),h.value=await Xa(),d.value=o.value&&o.value.location||await hv(),n.value=!1}fn(k),gt(()=>t.date,k),gt(Hs,()=>{k()});const D=it(()=>c.value.filter(H=>H.archived!==1));function O(H){if(!H)return"";const U=c.value.find(Y=>Y.id===H);return U?U.name:"已删除项目"}const K=it(()=>s.value?qs(o.value,t.date,s.value,m.value):null),W=it(()=>a.value.reduce((H,U)=>H+(U.minutes||0),0)),de=N(!1);async function ee(){de.value||(de.value=!0,await of(t.date,d.value),await k(),Sr(),qe("上班打卡成功"),de.value=!1)}async function E(){de.value||(de.value=!0,await bv(t.date),await k(),Sr(),qe("下班打卡成功"),de.value=!1)}async function L(){await vv(t.date,d.value),Sr(),qe("地点已更新")}const Q=N(!1),le=it(()=>{var H;return((H=o.value)==null?void 0:H.kind)==="leave"});function ce(){if(o.value&&o.value.clock_in_at){Q.value=!0;return}Z(!0)}async function Z(H){Q.value=!1,await xv(t.date,H),await k(),Sr(),qe(H?"已标记为休假":"已取消休假")}const A=N(null),x=N(""),ie=N(null);gt(A,async H=>{var U;H&&(await ts(),(U=ie.value)==null||U.focus())});function xe(H){var Y,Ae;const U=H==="in"?(Y=o.value)==null?void 0:Y.clock_in_at:(Ae=o.value)==null?void 0:Ae.clock_out_at;A.value=H,x.value=U?Vn(U):H==="in"?"09:00":"18:00"}function J(){A.value=null}async function Ce(){const H=A.value;H&&(A.value=null,x.value&&(await kv(t.date,H==="in"?"clock_in_at":"clock_out_at",x.value),await k(),Sr(),qe("打卡时间已修改")))}const Ne=N(!1),Xe=N("09:00"),He=N("18:00"),Ue=N(""),ge=N(""),Me=N("");function Ke(){ge.value=d.value,Me.value="",Ne.value=!Ne.value}async function fe(){if(!Xe.value||!He.value){Me.value="请填写上班与下班时间";return}await _v(t.date,t.date+"T"+Xe.value+":00",t.date+"T"+He.value+":00",Ue.value.trim(),ge.value),Ne.value=!1,Ue.value="",Me.value="",await k(),Sr(),qe("补卡已保存")}const G=N(""),X=N("");gt(G,()=>{X.value&&(X.value="")});const ke=N(null),st=N("dev"),pt=N(null),ht=N(""),Yt=N(""),Jt=N(!1),je=it(()=>!!(G.value.trim()||pt.value||ht.value.trim()||Yt.value.trim()));fn(async()=>{const H=await pv();ke.value=H.project_id,st.value=H.category});function w(){G.value="",pt.value=null,ht.value="",Yt.value="",X.value=""}async function g(){const H=G.value.trim();if(!H){X.value="请填写工作内容";return}Jt.value||(Jt.value=!0,await $v(t.date,{content:H,project_id:ke.value,category:st.value,minutes:pt.value&&pt.value>0?pt.value:null,takeaway:ht.value.trim()||null,remark:Yt.value.trim()||null}),w(),await k(),qe("记录已添加"),Jt.value=!1)}const P=N(null);function ae(H){P.value=H}async function se(H){const U=H.id,Y={content:H.content,project_id:H.project_id,category:H.category,minutes:H.minutes,takeaway:H.takeaway,remark:H.remark,is_milestone:H.is_milestone,needs_followup:H.needs_followup};await ia(U,Y),P.value=null,await k(),qe("修改已保存")}async function ue(H){await ia(H.id,{is_milestone:H.is_milestone?0:1}),await k()}async function ye(H){await ia(H.id,{needs_followup:H.needs_followup?0:1}),await k()}const oe=N(null);async function we(){oe.value&&oe.value.id&&await Av(oe.value.id),oe.value=null,await k(),qe("记录已删除")}return(H,U)=>(F(),q("div",Wv,[u("div",zv,[u("div",Gv,re(Qt(rf)(e.date)),1)]),u("div",Yv,[U[25]||(U[25]=u("div",{class:"sec-title"},"出勤信息",-1)),u("div",Jv,[u("div",Xv,[U[21]||(U[21]=u("label",null,"上班时间",-1)),A.value==="in"?(F(),q("div",Qv,[$e(u("input",{ref_key:"timeInput",ref:ie,type:"time",class:"input time-input","onUpdate:modelValue":U[0]||(U[0]=Y=>x.value=Y),onKeydown:[jt(Ce,["enter"]),jt(J,["esc"])]},null,544),[[De,x.value]]),u("button",{class:"btn btn-primary btn-sm",onClick:Ce},"确认"),u("button",{class:"btn btn-sm",onClick:J},"取消")])):(F(),q("div",Zv,[u("span",{class:et(["num",{"val-empty":!(o.value&&o.value.clock_in_at)}])},re(o.value&&o.value.clock_in_at?Qt(Vn)(o.value.clock_in_at):"未打卡"),3),o.value&&o.value.id?(F(),q("button",{key:0,class:"icon-btn",title:"修改上班时间",onClick:U[1]||(U[1]=Y=>xe("in"))},[Oe(lt,{name:"edit",size:13})])):Ee("",!0)]))]),u("div",em,[U[22]||(U[22]=u("label",null,"下班时间",-1)),A.value==="out"?(F(),q("div",tm,[$e(u("input",{ref_key:"timeInput",ref:ie,type:"time",class:"input time-input","onUpdate:modelValue":U[2]||(U[2]=Y=>x.value=Y),onKeydown:[jt(Ce,["enter"]),jt(J,["esc"])]},null,544),[[De,x.value]]),u("button",{class:"btn btn-primary btn-sm",onClick:Ce},"确认"),u("button",{class:"btn btn-sm",onClick:J},"取消")])):(F(),q("div",nm,[u("span",{class:et(["num",{"val-empty":!(o.value&&o.value.clock_out_at)}])},re(o.value&&o.value.clock_out_at?Qt(Vn)(o.value.clock_out_at):"未打卡"),3),o.value&&o.value.id?(F(),q("button",{key:0,class:"icon-btn",title:"修改下班时间",onClick:U[3]||(U[3]=Y=>xe("out"))},[Oe(lt,{name:"edit",size:13})])):Ee("",!0)]))]),u("div",rm,[U[23]||(U[23]=u("label",null,"上班地点",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[4]||(U[4]=Y=>d.value=Y),list:y.value,placeholder:"可直接输入",title:"上班地点,可自由输入",onChange:L},null,40,sm),[[De,d.value]]),u("datalist",{id:y.value},[(F(!0),q(Re,null,ut(h.value,Y=>(F(),q("option",{key:Y,value:Y},null,8,im))),128))],8,om)]),u("div",am,[U[24]||(U[24]=u("label",null,"考勤状态",-1)),u("div",lm,[K.value?(F(),q(Re,{key:0},[u("span",{class:et(["dot",K.value.status])},null,2),u("span",null,re(K.value.label),1),o.value&&o.value.kind==="makeup"?(F(),q("span",um,"补卡")):Ee("",!0)],64)):(F(),q("span",cm,"--"))])])]),o.value&&o.value.note?(F(),q("div",fm,"补卡说明:"+re(o.value.note),1)):Ee("",!0),u("div",dm,[m.value&&(!o.value||!o.value.clock_in_at)?(F(),q("button",{key:0,class:"btn btn-primary btn-sm",disabled:de.value,onClick:ee},"上班打卡",8,pm)):m.value&&o.value&&o.value.clock_in_at&&!o.value.clock_out_at?(F(),q("button",{key:1,class:"btn btn-primary btn-sm",disabled:de.value,onClick:E},"下班打卡",8,hm)):Ee("",!0),!m.value&&(!o.value||!o.value.clock_in_at)?(F(),q("button",{key:2,class:"btn btn-sm",onClick:Ke},"补卡")):Ee("",!0),le.value?(F(),q("button",{key:4,class:"btn btn-sm",disabled:de.value,onClick:U[5]||(U[5]=Y=>Z(!1))},"取消休假",8,mm)):(F(),q("button",{key:3,class:"btn btn-sm",disabled:de.value,onClick:ce},"标记休假",8,vm))])]),Ne.value?(F(),q("div",ym,[U[30]||(U[30]=u("div",{class:"sec-title"},"补卡登记",-1)),u("div",gm,[u("div",bm,[U[26]||(U[26]=u("label",null,"上班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":U[6]||(U[6]=Y=>Xe.value=Y)},null,512),[[De,Xe.value]])]),u("div",wm,[U[27]||(U[27]=u("label",null,"下班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":U[7]||(U[7]=Y=>He.value=Y)},null,512),[[De,He.value]])]),u("div",_m,[U[28]||(U[28]=u("label",null,"上班地点",-1)),$e(u("input",{class:"input",list:y.value,"onUpdate:modelValue":U[8]||(U[8]=Y=>ge.value=Y),placeholder:"可直接输入"},null,8,km),[[De,ge.value]])]),u("div",xm,[U[29]||(U[29]=u("label",null,"补卡原因",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[9]||(U[9]=Y=>Ue.value=Y),placeholder:"如:外出拜访客户忘记打卡"},null,512),[[De,Ue.value]])])]),Me.value?(F(),q("div",Cm,re(Me.value),1)):Ee("",!0),u("div",Sm,[u("button",{class:"btn btn-sm",onClick:U[10]||(U[10]=Y=>Ne.value=!1)},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:fe},"保存补卡")])])):Ee("",!0),u("div",Em,[U[38]||(U[38]=u("div",{class:"sec-head"},[u("span",{class:"sec-title"},"新增工作记录"),u("span",{class:"muted form-hint"},"内容必填,其余选填")],-1)),u("div",$m,[u("div",Am,[U[31]||(U[31]=u("label",null,"工作内容(必填)",-1)),$e(u("input",{class:et(["input",{invalid:X.value}]),"onUpdate:modelValue":U[11]||(U[11]=Y=>G.value=Y),placeholder:"做了什么,一句话一条",onKeydown:jt(g,["enter"])},null,34),[[De,G.value]]),X.value?(F(),q("div",Pm,re(X.value),1)):Ee("",!0)]),u("div",Tm,[U[33]||(U[33]=u("label",null,"所属项目",-1)),$e(u("select",{class:"select","onUpdate:modelValue":U[12]||(U[12]=Y=>ke.value=Y)},[U[32]||(U[32]=u("option",{value:null},"无项目",-1)),(F(!0),q(Re,null,ut(D.value,Y=>(F(),q("option",{key:Y.id,value:Y.id},re(Y.name),9,Om))),128))],512),[[Fn,ke.value]])]),u("div",Mm,[U[34]||(U[34]=u("label",null,"工作分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":U[13]||(U[13]=Y=>st.value=Y)},[(F(!0),q(Re,null,ut(Qt(Us),Y=>(F(),q("option",{key:Y.key,value:Y.key},re(Y.label),9,Im))),128))],512),[[Fn,st.value]])]),u("div",jm,[U[35]||(U[35]=u("label",null,"耗时(分钟)",-1)),$e(u("input",{class:"input",type:"number",min:"0","onUpdate:modelValue":U[14]||(U[14]=Y=>pt.value=Y),placeholder:"选填"},null,512),[[De,pt.value,void 0,{number:!0}]])]),u("div",Dm,[U[36]||(U[36]=u("label",null,"主要收获",-1)),$e(u("input",{class:"input","onUpdate:modelValue":U[15]||(U[15]=Y=>ht.value=Y),placeholder:"一句话:学到了什么"},null,512),[[De,ht.value]])]),u("div",Rm,[U[37]||(U[37]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":U[16]||(U[16]=Y=>Yt.value=Y),placeholder:"背景、链接、未决事项(选填)"},null,512),[[De,Yt.value]])])]),u("div",Lm,[u("button",{class:"btn btn-sm",disabled:!je.value,onClick:w},"重置",8,Km),u("button",{class:"btn btn-primary btn-sm",disabled:Jt.value,onClick:g},"添加记录",8,Fm)])]),u("div",Nm,[u("div",Vm,"工作记录("+re(a.value.length)+")",1),!a.value.length&&!n.value?(F(),q("div",Bm,"暂无记录")):Ee("",!0),(F(!0),q(Re,null,ut(a.value,Y=>(F(),q("div",{key:Y.id,class:"item"},[u("div",Um,[u("span",qm,re(Qt(Ja)(Y.category)),1),u("span",{class:"item-content",title:"点击编辑",onClick:Ae=>ae(Y)},re(Y.content),9,Hm),Y.project_id?(F(),q("span",Wm,re(O(Y.project_id)),1)):Ee("",!0),Y.minutes?(F(),q("span",zm,re(Y.minutes)+" 分钟",1)):Ee("",!0),U[39]||(U[39]=u("span",{class:"flex1"},null,-1)),u("button",{class:"icon-btn",title:"编辑完整信息",onClick:Ae=>ae(Y)},[Oe(lt,{name:"edit",size:14})],8,Gm),u("button",{class:et(["icon-btn",{active:Y.is_milestone===1}]),title:"成果标记",onClick:Ae=>ue(Y)},[Oe(lt,{name:"star",size:14})],10,Ym),u("button",{class:et(["icon-btn",{"active-warn":Y.needs_followup===1}]),title:"待跟进",onClick:Ae=>ye(Y)},[Oe(lt,{name:"flag",size:14})],10,Jm),u("button",{class:"icon-btn",title:"删除",onClick:Ae=>oe.value=Y},[Oe(lt,{name:"close",size:14})],8,Xm)]),Y.takeaway||Y.remark?(F(),q("div",Qm,[Y.takeaway?(F(),q("div",Zm,"收获:"+re(Y.takeaway),1)):Ee("",!0),Y.remark?(F(),q("div",ey,"备注:"+re(Y.remark),1)):Ee("",!0)])):Ee("",!0)]))),128)),a.value.length?(F(),q("div",ty,[nn(" 共 "+re(a.value.length)+" 条事项 ",1),W.value?(F(),q(Re,{key:0},[nn(" · "+re((W.value/60).toFixed(1))+" 小时",1)],64)):Ee("",!0)])):Ee("",!0)]),Oe(ur,{open:!!oe.value,title:"删除确认",message:oe.value?"将删除工作记录「"+oe.value.content+"」。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:U[17]||(U[17]=Y=>oe.value=null),onConfirm:we},null,8,["open","message"]),Oe(ur,{open:Q.value,title:"标记休假确认",message:"该日已有打卡记录,标记休假将清空上下班时间。是否继续?","confirm-text":"标记休假",danger:"",onCancel:U[18]||(U[18]=Y=>Q.value=!1),onConfirm:U[19]||(U[19]=Y=>Z(!0))},null,8,["open"]),Oe(cv,{open:!!P.value,item:P.value,projects:c.value,date:e.date,onCancel:U[20]||(U[20]=Y=>P.value=null),onSave:se},null,8,["open","item","projects","date"])]))}}),af=Gt(ny,[["__scopeId","data-v-2e90c9d8"]]),ry={class:"cal-page"},sy={class:"cal-toolbar"},oy={class:"cal-title num"},iy={class:"cal-head"},ay={class:"cal-grid"},ly=["title","onClick"],uy={class:"cal-marks"},cy={key:0,class:"drawer"},fy={class:"drawer-head"},dy={class:"drawer-body"},py=Vt({__name:"CalendarView",setup(e){const t=N(xt()),n=it(()=>Number(t.value.slice(0,4))),s=it(()=>Number(t.value.slice(5,7))-1),o=it(()=>n.value+" 年 "+(s.value+1)+" 月"),a=["一","二","三","四","五","六","日"],c=it(()=>{const Q=(new Date(n.value,s.value,1).getDay()+6)%7,le=new Date(n.value,s.value+1,0).getDate(),ce=[];for(let Z=0;Z[xe.date,xe])),A=le[2],x=new Map;for(const xe of c.value){if(!xe.inMonth)continue;const J=qs(Z.get(xe.date),xe.date,ce,xe.date===h),Ce=A.filter(Ne=>Ne.date===xe.date);x.set(xe.date,{status:J.status,label:J.label,location:((ie=Z.get(xe.date))==null?void 0:ie.location)||"",hasLog:Ce.length>0,hasMilestone:Ce.some(Ne=>Ne.is_milestone===1)})}d.value=x}gt([n,s],y,{immediate:!0}),gt(Hs,()=>{y()});function m(L){var Q;return((Q=d.value.get(L))==null?void 0:Q.status)??""}function k(L){const Q=d.value.get(L);return Q?L+" · "+Q.label+(Q.location?" · "+Q.location:""):L}function D(L){var Q;return!!((Q=d.value.get(L))!=null&&Q.hasLog)}function O(L){var Q;return!!((Q=d.value.get(L))!=null&&Q.hasMilestone)}function K(){t.value=Bo(t.value,-1)}function W(){t.value=Bo(t.value,1)}function de(){t.value=xt()}const ee=N(null);function E(L,Q){Q&&(ee.value=L)}return gt(Sa,L=>{L&&(t.value=L,ee.value=L,Sa.value=null)},{immediate:!0}),(L,Q)=>(F(),q("div",ry,[u("div",sy,[u("button",{class:"icon-btn",onClick:K},[Oe(lt,{name:"chevron-left",size:16})]),u("span",oy,re(o.value),1),u("button",{class:"icon-btn",onClick:W},[Oe(lt,{name:"chevron-right",size:16})]),u("button",{class:"btn btn-sm",onClick:de},"回到今天")]),u("div",iy,[(F(),q(Re,null,ut(a,le=>u("span",{key:le,class:"cal-week muted"},re(le),1)),64))]),u("div",ay,[(F(!0),q(Re,null,ut(c.value,(le,ce)=>(F(),q("button",{key:ce,class:et(["cal-cell",{blank:!le.inMonth,weekend:le.weekend,selected:ee.value===le.date}]),title:le.inMonth?k(le.date):void 0,onClick:Z=>E(le.date,le.inMonth)},[le.inMonth?(F(),q(Re,{key:0},[u("span",{class:et(["daynum num",{today:le.date===Qt(h)}])},re(Number(le.date.slice(8,10))),3),u("span",uy,[m(le.date)?(F(),q("span",{key:0,class:et(["dot",m(le.date)])},null,2)):Ee("",!0),D(le.date)?(F(),It(lt,{key:1,name:"check-circle",size:12,class:"mark-log"})):Ee("",!0),O(le.date)?(F(),It(lt,{key:2,name:"star",size:12,class:"mark-star"})):Ee("",!0)])],64)):Ee("",!0)],10,ly))),128))]),Oe(ns,{name:"drawer"},{default:fr(()=>[ee.value?(F(),q("aside",cy,[u("div",fy,[Q[1]||(Q[1]=u("span",{class:"drawer-title"},"当日详情",-1)),u("button",{class:"icon-btn",onClick:Q[0]||(Q[0]=le=>ee.value=null)},[Oe(lt,{name:"close",size:16})])]),u("div",dy,[Oe(af,{date:ee.value},null,8,["date"])])])):Ee("",!0)]),_:1})]))}}),hy=Gt(py,[["__scopeId","data-v-6a6322fa"]]),vy={class:"detail-page"},my={class:"detail-toolbar"},yy=["value"],gy=["disabled"],by=Vt({__name:"TodayView",setup(e){const t=N(xt()),n=it(()=>t.value===xt());function s(){t.value=Kn(t.value,-1)}function o(){t.value=Kn(t.value,1)}function a(){t.value=xt()}function c(d){const h=d.target.value;h&&(t.value=h)}return(d,h)=>(F(),q("div",vy,[u("div",my,[u("button",{class:"icon-btn",title:"前一天",onClick:s},[Oe(lt,{name:"chevron-left",size:16})]),u("span",{class:et(["date-title num",{"is-today":n.value}])},re(Qt(rf)(t.value)),3),u("button",{class:"icon-btn",title:"后一天",onClick:o},[Oe(lt,{name:"chevron-right",size:16})]),u("input",{type:"date",class:"input w-date",value:t.value,onChange:c},null,40,yy),u("button",{class:"btn btn-sm",disabled:n.value,onClick:a},"回到今天",8,gy)]),Oe(af,{date:t.value},null,8,["date"])]))}}),wy=Gt(by,[["__scopeId","data-v-ac366cf6"]]),_y={class:"stats"},ky={class:"cards"},xy={class:"card stat-card"},Cy={class:"stat-num num"},Sy={class:"card stat-card"},Ey={class:"stat-num num"},$y={class:"card stat-card"},Ay={class:"stat-num num"},Py={class:"card stat-card"},Ty={class:"stat-num num"},Oy={class:"card section"},My={class:"heat"},Iy=["title"],jy={class:"two-col"},Dy={class:"card section"},Ry={class:"bar-label"},Ly={class:"bar-track"},Ky={class:"muted num bar-num"},Fy={key:0,class:"muted"},Ny={class:"card section"},Vy={class:"bar-label"},By={class:"bar-track"},Uy={class:"muted num bar-num"},qy={key:0,class:"muted"},Hy={class:"card section"},Wy={class:"bar-label loc-label"},zy={class:"bar-track"},Gy={class:"muted num bar-num"},Yy={key:0,class:"muted"},Jy=Vt({__name:"StatsView",setup(e){const t=N({attendDays:0,totalHours:"0",itemCount:0,streak:0}),n=N([]),s=N([]),o=N([]),a=N([]);async function c(){const y=xt(),m="2000-01-01",k=await Promise.all([jr(),ci(m,y),fi(m,y),Ks(!0)]),D=k[0],O=k[1],K=k[2],W=k[3],de=O.filter(J=>J.clock_in_at||J.kind==="makeup");let ee=0;for(const J of de){const Ce=qs(J,J.date,D,J.date===y);ee+=Ce.workedMinutes??0}const E=new Set(K.map(J=>J.date));let L=0,Q=y;for(E.has(Q)||(Q=Kn(y,-1));E.has(Q);)L++,Q=Kn(Q,-1);t.value={attendDays:de.length,totalHours:(ee/60).toFixed(1),itemCount:K.length,streak:L};const le=new Map;for(const J of de){const Ce=J.location||"未记录";le.set(Ce,(le.get(Ce)||0)+1)}a.value=Array.from(le.entries()).map(J=>({name:J[0],count:J[1],percent:Math.round(J[1]/(de.length||1)*100)})).sort((J,Ce)=>Ce.count-J.count);const ce=K.length||1;s.value=Us.map(J=>{const Ce=K.filter(Ne=>Ne.category===J.key).length;return{key:J.key,label:J.label,count:Ce,percent:Math.round(Ce/ce*100)}}).filter(J=>J.count>0).sort((J,Ce)=>Ce.count-J.count);const Z=new Map(W.map(J=>[J.id,J.name])),A=new Map;for(const J of K){const Ce=J.project_id?Z.get(J.project_id)||"已删除项目":"无项目";A.set(Ce,(A.get(Ce)||0)+1)}o.value=Array.from(A.entries()).map(J=>({name:J[0],count:J[1],percent:Math.round(J[1]/ce*100)})).sort((J,Ce)=>Ce.count-J.count);const x=new Map;for(const J of K)x.set(J.date,(x.get(J.date)||0)+1);const ie=Es(y),xe=[];for(let J=11;J>=0;J--){const Ce=Kn(ie,-7*J),Ne=[];for(let Xe=0;Xe<7;Xe++){const He=Kn(Ce,Xe);Ne.push({date:He,count:x.get(He)||0})}xe.push(Ne)}n.value=xe}fn(async()=>{await c()}),gt(Hs,()=>{c()});function d(y){return y===0?0:y===1?1:y<=3?2:y<=5?3:4}function h(y,m){return y+" · "+(m?m+" 条":"无记录")}return(y,m)=>(F(),q("div",_y,[u("div",ky,[u("div",xy,[m[0]||(m[0]=u("div",{class:"muted"},"出勤天数",-1)),u("div",Cy,re(t.value.attendDays),1)]),u("div",Sy,[m[1]||(m[1]=u("div",{class:"muted"},"累计工时(小时)",-1)),u("div",Ey,re(t.value.totalHours),1)]),u("div",$y,[m[2]||(m[2]=u("div",{class:"muted"},"记录条数",-1)),u("div",Ay,re(t.value.itemCount),1)]),u("div",Py,[m[3]||(m[3]=u("div",{class:"muted"},"连续记录(天)",-1)),u("div",Ty,re(t.value.streak),1)])]),u("div",Oy,[m[4]||(m[4]=u("div",{class:"section-title"},"记录热力图(近 12 周)",-1)),u("div",My,[(F(!0),q(Re,null,ut(n.value,(k,D)=>(F(),q("div",{key:D,class:"heat-col"},[(F(!0),q(Re,null,ut(k,O=>(F(),q("span",{key:O.date,class:et(["heat-cell","lv"+d(O.count)]),title:h(O.date,O.count)},null,10,Iy))),128))]))),128))]),m[5]||(m[5]=Ip('
少多
',1))]),u("div",jy,[u("div",Dy,[m[6]||(m[6]=u("div",{class:"section-title"},"分类分布",-1)),(F(!0),q(Re,null,ut(s.value,k=>(F(),q("div",{key:k.key,class:"bar-row"},[u("span",Ry,re(k.label),1),u("span",Ly,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Ky,re(k.count)+" 条 · "+re(k.percent)+"%",1)]))),128)),s.value.length?Ee("",!0):(F(),q("div",Fy,"暂无数据"))]),u("div",Ny,[m[7]||(m[7]=u("div",{class:"section-title"},"项目投入",-1)),(F(!0),q(Re,null,ut(o.value,k=>(F(),q("div",{key:k.name,class:"bar-row"},[u("span",Vy,re(k.name),1),u("span",By,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Uy,re(k.count)+" 条 · "+re(k.percent)+"%",1)]))),128)),o.value.length?Ee("",!0):(F(),q("div",qy,"暂无数据"))])]),u("div",Hy,[m[8]||(m[8]=u("div",{class:"section-title"},"地点分布(按出勤天)",-1)),(F(!0),q(Re,null,ut(a.value,k=>(F(),q("div",{key:k.name,class:"bar-row"},[u("span",Wy,re(k.name),1),u("span",zy,[u("span",{class:"bar-fill",style:sr({width:k.percent+"%"})},null,4)]),u("span",Gy,re(k.count)+" 天 · "+re(k.percent)+"%",1)]))),128)),a.value.length?Ee("",!0):(F(),q("div",Yy,"暂无数据"))])]))}}),Xy=Gt(Jy,[["__scopeId","data-v-73e5ba49"]]);async function Qy(e,t,n){const s=xt(),o=await Promise.all([jr(),ci(e,t),fi(e,t),Ks(!0),Tv(e,t)]),a=o[0],c=o[1],d=o[2],h=o[3],y=o[4];let m=0,k=0,D=0;for(const A of c){(A.clock_in_at||A.kind==="makeup")&&m++,A.kind==="makeup"&&D++;const x=qs(A,A.date,a,A.date===s);k+=x.workedMinutes??0}const O=new Map;for(const A of c){if(!(A.clock_in_at||A.kind==="makeup"))continue;const x=A.location||"未记录";O.set(x,(O.get(x)||0)+1)}const K=Array.from(O.entries()).map(A=>({name:A[0],count:A[1]})).sort((A,x)=>x.count-A.count),W=d.length||1,de=Us.map(A=>{const x=d.filter(ie=>ie.category===A.key).length;return{key:A.key,label:A.label,count:x,percent:Math.round(x/W*100)}}).filter(A=>A.count>0).sort((A,x)=>x.count-A.count),ee=new Map(h.map(A=>[A.id,A.name])),E=new Map;for(const A of d){const x=A.project_id?ee.get(A.project_id)||"已删除项目":"无项目";E.set(x,(E.get(x)||0)+1)}const L=Array.from(E.entries()).map(A=>({name:A[0],count:A[1]})).sort((A,x)=>x.count-A.count),Q=d.filter(A=>A.is_milestone===1).map(A=>({date:A.date,content:A.content})),le=d.filter(A=>A.needs_followup===1).map(A=>({date:A.date,content:A.content,remark:A.remark||""})),ce=d.filter(A=>!!A.takeaway).map(A=>({date:A.date,text:A.takeaway})),Z=y.map(A=>({weekStart:A.week_start,highlights:A.highlights||"",challenges:A.challenges||"",plan_next:A.plan_next||""}));return{range:{start:e,end:t,label:n},attendDays:m,totalHours:(k/60).toFixed(1),makeupCount:D,leaveCount:c.filter(A=>A.kind==="leave").length,itemCount:d.length,categoryStats:de,projectStats:L,locationStats:K,milestones:Q,followups:le,takeaways:ce,weekNotes:Z}}function Zy(e){const t=[];t.push("# 实习工作总结("+e.range.start+" ~ "+e.range.end+")"),t.push(""),t.push("## 一、考勤概况"),t.push(""),t.push("出勤 "+e.attendDays+" 天,累计工时 "+e.totalHours+" 小时,补卡 "+e.makeupCount+" 次"+(e.leaveCount?",请假 "+e.leaveCount+" 天":""));const n=e.locationStats.filter(s=>s.name!=="未记录");n.length&&t.push("其中:"+n.map(s=>s.name+" "+s.count+" 天").join(",")),t.push(""),t.push("## 二、工作内容分布"),t.push(""),t.push(e.categoryStats.length?e.categoryStats.map(s=>s.label+" "+s.percent+"%("+s.count+" 条)").join(","):"(无记录)"),t.push(""),t.push("## 三、项目投入"),t.push(""),t.push(e.projectStats.length?e.projectStats.map(s=>s.name+" "+s.count+" 条").join(","):"(无记录)"),t.push(""),t.push("## 四、主要成果"),t.push(""),e.milestones.length?e.milestones.forEach((s,o)=>t.push(o+1+". 【成果】"+s.content+"("+s.date+")")):t.push("(无)"),t.push(""),t.push("## 五、待跟进事项"),t.push(""),e.followups.length?e.followups.forEach(s=>t.push("- 【待跟进】"+s.content+(s.remark?"("+s.date+" 备注:"+s.remark+")":"("+s.date+")"))):t.push("(无)"),t.push(""),t.push("## 六、学习与成长"),t.push(""),e.takeaways.length?e.takeaways.forEach(s=>t.push("- "+s.text+"("+s.date+")")):t.push("(无)");for(const s of e.weekNotes)t.push(""),t.push("### 周记("+s.weekStart+" 起)"),t.push(""),t.push("- 本周亮点:"+(s.highlights||"(无)")),t.push("- 踩的坑:"+(s.challenges||"(无)")),t.push("- 下周计划:"+(s.plan_next||"(无)"));return t.push(""),t.join(` +`)}const eg="modulepreload",tg=function(e,t){return new URL(e,t).href},Au={},lf=function(t,n,s){let o=Promise.resolve();if(n&&n.length>0){const c=document.getElementsByTagName("link"),d=document.querySelector("meta[property=csp-nonce]"),h=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));o=Promise.allSettled(n.map(y=>{if(y=tg(y,s),y in Au)return;Au[y]=!0;const m=y.endsWith(".css"),k=m?'[rel="stylesheet"]':"";if(!!s)for(let K=c.length-1;K>=0;K--){const W=c[K];if(W.href===y&&(!m||W.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${y}"]${k}`))return;const O=document.createElement("link");if(O.rel=m?"stylesheet":eg,m||(O.as="script"),O.crossOrigin="",O.href=y,h&&O.setAttribute("nonce",h),document.head.appendChild(O),m)return new Promise((K,W)=>{O.addEventListener("load",K),O.addEventListener("error",()=>W(new Error(`Unable to preload CSS for ${y}`)))})}))}function a(c){const d=new Event("vite:preloadError",{cancelable:!0});if(d.payload=c,window.dispatchEvent(d),!d.defaultPrevented)throw c}return o.then(c=>{for(const d of c||[])d.status==="rejected"&&a(d.reason);return t().catch(a)})};/*! Capacitor: https://capacitorjs.com/ - MIT License */const ng=e=>{const t=new Map;t.set("web",{name:"web"});const n=e.CapacitorPlatforms||{currentPlatform:{name:"web"},platforms:t},s=(a,c)=>{n.platforms.set(a,c)},o=a=>{n.platforms.has(a)&&(n.currentPlatform=n.platforms.get(a))};return n.addPlatform=s,n.setPlatform=o,n},rg=e=>e.CapacitorPlatforms=ng(e),uf=rg(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});uf.addPlatform;uf.setPlatform;var Qr;(function(e){e.Unimplemented="UNIMPLEMENTED",e.Unavailable="UNAVAILABLE"})(Qr||(Qr={}));class aa extends Error{constructor(t,n,s){super(t),this.message=t,this.code=n,this.data=s}}const sg=e=>{var t,n;return e!=null&&e.androidBridge?"android":!((n=(t=e==null?void 0:e.webkit)===null||t===void 0?void 0:t.messageHandlers)===null||n===void 0)&&n.bridge?"ios":"web"},og=e=>{var t,n,s,o,a;const c=e.CapacitorCustomPlatform||null,d=e.Capacitor||{},h=d.Plugins=d.Plugins||{},y=e.CapacitorPlatforms,m=()=>c!==null?c.name:sg(e),k=((t=y==null?void 0:y.currentPlatform)===null||t===void 0?void 0:t.getPlatform)||m,D=()=>k()!=="web",O=((n=y==null?void 0:y.currentPlatform)===null||n===void 0?void 0:n.isNativePlatform)||D,K=Z=>{const A=Q.get(Z);return!!(A!=null&&A.platforms.has(k())||ee(Z))},W=((s=y==null?void 0:y.currentPlatform)===null||s===void 0?void 0:s.isPluginAvailable)||K,de=Z=>{var A;return(A=d.PluginHeaders)===null||A===void 0?void 0:A.find(x=>x.name===Z)},ee=((o=y==null?void 0:y.currentPlatform)===null||o===void 0?void 0:o.getPluginHeader)||de,E=Z=>e.console.error(Z),L=(Z,A,x)=>Promise.reject(`${x} does not have an implementation of "${A}".`),Q=new Map,le=(Z,A={})=>{const x=Q.get(Z);if(x)return console.warn(`Capacitor plugin "${Z}" already registered. Cannot register plugins twice.`),x.proxy;const ie=k(),xe=ee(Z);let J;const Ce=async()=>(!J&&ie in A?J=typeof A[ie]=="function"?J=await A[ie]():J=A[ie]:c!==null&&!J&&"web"in A&&(J=typeof A.web=="function"?J=await A.web():J=A.web),J),Ne=(Ke,fe)=>{var G,X;if(xe){const ke=xe==null?void 0:xe.methods.find(st=>fe===st.name);if(ke)return ke.rtype==="promise"?st=>d.nativePromise(Z,fe.toString(),st):(st,pt)=>d.nativeCallback(Z,fe.toString(),st,pt);if(Ke)return(G=Ke[fe])===null||G===void 0?void 0:G.bind(Ke)}else{if(Ke)return(X=Ke[fe])===null||X===void 0?void 0:X.bind(Ke);throw new aa(`"${Z}" plugin is not implemented on ${ie}`,Qr.Unimplemented)}},Xe=Ke=>{let fe;const G=(...X)=>{const ke=Ce().then(st=>{const pt=Ne(st,Ke);if(pt){const ht=pt(...X);return fe=ht==null?void 0:ht.remove,ht}else throw new aa(`"${Z}.${Ke}()" is not implemented on ${ie}`,Qr.Unimplemented)});return Ke==="addListener"&&(ke.remove=async()=>fe()),ke};return G.toString=()=>`${Ke.toString()}() { [capacitor code] }`,Object.defineProperty(G,"name",{value:Ke,writable:!1,configurable:!1}),G},He=Xe("addListener"),Ue=Xe("removeListener"),ge=(Ke,fe)=>{const G=He({eventName:Ke},fe),X=async()=>{const st=await G;Ue({eventName:Ke,callbackId:st},fe)},ke=new Promise(st=>G.then(()=>st({remove:X})));return ke.remove=async()=>{console.warn("Using addListener() without 'await' is deprecated."),await X()},ke},Me=new Proxy({},{get(Ke,fe){switch(fe){case"$$typeof":return;case"toJSON":return()=>({});case"addListener":return xe?ge:He;case"removeListener":return Ue;default:return Xe(fe)}}});return h[Z]=Me,Q.set(Z,{name:Z,proxy:Me,platforms:new Set([...Object.keys(A),...xe?[ie]:[]])}),Me},ce=((a=y==null?void 0:y.currentPlatform)===null||a===void 0?void 0:a.registerPlugin)||le;return d.convertFileSrc||(d.convertFileSrc=Z=>Z),d.getPlatform=k,d.handleError=E,d.isNativePlatform=O,d.isPluginAvailable=W,d.pluginMethodNoop=L,d.registerPlugin=ce,d.Exception=aa,d.DEBUG=!!d.DEBUG,d.isLoggingEnabled=!!d.isLoggingEnabled,d.platform=d.getPlatform(),d.isNative=d.isNativePlatform(),d},ig=e=>e.Capacitor=og(e),Zr=ig(typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),cf=Zr.registerPlugin;Zr.Plugins;class ff{constructor(t){this.listeners={},this.retainedEventArguments={},this.windowListeners={},t&&(console.warn(`Capacitor WebPlugin "${t.name}" config object was deprecated in v3 and will be removed in v4.`),this.config=t)}addListener(t,n){let s=!1;this.listeners[t]||(this.listeners[t]=[],s=!0),this.listeners[t].push(n);const a=this.windowListeners[t];a&&!a.registered&&this.addWindowListener(a),s&&this.sendRetainedArgumentsForEvent(t);const c=async()=>this.removeListener(t,n);return Promise.resolve({remove:c})}async removeAllListeners(){this.listeners={};for(const t in this.windowListeners)this.removeWindowListener(this.windowListeners[t]);this.windowListeners={}}notifyListeners(t,n,s){const o=this.listeners[t];if(!o){if(s){let a=this.retainedEventArguments[t];a||(a=[]),a.push(n),this.retainedEventArguments[t]=a}return}o.forEach(a=>a(n))}hasListeners(t){return!!this.listeners[t].length}registerWindowListener(t,n){this.windowListeners[n]={registered:!1,windowEventName:t,pluginEventName:n,handler:s=>{this.notifyListeners(n,s)}}}unimplemented(t="not implemented"){return new Zr.Exception(t,Qr.Unimplemented)}unavailable(t="not available"){return new Zr.Exception(t,Qr.Unavailable)}async removeListener(t,n){const s=this.listeners[t];if(!s)return;const o=s.indexOf(n);this.listeners[t].splice(o,1),this.listeners[t].length||this.removeWindowListener(this.windowListeners[t])}addWindowListener(t){window.addEventListener(t.windowEventName,t.handler),t.registered=!0}removeWindowListener(t){t&&(window.removeEventListener(t.windowEventName,t.handler),t.registered=!1)}sendRetainedArgumentsForEvent(t){const n=this.retainedEventArguments[t];n&&(delete this.retainedEventArguments[t],n.forEach(s=>{this.notifyListeners(t,s)}))}}const Pu=e=>encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Tu=e=>e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent);class ag extends ff{async getCookies(){const t=document.cookie,n={};return t.split(";").forEach(s=>{if(s.length<=0)return;let[o,a]=s.replace(/=/,"CAP_COOKIE").split("CAP_COOKIE");o=Tu(o).trim(),a=Tu(a).trim(),n[o]=a}),n}async setCookie(t){try{const n=Pu(t.key),s=Pu(t.value),o=`; expires=${(t.expires||"").replace("expires=","")}`,a=(t.path||"/").replace("path=",""),c=t.url!=null&&t.url.length>0?`domain=${t.url}`:"";document.cookie=`${n}=${s||""}${o}; path=${a}; ${c};`}catch(n){return Promise.reject(n)}}async deleteCookie(t){try{document.cookie=`${t.key}=; Max-Age=0`}catch(n){return Promise.reject(n)}}async clearCookies(){try{const t=document.cookie.split(";")||[];for(const n of t)document.cookie=n.replace(/^ +/,"").replace(/=.*/,`=;expires=${new Date().toUTCString()};path=/`)}catch(t){return Promise.reject(t)}}async clearAllCookies(){try{await this.clearCookies()}catch(t){return Promise.reject(t)}}}cf("CapacitorCookies",{web:()=>new ag});const lg=async e=>new Promise((t,n)=>{const s=new FileReader;s.onload=()=>{const o=s.result;t(o.indexOf(",")>=0?o.split(",")[1]:o)},s.onerror=o=>n(o),s.readAsDataURL(e)}),ug=(e={})=>{const t=Object.keys(e);return Object.keys(e).map(o=>o.toLocaleLowerCase()).reduce((o,a,c)=>(o[a]=e[t[c]],o),{})},cg=(e,t=!0)=>e?Object.entries(e).reduce((s,o)=>{const[a,c]=o;let d,h;return Array.isArray(c)?(h="",c.forEach(y=>{d=t?encodeURIComponent(y):y,h+=`${a}=${d}&`}),h.slice(0,-1)):(d=t?encodeURIComponent(c):c,h=`${a}=${d}`),`${s}&${h}`},"").substr(1):null,fg=(e,t={})=>{const n=Object.assign({method:e.method||"GET",headers:e.headers},t),o=ug(e.headers)["content-type"]||"";if(typeof e.data=="string")n.body=e.data;else if(o.includes("application/x-www-form-urlencoded")){const a=new URLSearchParams;for(const[c,d]of Object.entries(e.data||{}))a.set(c,d);n.body=a.toString()}else if(o.includes("multipart/form-data")||e.data instanceof FormData){const a=new FormData;if(e.data instanceof FormData)e.data.forEach((d,h)=>{a.append(h,d)});else for(const d of Object.keys(e.data))a.append(d,e.data[d]);n.body=a;const c=new Headers(n.headers);c.delete("content-type"),n.headers=c}else(o.includes("application/json")||typeof e.data=="object")&&(n.body=JSON.stringify(e.data));return n};class dg extends ff{async request(t){const n=fg(t,t.webFetchExtra),s=cg(t.params,t.shouldEncodeUrlParams),o=s?`${t.url}?${s}`:t.url,a=await fetch(o,n),c=a.headers.get("content-type")||"";let{responseType:d="text"}=a.ok?t:{};c.includes("application/json")&&(d="json");let h,y;switch(d){case"arraybuffer":case"blob":y=await a.blob(),h=await lg(y);break;case"json":h=await a.json();break;case"document":case"text":default:h=await a.text()}const m={};return a.headers.forEach((k,D)=>{m[D]=k}),{data:h,headers:m,status:a.status,url:a.url}}async get(t){return this.request(Object.assign(Object.assign({},t),{method:"GET"}))}async post(t){return this.request(Object.assign(Object.assign({},t),{method:"POST"}))}async put(t){return this.request(Object.assign(Object.assign({},t),{method:"PUT"}))}async patch(t){return this.request(Object.assign(Object.assign({},t),{method:"PATCH"}))}async delete(t){return this.request(Object.assign(Object.assign({},t),{method:"DELETE"}))}}cf("CapacitorHttp",{web:()=>new dg});async function Za(e,t){const n=window;if(n.electronAPI&&n.electronAPI.saveFile){const c=await n.electronAPI.saveFile(e,t);return c&&c.saved?c.path:""}if(Zr.isNativePlatform()){const{Filesystem:c,Directory:d,Encoding:h}=await lf(async()=>{const{Filesystem:y,Directory:m,Encoding:k}=await import("./index-DqacfBXY.js");return{Filesystem:y,Directory:m,Encoding:k}},[],import.meta.url);try{return(await c.writeFile({path:e,data:t,directory:d.Documents,encoding:h.UTF8,recursive:!0})).uri}catch{return(await c.writeFile({path:e,data:t,directory:d.Cache,encoding:h.UTF8,recursive:!0})).uri}}const s=new Blob([t],{type:"text/plain;charset=utf-8"}),o=URL.createObjectURL(s),a=document.createElement("a");return a.href=o,a.download=e,a.click(),window.setTimeout(()=>URL.revokeObjectURL(o),1e4),""}const pg=Object.freeze(Object.defineProperty({__proto__:null,downloadText:Za},Symbol.toStringTag,{value:"Module"}));async function $a(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}async function hg(e){const t=await Promise.all([yt("ai_base_url",""),yt("ai_api_key",""),yt("ai_model","")]),n=t[0].trim().replace(/\/+$/,""),s=t[1].trim(),o=t[2].trim();if(!n||!o)throw new Error("请先在设置页配置 AI 接口地址与模型名称");const a=n+"/chat/completions",c={"Content-Type":"application/json"};s&&(c.Authorization="Bearer "+s);const h=JSON.stringify({model:o,messages:[{role:"system",content:"你是一名严谨的中文助理。请将用户提供的工作总结 Markdown 草稿润色为通顺、专业、简洁的工作总结。要求:保留原有章节结构与全部事实数据(数字、日期、条目),不得虚构或遗漏内容,只输出 Markdown 正文。"},{role:"user",content:e}],temperature:.3});let y;try{y=await fetch(a,{method:"POST",headers:c,body:h})}catch{throw new Error("无法访问 AI 接口:请检查地址是否正确、服务端是否允许浏览器跨域访问")}if(!y.ok){let D="接口返回 "+y.status;try{const O=await y.json();O&&O.error&&O.error.message&&(D+=":"+O.error.message)}catch{}throw new Error(D)}const m=await y.json(),k=m&&m.choices&&m.choices[0]&&m.choices[0].message&&m.choices[0].message.content;if(!k)throw new Error("接口未返回内容");return String(k)}const vg={class:"report"},mg={class:"report-toolbar"},yg={class:"seg"},gg=["onClick"],bg=["disabled"],wg=["disabled"],_g={key:0,class:"ai-error"},kg={class:"report-grid"},xg={class:"report-left"},Cg={class:"card section"},Sg={class:"section-title"},Eg={class:"muted note-saved"},$g={class:"card section"},Ag={class:"report-right"},Pg={key:0,class:"card section"},Tg={class:"sum-row"},Og={class:"num"},Mg={class:"sum-row"},Ig={class:"num"},jg={class:"sum-row"},Dg={class:"num"},Rg={class:"sum-row"},Lg={class:"num"},Kg={class:"sum-row"},Fg={class:"num"},Ng={class:"muted"},Vg={class:"num"},Bg={key:0,class:"muted sum-empty"},Ug={class:"muted"},qg={key:1,class:"muted sum-empty"},Hg={class:"muted"},Wg={key:2,class:"muted sum-empty"},zg={class:"muted"},Gg={key:3,class:"muted sum-empty"},Yg=Vt({__name:"ReportView",setup(e){const t=[{key:"week",label:"本周"},{key:"month",label:"本月"},{key:"all",label:"全部"},{key:"custom",label:"自定义"}],n=N("week"),s=N(Es(xt())),o=N(xt()),a=N(null),c=N(""),d=N(!1),h=N(!1),y=N(null),m=N(""),k=N(Es(xt())),D=N(""),O=N(""),K=N(""),W=N(!1);async function de(){const A=await Qa(k.value);D.value=(A==null?void 0:A.highlights)||"",O.value=(A==null?void 0:A.challenges)||"",K.value=(A==null?void 0:A.plan_next)||"",W.value=!1}async function ee(){await Pv(k.value,{highlights:D.value.trim()||null,challenges:O.value.trim()||null,plan_next:K.value.trim()||null}),W.value=!0,await L()}function E(A){const x=xt();if(A==="week"){const ie=Es(x);return{start:ie,end:Kn(ie,6),label:"本周"}}if(A==="month"){const ie=x.slice(0,7);return{start:ie+"-01",end:x,label:ie+" 本月"}}return A==="all"?{start:"2000-01-01",end:x,label:"全部实习期"}:{start:s.value,end:o.value,label:s.value+" ~ "+o.value}}async function L(){d.value=!0;const A=E(n.value),x=await Qy(A.start,A.end,A.label);a.value=x,c.value=Zy(x),d.value=!1}gt(n,L),gt([s,o],()=>{n.value==="custom"&&L()}),fn(async()=>{await de(),await L()});async function Q(){const A=xt().replace(/-/g,""),x=await Za("实习工作总结_"+A+".md",c.value);qe(x?"总结已导出到:"+x:"总结已导出到系统下载目录")}async function le(){await $a(c.value),qe("总结已复制到剪贴板")}async function ce(){if(h.value)return;m.value="";const A=c.value.trim();if(!A){m.value="当前草稿为空,无法润色";return}h.value=!0;try{y.value=c.value,c.value=await hg(A),qe("AI 润色完成")}catch(x){y.value=null,m.value=x instanceof Error?x.message:"润色失败"}h.value=!1}function Z(){y.value!==null&&(c.value=y.value),y.value=null}return(A,x)=>(F(),q("div",vg,[u("div",mg,[u("div",yg,[(F(),q(Re,null,ut(t,ie=>u("button",{key:ie.key,class:et(["seg-btn",{active:n.value===ie.key}]),onClick:xe=>n.value=ie.key},re(ie.label),11,gg)),64))]),n.value==="custom"?(F(),q(Re,{key:0},[$e(u("input",{type:"date",class:"input w-date","onUpdate:modelValue":x[0]||(x[0]=ie=>s.value=ie)},null,512),[[De,s.value]]),x[6]||(x[6]=u("span",{class:"muted"},"至",-1)),$e(u("input",{type:"date",class:"input w-date","onUpdate:modelValue":x[1]||(x[1]=ie=>o.value=ie)},null,512),[[De,o.value]])],64)):Ee("",!0),x[10]||(x[10]=u("span",{class:"flex1"},null,-1)),u("button",{class:"btn btn-sm",disabled:h.value,onClick:ce},[Oe(lt,{name:"edit",size:14}),x[7]||(x[7]=nn("AI 润色 ",-1))],8,bg),y.value!==null?(F(),q("button",{key:1,class:"btn btn-sm",onClick:Z},"还原润色前")):Ee("",!0),u("button",{class:"btn btn-sm",disabled:d.value,onClick:L},[Oe(lt,{name:"edit",size:14}),x[8]||(x[8]=nn("重新生成 ",-1))],8,wg),u("button",{class:"btn btn-sm",onClick:le},"复制"),u("button",{class:"btn btn-primary btn-sm",onClick:Q},[Oe(lt,{name:"export",size:14}),x[9]||(x[9]=nn("导出 Markdown ",-1))])]),m.value?(F(),q("div",_g,re(m.value),1)):Ee("",!0),u("div",kg,[u("div",xg,[u("div",Cg,[u("div",Sg,"本周周记("+re(k.value)+" 起)",1),x[11]||(x[11]=u("label",{class:"note-label muted"},"本周亮点",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[2]||(x[2]=ie=>D.value=ie),placeholder:"本周最有价值的一件事",onBlur:ee},null,544),[[De,D.value]]),x[12]||(x[12]=u("label",{class:"note-label muted"},"踩的坑",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[3]||(x[3]=ie=>O.value=ie),placeholder:"遇到的问题与教训",onBlur:ee},null,544),[[De,O.value]]),x[13]||(x[13]=u("label",{class:"note-label muted"},"下周计划",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":x[4]||(x[4]=ie=>K.value=ie),placeholder:"下周准备做什么",onBlur:ee},null,544),[[De,K.value]]),u("div",Eg,re(W.value?"已保存":"失焦自动保存"),1)]),u("div",$g,[x[14]||(x[14]=u("div",{class:"section-title"},"总结草稿(可编辑)",-1)),$e(u("textarea",{class:"textarea md-editor","onUpdate:modelValue":x[5]||(x[5]=ie=>c.value=ie),spellcheck:"false"},null,512),[[De,c.value]])])]),u("div",Ag,[a.value?(F(),q("div",Pg,[x[20]||(x[20]=u("div",{class:"section-title"},"数据摘要",-1)),u("div",Tg,[x[15]||(x[15]=u("span",{class:"muted"},"出勤",-1)),u("span",Og,re(a.value.attendDays)+" 天",1)]),u("div",Mg,[x[16]||(x[16]=u("span",{class:"muted"},"工时",-1)),u("span",Ig,re(a.value.totalHours)+" 小时",1)]),u("div",jg,[x[17]||(x[17]=u("span",{class:"muted"},"补卡",-1)),u("span",Dg,re(a.value.makeupCount)+" 次",1)]),u("div",Rg,[x[18]||(x[18]=u("span",{class:"muted"},"请假",-1)),u("span",Lg,re(a.value.leaveCount)+" 天",1)]),u("div",Kg,[x[19]||(x[19]=u("span",{class:"muted"},"记录",-1)),u("span",Fg,re(a.value.itemCount)+" 条",1)]),x[21]||(x[21]=u("div",{class:"section-sub"},"分类分布",-1)),(F(!0),q(Re,null,ut(a.value.categoryStats,ie=>(F(),q("div",{key:ie.key,class:"sum-row"},[u("span",Ng,re(ie.label),1),u("span",Vg,re(ie.count)+" 条 · "+re(ie.percent)+"%",1)]))),128)),a.value.categoryStats.length?Ee("",!0):(F(),q("div",Bg,"(无)")),x[22]||(x[22]=u("div",{class:"section-sub"},"主要成果",-1)),(F(!0),q(Re,null,ut(a.value.milestones,(ie,xe)=>(F(),q("div",{key:"m"+xe,class:"sum-item"},[nn(re(ie.content),1),u("span",Ug,"("+re(ie.date)+")",1)]))),128)),a.value.milestones.length?Ee("",!0):(F(),q("div",qg,"(无)")),x[23]||(x[23]=u("div",{class:"section-sub"},"待跟进",-1)),(F(!0),q(Re,null,ut(a.value.followups,(ie,xe)=>(F(),q("div",{key:"f"+xe,class:"sum-item"},[nn(re(ie.content),1),u("span",Hg,"("+re(ie.date)+")",1)]))),128)),a.value.followups.length?Ee("",!0):(F(),q("div",Wg,"(无)")),x[24]||(x[24]=u("div",{class:"section-sub"},"学习与成长",-1)),(F(!0),q(Re,null,ut(a.value.takeaways,(ie,xe)=>(F(),q("div",{key:"t"+xe,class:"sum-item"},[nn(re(ie.text),1),u("span",zg,"("+re(ie.date)+")",1)]))),128)),a.value.takeaways.length?Ee("",!0):(F(),q("div",Gg,"(无)"))])):Ee("",!0)])])]))}}),Jg=Gt(Yg,[["__scopeId","data-v-43f9c59b"]]),Xg=["aria-label"],Qg={class:"dialog-head"},Zg={class:"dialog-title"},eb={class:"dialog-body"},tb={class:"form-grid"},nb={class:"field span2"},rb={class:"seg"},sb={class:"field"},ob={class:"field"},ib={class:"field"},ab=["value"],lb={key:0,class:"field"},ub={class:"seg"},cb={class:"field span2"},fb={key:0,class:"form-error"},db={class:"dialog-btns"},pb=Vt({__name:"TransactionDialog",props:{open:{type:Boolean},title:{},initial:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N("expense"),a=N("餐饮"),c=N(""),d=N(""),h=N(""),y=N(!1),m=N(!1),k=N(""),D=N(null);function O(ee){n.open&&ee.key==="Escape"&&s("cancel")}gt(()=>n.open,async ee=>{var E;ee?(o.value=n.initial.type==="income"?"income":"expense",a.value=n.initial.category,c.value=n.initial.amountYuan,d.value=n.initial.date,h.value=n.initial.note,y.value=n.initial.reimbursable===1,m.value=n.initial.reimbursed===1,k.value="",window.addEventListener("keydown",O),await ts(),(E=D.value)==null||E.focus()):window.removeEventListener("keydown",O)}),dr(()=>window.removeEventListener("keydown",O)),gt(o,ee=>{a.value=ee==="expense"?Wr[0]:Vo[0]});const K=it(()=>o.value==="expense"?Wr:Vo);function W(){return a.value&&K.value.includes(a.value)?a.value:K.value[0]}function de(){const ee=Number(c.value);if(!c.value.trim()||!isFinite(ee)||ee<=0){k.value="请填写大于 0 的金额";return}if(!d.value){k.value="请选择日期";return}const E=o.value==="expense"&&y.value?1:0;s("save",{type:o.value,category:W(),amount:Math.round(ee*100),date:d.value,note:h.value.trim(),reimbursable:E,reimbursed:E&&m.value?1:0})}return(ee,E)=>(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:E[11]||(E[11]=Mr(L=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Qg,[u("span",Zg,re(e.title),1),u("button",{class:"icon-btn",title:"关闭",onClick:E[0]||(E[0]=L=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",eb,[u("div",tb,[u("div",nb,[E[12]||(E[12]=u("label",null,"类型",-1)),u("div",rb,[u("button",{class:et(["seg-btn",{active:o.value==="expense"}]),onClick:E[1]||(E[1]=L=>o.value="expense")},"支出",2),u("button",{class:et(["seg-btn",{active:o.value==="income"}]),onClick:E[2]||(E[2]=L=>o.value="income")},"收入",2)])]),u("div",sb,[E[13]||(E[13]=u("label",null,"金额(元,必填)",-1)),$e(u("input",{ref_key:"amountInput",ref:D,class:et(["input",{invalid:k.value}]),"onUpdate:modelValue":E[3]||(E[3]=L=>c.value=L),type:"number",min:"0",step:"0.01",placeholder:"0.00"},null,2),[[De,c.value]])]),u("div",ob,[E[14]||(E[14]=u("label",null,"日期(必填)",-1)),$e(u("input",{class:"input",type:"date","onUpdate:modelValue":E[4]||(E[4]=L=>d.value=L)},null,512),[[De,d.value]])]),u("div",ib,[E[15]||(E[15]=u("label",null,"分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":E[5]||(E[5]=L=>a.value=L)},[(F(!0),q(Re,null,ut(K.value,L=>(F(),q("option",{key:L,value:L},re(L),9,ab))),128))],512),[[Fn,a.value]])]),o.value==="expense"?(F(),q("div",lb,[E[16]||(E[16]=u("label",null,"报销状态",-1)),u("div",ub,[u("button",{class:et(["seg-btn",{active:!y.value}]),onClick:E[6]||(E[6]=L=>{y.value=!1,m.value=!1})},"无需报销",2),u("button",{class:et(["seg-btn",{active:y.value&&!m.value}]),onClick:E[7]||(E[7]=L=>{y.value=!0,m.value=!1})},"待报销",2),u("button",{class:et(["seg-btn",{active:y.value&&m.value}]),onClick:E[8]||(E[8]=L=>{y.value=!0,m.value=!0})},"已报销",2)])])):Ee("",!0),u("div",cb,[E[17]||(E[17]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":E[9]||(E[9]=L=>h.value=L),placeholder:"选填"},null,512),[[De,h.value]])])]),k.value?(F(),q("div",fb,re(k.value),1)):Ee("",!0)]),u("div",db,[u("button",{class:"btn btn-sm",onClick:E[10]||(E[10]=L=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:de},"保存")])],8,Xg)])):Ee("",!0)]),_:1})]))}}),hb=Gt(pb,[["__scopeId","data-v-e3568c0d"]]),vb={class:"ledger-page"},mb={class:"ledger-toolbar"},yb={class:"month-title num"},gb={class:"cards"},bb={class:"card stat-card"},wb={class:"stat-num num amt-income"},_b={class:"card stat-card"},kb={class:"stat-num num"},xb={class:"card stat-card"},Cb={class:"card stat-card"},Sb={class:"stat-num num amt-warn"},Eb={class:"card sec"},$b={class:"form-grid"},Ab={class:"field span2"},Pb={class:"seg"},Tb={class:"field"},Ob={class:"field"},Mb={class:"field"},Ib=["value"],jb={key:0,class:"field"},Db={class:"field span2"},Rb={key:0,class:"form-error"},Lb={class:"form-footer"},Kb=["disabled"],Fb=["disabled"],Nb={key:0,class:"card sec"},Vb={class:"bar-label"},Bb={class:"bar-track"},Ub={class:"muted num bar-num"},qb={class:"card table-card"},Hb={class:"tx-table"},Wb={class:"num"},zb={class:"tag"},Gb={class:"td-note"},Yb={key:0,class:"muted"},Jb={key:1,class:"tx-done"},Xb={key:2,class:"tx-pending"},Qb={class:"ops"},Zb=["onClick"],ew=["onClick"],tw=["onClick"],nw={key:0},rw={class:"muted vault-note num"},sw=Vt({__name:"LedgerView",setup(e){const t=N(xt()),n=N([]),s=N(!0),o=N("expense"),a=N(""),c=N(Wr[0]),d=N(xt()),h=N(""),y=N(!1),m=N(""),k=N(!1),D=N(!1),O=N(null),K=N({type:"expense",category:Wr[0],amountYuan:"",date:xt(),note:"",reimbursable:0,reimbursed:0}),W=N(null),de=it(()=>t.value.slice(0,7)+"-01"),ee=it(()=>{const fe=Number(t.value.slice(0,4)),G=Number(t.value.slice(5,7))-1,X=new Date(fe,G+1,0).getDate();return t.value.slice(0,7)+"-"+(X<10?"0"+X:String(X))}),E=it(()=>Number(t.value.slice(0,4))+" 年 "+Number(t.value.slice(5,7))+" 月");async function L(){s.value=!0;try{n.value=await Lv(de.value,ee.value)}catch(fe){qe("账目加载失败:"+(fe instanceof Error?fe.message:String(fe)))}s.value=!1}fn(L),gt(t,L),gt(o,fe=>{c.value=fe==="expense"?Wr[0]:Vo[0]});const Q=it(()=>n.value.slice().sort((fe,G)=>fe.date===G.date?G.id-fe.id:fe.date{let fe=0,G=0,X=0;for(const ke of n.value)ke.type==="income"?fe+=ke.amount:(G+=ke.amount,ke.reimbursable===1&&ke.reimbursed!==1&&(X+=ke.amount));return{income:fe,expense:G,pending:X,balance:fe-G}}),ce=N("all"),Z=N("all"),A=it(()=>Q.value.filter(fe=>!(ce.value!=="all"&&fe.type!==ce.value||Z.value==="pending"&&!(fe.type==="expense"&&fe.reimbursable===1&&fe.reimbursed!==1)||Z.value==="done"&&!(fe.reimbursable===1&&fe.reimbursed===1)))),x=it(()=>{const fe=new Map;let G=0;for(const ke of n.value)ke.type==="expense"&&(fe.set(ke.category,(fe.get(ke.category)||0)+ke.amount),G+=ke.amount);const X=G||1;return Array.from(fe.entries()).map(ke=>({name:ke[0],amount:ke[1],percent:Math.round(ke[1]/X*100)})).sort((ke,st)=>st.amount-ke.amount)});function ie(fe){return(fe/100).toFixed(2)}function xe(fe){return(fe.type==="income"?"+":"-")+ie(fe.amount)}function J(){t.value=Bo(t.value,-1)}function Ce(){t.value=Bo(t.value,1)}function Ne(){t.value=xt()}gt(a,()=>{m.value&&(m.value="")});async function Xe(){const fe=Number(a.value);if(!a.value.trim()||!isFinite(fe)||fe<=0){m.value="请填写大于 0 的金额";return}if(!d.value){m.value="请选择日期";return}if(!k.value){k.value=!0;try{await Kv({type:o.value,category:c.value,amount:Math.round(fe*100),date:d.value,note:h.value.trim(),reimbursable:o.value==="expense"&&y.value?1:0,reimbursed:0})}catch(G){qe("添加失败:"+(G instanceof Error?G.message:String(G))),k.value=!1;return}a.value="",h.value="",y.value=!1,m.value="",await L(),qe("记账已添加"),k.value=!1}}function He(){a.value="",h.value="",y.value=!1,m.value=""}async function Ue(fe){await Vv(fe.id),await L(),qe("已标记为已报销")}function ge(fe){O.value=fe.id,K.value={type:fe.type,category:fe.category,amountYuan:ie(fe.amount),date:fe.date,note:fe.note||"",reimbursable:fe.reimbursable,reimbursed:fe.reimbursed},D.value=!0}async function Me(fe){const G=O.value;await Fv(G,fe),D.value=!1,await L(),qe("账目已更新")}async function Ke(){W.value&&W.value.id&&await Nv(W.value.id),W.value=null,await L(),qe("账目已删除")}return(fe,G)=>(F(),q("div",vb,[u("div",mb,[u("button",{class:"icon-btn",onClick:J},[Oe(lt,{name:"chevron-left",size:16})]),u("span",yb,re(E.value),1),u("button",{class:"icon-btn",onClick:Ce},[Oe(lt,{name:"chevron-right",size:16})]),u("button",{class:"btn btn-sm",onClick:Ne},"回到本月"),G[13]||(G[13]=u("span",{class:"flex1"},null,-1)),$e(u("select",{class:"select w-filter","onUpdate:modelValue":G[0]||(G[0]=X=>ce.value=X)},[...G[11]||(G[11]=[u("option",{value:"all"},"全部类型",-1),u("option",{value:"expense"},"仅支出",-1),u("option",{value:"income"},"仅收入",-1)])],512),[[Fn,ce.value]]),$e(u("select",{class:"select w-filter","onUpdate:modelValue":G[1]||(G[1]=X=>Z.value=X)},[...G[12]||(G[12]=[u("option",{value:"all"},"全部报销",-1),u("option",{value:"pending"},"待报销",-1),u("option",{value:"done"},"已报销",-1)])],512),[[Fn,Z.value]])]),u("div",gb,[u("div",bb,[G[14]||(G[14]=u("div",{class:"muted"},"本月收入(元)",-1)),u("div",wb,re(ie(le.value.income)),1)]),u("div",_b,[G[15]||(G[15]=u("div",{class:"muted"},"本月支出(元)",-1)),u("div",kb,re(ie(le.value.expense)),1)]),u("div",xb,[G[16]||(G[16]=u("div",{class:"muted"},"本月结余(元)",-1)),u("div",{class:et(["stat-num num",{"amt-income":le.value.balance>=0,"amt-expense":le.value.balance<0}])},re(ie(le.value.balance)),3)]),u("div",Cb,[G[17]||(G[17]=u("div",{class:"muted"},"待报销(元)",-1)),u("div",Sb,re(ie(le.value.pending)),1)])]),u("div",Eb,[G[24]||(G[24]=u("div",{class:"sec-head"},[u("span",{class:"sec-title"},"新增一笔"),u("span",{class:"muted form-hint"},"金额必填,回车快速添加")],-1)),u("div",$b,[u("div",Ab,[G[18]||(G[18]=u("label",null,"类型",-1)),u("div",Pb,[u("button",{class:et(["seg-btn",{active:o.value==="expense"}]),onClick:G[2]||(G[2]=X=>o.value="expense")},"支出",2),u("button",{class:et(["seg-btn",{active:o.value==="income"}]),onClick:G[3]||(G[3]=X=>o.value="income")},"收入",2)])]),u("div",Tb,[G[19]||(G[19]=u("label",null,"金额(元,必填)",-1)),$e(u("input",{class:et(["input",{invalid:m.value}]),"onUpdate:modelValue":G[4]||(G[4]=X=>a.value=X),type:"number",min:"0",step:"0.01",placeholder:"0.00",onKeydown:jt(Xe,["enter"])},null,34),[[De,a.value]])]),u("div",Ob,[G[20]||(G[20]=u("label",null,"日期",-1)),$e(u("input",{class:"input",type:"date","onUpdate:modelValue":G[5]||(G[5]=X=>d.value=X)},null,512),[[De,d.value]])]),u("div",Mb,[G[21]||(G[21]=u("label",null,"分类",-1)),$e(u("select",{class:"select","onUpdate:modelValue":G[6]||(G[6]=X=>c.value=X)},[(F(!0),q(Re,null,ut(o.value==="expense"?Qt(Wr):Qt(Vo),X=>(F(),q("option",{key:X,value:X},re(X),9,Ib))),128))],512),[[Fn,c.value]])]),o.value==="expense"?(F(),q("div",jb,[G[22]||(G[22]=u("label",null,"报销",-1)),u("button",{class:et(["toggle-btn",{on:y.value}]),onClick:G[7]||(G[7]=X=>y.value=!y.value)},re(y.value?"需要报销":"无需报销"),3)])):Ee("",!0),u("div",Db,[G[23]||(G[23]=u("label",null,"备注",-1)),$e(u("input",{class:"input","onUpdate:modelValue":G[8]||(G[8]=X=>h.value=X),placeholder:"选填,如:客户现场午餐",onKeydown:jt(Xe,["enter"])},null,544),[[De,h.value]])])]),m.value?(F(),q("div",Rb,re(m.value),1)):Ee("",!0),u("div",Lb,[u("button",{class:"btn btn-sm",disabled:!(a.value.trim()||h.value.trim()),onClick:He},"重置",8,Kb),u("button",{class:"btn btn-primary btn-sm",disabled:k.value,onClick:Xe},"添加记录",8,Fb)])]),x.value.length?(F(),q("div",Nb,[G[25]||(G[25]=u("div",{class:"sec-title"},"本月支出分类",-1)),(F(!0),q(Re,null,ut(x.value,X=>(F(),q("div",{key:X.name,class:"bar-row"},[u("span",Vb,re(X.name),1),u("span",Bb,[u("span",{class:"bar-fill",style:sr({width:X.percent+"%"})},null,4)]),u("span",Ub,re(ie(X.amount))+" 元 · "+re(X.percent)+"%",1)]))),128))])):Ee("",!0),u("div",qb,[u("table",Hb,[G[27]||(G[27]=u("thead",null,[u("tr",null,[u("th",null,"日期"),u("th",null,"分类"),u("th",null,"金额(元)"),u("th",null,"备注"),u("th",null,"报销"),u("th",{class:"th-ops"},"操作")])],-1)),u("tbody",null,[(F(!0),q(Re,null,ut(A.value,X=>(F(),q("tr",{key:X.id},[u("td",Wb,re(X.date),1),u("td",null,[u("span",zb,re(X.category),1)]),u("td",{class:et(["num",X.type==="income"?"amt-income":"amt-expense"])},re(xe(X)),3),u("td",Gb,re(X.note||"--"),1),u("td",null,[X.type!=="expense"||X.reimbursable!==1?(F(),q("span",Yb,"--")):X.reimbursed===1?(F(),q("span",Jb,"已报销")):(F(),q("span",Xb,"待报销"))]),u("td",null,[u("div",Qb,[X.type==="expense"&&X.reimbursable===1&&X.reimbursed!==1?(F(),q("button",{key:0,class:"btn btn-xs",onClick:ke=>Ue(X)},"标记已报销",8,Zb)):Ee("",!0),u("button",{class:"btn btn-xs",onClick:ke=>ge(X)},"编辑",8,ew),u("button",{class:"btn btn-xs",onClick:ke=>W.value=X},"删除",8,tw)])])]))),128)),!A.value.length&&!s.value?(F(),q("tr",nw,[...G[26]||(G[26]=[u("td",{colspan:"6",class:"empty muted"},"本月暂无账目",-1)])])):Ee("",!0)])])]),u("div",rw,"筛选结果 "+re(A.value.length)+" 条 / 本月共 "+re(n.value.length)+" 条",1),Oe(hb,{open:D.value,title:(O.value,"编辑账目"),initial:K.value,onCancel:G[9]||(G[9]=X=>D.value=!1),onSave:Me},null,8,["open","title","initial"]),Oe(ur,{open:!!W.value,title:"删除确认",message:W.value?"将删除 "+W.value.date+" 的账目("+W.value.category+" "+ie(W.value.amount)+" 元)。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:G[10]||(G[10]=X=>W.value=null),onConfirm:Ke},null,8,["open","message"])]))}}),ow=Gt(sw,[["__scopeId","data-v-848ec3d4"]]),iw={class:"memo-page"},aw={class:"card memo-list"},lw={class:"pane-head"},uw={class:"pane-title"},cw={class:"memo-scroll"},fw=["onClick"],dw={class:"memo-item-title"},pw={class:"muted memo-item-sub"},hw={class:"muted num memo-item-time"},vw={key:0,class:"muted empty"},mw={class:"card memo-editor"},yw={class:"editor-foot"},gw={class:"muted foot-info"},bw=["disabled"],ww=["disabled"],_w={key:1,class:"empty muted editor-empty"},kw=Vt({__name:"MemoView",setup(e){const t=N([]),n=N(null),s=N(!1),o=N(""),a=N(""),c=N(null),d=N(null);async function h(){if(t.value=await Ov(),n.value&&n.value.id){const ce=t.value.find(Z=>Z.id===n.value.id);ce&&(n.value=ce)}}fn(async()=>{await h(),t.value.length&&k(t.value[0]),window.addEventListener("keydown",y)}),dr(()=>window.removeEventListener("keydown",y)),gt(Ea,async ce=>{if(!ce)return;t.value.length||await h();const Z=t.value.find(A=>A.id===ce);Ea.value=null,Z&&D(Z)},{immediate:!0});function y(ce){(ce.ctrlKey||ce.metaKey)&&ce.key.toLowerCase()==="s"&&s.value&&m.value&&(ce.preventDefault(),de())}const m=it(()=>{if(!s.value)return!1;const ce=n.value?n.value.title:"",Z=n.value?n.value.content:"";return o.value!==ce||a.value!==Z});function k(ce){n.value=ce,s.value=!0,o.value=ce.title,a.value=ce.content}function D(ce){if(!(s.value&&n.value&&n.value.id===ce.id)){if(m.value){d.value={type:"select",memo:ce};return}k(ce)}}function O(){if(m.value){d.value={type:"new"};return}K()}function K(){n.value=null,s.value=!0,o.value="",a.value=""}function W(){n.value?k(n.value):K()}async function de(){if(!o.value.trim()&&!a.value.trim()){qe("标题与内容不能都为空");return}if(n.value&&n.value.id)await Iv(n.value.id,o.value,a.value),qe("备忘已保存");else{const ce=await Mv(o.value,a.value);n.value=ce,o.value=ce.title,a.value=ce.content,qe("备忘已创建")}await h()}function ee(){n.value&&n.value.id&&(c.value=n.value)}async function E(){c.value&&c.value.id&&(await jv(c.value.id),qe("备忘已删除")),c.value=null,await h(),K()}function L(){const ce=d.value;d.value=null,ce&&(ce.type==="select"?k(ce.memo):K())}function Q(ce){return(ce.content||"").replace(/\s+/g," ").slice(0,30)}function le(ce){return ce.replace("T"," ").slice(0,16)}return(ce,Z)=>(F(),q("div",iw,[u("aside",aw,[u("div",lw,[u("span",uw,"备忘录("+re(t.value.length)+")",1),u("button",{class:"btn btn-primary btn-sm",onClick:O},"新建")]),u("div",cw,[(F(!0),q(Re,null,ut(t.value,A=>(F(),q("div",{key:A.id,class:et(["memo-item",{active:s.value&&n.value&&n.value.id===A.id}]),onClick:x=>D(A)},[u("div",dw,re(A.title||"无标题"),1),u("div",pw,re(Q(A)||"空"),1),u("div",hw,re(le(A.updated_at)),1)],10,fw))),128)),t.value.length?Ee("",!0):(F(),q("div",vw,"暂无备忘"))])]),u("section",mw,[s.value?(F(),q(Re,{key:0},[$e(u("input",{class:"input title-input","onUpdate:modelValue":Z[0]||(Z[0]=A=>o.value=A),placeholder:"标题"},null,512),[[De,o.value]]),$e(u("textarea",{class:"textarea content-textarea","onUpdate:modelValue":Z[1]||(Z[1]=A=>a.value=A),placeholder:"内容"},null,512),[[De,a.value]]),u("div",yw,[u("span",gw,[m.value?(F(),q(Re,{key:0},[nn("有未保存修改")],64)):n.value&&n.value.id?(F(),q(Re,{key:1},[nn("更新于 "+re(le(n.value.updated_at)),1)],64)):(F(),q(Re,{key:2},[nn("新备忘")],64))]),Z[4]||(Z[4]=u("span",{class:"flex1"},null,-1)),n.value&&n.value.id?(F(),q("button",{key:0,class:"btn btn-sm",onClick:ee},"删除")):Ee("",!0),u("button",{class:"btn btn-sm",disabled:!m.value,onClick:W},"放弃修改",8,bw),u("button",{class:"btn btn-primary btn-sm",disabled:!m.value,onClick:de},"保存",8,ww)])],64)):(F(),q("div",_w,"选择左侧备忘,或点击右上角新建"))]),Oe(ur,{open:!!c.value,title:"删除确认",message:c.value?"将删除备忘「"+(c.value.title||"无标题")+"」。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:Z[2]||(Z[2]=A=>c.value=null),onConfirm:E},null,8,["open","message"]),Oe(ur,{open:!!d.value,title:"未保存提示",message:"当前备忘有未保存的修改,继续操作将丢失这些修改。","confirm-text":"放弃修改并继续",onCancel:Z[3]||(Z[3]=A=>d.value=null),onConfirm:L},null,8,["open"])]))}}),xw=Gt(kw,[["__scopeId","data-v-74d60dba"]]),Cw=["aria-label"],Sw={class:"dialog-head"},Ew={class:"dialog-title"},$w={class:"dialog-body"},Aw={class:"form-grid"},Pw={class:"field span2"},Tw={class:"field span2"},Ow={class:"field span2"},Mw={class:"pwd-row"},Iw={class:"field span2"},jw={key:0,class:"form-error"},Dw={class:"dialog-btns"},Rw=Vt({__name:"CredentialDialog",props:{open:{type:Boolean},title:{},initial:{}},emits:["cancel","save"],setup(e,{emit:t}){const n=e,s=t,o=N(""),a=N(""),c=N(""),d=N(""),h=N(""),y=N(null);function m(O){n.open&&O.key==="Escape"&&s("cancel")}gt(()=>n.open,async O=>{var K;O?(o.value=n.initial.system,a.value=n.initial.account,c.value=n.initial.password,d.value=n.initial.remark,h.value="",window.addEventListener("keydown",m),await ts(),(K=y.value)==null||K.focus()):window.removeEventListener("keydown",m)}),dr(()=>window.removeEventListener("keydown",m));function k(){const O="ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789",K="!@#$%^&*",W=crypto.getRandomValues(new Uint8Array(14));let de="";for(let ee=0;ee(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[e.open?(F(),q("div",{key:0,class:"mask",onClick:K[6]||(K[6]=Mr(W=>s("cancel"),["self"]))},[u("div",{class:"dialog",role:"dialog","aria-label":e.title},[u("div",Sw,[u("span",Ew,re(e.title),1),u("button",{class:"icon-btn",title:"关闭",onClick:K[0]||(K[0]=W=>s("cancel"))},[Oe(lt,{name:"close",size:16})])]),u("div",$w,[u("div",Aw,[u("div",Pw,[K[7]||(K[7]=u("label",null,"系统名称(必填)",-1)),$e(u("input",{ref_key:"systemInput",ref:y,class:"input","onUpdate:modelValue":K[1]||(K[1]=W=>o.value=W),placeholder:"如:企业邮箱 / OA / VPN"},null,512),[[De,o.value]])]),u("div",Tw,[K[8]||(K[8]=u("label",null,"账号(必填)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":K[2]||(K[2]=W=>a.value=W),placeholder:"用户名、工号或邮箱"},null,512),[[De,a.value]])]),u("div",Ow,[K[9]||(K[9]=u("label",null,"密码(必填)",-1)),u("div",Mw,[$e(u("input",{class:"input","onUpdate:modelValue":K[3]||(K[3]=W=>c.value=W),placeholder:"输入或点击生成"},null,512),[[De,c.value]]),u("button",{class:"btn btn-sm",onClick:k},"生成")])]),u("div",Iw,[K[10]||(K[10]=u("label",null,"备注",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":K[4]||(K[4]=W=>d.value=W),placeholder:"用途、到期时间、负责人等(选填)"},null,512),[[De,d.value]])])]),h.value?(F(),q("div",jw,re(h.value),1)):Ee("",!0)]),u("div",Dw,[u("button",{class:"btn btn-sm",onClick:K[5]||(K[5]=W=>s("cancel"))},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:D},"保存")])],8,Cw)])):Ee("",!0)]),_:1})]))}}),Lw=Gt(Rw,[["__scopeId","data-v-f383b0a6"]]),df=15e4;function qo(e){const t=new Uint8Array(e);let n="";for(let s=0;s{n.value&&(Yo(),n.value=!1,y.value=[],k.value={},qe("长时间未操作,密码库已自动锁定"))},E_)}function A(){n.value&&Z()}fn(async()=>{t.value=await hf(),window.addEventListener("click",A),window.addEventListener("keydown",A),n.value&&Z()}),dr(()=>{window.removeEventListener("click",A),window.removeEventListener("keydown",A),ce!==null&&window.clearTimeout(ce)});const x=it(()=>{const G=m.value.trim().toLowerCase();return G?y.value.filter(X=>(X.system+" "+X.account+" "+(X.remark||"")).toLowerCase().includes(G)):y.value});async function ie(){if(!s.value){if(c.value="",!o.value){c.value="请输入主密码";return}if(o.value.length<6){c.value="主密码至少 6 位";return}if(o.value!==a.value){c.value="两次输入的主密码不一致";return}s.value=!0;try{await Fw(o.value),o.value="",a.value="",n.value=!0,Z(),await le(),qe("主密码已设置,密码库已解锁")}catch(G){c.value=G instanceof Error?G.message:"设置失败"}s.value=!1}}async function xe(){if(!s.value){if(h.value="",!d.value){h.value="请输入主密码";return}s.value=!0;try{await Nw(d.value),d.value="",n.value=!0,Z(),await le()}catch(G){h.value=G instanceof Error?G.message:"解锁失败"}s.value=!1}}function J(){Yo(),n.value=!1,y.value=[],k.value={},ce!==null&&window.clearTimeout(ce),qe("密码库已锁定")}async function Ce(G){const X=G.id;if(k.value[X]){k.value[X]=!1;return}try{G.passwordPlain=await la(X),k.value[X]=!0}catch(ke){qe(ke instanceof Error?ke.message:"解密失败")}}async function Ne(G){try{const X=await la(G.id);await $a(X),qe("密码已复制")}catch(X){qe(X instanceof Error?X.message:"复制失败")}}async function Xe(G){await $a(G.account),qe("账号已复制")}function He(){O.value=null,K.value={system:"",account:"",password:"",remark:""},D.value=!0}async function Ue(G){try{const X=await la(G.id);O.value=G.id,K.value={system:G.system,account:G.account,password:X,remark:G.remark||""},D.value=!0}catch(X){qe(X instanceof Error?X.message:"解密失败")}}async function ge(G){const X=O.value??void 0;await qw(G,X),D.value=!1,await le(),qe(X?"账号已更新":"账号已添加")}async function Me(){W.value&&W.value.id&&(await Hw(W.value.id),qe("账号已删除")),W.value=null,await le()}function Ke(){ee.value="",E.value="",L.value="",Q.value="",de.value=!0}async function fe(){Q.value="";try{const G=await Ww(ee.value,E.value);de.value=!1,ee.value="",E.value="",L.value="",qe("主密码已修改,"+G+" 条账号密码已重新加密")}catch(G){Q.value=G instanceof Error?G.message:"修改失败"}}return(G,X)=>(F(),q("div",Gw,[t.value===null?(F(),q("div",Yw,"加载中")):n.value?(F(),q(Re,{key:2},[u("div",n_,[u("div",r_,[Oe(lt,{name:"search",size:14,class:"search-icon"}),$e(u("input",{class:"input","onUpdate:modelValue":X[3]||(X[3]=ke=>m.value=ke),placeholder:"搜索系统名称、账号或备注"},null,512),[[De,m.value]])]),X[16]||(X[16]=u("span",{class:"flex1"},null,-1)),u("button",{class:"btn btn-sm",onClick:Ke},"修改主密码"),u("button",{class:"btn btn-sm",onClick:J},"锁定"),u("button",{class:"btn btn-primary btn-sm",onClick:He},"新增账号")]),u("div",s_,[u("table",o_,[X[18]||(X[18]=u("thead",null,[u("tr",null,[u("th",null,"系统名称"),u("th",null,"账号"),u("th",null,"密码"),u("th",null,"备注"),u("th",{class:"th-ops"},"操作")])],-1)),u("tbody",null,[(F(!0),q(Re,null,ut(x.value,ke=>(F(),q("tr",{key:ke.id},[u("td",i_,re(ke.system),1),u("td",null,[u("span",{class:"copyable",title:"点击复制账号",onClick:st=>Xe(ke)},re(ke.account),9,a_)]),u("td",null,[u("div",l_,[u("span",u_,re(k.value[ke.id]?ke.passwordPlain:"........"),1),u("button",{class:"btn btn-xs",onClick:st=>Ce(ke)},re(k.value[ke.id]?"隐藏":"显示"),9,c_),u("button",{class:"btn btn-xs",onClick:st=>Ne(ke)},"复制",8,f_)])]),u("td",d_,re(ke.remark||"--"),1),u("td",null,[u("div",p_,[u("button",{class:"btn btn-xs",onClick:st=>Ue(ke)},"编辑",8,h_),u("button",{class:"btn btn-xs",onClick:st=>W.value=ke},"删除",8,v_)])])]))),128)),x.value.length?Ee("",!0):(F(),q("tr",m_,[...X[17]||(X[17]=[u("td",{colspan:"5",class:"empty muted"},"暂无账号,点击右上角新增",-1)])]))])])]),u("div",y_,"共 "+re(y.value.length)+" 条账号记录 · 密码以 AES-256-GCM 加密存储于本机",1)],64)):(F(),q("div",Jw,[u("div",Xw,[Oe(lt,{name:"lock",size:26})]),t.value===!1?(F(),q(Re,{key:0},[X[12]||(X[12]=u("div",{class:"lock-title"},"设置主密码",-1)),X[13]||(X[13]=u("div",{class:"muted lock-tip"},"主密码用于加密保存在本机的账号密码,遗忘后无法找回,请务必牢记",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[0]||(X[0]=ke=>o.value=ke),placeholder:"设置主密码(至少 6 位)",onKeydown:jt(ie,["enter"])},null,544),[[De,o.value]]),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[1]||(X[1]=ke=>a.value=ke),placeholder:"再次输入主密码",onKeydown:jt(ie,["enter"])},null,544),[[De,a.value]]),c.value?(F(),q("div",Qw,re(c.value),1)):Ee("",!0),u("button",{class:"btn btn-primary lock-btn",disabled:s.value,onClick:ie},"完成设置并解锁",8,Zw)],64)):(F(),q(Re,{key:1},[X[14]||(X[14]=u("div",{class:"lock-title"},"密码库已锁定",-1)),X[15]||(X[15]=u("div",{class:"muted lock-tip"},"输入主密码解锁后查看与复制密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[2]||(X[2]=ke=>d.value=ke),placeholder:"主密码",onKeydown:jt(xe,["enter"])},null,544),[[De,d.value]]),h.value?(F(),q("div",e_,re(h.value),1)):Ee("",!0),u("button",{class:"btn btn-primary lock-btn",disabled:s.value,onClick:xe},"解锁",8,t_)],64))])),Oe(Lw,{open:D.value,title:O.value?"编辑账号":"新增账号",initial:K.value,onCancel:X[4]||(X[4]=ke=>D.value=!1),onSave:ge},null,8,["open","title","initial"]),Oe(ur,{open:!!W.value,title:"删除确认",message:W.value?"将删除系统「"+W.value.system+"」的账号记录。删除后不可恢复。":"","confirm-text":"删除",danger:"",onCancel:X[5]||(X[5]=ke=>W.value=null),onConfirm:Me},null,8,["open","message"]),(F(),It(Vs,{to:"body"},[Oe(ns,{name:"modal"},{default:fr(()=>[de.value?(F(),q("div",{key:0,class:"mask",onClick:X[11]||(X[11]=Mr(ke=>de.value=!1,["self"]))},[u("div",g_,[u("div",b_,[X[19]||(X[19]=u("span",{class:"dialog-title"},"修改主密码",-1)),u("button",{class:"icon-btn",title:"关闭",onClick:X[6]||(X[6]=ke=>de.value=!1)},[Oe(lt,{name:"close",size:16})])]),u("div",w_,[u("div",__,[X[20]||(X[20]=u("label",null,"旧主密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[7]||(X[7]=ke=>ee.value=ke)},null,512),[[De,ee.value]])]),u("div",k_,[X[21]||(X[21]=u("label",null,"新主密码(至少 6 位)",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[8]||(X[8]=ke=>E.value=ke)},null,512),[[De,E.value]])]),u("div",x_,[X[22]||(X[22]=u("label",null,"确认新主密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":X[9]||(X[9]=ke=>L.value=ke)},null,512),[[De,L.value]])]),Q.value?(F(),q("div",C_,re(Q.value),1)):Ee("",!0),X[23]||(X[23]=u("div",{class:"muted vp-tip"},"确认后所有账号密码将使用新主密码重新加密",-1))]),u("div",S_,[u("button",{class:"btn btn-sm",onClick:X[10]||(X[10]=ke=>de.value=!1)},"取消"),u("button",{class:"btn btn-primary btn-sm",onClick:fe},"确认修改")])])])):Ee("",!0)]),_:1})]))]))}}),A_=Gt($_,[["__scopeId","data-v-6820bc9c"]]);function P_(e){return'"'+(e==null?"":String(e)).replace(/"/g,'""')+'"'}async function Ou(e,t){const s="\uFEFF"+t.map(d=>d.map(P_).join(",")).join(`\r +`);if(Zr.isNativePlatform()){const{downloadText:d}=await lf(async()=>{const{downloadText:h}=await Promise.resolve().then(()=>pg);return{downloadText:h}},void 0,import.meta.url);return d(e,s)}const o=new Blob([s],{type:"text/csv;charset=utf-8"}),a=URL.createObjectURL(o),c=document.createElement("a");return c.href=a,c.download=e,c.click(),window.setTimeout(()=>URL.revokeObjectURL(a),1e4),""}class T_ extends Ir{constructor(){super("intern_worklog_users"),this.version(1).stores({user:"id, &username"})}}const Or=new T_,pi="intern_worklog",tl="dsh_session_user";function hi(){try{const e=localStorage.getItem(tl);if(!e)return null;const t=JSON.parse(e);if(t&&t.userId&&t.username)return t}catch{}return null}function mf(e){localStorage.setItem(tl,JSON.stringify(e))}function yf(){localStorage.removeItem(tl)}const nl="dsh_cloud_creds";function gf(e,t){localStorage.setItem(nl,JSON.stringify({username:e,password:t}))}function vi(){try{const e=localStorage.getItem(nl);if(!e)return null;const t=JSON.parse(e);if(t&&t.username&&t.password)return t}catch{}return null}function bf(){localStorage.removeItem(nl)}function rl(e){qh(new tf(pi+"_"+e))}async function O_(e,t,n){const s=e.trim();if(s.length<2||s.length>20)throw new Error("用户名需 2 到 20 个字符");if(t.length<6)throw new Error("登录密码至少 6 位");if(await Or.user.where("username").equals(s).first())throw new Error("用户名已存在");const a=el(),c=await Wo(t,a),d="u_"+Date.now().toString(36)+"_"+Math.random().toString(36).slice(2,6);await Or.user.add({id:d,username:s,pwd_hash:c,pwd_salt:a,created_at:new Date().toISOString()}),rl(d);let h=0;n&&await wf()&&(h=await R_(),await Or.user.update(d,{legacy_imported_at:new Date().toISOString()}));const y={userId:d,username:s};return mf(y),gf(y.username,t),h&&L_(h),y}async function M_(e,t){const n=e.trim(),s=await Or.user.where("username").equals(n).first();if(!s)throw new Error("用户不存在");if(await Wo(t,s.pwd_salt)!==s.pwd_hash)throw new Error("密码不正确");rl(s.id);const a={userId:s.id,username:s.username};return mf(a),gf(a.username,t),a}async function I_(){Yo(),nf(),yf(),bf()}async function j_(e,t){const n=hi();if(!n)throw new Error("未登录");if(t.length<6)throw new Error("新密码至少 6 位");const s=await Or.user.get(n.userId);if(!s)throw new Error("用户不存在");if(await Wo(e,s.pwd_salt)!==s.pwd_hash)throw new Error("旧密码不正确");const a=el(),c=await Wo(t,a);await Or.user.update(s.id,{pwd_hash:c,pwd_salt:a})}async function D_(){const e=hi();if(!e)throw new Error("未登录");Yo(),nf(),await Ir.delete(pi+"_"+e.userId),await Or.user.delete(e.userId),yf(),bf()}async function wf(){return Ir.exists(pi)}async function R_(){if(!ne)throw new Error("用户数据库未就绪");const e=new tf(pi),t=await Promise.all([e.project.toArray(),e.work_log.toArray(),e.log_item.toArray(),e.attendance.toArray(),e.weekly_note.toArray(),e.setting.toArray(),e.memo.toArray(),e.credential.toArray()]);await ne.transaction("rw",[ne.project,ne.work_log,ne.log_item,ne.attendance,ne.weekly_note,ne.setting,ne.memo,ne.credential],async()=>{await Promise.all([ne.project.clear(),ne.work_log.clear(),ne.log_item.clear(),ne.attendance.clear(),ne.weekly_note.clear(),ne.setting.clear(),ne.memo.clear(),ne.credential.clear()]),t[0].length&&await ne.project.bulkAdd(t[0]),t[1].length&&await ne.work_log.bulkAdd(t[1]),t[2].length&&await ne.log_item.bulkAdd(t[2]),t[3].length&&await ne.attendance.bulkAdd(t[3]),t[4].length&&await ne.weekly_note.bulkAdd(t[4]),t[5].length&&await ne.setting.bulkAdd(t[5]),t[6].length&&await ne.memo.bulkAdd(t[6]),t[7].length&&await ne.credential.bulkAdd(t[7])});const n=t[0].length+t[1].length+t[2].length+t[3].length+t[4].length+t[6].length+t[7].length;return e.close(),n}function L_(e){try{sessionStorage.setItem("dsh_migrate_toast",String(e))}catch{}}const K_="https://daywk.linyux.cn",Aa=["project","work_log","log_item","attendance","weekly_note","setting","memo","credential","transaction"],Pa=new Set(["sync_cursor","sync_last_time","sync_token","last_project","last_category"]);function F_(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function Mu(e){const t={...e};return delete t.id,t}function Iu(e){return JSON.stringify(e)}async function N_(e){return ne.table(e).toArray()}async function V_(){for(const e of Aa){const t=ne.table(e),n=await t.toArray();for(const s of n){if(e==="setting"&&Pa.has(s.key))continue;const o={};s.uuid||(o.uuid=F_()),s.updated_at||(o.updated_at=s.created_at||wt()),Object.keys(o).length&&await t.update(s.id,o)}}}async function sl(){return await yt("sync_base_url","")||K_}async function _f(){const e=vi();if(!e)throw new Error("未登录,无法同步");return{baseUrl:await sl(),username:e.username,password:e.password}}async function B_(){return Cf(await _f())}async function kf(){const e=vi();if(!e)throw new Error("未登录");const t=await sl(),n={"Content-Type":"application/json"},s=JSON.stringify({username:e.username,password:e.password});let o=await fetch(t+"/api/auth/register",{method:"POST",headers:n,body:s});if(o.status===409){if(o=await fetch(t+"/api/auth/login",{method:"POST",headers:n,body:s}),!o.ok)throw new Error("云端已存在同名账号且密码不一致,请检查")}else if(!o.ok)throw new Error("云端绑定失败:"+o.status)}async function U_(){return vi()!=null}async function q_(){return yt("sync_last_time","")}async function xf(e,t){const n=await fetch(e+"/api/auth/login",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({username:t.username.trim(),password:t.password})});if(!n.ok)throw new Error("云端账号或密码不正确");const s=await n.json();if(!s||!s.token)throw new Error("云端登录异常");return String(s.token)}async function H_(e,t){let n=await yt("sync_token","");return n||(n=await xf(e,t),await kt("sync_token",n),n)}let $s=!1,To=!1,Ta=!1,Gr=null,wn=null,Oa="",ju=!1;async function Yr(){if($s){To=!0;return}try{if(!await U_())return;await Cf(await _f())}catch{}}function W_(){ju||(ju=!0,ne.on("changes",()=>{Ta||$s||(Gr&&window.clearTimeout(Gr),Gr=window.setTimeout(()=>{Yr()},3e3))}))}function z_(){wn&&(wn.close(),wn=null,Oa=""),Gr&&(window.clearTimeout(Gr),Gr=null)}function G_(e,t){const n=e+"|"+t;if(!(wn&&Oa===n)){wn&&(wn.close(),wn=null);try{wn=new EventSource(e+"/api/events?token="+encodeURIComponent(t)),Oa=n,wn.onmessage=()=>{Yr()}}catch{wn=null}}}async function Cf(e){if($s)return To=!0,{pushed:0,pulled:0,removed:0,at:""};$s=!0,Ta=!0;try{const t=await Y_(e);return To&&(To=!1,window.setTimeout(()=>{Yr()},800)),t}finally{$s=!1,Ta=!1}}async function Y_(e){const t=e.baseUrl.trim().replace(/\/+$/,"");if(!t)throw new Error("请先配置同步服务地址");await V_();const n=await ne.sync_mirror.toArray(),s=new Map;for(const ee of n)s.set(ee.table+"|"+ee.uuid,ee);const o={},a=[];let c=0;for(const ee of Aa){let E=await N_(ee);ee==="setting"&&(E=E.filter(Q=>!Pa.has(Q.key)));const L=new Map;for(const Q of E)L.set(Q.uuid,Q);for(const[Q,le]of L){const ce=Mu(le),Z=Iu(ce),A=s.get(ee+"|"+Q);(!A||A.hash!==Z)&&(o[ee]=o[ee]||[],o[ee].push(ce),c++)}for(const[Q,le]of s)Q.startsWith(ee+"|")&&!L.has(le.uuid)&&a.push({table:ee,uuid:le.uuid,deleted_at:wt()});o[ee]=o[ee]||[]}const d=await H_(t,e),h=ee=>fetch(t+"/api/sync",{method:"POST",headers:{"Content-Type":"application/json",Authorization:"Bearer "+ee},body:JSON.stringify({device:"client",tables:o,tombstones:a})});let y=await h(d);if(y.status===401){await kt("sync_token","");const ee=await xf(t,e);await kt("sync_token",ee),y=await h(ee)}if(!y.ok)throw new Error("同步服务返回 "+y.status);const m=await y.json(),k=m.tables||{},D=m.tombstones||[];let O=0,K=0;const W=[];for(const ee of Aa){const E=ne.table(ee),L=await E.toArray(),Q=new Map;for(const x of L)Q.set(x.uuid,x);const le=k[ee]||[],ce=new Map;for(const x of le)ce.set(x.uuid,x);const Z=new Set(D.filter(x=>x.table===ee).map(x=>x.uuid));for(const[x,ie]of Q)Z.has(x)&&(await E.delete(ie.id),K++);for(const[x,ie]of le){if(Z.has(x))continue;const xe=Q.get(x);if(!xe)await E.add({...ie}),O++;else{const J=String(xe.updated_at||"");String(ie.updated_at||"")>J&&(await E.update(xe.id,{...ie}),O++)}}const A=await E.toArray();for(const x of A)ee==="setting"&&Pa.has(x.key)||W.push({table:ee,uuid:x.uuid,hash:Iu(Mu(x))})}await ne.sync_mirror.clear(),W.length&&await ne.sync_mirror.bulkAdd(W.map(ee=>({...ee}))),G_(t,d);const de=wt();return await kt("sync_last_time",de),{pushed:c,pulled:O,removed:K,at:de}}const J_={class:"settings"},X_={class:"card section"},Q_={class:"muted acc-line"},Z_={class:"ai-grid"},e1={class:"rule-item"},t1={class:"rule-item"},n1={class:"rule-item"},r1={key:0,class:"form-error"},s1={class:"rule-save"},o1={class:"card section"},i1={class:"rule-grid"},a1={class:"rule-item"},l1={class:"rule-item"},u1={class:"rule-item"},c1={class:"rule-item"},f1={class:"rule-item"},d1={class:"card section"},p1={class:"proj-add"},h1={key:0,class:"muted proj-tip"},v1=["onKeydown"],m1=["onClick"],y1=["onClick"],g1=["onClick"],b1={key:1,class:"muted"},w1={class:"card section"},_1={class:"card section"},k1={class:"muted acc-line"},x1={class:"rule-item"},C1={class:"rule-save"},S1=["disabled"],E1={key:0,class:"muted acc-line"},$1={key:1,class:"form-error"},A1={class:"card section"},P1={class:"ai-grid"},T1={class:"rule-item"},O1={class:"rule-item"},M1={class:"rule-item"},I1={class:"card section"},j1={class:"backup-row"},D1={key:0,class:"import-error"},R1=Vt({__name:"SettingsView",setup(e){var je;const t=N({work_start:"09:00",work_end:"18:00",grace_minutes:10,lunch_minutes:60,remind_weekly:"friday"}),n=N([]),s=N(""),o=N(""),a=N(""),c=N(""),d=N(""),h=N(""),y=N(null),m=N(""),k=N(null),D=N(null),O=N(""),K=N(((je=hi())==null?void 0:je.username)||""),W=N(""),de=N(""),ee=N(""),E=N(""),L=N(!1),Q="0.2.0",le=N(""),ce=N(""),Z=N(""),A=N(""),x=N(!1),ie=N("");async function xe(){var w;le.value=await sl(),ce.value=((w=vi())==null?void 0:w.username)||"",ie.value=await q_()}async function J(){await kt("sync_base_url",le.value.trim()),qe("同步地址已保存")}async function Ce(){A.value="";try{await kf(),qe("云端绑定已重建")}catch(w){A.value=w instanceof Error?w.message:"绑定失败"}}async function Ne(){if(!x.value){A.value="",x.value=!0;try{await J();const w=await B_();ie.value=w.at,Z.value="推送 "+w.pushed+" 条 · 拉取 "+w.pulled+" 条 · 删除 "+w.removed+" 条",qe("同步完成")}catch(w){A.value=w instanceof Error?w.message:"同步失败"}x.value=!1}}async function Xe(){if(E.value="",de.value!==ee.value){E.value="两次输入的新密码不一致";return}try{await j_(W.value,de.value),W.value="",de.value="",ee.value="",qe("登录密码已修改")}catch(w){E.value=w instanceof Error?w.message:"修改失败"}}async function He(){await D_(),window.location.reload()}async function Ue(){t.value=await jr(),n.value=await Ks(!0),a.value=(await Xa()).join(` +`),c.value=await yt("ai_base_url",""),d.value=await yt("ai_api_key",""),h.value=await yt("ai_model",""),await xe()}async function ge(){await kt("ai_base_url",c.value.trim()),await kt("ai_api_key",d.value.trim()),await kt("ai_model",h.value.trim()),qe("AI 配置已保存")}async function Me(){const w=xt(),g=await Promise.all([fi("2000-01-01",w),Ks(!0)]),P=g[0],ae=g[1],se=new Map(ae.map(oe=>[oe.id,oe.name])),ue=[["日期","分类","项目","内容","耗时(分钟)","成果","待跟进","收获","备注"]];for(const oe of P)ue.push([oe.date,Ja(oe.category),oe.project_id&&se.get(oe.project_id)||"",oe.content,oe.minutes==null?"":oe.minutes,oe.is_milestone?"是":"",oe.needs_followup?"是":"",oe.takeaway||"",oe.remark||""]);const ye=await Ou("工作记录_"+w.replace(/-/g,"")+".csv",ue);qe(ye?"CSV 已导出到:"+ye:"CSV 已导出到系统下载目录")}async function Ke(){const w=xt(),g=await Promise.all([jr(),ci("2000-01-01",w)]),P=g[0],ae=g[1],se=["周日","周一","周二","周三","周四","周五","周六"],ue=[["日期","星期","状态","上班时间","下班时间","地点","类型","说明"]];for(const oe of ae){const we=qs(oe,oe.date,P,oe.date===w);ue.push([oe.date,se[rs(oe.date).getDay()],we.label,oe.clock_in_at?Vn(oe.clock_in_at):"",oe.clock_out_at?Vn(oe.clock_out_at):"",oe.location||"",oe.kind==="makeup"?"补卡":oe.kind==="leave"?"休假":"正常",oe.note||""])}const ye=await Ou("考勤记录_"+w.replace(/-/g,"")+".csv",ue);qe(ye?"CSV 已导出到:"+ye:"CSV 已导出到系统下载目录")}fn(Ue);async function fe(){await kt("work_start",t.value.work_start),await kt("work_end",t.value.work_end),await kt("grace_minutes",String(t.value.grace_minutes)),await kt("lunch_minutes",String(t.value.lunch_minutes)),await kt("remind_weekly",t.value.remind_weekly),qe("打卡规则已保存")}async function G(){await sf(a.value.split(` +`)),qe("常用地点已保存")}async function X(){const w=s.value.trim();if(w){try{await mv(w),o.value="",s.value=""}catch{o.value="项目名已存在"}await Ue()}}function ke(w){y.value=w.id,m.value=w.name}async function st(w){const g=m.value.trim();if(g)try{await yv(w.id,g),o.value=""}catch{o.value="项目名已存在"}y.value=null,await Ue()}async function pt(w){await gv(w.id,w.archived!==1),await Ue()}async function ht(){try{const w=await Bv(),g=await Za("实习日志备份_"+xt().replace(/-/g,"")+".json",w);qe(g?"备份已导出到:"+g:"备份已导出到系统下载目录")}catch(w){qe("导出失败:"+(w instanceof Error?w.message:String(w)))}}function Yt(w){const g=w.target,P=g.files&&g.files[0];if(O.value="",!P)return;const ae=P.name;P.text().then(se=>{D.value={name:ae,text:se}}),g.value=""}async function Jt(){if(D.value)try{await Uv(D.value.text),D.value=null,O.value="",await Ue(),qe("数据导入完成")}catch(w){D.value=null,O.value=w instanceof Error?w.message:"导入失败"}}return(w,g)=>(F(),q("div",J_,[u("div",X_,[g[23]||(g[23]=u("div",{class:"section-title"},"账号与隐私",-1)),u("div",Q_,"版本 v"+re(Qt(Q))+" · 当前用户:"+re(K.value)+" · 每位用户独立数据库隔离存储于本机 · 登录密码仅保存 PBKDF2 哈希",1),u("div",Z_,[u("div",e1,[g[20]||(g[20]=u("label",null,"旧登录密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[0]||(g[0]=P=>W.value=P)},null,512),[[De,W.value]])]),u("div",t1,[g[21]||(g[21]=u("label",null,"新登录密码(至少 6 位)",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[1]||(g[1]=P=>de.value=P)},null,512),[[De,de.value]])]),u("div",n1,[g[22]||(g[22]=u("label",null,"确认新登录密码",-1)),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":g[2]||(g[2]=P=>ee.value=P)},null,512),[[De,ee.value]])])]),E.value?(F(),q("div",r1,re(E.value),1)):Ee("",!0),u("div",s1,[u("button",{class:"btn btn-primary btn-sm",onClick:Xe},"修改登录密码"),u("button",{class:"btn btn-sm btn-danger",onClick:g[3]||(g[3]=P=>L.value=!0)},"删除此用户及全部数据")])]),u("div",o1,[g[30]||(g[30]=u("div",{class:"section-title"},"打卡规则",-1)),u("div",i1,[u("div",a1,[g[24]||(g[24]=u("label",null,"上班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":g[4]||(g[4]=P=>t.value.work_start=P)},null,512),[[De,t.value.work_start]])]),u("div",l1,[g[25]||(g[25]=u("label",null,"下班时间",-1)),$e(u("input",{type:"time",class:"input","onUpdate:modelValue":g[5]||(g[5]=P=>t.value.work_end=P)},null,512),[[De,t.value.work_end]])]),u("div",u1,[g[26]||(g[26]=u("label",null,"迟到宽限(分钟)",-1)),$e(u("input",{type:"number",class:"input",min:"0","onUpdate:modelValue":g[6]||(g[6]=P=>t.value.grace_minutes=P)},null,512),[[De,t.value.grace_minutes,void 0,{number:!0}]])]),u("div",c1,[g[27]||(g[27]=u("label",null,"午休扣除(分钟)",-1)),$e(u("input",{type:"number",class:"input",min:"0","onUpdate:modelValue":g[7]||(g[7]=P=>t.value.lunch_minutes=P)},null,512),[[De,t.value.lunch_minutes,void 0,{number:!0}]])]),u("div",f1,[g[29]||(g[29]=u("label",null,"周记提醒",-1)),$e(u("select",{class:"select","onUpdate:modelValue":g[8]||(g[8]=P=>t.value.remind_weekly=P)},[...g[28]||(g[28]=[u("option",{value:"friday"},"每周五提醒",-1),u("option",{value:"off"},"关闭",-1)])],512),[[Fn,t.value.remind_weekly]])])]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:fe},"保存规则")])]),u("div",d1,[g[31]||(g[31]=u("div",{class:"section-title"},"项目管理",-1)),u("div",p1,[$e(u("input",{class:"input","onUpdate:modelValue":g[9]||(g[9]=P=>s.value=P),placeholder:"新项目名称",onKeydown:jt(X,["enter"])},null,544),[[De,s.value]]),u("button",{class:"btn btn-sm",onClick:X},"添加")]),o.value?(F(),q("div",h1,re(o.value),1)):Ee("",!0),(F(!0),q(Re,null,ut(n.value,P=>(F(),q("div",{key:P.id,class:"proj-row"},[y.value===P.id?(F(),q(Re,{key:0},[$e(u("input",{class:"input","onUpdate:modelValue":g[10]||(g[10]=ae=>m.value=ae),onKeydown:jt(ae=>st(P),["enter"])},null,40,v1),[[De,m.value]]),u("button",{class:"btn btn-sm",onClick:ae=>st(P)},"保存",8,m1),u("button",{class:"btn btn-sm",onClick:g[11]||(g[11]=ae=>y.value=null)},"取消")],64)):(F(),q(Re,{key:1},[u("span",{class:et(["proj-name",{archived:P.archived===1}])},re(P.name),3),u("button",{class:"icon-btn",title:"重命名",onClick:ae=>ke(P)},[Oe(lt,{name:"edit",size:14})],8,y1),u("button",{class:"btn btn-sm",onClick:ae=>pt(P)},re(P.archived===1?"恢复":"归档"),9,g1)],64))]))),128)),n.value.length?Ee("",!0):(F(),q("div",b1,"暂无项目,先添加一个"))]),u("div",w1,[g[33]||(g[33]=u("div",{class:"section-title"},"常用地点",-1)),$e(u("textarea",{class:"textarea","onUpdate:modelValue":g[12]||(g[12]=P=>a.value=P),placeholder:"每行一个地点,如:公司、客户现场、出差、居家办公"},null,512),[[De,a.value]]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:G},"保存地点"),g[32]||(g[32]=u("span",{class:"muted loc-note"},"打卡时可直接输入新地点,保存后自动加入列表",-1))])]),u("div",_1,[g[35]||(g[35]=u("div",{class:"section-title"},"多端数据同步",-1)),u("div",k1,"云端账号:"+re(ce.value||"未绑定")+" · 登录即自动绑定并同步(变更实时推送 + 每 5 分钟兜底);密码库以密文同步,主密码永不出本机",1),u("div",x1,[g[34]||(g[34]=u("label",null,"同步服务地址(默认即可)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[13]||(g[13]=P=>le.value=P),placeholder:"https://daywk.linyux.cn"},null,512),[[De,le.value]])]),u("div",C1,[u("button",{class:"btn btn-sm",onClick:J},"保存地址"),u("button",{class:"btn btn-primary btn-sm",disabled:x.value,onClick:Ne},re(x.value?"同步中":"立即同步"),9,S1),u("button",{class:"btn btn-sm",onClick:Ce},"重建云端绑定")]),Z.value?(F(),q("div",E1,"上次同步:"+re(ie.value||"--")+" · "+re(Z.value),1)):Ee("",!0),A.value?(F(),q("div",$1,re(A.value),1)):Ee("",!0)]),u("div",A1,[g[40]||(g[40]=u("div",{class:"section-title"},"AI 润色配置(可选)",-1)),u("div",P1,[u("div",T1,[g[36]||(g[36]=u("label",null,"接口地址(OpenAI 兼容,到 /v1 为止)",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[14]||(g[14]=P=>c.value=P),placeholder:"https://api.example.com/v1"},null,512),[[De,c.value]])]),u("div",O1,[g[37]||(g[37]=u("label",null,"API Key",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[15]||(g[15]=P=>d.value=P),placeholder:"sk-..."},null,512),[[De,d.value]])]),u("div",M1,[g[38]||(g[38]=u("label",null,"模型名称",-1)),$e(u("input",{class:"input","onUpdate:modelValue":g[16]||(g[16]=P=>h.value=P),placeholder:"如:deepseek-chat"},null,512),[[De,h.value]])])]),u("div",{class:"rule-save"},[u("button",{class:"btn btn-primary btn-sm",onClick:ge},"保存 AI 配置"),g[39]||(g[39]=u("span",{class:"muted loc-note"},"配置仅保存在本机浏览器;总结页可用 AI 润色草稿,需服务端允许浏览器跨域",-1))])]),u("div",I1,[g[41]||(g[41]=u("div",{class:"section-title"},"数据备份",-1)),u("div",j1,[u("button",{class:"btn btn-sm",onClick:ht},"导出 JSON 备份"),u("button",{class:"btn btn-sm",onClick:g[17]||(g[17]=P=>{var ae;return(ae=k.value)==null?void 0:ae.click()})},"导入 JSON 备份"),u("button",{class:"btn btn-sm",onClick:Me},"导出工作记录 CSV"),u("button",{class:"btn btn-sm",onClick:Ke},"导出考勤 CSV"),u("input",{ref_key:"fileInput",ref:k,type:"file",accept:"application/json,.json",style:{display:"none"},onChange:Yt},null,544)]),O.value?(F(),q("div",D1,re(O.value),1)):Ee("",!0),g[42]||(g[42]=u("div",{class:"muted backup-note"},"数据保存在浏览器 IndexedDB 中,建议定期导出 JSON 备份。",-1))]),Oe(ur,{open:!!D.value,title:"导入确认",message:D.value?"将从文件「"+D.value.name+"」导入备份。现有全部数据将被覆盖,且不可恢复,请先确认已导出当前备份。":"","confirm-text":"覆盖导入",danger:"",onCancel:g[18]||(g[18]=P=>D.value=null),onConfirm:Jt},null,8,["open","message"]),Oe(ur,{open:L.value,title:"删除用户确认",message:"将永久删除用户「"+K.value+"」及其全部数据:工作日志、考勤、备忘录、账号密码库都将被清除,且不可恢复。请确认。","confirm-text":"永久删除",danger:"",onCancel:g[19]||(g[19]=P=>L.value=!1),onConfirm:He},null,8,["open","message"])]))}}),L1=Gt(R1,[["__scopeId","data-v-81598f02"]]),K1={class:"login-page"},F1={class:"card login-card"},N1={class:"login-brand"},V1={class:"brand-icon"},B1={class:"seg"},U1=["placeholder"],q1={key:1,class:"mig-row"},H1={key:2,class:"form-error"},W1=["disabled"],z1=Vt({__name:"LoginView",emits:["login"],setup(e,{emit:t}){const n=t,s=N("login"),o=N(""),a=N(""),c=N(""),d=N(!0),h=N(!1),y=N(""),m=N(!1);fn(async()=>{h.value=await wf()});function k(O){s.value=O,y.value="",c.value=""}async function D(){if(!m.value){y.value="",m.value=!0;try{let O;if(s.value==="login")O=await M_(o.value,a.value);else{if(a.value.length<6){y.value="登录密码至少 6 位",m.value=!1;return}if(a.value!==c.value){y.value="两次输入的密码不一致",m.value=!1;return}O=await O_(o.value,a.value,d.value)}n("login",O)}catch(O){y.value=O instanceof Error?O.message:"操作失败"}m.value=!1}}return(O,K)=>(F(),q("div",K1,[u("div",F1,[u("div",N1,[u("div",V1,[Oe(lt,{name:"calendar",size:22})]),K[6]||(K[6]=u("div",{class:"login-title"},"实习工作日志",-1)),K[7]||(K[7]=u("div",{class:"muted login-sub"},"打卡 · 记录 · 总结 · 备忘录 · 密码库",-1)),K[8]||(K[8]=u("div",{class:"muted login-sub"},"每位用户独立数据库,数据彼此隔离并保存在本机",-1))]),u("div",B1,[u("button",{class:et(["seg-btn",{active:s.value==="login"}]),onClick:K[0]||(K[0]=W=>k("login"))},"登录",2),u("button",{class:et(["seg-btn",{active:s.value==="create"}]),onClick:K[1]||(K[1]=W=>k("create"))},"创建用户",2)]),$e(u("input",{class:"input","onUpdate:modelValue":K[2]||(K[2]=W=>o.value=W),placeholder:"用户名(2 到 20 个字符)",onKeydown:jt(D,["enter"])},null,544),[[De,o.value]]),$e(u("input",{type:"password",class:"input","onUpdate:modelValue":K[3]||(K[3]=W=>a.value=W),placeholder:s.value==="login"?"登录密码":"设置登录密码(至少 6 位)",onKeydown:jt(D,["enter"])},null,40,U1),[[De,a.value]]),s.value==="create"?$e((F(),q("input",{key:0,type:"password",class:"input","onUpdate:modelValue":K[4]||(K[4]=W=>c.value=W),placeholder:"再次输入密码",onKeydown:jt(D,["enter"])},null,544)),[[De,c.value]]):Ee("",!0),s.value==="create"&&h.value?(F(),q("label",q1,[$e(u("input",{type:"checkbox","onUpdate:modelValue":K[5]||(K[5]=W=>d.value=W)},null,512),[[Sh,d.value]]),K[9]||(K[9]=u("span",null,"导入本机原有工作日志数据到此用户(原数据保留不删除)",-1))])):Ee("",!0),y.value?(F(),q("div",H1,re(y.value),1)):Ee("",!0),u("button",{class:"btn btn-primary login-btn",disabled:m.value,onClick:D},re(s.value==="login"?"登录":"创建并进入"),9,W1),K[10]||(K[10]=u("div",{class:"muted login-note"}," 登录后自动开启云端同步(密码会保存在本机用于云同步);系统只保存密码哈希,忘记密码将无法访问该用户数据 ",-1))])]))}}),G1=Gt(z1,[["__scopeId","data-v-d3d6c8cb"]]),Y1={key:1,class:"app"},J1={class:"side"},X1=["data-tip","onClick"],Q1={class:"main"},Z1={class:"topbar"},e0={class:"title"},t0={class:"gsearch"},n0={key:0,class:"gs-panel"},r0={key:0,class:"gs-group muted"},s0=["onMousedown"],o0={class:"tag"},i0={class:"gs-text"},a0={class:"muted num gs-date"},l0={key:1,class:"gs-group muted"},u0=["onMousedown"],c0={class:"gs-text"},f0={class:"muted gs-sub"},d0={key:1,class:"gs-empty muted"},p0={class:"user-chip num"},h0=["disabled"],v0={class:"num"},m0={class:"content"},y0={class:"content-inner"},g0={class:"toast-wrap"},b0=Vt({__name:"App",setup(e){const t=Hv(),n=N(hi());async function s(ge){n.value=ge,location.hash="#/calendar",le.value="calendar",await xe(),await Ue(),c();try{await kf(),await Yr()}catch{}showToast("欢迎,"+ge.username);const Me=sessionStorage.getItem("dsh_migrate_toast");Me&&(sessionStorage.removeItem("dsh_migrate_toast"),showToast("已迁移原有数据 "+Me+" 条"))}async function o(){z_(),a!==null&&(window.clearInterval(a),a=null),await I_(),n.value=null,le.value="calendar",location.hash="#/calendar",showToast("已退出登录")}let a=null;function c(){W_(),a!==null&&window.clearInterval(a),a=window.setInterval(()=>{Yr()},60*1e3),Yr()}const d=N(null),h=N(""),y=N(!1),m=N({logs:[],memos:[]});let k=null;const D=it(()=>!!(m.value.logs.length||m.value.memos.length));function O(){k&&window.clearTimeout(k);const ge=h.value;k=window.setTimeout(async()=>{const Me=ge.trim();if(!Me){m.value={logs:[],memos:[]};return}const Ke=await Promise.all([Dv(Me,8),Rv(Me,4)]);m.value={logs:Ke[0],memos:Ke[1]}},200)}function K(){h.value="",m.value={logs:[],memos:[]},y.value=!1}function W(ge){Sa.value=ge.date,ce("calendar"),K()}function de(ge){Ea.value=ge.id,ce("memo"),K()}function ee(){window.setTimeout(()=>{y.value=!1},150)}function E(ge){var Me;(ge.ctrlKey||ge.metaKey)&&ge.key.toLowerCase()==="k"&&(ge.preventDefault(),(Me=d.value)==null||Me.focus())}const L=[{key:"calendar",name:"日历",icon:"calendar"},{key:"today",name:"详情",icon:"edit"},{key:"stats",name:"统计",icon:"chart"},{key:"report",name:"总结",icon:"export"},{key:"ledger",name:"记账",icon:"wallet"},{key:"memo",name:"备忘录",icon:"memo"},{key:"vault",name:"密码库",icon:"lock"},{key:"settings",name:"设置",icon:"settings"}];function Q(){const ge=(location.hash||"").replace("#/","");return L.some(Me=>Me.key===ge)?ge:"calendar"}const le=N(Q());window.addEventListener("hashchange",()=>{le.value=Q()});function ce(ge){location.hash="#/"+ge}const Z=it(()=>L.find(ge=>ge.key===le.value)||L[0]),A=N(xt()),x=N(void 0),ie=N(!1);async function xe(){if(x.value=await mn(A.value),ie.value=!1,new Date().getHours()<4){const Me=await mn(Kn(A.value,-1));ie.value=!!(Me&&Me.clock_in_at&&!Me.clock_out_at)}}const J=it(()=>{const ge=x.value;return ge&&ge.clock_in_at&&!ge.clock_out_at?!0:ie.value&&!(ge&&ge.clock_in_at)}),Ce=it(()=>{const ge=x.value;return!!(ge&&ge.clock_in_at&&ge.clock_out_at)}),Ne=it(()=>{const ge=x.value;return J.value?"下班打卡":Ce.value?"已打卡 "+Vn(ge==null?void 0:ge.clock_in_at)+" - "+Vn(ge==null?void 0:ge.clock_out_at):"上班打卡"});async function Xe(){if(J.value)try{await wv()}catch{}else await of(A.value);await xe(),Sr()}gt(Hs,()=>{n.value&&xe()});const He=N(!1);async function Ue(){if((await jr()).remind_weekly==="off"){He.value=!1;return}const Me=new Date().getDay();if(Me===5||Me===6||Me===0){const Ke=await Qa(Es(A.value));He.value=!Ke||!Ke.highlights&&!Ke.challenges&&!Ke.plan_next}else He.value=!1}return fn(async()=>{window.addEventListener("keydown",E),n.value&&(rl(n.value.userId),await xe(),await Ue(),c())}),(ge,Me)=>{var Ke;return n.value?(F(),q("div",Y1,[u("nav",J1,[(F(),q(Re,null,ut(L,fe=>u("button",{key:fe.key,class:et(["nav-btn",{active:le.value===fe.key}]),"data-tip":fe.name,onClick:G=>ce(fe.key)},[Oe(lt,{name:fe.icon,size:18},null,8,["name"])],10,X1)),64))]),u("div",Q1,[u("header",Z1,[u("span",e0,re(Z.value.name),1),u("div",t0,[Oe(lt,{name:"search",size:14,class:"gs-icon"}),$e(u("input",{ref_key:"gsInput",ref:d,class:"input gs-input","onUpdate:modelValue":Me[0]||(Me[0]=fe=>h.value=fe),placeholder:"搜索工作记录与备忘录(Ctrl+K)",onInput:O,onFocus:Me[1]||(Me[1]=fe=>y.value=!0),onBlur:ee,onKeydown:jt(K,["esc"])},null,544),[[De,h.value]]),y.value&&h.value.trim()?(F(),q("div",n0,[D.value?(F(),q(Re,{key:0},[m.value.logs.length?(F(),q("div",r0,"工作记录")):Ee("",!0),(F(!0),q(Re,null,ut(m.value.logs,fe=>(F(),q("div",{key:"l"+fe.id,class:"gs-item",onMousedown:Mr(G=>W(fe),["prevent"])},[u("span",o0,re(Qt(Ja)(fe.category)),1),u("span",i0,re(fe.content),1),u("span",a0,re(fe.date),1)],40,s0))),128)),m.value.memos.length?(F(),q("div",l0,"备忘录")):Ee("",!0),(F(!0),q(Re,null,ut(m.value.memos,fe=>(F(),q("div",{key:"m"+fe.id,class:"gs-item",onMousedown:Mr(G=>de(fe),["prevent"])},[u("span",c0,re(fe.title||"无标题"),1),u("span",f0,re(fe.content),1)],40,u0))),128))],64)):(F(),q("div",d0,"无匹配结果"))])):Ee("",!0)]),Me[4]||(Me[4]=u("span",{class:"flex1"},null,-1)),He.value?(F(),q("button",{key:0,class:"week-tip",onClick:Me[2]||(Me[2]=fe=>ce("report"))},[...Me[3]||(Me[3]=[u("span",{class:"dot",style:{background:"var(--warn)"}},null,-1),nn(" 填写本周周记 ",-1)])])):Ee("",!0),u("span",p0,re((Ke=n.value)==null?void 0:Ke.username),1),u("button",{class:"btn btn-sm",onClick:o},"退出"),u("button",{class:"btn btn-primary btn-sm",disabled:Ce.value,onClick:Xe},[Oe(lt,{name:Ce.value?"check-circle":"clock",size:14},null,8,["name"]),u("span",v0,re(Ne.value),1)],8,h0)]),u("main",m0,[u("div",y0,[le.value==="calendar"?(F(),It(hy,{key:0})):le.value==="today"?(F(),It(wy,{key:1})):le.value==="stats"?(F(),It(Xy,{key:2})):le.value==="report"?(F(),It(Jg,{key:3})):le.value==="ledger"?(F(),It(ow,{key:4})):le.value==="memo"?(F(),It(xw,{key:5})):le.value==="vault"?(F(),It(A_,{key:6})):(F(),It(L1,{key:7}))])])]),u("div",g0,[Oe(mh,{name:"toast"},{default:fr(()=>[(F(!0),q(Re,null,ut(Qt(t),fe=>(F(),q("div",{key:fe.id,class:"toast"},re(fe.text),1))),128))]),_:1})])])):(F(),It(G1,{key:0,onLogin:s}))}}}),w0=Gt(b0,[["__scopeId","data-v-219a8436"]]);Mh(w0).mount("#app");"serviceWorker"in navigator&&location.protocol.startsWith("http")&&window.addEventListener("load",()=>{navigator.serviceWorker.register("sw.js").catch(()=>{})});export{ff as W,lf as _,fg as b,cf as r}; diff --git a/intern-log/dist/assets/web-CP24IQDG.js b/intern-log/dist/assets/web-D50Vc2g1.js similarity index 98% rename from intern-log/dist/assets/web-CP24IQDG.js rename to intern-log/dist/assets/web-D50Vc2g1.js index 8aeef14..11d4991 100644 --- a/intern-log/dist/assets/web-CP24IQDG.js +++ b/intern-log/dist/assets/web-D50Vc2g1.js @@ -1 +1 @@ -import{W as P,b as x}from"./index-DS0rgMh0.js";import{Encoding as E}from"./index-DpHejoml.js";function m(w){const e=w.split("/").filter(t=>t!=="."),r=[];return e.forEach(t=>{t===".."&&r.length>0&&r[r.length-1]!==".."?r.pop():r.push(t)}),r.join("/")}function R(w,e){w=m(w),e=m(e);const r=w.split("/"),t=e.split("/");return w!==e&&r.every((i,n)=>i===t[n])}class g extends P{constructor(){super(...arguments),this.DB_VERSION=1,this.DB_NAME="Disc",this._writeCmds=["add","put","delete"],this.downloadFile=async e=>{var r,t;const i=x(e,e.webFetchExtra),n=await fetch(e.url,i);let s;if(!e.progress)s=await n.blob();else if(!(n!=null&&n.body))s=new Blob;else{const c=n.body.getReader();let o=0;const d=[],h=n.headers.get("content-type"),y=parseInt(n.headers.get("content-length")||"0",10);for(;;){const{done:f,value:p}=await c.read();if(f)break;d.push(p),o+=(p==null?void 0:p.length)||0;const b={url:e.url,bytes:o,contentLength:y};this.notifyListeners("progress",b)}const u=new Uint8Array(o);let l=0;for(const f of d)typeof f>"u"||(u.set(f,l),l+=f.length);s=new Blob([u.buffer],{type:h||void 0})}return{path:(await this.writeFile({path:e.path,directory:(r=e.directory)!==null&&r!==void 0?r:void 0,recursive:(t=e.recursive)!==null&&t!==void 0?t:!1,data:s})).uri,blob:s}}}async initDb(){if(this._db!==void 0)return this._db;if(!("indexedDB"in window))throw this.unavailable("This browser doesn't support IndexedDB");return new Promise((e,r)=>{const t=indexedDB.open(this.DB_NAME,this.DB_VERSION);t.onupgradeneeded=g.doUpgrade,t.onsuccess=()=>{this._db=t.result,e(t.result)},t.onerror=()=>r(t.error),t.onblocked=()=>{console.warn("db blocked")}})}static doUpgrade(e){const t=e.target.result;switch(e.oldVersion){case 0:case 1:default:t.objectStoreNames.contains("FileStorage")&&t.deleteObjectStore("FileStorage"),t.createObjectStore("FileStorage",{keyPath:"path"}).createIndex("by_folder","folder")}}async dbRequest(e,r){const t=this._writeCmds.indexOf(e)!==-1?"readwrite":"readonly";return this.initDb().then(i=>new Promise((n,s)=>{const o=i.transaction(["FileStorage"],t).objectStore("FileStorage")[e](...r);o.onsuccess=()=>n(o.result),o.onerror=()=>s(o.error)}))}async dbIndexRequest(e,r,t){const i=this._writeCmds.indexOf(r)!==-1?"readwrite":"readonly";return this.initDb().then(n=>new Promise((s,a)=>{const h=n.transaction(["FileStorage"],i).objectStore("FileStorage").index(e)[r](...t);h.onsuccess=()=>s(h.result),h.onerror=()=>a(h.error)}))}getPath(e,r){const t=r!==void 0?r.replace(/^[/]+|[/]+$/g,""):"";let i="";return e!==void 0&&(i+="/"+e),r!==""&&(i+="/"+t),i}async clear(){(await this.initDb()).transaction(["FileStorage"],"readwrite").objectStore("FileStorage").clear()}async readFile(e){const r=this.getPath(e.directory,e.path),t=await this.dbRequest("get",[r]);if(t===void 0)throw Error("File does not exist.");return{data:t.content?t.content:""}}async writeFile(e){const r=this.getPath(e.directory,e.path);let t=e.data;const i=e.encoding,n=e.recursive,s=await this.dbRequest("get",[r]);if(s&&s.type==="directory")throw Error("The supplied path is a directory.");const a=r.substr(0,r.lastIndexOf("/"));if(await this.dbRequest("get",[a])===void 0){const h=a.indexOf("/",1);if(h!==-1){const y=a.substr(h);await this.mkdir({path:y,directory:e.directory,recursive:n})}}if(!i&&!(t instanceof Blob)&&(t=t.indexOf(",")>=0?t.split(",")[1]:t,!this.isBase64String(t)))throw Error("The supplied data is not valid base64 content.");const o=Date.now(),d={path:r,folder:a,type:"file",size:t instanceof Blob?t.size:t.length,ctime:o,mtime:o,content:t};return await this.dbRequest("put",[d]),{uri:d.path}}async appendFile(e){const r=this.getPath(e.directory,e.path);let t=e.data;const i=e.encoding,n=r.substr(0,r.lastIndexOf("/")),s=Date.now();let a=s;const c=await this.dbRequest("get",[r]);if(c&&c.type==="directory")throw Error("The supplied path is a directory.");if(await this.dbRequest("get",[n])===void 0){const h=n.indexOf("/",1);if(h!==-1){const y=n.substr(h);await this.mkdir({path:y,directory:e.directory,recursive:!0})}}if(!i&&!this.isBase64String(t))throw Error("The supplied data is not valid base64 content.");if(c!==void 0){if(c.content instanceof Blob)throw Error("The occupied entry contains a Blob object which cannot be appended to.");c.content!==void 0&&!i?t=btoa(atob(c.content)+atob(t)):t=c.content+t,a=c.ctime}const d={path:r,folder:n,type:"file",size:t.length,ctime:a,mtime:s,content:t};await this.dbRequest("put",[d])}async deleteFile(e){const r=this.getPath(e.directory,e.path);if(await this.dbRequest("get",[r])===void 0)throw Error("File does not exist.");if((await this.dbIndexRequest("by_folder","getAllKeys",[IDBKeyRange.only(r)])).length!==0)throw Error("Folder is not empty.");await this.dbRequest("delete",[r])}async mkdir(e){const r=this.getPath(e.directory,e.path),t=e.recursive,i=r.substr(0,r.lastIndexOf("/")),n=(r.match(/\//g)||[]).length,s=await this.dbRequest("get",[i]),a=await this.dbRequest("get",[r]);if(n===1)throw Error("Cannot create Root directory");if(a!==void 0)throw Error("Current directory does already exist.");if(!t&&n!==2&&s===void 0)throw Error("Parent directory must exist");if(t&&n!==2&&s===void 0){const d=i.substr(i.indexOf("/",1));await this.mkdir({path:d,directory:e.directory,recursive:t})}const c=Date.now(),o={path:r,folder:i,type:"directory",size:0,ctime:c,mtime:c};await this.dbRequest("put",[o])}async rmdir(e){const{path:r,directory:t,recursive:i}=e,n=this.getPath(t,r),s=await this.dbRequest("get",[n]);if(s===void 0)throw Error("Folder does not exist.");if(s.type!=="directory")throw Error("Requested path is not a directory");const a=await this.readdir({path:r,directory:t});if(a.files.length!==0&&!i)throw Error("Folder is not empty");for(const c of a.files){const o=`${r}/${c.name}`;(await this.stat({path:o,directory:t})).type==="file"?await this.deleteFile({path:o,directory:t}):await this.rmdir({path:o,directory:t,recursive:i})}await this.dbRequest("delete",[n])}async readdir(e){const r=this.getPath(e.directory,e.path),t=await this.dbRequest("get",[r]);if(e.path!==""&&t===void 0)throw Error("Folder does not exist.");const i=await this.dbIndexRequest("by_folder","getAllKeys",[IDBKeyRange.only(r)]);return{files:await Promise.all(i.map(async s=>{let a=await this.dbRequest("get",[s]);return a===void 0&&(a=await this.dbRequest("get",[s+"/"])),{name:s.substring(r.length+1),type:a.type,size:a.size,ctime:a.ctime,mtime:a.mtime,uri:a.path}}))}}async getUri(e){const r=this.getPath(e.directory,e.path);let t=await this.dbRequest("get",[r]);return t===void 0&&(t=await this.dbRequest("get",[r+"/"])),{uri:(t==null?void 0:t.path)||r}}async stat(e){const r=this.getPath(e.directory,e.path);let t=await this.dbRequest("get",[r]);if(t===void 0&&(t=await this.dbRequest("get",[r+"/"])),t===void 0)throw Error("Entry does not exist.");return{type:t.type,size:t.size,ctime:t.ctime,mtime:t.mtime,uri:t.path}}async rename(e){await this._copy(e,!0)}async copy(e){return this._copy(e,!1)}async requestPermissions(){return{publicStorage:"granted"}}async checkPermissions(){return{publicStorage:"granted"}}async _copy(e,r=!1){let{toDirectory:t}=e;const{to:i,from:n,directory:s}=e;if(!i||!n)throw Error("Both to and from must be provided");t||(t=s);const a=this.getPath(s,n),c=this.getPath(t,i);if(a===c)return{uri:c};if(R(a,c))throw Error("To path cannot contain the from path");let o;try{o=await this.stat({path:i,directory:t})}catch{const l=i.split("/");l.pop();const f=l.join("/");if(l.length>0&&(await this.stat({path:f,directory:t})).type!=="directory")throw new Error("Parent directory of the to path is a file")}if(o&&o.type==="directory")throw new Error("Cannot overwrite a directory with a file");const d=await this.stat({path:n,directory:s}),h=async(u,l,f)=>{const p=this.getPath(t,u),b=await this.dbRequest("get",[p]);b.ctime=l,b.mtime=f,await this.dbRequest("put",[b])},y=d.ctime?d.ctime:Date.now();switch(d.type){case"file":{const u=await this.readFile({path:n,directory:s});r&&await this.deleteFile({path:n,directory:s});let l;!(u.data instanceof Blob)&&!this.isBase64String(u.data)&&(l=E.UTF8);const f=await this.writeFile({path:i,directory:t,data:u.data,encoding:l});return r&&await h(i,y,d.mtime),f}case"directory":{if(o)throw Error("Cannot move a directory over an existing object");try{await this.mkdir({path:i,directory:t,recursive:!1}),r&&await h(i,y,d.mtime)}catch{}const u=(await this.readdir({path:n,directory:s})).files;for(const l of u)await this._copy({from:`${n}/${l.name}`,to:`${i}/${l.name}`,directory:s,toDirectory:t},r);r&&await this.rmdir({path:n,directory:s})}}return{uri:c}}isBase64String(e){try{return btoa(atob(e))==e}catch{return!1}}}g._debug=!0;export{g as FilesystemWeb}; +import{W as P,b as x}from"./index-y5cGVWNn.js";import{Encoding as E}from"./index-DqacfBXY.js";function m(w){const e=w.split("/").filter(t=>t!=="."),r=[];return e.forEach(t=>{t===".."&&r.length>0&&r[r.length-1]!==".."?r.pop():r.push(t)}),r.join("/")}function R(w,e){w=m(w),e=m(e);const r=w.split("/"),t=e.split("/");return w!==e&&r.every((i,n)=>i===t[n])}class g extends P{constructor(){super(...arguments),this.DB_VERSION=1,this.DB_NAME="Disc",this._writeCmds=["add","put","delete"],this.downloadFile=async e=>{var r,t;const i=x(e,e.webFetchExtra),n=await fetch(e.url,i);let s;if(!e.progress)s=await n.blob();else if(!(n!=null&&n.body))s=new Blob;else{const c=n.body.getReader();let o=0;const d=[],h=n.headers.get("content-type"),y=parseInt(n.headers.get("content-length")||"0",10);for(;;){const{done:f,value:p}=await c.read();if(f)break;d.push(p),o+=(p==null?void 0:p.length)||0;const b={url:e.url,bytes:o,contentLength:y};this.notifyListeners("progress",b)}const u=new Uint8Array(o);let l=0;for(const f of d)typeof f>"u"||(u.set(f,l),l+=f.length);s=new Blob([u.buffer],{type:h||void 0})}return{path:(await this.writeFile({path:e.path,directory:(r=e.directory)!==null&&r!==void 0?r:void 0,recursive:(t=e.recursive)!==null&&t!==void 0?t:!1,data:s})).uri,blob:s}}}async initDb(){if(this._db!==void 0)return this._db;if(!("indexedDB"in window))throw this.unavailable("This browser doesn't support IndexedDB");return new Promise((e,r)=>{const t=indexedDB.open(this.DB_NAME,this.DB_VERSION);t.onupgradeneeded=g.doUpgrade,t.onsuccess=()=>{this._db=t.result,e(t.result)},t.onerror=()=>r(t.error),t.onblocked=()=>{console.warn("db blocked")}})}static doUpgrade(e){const t=e.target.result;switch(e.oldVersion){case 0:case 1:default:t.objectStoreNames.contains("FileStorage")&&t.deleteObjectStore("FileStorage"),t.createObjectStore("FileStorage",{keyPath:"path"}).createIndex("by_folder","folder")}}async dbRequest(e,r){const t=this._writeCmds.indexOf(e)!==-1?"readwrite":"readonly";return this.initDb().then(i=>new Promise((n,s)=>{const o=i.transaction(["FileStorage"],t).objectStore("FileStorage")[e](...r);o.onsuccess=()=>n(o.result),o.onerror=()=>s(o.error)}))}async dbIndexRequest(e,r,t){const i=this._writeCmds.indexOf(r)!==-1?"readwrite":"readonly";return this.initDb().then(n=>new Promise((s,a)=>{const h=n.transaction(["FileStorage"],i).objectStore("FileStorage").index(e)[r](...t);h.onsuccess=()=>s(h.result),h.onerror=()=>a(h.error)}))}getPath(e,r){const t=r!==void 0?r.replace(/^[/]+|[/]+$/g,""):"";let i="";return e!==void 0&&(i+="/"+e),r!==""&&(i+="/"+t),i}async clear(){(await this.initDb()).transaction(["FileStorage"],"readwrite").objectStore("FileStorage").clear()}async readFile(e){const r=this.getPath(e.directory,e.path),t=await this.dbRequest("get",[r]);if(t===void 0)throw Error("File does not exist.");return{data:t.content?t.content:""}}async writeFile(e){const r=this.getPath(e.directory,e.path);let t=e.data;const i=e.encoding,n=e.recursive,s=await this.dbRequest("get",[r]);if(s&&s.type==="directory")throw Error("The supplied path is a directory.");const a=r.substr(0,r.lastIndexOf("/"));if(await this.dbRequest("get",[a])===void 0){const h=a.indexOf("/",1);if(h!==-1){const y=a.substr(h);await this.mkdir({path:y,directory:e.directory,recursive:n})}}if(!i&&!(t instanceof Blob)&&(t=t.indexOf(",")>=0?t.split(",")[1]:t,!this.isBase64String(t)))throw Error("The supplied data is not valid base64 content.");const o=Date.now(),d={path:r,folder:a,type:"file",size:t instanceof Blob?t.size:t.length,ctime:o,mtime:o,content:t};return await this.dbRequest("put",[d]),{uri:d.path}}async appendFile(e){const r=this.getPath(e.directory,e.path);let t=e.data;const i=e.encoding,n=r.substr(0,r.lastIndexOf("/")),s=Date.now();let a=s;const c=await this.dbRequest("get",[r]);if(c&&c.type==="directory")throw Error("The supplied path is a directory.");if(await this.dbRequest("get",[n])===void 0){const h=n.indexOf("/",1);if(h!==-1){const y=n.substr(h);await this.mkdir({path:y,directory:e.directory,recursive:!0})}}if(!i&&!this.isBase64String(t))throw Error("The supplied data is not valid base64 content.");if(c!==void 0){if(c.content instanceof Blob)throw Error("The occupied entry contains a Blob object which cannot be appended to.");c.content!==void 0&&!i?t=btoa(atob(c.content)+atob(t)):t=c.content+t,a=c.ctime}const d={path:r,folder:n,type:"file",size:t.length,ctime:a,mtime:s,content:t};await this.dbRequest("put",[d])}async deleteFile(e){const r=this.getPath(e.directory,e.path);if(await this.dbRequest("get",[r])===void 0)throw Error("File does not exist.");if((await this.dbIndexRequest("by_folder","getAllKeys",[IDBKeyRange.only(r)])).length!==0)throw Error("Folder is not empty.");await this.dbRequest("delete",[r])}async mkdir(e){const r=this.getPath(e.directory,e.path),t=e.recursive,i=r.substr(0,r.lastIndexOf("/")),n=(r.match(/\//g)||[]).length,s=await this.dbRequest("get",[i]),a=await this.dbRequest("get",[r]);if(n===1)throw Error("Cannot create Root directory");if(a!==void 0)throw Error("Current directory does already exist.");if(!t&&n!==2&&s===void 0)throw Error("Parent directory must exist");if(t&&n!==2&&s===void 0){const d=i.substr(i.indexOf("/",1));await this.mkdir({path:d,directory:e.directory,recursive:t})}const c=Date.now(),o={path:r,folder:i,type:"directory",size:0,ctime:c,mtime:c};await this.dbRequest("put",[o])}async rmdir(e){const{path:r,directory:t,recursive:i}=e,n=this.getPath(t,r),s=await this.dbRequest("get",[n]);if(s===void 0)throw Error("Folder does not exist.");if(s.type!=="directory")throw Error("Requested path is not a directory");const a=await this.readdir({path:r,directory:t});if(a.files.length!==0&&!i)throw Error("Folder is not empty");for(const c of a.files){const o=`${r}/${c.name}`;(await this.stat({path:o,directory:t})).type==="file"?await this.deleteFile({path:o,directory:t}):await this.rmdir({path:o,directory:t,recursive:i})}await this.dbRequest("delete",[n])}async readdir(e){const r=this.getPath(e.directory,e.path),t=await this.dbRequest("get",[r]);if(e.path!==""&&t===void 0)throw Error("Folder does not exist.");const i=await this.dbIndexRequest("by_folder","getAllKeys",[IDBKeyRange.only(r)]);return{files:await Promise.all(i.map(async s=>{let a=await this.dbRequest("get",[s]);return a===void 0&&(a=await this.dbRequest("get",[s+"/"])),{name:s.substring(r.length+1),type:a.type,size:a.size,ctime:a.ctime,mtime:a.mtime,uri:a.path}}))}}async getUri(e){const r=this.getPath(e.directory,e.path);let t=await this.dbRequest("get",[r]);return t===void 0&&(t=await this.dbRequest("get",[r+"/"])),{uri:(t==null?void 0:t.path)||r}}async stat(e){const r=this.getPath(e.directory,e.path);let t=await this.dbRequest("get",[r]);if(t===void 0&&(t=await this.dbRequest("get",[r+"/"])),t===void 0)throw Error("Entry does not exist.");return{type:t.type,size:t.size,ctime:t.ctime,mtime:t.mtime,uri:t.path}}async rename(e){await this._copy(e,!0)}async copy(e){return this._copy(e,!1)}async requestPermissions(){return{publicStorage:"granted"}}async checkPermissions(){return{publicStorage:"granted"}}async _copy(e,r=!1){let{toDirectory:t}=e;const{to:i,from:n,directory:s}=e;if(!i||!n)throw Error("Both to and from must be provided");t||(t=s);const a=this.getPath(s,n),c=this.getPath(t,i);if(a===c)return{uri:c};if(R(a,c))throw Error("To path cannot contain the from path");let o;try{o=await this.stat({path:i,directory:t})}catch{const l=i.split("/");l.pop();const f=l.join("/");if(l.length>0&&(await this.stat({path:f,directory:t})).type!=="directory")throw new Error("Parent directory of the to path is a file")}if(o&&o.type==="directory")throw new Error("Cannot overwrite a directory with a file");const d=await this.stat({path:n,directory:s}),h=async(u,l,f)=>{const p=this.getPath(t,u),b=await this.dbRequest("get",[p]);b.ctime=l,b.mtime=f,await this.dbRequest("put",[b])},y=d.ctime?d.ctime:Date.now();switch(d.type){case"file":{const u=await this.readFile({path:n,directory:s});r&&await this.deleteFile({path:n,directory:s});let l;!(u.data instanceof Blob)&&!this.isBase64String(u.data)&&(l=E.UTF8);const f=await this.writeFile({path:i,directory:t,data:u.data,encoding:l});return r&&await h(i,y,d.mtime),f}case"directory":{if(o)throw Error("Cannot move a directory over an existing object");try{await this.mkdir({path:i,directory:t,recursive:!1}),r&&await h(i,y,d.mtime)}catch{}const u=(await this.readdir({path:n,directory:s})).files;for(const l of u)await this._copy({from:`${n}/${l.name}`,to:`${i}/${l.name}`,directory:s,toDirectory:t},r);r&&await this.rmdir({path:n,directory:s})}}return{uri:c}}isBase64String(e){try{return btoa(atob(e))==e}catch{return!1}}}g._debug=!0;export{g as FilesystemWeb}; diff --git a/intern-log/dist/index.html b/intern-log/dist/index.html index 731d83c..9027210 100644 --- a/intern-log/dist/index.html +++ b/intern-log/dist/index.html @@ -8,8 +8,8 @@ 实习工作日志 - - + +
diff --git a/intern-log/src/db/repo.ts b/intern-log/src/db/repo.ts index 35b060c..2a9c100 100644 --- a/intern-log/src/db/repo.ts +++ b/intern-log/src/db/repo.ts @@ -360,23 +360,23 @@ export interface TransactionInput { } export async function listTransactionsBetween(start: string, end: string): Promise { - return db.transaction.where('date').between(start, end, true, true).toArray() + return db.table('transaction').where('date').between(start, end, true, true).toArray() } export async function addTransaction(input: TransactionInput): Promise { - await db.transaction.add({ ...input, created_at: nowLocalISO() }) + await db.table('transaction').add({ ...input, created_at: nowLocalISO() }) } export async function updateTransaction(id: number, input: TransactionInput): Promise { - await db.transaction.update(id, { ...input }) + await db.table('transaction').update(id, { ...input }) } export async function deleteTransaction(id: number): Promise { - await db.transaction.delete(id) + await db.table('transaction').delete(id) } export async function setTransactionReimbursed(id: number, done: boolean): Promise { - await db.transaction.update(id, { reimbursed: done ? 1 : 0 }) + await db.table('transaction').update(id, { reimbursed: done ? 1 : 0 }) } // ---------- 备份 ---------- @@ -391,7 +391,7 @@ export async function exportAll(): Promise { db.setting.toArray(), db.memo.toArray(), db.credential.toArray(), - db.transaction.toArray() + db.table('transaction').toArray() ]) return JSON.stringify({ schema_version: SCHEMA_VERSION, @@ -421,11 +421,11 @@ export async function importAll(jsonText: string): Promise { throw new Error('文件格式或 schema 版本不匹配') } const d = parsed.data - await db.transaction('rw', [db.project, db.work_log, db.log_item, db.attendance, db.weekly_note, db.setting, db.memo, db.credential, db.transaction], async () => { + await db.transaction('rw', [db.project, db.work_log, db.log_item, db.attendance, db.weekly_note, db.setting, db.memo, db.credential, db.table('transaction')], async () => { await Promise.all([ db.project.clear(), db.work_log.clear(), db.log_item.clear(), db.attendance.clear(), db.weekly_note.clear(), db.setting.clear(), - db.memo.clear(), db.credential.clear(), db.transaction.clear() + db.memo.clear(), db.credential.clear(), db.table('transaction').clear() ]) if (d.project && d.project.length) await db.project.bulkAdd(d.project as never[]) if (d.work_log && d.work_log.length) await db.work_log.bulkAdd(d.work_log as never[]) @@ -435,6 +435,6 @@ export async function importAll(jsonText: string): Promise { if (d.setting && d.setting.length) await db.setting.bulkAdd(d.setting as never[]) if (d.memo && d.memo.length) await db.memo.bulkAdd(d.memo as never[]) if (d.credential && d.credential.length) await db.credential.bulkAdd(d.credential as never[]) - if (d.transaction && d.transaction.length) await db.transaction.bulkAdd(d.transaction as never[]) + if (d.transaction && d.transaction.length) await db.table('transaction').bulkAdd(d.transaction as never[]) }) } diff --git a/intern-log/src/db/schema.ts b/intern-log/src/db/schema.ts index 6970895..63cbdf4 100644 --- a/intern-log/src/db/schema.ts +++ b/intern-log/src/db/schema.ts @@ -103,7 +103,8 @@ export class WorklogDB extends Dexie { setting!: Table<{ key: string; value: string }, string> memo!: Table credential!: Table - transaction!: Table + // 注意:transaction 表通过 db.table('transaction') 访问, + // 因为 db.transaction 会与 Dexie 内置的 transaction() 方法冲突 sync_mirror!: Table tombstone!: Table diff --git a/intern-log/src/sync/engine.ts b/intern-log/src/sync/engine.ts index e23469f..f43f52b 100644 --- a/intern-log/src/sync/engine.ts +++ b/intern-log/src/sync/engine.ts @@ -35,13 +35,13 @@ function rowHash(row: AnyRow): string { } async function getTable(name: string): Promise { - return (db as unknown as AnyRow)[name].toArray() + return db.table(name).toArray() } // 一次性补齐 uuid 与 updated_at,缺失时回填 async function ensureSyncFields(): Promise { for (const t of TABLES) { - const table = (db as unknown as AnyRow)[t] + const table = db.table(t) const rows: AnyRow[] = await table.toArray() for (const row of rows) { if (t === 'setting' && EXCLUDE_SETTING_KEYS.has(row.key)) continue @@ -287,7 +287,7 @@ async function doRunSync(config: SyncConfig): Promise { const finalMirror: { table: string; uuid: string; hash: string }[] = [] for (const t of TABLES) { - const table = (db as unknown as AnyRow)[t] + const table = db.table(t) const localRows: AnyRow[] = await table.toArray() const byUuid = new Map() for (const row of localRows) byUuid.set(row.uuid, row) diff --git a/intern-log/src/views/LedgerView.vue b/intern-log/src/views/LedgerView.vue index e7b79e7..a009b1c 100644 --- a/intern-log/src/views/LedgerView.vue +++ b/intern-log/src/views/LedgerView.vue @@ -43,7 +43,11 @@ const title = computed(() => Number(monthRef.value.slice(0, 4)) + ' 年 ' + Numb async function load() { loading.value = true - rows.value = await listTransactionsBetween(monthStart.value, monthEnd.value) + try { + rows.value = await listTransactionsBetween(monthStart.value, monthEnd.value) + } catch (e) { + showToast('账目加载失败:' + (e instanceof Error ? e.message : String(e))) + } loading.value = false } onMounted(load) @@ -124,15 +128,21 @@ async function submit() { } if (submitting.value) return submitting.value = true - await addTransaction({ - type: fType.value, - category: fCategory.value, - amount: Math.round(v * 100), - date: fDate.value, - note: fNote.value.trim(), - reimbursable: fType.value === 'expense' && fReimb.value ? 1 : 0, - reimbursed: 0 - }) + try { + await addTransaction({ + type: fType.value, + category: fCategory.value, + amount: Math.round(v * 100), + date: fDate.value, + note: fNote.value.trim(), + reimbursable: fType.value === 'expense' && fReimb.value ? 1 : 0, + reimbursed: 0 + }) + } catch (e) { + showToast('添加失败:' + (e instanceof Error ? e.message : String(e))) + submitting.value = false + return + } fAmount.value = '' fNote.value = '' fReimb.value = false diff --git a/intern-log/src/views/SettingsView.vue b/intern-log/src/views/SettingsView.vue index c185d37..26c668c 100644 --- a/intern-log/src/views/SettingsView.vue +++ b/intern-log/src/views/SettingsView.vue @@ -219,9 +219,13 @@ async function toggleArchive(p: Project) { } async function doExport() { - const text = await exportAll() - const p = await downloadText('实习日志备份_' + todayStr().replace(/-/g, '') + '.json', text) - showToast(p ? '备份已导出到:' + p : '备份已导出到系统下载目录') + try { + const text = await exportAll() + const p = await downloadText('实习日志备份_' + todayStr().replace(/-/g, '') + '.json', text) + showToast(p ? '备份已导出到:' + p : '备份已导出到系统下载目录') + } catch (e) { + showToast('导出失败:' + (e instanceof Error ? e.message : String(e))) + } } function onFile(e: Event) {