PageSourceSearch

https://app.drohnenatlas.app/build/assets/Index-BIJNryHE.js

js drohnenatlas.app collected 2026-10-02 00:44:47 UTC 12,262 bytes, 1 lines download raw bytes

1import{u as j,d as A,w as c,e as a,f as d,k as G,m as v,t as s,l as r,g as n,j as i,n as g,M as B,B as f,J as b,F as $,z as h,x as T,E as D,s as H,q as R,b as K}from"./index-CKUd8UCd.js";import{t as Q}from"./index-DetH0VCB.js";import{_ as W}from"./AppShell-D8-Cbw8b.js";import{_ as C}from"./TextInput-CehQGeg1.js";import{_ as x}from"./Button-B_QCuksn.js";import{_ as y}from"./Field-BbFFq4g3.js";import{_ as X}from"./PageHeader-CCzbTRiE.js";import{_ as E}from"./Select-DxdgmyAz.js";import"./Toast-4wk-WJQd.js";import"./Card-BnrNCwOO.js";import"./PrimaryButton-DX4rX4oN.js";import"./SecondaryButton-D7ZbEw7n.js";import"./ConfirmModal-C94f297I.js";import"./DialogModal-CmPFmEai.js";import"./DangerButton-Do0kbx7S.js";import"./PhCheck.vue-Qcwn9lVA.js";import"./PhPlus.vue-BW7X6dqR.js";const Y={class:"space-y-6"},Z={key:0,class:"text-sm font-medium text-da-stop",role:"alert"},ee={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},te=["value"],ae=["value"],se={class:"text-sm text-da-text-muted"},oe={class:"flex gap-2"},le={key:0,class:"space-y-2"},re={class:"text-sm font-medium text-da-text"},ne=["value"],ie={key:0,class:"text-sm font-medium text-da-stop"},de={class:"flex gap-2"},ce={class:"grid grid-cols-1 lg:grid-cols-[1.6fr_1fr] gap-6 items-start"},ue={class:"space-y-3"},me={class:"text-sm font-semibold text-atlas-text"},pe={class:"w-full text-sm"},ge={class:"text-left text-xs text-atlas-text-muted border-b border-atlas-border"},fe={class:"px-4 py-3 font-medium"},be={class:"px-4 py-3 font-medium"},ye={class:"px-4 py-3 font-medium text-right"},ve={class:"px-4 py-3 font-medium text-right"},xe={class:"px-4 py-3 font-medium"},_e={key:0,class:"px-4 py-3"},$e={class:"sr-only"},he={class:"px-4 py-3 font-medium text-atlas-text"},ke={class:"px-4 py-3 text-atlas-text-muted"},Ve={class:"px-4 py-3 text-right tabular-nums"},we={class:"px-4 py-3 text-right tabular-nums"},Ce={class:"px-4 py-3 text-atlas-text-muted"},qe={key:0,class:"px-2 py-1 text-right whitespace-nowrap"},Se=["onClick"],Ue=["onClick"],Fe={key:0},Ee={colspan:"6",class:"px-4 py-10 text-center text-atlas-text-muted"},Me={class:"space-y-6"},Ne={class:"space-y-3"},je={class:"text-sm font-semibold text-atlas-text"},Ae={class:"font-medium text-atlas-text"},Be={class:"text-xs text-atlas-text-muted"},Te={key:0,class:"mt-2 -ml-2"},De=["onClick"],Re=["onClick"],ze={key:0,class:"text-sm text-atlas-text-muted"},Ie={class:"space-y-3"},Pe={class:"flex items-center justify-between"},Je={class:"text-sm font-semibold text-atlas-text"},Le={class:"text-sm text-atlas-text"},Oe={key:0,class:"whitespace-nowrap"},Ge=["onClick"],He=["onClick"],Ke={key:0,class:"px-4 py-6 text-sm text-atlas-text-muted"},k="inline-flex items-center min-h-11 px-2 text-sm text-da-text-muted hover:text-da-accent-text",z="w-full min-h-12 rounded-da-control border border-da-border-strong bg-da-card px-3.5 py-2 text-base text-da-text transition-shadow hover:border-da-text-muted focus:border-da-accent focus:outline-none focus:ring-[3px] focus:ring-da-accent/30 aria-[invalid=true]:border-da-stop placeholder:text-da-text-faint",q="border border-da-border rounded-da-card bg-da-card",mt={__name:"Index",props:{services:Array,packages:Array,texts:Array,units:Array,taxRates:Array,can:Object},setup(m){const I=m,P=new Intl.NumberFormat("de-DE",{style:"currency",currency:"EUR"}),J=e=>I.services.find(o=>o.id===e)?.name??"-",V=R(null),u=j({name:"",description:"",unit:"flat",price:"",tax_rate:19,group:""});function M(e=null){V.value=e?.id??"new",u.clearErrors(),u.defaults({name:e?.name??"",description:e?.description??"",unit:e?.unit??"flat",price:e?(e.unit_price_cents/100).toFixed(2):"",tax_rate:e?.tax_rate??19,group:e?.group??""}).reset()}function L(){const e=u.transform(({price:t,...l})=>({...l,unit_price_cents:Math.round(parseFloat(String(t).replace(",","."))*100)})),o={preserveScroll:!0,onSuccess:()=>V.value=null};V.value==="new"?e.post(route("user.business.catalog.services.store"),o):e.put(route("user.business.catalog.services.update",V.value),o)}const w=R(null),p=j({kind:"quote",name:"",body:"",items:[]});function S(e,o=null){w.value=o?.id??"new",p.clearErrors(),p.defaults({kind:e,name:o?.name??"",body:o?.body??"",items:(o?.items??[]).map(t=>({...t}))}).reset()}function O(){const e={preserveScroll:!0,onSuccess:()=>w.value=null};w.value==="new"?p.post(route("user.business.catalog.templates.store"),e):p.put(route("user.business.catalog.templates.update",w.value),e)}function F(e,o){confirm(Q("crm.catalog.delete_confirm",{name:o.name}))&&K.delete(route(e,o.id),{preserveScroll:!0})}const N=H();return(e,o)=>(n(),A(W,{title:e.$t("crm.catalog.title")},{default:c(()=>[a("div",Y,[d(X,{title:e.$t("crm.catalog.title"),description:e.$t("crm.catalog.subtitle")},G({_:2},[m.can.manage?{name:"actions",fn:c(()=>[d(x,{variant:"secondary",onClick:o[0]||(o[0]=t=>S("quote"))},{default:c(()=>[v(s(e.$t("crm.catalog.new_package")),1)]),_:1}),d(x,{onClick:o[1]||(o[1]=t=>M())},{default:c(()=>[v(s(e.$t("crm.catalog.new_service")),1)]),_:1})]),key:"0"}:void 0]),1032,["title","description"]),r(N).props.errors?.service?(n(),i("p",Z,s(r(N).props.errors.service),1)):g("",!0),V.value?(n(),i("form",{key:1,class:f([q,"p-6 space-y-4"]),onSubmit:B(L,["prevent"])},[a("div",ee,[d(y,{id:"service-name",label:e.$t("crm.catalog.field.name"),error:r(u).errors.name,class:"sm:col-span-2"},{default:c(t=>[d(C,b({modelValue:r(u).name,"onUpdate:modelValue":o[2]||(o[2]=l=>r(u).name=l),type:"text",required:"",maxlength:"200"},t),null,16,["modelValue"])]),_:1},8,["label","error"]),d(y,{id:"service-unit",label:e.$t("crm.catalog.field.unit"),error:r(u).errors.unit},{default:c(t=>[d(E,b({modelValue:r(u).unit,"onUpdate:modelValue":o[3]||(o[3]=l=>r(u).unit=l)},t),{default:c(()=>
1[(n(!0),i($,null,h(m.units,l=>(n(),i("option",{key:l,value:l},s(e.$t(`crm.catalog.unit.${l}`)),9,te))),128))]),_:1},16,["modelValue"])]),_:1},8,["label","error"]),d(y,{id:"service-price",label:e.$t("crm.catalog.field.price"),error:r(u).errors.unit_price_cents},{default:c(t=>[d(C,b({modelValue:r(u).price,"onUpdate:modelValue":o[4]||(o[4]=l=>r(u).price=l),type:"text",inputmode:"decimal",required:"",placeholder:"0,00"},t),null,16,["modelValue"])]),_:1},8,["label","error"]),d(y,{id:"service-tax_rate",label:e.$t("crm.catalog.field.tax_rate"),error:r(u).errors.tax_rate},{default:c(t=>[d(E,b({modelValue:r(u).tax_rate,"onUpdate:modelValue":o[5]||(o[5]=l=>r(u).tax_rate=l),modelModifiers:{number:!0}},t),{default:c(()=>[(n(!0),i($,null,h(m.taxRates,l=>(n(),i("option",{key:l,value:l},s(l)+" %",9,ae))),128))]),_:1},16,["modelValue"])]),_:1},8,["label","error"]),d(y,{id:"service-group",label:e.$t("crm.catalog.field.group")},{default:c(t=>[d(C,b({modelValue:r(u).group,"onUpdate:modelValue":o[6]||(o[6]=l=>r(u).group=l),type:"text",maxlength:"80"},t),null,16,["modelValue"])]),_:1},8,["label"]),d(y,{id:"service-description",label:e.$t("crm.catalog.field.description"),class:"sm:col-span-2"},{default:c(t=>[T(a("textarea",b({"onUpdate:modelValue":o[7]||(o[7]=l=>r(u).description=l),rows:"2",class:z},t),null,16),[[D,r(u).description]])]),_:1},8,["label"])]),a("p",se,s(e.$t("crm.catalog.tax_note")),1),a("div",oe,[d(x,{type:"submit",disabled:r(u).processing},{default:c(()=>[v(s(e.$t("crm.catalog.save")),1)]),_:1},8,["disabled"]),d(x,{variant:"secondary",onClick:o[8]||(o[8]=t=>V.value=null)},{default:c(()=>[v(s(e.$t("crm.catalog.cancel")),1)]),_:1})])],32)):g("",!0),w.value?(n(),i("form",{key:2,class:f([q,"p-6 space-y-4"]),onSubmit:B(O,["prevent"])},[d(y,{id:"template-name",label:e.$t("crm.catalog.field.name"),error:r(p).errors.name},{default:c(t=>[d(C,b({modelValue:r(p).name,"onUpdate:modelValue":o[9]||(o[9]=l=>r(p).name=l),type:"text",required:"",maxlength:"200"},t),null,16,["modelValue"])]),_:1},8,["label","error"]),r(p).kind==="quote"?(n(),i("fieldset",le,[a("legend",re,s(e.$t("crm.catalog.field.items")),1),(n(!0),i($,
1null,h(r(p).items,(t,l)=>(n(),i("div",{key:l,class:"flex gap-2 items-end"},[d(y,{id:`template-item-${l}-service`,label:e.$t("crm.catalog.col.service"),class:"flex-1"},{default:c(U=>[d(E,b({modelValue:t.service_id,"onUpdate:modelValue":_=>t.service_id=_,required:""},{ref_for:!0},U),{default:c(()=>[(n(!0),i($,null,h(m.services,_=>(n(),i("option",{key:_.id,value:_.id},s(_.name),9,ne))),128))]),_:1},16,["modelValue","onUpdate:modelValue"])]),_:2},1032,["id","label"]),d(y,{id:`template-item-${l}-quantity`,label:e.$t("crm.catalog.field.quantity"),class:"w-28"},{default:c(U=>[d(C,b({modelValue:t.quantity,"onUpdate:modelValue":_=>t.quantity=_,modelModifiers:{number:!0},type:"number",min:"0.01",step:"0.01",required:""},{ref_for:!0},U),null,16,["modelValue","onUpdate:modelValue"])]),_:2},1032,["id","label"]),d(x,{variant:"ghost",onClick:U=>r(p).items.splice(l,1)},{default:c(()=>[v(s(e.$t("crm.catalog.item_remove")),1)]),_:1},8,["onClick"])]))),128)),r(p).errors.items?(n(),i("span",ie,s(r(p).errors.items),1)):g("",!0),m.services.length?(n(),A(x,{key:1,variant:"secondary",onClick:o[10]||(o[10]=t=>r(p).items.push({service_id:m.services[0].id,quantity:1}))},{default:c(()=>[v(s(e.$t("crm.catalog.item_add")),1)]),_:1})):g("",!0)])):g("",!0),d(y,{id:"template-body",label:e.$t("crm.catalog.field.body"),error:r(p).errors.body},{default:c(t=>[T(a("textarea",b({"onUpdate:modelValue":o[11]||(o[11]=l=>r(p).body=l),rows:"4",class:z},t),null,16),[[D,r(p).body]])]),_:1},8,["label","error"]),a("div",de,[d(x,{type:"submit",disabled:r(p).processing},{default:c(()=>[v(s(e.$t("crm.catalog.save")),1)]),_:1},8,["disabled"]),d(x,{variant:"secondary",onClick:o[12]||(o[12]=t=>w.value=null)},{default:c(()=>[v(s(e.$t("crm.catalog.cancel")),1)]),_:1})])],32)):g("",!0),a("div",ce,[a("section",ue,[a("h2",me,s(e.$t("crm.catalog.services")),1),a("div",{class:f([q,"overflow-x-auto"])},[a("table",pe,[a("thead",ge,[a("tr",null,[a("th",fe,s(e.$t("crm.catalog.col.service")),1),a("th",be,s(e.$t("crm.catalog.col.unit")),1),a("th",ye,s(e.$t("crm.catalog.col.price")),1),a("th",ve,s(e.$t("crm.catalog.col.tax")),1),a("th",xe,s(e.$t("crm.catalog.col.group")),1),m.can.manage?(n(),i("th",_e,[a("span",$e,s(e.$t("crm.catalog.edit")),1)])):g("",!0)])]),a("tbody",null,[(n(!0),i($,null,h(m.services,t=>(n(),i("tr",{key:t.id,class:"border-b border-atlas-border last:border-0"},[a("td",he,s(t.name),1),a("td",ke,s(e.$t(`crm.catalog.unit.${t.unit}`)),1),a("td",Ve,s(r(P).format(t.unit_price_cents/100)),1),a("td",we,s(t.tax_rate)+" %",1),a("td",Ce,s(t.group??"-"),1),m.can.manage?(n(),i("td",qe,[a("button",{type:"button",class:f(k),onClick:l=>M(t)},s(e.$t("crm.catalog.edit")),9,Se),a("button",{type:"button",class:f(k),onClick:l=>F("user.business.catalog.services.destroy",t)},s(e.$t("crm.catalog.delete")),9,Ue)])):g("",!0)]))),128)),m.services.length===0?(n(),i("tr",Fe,[a("td",Ee,s(e.$t("crm.catalog.empty_services")),1)])):g("",!0)])])])]),a("div",Me,[a("section",Ne,[a("h2",je,s(e.$t("crm.catalog.packages")),1),(n(!0),i($,
1null,h(m.packages,t=>(n(),i("div",{key:t.id,class:f([q,"p-4"])},[a("div",Ae,s(t.name),1),a("div",Be,s(e.$t("crm.catalog.items_count",{count:t.items.length}))+" · "+s(t.items.map(l=>J(l.service_id)).join(", ")),1),m.can.manage?(n(),i("div",Te,[a("button",{type:"button",class:f(k),onClick:l=>S("quote",t)},s(e.$t("crm.catalog.edit")),9,De),a("button",{type:"button",class:f(k),onClick:l=>F("user.business.catalog.templates.destroy",t)},s(e.$t("crm.catalog.delete")),9,Re)])):g("",!0)]))),128)),m.packages.length===0?(n(),i("p",ze,s(e.$t("crm.catalog.empty_packages")),1)):g("",!0)]),a("section",Ie,[a("div",Pe,[a("h2",Je,s(e.$t("crm.catalog.texts")),1),m.can.manage?(n(),i("button",{key:0,type:"button",class:f(k),onClick:o[13]||(o[13]=t=>S("text"))},s(e.$t("crm.catalog.new_text")),1)):g("",!0)]),a("div",{class:f(q)},[(n(!0),i($,null,h(m.texts,t=>(n(),i("div",{key:t.id,class:"flex items-center justify-between gap-2 px-4 py-2 border-b border-atlas-border last:border-0"},[a("span",Le,s(t.name),1),m.can.manage?(n(),i("span",Oe,[a("button",{type:"button",class:f(k),onClick:l=>S("text",t)},s(e.$t("crm.catalog.edit")),9,Ge),a("button",{type:"button",class:f(k),onClick:l=>F("user.business.catalog.templates.destroy",t)},s(e.$t("crm.catalog.delete")),9,He)])):g("",!0)]))),128)),m.texts.length===0?(n(),i("p",Ke,s(e.$t("crm.catalog.empty_texts")),1)):g("",!0)])])])])])]),_:1},8,["title"]))}};export{mt 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.