PageSourceSearch

https://wedraw.kr/assets/ShopItemManagement.NONrAEtL.js

js wedraw.kr collected 2026-10-04 07:43:52 UTC 21,036 bytes, 1 lines download raw bytes

1import{j as e}from"./vendor-ui.BwPBmVwt.js";import{r as n,R as X}from"./vendor-react.kR8tqwKZ.js";import{d as L}from"./vendor-utils.D2q0l15H.js";import{X as V,B as M}from"./index.86ltQqcV.js";import{T as Y,a as Z,b as G,c as _,d as ee,e as b}from"./table.l4sAptai.js";import{u as se,A as H}from"./AdminWriteGuard.xT1R3h4-.js";import{P as te,S as ae,a as re}from"./ProductRecommendationEditor.0CE7HfTH.js";import{a as le}from"./variantSortOrder.Bk6J3M9h.js";import{C as z}from"./types.B00xrGpD.js";import{u as ne,l as oe,t as ce}from"./shopItemService.BTwK_t1m.js";import{I as T}from"./input.Bn8hRSEL.js";import{L as $}from"./label.BLlGNrU0.js";import{h as ie,i as de,j as me}from"./accessoryService.CbwOxwqv.js";import{s as xe}from"./shopApi.B9IZV2r5.js";import{L as K}from"./loader-circle.PPp0m7l9.js";import{I as ue}from"./image.BwtHwp2A.js";import{U as he}from"./upload.C9RE_zBD.js";import{T as ge}from"./trash-2.DYInpbaD.js";import{f as pe}from"./salesUnitFormat.rgRd83Xe.js";import{S as ye}from"./search.CoLV_vkF.js";import{C as fe}from"./chevron-down.8Oyg22r0.js";import{C as je}from"./chevron-right.BO4QQ722.js";import{S as be}from"./settings.Eoz354Vz.js";import"./vendor-three.C5-HLXBy.js";import"./core.esm.CkLylTHU.js";import"./sortable.esm.DBwfGQfI.js";import"./supabaseExternal.0aby9ahQ.js";import"./recommendationService.C5lSFfEC.js";import"./triangle-alert.DiFS_pz6.js";import"./package.sYWGe6pn.js";import"./chevron-up.B4ORgOxs.js";import"./storeNameMapper.ClbqmDtR.js";import"./romanizeSlug.DakaAtbV.js";function Q(t){if(t instanceof Error)return t.message;if(t&&typeof t=="object"){const r=t;return r.message||r.details||r.hint||r.code||JSON.stringify(r)}return String(t)}function U({label:t,type:r,value:a,onChange:m,productName:o}){const[x,u]=n.useState(!1),[p,c]=n.useState(null),g=n.useRef(null),N=async y=>{const w=y.target.files?.[0];if(w){c(null),u(!0);try{const f=await ie(w,r,o);f.success&&f.url?m(f.url):c(f.error||"업로드 실패")}catch{c("업로드 중 오류가 발생했습니다.")}finally{u(!1),g.current&&(g.current.value="")}}},v=async()=>{if(a){if(de(a))try{await me(a)}catch(y){console.error("Failed to delete image:",y)}m(null)}};return e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"block text-sm font-medium text-gray-700",children:t}),e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsx("div",{className:"w-24 h-24 border rounded-lg overflow-hidden bg-gray-50 flex items-center justify-center",children:a?e.jsx("img",{src:a,alt:t,className:"w-full h-full object-cover",onError:y=>{y.target.src="/placeholder.png"}}):e.jsx(ue,{className:"w-8 h-8 text-gray-300"})}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("input",{ref:g,type:"file",accept:"image/jpeg,image/png,image/webp,image/gif",onChange:N,className:"hidden"}),e.jsx(M,{type:"button",variant:"outline",size:"sm",onClick:()=>g.current?.click(),disabled:x,children:x?e.jsxs(e.Fragment,{children:[e.jsx(K,{className:"w-4 h-4 mr-2 animate-spin"}),"업로드 중..."]}):e.jsxs(e.Fragment,{children:[e.jsx(he,{className:"w-4 h-4 mr-2"}),"이미지 업로드"]})}),a&&e.jsxs(M,{type:"button",variant:"ghost",size:"sm",onClick:v,className:"text-red-600 hover:text-red-700 hover:bg-red-50",children:[e.jsx(ge,{className:"w-4 h-4 mr-2"}),"삭제"]}),p&&e.jsx("p",{className:"text-xs text-red-500",children:p})]})]})]})}function Ne({item:t,variantCount:r=1,onClose:a,onSaved:m}){const[o,x]=n.useState(!1),u=n.useRef(null),[p,c]=n.useState(t.shop_slug??""),[g,N]=n.useState(t.shop_group_max_purchase_qty!=null?String(t.shop_group_max_purchase_qty):""),v=t.shop_detail_imgs??[],[y,w]=n.useState(t.shop_thumbnail_url??null),[f,A]=n.useState(v[0]??null),[I,j]=n.useState(v[1]??null),[F,k]=n.useState(v[2]??null);n.useEffect(()=>{c(t.shop_slug??""),N(t.shop_group_max_purchase_qty!=null?String(t.shop_group_max_purchase_qty):"");const s=t.shop_detail_imgs??[];w(t.shop_thumbnail_url??null),A(s[0]??null),j(s[1]??null),k(s[2]??null)},[t.id]);const R=g.trim(),S=R===""?null:Number(R),C=S!=null&&(!Number.isInteger(S)||S<1)?"1 이상의 정수를 입력하세요":null,P=async()=>
1{if(C){L.error(`상품 전체 최대 구매 수량: ${C}`);return}x(!0);try{const s=[f,I,F].filter(i=>!!i);await ne(t,{shop_slug:p.trim()||null,shop_thumbnail_url:y??null,shop_detail_imgs:s,shop_group_max_purchase_qty:S});try{await u.current?.save()}catch(i){console.error("추천 저장 실패:",i),L.error(`쇼핑 정보는 저장됐지만 추천 저장에 실패했습니다: ${Q(i)}`),m(),a();return}L.success("쇼핑 정보가 저장되었습니다."),m(),a()}catch(s){L.error(`저장 실패: ${Q(s)}`)}finally{x(!1)}};return e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{className:"absolute inset-0 bg-black/50",onClick:a}),e.jsxs("div",{className:"relative bg-white rounded-lg shadow-xl w-full max-w-2xl max-h-[90vh] overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between px-6 py-4 border-b",children:[e.jsxs("h2",{className:"text-lg font-semibold",children:["쇼핑 상품 관리 - ",t.product_name]}),e.jsx("button",{onClick:a,className:"p-1 hover:bg-gray-100 rounded",children:e.jsx(V,{className:"w-5 h-5"})})]}),e.jsx("div",{className:"p-6 overflow-y-auto",style:{maxHeight:"calc(90vh - 140px)"},children:e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"bg-gray-50 p-4 rounded-lg space-y-3",children:[e.jsx("h3",{className:"font-medium text-sm text-gray-700",children:"기본 정보"}),e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx($,{className:"text-xs text-gray-500",children:"상품명"}),e.jsx(T,{value:t.product_name,readOnly:!0,disabled:!0,className:"bg-gray-100 cursor-not-allowed",title:"품목 관리에서 수정"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx($,{className:"text-xs text-gray-500",children:"카테고리"}),e.jsx(T,{value:z[t.category_code]??t.category_code,readOnly:!0,disabled:!0,className:"bg-gray-100 cursor-not-allowed",title:"품목 관리의 카테고리와 자동 동기화됩니다"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx($,{className:"text-xs text-gray-500",children:"서브 카테고리"}),e.jsx(T,{value:t.sub_category??"",readOnly:!0,disabled:!0,className:"bg-gray-100 cursor-not-allowed",title:"품목 관리의 서브 카테고리와 자동 동기화됩니다"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx($,{className:"text-xs text-gray-500",children:"규격 수"}),e.jsxs("div",{className:"px-3 py-2 text-sm text-gray-600 bg-white border border-gray-200 rounded-md",children:[r,"개"]})]}),e.jsxs("div",{className:"space-y-1 col-span-2",children:[e.jsxs($,{className:"text-xs text-gray-500",children:["SEO Slug (영문 URL)",e.jsx("span",{className:"ml-2 text-[10px] font-normal text-gray-400",children:"미설정 시 상품명을 로마자(예: beulrum-gyeongcheop)로 자동 변환"})]}),e.jsx(T,{value:p,onChange:s=>c(s.target.value),placeholder:"예: hinge-blum-damping",maxLength:100,className:"font-mono"})]}),e.jsxs("div",{className:"space-y-1 col-span-2",children:[e.jsxs($,{className:"text-xs text-gray-500",children:["상품 전체 최대 구매 수량 (주문 1건당)",e.jsx("span",{className:"ml-2 text-[10px] font-normal text-gray-400",children:"모든 규격(옵션) 합계 기준 · 빈 값 = 제한 없음 · 규격별 최대는 품목 관리에서 설정"})]}),e.jsx(T,{type:"number",inputMode:"numeric",min:1,step:1,value:g,onChange:s=>N(s.target.value),placeholder:"예: 3",className:C?"border-red-400":void 0}),C&&e.jsx("p",{className:"text-xs text-red-500",children:C})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"font-medium text-sm text-gray-700",children:"이미지 관리"}),e.jsx("p",{className:"text-xs text-gray-500",children:"새 이미지를 업로드하면 Supabase Storage에 저장됩니다. 기존 이미지는 그대로 유지됩니다."}),e.jsxs("div",{className:"grid grid-cols-2 gap-6",children:[e.jsx(U,{label:"썸네일 이미지",type:"thumbnail",value:y,onChange:w,productName:t.product_name}),e.jsx(U,{label:"상세 이미지 1",type:"detail_1",value:f,onChange:A,productName:t.product_name}),e.jsx(U,{label:"상세 이미지 2",type:"detail_2",value:I,onChange:j,productName:t.product_name}),e.jsx(U,{label:"상세 이미지 3",type:"detail_3",value:F,onChange:k,productName:t.product_name})]})]}),e.jsx("div",{className:"border-t pt-6",children:e.jsx(te,{ref:u,sourceKey:xe(z[t.category_code]||"기타",t.sub_category,t.product_name)})})]})}),e.jsx("div",{className:"flex items-center justify-end px-6 py-4 border-t bg-gray-50",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(M,{variant:"outline",onClick:a,disabled:o,children:"취소"}),e.jsx(M,{onClick:P,disabled:o,children:o?e.jsxs(e.Fragment,{children:[e.jsx(K,{className:"w-4 h-4 mr-2 animate-spin"}),"저장 중..."]}):"저장"})]})})]})]})}const ve="미분류",_e="/images/accessories/thumbnails";function we(t){const r=t.trim();return r.startsWith("http://")||r.startsWith("https://")||r.startsWith("/")?r:`${_e}/${r}`}function W(t){return z[t.category_code]||ve}function Se(t){const r=new Map;for(const a of t){const m=W(a),o=a.sub_category?.trim()||"",x=o?`${m}__${o}`:`${m}__~${a.product_name}`;r.has(x)||r.set(x,[]),r.get(x).push(a)}return Array.from(r.entries()).map(([a,m])=>{const o=le([...m].sort((c,g)=>c.product_name.trim().localeCompare(g.product_name.trim(),"ko",{numeric:!0})),c=>c.variant_sort_order),x=o[0],u=x.sub_category?.trim()||null,p=o.find(c=>c.shop_thumbnail_url)?.shop_thumbnail_url||null;return{key:a,groupName:u||x.product_name,category:W(x),subCategory:u,thumbnail:p,rows:o,anyActive:o.some(c=>c.is_active),allSoldOut:o.every(c=>c.shop_is_sold_out),someSoldOut:!o.every(c=>c.shop_is_sold_out)&&o.some(c=>c.shop_is_sold_out)}})}function ls(){const[t,r]=n.useState([]),[a,m]=n.useState(null),[o,x]=n.useState(""),[u,p]=n.useState("all"),[c,g]=n.useState(!0),[N,v]=n.useState(null),[y,w]=n.useState(null),f=se(),A=async s=>{await re(s.map(d=>d.id));const i=new Map(s.map((d,h)=>[d.id,h+1]));r(d=>d.map(h=>i.has(h.id)?{...h,variant_sort_order:i.get(h.id)}:h))};n.useEffect(()=>{I()},[]);const I=async()=>{try{g(!0);const s=await oe();r(s)}catch(s){console.error("쇼핑 상품 로드 실패:",s),L.error("데이터를 불러오는데 실패했습니다.")}finally{g(!1)}},j=n.useMemo(()=>Se(t),[t]),F=n.useMemo(()=>{const s=new Map;for(const i of j)s.set(i.category,(s.get(i.category)??0)+1);return Array.from(s.entries()).map(([i,d])=>({name:i,count:d}))},[j]),k=n.useMemo(()=>j.filter(s=>{if(a&&s.category!==a)return!1;const i=s.allSoldOut||s.someSoldOut;if(u==="active"&&i||u==="soldout"&&!i)return!1;if(o){const d=o.toLowerCase(),h=s.groupName.toLowerCase().includes(d),D=s.subCategory?.toLowerCase().includes(d)??!1,q=s.rows.some(E=>E.product_name.toLowerCase().includes(d));if(!h&&!D&&!q)return!1}return!0}),[j,a,u,o]),R=j.length,S=j.filter(s=>s.allSoldOut||s.someSoldOut).length,C=R-S,P=async s=>{const i=!s.shop_is_sold_out,d=i?`"${s.product_name}" 규격을 쇼핑 품절 처리하시겠습니까?`:`"${s.product_name}" 규격을 판매 재개하시겠습니까?`;if(confirm(d))try{await ce(s.id,i),I()}catch(h){console.error(h),L.error("상태 변경에 실패했습니다.")}};return c?e.jsx("div",{className:"p-6 flex items-center justify-center min-h-screen",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600",children:"데이터 로딩 중..."})]})}):e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold text-gray-900",children:"쇼핑 상품 관리"}),e.jsx("p",{className:"text-sm text-gray-500 mt-1",children:"쇼핑(/shop) 페이지에 노출되는 상품의 카테고리·이미지·품절 상태를 관리합니다."})]}),e.jsxs("div",{className:"text-xs text-gray-500 max-w-sm text-right",children:["쇼핑 상품 추가는 [품목 관리]에서 ",e.jsx("span",{className:"font-medium",children:'"쇼핑 페이지에 노출"'})," 토글로 처리됩니다."]})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("button",{type:"button",onClick:()=>{p("all"),m(null)},className:`bg-white rounded-lg border p-4 text-left transition-colors hover:bg-gray-50 ${u==="all"?"border-blue-500 ring-2 ring-blue-200":"border-gray-200"}`,children:[e.jsx("div",{className:"text-sm text-gray-500",children:"전체 쇼핑 상품"}),e.jsxs("div",{className:"text-2xl font-bold text-gray-900",children:[R,"개"]})]}),e.jsxs("button",{type:"button",onClick:()=>{p("active"),m(null)},className:`bg-white rounded-lg border p-4 text-left transition-colors hover:bg-gray-50 ${u==="active"?"border-green-500 ring-2 ring-green-200":"border-gray-200"}`,children:[e.jsx("div",{className:"text-sm text-gray-500",children:"판매중"}),e.jsxs("div",{className:"text-2xl font-bold text-green-600",children:[C,"개"]})]}),e.jsxs("button",{type:"button",onClick:()=>{p("soldout"),m(null)},className:`bg-white rounded-lg border p-4 text-left transition-colors hover:bg-gray-50 ${u==="soldout"?"border-red-500 ring-2 ring-red-200":"border-gray-200"}`,children:[e.jsx("div",{className:"text-sm text-gray-500",children:"품절"}),e.jsxs("div",{className:"text-2xl font-bold text-red-600",children:[S,"개"]})]})]}),e.jsxs("div",{className:"bg-white rounded-lg shadow-sm border border-gray-200",children:[e.jsx("div",{className:"px-6 py-4 border-b border-gray-200",children:e.jsx("h2",{className:"text-lg font-semibold text-gray-900",children:"카테고리"})}),e.jsxs("div",{className:"flex items-center gap-2 px-4 py-3 overflow-x-auto",children:[e.jsx("button",{onClick:()=>m(null),className:`flex-shrink-0 px-4 py-2 rounded-lg text-sm font-medium transition-colors ${a===null?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:"전체 보기"}),F.map(s=>e.jsx("button",{onClick:()=>m(s.name),className:`flex-shrink-0 px-4 py-2 rounded-lg text-sm font-medium transition-colors ${a===s.name?"bg-blue-600 text-white":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:s.name},s.name))]})]}),e.jsxs("div",{className:"bg-white rounded-lg shadow-sm border border-gray-200 p-6",children:[e.jsxs("div",{className:"flex items-center justify-between mb-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("h2",{className:"text-xl font-bold text-gray-900",children:a??"전체"}),e.jsxs("span",{className:"px-3 py-1 bg-blue-100 text-blue-700 text-sm font-medium rounded-full",children:[k.length,"개"]})]}),e.jsx("div",{className:"flex items-center gap-4",children:e.jsxs("div",{className:"relative w-64",children:[e.jsx(ye,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"}),e.jsx("input",{type:"text",value:o,onChange:s=>x(s.target.value),placeholder:"서브카테고리·상품명 검색...",className:"w-full pl-9 pr-9 py-2 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"}),o&&e.jsx("button",{type:"button",onClick:()=>x(""),className:"absolute right-3 top-1/2 -translate-y-1/2 p-0.5 rounded hover:bg-gray-100 text-gray-400 hover:text-gray-600",title:"검색어 지우기",children:e.jsx(V,{className:"w-4 h-4"})})]})})]}),k.length===0?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx("div",{className:"text-gray-500",children:"노출된 쇼핑 상품이 없습니다."})}):e.jsx("div",{className:"border rounded-lg overflow-hidden",children:e.jsxs(Y,{className:"table-fixed w-full",children:[e.jsx(Z,{children:e.jsxs(G,{className:"bg-gray-50",children:[e.jsx(_,{className:"w-[3%]"}),e.jsx(_,{className:"w-[7%]",children:"이미지"}),e.jsx(_,{className:"w-[12%]",children:"코드"}),e.jsx(_,{className:"w-[51%]",children:"서브 카테고리"}),e.jsx(_,{className:"w-[7%] text-center",children:"규격수"}),e.jsx(_,{className:"w-[10%] text-right",children:"가격"}),e.jsx(_,{className:"w-[6%] text-center",children:"상태"}),e.jsx(_,{className:"w-[4%] text-right",children:"관리"})]})}),e.jsx(ee,{children:k.map(s=>{const i=s.rows[0],d=s.rows.map(l=>l.sale_price??0).filter(l=>l>0),h=d.length>0?Math.min(...d):0,D=d.length>
10?Math.max(...d):0,q=h===D?`${h.toLocaleString()}원`:`${h.toLocaleString()} ~ ${D.toLocaleString()}원`,E=y===s.key;return e.jsxs(X.Fragment,{children:[e.jsxs(G,{className:`cursor-pointer hover:bg-gray-50 ${s.allSoldOut?"opacity-50 bg-gray-100":""} ${E?"bg-blue-50":""}`,onClick:()=>w(E?null:s.key),children:[e.jsx(b,{className:"px-2",children:E?e.jsx(fe,{className:"w-4 h-4 text-gray-500"}):e.jsx(je,{className:"w-4 h-4 text-gray-500"})}),e.jsx(b,{className:"px-2",children:s.thumbnail?e.jsx("img",{src:we(s.thumbnail),alt:s.groupName,className:"w-12 h-12 object-cover rounded",onError:l=>{const O=l.target;O.onerror=null,O.style.display="none"}}):e.jsx("div",{className:"w-12 h-12 bg-gray-200 rounded flex items-center justify-center",children:e.jsx("span",{className:"text-xs text-gray-400",children:"No Image"})})}),e.jsx(b,{className:"font-mono text-xs font-semibold",children:i.code||e.jsx("span",{className:"text-gray-300",children:"-"})}),e.jsx(b,{className:"text-sm font-medium text-gray-800",children:s.groupName}),e.jsxs(b,{className:"text-center",children:[s.rows.length,"개"]}),e.jsx(b,{className:"text-right",children:q}),e.jsx(b,{className:"text-center",children:s.allSoldOut?e.jsx("span",{className:"px-2 py-1 bg-red-100 text-red-700 rounded-full text-xs font-medium",children:"품절"}):s.someSoldOut?e.jsx("span",{className:"px-2 py-1 bg-amber-100 text-amber-700 rounded-full text-xs font-medium",children:"일부 품절"}):e.jsx("span",{className:"px-2 py-1 bg-green-100 text-green-700 rounded-full text-xs font-medium",children:"판매중"})}),e.jsx(b,{className:"text-right",children:e.jsx(H,{children:e.jsx(M,{variant:"ghost",size:"sm",onClick:l=>{l.stopPropagation();const O=s.rows.find(B=>B.shop_thumbnail_url||(B.shop_detail_imgs??[]).length>0)??i;v({item:O,variantCount:s.rows.length})},title:"쇼핑 정보 관리",children:e.jsx(be,{className:"w-4 h-4"})})})})]}),E&&e.jsx(G,{children:e.jsx(b,{colSpan:9,className:"bg-white p-0",children:e.jsxs("div",{className:"p-6 space-y-4",children:[e.jsx("div",{className:"flex items-center justify-between",children:e.jsxs("h4",{className:"font-semibold text-sm text-gray-700",children:["규격별 상세 (",s.rows.length,"개)"]})}),e.jsx("div",{className:"border rounded-lg overflow-hidden",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-gray-100",children:e.jsxs("tr",{children:[e.jsx("th",{className:"w-8","aria-label":"순서"}),e.jsx("th",{className:"px-4 py-2 text-left font-medium text-gray-600",children:"상품명"}),e.jsx("th",{className:"px-4 py-2 text-left font-medium text-gray-600",children:"코드"}),e.jsx("th",{className:"px-4 py-2 text-right font-medium text-gray-600",children:"판매가"}),e.jsx("th",{className:"px-4 py-2 text-center font-medium text-gray-600",children:"판매단위"}),e.jsx("th",{className:"px-4 py-2 text-center font-medium text-gray-600",children:"상태"}),e.jsx("th",{className:"px-4 py-2 text-center font-medium text-gray-600 w-32",children:"관리"})]})}),e.jsx(ae,{items:s.rows,getId:l=>l.id,onReorder:A,disabled:f,rowClassName:l=>l.shop_is_sold_out?"bg-gray-50 opacity-60":"hover:bg-gray-50",renderCells:l=>{const O=parseFloat(l.sale_unit??""),B=l.sale_unit_label?.trim()||"",J=pe(O,B)??"-";return e.jsxs(e.Fragment,{children:[e.jsx("td",{className:"px-4 py-2",children:e.jsx("span",{className:"font-medium",children:l.product_name})}),e.jsx("td",{className:"px-4 py-2",children:l.code?e.jsx("span",{className:"text-xs text-gray-700 font-mono font-semibold",children:l.code}):e.jsx("span",{className:"text-gray-400",children:"-"})}),e.jsx("td",{className:"px-4 py-2 text-right font-medium",children:l.sale_price?`${l.sale_price.toLocaleString()}원`:"-"}),e.jsx("td",{className:"px-4 py-2 text-center text-xs text-gray-600",children:J}),e.jsx("td",{className:"px-4 py-2 text-center",children:l.shop_is_sold_out?e.jsx("span",{className:"px-2 py-0.5 bg-red-100 text-red-700 rounded-full text-xs",children:"품절"}):e.jsx("span",{className:"px-2 py-0.5 bg-green-100 text-green-700 rounded-full text-xs",children:"판매중"})}),e.jsx("td",{className:"px-4 py-2 text-center",children:e.jsx(H,{children:e.jsx(M,{variant:"ghost",size:"sm",onClick:()=>P(l),className:l.shop_is_sold_out?"text-green-600 hover:text-green-700 hover:bg-green-50 text-xs":"text-red-600 hover:text-red-700 hover:bg-red-50 text-xs",children:l.shop_is_sold_out?"판매재개":"품절처리"})})})]})}})]})})]})})})]},s.key)})})]})})]}),N&&e.jsx(Ne,{item:N.item,variantCount:N.variantCount,onClose:()=>v(null),onSaved:I})]})}export{ls as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.