(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[603],{2774:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/search",function(){return t(7073)}])},6248:function(e,n,t){"use strict";t.d(n,{Z:function(){return o}});var a=t(5893),c=t(7294),r=t(1163),s=t(9415);let i=[{href:"/",label:"首页",icon:"home"},{href:"/stats",label:"统计",icon:"chart"},{href:"/recurring",label:"周期",icon:"repeat"},{href:"/categories",label:"分类",icon:"tags"}];function o(e){let{title:n,subtitle:t,actions:o,headerContent:u,children:l,contentClassName:d="",hideNav:m=!1,compactHeader:h=!1}=e,p=(0,r.useRouter)(),f=(0,c.useMemo)(()=>{let e=i.find(e=>e.href===p.pathname);return(null==e?void 0:e.href)||null},[p.pathname]),D=u||(n?(0,a.jsxs)("div",{className:"app-header__text",children:[(0,a.jsx)("h1",{children:n}),t?(0,a.jsx)("p",{children:t}):null]}):null),y=["app-header",h?"app-header--compact":"",D?"app-header--with-content":"app-header--actions-only",o?"app-header--with-actions":""].filter(Boolean).join(" ");return(0,a.jsxs)("div",{className:"app-shell".concat(m?" app-shell--standalone":""),children:[(0,a.jsx)("header",{className:y,children:(0,a.jsxs)("div",{className:"app-shell__container app-header__inner",children:[D?(0,a.jsx)("div",{className:"app-header__main",children:D}):(0,a.jsx)("div",{className:"app-header__spacer","aria-hidden":"true"}),o?(0,a.jsx)("div",{className:"app-header__actions",children:o}):null]})}),(0,a.jsx)("main",{className:"app-content ".concat(d).trim(),children:(0,a.jsx)("div",{className:"app-shell__container app-content__inner",children:l})}),m?null:(0,a.jsx)("nav",{className:"bottom-nav","aria-label":"主导航",children:(0,a.jsx)("div",{className:"app-shell__container bottom-nav__inner",children:i.map(e=>{let n=f===e.href;return(0,a.jsxs)("button",{type:"button",className:"bottom-nav__item".concat(n?" is-active":""),onClick:()=>p.push(e.href),"aria-current":n?"page":void 0,children:[(0,a.jsx)(s.J,{name:e.icon,size:20}),(0,a.jsx)("span",{children:e.label})]},e.href)})})})]})}},610:function(e,n,t){"use strict";async function a(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=await fetch("".concat("").concat(e),{...n,headers:{"Content-Type":"application/json",...function(){let e=localStorage.getItem("token");return e?{Authorization:"Bearer ".concat(e)}:{}}(),...n.headers}}),a=await t.json();if(!t.ok)throw Error(a.error||"请求失败");return a}async function c(e,n){let t=await a("/api/auth/login",{method:"POST",body:JSON.stringify({username:e,password:n})});return localStorage.setItem("token",t.token),t}async function r(e,n){let t=await a("/api/auth/register",{method:"POST",body:JSON.stringify({username:e,password:n})});return localStorage.setItem("token",t.token),t}function s(){localStorage.removeItem("token")}function i(){return!!localStorage.getItem("token")}async function o(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",t="/api/records?month=".concat(e);return"all"!==n&&(t+="&type=".concat(n)),a(t)}async function u(e){return a("/api/stats?month=".concat(e))}async function l(e){return a("/api/records",{method:"POST",body:JSON.stringify(e)})}async function d(e,n){return a("/api/records/".concat(e),{method:"PUT",body:JSON.stringify(n)})}async function m(e){return a("/api/records/".concat(e),{method:"DELETE"})}async function h(e){return a("/api/records/search?q=".concat(encodeURIComponent(e)))}async function p(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"month",n=arguments.length>1?arguments[1]:void 0,t="/api/stats/trend?period=".concat(e);return n&&(t+="&month=".concat(n)),a(t)}async function f(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",t="/api/stats/category?type=".concat(n);return e&&(t+="&month=".concat(e)),a(t)}async function D(){return a("/api/recurring")}async function y(e){return a("/api/recurring",{method:"POST",body:JSON.stringify(e)})}async function x(e,n){return a("/api/recurring/".concat(e),{method:"PUT",body:JSON.stringify(n)})}async function j(e){return a("/api/recurring/".concat(e),{method:"DELETE"})}async function N(e){return a("/api/recurring/".concat(e,"/apply"),{method:"POST"})}async function g(){return a("/api/categories")}async function v(e){return a("/api/categories",{method:"POST",body:JSON.stringify(e)})}async function b(e){return a("/api/categories/".concat(e),{method:"DELETE"})}async function _(){return a("/api/export")}async function C(e){return a("/api/import",{method:"POST",body:JSON.stringify(e)})}t.d(n,{Ap:function(){return f},CP:function(){return g},JS:function(){return m},Kp:function(){return h},Q6:function(){return o},TZ:function(){return j},Vn:function(){return D},Vs:function(){return d},Xu:function(){return N},ae:function(){return l},dk:function(){return C},fy:function(){return u},gR:function(){return p},jl:function(){return i},k4:function(){return v},kS:function(){return s},u1:function(){return _},uO:function(){return x},uu:function(){return b},x4:function(){return c},z0:function(){return y},z2:function(){return r}})},7063:function(e,n,t){"use strict";t.d(n,{S:function(){return a}});let a={expense:[{name:"餐饮",icon:"\uD83C\uDF5C"},{name:"买菜",icon:"\uD83E\uDD6C"},{name:"交通",icon:"\uD83D\uDE97"},{name:"购物",icon:"\uD83D\uDED2"},{name:"娱乐",icon:"\uD83C\uDFAE"},{name:"房租",icon:"\uD83C\uDFE0"},{name:"房贷",icon:"\uD83C\uDFE6"},{name:"亲情卡",icon:"\uD83D\uDCB3"},{name:"水电",icon:"\uD83D\uDCA7"},{name:"衣服",icon:"\uD83D\uDC54"},{name:"通讯",icon:"\uD83D\uDCF1"},{name:"日用品",icon:"\uD83E\uDDF4"},{name:"美妆",icon:"\uD83D\uDC84"},{name:"医疗",icon:"\uD83C\uDFE5"},{name:"养娃",icon:"\uD83D\uDC76"},{name:"家电",icon:"\uD83D\uDCFA"},{name:"家具",icon:"\uD83D\uDECB️"},{name:"装修",icon:"\uD83D\uDD28"},{name:"宠物",icon:"\uD83D\uDC15"},{name:"其他",icon:"\uD83D\uDCDD"}],income:[{name:"工资",icon:"\uD83D\uDCB0"},{name:"奖金",icon:"\uD83C\uDF81"},{name:"理财",icon:"\uD83D\uDCC8"},{name:"红包",icon:"\uD83E\uDDE7"},{name:"其他",icon:"\uD83D\uDCDD"}]}},7073:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return d}});var a=t(5893),c=t(7294),r=t(1163),s=t(610),i=t(7063),o=t(6248),u=t(9415),l=t(5546);function d(){let e=(0,r.useRouter)(),{showToast:n}=(0,l.p)(),[t,d]=(0,c.useState)(""),[m,h]=(0,c.useState)([]),[p,f]=(0,c.useState)(!1);(0,c.useEffect)(()=>{(0,s.jl)()||e.push("/login")},[e]);let D=async e=>{if(e.preventDefault(),!t.trim()){n("请输入搜索关键词",{tone:"info"});return}f(!0);try{let e=await (0,s.Kp)(t);h(e)}catch(e){console.error(e),n(e.message,{tone:"error"})}finally{f(!1)}},y=e=>(e||0).toFixed(2),x=m.reduce((e,n)=>{let t=n.date.split(" ")[0];return e[t]||(e[t]=[]),e[t].push(n),e},{}),j=Object.keys(x).sort((e,n)=>n.localeCompare(e)),N=m.filter(e=>"income"===e.type).reduce((e,n)=>e+n.amount,0),g=m.filter(e=>"expense"===e.type).reduce((e,n)=>e+n.amount,0),v=(0,a.jsx)("button",{type:"button",className:"icon-button","aria-label":"设置",onClick:()=>e.push("/settings"),children:(0,a.jsx)(u.J,{name:"settings",size:18})});return(0,a.jsxs)(o.Z,{title:"搜索",subtitle:"快速查找分类、备注与金额",actions:v,compactHeader:!0,children:[(0,a.jsxs)("section",{className:"card section-card section-card--search section-card--search-panel",children:[(0,a.jsxs)("form",{className:"search-form search-form--refresh",onSubmit:D,children:[(0,a.jsxs)("div",{className:"search-input-wrap",children:[(0,a.jsx)(u.J,{name:"search",size:18,className:"search-input-wrap__icon"}),(0,a.jsx)("input",{type:"text",value:t,onChange:e=>d(e.target.value),placeholder:"搜索分类或备注...",autoFocus:!0,disabled:p})]}),(0,a.jsx)("button",{type:"submit",className:"btn btn-primary btn-inline",disabled:p,children:p?(0,a.jsxs)("span",{className:"button-content",children:[(0,a.jsx)(u.J,{name:"spinner",size:16,className:"is-spinning"}),"搜索中..."]}):"搜索"})]}),m.length>0?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"search-summary",children:[(0,a.jsxs)("div",{className:"search-stat",children:[(0,a.jsx)("span",{className:"label",children:"收入"}),(0,a.jsxs)("span",{className:"value income",children:["+",y(N)]})]}),(0,a.jsxs)("div",{className:"search-stat",children:[(0,a.jsx)("span",{className:"label",children:"支出"}),(0,a.jsxs)("span",{className:"value expense",children:["-",y(g)]})]}),(0,a.jsxs)("div",{className:"search-stat",children:[(0,a.jsx)("span",{className:"label",children:"结余"}),(0,a.jsx)("span",{className:"value",children:y(N-g)})]})]}),(0,a.jsxs)("div",{className:"results-count",children:["找到 ",m.length," 条记录"]})]}):null]}),p?(0,a.jsx)("div",{className:"card loading-state",children:"搜索中..."}):m.length>0?(0,a.jsx)("section",{className:"card section-card",children:(0,a.jsx)("div",{className:"records-list records-list--flush",children:j.map(e=>(0,a.jsxs)("div",{className:"date-group",children:[(0,a.jsx)("div",{className:"date-label",children:new Date(e).toLocaleDateString("zh-CN",{month:"short",day:"numeric",weekday:"short"})}),x[e].map(e=>{let n=i.S[e.type].find(n=>n.name===e.category)||{icon:"\uD83D\uDCDD"};return(0,a.jsxs)("div",{className:"record-item record-item--static",children:[(0,a.jsxs)("div",{className:"record-left",children:[(0,a.jsx)("div",{className:"record-icon",children:n.icon}),(0,a.jsxs)("div",{className:"record-info",children:[(0,a.jsx)("div",{className:"record-category",children:e.category}),e.note&&(0,a.jsx)("div",{className:"record-note",children:e.note})]})]}),(0,a.jsxs)("div",{className:"record-amount ".concat(e.type),children:["income"===e.type?"+":"-",y(e.amount)]})]},e.id)})]},e))})}):t?(0,a.jsxs)("div",{className:"card empty-state empty-state--card",children:[(0,a.jsx)("div",{className:"empty-state__icon",children:(0,a.jsx)(u.J,{name:"search",size:24})}),(0,a.jsx)("p",{children:"未找到相关记录"})]}):(0,a.jsxs)("div",{className:"card empty-state empty-state--card",children:[(0,a.jsx)("div",{className:"empty-state__icon",children:(0,a.jsx)(u.J,{name:"search",size:24})}),(0,a.jsx)("p",{children:"输入关键词开始搜索"})]})]})}},1163:function(e,n,t){e.exports=t(3079)}},function(e){e.O(0,[888,774,179],function(){return e(e.s=2774)}),_N_E=e.O()}]);