Merge remote-tracking branch 'origin/master'
This commit is contained in:
2
ui/dist/spa/index.html
vendored
2
ui/dist/spa/index.html
vendored
@@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html><head><title>Baggi SS</title><meta charset=utf-8><meta name=description content="A Quasar Project"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=/icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=/icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/icons/favicon-16x16.png><link rel=icon type=image/ico href=/favicon.ico><script defer src=/js/vendor.1e1ff7a5.js></script><script defer src=/js/app.292f5316.js></script><link href=/css/vendor.724dcfab.css rel=stylesheet><link href=/css/app.53116624.css rel=stylesheet></head><body><div id=q-app></div></body></html>
|
<!DOCTYPE html><html><head><title>Baggi SS</title><meta charset=utf-8><meta name=description content="A Quasar Project"><meta name=format-detection content="telephone=no"><meta name=msapplication-tap-highlight content=no><meta name=viewport content="user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1,width=device-width"><link rel=icon type=image/png sizes=128x128 href=/icons/favicon-128x128.png><link rel=icon type=image/png sizes=96x96 href=/icons/favicon-96x96.png><link rel=icon type=image/png sizes=32x32 href=/icons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/icons/favicon-16x16.png><link rel=icon type=image/ico href=/favicon.ico><script defer src=/js/vendor.1e1ff7a5.js></script><script defer src=/js/app.b52a63d5.js></script><link href=/css/vendor.724dcfab.css rel=stylesheet><link href=/css/app.53116624.css rel=stylesheet></head><body><div id=q-app></div></body></html>
|
||||||
1
ui/dist/spa/js/app.292f5316.js
vendored
1
ui/dist/spa/js/app.292f5316.js
vendored
@@ -1 +0,0 @@
|
|||||||
(()=>{var e={824:(e,t,r)=>{"use strict";r(939),r(6461),r(7049);var o=r(8633),n=r(7486),s=r(4187),a=r(1347);const i={__name:"App",setup(e){return(e,t)=>{const r=(0,a.g2)("router-view");return(0,a.uX)(),(0,a.Wv)(r)}}},l=i,c=l;var d=r(180),m=r(705);const u=(0,d.nY)(()=>{const e=(0,m.Ey)();return e});var p=r(6470),h=r(455);const f=[{path:"/",redirect:"/login"},{path:"/login",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"login",component:()=>Promise.all([r.e(121),r.e(713)]).then(r.bind(r,713))}]},{path:"/first-password-change",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"first-password-change",component:()=>Promise.all([r.e(121),r.e(330)]).then(r.bind(r,8330))}]},{path:"/password-reset/:token",component:()=>Promise.all([r.e(121),r.e(913)]).then(r.bind(r,4913)),meta:{public:!0},children:[{path:"",name:"password-reset",component:()=>Promise.all([r.e(121),r.e(238)]).then(r.bind(r,2238))}]},{path:"/app",component:()=>Promise.all([r.e(121),r.e(618)]).then(r.bind(r,5618)),children:[{path:"",name:"dashboard",component:()=>Promise.all([r.e(121),r.e(996),r.e(621)]).then(r.bind(r,2621)),meta:{permission:"system:read"}},{path:"permissions",name:"permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(548)]).then(r.bind(r,4548)),meta:{permission:"system:read"}},{path:"role-dept-permissions",name:"role-dept-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(607)]).then(r.bind(r,5607)),meta:{permission:"user:update"}},{path:"role-dept-permissions/list",name:"role-dept-permissions-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(54)]).then(r.bind(r,54)),meta:{permission:"user:update"}},{path:"role-dept-permissions/editor",name:"role-dept-permissions-editor",component:()=>Promise.all([r.e(121),r.e(996),r.e(673)]).then(r.bind(r,7673)),meta:{permission:"user:update"}},{path:"user-permissions",name:"user-permissions",component:()=>Promise.all([r.e(121),r.e(996),r.e(465)]).then(r.bind(r,4465)),meta:{permission:"user:update"}},{path:"statementofaccount",name:"statementofaccount",component:()=>Promise.all([r.e(121),r.e(996),r.e(493)]).then(r.bind(r,8493)),meta:{permission:"finance:view"}},{path:"statementreport",name:"statementreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(891)]).then(r.bind(r,1272)),meta:{permission:"finance:view"}},{path:"statementheaderreport",name:"statementheaderreport",component:()=>Promise.all([r.e(121),r.e(996),r.e(770)]).then(r.bind(r,2770)),meta:{permission:"finance:view"}},{path:"users",name:"user-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(784)]).then(r.bind(r,1784)),meta:{permission:"user:view"}},{path:"users/list",name:"user-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(432)]).then(r.bind(r,8432)),meta:{permission:"user:view"}},{path:"users/new",name:"user-new",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),meta:{mode:"new",permission:"user:insert"}},{path:"users/edit/:id",name:"user-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"edit",permission:"user:update"}},{path:"users/view/:id",name:"user-view",component:()=>Promise.all([r.e(121),r.e(996),r.e(806)]).then(r.bind(r,2806)),props:!0,meta:{mode:"view",permission:"user:view"}},{path:"activity-logs",name:"activity-logs",component:()=>Promise.all([r.e(121),r.e(996),r.e(251)]).then(r.bind(r,5251)),meta:{permission:"user:view"}},{path:"test-mail",name:"test-mail",component:()=>Promise.all([r.e(121),r.e(996),r.e(629)]).then(r.bind(r,629)),meta:{permission:"user:insert"}},{path:"order-gateway",name:"order-gateway",component:()=>Promise.all([r.e(121),r.e(996),r.e(755)]).then(r.bind(r,2755)),meta:{permission:"order:view"}},{path:"order-entry/:orderHeaderID",name:"order-entry",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"new",permission:"order:insert"}},{path:"order-edit/:orderHeaderID",name:"order-edit",component:()=>Promise.all([r.e(121),r.e(996),r.e(981)]).then(r.bind(r,6981)),props:!0,meta:{mode:"edit",permission:"order:update"}},{path:"order-list",name:"order-list",component:()=>Promise.all([r.e(121),r.e(996),r.e(358)]).then(r.bind(r,2358)),meta:{permission:"order:view"}},{path:"order-bulk-close",name:"order-bulk-close",component:()=>Promise.all([r.e(121),r.e(996),r.e(398)]).then(r.bind(r,5398)),meta:{permission:"order:update"}},{path:"order-pdf/:id",name:"order-pdf",component:()=>Promise.all([r.e(121),r.e(996),r.e(950)]).then(r.bind(r,5950)),props:!0,meta:{permission:"order:export"}},{path:"change-password",name:"change-password",component:()=>Promise.all([r.e(121),r.e(996),r.e(486)]).then(r.bind(r,1486))}]},{path:"/:catchAll(.*)*",component:()=>Promise.all([r.e(121),r.e(28)]).then(r.bind(r,28))}],g=f;var b=r(5767),w=r(2584);const v=(0,p.wE)(function(){const e=(0,h.aE)({history:(0,h.Bt)(),routes:g});return e.beforeEach(async(e,t,r)=>{const o=(0,b.n)(),n=(0,w.o)();if(!0===e.meta?.public)return r();if(!o.isAuthenticated)return r("/login");if(o.mustChangePassword&&"/first-password-change"!==e.path)return r("/first-password-change");if(o.isAdmin)return r();if(!n.loaded)try{await n.fetchPermissions()}catch(e){console.error("Permission load failed",e)}const s=e.meta?.permission;if(!s)return r();const a=n.hasApiPermission(s);if(!a)return console.warn("⛔ ACCESS DENIED:",{path:e.fullPath,permission:s}),r("/unauthorized");r()}),e});async function y(e,t){const r=e(c);r.use(n.A,t);const o="function"===typeof u?await u({}):u;r.use(o);const a=(0,s.IG)("function"===typeof v?await v({store:o}):v);return o.use(({store:e})=>{e.router=a}),{app:r,store:o,router:a}}var P=r(4222),S=r(8564),A=r(9765),k=r(144);const E={config:{notify:{position:"top",timeout:2500}},lang:P.A,plugins:{Loading:S.A,Dialog:A.A,Notify:k.A}},C="/";async function x({app:e,router:t,store:r},o){let n=!1;const s=e=>{try{return t.resolve(e).href}catch(e){}return Object(e)===e?null:e},a=e=>{if(n=!0,"string"===typeof e&&/^https?:\/\//.test(e))return void(window.location.href=e);const t=s(e);null!==t&&(window.location.href=t,window.location.reload())},i=window.location.href.replace(window.location.origin,"");for(let s=0;!1===n&&s<o.length;s++)try{await o[s]({app:e,router:t,store:r,ssrContext:null,redirect:a,urlPath:i,publicPath:C})}catch(e){return e&&e.url?void a(e.url):void console.error("[Quasar] boot error:",e)}!0!==n&&(e.use(t),e.mount("#q-app"))}y(o.Ef,E).then(e=>{const[t,o]=void 0!==Promise.allSettled?["allSettled",e=>e.map(e=>{if("rejected"!==e.status)return e.value.default;console.error("[Quasar] boot error:",e.reason)})]:["all",e=>e.map(e=>e.default)];return Promise[t]([Promise.resolve().then(r.bind(r,6795))]).then(t=>{const r=o(t).filter(e=>"function"===typeof e);x(e,r)})})},2584:(e,t,r)=>{"use strict";r.d(t,{o:()=>c});r(939),r(4151);var o=r(705),n=r(2986),s=r(5767);const a={read:["read","view"],view:["read","view"],write:["write","insert"],insert:["write","insert"],update:["update"],delete:["delete"],export:["export"]};function i(e){return String(e||"").trim().toLowerCase()}function l(e){const t=i(e);return a[t]||[t]}const c=(0,o.nY)("permission",{state:()=>({routes:[],matrix:[],loaded:!1}),getters:{isAdmin(){const e=(0,s.n)();return!0===e.isAdmin},hasApiPermission:e=>t=>{const r=(0,s.n)();if(r.isAdmin)return!0;if(!e.loaded)return!1;if(!t)return!0;if(t.includes(":")){const[r,o]=t.split(":"),n=i(r),s=l(o);return e.matrix.some(e=>i(e.module)===n&&s.includes(i(e.action))&&!0===e.allowed)}const o=t;if(e.routes.some(e=>e.route===o&&e.can_access))return!0;const n=o.replace(/\/\d+/g,"/{id}");return!!e.routes.some(e=>e.route===n&&e.can_access)||e.routes.some(e=>e.can_access&&o.startsWith(e.route))},hasModule:e=>t=>{const r=(0,s.n)(),o=i(t);return!!r.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===o&&!0===e.allowed)},hasPermission:e=>(t,r)=>{const o=(0,s.n)(),n=i(t),a=l(r);return!!o.isAdmin||!!e.loaded&&e.matrix.some(e=>i(e.module)===n&&a.includes(i(e.action))&&!0===e.allowed)}},actions:{async fetchPermissions(){const e=(0,s.n)();if(e.isAdmin)return this.routes=[],this.matrix=[],void(this.loaded=!0);try{const e=await n.Ay.get("/permissions/routes");this.routes=e.data||[];const t=await n.Ay.get("/permissions/effective");this.matrix=t.data||[],console.group("🔐 PERMISSION DEBUG"),console.log("API ROUTES:",this.routes),console.log("EFFECTIVE MATRIX:",this.matrix),console.groupEnd()}catch(e){console.error("❌ Permission load failed",e),this.routes=[],this.matrix=[]}finally{this.loaded=!0}},clear(){this.routes=[],this.matrix=[],this.loaded=!1}}})},2634:()=>{},2986:(e,t,r)=>{"use strict";r.d(t,{Ay:()=>f,Jt:()=>c,RG:()=>h,bE:()=>d,hi:()=>p,yJ:()=>m});var o=r(9100),n=r(367),s=r(5767);const a="/api",i=o.A.create({baseURL:a,timeout:18e4,paramsSerializer:e=>n.stringify(e,{arrayFormat:"repeat"}),withCredentials:!0});i.interceptors.request.use(e=>{const t=(0,s.n)(),r=e.url||"",o=r.startsWith("/auth/login")||r.startsWith("/auth/refresh")||r.startsWith("/password/forgot")||r.startsWith("/password/reset");return!o&&t?.token&&(e.headers||={},e.headers.Authorization=`Bearer ${t.token}`),e});let l=!1;i.interceptors.response.use(e=>e,async e=>{const t=e?.response?.status,r="undefined"!==typeof Blob&&e?.response?.data instanceof Blob;if((t>=500||r)&&e){const r=String(e?.config?.method||"GET").toUpperCase(),o=e?.config?.url||"",n=await p(e);e.parsedMessage=n,console.error(`❌ API ${t||"-"} ${r} ${o}: ${n}`)}if(401===e?.response?.status&&!l){l=!0;try{(0,s.n)().clearSession()}finally{l=!1}}return Promise.reject(e)});const c=(e,t={},r={})=>i.get(e,{params:t,...r}).then(e=>e.data),d=(e,t={},r={})=>i.post(e,t,r).then(e=>e.data),m=(e,t={},r={})=>i.put(e,t,r).then(e=>e.data);async function u(e){if(!e)return"";if("undefined"!==typeof Blob&&e instanceof Blob)try{const t=(await e.text())?.trim();if(!t)return"";try{const e=JSON.parse(t);return e?.detail||e?.message||e?.error||t}catch{return t}}catch{return""}return"string"===typeof e?e.trim():"object"===typeof e&&(e?.detail||e?.message||e?.error)||""}async function p(e){let t=e?.parsedMessage||e?.response?.data?.detail||e?.response?.data?.message||e?.response?.data?.error||"";return t||(t=await u(e?.response?.data)),t||(t=e?.message||"Request failed"),t}const h=async(e,t={},r={})=>{try{const o=await i.get(e,{params:t,responseType:"blob",...r});return o.data}catch(e){const t=await p(e),r=new Error(t);throw r.status=e?.response?.status,r.original=e,r}},f=i},5767:(e,t,r)=>{"use strict";r.d(t,{n:()=>c});r(295);var o=r(705),n=r(2986),s=r(2584);function a(e){return String(e||"").trim().toLowerCase()}function i(e){return e&&"object"===typeof e?a(e.role_code??e.roleCode??e.RoleCode):""}function l(e){const t=String(e||"").trim();if(!t)return null;const r=t.split(".");if(3!==r.length)return null;try{const e=r[1].replace(/-/g,"+").replace(/_/g,"/").padEnd(4*Math.ceil(r[1].length/4),"="),t=atob(e);return JSON.parse(t)}catch{return null}}const c=(0,o.nY)("auth",{state:()=>{let e=null;try{const t=localStorage.getItem("user");t&&"undefined"!==t&&"null"!==t&&(e=JSON.parse(t))}catch{console.warn("⚠️ Invalid user in localStorage, cleared"),localStorage.removeItem("user")}return{token:localStorage.getItem("token"),user:e,forcePasswordChange:"1"===localStorage.getItem("forcePasswordChange")}},getters:{isAuthenticated:e=>!!e.token,mustChangePassword:e=>!!e.forcePasswordChange,isAdmin:e=>{const t=i(e.user);if(t)return"admin"===t;const r=l(e.token);return"admin"===a(r?.role_code)}},actions:{setSession({token:e,user:t}){this.token=e,this.user=t?{...this.user||{},...t}:null,this.forcePasswordChange=!!t?.force_password_change,localStorage.setItem("token",e),t?localStorage.setItem("user",JSON.stringify(t)):localStorage.removeItem("user"),localStorage.setItem("forcePasswordChange",this.forcePasswordChange?"1":"0")},clearSession(){this.token=null,this.user=null,this.forcePasswordChange=!1,localStorage.removeItem("token"),localStorage.removeItem("user"),localStorage.removeItem("forcePasswordChange"),(0,s.o)().clear()},async login(e,t){const r=await n.Ay.post("/auth/login",{username:e,password:t}),o=r?.token||r?.data?.token||r?.access_token||r?.data?.access_token,a=r?.user||r?.data?.user,i="string"===typeof o?o.trim():"",l=3===i.split(".").length;if(!i||!l)throw console.error("❌ LOGIN RESPONSE (unexpected):",r),new Error("Invalid login token");this.setSession({token:i,user:a});const c=(0,s.o)();return await c.fetchPermissions(),console.log("🔐 AUTH DEBUG",{isAdmin:this.isAdmin,users:c.hasPermission("/api/users/list"),orders:c.hasPermission("/api/orders/list"),logs:c.hasPermission("/api/activity-logs"),permissions:c.hasPermission("/api/permissions/matrix")}),!0}}})},6795:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>i});var o=r(991),n=r(5115),s=r(5337),a=r(5188);r(8909);o.extend(n),o.extend(s),o.extend(a),o.locale("tr");const i=o}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var s=t[o]={exports:{}};return e[o].call(s.exports,s,s.exports,r),s.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,s)=>{if(!o){var a=1/0;for(d=0;d<e.length;d++){for(var[o,n,s]=e[d],i=!0,l=0;l<o.length;l++)(!1&s||a>=s)&&Object.keys(r.O).every(e=>r.O[e](o[l]))?o.splice(l--,1):(i=!1,s<a&&(a=s));if(i){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}s=s||0;for(var d=e.length;d>0&&e[d-1][2]>s;d--)e[d]=e[d-1];e[d]=[o,n,s]}})(),(()=>{r.n=e=>{var t=e&&e.__esModule?()=>e["default"]:()=>e;return r.d(t,{a:t}),t}})(),(()=>{r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})}})(),(()=>{r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[]))})(),(()=>{r.u=e=>"js/"+(996===e?"chunk-common":e)+"."+{28:"1861262a",54:"92abb86e",238:"471bb852",251:"ec73d906",330:"aa2a2894",358:"629c6b73",398:"9152643f",432:"939f1ebd",465:"9a2899f5",486:"a263e6f6",493:"e8a952e1",548:"61f02757",607:"70ac7b00",618:"f36e56f9",621:"2108b55f",629:"2c27a0a3",673:"8f68da58",713:"5838996c",755:"7f443827",770:"4db9e143",784:"f73528a6",806:"754fb646",891:"181bb68a",913:"c0c6a5a1",950:"6078f4a8",981:"0247bab0",996:"451c93b1"}[e]+".js"})(),(()=>{r.miniCssF=e=>"css/"+e+"."+{54:"b237f020",358:"36bfde07",398:"961173a2",607:"8d5cccce",713:"e99910ab",784:"5916f342"}[e]+".css"})(),(()=>{r.g=function(){if("object"===typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"===typeof window)return window}}()})(),(()=>{r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{var e={},t="baggisowtfaresystem:";r.l=(o,n,s,a)=>{if(e[o])e[o].push(n);else{var i,l;if(void 0!==s)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var m=c[d];if(m.getAttribute("src")==o||m.getAttribute("data-webpack")==t+s){i=m;break}}i||(l=!0,i=document.createElement("script"),i.charset="utf-8",r.nc&&i.setAttribute("nonce",r.nc),i.setAttribute("data-webpack",t+s),i.src=o),e[o]=[n];var u=(t,r)=>{i.onerror=i.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],i.parentNode&&i.parentNode.removeChild(i),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(u.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=u.bind(null,i.onerror),i.onload=u.bind(null,i.onload),l&&document.head.appendChild(i)}}})(),(()=>{r.r=e=>{"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{r.p="/"})(),(()=>{if("undefined"!==typeof document){var e=(e,t,o,n,s)=>{var a=document.createElement("link");a.rel="stylesheet",a.type="text/css",r.nc&&(a.nonce=r.nc);var i=r=>{if(a.onerror=a.onload=null,"load"===r.type)n();else{var o=r&&r.type,i=r&&r.target&&r.target.href||t,l=new Error("Loading CSS chunk "+e+" failed.\n("+o+": "+i+")");l.name="ChunkLoadError",l.code="CSS_CHUNK_LOAD_FAILED",l.type=o,l.request=i,a.parentNode&&a.parentNode.removeChild(a),s(l)}};return a.onerror=a.onload=i,a.href=t,o?o.parentNode.insertBefore(a,o.nextSibling):document.head.appendChild(a),a},t=(e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],s=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(s===e||s===t))return n}var a=document.getElementsByTagName("style");for(o=0;o<a.length;o++){n=a[o],s=n.getAttribute("data-href");if(s===e||s===t)return n}},o=o=>new Promise((n,s)=>{var a=r.miniCssF(o),i=r.p+a;if(t(a,i))return n();e(o,i,null,n,s)}),n={524:0};r.f.miniCss=(e,t)=>{var r={54:1,358:1,398:1,607:1,713:1,784:1};n[e]?t.push(n[e]):0!==n[e]&&r[e]&&t.push(n[e]=o(e).then(()=>{n[e]=0},t=>{throw delete n[e],t}))}}})(),(()=>{var e={524:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else{var s=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=s);var a=r.p+r.u(t),i=new Error,l=o=>{if(r.o(e,t)&&(n=e[t],0!==n&&(e[t]=void 0),n)){var s=o&&("load"===o.type?"missing":o.type),a=o&&o.target&&o.target.src;i.message="Loading chunk "+t+" failed.\n("+s+": "+a+")",i.name="ChunkLoadError",i.type=s,i.request=a,n[1](i)}};r.l(a,l,"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,s,[a,i,l]=o,c=0;if(a.some(t=>0!==e[t])){for(n in i)r.o(i,n)&&(r.m[n]=i[n]);if(l)var d=l(r)}for(t&&t(o);c<a.length;c++)s=a[c],r.o(e,s)&&e[s]&&e[s][0](),e[s]=0;return r.O(d)},o=globalThis["webpackChunkbaggisowtfaresystem"]=globalThis["webpackChunkbaggisowtfaresystem"]||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})();var o=r.O(void 0,[121],()=>r(824));o=r.O(o)})();
|
|
||||||
BIN
ui/dist/spa/js/app.292f5316.js.gz
vendored
BIN
ui/dist/spa/js/app.292f5316.js.gz
vendored
Binary file not shown.
1
ui/dist/spa/js/chunk-common.451c93b1.js
vendored
1
ui/dist/spa/js/chunk-common.451c93b1.js
vendored
File diff suppressed because one or more lines are too long
BIN
ui/dist/spa/js/chunk-common.451c93b1.js.gz
vendored
BIN
ui/dist/spa/js/chunk-common.451c93b1.js.gz
vendored
Binary file not shown.
@@ -48,7 +48,7 @@ export const BEDEN_SCHEMA = [
|
|||||||
{ key: 'pan', title: 'PANTOLON', values: ['38','40','42','44','46','48','50','52','54','56','58','60','62','64','66','68'] },
|
{ key: 'pan', title: 'PANTOLON', values: ['38','40','42','44','46','48','50','52','54','56','58','60','62','64','66','68'] },
|
||||||
{ key: 'gom', title: 'GOMLEK', values: ['XS','S','M','L','XL','2XL','3XL','4XL','5XL','6XL','7XL'] },
|
{ key: 'gom', title: 'GOMLEK', values: ['XS','S','M','L','XL','2XL','3XL','4XL','5XL','6XL','7XL'] },
|
||||||
{ key: 'tak', title: 'TAKIM ELBISE', values: ['44','46','48','50','52','54','56','58','60','62','64','66','68','70','72','74'] },
|
{ key: 'tak', title: 'TAKIM ELBISE', values: ['44','46','48','50','52','54','56','58','60','62','64','66','68','70','72','74'] },
|
||||||
{ key: 'aksbir', title: 'AKSESUAR', values: [' ', '44', 'STD', '110CM', '115CM', '120CM', '125CM', '130CM', '135CM'] }
|
{ key: 'aksbir', title: 'AKSESUAR', values: [' ', '44', 'STD', '110', '115', '120', '125', '130', '135'] }
|
||||||
]
|
]
|
||||||
|
|
||||||
export const schemaByKey = BEDEN_SCHEMA.reduce((m, g) => {
|
export const schemaByKey = BEDEN_SCHEMA.reduce((m, g) => {
|
||||||
@@ -1826,7 +1826,7 @@ export const useOrderEntryStore = defineStore('orderentry', {
|
|||||||
for (const [k, v] of Object.entries(newMap || {})) {
|
for (const [k, v] of Object.entries(newMap || {})) {
|
||||||
const beden = (k == null || String(k).trim() === '')
|
const beden = (k == null || String(k).trim() === '')
|
||||||
? ' '
|
? ' '
|
||||||
: normalizeBeden(String(k))
|
: normalizeBedenLabel(String(k))
|
||||||
merged[beden] = Number(merged[beden] || 0) + Number(v || 0)
|
merged[beden] = Number(merged[beden] || 0) + Number(v || 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2244,7 +2244,7 @@ export const useOrderEntryStore = defineStore('orderentry', {
|
|||||||
raw.ItemDim1Code == null
|
raw.ItemDim1Code == null
|
||||||
? ''
|
? ''
|
||||||
: String(raw.ItemDim1Code).trim()
|
: String(raw.ItemDim1Code).trim()
|
||||||
const beden = bedenRaw === '' ? ' ' : normalizeBeden(bedenRaw)
|
const beden = bedenRaw === '' ? ' ' : normalizeBedenLabel(bedenRaw)
|
||||||
|
|
||||||
const qty = Number(raw.Qty1 || raw.Qty || 0)
|
const qty = Number(raw.Qty1 || raw.Qty || 0)
|
||||||
|
|
||||||
@@ -3276,85 +3276,128 @@ export const useOrderEntryStore = defineStore('orderentry', {
|
|||||||
|
|
||||||
|
|
||||||
/* ===========================================================
|
/* ===========================================================
|
||||||
🔹 BEDEN LABEL NORMALİZASYONU (exported helper)
|
Size Label Normalization (frontend helper)
|
||||||
=========================================================== */
|
=========================================================== */
|
||||||
|
function safeTrimUpperJs(v) {
|
||||||
|
return (v == null ? '' : String(v)).trim().toUpperCase()
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeTextForMatch(v) {
|
||||||
|
return safeTrimUpperJs(v)
|
||||||
|
.normalize('NFD')
|
||||||
|
.replace(/[\u0300-\u036f]/g, '')
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseNumericSizeJs(v) {
|
||||||
|
const s = safeTrimUpperJs(v)
|
||||||
|
if (s === '' || !/^\d+$/.test(s)) return null
|
||||||
|
const n = Number.parseInt(s, 10)
|
||||||
|
return Number.isNaN(n) ? null : n
|
||||||
|
}
|
||||||
|
|
||||||
export function normalizeBedenLabel(v) {
|
export function normalizeBedenLabel(v) {
|
||||||
if (v === null || v === undefined) return ' '
|
let s = (v == null ? '' : String(v)).trim()
|
||||||
let s = String(v).trim()
|
|
||||||
if (s === '') return ' '
|
if (s === '') return ' '
|
||||||
// 44R, 50L vb. son ekleri at
|
|
||||||
s = s.replace(/(^\d+)\s*[A-Z]?$/i, '$1')
|
|
||||||
s = s.toUpperCase()
|
s = s.toUpperCase()
|
||||||
|
|
||||||
// harfli bedenlerin normalizasyonu
|
// Backend parity: normalize common "standard size" aliases.
|
||||||
const map = {
|
switch (s) {
|
||||||
'XS': 'XS', 'S': 'S', 'M': 'M', 'L': 'L', 'XL': 'XL',
|
case 'STD':
|
||||||
'XXL': '2XL', '2XL': '2XL', '3XL': '3XL', '4XL': '4XL',
|
case 'STANDART':
|
||||||
'5XL': '5XL', '6XL': '6XL', '7XL': '7XL', 'STD': 'STD'
|
case 'STANDARD':
|
||||||
|
case 'ONE SIZE':
|
||||||
|
case 'ONESIZE':
|
||||||
|
return 'STD'
|
||||||
}
|
}
|
||||||
if (map[s]) return map[s]
|
|
||||||
|
|
||||||
// tamamen sayıysa string olarak döndür
|
// Backend parity: only values ending with CM are converted to numeric part.
|
||||||
if (/^\d+$/.test(s)) return s
|
if (s.endsWith('CM')) {
|
||||||
|
const num = s.slice(0, -2).trim()
|
||||||
|
if (num !== '') return num
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (s) {
|
||||||
|
case 'XS':
|
||||||
|
case 'S':
|
||||||
|
case 'M':
|
||||||
|
case 'L':
|
||||||
|
case 'XL':
|
||||||
|
case '2XL':
|
||||||
|
case '3XL':
|
||||||
|
case '4XL':
|
||||||
|
case '5XL':
|
||||||
|
case '6XL':
|
||||||
|
case '7XL':
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
// virgüllü değer geldiyse ilkini al
|
|
||||||
if (s.includes(',')) return s.split(',')[0].trim()
|
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ===========================================================
|
/* ===========================================================
|
||||||
🔹 BEDEN GRUBU ALGILAMA HELPER’I
|
Size Group Detection
|
||||||
-----------------------------------------------------------
|
- Core logic aligned with backend detectBedenGroupGo
|
||||||
Gelen beden listesini, ürün grubu/kategori bilgisine göre
|
- Keeps frontend aksbir bucket for accessory lines
|
||||||
doğru grup anahtarına dönüştürür (ayk, yas, pan, gom, tak, aksbir).
|
=========================================================== */
|
||||||
-----------------------------------------------------------
|
|
||||||
=========================================================== */
|
|
||||||
export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = '') {
|
export function detectBedenGroup(bedenList, urunAnaGrubu = '', urunKategori = '') {
|
||||||
const list = Array.isArray(bedenList) && bedenList.length > 0
|
const list = Array.isArray(bedenList) ? bedenList : []
|
||||||
? bedenList.map(v => (v || '').toString().trim().toUpperCase())
|
const ana = normalizeTextForMatch(urunAnaGrubu)
|
||||||
: [' ']
|
const alt = normalizeTextForMatch(urunKategori)
|
||||||
|
|
||||||
const ana = (urunAnaGrubu || '')
|
// Frontend compatibility: accessory-only products should stay in aksbir.
|
||||||
.toUpperCase()
|
const accessoryGroups = [
|
||||||
.trim()
|
'AKSESUAR', 'KRAVAT', 'PAPYON', 'KEMER', 'CORAP',
|
||||||
.replace(/\(.*?\)/g, '')
|
'FULAR', 'MENDIL', 'KASKOL', 'ASKI', 'YAKA', 'KOL DUGMESI'
|
||||||
.replace(/[^A-ZÇÄİÖÅÜ0-9\s]/g, '')
|
|
||||||
.replace(/\s+/g, ' ')
|
|
||||||
|
|
||||||
const kat = (urunKategori || '').toUpperCase().trim()
|
|
||||||
// 🔸 Aksesuar ise "aksbir"
|
|
||||||
const aksesuarGruplari = [
|
|
||||||
'AKSESUAR','KRAVAT','PAPYON','KEMER','CORAP','ÇORAP',
|
|
||||||
'FULAR','MENDIL','MENDİL','KASKOL','ASKI',
|
|
||||||
'YAKA','KOL DUGMESI','KOL DÜÄMESİ'
|
|
||||||
]
|
]
|
||||||
const giyimGruplari = ['GÖMLEK','CEKET','PANTOLON','MONT','YELEK','TAKIM','TSHIRT','TİÅÖRT']
|
const clothingGroups = ['GOMLEK', 'CEKET', 'PANTOLON', 'MONT', 'YELEK', 'TAKIM', 'TSHIRT']
|
||||||
// 🔸 Pantolon özel durumu
|
|
||||||
if (
|
if (
|
||||||
aksesuarGruplari.some(g => ana.includes(g) || kat.includes(g)) &&
|
accessoryGroups.some(g => ana.includes(g) || alt.includes(g)) &&
|
||||||
!giyimGruplari.some(g => ana.includes(g))
|
!clothingGroups.some(g => ana.includes(g))
|
||||||
) return 'aksbir'
|
) {
|
||||||
|
return 'aksbir'
|
||||||
if (ana.includes('PANTOLON') && kat.includes('YETİÅKİN')) return 'pan'
|
|
||||||
// 🔸 Tamamen numerik (örneğin 39-44 arası) → ayakkabı
|
|
||||||
const allNumeric = list.every(v => /^\d+$/.test(v))
|
|
||||||
if (allNumeric) {
|
|
||||||
const nums = list.map(v => parseInt(v, 10)).filter(Boolean)
|
|
||||||
const diffs = nums.slice(1).map((v, i) => v - nums[i])
|
|
||||||
if (diffs.every(d => d === 1) && nums[0] >= 35 && nums[0] <= 46) return 'ayk'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔸 Yaş grubu (çocuk/garson)
|
if (ana.includes('AYAKKABI') || alt.includes('AYAKKABI')) {
|
||||||
if (kat.includes('GARSON') || kat.includes('ÇOCUK')) return 'yas'
|
return 'ayk'
|
||||||
|
}
|
||||||
|
|
||||||
// 🔸 Harfli beden varsa doğrudan "gom" (gömlek, üst giyim)
|
let hasYasNumeric = false
|
||||||
const harfliBedenler = ['XS','S','M','L','XL','XXL','2XL','3XL','4XL','5XL','6XL','7XL']
|
let hasAykNumeric = false
|
||||||
if (list.some(b => harfliBedenler.includes(b))) return 'gom'
|
let hasPanNumeric = false
|
||||||
|
|
||||||
|
for (const raw of list) {
|
||||||
|
const b = safeTrimUpperJs(raw)
|
||||||
|
|
||||||
|
switch (b) {
|
||||||
|
case 'XS':
|
||||||
|
case 'S':
|
||||||
|
case 'M':
|
||||||
|
case 'L':
|
||||||
|
case 'XL':
|
||||||
|
case '2XL':
|
||||||
|
case '3XL':
|
||||||
|
case '4XL':
|
||||||
|
case '5XL':
|
||||||
|
case '6XL':
|
||||||
|
case '7XL':
|
||||||
|
return 'gom'
|
||||||
|
}
|
||||||
|
|
||||||
|
const n = parseNumericSizeJs(b)
|
||||||
|
if (n == null) continue
|
||||||
|
|
||||||
|
if (n >= 2 && n <= 14) hasYasNumeric = true
|
||||||
|
if (n >= 39 && n <= 45) hasAykNumeric = true
|
||||||
|
if (n >= 38 && n <= 68) hasPanNumeric = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasAykNumeric) return 'ayk'
|
||||||
|
if (ana.includes('PANTOLON')) return 'pan'
|
||||||
|
if (hasPanNumeric) return 'pan'
|
||||||
|
if (alt.includes('COCUK') || alt.includes('GARSON')) return 'yas'
|
||||||
|
if (hasYasNumeric) return 'yas'
|
||||||
|
|
||||||
// 🔸 Varsayılan: takım elbise
|
|
||||||
return 'tak'
|
return 'tak'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3372,7 +3415,7 @@ export function toSummaryRowFromForm(form) {
|
|||||||
const lbl =
|
const lbl =
|
||||||
rawLbl == null || String(rawLbl).trim() === ''
|
rawLbl == null || String(rawLbl).trim() === ''
|
||||||
? ' '
|
? ' '
|
||||||
: normalizeBeden(String(rawLbl))
|
: normalizeBedenLabel(String(rawLbl))
|
||||||
|
|
||||||
const val = Number(values[i] || 0)
|
const val = Number(values[i] || 0)
|
||||||
if (val > 0) {
|
if (val > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user