@yongdall/pages 0.4.2 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{Command as e,Menu as t,Pagination as n,Search as r,User as i,application as a,createComputed as o,createQuickFilters as s,createShowField as c,createState as l,createStore as u,effect as d,filterPermission as f,formLayoutsService as p,getAuthorizations as m,getPatternFields as h,getPrimaryFields as g,modelService as _,renderForm as v,runPattern as y,showFilterDialog as b,testPermissions as x,toId as S,watch as C}from"@yongdall/web";import w from"@yongdall/web/plugin";import{Check as T,Source as E}from"@neeloong/table";function D(e,t,n,r,i,s){let c=document.createElement(`a`),l=s?document.createElement(`button`):null;c.appendChild(document.createTextNode(r.label||r.title||``));let{page:u,path:f,uri:p,command:m}=r,h=o(()=>!!e(r)),g=o(()=>u?new URL(f?.[0]===`/`?`${u}${f}`:`${u}/${f||``}`,a.root).href:p||(m?t(r)||``:null));if(d(()=>{let e=h.get();if(c.disabled=e,c.ariaDisabled=e?`true`:`false`,e)c.removeAttribute(`tabindex`),c.removeAttribute(`href`);else{c.tabIndex=0;let e=g.get();e&&(c.href=e)}l&&(l.disabled=e)},i),c.addEventListener(`click`,e=>{h.get()&&(e.preventDefault(),e.stopPropagation())}),g.get()!==null){let e=r.target||(u?`_self`:``);e&&(c.target=e)}return m&&c.addEventListener(`click`,e=>{h.get()||e.defaultPrevented||g.get()||n(r)}),l?(l.appendChild(c),l):c}w.importStyle(`@neeloong/table/style.css`);async function O(a){let u=a.ident;if(u.type!==`model`)return a.setError(404);if(!a.search.slice(1)){let e=a.define?.defaultQuery;e&&a.setPath(`?${e.replaceAll(`#`,`%23`)}${a.hash}`,!0)}let p=o(()=>r.parse(a.search.slice(1)));function v(e){let t=r.stringify({...p.get(),...e},!0);t!==a.search.slice(1)&&a.setPath(`?${t}`,!0)}let w=a.container;a.panel=!0;let O=_(u.model);a.title=a.define?.title||`列表`,a.mode=`flex`;let k=await O.loadScript();if(a.destroyed)return;if(!k)return a.setError(404);let A=k?.label||k.id||``;a.title=a.define?.title||(A?`列表:${A}`:`列表`);let j=l([]),M=new E({idKey:`_`,parentKey:`parent`}),N=l([]);M.listen(`checkedChange`,e=>N.set(e));let P=o(()=>new Set(N.get())),F=o(()=>{let e=P.get();return j.get().filter(t=>e.has(t._))}),I=k.fields,L=Object.entries(I).filter(([,{type:e}])=>e&&typeof e!=`object`),R=g(k),z=k.labelPattern||``,B=[];for(let{field:e,width:t,label:n,align:r,enableLink:i}of a.define?.fields||[]){if(!e||!Object.hasOwn(I,e))continue;let a=I[e];if(!a)continue;let o=a.type;!o||typeof o!=`string`||B.push({name:e,width:t||void 0,title:n||a.label||``,field:a,align:r,enableLink:i})}if(!B.length){for(let[e,t]of L)if(B.push({name:e,title:t.label||``,field:t}),B.length>=4)break}let V=[...new Set([...B.map(e=>e.name),...R,...h(z)])];d(()=>M.setValue(j.get()),a.signal);let H=B.map(({name:e,field:t,title:n,width:r,align:i,enableLink:a})=>({field:e,title:n,width:r,resizable:!0,render(n){let r=document.createElement(`div`);i&&(r.style.textAlign=i);let o=c(e,t,{enableLink:a},n.data);return r.appendChild(o.root),{root:r,destroy(){o.destroy()},setHidden(){},update(n){o.destroy(),r.innerHTML=``,o=c(e,t,{enableLink:a},n.data),r.appendChild(o.root)}}},header(){let e=document.createElement(`span`);return e.innerText=n,i&&(e.style.textAlign=i),{root:e,update(){},destroy(){}}}}));H.unshift({field:`_`,width:200,resizable:!0,render(e){let t=e.data,n=document.createElement(`a`),r=y(z,t)||R.map(e=>t[e]).join(`$`);return n.href=a.toUrl(``,{...u,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:R.map(e=>t[e]).join(`$`)}),n.appendChild(document.createTextNode(r)),{root:n,destroy(){},setHidden(){},update(e){let t=e.data,r=y(z,t)||R.map(e=>t[e]).join(`$`);n.innerHTML=``,n.href=a.toUrl(``,{...u,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:R.map(e=>t[e]).join(`$`)}),n.appendChild(document.createTextNode(r))}}}}),H.unshift({field:`_`,extensions:[T],render(e){return{root:document.createElement(`div`),destroy(){},setHidden(){},update(){}}}});let U=M.createGroup(H,2),W=document.createElement(`table`),G=W.appendChild(document.createElement(`div`));G.style.zIndex=`3`,G.style.position=`sticky`,G.style.insetBlockStart=`0`,U.createHeader(G),U.createBody(W.appendChild(document.createElement(`div`)));let K=new n;C(()=>p.get().limit,e=>K.size=e||100,{immediate:!0,signal:a.signal}),C(()=>p.get().page,e=>K.page=e||1,{immediate:!0,signal:a.signal}),K.listen(()=>{let{size:e,page:t}=K;v({limit:e===100?0:e,page:t>1?t:0})});let q=0,J=l(!1);async function Y(){if(!a.destroyed&&!J.get())try{J.set(!0),q++;let e=q,t=p.get(),n=a.define,r=await O.query({...t,limit:t.limit||100,where:[...t.where||[],...n?.where||[]],or:n?.orWhere,select:V,total:!0});if(a.destroyed||e!==q)return;a.loading=!1,j.set(r.documents.map(e=>({...e,_:S(e,R)}))),K.total=r.total}finally{J.set(!1)}}function ee(){k&&b(k,p.get().where,w).then(e=>{v({where:e})}).catch(()=>{})}let te=o(()=>{let e=[];for(let t of[...p.get().where||[],...a.define?.where||[]]){if(!Array.isArray(t)||t.length===2||t[3]||t[2])continue;let n=t[0];if(n.length!==1)continue;let[r]=n;if(!r)continue;let i=typeof r==`string`?r:r[0],a=t[1];a!=null&&e.push(`${encodeURIComponent(i)}=${encodeURIComponent(String(a))}`)}return e.length?`?${e.join(`&`)}`:``}),ne=o(()=>a.toUrl(te.get(),{...u,page:void 0,workspace:void 0,input:`*`,setting:!1,id:void 0}));a.renderSides(a.define?.sides||[],{type:`documents`,pageIdent:u,model:k,get checkedDocuments(){return F.get()},get documents(){return j.get()},get where(){return p.get().where},set where(e){v({where:e})},get orWhere(){return p.get().orWhere},set orWhere(e){v({orWhere:e})}});let X={type:`documents`,pageIdent:u,model:k,get checkedDocuments(){return F.get()},get documents(){return j.get()}},re=o(()=>x(`create`,k.permissions||[])),ie=D.bind(null,t=>{switch(t.command){case`refresh`:return J.get();case`refresh`:return!re.get()}return e.disabled(X,t)},t=>{switch(t.command){case`create`:return ne.get()}return e.toHref(X,t)},t=>{if(!a.destroyed){switch(t.command){case`refresh`:return Y();case`filter`:return ee()}return e.exec(X,t)}}),Z=a.define?.menus;Z?.length||(Z=[{label:`创建`,command:`create`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`过滤`,command:`filter`,children:[],buttons:[]}]);let ae=o(()=>i.permissions.size<0?{has(){return!0}}:m(k.permissions||[])),oe=o(()=>{let e=i.permissions;return e.size<0?Z:t.filter(Z,t=>{let n=t.permission;return n?f(n,e,{has(e){return ae.get().has(e)}}):!0},!1)}),Q=a.createHeader();d(()=>Q.setMenu(oe.get(),ie),a.signal);let $=Q.container;$.classList.add(`QueryFilters`),s({get(){return p.get().where||[]},set(e){v({where:e}),Y()}},$,a.define?.filters||[],{fields:k.fields,signal:a.signal,inline:!0}),w.appendChild(W),a.createFooter().container.appendChild(K.root),C(()=>p.get(),Y,{signal:a.signal}),await Y()}async function k(n){n.title=`详情`;let r=n.ident;if(r.type!==`model`)return n.setError(404);n.panel=!0;let a=_(r.model),s=r.id,c=a.document(s),h=n.define?.forms?.view?.layoutId,[g,b]=await Promise.all([a.loadScript(),h&&p(h).load().catch(()=>null)||null]);if(n.destroyed)return;if(!g)return n.setError(404);let S=g?.label||g.id||``,C=S?`详情:${S}`:`详情`;n.title=C;let w=u(g);w.readonly=!0,v(w,n.container,{model:g,editable:!1,signal:n.signal,enableLink:!!(b?.enableLink??!0),layout:b?.layout,type:b?.type});let T=l(!1),E=l(!1);d(()=>n.loading=E.get()||!T.get(),n.signal);async function O(){if(!E.get()&&!n.destroyed){E.set(!0);try{let e=await c.get();if(n.destroyed)return;w.reset(e),w.readonly=!0,n.title=y(g?.labelPattern,e)||C}finally{T.set(!0),E.set(!1)}}}n.renderSides(n.define?.sides||[],{type:`document`,pageIdent:r,model:g,get document(){return w.value},get store(){return w}});let k=o(()=>x(`destroy`,g.permissions||[],w.value));async function A(){if(k.get()&&!E.get()&&!n.destroyed&&confirm(`确定要删除此文档吗?`)){E.set(!0);try{await c.delete(),n.destroy()}finally{E.set(!1)}}}let j={type:`document`,pageIdent:r,model:g,get document(){return w.value},get store(){return w}},M=D.bind(null,t=>{switch(t.command){case`refresh`:return E.get()||!T.get();case`destroy`:return E.get()||!T.get()||!k.get()}return e.disabled(j,t)},t=>{switch(t.command){case`edit`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0});case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(j,t)},t=>{if(!n.destroyed){switch(t.command){case`refresh`:return O();case`destroy`:return A()}return e.exec(j,t)}}),N=n.define?.menus;N?.length||(N=[{label:`删除`,command:`destroy`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`编辑`,command:`edit`,children:[],buttons:[]}]);let P=o(()=>i.permissions.size<0?{has(){return!0}}:m(g.permissions||[],w.value)),F=o(()=>{let e=i.permissions;return e.size<0?N:t.filter(N,t=>{let n=t.permission;return n?f(n,e,{has(e){return P.get().has(e)}}):!0},!1)}),I=n.createHeader();d(()=>I.setMenu(F.get(),M),n.signal),await O()}async function A(n){n.title=`编辑`;let r=n.ident;if(r.type!==`model`)return n.setError(404);n.panel=!0;let a=_(r.model),s=r.id,c=a.document(s),h=n.define?.forms?.edit?.layoutId,[g,b]=await Promise.all([a.loadScript(),h&&p(h).load().catch(()=>null)||null]);if(n.destroyed)return;if(!g)return n.setError(404);let S=g?.label||g.id||``,C=S?`编辑:${S}`:`编辑`;n.title=C;let w=u(g);d(()=>{n.unsaved=w.changed},n.signal),v(w,n.container,{model:g,editable:!0,signal:n.signal,enableLink:!!(b?.enableLinkEditable??b?.enableLink),layout:b?.layout,type:b?.type});let T=l(!1),E=l(!1);d(()=>n.loading=E.get()||!T.get(),n.signal);function O(e){let t=y(g?.labelPattern,e);t?n.title=t?`编辑:${t}`:`编辑`:n.title=C}async function k(){if(!E.get()&&!n.destroyed){E.set(!0);try{let e=await c.get();if(n.destroyed)return;w.reset(e,!1),O(e)}finally{T.set(!0),E.set(!1)}}}async function A(){if(!(E.get()||!T.get())&&!n.destroyed){E.set(!0);try{let e=await c.update(w.value);if(!e||(O(e),n.destroyed))return;w.reset(e,!1)}finally{E.set(!1)}}}n.renderSides(n.define?.sides||[],{type:`editDocument`,pageIdent:r,model:g,get document(){return w.value},get store(){return w}});let j=o(()=>i.permissions.size<0?{has(){return!0}}:x(`destroy`,g.permissions||[]));async function M(){if(j.get()&&!E.get()&&!n.destroyed&&confirm(`确定要删除此文档吗?`)){E.set(!0);try{await c.delete(),n.destroy()}finally{E.set(!1)}}}let N={type:`editDocument`,pageIdent:r,model:g,get document(){return w.value},get store(){return w}},P=D.bind(null,t=>{switch(t.command){case`save`:case`refresh`:return E.get()||!T.get();case`destroy`:return E.get()||!T.get()||!j.get()}return e.disabled(N,t)},t=>{switch(t.command){case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(N,t)},t=>{if(!n.destroyed){switch(t.command){case`refresh`:return k();case`save`:return A();case`destroy`:return M()}return e.exec(N,t)}}),F=n.define?.menus;F?.length||(F=[{label:`删除`,command:`destroy`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`更新`,command:`save`,children:[],buttons:[]}]);let I=o(()=>i.permissions.size<0?{has(){return!0}}:m(g.permissions||[],w.value)),L=o(()=>{let e=i.permissions;return e.size<0?F:t.filter(F,t=>{let n=t.permission;return n?f(n,e,{has(e){return I.get().has(e)}}):!0},!1)}),R=n.createHeader();d(()=>R.setMenu(L.get(),P),n.signal),await k()}function j(e){e.title=`!代办`,e.panel=!0,e.container.appendChild(document.createTextNode(`!代办`)),e.loading=!1}function M(e){e.title=`设置`,e.panel=!0,e.container.appendChild(document.createTextNode(`设置`)),e.loading=!1}function N(e){e.title=`搜索`,e.panel=!0,e.container.appendChild(document.createTextNode(`搜索`)),e.loading=!1}function P(e){e.title=`状态管理`,e.panel=!0,e.container.appendChild(document.createTextNode(`状态管理`)),e.loading=!1}async function F(n){let r=n.ident;if(r.type!==`model`)return n.setError(404);let a=_(r.model);n.panel=!0;let s=n.define,c=s?.forms?.new?.layoutId,[m,h]=await Promise.all([a.loadScript(),c&&p(c).load().catch(()=>null)||null]);if(n.destroyed)return;if(!m)return n.setError(404);let g=u(m),b=()=>{let e=m.fields;return[...new URLSearchParams(n.search.slice(1))].reduceRight((t,[n,r])=>{let i=Object.hasOwn(e,n)&&e[n];if(!i)return t;let a=i?.type;if(!a||typeof a!=`string`||!r&&i.array)return t;if(!r&&i.nullable)return t[n]=null,t;switch(a){case`i16`:case`i32`:return/^[+-]?\d+$/.test(r)&&(t[n]=Number.parseInt(r)),t;case`i64`:return/^[+-]?\d+$/.test(r)&&(t[n]=r),t;case`f32`:case`f64`:return/^[+-]?\d+(\.\d*)?([eE][+-]?\d*)$/.test(r)&&(t[n]=Number.parseFloat(r)),t;case`decimal`:case`numeric`:case`money`:return/^[+-]?\d+(\.\d*)?([eE][+-]?\d*)$/.test(r)&&(t[n]=r),t;case`bool`:switch(r.toLowerCase()){case`0`:case`n`:case`no`:case`f`:case`false`:t[n]=!1;break;case`1`:case`y`:case`yes`:case`t`:case`true`:t[n]=!0;break}return t;default:return t[n]=r,t}},g.createDefault())};g.new=!0,d(()=>{n.unsaved=g.changed},n.signal),v(g,n.container,{model:m,editable:!0,signal:n.signal,enableLink:!!(h?.enableLinkEditable??h?.enableLink),layout:h?.layout,type:h?.type});let x=l(!1);async function S(){if(!x.get()){x.set(!0);try{return await a.create(g.value)}finally{x.set(!1)}}}async function C(){let e=await S();e&&(n.open(`.`,{...r,page:void 0,continuation:void 0,setting:void 0,input:void 0,edit:!1,id:e.id},!0),n.destroy(!0))}n.renderSides(n.define?.sides||[],{type:`createDocument`,pageIdent:r,model:m,get document(){return g.value},get store(){return g}});let w={type:`createDocument`,pageIdent:r,model:m,get document(){return g.value},get store(){return g}},T=D.bind(null,t=>{switch(t.command){case`create`:case`createGoto`:return x.get()}return e.disabled(w,t)},t=>e.toHref(w,t),t=>{if(!n.destroyed){switch(t.command){case`create`:return S();case`createGoto`:return C()}return e.exec(w,t)}}),E=n.define?.menus;E?.length||(E=[{label:`创建`,command:`createGoto`,children:[],buttons:[]}]);let O=o(()=>{let e=i.permissions;return e.size<0?E:t.filter(E,t=>{let n=t.permission;return n?f(n,e):!0},!1)}),k=n.createHeader();if(d(()=>k.setMenu(O.get(),T),n.signal),r.id){let e=await a.document(r.id);if(n.destroyed)return;let t=y(m?.labelPattern,e);t&&(n.title=`复制:${t}`),g.reset(e)}else g.reset(b());n.loading=!1;let A=m?.label||m.id||``;n.title=s?.title||(A?`新建:${A}`:`新建`)}function I(e){let t=e.ident;if(t.type===`model`){if(e.title=e.define?.title||`新建`,(t.input||`*`)!==`*`)return F(e);e.open(`${e.path}${e.search}${e.hash}`,{...t,setting:!1,input:`${Math.random()}`.slice(2)},!0),e.destroy(!0)}}function L(e){e.open(`.`,{...e.ident,page:void 0,workspace:void 0,continuation:void 0,setting:void 0,id:void 0},!0),e.destroy(!0)}export{k as details,A as edit,O as list,I as new,N as search,M as settings,P as status,L as toMain,j as todo};
1
+ import{Command as e,Menu as t,Pagination as n,Search as r,User as i,application as a,createComputed as o,createDocumentInModal as s,createQuickFilters as c,createShowField as l,createState as u,createStore as d,effect as f,filterPermission as p,formLayoutsService as m,getAuthorizations as h,getPatternFields as g,getPrimaryFields as _,isMac as v,modelService as y,renderForm as b,runPattern as x,showDocumentInModal as S,showFilterDialog as C,testPermissions as w,toId as T,watch as E}from"@yongdall/web";import D from"@yongdall/web/plugin";import{Check as O,Source as k}from"@neeloong/table";function A(e,t,n,r,i,s){let c=document.createElement(`a`),l=s?document.createElement(`button`):null;c.appendChild(document.createTextNode(r.label||r.title||``));let{page:u,path:d,uri:p,command:m}=r,h=o(()=>!!e(r)),g=o(()=>u?new URL(d?.[0]===`/`?`${u}${d}`:`${u}/${d||``}`,a.root).href:p||(m?t(r)||``:null));if(f(()=>{let e=h.get();if(c.disabled=e,c.ariaDisabled=e?`true`:`false`,e)c.removeAttribute(`tabindex`),c.removeAttribute(`href`);else{c.tabIndex=0;let e=g.get();e&&(c.href=e)}l&&(l.disabled=e)},i),c.addEventListener(`click`,e=>{h.get()&&(e.preventDefault(),e.stopPropagation())}),g.get()!==null){let e=r.target||(u?`_self`:``);e&&(c.target=e)}return m&&c.addEventListener(`click`,e=>{if(!h.get()&&!e.defaultPrevented&&!(g.get()&&(e.shiftKey||(v?e.metaKey:e.ctrlKey)||e.altKey))&&n(r)){e.preventDefault();return}}),l?(l.appendChild(c),l):c}D.importStyle(`@neeloong/table/style.css`);async function j(a){let d=a.ident;if(d.type!==`model`)return a.setError(404);if(!a.search.slice(1)){let e=a.define?.defaultQuery;e&&a.setPath(`?${e.replaceAll(`#`,`%23`)}${a.hash}`,!0)}let b=o(()=>r.parse(a.search.slice(1)));function D(e){let t=r.stringify({...b.get(),...e},!0);t!==a.search.slice(1)&&a.setPath(`?${t}`,!0)}let j=a.container;a.panel=!0;let M=a.define,N=y(d.model);a.title=M?.title||`列表`,a.mode=`flex`;let P=await N.loadScript();if(a.destroyed)return;if(!P)return a.setError(404);let F=P?.label||P.id||``;a.title=M?.title||(F?`列表:${F}`:`列表`);let I=u([]),L=new k({idKey:`_`,parentKey:`parent`}),R=u([]);L.listen(`checkedChange`,e=>R.set(e));let z=o(()=>new Set(R.get())),B=o(()=>{let e=z.get();return I.get().filter(t=>e.has(t._))}),ee=o(()=>{let e=[];for(let t of[...b.get().where||[],...a.define?.where||[]]){if(!Array.isArray(t)||t.length===2||t[3]||t[2])continue;let n=t[0];if(n.length!==1)continue;let[r]=n;if(!r)continue;let i=typeof r==`string`?r:r[0],a=t[1];a!=null&&e.push([i,a])}return e}),V=M?.forms,te=function(){if(a.destroyed||!V)return;let e=V.new||V.create;if(e)return a.createModal(async t=>{let n=e.layoutId&&await m(e.layoutId).load().catch(()=>null)||null;if(!a.destroyed)return s(t,P,N,n,ee.get())}).then(e=>{e&&Q()}),!0},ne=function(e,t){if(!V)return;let{details:n}=V,r=n||V.edit||V.update;if(!r)return;let i=!n;return a.createModal(async n=>{let o=r.layoutId&&await m(r.layoutId).load().catch(()=>null)||null;if(!a.destroyed)return S(n,P,N,e,o,{editable:i,href:t})}),!0},H=P.fields,re=Object.entries(H).filter(([,{type:e}])=>e&&typeof e!=`object`),U=_(P),W=P.labelPattern||``,G=[];for(let{field:e,width:t,label:n,align:r,enableLink:i}of a.define?.fields||[]){if(!e||!Object.hasOwn(H,e))continue;let a=H[e];if(!a)continue;let o=a.type;!o||typeof o!=`string`||G.push({name:e,width:t||void 0,title:n||a.label||``,field:a,align:r,enableLink:i})}if(!G.length){for(let[e,t]of re)if(G.push({name:e,title:t.label||``,field:t}),G.length>=4)break}let ie=[...new Set([...G.map(e=>e.name),...U,...g(W)])];f(()=>L.setValue(I.get()),a.signal);let K=G.map(({name:e,field:t,title:n,width:r,align:i,enableLink:a})=>({field:e,title:n,width:r,resizable:!0,render(n){let r=document.createElement(`div`);i&&(r.style.textAlign=i);let o=l(e,t,{enableLink:a},n.data);return r.appendChild(o.root),{root:r,destroy(){o.destroy()},setHidden(){},update(n){o.destroy(),r.innerHTML=``,o=l(e,t,{enableLink:a},n.data),r.appendChild(o.root)}}},header(){let e=document.createElement(`span`);return e.innerText=n,i&&(e.style.textAlign=i),{root:e,update(){},destroy(){}}}}));K.unshift({field:`_`,width:200,resizable:!0,render(e){let t=e.data,n=document.createElement(`a`),r=x(W,t)||U.map(e=>t[e]).join(`$`),i=U.map(e=>t[e]).join(`$`);return n.href=a.toUrl(``,{...d,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:i}),n.addEventListener(`click`,e=>{i&&(e.shiftKey||(v?e.metaKey:e.ctrlKey)||e.altKey||ne(i,n.href)&&e.preventDefault())}),n.appendChild(document.createTextNode(r)),{root:n,destroy(){},setHidden(){},update(e){let t=e.data,r=x(W,t)||U.map(e=>t[e]).join(`$`);n.innerHTML=``;let i=U.map(e=>t[e]).join(`$`);n.href=a.toUrl(``,{...d,page:void 0,workspace:void 0,continuation:void 0,setting:!1,id:i}),n.appendChild(document.createTextNode(r))}}}}),K.unshift({field:`_`,extensions:[O],render(e){return{root:document.createElement(`div`),destroy(){},setHidden(){},update(){}}}});let ae=L.createGroup(K,2),q=document.createElement(`table`),J=q.appendChild(document.createElement(`div`));J.style.zIndex=`3`,J.style.position=`sticky`,J.style.insetBlockStart=`0`,ae.createHeader(J),ae.createBody(q.appendChild(document.createElement(`div`)));let Y=new n;E(()=>b.get().limit,e=>Y.size=e||100,{immediate:!0,signal:a.signal}),E(()=>b.get().page,e=>Y.page=e||1,{immediate:!0,signal:a.signal}),Y.listen(()=>{let{size:e,page:t}=Y;D({limit:e===100?0:e,page:t>1?t:0})});let X=0,Z=u(!1);async function Q(){if(!a.destroyed&&!Z.get())try{Z.set(!0),X++;let e=X,t=b.get(),n=a.define,r=await N.query({...t,limit:t.limit||100,where:[...t.where||[],...n?.where||[]],or:n?.orWhere,select:ie,total:!0});if(a.destroyed||e!==X)return;a.loading=!1,I.set(r.documents.map(e=>({...e,_:T(e,U)}))),Y.total=r.total}finally{Z.set(!1)}}function oe(){P&&C(P,b.get().where,j).then(e=>{D({where:e})}).catch(()=>{})}let se=o(()=>{let e=ee.get().map(([e,t])=>`${encodeURIComponent(e)}=${encodeURIComponent(String(t))}`);return e.length?`?${e.join(`&`)}`:``}),ce=o(()=>a.toUrl(se.get(),{...d,page:void 0,workspace:void 0,input:`*`,setting:!1,id:void 0}));a.renderSides(a.define?.sides||[],{type:`documents`,pageIdent:d,model:P,get checkedDocuments(){return B.get()},get documents(){return I.get()},get where(){return b.get().where},set where(e){D({where:e})},get orWhere(){return b.get().orWhere},set orWhere(e){D({orWhere:e})}});let le={type:`documents`,pageIdent:d,model:P,get checkedDocuments(){return B.get()},get documents(){return I.get()}},ue=o(()=>w(`create`,P.permissions||[])),de=A.bind(null,t=>{switch(t.command){case`print`:return Z.get();case`refresh`:return Z.get();case`refresh`:return!ue.get()}return e.disabled(le,t)},t=>{switch(t.command){case`create`:return ce.get()}return e.toHref(le,t)},t=>{if(!a.destroyed){switch(t.command){case`print`:window.print();return;case`create`:return te();case`refresh`:Q();return;case`filter`:oe();return}e.exec(le,t)}}),$=a.define?.menus;$?.length||($=[{label:`创建`,command:`create`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`过滤`,command:`filter`,children:[],buttons:[]}]);let fe=o(()=>i.permissions.size<0?{has(){return!0}}:h(P.permissions||[])),pe=o(()=>{let e=i.permissions;return e.size<0?$:t.filter($,t=>{let n=t.permission;return n?p(n,e,{has(e){return fe.get().has(e)}}):!0},!1)}),me=a.createHeader();f(()=>me.setMenu(pe.get(),de),a.signal);let he=me.container;he.classList.add(`QueryFilters`),c({get(){return b.get().where||[]},set(e){D({where:e}),Q()}},he,a.define?.filters||[],{fields:P.fields,signal:a.signal,inline:!0}),j.appendChild(q),a.createFooter().container.appendChild(Y.root),E(()=>b.get(),Q,{signal:a.signal}),await Q()}async function M(n){n.title=`详情`;let r=n.ident;if(r.type!==`model`)return n.setError(404);n.panel=!0;let a=y(r.model),s=r.id,c=a.document(s),l=n.define?.forms?.view?.layoutId,[g,_]=await Promise.all([a.loadScript(),l&&m(l).load().catch(()=>null)||null]);if(n.destroyed)return;if(!g)return n.setError(404);let v=g?.label||g.id||``,S=v?`详情:${v}`:`详情`;n.title=S;let C=d(g);C.readonly=!0,b(C,n.container,{model:g,editable:!1,signal:n.signal,enableLink:!!(_?.enableLink??!0),layout:_?.layout,type:_?.type});let T=u(!1),E=u(!1);f(()=>n.loading=E.get()||!T.get(),n.signal);async function D(){if(!E.get()&&!n.destroyed){E.set(!0);try{let e=await c.get();if(n.destroyed)return;C.reset(e),C.readonly=!0,n.title=x(g?.labelPattern,e)||S}finally{T.set(!0),E.set(!1)}}}n.renderSides(n.define?.sides||[],{type:`document`,pageIdent:r,model:g,get document(){return C.value},get store(){return C}});let O=o(()=>w(`destroy`,g.permissions||[],C.value));async function k(){if(O.get()&&!E.get()&&!n.destroyed&&confirm(`确定要删除此文档吗?`)){E.set(!0);try{await c.delete(),n.destroy()}finally{E.set(!1)}}}let j={type:`document`,pageIdent:r,model:g,get document(){return C.value},get store(){return C}},M=A.bind(null,t=>{switch(t.command){case`print`:return E.get()||!T.get();case`refresh`:return E.get()||!T.get();case`destroy`:return E.get()||!T.get()||!O.get()}return e.disabled(j,t)},t=>{switch(t.command){case`edit`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0});case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(j,t)},t=>{if(!n.destroyed){switch(t.command){case`print`:window.print();return;case`refresh`:D();return;case`destroy`:k();return}e.exec(j,t)}}),N=n.define?.menus;N?.length||(N=[{label:`删除`,command:`destroy`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`编辑`,command:`edit`,children:[],buttons:[]}]);let P=o(()=>i.permissions.size<0?{has(){return!0}}:h(g.permissions||[],C.value)),F=o(()=>{let e=i.permissions;return e.size<0?N:t.filter(N,t=>{let n=t.permission;return n?p(n,e,{has(e){return P.get().has(e)}}):!0},!1)}),I=n.createHeader();f(()=>I.setMenu(F.get(),M),n.signal),await D()}async function N(n){n.title=`编辑`;let r=n.ident;if(r.type!==`model`)return n.setError(404);n.panel=!0;let a=y(r.model),s=r.id,c=a.document(s),l=n.define,g=(l?.forms?.edit||l?.forms?.update)?.layoutId,[_,v]=await Promise.all([a.loadScript(),g&&m(g).load().catch(()=>null)||null]);if(n.destroyed)return;if(!_)return n.setError(404);let S=_?.label||_.id||``,C=S?`编辑:${S}`:`编辑`;n.title=C;let T=d(_);f(()=>{n.unsaved=T.changed},n.signal),b(T,n.container,{model:_,editable:!0,signal:n.signal,enableLink:!!(v?.enableLinkEditable??v?.enableLink),layout:v?.layout,type:v?.type});let E=u(!1),D=u(!1);f(()=>n.loading=D.get()||!E.get(),n.signal);function O(e){let t=x(_?.labelPattern,e);t?n.title=t?`编辑:${t}`:`编辑`:n.title=C}async function k(){if(!D.get()&&!n.destroyed){D.set(!0);try{let e=await c.get();if(n.destroyed)return;T.reset(e,!1),O(e)}finally{E.set(!0),D.set(!1)}}}async function j(){if(!(D.get()||!E.get())&&!n.destroyed){D.set(!0);try{let e=await c.update(T.value);if(!e||(O(e),n.destroyed))return;T.reset(e,!1)}finally{D.set(!1)}}}n.renderSides(n.define?.sides||[],{type:`editDocument`,pageIdent:r,model:_,get document(){return T.value},get store(){return T}});let M=o(()=>i.permissions.size<0?{has(){return!0}}:w(`destroy`,_.permissions||[]));async function N(){if(M.get()&&!D.get()&&!n.destroyed&&confirm(`确定要删除此文档吗?`)){D.set(!0);try{await c.delete(),n.destroy()}finally{D.set(!1)}}}let P={type:`editDocument`,pageIdent:r,model:_,get document(){return T.value},get store(){return T}},F=A.bind(null,t=>{switch(t.command){case`print`:return D.get()||!E.get();case`save`:case`refresh`:return D.get()||!E.get();case`destroy`:return D.get()||!E.get()||!M.get()}return e.disabled(P,t)},t=>{switch(t.command){case`copy`:return n.toUrl(``,{...r,page:void 0,workspace:void 0,setting:!1,edit:!0,input:`*`})}return e.toHref(P,t)},t=>{if(!n.destroyed){switch(t.command){case`print`:window.print();return;case`refresh`:k();return;case`save`:j();return;case`destroy`:N();return}e.exec(P,t)}}),I=n.define?.menus;I?.length||(I=[{label:`删除`,command:`destroy`,children:[],buttons:[]},null,{label:`刷新`,command:`refresh`,children:[],buttons:[]},null,{label:`更新`,command:`save`,children:[],buttons:[]}]);let L=o(()=>i.permissions.size<0?{has(){return!0}}:h(_.permissions||[],T.value)),R=o(()=>{let e=i.permissions;return e.size<0?I:t.filter(I,t=>{let n=t.permission;return n?p(n,e,{has(e){return L.get().has(e)}}):!0},!1)}),z=n.createHeader();f(()=>z.setMenu(R.get(),F),n.signal),await k()}function P(e){e.title=`!代办`,e.panel=!0,e.container.appendChild(document.createTextNode(`!代办`)),e.loading=!1}function F(e){e.title=`设置`,e.panel=!0,e.container.appendChild(document.createTextNode(`设置`)),e.loading=!1}function I(e){e.title=`搜索`,e.panel=!0,e.container.appendChild(document.createTextNode(`搜索`)),e.loading=!1}function L(e){e.title=`状态管理`,e.panel=!0,e.container.appendChild(document.createTextNode(`状态管理`)),e.loading=!1}async function R(n){let r=n.ident;if(r.type!==`model`)return n.setError(404);let a=y(r.model);n.panel=!0;let s=n.define,c=(s?.forms?.new||s?.forms?.create)?.layoutId,[l,h]=await Promise.all([a.loadScript(),c&&m(c).load().catch(()=>null)||null]);if(n.destroyed)return;if(!l)return n.setError(404);let g=d(l),_=()=>{let e=l.fields;return[...new URLSearchParams(n.search.slice(1))].reduceRight((t,[n,r])=>{let i=Object.hasOwn(e,n)&&e[n];if(!i)return t;let a=i?.type;if(!a||typeof a!=`string`||!r&&i.array)return t;if(!r&&i.nullable)return t[n]=null,t;switch(a){case`i16`:case`i32`:return/^[+-]?\d+$/.test(r)&&(t[n]=Number.parseInt(r)),t;case`i64`:return/^[+-]?\d+$/.test(r)&&(t[n]=r),t;case`f32`:case`f64`:return/^[+-]?\d+(\.\d*)?([eE][+-]?\d*)$/.test(r)&&(t[n]=Number.parseFloat(r)),t;case`decimal`:case`numeric`:case`money`:return/^[+-]?\d+(\.\d*)?([eE][+-]?\d*)$/.test(r)&&(t[n]=r),t;case`bool`:switch(r.toLowerCase()){case`0`:case`n`:case`no`:case`f`:case`false`:t[n]=!1;break;case`1`:case`y`:case`yes`:case`t`:case`true`:t[n]=!0;break}return t;default:return t[n]=r,t}},g.createDefault())};g.new=!0,f(()=>{n.unsaved=g.changed},n.signal),b(g,n.container,{model:l,editable:!0,signal:n.signal,enableLink:!!(h?.enableLinkEditable??h?.enableLink),layout:h?.layout,type:h?.type});let v=u(!1);async function S(){if(!v.get()){v.set(!0);try{return await a.create(g.value)}finally{v.set(!1)}}}let C=async function(){let e=await S();e&&(n.open(`.`,{...r,page:void 0,continuation:void 0,setting:void 0,input:void 0,edit:!1,id:T(e,l)},!0),n.destroy(!0))};n.renderSides(n.define?.sides||[],{type:`createDocument`,pageIdent:r,model:l,get document(){return g.value},get store(){return g}});let w={type:`createDocument`,pageIdent:r,model:l,get document(){return g.value},get store(){return g}},E=A.bind(null,t=>{switch(t.command){case`print`:return v.get();case`create`:case`createGoto`:return v.get()}return e.disabled(w,t)},t=>e.toHref(w,t),t=>{if(!n.destroyed){switch(t.command){case`print`:window.print();return;case`create`:S();return;case`createGoto`:C();return}return e.exec(w,t)}}),D=n.define?.menus;D?.length||(D=[{label:`创建`,command:`createGoto`,children:[],buttons:[]}]);let O=o(()=>{let e=i.permissions;return e.size<0?D:t.filter(D,t=>{let n=t.permission;return n?p(n,e):!0},!1)}),k=n.createHeader();if(f(()=>k.setMenu(O.get(),E),n.signal),r.id){let e=await a.document(r.id);if(n.destroyed)return;let t=x(l?.labelPattern,e);t&&(n.title=`复制:${t}`),g.reset(e)}else g.reset(_());n.loading=!1;let j=l?.label||l.id||``;n.title=s?.title||(j?`新建:${j}`:`新建`)}function z(e){let t=e.ident;if(t.type===`model`){if(e.title=e.define?.title||`新建`,(t.input||`*`)!==`*`)return R(e);e.open(`${e.path}${e.search}${e.hash}`,{...t,setting:!1,input:`${Math.random()}`.slice(2)},!0),e.destroy(!0)}}function B(e){e.open(`.`,{...e.ident,page:void 0,workspace:void 0,continuation:void 0,setting:void 0,id:void 0},!0),e.destroy(!0)}export{M as details,N as edit,j as list,z as new,I as search,F as settings,L as status,B as toMain,P as todo};
2
2
  //# sourceMappingURL=index.mjs.map
package/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../packages/pages/createMenuItem.mjs","../../packages/pages/list/index.mjs","../../packages/pages/details/index.mjs","../../packages/pages/edit/index.mjs","../../packages/pages/todo/index.mjs","../../packages/pages/settings/index.mjs","../../packages/pages/search/index.mjs","../../packages/pages/status/index.mjs","../../packages/pages/new/index.mjs","../../packages/pages/toMain.mjs"],"sourcesContent":["import { application, createComputed, effect } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n\n/**\n * \n * @param {(menu: Menu) => boolean} disabled \n * @param {(menu: Menu) => void} exec \n * @param {(menu: Menu) => string} toHref \n * @param {Menu} menu \n * @param {AbortSignal} signal \n * @param {boolean} [isButton] \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(disabled, toHref, exec, menu, signal, isButton) {\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { page, path, uri, command } = menu;\n\tconst isDisabled = createComputed(() => Boolean(disabled(menu)));\n\n\tconst href = createComputed(() => {\n\t\tif (page) {\n\t\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, application.root).href;\n\t\t} else if (uri) {\n\t\t\treturn uri;\n\t\t} else if (command) {\n\t\t\treturn toHref(menu) || '';\n\t\t}\n\t\treturn null;\n\n\t});\n\n\teffect(() => {\n\t\tconst disabled = isDisabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = disabled;\n\t\tlink.ariaDisabled = disabled ? 'true' : 'false';\n\t\tif (disabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) { link.href = hrefValue; }\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = disabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!isDisabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t});\n\n\tconst hrefValue = href.get() !== null;\n\tif (hrefValue) {\n\t\tconst target = menu.target || (page ? '_self' : '');\n\t\tif (target) {\n\t\t\tlink.target = target;\n\t\t}\n\t}\n\tif (command) {\n\t\tlink.addEventListener('click', (e) => {\n\t\t\tif (isDisabled.get()) { return; }\n\t\t\tif (e.defaultPrevented) { return; }\n\t\t\tif (href.get()) { return }\n\t\t\texec(menu);\n\t\t});\n\t}\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","/** @import { Field, PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createQuickFilters, createState, effect, filterPermission, getAuthorizations, getPrimaryFields, Menu, testPermissions, toId, User, watch } from '@yongdall/web';\nimport { Pagination, modelService, createShowField, runPattern, getPatternFields, showFilterDialog, Search } from '@yongdall/web';\nimport Plugin from '@yongdall/web/plugin';\nimport { Body, Check, Group, Header, Source, Tree } from '@neeloong/table';\nimport createMenuItem from '../createMenuItem.mjs';\n/** @import { FieldScriptConfiguration } from '@yongdall/web' */\n/** @import { ColumnOptions } from '@neeloong/table' */\nPlugin.importStyle('@neeloong/table/style.css');\n\nconst defaultLimit = 100;\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tif (!ctx.search.slice(1)) {\n\t\tconst defaultQuery = ctx.define?.defaultQuery;\n\t\tif (defaultQuery) {\n\t\t\tctx.setPath(`?${defaultQuery.replaceAll('#', '%23')}${ctx.hash}`, true);\n\t\t}\n\t}\n\tconst search = createComputed(() => Search.parse(ctx.search.slice(1)));\n\t/**\n\t * \n\t * @param {*} data \n\t */\n\tfunction setSearch(data) {\n\t\tconst s = Search.stringify({ ...search.get(), ...data }, true);\n\t\tif (s === ctx.search.slice(1)) { return; }\n\t\tctx.setPath(`?${s}`, true);\n\t}\n\tconst container = ctx.container;\n\tctx.panel = true;\n\n\tconst currentModel = modelService(pageIdent.model);\n\tctx.title = ctx.define?.title || '列表';\n\tctx.mode = 'flex';\n\tconst model = await currentModel.loadScript();\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tctx.title = ctx.define?.title || (label ? `列表:${label}` : '列表');\n\n\tconst idKey = '_';\n\tconst documents = createState(/** @type {any[]} */([]));\n\tconst source = new Source({ idKey, parentKey: 'parent' });\n\tconst checkedIds = createState(/** @type {any[]} */([]));\n\tsource.listen('checkedChange', v => checkedIds.set(v));\n\n\tconst checkedIdSet = createComputed(() => new Set(checkedIds.get()));\n\tconst checked = createComputed(() => {\n\t\tconst set = checkedIdSet.get();\n\t\tconst list = documents.get();\n\t\treturn list.filter(v => set.has(v[idKey]));\n\t});\n\n\n\n\tconst fields = model.fields;\n\tconst allFields = Object.entries(fields).filter(([, { type }]) => type && typeof type !== 'object');\n\tconst idFields = getPrimaryFields(model);\n\tconst labelPattern = model.labelPattern || '';\n\n\t/** @type {(Omit<Field.Show, 'field'> & {name: string; width?: number; title: string; field: FieldScriptConfiguration})[]} */\n\tconst allFieldsShow = [];\n\tfor (const { field, width, label, align, enableLink } of ctx.define?.fields || []) {\n\t\tif (!field) { continue; }\n\t\tif (!Object.hasOwn(fields, field)) { continue; }\n\t\tconst f = fields[field];\n\t\tif (!f) { continue; }\n\t\tconst type = f.type;\n\t\tif (!type || typeof type !== 'string') { continue; }\n\t\tallFieldsShow.push({\n\t\t\tname: field,\n\t\t\twidth: width || undefined,\n\t\t\ttitle: label || f.label || '',\n\t\t\tfield: f,\n\t\t\talign,\n\t\t\tenableLink\n\t\t});\n\t}\n\tif (!allFieldsShow.length) {\n\t\tfor (const [name, field] of allFields) {\n\t\t\tallFieldsShow.push({ name, title: field.label || '', field });\n\t\t\tif (allFieldsShow.length >= 4) { break; }\n\t\t}\n\t}\n\tconst queryFields = [...new Set([\n\t\t...allFieldsShow.map(v => v.name),\n\t\t...idFields,\n\t\t...getPatternFields(labelPattern),\n\t])];\n\n\n\teffect(() => source.setValue(documents.get()), ctx.signal);\n\t/** @type {ColumnOptions[]} */\n\tconst columns = allFieldsShow.map(({ name, field, title, width, align, enableLink }) => ({\n\t\tfield: name, title, width, resizable: true, render(c) {\n\t\t\tconst root = document.createElement('div');\n\t\t\tif (align) { root.style.textAlign = align; }\n\t\t\tlet f = createShowField(name, field, {enableLink}, c.data);\n\t\t\troot.appendChild(f.root);\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() {\n\t\t\t\t\tf.destroy();\n\t\t\t\t},\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate(c) {\n\t\t\t\t\tf.destroy();\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\tf = createShowField(name, field, {enableLink}, c.data);\n\t\t\t\t\troot.appendChild(f.root);\n\t\t\t\t},\n\t\t\t};\n\t\t}, header() {\n\t\t\tconst root = document.createElement('span');\n\t\t\troot.innerText = title;\n\t\t\tif (align) { root.style.textAlign = align; }\n\t\t\treturn {\n\t\t\t\troot: root,\n\t\t\t\tupdate() {\n\n\t\t\t\t},\n\t\t\t\tdestroy() {\n\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}));\n\tcolumns.unshift({\n\t\tfield: '_', width: 200, resizable: true, render(c) {\n\t\t\tlet r = c.data;\n\t\t\tconst root = document.createElement('a');\n\t\t\tconst label = runPattern(labelPattern, r) || idFields.map(v => r[v]).join('$');\n\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tcontinuation: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tid: idFields.map(v => r[v]).join('$'),\n\t\t\t});\n\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate(c) {\n\t\t\t\t\tlet r = c.data;\n\t\t\t\t\tconst label = runPattern(labelPattern, r) || idFields.map(v => r[v]).join('$');\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t\t\t...pageIdent,\n\t\t\t\t\t\tpage: undefined,\n\t\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\t\tcontinuation: undefined,\n\t\t\t\t\t\tsetting: false,\n\t\t\t\t\t\tid: idFields.map(v => r[v]).join('$'),\n\t\t\t\t\t});\n\t\t\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\tcolumns.unshift({\n\t\tfield: '_', extensions: [Check], render(c) {\n\t\t\treturn {\n\t\t\t\troot: document.createElement('div'),\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate() {\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\n\tconst group = source.createGroup(columns, 2);\n\n\tconst listTable = document.createElement('table');\n\tconst tableHeader = listTable.appendChild(document.createElement('div'));\n\ttableHeader.style.zIndex = '3';\n\ttableHeader.style.position = 'sticky'\n\ttableHeader.style.insetBlockStart = '0';\n\n\tgroup.createHeader(tableHeader);\n\tgroup.createBody(listTable.appendChild(document.createElement('div')));\n\n\tconst pagination = new Pagination();\n\twatch(() => search.get().limit, limit => pagination.size = limit || defaultLimit, { immediate: true, signal: ctx.signal });\n\twatch(() => search.get().page, page => pagination.page = page || 1, { immediate: true, signal: ctx.signal });\n\n\tpagination.listen(() => {\n\t\tconst { size, page } = pagination;\n\t\tsetSearch({\n\t\t\tlimit: size !== defaultLimit ? size : 0,\n\t\t\tpage: page > 1 ? page : 0,\n\t\t});\n\t});\n\tlet k = 0;\n\tlet disabled = createState(false);\n\tasync function request() {\n\t\tif (ctx.destroyed) { return; }\n\t\tif (disabled.get()) { return; }\n\t\ttry {\n\t\t\tdisabled.set(true);\n\t\t\tk++;\n\t\t\tconst v = k;\n\t\t\tconst query = search.get();\n\t\t\tconst define = ctx.define;\n\t\t\tconst list = await currentModel.query({\n\t\t\t\t...query,\n\t\t\t\tlimit: query.limit || defaultLimit,\n\t\t\t\twhere: [...query.where || [], ...define?.where || []],\n\t\t\t\tor: define?.orWhere,\n\t\t\t\tselect: queryFields,\n\t\t\t\ttotal: true,\n\t\t\t});\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tif (v !== k) { return; }\n\t\t\tctx.loading = false;\n\t\t\tdocuments.set(\n\t\t\t\tlist.documents.map(v => ({ ...v, _: toId(v, idFields) }))\n\t\t\t);\n\t\t\tpagination.total = list.total;\n\t\t} finally {\n\t\t\tdisabled.set(false);\n\n\t\t}\n\t}\n\tfunction updateFilters() {\n\t\tif (!model) { return; }\n\t\tshowFilterDialog(model, search.get().where, container).then(values => {\n\t\t\tsetSearch({ where: values });\n\t\t}).catch(() => { });\n\t}\n\n\tconst newSearch = createComputed(() => {\n\t\tconst list = [];\n\t\tfor (const v of [...search.get().where || [], ...ctx.define?.where || []]) {\n\t\t\tif (!Array.isArray(v)) { continue; }\n\t\t\tif (v.length === 2) { continue; }\n\t\t\tif (v[3]) { continue; }\n\t\t\tif (v[2]) { continue; }\n\t\t\tconst fields = v[0];\n\t\t\tif (fields.length !== 1) { continue; }\n\t\t\tconst [field] = fields;\n\t\t\tif (!field) { continue; }\n\t\t\tconst prop = typeof field === 'string' ? field : field[0];\n\t\t\tconst value = v[1];\n\t\t\tif (value == null) { continue; }\n\t\t\tlist.push(`${encodeURIComponent(prop)}=${encodeURIComponent(String(value))}`);\n\t\t}\n\t\tif (!list.length) { return ''; }\n\t\treturn `?${list.join('&')}`;\n\n\t});\n\n\tconst createURL = createComputed(() => ctx.toUrl(newSearch.get(), {\n\t\t...pageIdent,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tinput: '*',\n\t\tsetting: false,\n\t\tid: undefined,\n\t}));\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'documents',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget checkedDocuments() { return checked.get(); },\n\t\tget documents() { return documents.get(); },\n\t\tget where() { return search.get().where; },\n\t\tset where(where) { setSearch({ where }); },\n\t\tget orWhere() { return search.get().orWhere; },\n\t\tset orWhere(orWhere) { setSearch({ orWhere }); },\n\t});\n\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'documents',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget checkedDocuments() { return checked.get(); },\n\t\tget documents() { return documents.get(); },\n\t};\n\t\tconst creatable = createComputed(() => {\n\t\t\treturn testPermissions('create', model.permissions || []);\n\t\t});\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'refresh': return disabled.get();\n\t\t\tcase 'refresh': return !creatable.get();\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'create': return createURL.get();\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, (menu) => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'refresh': return request();\n\t\t\tcase 'filter': return updateFilters();\n\t\t}\n\t\treturn Command.exec(commandOptions, menu);\n\t});\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '创建', command: 'create', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '过滤', command: 'filter', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || []);\n\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\tconst headerContainer = header.container;\n\theaderContainer.classList.add('QueryFilters');\n\tcreateQuickFilters({\n\t\tget() { return search.get().where || []; },\n\t\tset(where) {\n\t\t\tsetSearch({ where });\n\t\t\trequest();\n\t\t},\n\t}, headerContainer, ctx.define?.filters || [], {\n\t\tfields: model.fields,\n\t\tsignal: ctx.signal,\n\t\tinline: true,\n\t});\n\tcontainer.appendChild(listTable);\n\tconst footer = ctx.createFooter();\n\tfooter.container.appendChild(pagination.root);\n\n\n\twatch(() => search.get(), request, { signal: ctx.signal });\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, testPermissions, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '详情';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tctx.panel = true;\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms?.view?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `详情:${label}` : '详情';\n\tctx.title = title;\n\tconst store = createStore(model);\n\tstore.readonly = true;\n\trenderForm(store, ctx.container, {\n\t\tmodel,\n\t\teditable: false,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLink ?? true),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document);\n\t\t\tstore.readonly = true;\n\t\t\tctx.title = runPattern(model?.labelPattern, document) || title;\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'document',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tconst destroyable = createComputed(() => {\n\t\treturn testPermissions('destroy', model.permissions || [], store.value);\n\t});\n\tasync function destroy() {\n\t\tif (!destroyable.get()) { return; }\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\tif (!confirm('确定要删除此文档吗?')) { return }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tawait currentDocument.delete();\n\t\t\tctx.destroy();\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'document',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'destroy': { return requesting.get() || !loaded.get() || !destroyable.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'edit': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t});\n\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t\tinput: '*',\n\t\t\t});\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'refresh': return request();\n\t\t\tcase 'destroy': return destroy();\n\t\t}\n\t\treturn Command.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '删除', command: 'destroy', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '编辑', command: 'edit', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || [], store.value);\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\n\n\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, testPermissions, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '编辑';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tctx.panel = true;\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms?.edit?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `编辑:${label}` : '编辑';\n\tctx.title = title;\n\tconst store = createStore(model);\n\teffect(() => { ctx.unsaved = store.changed; }, ctx.signal);\n\trenderForm(store, ctx.container, {\n\t\tmodel,\n\t\teditable: true,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\n\n\t/**\n\t * \n\t * @param {Record<string, any>} document \n\t */\n\tfunction setTitle(document) {\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = label ? `编辑:${label}` : '编辑';\n\t\t} else {\n\t\t\tctx.title = title;\n\t\t}\n\t}\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document, false);\n\t\t\tsetTitle(document);\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tasync function save() {\n\t\tif (requesting.get() || !loaded.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst data = await currentDocument.update(store.value);\n\t\t\tif (!data) { return; }\n\t\t\tsetTitle(data);\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(data, false);\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'editDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tconst destroyable = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn testPermissions('destroy', model.permissions || []);\n\t});\n\tasync function destroy() {\n\t\tif (!destroyable.get()) { return; }\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\tif (!confirm('确定要删除此文档吗?')) { return }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tawait currentDocument.delete();\n\t\t\tctx.destroy();\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'editDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'save': case 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'destroy': { return requesting.get() || !loaded.get() || !destroyable.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t\tinput: '*',\n\t\t\t});\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'refresh': return request();\n\t\t\tcase 'save': return save();\n\t\t\tcase 'destroy': return destroy();\n\t\t}\n\t\treturn Command.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '删除', command: 'destroy', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '更新', command: 'save', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || [], store.value);\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '!代办'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('!代办'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '设置'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('设置'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '搜索'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('搜索'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '状态管理'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('状态管理'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { createStore, Command, formLayoutsService, modelService, renderForm, runPattern, Menu, User, filterPermission, createComputed, createState, effect, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n/**\n * \n * @param {PageContext} ctx \n */\nasync function create(ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tconst currentModel = modelService(pageIdent.model);\n\tctx.panel = true;\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms?.new?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst store = createStore(model);\n\tconst createDefault = () => {\n\t\tconst fields = model.fields;\n\t\treturn [...new URLSearchParams(ctx.search.slice(1))].reduceRight((r, [k, v]) => {\n\t\t\tconst field = Object.hasOwn(fields, k) && fields[k];\n\t\t\tif (!field) { return r; }\n\t\t\tconst type = field?.type;\n\t\t\tif (!type || typeof type !== 'string') { return r; }\n\t\t\tif (!v && field.array) { return r; }\n\t\t\tif (!v && field.nullable) {\n\t\t\t\tr[k] = null;\n\t\t\t\treturn r;\n\t\t\t}\n\t\t\tswitch (type) {\n\t\t\t\tcase 'i16':\n\t\t\t\tcase 'i32':\n\t\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = Number.parseInt(v); }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'i64':\n\t\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = v; }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'f32':\n\t\t\t\tcase 'f64':\n\t\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = Number.parseFloat(v); }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'decimal':\n\t\t\t\tcase 'numeric':\n\t\t\t\tcase 'money':\n\t\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = v; }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'bool':\n\t\t\t\t\tswitch (v.toLowerCase()) {\n\t\t\t\t\t\tcase '0': case 'n': case 'no': case 'f': case 'false':\n\t\t\t\t\t\t\tr[k] = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '1': case 'y': case 'yes': case 't': case 'true':\n\t\t\t\t\t\t\tr[k] = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\tdefault:\n\t\t\t\t\tr[k] = v;\n\t\t\t\t\treturn r;\n\t\t\t}\n\t\t}, store.createDefault());\n\t}\n\tstore.new = true;\n\teffect(() => { ctx.unsaved = store.changed; }, ctx.signal);\n\trenderForm(store, ctx.container, {\n\t\tmodel, editable: true,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tconst creating = createState(false);\n\tasync function create() {\n\t\tif (creating.get()) { return; }\n\t\tcreating.set(true);\n\t\ttry {\n\t\t\treturn await currentModel.create(store.value);\n\t\t} finally {\n\t\t\tcreating.set(false);\n\t\t}\n\n\t}\n\tasync function createGoto() {\n\t\tconst data = await create();\n\t\tif (!data) { return; }\n\t\tctx.open(`.`, {\n\t\t\t...pageIdent,\n\t\t\t// @ts-ignore\n\t\t\tpage: undefined,\n\t\t\t// @ts-ignore\n\t\t\tcontinuation: undefined,\n\t\t\tsetting: undefined,\n\t\t\tinput: undefined,\n\t\t\tedit: false,\n\t\t\tid: data.id,\n\t\t}, true);\n\t\t// TODO: \n\t\tctx.destroy(true);\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'createDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'createDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'create': case 'createGoto': { return creating.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'create': return create();\n\t\t\tcase 'createGoto': return createGoto();\n\t\t}\n\t\treturn Command.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '创建', command: 'createGoto', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions);\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\t// TODO: 从查询参数中获取初始数据\n\tif (pageIdent.id) {\n\t\tconst document = await currentModel.document(pageIdent.id);\n\t\tif (ctx.destroyed) { return; }\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = `复制:${label}`;\n\t\t}\n\t\tstore.reset(document);\n\t} else {\n\t\tstore.reset(createDefault());\n\t}\n\tctx.loading = false;\n\tconst label = model?.label || model.id || '';\n\tctx.title = define?.title || (label ? `新建:${label}` : '新建');\n}\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') {\n\t\treturn;\n\t\t// TODO:\n\t}\n\tctx.title = ctx.define?.title || '新建';\n\tif ((pageIdent.input || '*') !== '*') {\n\t\treturn create(ctx);\n\t}\n\tctx.open(`${ctx.path}${ctx.search}${ctx.hash}`, {\n\t\t...pageIdent,\n\t\tsetting: false,\n\t\tinput: `${Math.random()}`.slice(2),\n\t}, true);\n\tctx.destroy(true);\n}\n","/** @import { PageContext } from '@yongdall/web' */\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function toMain(ctx) {\n\tctx.open(`.`, {\n\t\t...ctx.ident,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tcontinuation: undefined,\n\t\tsetting: undefined,\n\t\tid: undefined,\n\t}, true)\n\tctx.destroy(true);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../packages/pages/createMenuItem.mjs","../../packages/pages/list/index.mjs","../../packages/pages/details/index.mjs","../../packages/pages/edit/index.mjs","../../packages/pages/todo/index.mjs","../../packages/pages/settings/index.mjs","../../packages/pages/search/index.mjs","../../packages/pages/status/index.mjs","../../packages/pages/new/index.mjs","../../packages/pages/toMain.mjs"],"sourcesContent":["import { application, createComputed, effect, isMac } from '@yongdall/web';\n/** @import { Menu } from '@yongdall/web' */\n\n\n\n/**\n * \n * @param {(menu: Menu) => boolean} disabled \n * @param {(menu: Menu) => boolean | void} exec \n * @param {(menu: Menu) => string} toHref \n * @param {Menu} menu \n * @param {AbortSignal} signal \n * @param {boolean} [isButton] \n * @returns {HTMLElement}\n */\nexport default function createMenuItem(disabled, toHref, exec, menu, signal, isButton) {\n\tconst link = document.createElement('a');\n\tconst button = isButton ? document.createElement('button') : null;\n\tlink.appendChild(document.createTextNode(menu.label || menu.title || ''));\n\n\tconst { page, path, uri, command } = menu;\n\tconst isDisabled = createComputed(() => Boolean(disabled(menu)));\n\n\tconst href = createComputed(() => {\n\t\tif (page) {\n\t\t\treturn new URL(path?.[0] === '/' ? `${page}${path}` : `${page}/${path || ''}`, application.root).href;\n\t\t} else if (uri) {\n\t\t\treturn uri;\n\t\t} else if (command) {\n\t\t\treturn toHref(menu) || '';\n\t\t}\n\t\treturn null;\n\n\t});\n\n\teffect(() => {\n\t\tconst disabled = isDisabled.get();\n\t\t// @ts-ignore\n\t\tlink.disabled = disabled;\n\t\tlink.ariaDisabled = disabled ? 'true' : 'false';\n\t\tif (disabled) {\n\t\t\tlink.removeAttribute('tabindex');\n\t\t\tlink.removeAttribute('href');\n\t\t} else {\n\t\t\tlink.tabIndex = 0;\n\t\t\tconst hrefValue = href.get();\n\t\t\tif (hrefValue) { link.href = hrefValue; }\n\t\t}\n\t\tif (button) {\n\t\t\tbutton.disabled = disabled;\n\t\t}\n\t}, signal);\n\tlink.addEventListener('click', (e) => {\n\t\tif (!isDisabled.get()) { return; }\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t});\n\n\tconst hrefValue = href.get() !== null;\n\tif (hrefValue) {\n\t\tconst target = menu.target || (page ? '_self' : '');\n\t\tif (target) {\n\t\t\tlink.target = target;\n\t\t}\n\t}\n\tif (command) {\n\t\tlink.addEventListener('click', (e) => {\n\t\t\tif (isDisabled.get()) { return; }\n\t\t\tif (e.defaultPrevented) { return; }\n\t\t\tif (href.get()) {\n\t\t\t\tif (e.shiftKey) { return; }\n\t\t\t\tif (isMac ? e.metaKey : e.ctrlKey) { return; }\n\t\t\t\tif (e.altKey) { return; }\n\t\t\t}\n\t\t\tif (exec(menu)) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t;\n\t\t});\n\t}\n\tif (button) {\n\t\tbutton.appendChild(link);\n\t\treturn button;\n\t}\n\treturn link;\n\n}\n","/** @import { Field, PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createDocumentInModal, createQuickFilters, createState, effect, filterPermission, formLayoutsService, getAuthorizations, getPrimaryFields, isMac, Menu, renderForm, showDocumentInModal, testPermissions, toId, User, watch } from '@yongdall/web';\nimport { Pagination, modelService, createShowField, runPattern, getPatternFields, showFilterDialog, Search } from '@yongdall/web';\nimport Plugin from '@yongdall/web/plugin';\nimport { Body, Check, Group, Header, Source, Tree } from '@neeloong/table';\nimport createMenuItem from '../createMenuItem.mjs';\n/** @import { FieldScriptConfiguration } from '@yongdall/web' */\n/** @import { ColumnOptions } from '@neeloong/table' */\nPlugin.importStyle('@neeloong/table/style.css');\n\nconst defaultLimit = 100;\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tif (!ctx.search.slice(1)) {\n\t\tconst defaultQuery = ctx.define?.defaultQuery;\n\t\tif (defaultQuery) {\n\t\t\tctx.setPath(`?${defaultQuery.replaceAll('#', '%23')}${ctx.hash}`, true);\n\t\t}\n\t}\n\tconst search = createComputed(() => Search.parse(ctx.search.slice(1)));\n\t/**\n\t * \n\t * @param {*} data \n\t */\n\tfunction setSearch(data) {\n\t\tconst s = Search.stringify({ ...search.get(), ...data }, true);\n\t\tif (s === ctx.search.slice(1)) { return; }\n\t\tctx.setPath(`?${s}`, true);\n\t}\n\tconst container = ctx.container;\n\tctx.panel = true;\n\tconst define = ctx.define;\n\n\tconst currentModel = modelService(pageIdent.model);\n\tctx.title = define?.title || '列表';\n\tctx.mode = 'flex';\n\tconst model = await currentModel.loadScript();\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tctx.title = define?.title || (label ? `列表:${label}` : '列表');\n\n\tconst idKey = '_';\n\tconst documents = createState(/** @type {any[]} */([]));\n\tconst source = new Source({ idKey, parentKey: 'parent' });\n\tconst checkedIds = createState(/** @type {any[]} */([]));\n\tsource.listen('checkedChange', v => checkedIds.set(v));\n\n\tconst checkedIdSet = createComputed(() => new Set(checkedIds.get()));\n\tconst checked = createComputed(() => {\n\t\tconst set = checkedIdSet.get();\n\t\tconst list = documents.get();\n\t\treturn list.filter(v => set.has(v[idKey]));\n\t});\n\tconst newParams = createComputed(() => {\n\t\t/** @type {[prop: string, value: any][]} */\n\t\tconst list = [];\n\t\tfor (const v of [...search.get().where || [], ...ctx.define?.where || []]) {\n\t\t\tif (!Array.isArray(v)) { continue; }\n\t\t\tif (v.length === 2) { continue; }\n\t\t\tif (v[3]) { continue; }\n\t\t\tif (v[2]) { continue; }\n\t\t\tconst fields = v[0];\n\t\t\tif (fields.length !== 1) { continue; }\n\t\t\tconst [field] = fields;\n\t\t\tif (!field) { continue; }\n\t\t\tconst prop = typeof field === 'string' ? field : field[0];\n\t\t\tconst value = v[1];\n\t\t\tif (value == null) { continue; }\n\t\t\tlist.push([prop, value]);\n\t\t}\n\t\treturn list;\n\n\t});\n\tconst forms = define?.forms;\n\tconst showCreate = function () {\n\t\tif (ctx.destroyed) { return; }\n\t\tif (!forms) { return; }\n\t\tconst form = forms.new || forms.create;\n\t\tif (!form) { return; }\n\t\tctx.createModal(async modal => {\n\t\t\tconst layout = form.layoutId\n\t\t\t\t&& await formLayoutsService(form.layoutId).load().catch(() => null)\n\t\t\t\t|| null;\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\treturn createDocumentInModal(modal, model, currentModel, layout, newParams.get());\n\t\t}).then((d) => {\n\t\t\tif (!d) { return; }\n\t\t\trequest();\n\t\t\t// TODO: 询问是否打开\n\t\t});\n\t\treturn true;\n\t};\n\t/**\n\t * \n\t * @param {string} id \n\t * @param {string} href \n\t * @returns \n\t */\n\tconst showDetails = function (id, href) {\n\t\tif (!forms) { return; }\n\t\tconst { details } = forms;\n\t\tconst form = details || forms.edit || forms.update;\n\t\tif (!form) { return; }\n\t\tconst editable = !details;\n\t\tctx.createModal(async modal => {\n\t\t\tconst layout = form.layoutId\n\t\t\t\t&& await formLayoutsService(form.layoutId).load().catch(() => null)\n\t\t\t\t|| null;\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\treturn showDocumentInModal(modal, model, currentModel, id, layout, { editable, href });\n\n\t\t});\n\t\treturn true;\n\t};\n\n\n\n\tconst fields = model.fields;\n\tconst allFields = Object.entries(fields).filter(([, { type }]) => type && typeof type !== 'object');\n\tconst idFields = getPrimaryFields(model);\n\tconst labelPattern = model.labelPattern || '';\n\n\t/** @type {(Omit<Field.Show, 'field'> & {name: string; width?: number; title: string; field: FieldScriptConfiguration})[]} */\n\tconst allFieldsShow = [];\n\tfor (const { field, width, label, align, enableLink } of ctx.define?.fields || []) {\n\t\tif (!field) { continue; }\n\t\tif (!Object.hasOwn(fields, field)) { continue; }\n\t\tconst f = fields[field];\n\t\tif (!f) { continue; }\n\t\tconst type = f.type;\n\t\tif (!type || typeof type !== 'string') { continue; }\n\t\tallFieldsShow.push({\n\t\t\tname: field,\n\t\t\twidth: width || undefined,\n\t\t\ttitle: label || f.label || '',\n\t\t\tfield: f,\n\t\t\talign,\n\t\t\tenableLink\n\t\t});\n\t}\n\tif (!allFieldsShow.length) {\n\t\tfor (const [name, field] of allFields) {\n\t\t\tallFieldsShow.push({ name, title: field.label || '', field });\n\t\t\tif (allFieldsShow.length >= 4) { break; }\n\t\t}\n\t}\n\tconst queryFields = [...new Set([\n\t\t...allFieldsShow.map(v => v.name),\n\t\t...idFields,\n\t\t...getPatternFields(labelPattern),\n\t])];\n\n\n\teffect(() => source.setValue(documents.get()), ctx.signal);\n\t/** @type {ColumnOptions[]} */\n\tconst columns = allFieldsShow.map(({ name, field, title, width, align, enableLink }) => ({\n\t\tfield: name, title, width, resizable: true, render(c) {\n\t\t\tconst root = document.createElement('div');\n\t\t\tif (align) { root.style.textAlign = align; }\n\t\t\tlet f = createShowField(name, field, { enableLink }, c.data);\n\t\t\troot.appendChild(f.root);\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() {\n\t\t\t\t\tf.destroy();\n\t\t\t\t},\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate(c) {\n\t\t\t\t\tf.destroy();\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\tf = createShowField(name, field, { enableLink }, c.data);\n\t\t\t\t\troot.appendChild(f.root);\n\t\t\t\t},\n\t\t\t};\n\t\t}, header() {\n\t\t\tconst root = document.createElement('span');\n\t\t\troot.innerText = title;\n\t\t\tif (align) { root.style.textAlign = align; }\n\t\t\treturn {\n\t\t\t\troot: root,\n\t\t\t\tupdate() {\n\n\t\t\t\t},\n\t\t\t\tdestroy() {\n\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t}));\n\tcolumns.unshift({\n\t\tfield: '_', width: 200, resizable: true, render(c) {\n\t\t\tlet r = c.data;\n\t\t\tconst root = document.createElement('a');\n\t\t\tconst label = runPattern(labelPattern, r) || idFields.map(v => r[v]).join('$');\n\t\t\tlet id = idFields.map(v => r[v]).join('$');\n\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tcontinuation: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tid,\n\t\t\t});\n\t\t\troot.addEventListener('click', event => {\n\t\t\t\tif (!id) { return; }\n\t\t\t\tif (event.shiftKey) { return; }\n\t\t\t\tif (isMac ? event.metaKey : event.ctrlKey) { return; }\n\t\t\t\tif (event.altKey) { return; }\n\t\t\t\tif (!showDetails(id, root.href)) { return; }\n\t\t\t\tevent.preventDefault();\n\t\t\t});\n\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\treturn {\n\t\t\t\troot,\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate(c) {\n\t\t\t\t\tlet r = c.data;\n\t\t\t\t\tconst label = runPattern(labelPattern, r) || idFields.map(v => r[v]).join('$');\n\t\t\t\t\troot.innerHTML = '';\n\t\t\t\t\tlet id = idFields.map(v => r[v]).join('$');\n\t\t\t\t\troot.href = ctx.toUrl('', {\n\t\t\t\t\t\t...pageIdent,\n\t\t\t\t\t\tpage: undefined,\n\t\t\t\t\t\tworkspace: undefined,\n\t\t\t\t\t\tcontinuation: undefined,\n\t\t\t\t\t\tsetting: false,\n\t\t\t\t\t\tid,\n\t\t\t\t\t});\n\t\t\t\t\troot.appendChild(document.createTextNode(label));\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\tcolumns.unshift({\n\t\tfield: '_', extensions: [Check], render(c) {\n\t\t\treturn {\n\t\t\t\troot: document.createElement('div'),\n\t\t\t\tdestroy() { },\n\t\t\t\tsetHidden() { },\n\t\t\t\tupdate() {\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\n\tconst group = source.createGroup(columns, 2);\n\n\tconst listTable = document.createElement('table');\n\tconst tableHeader = listTable.appendChild(document.createElement('div'));\n\ttableHeader.style.zIndex = '3';\n\ttableHeader.style.position = 'sticky';\n\ttableHeader.style.insetBlockStart = '0';\n\n\tgroup.createHeader(tableHeader);\n\tgroup.createBody(listTable.appendChild(document.createElement('div')));\n\n\tconst pagination = new Pagination();\n\twatch(() => search.get().limit, limit => pagination.size = limit || defaultLimit, { immediate: true, signal: ctx.signal });\n\twatch(() => search.get().page, page => pagination.page = page || 1, { immediate: true, signal: ctx.signal });\n\n\tpagination.listen(() => {\n\t\tconst { size, page } = pagination;\n\t\tsetSearch({\n\t\t\tlimit: size !== defaultLimit ? size : 0,\n\t\t\tpage: page > 1 ? page : 0,\n\t\t});\n\t});\n\tlet k = 0;\n\tlet disabled = createState(false);\n\tasync function request() {\n\t\tif (ctx.destroyed) { return; }\n\t\tif (disabled.get()) { return; }\n\t\ttry {\n\t\t\tdisabled.set(true);\n\t\t\tk++;\n\t\t\tconst v = k;\n\t\t\tconst query = search.get();\n\t\t\tconst define = ctx.define;\n\t\t\tconst list = await currentModel.query({\n\t\t\t\t...query,\n\t\t\t\tlimit: query.limit || defaultLimit,\n\t\t\t\twhere: [...query.where || [], ...define?.where || []],\n\t\t\t\tor: define?.orWhere,\n\t\t\t\tselect: queryFields,\n\t\t\t\ttotal: true,\n\t\t\t});\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tif (v !== k) { return; }\n\t\t\tctx.loading = false;\n\t\t\tdocuments.set(\n\t\t\t\tlist.documents.map(v => ({ ...v, _: toId(v, idFields) }))\n\t\t\t);\n\t\t\tpagination.total = list.total;\n\t\t} finally {\n\t\t\tdisabled.set(false);\n\n\t\t}\n\t}\n\tfunction updateFilters() {\n\t\tif (!model) { return; }\n\t\tshowFilterDialog(model, search.get().where, container).then(values => {\n\t\t\tsetSearch({ where: values });\n\t\t}).catch(() => { });\n\t}\n\n\tconst newSearch = createComputed(() => {\n\t\tconst list = newParams.get().map(([prop, value]) => {\n\t\t\treturn `${encodeURIComponent(prop)}=${encodeURIComponent(String(value))}`;\n\t\t});\n\t\tif (!list.length) { return ''; }\n\t\treturn `?${list.join('&')}`;\n\n\t});\n\n\tconst createURL = createComputed(() => ctx.toUrl(newSearch.get(), {\n\t\t...pageIdent,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tinput: '*',\n\t\tsetting: false,\n\t\tid: undefined,\n\t}));\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'documents',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget checkedDocuments() { return checked.get(); },\n\t\tget documents() { return documents.get(); },\n\t\tget where() { return search.get().where; },\n\t\tset where(where) { setSearch({ where }); },\n\t\tget orWhere() { return search.get().orWhere; },\n\t\tset orWhere(orWhere) { setSearch({ orWhere }); },\n\t});\n\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'documents',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget checkedDocuments() { return checked.get(); },\n\t\tget documents() { return documents.get(); },\n\t};\n\tconst creatable = createComputed(() => {\n\t\treturn testPermissions('create', model.permissions || []);\n\t});\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': { return disabled.get(); }\n\t\t\tcase 'refresh': return disabled.get();\n\t\t\tcase 'refresh': return !creatable.get();\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'create': return createURL.get();\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, (menu) => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': window.print(); return;\n\t\t\tcase 'create': return showCreate();\n\t\t\tcase 'refresh': request(); return;\n\t\t\tcase 'filter': updateFilters(); return;\n\t\t}\n\t\tCommand.exec(commandOptions, menu);\n\t});\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '创建', command: 'create', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '过滤', command: 'filter', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || []);\n\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\tconst headerContainer = header.container;\n\theaderContainer.classList.add('QueryFilters');\n\tcreateQuickFilters({\n\t\tget() { return search.get().where || []; },\n\t\tset(where) {\n\t\t\tsetSearch({ where });\n\t\t\trequest();\n\t\t},\n\t}, headerContainer, ctx.define?.filters || [], {\n\t\tfields: model.fields,\n\t\tsignal: ctx.signal,\n\t\tinline: true,\n\t});\n\tcontainer.appendChild(listTable);\n\tconst footer = ctx.createFooter();\n\tfooter.container.appendChild(pagination.root);\n\n\n\twatch(() => search.get(), request, { signal: ctx.signal });\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, testPermissions, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '详情';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tctx.panel = true;\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = define?.forms?.view?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `详情:${label}` : '详情';\n\tctx.title = title;\n\tconst store = createStore(model);\n\tstore.readonly = true;\n\trenderForm(store, ctx.container, {\n\t\tmodel,\n\t\teditable: false,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLink ?? true),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document);\n\t\t\tstore.readonly = true;\n\t\t\tctx.title = runPattern(model?.labelPattern, document) || title;\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'document',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tconst destroyable = createComputed(() => {\n\t\treturn testPermissions('destroy', model.permissions || [], store.value);\n\t});\n\tasync function destroy() {\n\t\tif (!destroyable.get()) { return; }\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\tif (!confirm('确定要删除此文档吗?')) { return }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tawait currentDocument.delete();\n\t\t\tctx.destroy();\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'document',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'destroy': { return requesting.get() || !loaded.get() || !destroyable.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'edit': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t});\n\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t\tinput: '*',\n\t\t\t});\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': window.print(); return;\n\t\t\tcase 'refresh': request(); return;\n\t\t\tcase 'destroy': destroy(); return;\n\t\t}\n\t\tCommand.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '删除', command: 'destroy', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '编辑', command: 'edit', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || [], store.value);\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\n\n\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { Command, createComputed, createState, createStore, effect, filterPermission, formLayoutsService, getAuthorizations, Menu, modelService, renderForm, runPattern, testPermissions, User, waitAbortSignal } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default async function (ctx) {\n\tctx.title = '编辑';\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tctx.panel = true;\n\tconst currentModel = modelService(pageIdent.model);\n\tconst id = /** @type {string} */(pageIdent.id);\n\tconst currentDocument = currentModel.document(id);\n\tconst define = ctx.define;\n\tconst layoutId = (define?.forms?.edit || define?.forms?.update)?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst label = model?.label || model.id || '';\n\tconst title = label ? `编辑:${label}` : '编辑';\n\tctx.title = title;\n\tconst store = createStore(model);\n\teffect(() => { ctx.unsaved = store.changed; }, ctx.signal);\n\trenderForm(store, ctx.container, {\n\t\tmodel,\n\t\teditable: true,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\n\n\tconst loaded = createState(false);\n\tconst requesting = createState(false);\n\teffect(() => ctx.loading = requesting.get() || !loaded.get(), ctx.signal);\n\n\n\n\t/**\n\t * \n\t * @param {Record<string, any>} document \n\t */\n\tfunction setTitle(document) {\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = label ? `编辑:${label}` : '编辑';\n\t\t} else {\n\t\t\tctx.title = title;\n\t\t}\n\t}\n\n\tasync function request() {\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst document = await currentDocument.get();\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(document, false);\n\t\t\tsetTitle(document);\n\t\t} finally {\n\t\t\tloaded.set(true);\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\tasync function save() {\n\t\tif (requesting.get() || !loaded.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tconst data = await currentDocument.update(store.value);\n\t\t\tif (!data) { return; }\n\t\t\tsetTitle(data);\n\t\t\tif (ctx.destroyed) { return; }\n\t\t\tstore.reset(data, false);\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'editDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\tconst destroyable = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn testPermissions('destroy', model.permissions || []);\n\t});\n\tasync function destroy() {\n\t\tif (!destroyable.get()) { return; }\n\t\tif (requesting.get()) { return; }\n\t\tif (ctx.destroyed) { return; }\n\t\tif (!confirm('确定要删除此文档吗?')) { return }\n\t\trequesting.set(true);\n\t\ttry {\n\t\t\tawait currentDocument.delete();\n\t\t\tctx.destroy();\n\t\t} finally {\n\t\t\trequesting.set(false);\n\t\t}\n\t}\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'editDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'save': case 'refresh': { return requesting.get() || !loaded.get(); }\n\t\t\tcase 'destroy': { return requesting.get() || !loaded.get() || !destroyable.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'copy': return ctx.toUrl('', {\n\t\t\t\t...pageIdent,\n\t\t\t\tpage: undefined,\n\t\t\t\tworkspace: undefined,\n\t\t\t\tsetting: false,\n\t\t\t\tedit: true,\n\t\t\t\tinput: '*',\n\t\t\t});\n\t\t}\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': window.print(); return;\n\t\t\tcase 'refresh': request(); return;\n\t\t\tcase 'save': save(); return;\n\t\t\tcase 'destroy': destroy(); return;\n\t\t}\n\t\tCommand.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '删除', command: 'destroy', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '刷新', command: 'refresh', children: [], buttons: [] },\n\t\t\tnull,\n\t\t\t{ label: '更新', command: 'save', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst authorizations = createComputed(() => {\n\t\tif (User.permissions.size < 0) { return { has() { return true; } }; }\n\t\treturn getAuthorizations(model.permissions || [], store.value);\n\t});\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions, {\n\t\t\t\thas(p) {\n\t\t\t\t\treturn authorizations.get().has(p);\n\t\t\t\t}\n\t\t\t});\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\tawait request();\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '!代办'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('!代办'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '设置'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('设置'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '搜索'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('搜索'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\n\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tctx.title = '状态管理'\n\tctx.panel = true;\n\tctx.container.appendChild(document.createTextNode('状态管理'))\n\tctx.loading = false;\n}\n","/** @import { PageContext } from '@yongdall/web' */\nimport { createStore, Command, formLayoutsService, modelService, renderForm, runPattern, Menu, User, filterPermission, createComputed, createState, effect, waitAbortSignal, toId } from '@yongdall/web';\nimport createMenuItem from '../createMenuItem.mjs';\n\n/**\n * \n * @param {PageContext} ctx \n */\nasync function create(ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') { return ctx.setError(404); }\n\tconst currentModel = modelService(pageIdent.model);\n\tctx.panel = true;\n\tconst define = ctx.define;\n\tconst layoutId = (define?.forms?.new || define?.forms?.create)?.layoutId;\n\tconst [model, layout] = await Promise.all([\n\t\tcurrentModel.loadScript(),\n\t\tlayoutId && formLayoutsService(layoutId).load().catch(() => null) || null\n\t]);\n\tif (ctx.destroyed) { return; }\n\tif (!model) { return ctx.setError(404); }\n\tconst store = createStore(model);\n\tconst createDefault = () => {\n\t\tconst fields = model.fields;\n\t\treturn [...new URLSearchParams(ctx.search.slice(1))].reduceRight((r, [k, v]) => {\n\t\t\tconst field = Object.hasOwn(fields, k) && fields[k];\n\t\t\tif (!field) { return r; }\n\t\t\tconst type = field?.type;\n\t\t\tif (!type || typeof type !== 'string') { return r; }\n\t\t\tif (!v && field.array) { return r; }\n\t\t\tif (!v && field.nullable) {\n\t\t\t\tr[k] = null;\n\t\t\t\treturn r;\n\t\t\t}\n\t\t\tswitch (type) {\n\t\t\t\tcase 'i16':\n\t\t\t\tcase 'i32':\n\t\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = Number.parseInt(v); }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'i64':\n\t\t\t\t\tif (/^[+-]?\\d+$/.test(v)) { r[k] = v; }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'f32':\n\t\t\t\tcase 'f64':\n\t\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = Number.parseFloat(v); }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'decimal':\n\t\t\t\tcase 'numeric':\n\t\t\t\tcase 'money':\n\t\t\t\t\tif (/^[+-]?\\d+(\\.\\d*)?([eE][+-]?\\d*)$/.test(v)) { r[k] = v; }\n\t\t\t\t\treturn r;\n\t\t\t\tcase 'bool':\n\t\t\t\t\tswitch (v.toLowerCase()) {\n\t\t\t\t\t\tcase '0': case 'n': case 'no': case 'f': case 'false':\n\t\t\t\t\t\t\tr[k] = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase '1': case 'y': case 'yes': case 't': case 'true':\n\t\t\t\t\t\t\tr[k] = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\tdefault:\n\t\t\t\t\tr[k] = v;\n\t\t\t\t\treturn r;\n\t\t\t}\n\t\t}, store.createDefault());\n\t}\n\tstore.new = true;\n\teffect(() => { ctx.unsaved = store.changed; }, ctx.signal);\n\trenderForm(store, ctx.container, {\n\t\tmodel, editable: true,\n\t\tsignal: ctx.signal,\n\t\tenableLink: Boolean(layout?.enableLinkEditable ?? layout?.enableLink),\n\t\tlayout: layout?.layout,\n\t\ttype: layout?.type\n\t});\n\tconst creating = createState(false);\n\tasync function create() {\n\t\tif (creating.get()) { return; }\n\t\tcreating.set(true);\n\t\ttry {\n\t\t\treturn await currentModel.create(store.value);\n\t\t} finally {\n\t\t\tcreating.set(false);\n\t\t}\n\n\t}\n\tconst createGoto = async function () {\n\t\tconst data = await create();\n\t\tif (!data) { return; }\n\t\tctx.open(`.`, {\n\t\t\t...pageIdent,\n\t\t\t// @ts-ignore\n\t\t\tpage: undefined,\n\t\t\t// @ts-ignore\n\t\t\tcontinuation: undefined,\n\t\t\tsetting: undefined,\n\t\t\tinput: undefined,\n\t\t\tedit: false,\n\t\t\tid: toId(data, model),\n\t\t}, true);\n\t\t// TODO: \n\t\tctx.destroy(true);\n\t}\n\n\tctx.renderSides(ctx.define?.sides || [], {\n\t\ttype: 'createDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t});\n\t/*** @type {Command.Options} */\n\tconst commandOptions = {\n\t\ttype: 'createDocument',\n\t\tpageIdent,\n\t\tmodel,\n\t\tget document() { return store.value; },\n\t\tget store() { return store; },\n\t};\n\n\tconst createMenu = createMenuItem.bind(null, menu => {\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': { return creating.get(); }\n\t\t\tcase 'create': case 'createGoto': { return creating.get(); }\n\t\t}\n\t\treturn Command.disabled(commandOptions, menu);\n\t}, menu => {\n\t\treturn Command.toHref(commandOptions, menu);\n\t}, menu => {\n\t\tif (ctx.destroyed) { return; }\n\t\tswitch (menu.command) {\n\t\t\tcase 'print': window.print(); return;\n\t\t\tcase 'create': create(); return;\n\t\t\tcase 'createGoto': createGoto(); return;\n\t\t}\n\t\treturn Command.exec(commandOptions, menu);\n\t});\n\n\tlet menus = ctx.define?.menus;\n\tif (!menus?.length) {\n\t\tmenus = [\n\t\t\t{ label: '创建', command: 'createGoto', children: [], buttons: [] },\n\t\t];\n\t}\n\tconst currentMenus = createComputed(() => {\n\t\tconst permissions = User.permissions;\n\t\tif (permissions.size < 0) { return menus; }\n\t\treturn Menu.filter(menus, menu => {\n\t\t\tconst permission = menu.permission;\n\t\t\tif (!permission) { return true; }\n\t\t\treturn filterPermission(permission, permissions);\n\t\t}, false);\n\t});\n\tconst header = ctx.createHeader();\n\teffect(() => header.setMenu(currentMenus.get(), createMenu), ctx.signal);\n\t// TODO: 从查询参数中获取初始数据\n\tif (pageIdent.id) {\n\t\tconst document = await currentModel.document(pageIdent.id);\n\t\tif (ctx.destroyed) { return; }\n\t\tconst label = runPattern(model?.labelPattern, document);\n\t\tif (label) {\n\t\t\tctx.title = `复制:${label}`;\n\t\t}\n\t\tstore.reset(document);\n\t} else {\n\t\tstore.reset(createDefault());\n\t}\n\tctx.loading = false;\n\tconst label = model?.label || model.id || '';\n\tctx.title = define?.title || (label ? `新建:${label}` : '新建');\n}\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function (ctx) {\n\tconst pageIdent = ctx.ident;\n\tif (pageIdent.type !== 'model') {\n\t\treturn;\n\t\t// TODO:\n\t}\n\tctx.title = ctx.define?.title || '新建';\n\tif ((pageIdent.input || '*') !== '*') {\n\t\treturn create(ctx);\n\t}\n\tctx.open(`${ctx.path}${ctx.search}${ctx.hash}`, {\n\t\t...pageIdent,\n\t\tsetting: false,\n\t\tinput: `${Math.random()}`.slice(2),\n\t}, true);\n\tctx.destroy(true);\n}\n","/** @import { PageContext } from '@yongdall/web' */\n/**\n * \n * @param {PageContext} ctx \n */\nexport default function toMain(ctx) {\n\tctx.open(`.`, {\n\t\t...ctx.ident,\n\t\tpage: undefined,\n\t\tworkspace: undefined,\n\t\tcontinuation: undefined,\n\t\tsetting: undefined,\n\t\tid: undefined,\n\t}, true)\n\tctx.destroy(true);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@yongdall/pages",
3
- "version": "0.4.2",
3
+ "version": "0.4.6",
4
4
  "exports": {
5
5
  ".": "./index.mjs"
6
6
  },
7
7
  "dependencies": {},
8
8
  "devDependencies": {
9
9
  "@neeloong/table": "^0.0.2",
10
- "@yongdall/web": "^0.4.0"
10
+ "@yongdall/web": "^0.4.6"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "@neeloong/table": "^0.0.2",
14
- "@yongdall/web": "^0.4.0"
14
+ "@yongdall/web": "^0.4.6"
15
15
  },
16
16
  "main": "./index.mjs",
17
17
  "type": "module"