PageSourceSearch

https://onelence.com/dash/_nuxt/DJiwX1bn.js

js onelence.com collected 2026-09-24 20:07:59 UTC 18,268 bytes, 1 lines download raw bytes

1import ot from"./D9z0m7Rt.js";import{_ as it}from"./CmrBSSNy.js";import{O as lt,F as dt,ad as ct,N as b,an as rt,G as L,J as Y,I as ut,a0 as d,a6 as l,a8 as s,aa as p,ab as F,H as a,a9 as c,al as C,ah as g,aq as h,ac as $,ao as _t,am as U,ag as y,aH as G,ai as j,aj as B,a5 as gt}from"./D0vQovKh.js";const kt={class:"tiktok-controls grid gap-5 max-w-5xl"},mt={class:"section"},pt={key:0,class:"card card-compact"},ht={class:"flex items-start gap-3"},bt={class:"grid gap-2 min-w-0"},vt={key:1,class:"card card-compact"},ft={class:"flex items-start gap-3"},yt={class:"grid gap-2 min-w-0"},xt={class:"text-sm text-muted"},wt={class:"flex flex-wrap gap-2"},Ct=["disabled"],$t={class:"card card-compact card-flex justify-between"},Tt={class:"flex items-center gap-3 min-w-0"},At={class:"tiktok-controls__mark"},Nt={class:"min-w-0"},St={class:"flex flex-wrap items-center gap-2"},Et={class:"type-heading-5 text-ink truncate"},It={key:1,class:"status-badge status-badge-warning"},Ot={class:"text-xs text-muted mt-1 truncate"},Lt={key:0},Ut={key:1},Bt={key:2},Mt=["disabled"],Dt={key:1,class:"card card-compact card-muted"},Vt={class:"flex flex-col sm:flex-row sm:items-center gap-3 justify-between"},Ft={class:"grid gap-1 min-w-0"},Pt={class:"type-heading-5 text-ink"},Rt={class:"text-sm text-muted"},qt={class:"tiktok-controls__tabs",role:"tablist"},Kt=["aria-selected","onClick"],zt={key:0,class:"tiktok-controls__count"},Gt={key:2,class:"card"},jt={class:"card"},Ht={class:"tiktok-controls__filters"},Jt={class:"tiktok-controls__chips",role:"group","aria-label":"Campaign status filter"},Qt=["onClick"],Wt={class:"tiktok-controls__count"},Xt={key:0,class:"tiktok-controls__empty"},Yt={class:"type-heading-5 text-ink"},Zt={class:"text-sm text-muted"},te={key:1,class:"grid gap-2"},ee={class:"tiktok-controls__row-main"},se={class:"flex flex-wrap items-center gap-2 min-w-0"},ae={class:"type-heading-5 text-ink truncate"},ne={class:"text-xs text-muted flex flex-wrap gap-x-2 gap-y-1"},oe={key:0},ie={key:0,class:"tiktok-controls__budget"},le=["onUpdate:modelValue","aria-label"],de=["disabled","onClick"],ce={class:"tiktok-controls__delivery shrink-0"},re={class:"text-xs font-semibold text-muted"},ue=["checked","disabled","onChange"],_e={class:"card"},ge={key:0,class:"tiktok-controls__empty"},ke={class:"type-heading-5 text-ink"},me={key:1,class:"grid gap-2"},pe={class:"tiktok-controls__row-main"},he={class:"flex flex-wrap items-center gap-2 min-w-0"},be={class:"type-heading-5 text-ink truncate"},ve={class:"text-xs text-muted flex flex-wrap gap-x-2 gap-y-1"},fe={key:0},ye={key:0,class:"tiktok-controls__budget"},xe=["onUpdate:modelValue","aria-label"],we=["disabled","onClick"],Ce={class:"tiktok-controls__delivery shrink-0"},$e={class:"text-xs font-semibold text-muted"},Te=["checked","disabled","onChange"],Ae={class:"card"},Ne={key:0,class:"tiktok-controls__empty"},Se={class:"type-heading-5 text-ink"},Ee={key:1,class:"grid gap-2"},Ie={class:"tiktok-controls__row-main"},Oe={class:"flex flex-wrap items-center gap-2 min-w-0"},Le={class:"type-heading-5 text-ink truncate"},Ue={class:"text-xs text-muted flex flex-wrap gap-x-2 gap-y-1"},Be={key:0},Me={class:"tiktok-controls__delivery shrink-0"},De={class:"text-xs font-semibold text-muted"},Ve=["checked","disabled","onChange"],Fe=lt({__name:"tiktok-campaign-controls",setup(Pe){const P=dt(),{selectedSiteId:M}=ct(),v=b(!1),T=b(""),D=b(!1),i=b(null),k=b(null),m=b(""),A=b(!1),x=b("campaigns"),S=b("all"),_=b(""),f=rt({}),Z=L(()=>{const n=i.value;return[{id:"campaigns",label:"Campaigns",count:n?.campaigns.length??0},{id:"adgroups",label:"Ad groups",count:n?.adgroups.length??0},{id:"ads",label:"Ads",count:n?.ads.length??0}]});function E(n){const t=String(n||"").toUpperCase();return t==="ENABLE"||t==="ACTIVE"?"enable":t==="DISABLE"||t==="PAUSED"?"disable":"other"}const tt=L(()=>{const n=i.value?.campaigns??[],t={all:n.length,enable:0,disable:0,other:0};for(const o of n)t[E(o.status)]+=1;return[{id:"all",label:"All",count:t.all},{id:"enable",label:"On",count:t.enable},{id:"disable",label:"Off",count:t.disable},{id:"other",label:"Other",count:t.other}]}),H=L(()=>{const n=i.value?.campaigns??[],t=_.value.trim().toLowerCase();return n.filter(o=>S.value!=="all"&&E(o.status)!==S.value?!1:t?`${o.name||""} ${o.objective||""}`.toLowerCase().includes(t):!0)}),J=L(()=>{const n=i.value?.adgroups??[],t=_.value.trim().toLowerCase();return t?n.filter(o=>`${o.name||""} ${o.campaignName||""} ${o.campaignId||""}`.toLowerCase().includes(t)):n}),Q=L(()=>{const n=i.value?.ads??[],t=_.value.trim().toLowerCase();return t?n.filter(o=>`${o.name||""} ${o.adgroupName||""} ${o.campaignName||""}`.toLowerCase().includes(t)):n});function et(){const n=M.value?.trim();return n?`/api/integrations/tiktok/campaign-controls?siteId=${encodeURIComponent(n)}`:"/api/integrations/tiktok/campaign-controls"}function st(n){for(const t of n.campaigns){if(!t.id||!t.budgetEditable||t.budget==null)continue;const o=`campaign:${t.id}`;o in f||(f[o]=String(t.budget))}for(const t of n.adgroups){if(!t.id||!t.budgetEditable||t.budget==null)continue;const o=`adgroup:${t.id}`;o in f||(f[o]=String(t.budget))}}function at(n){return n?n.replace(/_/g," ").toLowerCase().replace(/\b\w/g,t=>t.toUpperCase()):"No objective"}function R(n){const t=String(n||"UNKNOWN").toUpperCase();return t==="ENABLE"||t==="ACTIVE"?"On":t==="DISABLE"||t==="PAUSED"?"Off":t.includes("DELETE")?"Deleted":t.replace(/_/g," ").toLowerCase().replace(/\b\w/g,o=>o.toUpperCase())}function q(n){const t=E(n);return t==="enable"?"is-active":t==="disable"?"is-paused":"is-neutral"}function N(n){return E(n)==="enable"}function K(n){const t=E(n);return t==="enable"||t==="disable"}function V(n,t){if(n==null||!Number.isFinite(n))return"";const o=String(t||"").toUpperCase();if(o.includes("INFINITE"))return"Unlimited budget";const u=i.value?.connection.currency||"",e=new Intl.NumberFormat(void 0,{maximumFractionDigits:2}).format(n),r=u?`${u} `:"";return o.includes("DAY")?`${r}${e}/day`:o.includes("TOTAL")||o.includes("LIFETIME")?`${r}${e} lifetime`:`${r}${e}`}function I(n){return n==="campaign"?"campaign":n==="adgroup"?"ad group":"ad"}async function O(){v.value=!0,T.value="",D.value=!1,m.value="";try{i.value=await P(et()),st(i.value)}catch(n){const t=Number(n?.statusCode||n?.data?.statusCode||n?.response?.status||0),o=String(n?.data?.statusMessage||n?.statusMessage||n?.message||"Could not load TikTok advertiser data.");i.value=null,t===404||o.includes("tiktok_connection_not_found")?(D.value=!0,T.value=""):T.value=o}finally{v.value=!1}}function W(){O()}async function z(n,t,o){if(!t.id)return;const u=o.target?.checked===!0,e=u?"ENABLE":"DISABLE";if(!confirm(`${u?"Enable":"Pause"} “${t.name||`this ${I(n)}`}” in TikTok Ads?`)){o.target.checked=!u;return}const nt=`status:${n}:${t.id}`;k.value=nt,m.value="",A.value=!1;try{const w=M.value?.trim()||null;await P("/api/integrations/tiktok/campaign-controls",{method:"POST",body:{action:"status",objectType:n,objectId:t.id,status:e,siteId:w}}),m.value=u?`${I(n)} enabled in TikTok.`:`${I(n)} paused in TikTok.`,await O()}catch(w){A.value=!0,m.value=String(w?.data?.statusMessage||w?.statusMessage||w?.message||"Could not update status."),o.target.checked=!u,Number(w?.statusCode||w?.data?.statusCode)===403&&i.value&&(i.value={...i.value,writeAllowed:!1,writeError:m.value})}finally{k.value=null}}async function X(n,t){if(!t.id)return;const o=`${n}:${t.id}`,u=Number(f[o]);if(!Number.isFinite(u)||u<=0){A.value=!0,m.value="Enter a valid budget greater than zero.";return}if(!confirm(`Update budget for “${t.name||`this ${I(n)}`}” to ${u}?`))return;const e=`budget:${n}:${t.id}`;k.value=e,m.value="",A.value=!1;try{const r=M.value?.trim()||null;await P("/api/integrations/tiktok/campaign-controls",{method:"POST",body:{action:"budget",objectType:n,objectId:t.id,budget:u,siteId:r}}),m.value=`Budget updated for ${I(n)}.`,await O()}catch(r){A.value=!0,m.value=String(r?.data?.statusMessage||r?.statusMessage||r?.message||"Could not update budget."),Number(r?.statusCode||r?.data?.statusCode)===403&&i.value&&(i.value={...i.value,writeAllowed:!1,writeError:m.value})}finally{k.value=null}}return Y(M,()=>{i.value=null,T.value="",D.value=!1,S.value="all",_.value="",O()}),Y(x,()=>{_.value=""}),ut(()=>{O()}),(n,t)=>{const o=ot,u=it;return l(),d("div",kt,[s("section",mt,[p(u,{to:"/integrations",class:"tiktok-controls__back"},{default:F(()=>[p(o,{name:"mdi:arrow-left"}),t[3]||(t[3]=$(" Integrations ",-1))]),_:1}),t[4]||(t[4]=s("div",{class:"badge badge-lg"},"TikTok",-1)),t[5]||(t[5]=s("div",{class:"scribble-title"},"Ads delivery",-1)),t[6]||(t[6]=s("div",{class:"section-copy"}
1," Pause or enable campaigns, ad groups, and ads on the connected TikTok advertiser, and adjust daily or lifetime budgets. ",-1))]),a(D)?(l(),d("div",pt,[s("div",ht,[p(o,{name:"logos:tiktok-icon",class:"text-2xl mt-0.5 shrink-0"}),s("div",bt,[t[8]||(t[8]=s("div",{class:"type-heading-5 text-ink"},"Connect TikTok Ads first",-1)),t[9]||(t[9]=s("p",{class:"text-sm text-muted"}," Open Integrations, connect a TikTok advertiser, then return here to manage delivery and budgets. ",-1)),p(u,{class:"btn btn-secondary btn-sm",to:{path:"/integrations",query:{expand:"tiktok"}}},{default:F(()=>[...t[7]||(t[7]=[$(" Go to Integrations ",-1)])]),_:1})])])])):a(T)?(l(),d("div",vt,[s("div",ft,[p(o,{name:"mdi:alert-circle-outline",class:"text-2xl text-red-600 mt-0.5 shrink-0"}),s("div",yt,[t[11]||(t[11]=s("div",{class:"type-heading-5 text-ink"},"Couldn’t load TikTok data",-1)),s("p",xt,c(a(T)),1),s("div",wt,[s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:a(v),onClick:W}," Try again ",8,Ct),p(u,{class:"btn btn-secondary btn-sm",to:"/integrations"},{default:F(()=>[...t[10]||(t[10]=[$("Back to Integrations",-1)])]),_:1})])])])])):(l(),d(C,{key:2},[s("div",$t,[s("div",Tt,[s("div",At,[p(o,{name:"logos:tiktok-icon",class:"tiktok-controls__mark-icon"})]),s("div",Nt,[s("div",St,[s("div",Et,c(a(i)?.connection.accountName||(a(v)?"Loa
1ding advertiser…":"TikTok advertiser")),1),a(i)?(l(),d("span",{key:0,class:h(["status-badge",a(i).connection.status==="connected"?"status-badge-success":"status-badge-warning"])},c(a(i).connection.status==="connected"?"Connected":"Needs attention"),3)):g("",!0),a(i)?.sandbox?(l(),d("span",It,"Sandbox")):g("",!0)]),s("div",Ot,[a(i)?(l(),d("span",Lt,c(a(i).connection.advertiserId),1)):g("",!0),a(i)?.connection.currency?(l(),d("span",Ut," · "+c(a(i).connection.currency),1)):a(v)?(l(),d("span",Bt,"Fetching campaigns, ad groups, and ads…")):g("",!0)])])]),s("button",{type:"button",class:"btn btn-secondary btn-sm shrink-0",disabled:a(v),onClick:W},[p(o,{name:"mdi:refresh",class:h(["mr-1.5 text-lg",{"animate-spin":a(v)}])},null,8,["class"]),$(" "+c(a(v)?"Refreshing":"Refresh"),1)],8,Mt)]),a(m)?(l(),d("p",{key:0,class:h(["tiktok-controls__toast",a(A)?"is-error":"is-ok"])},c(a(m)),3)):g("",!0),a(i)&&!a(i).writeAllowed?(l(),d("div",Dt,[s("div",Vt,[s("div",Ft,[s("div",Pt,c(a(i).sandbox?"Sandbox token missing Ads Management":"Reconnect TikTok to unlock ads management"),1),s("p",Rt,c(a(i).writeError||(a(i).sandbox?"Regenerate the sandbox access token in the TikTok portal with Ads Management enabled, then update TIKTOK_ACCESS_TOKEN_SANDBOX and restart the dev server.":"This connection is missing Ads Management access. Reconnect from Integrations to re-authorize TikTok.")),1)]),a(i).sandbox?g("",!0):(l(),_t(u,{key:0,class:"btn btn-secondary btn-sm shrink-0",to:{path:"/integrations",query:{expand:"tiktok"}}},{default:F(()=>[...t[12]||(t[12]=[$(" Reconnect TikTok ",-1)])]),_:1}))])])):g("",!0),s("div",qt,[(l(!0),d(C,null,U(a(Z),e=>(l(),d("button",{key:e.id,type:"button",role:"tab",class:h(["tiktok-controls__tab",{"is-active":a(x)===e.id}]),"aria-selected":a(x)===e.id,onClick:r=>x.value=e.id},[$(c(e.label)+" ",1),a(i)?(l(),d("span",zt,c(e.count),1)):g("",!0)],10,Kt))),128))]),a(v)&&!a(i)?(l(),d("div",Gt,[...t[13]||(t[13]=[s("div",{class:"tiktok-controls__skeleton"},null,-1),s("div",{class:"tiktok-controls__skeleton tiktok-controls__skeleton--short"},null,-1),s("div",{class:"tiktok-controls__skeleton"},null,-1)])])):a(i)?(l(),d(C,{key:3},[y(s("section",jt,[t[15]||(t[15]=s("div",{class:"card-header-row"},[s("div",{class:"card-header"},[s("div",{class:"type-heading-3 text-ink"},"Campaigns"),s("p",{class:"text-sm text-muted"}," Pause or enable campaign delivery and edit campaign-level budgets when CBO is on. ")])],-1)),s("div",Ht,[s("div",Jt,[(l(!0),d(C,null,U(a(tt),e=>(l(),d("button",{key:e.id,type:"button",class:h(["tiktok-controls__chip",{"is-active":a(S)===e.id}]),onClick:r=>S.value=e.id},[$(c(e.label)+" ",1),s("span",Wt,c(e.count),1)],10,Qt))),128))]),y(s("input",{"onUpdate:modelValue":t[0]||(t[0]=e=>j(_)?_.value=e:null),class:"input tiktok-controls__search",type:"search",placeholder:"Search campaigns","aria-label":"Search campaigns"},null,512),[[B,a(_)]])]),a(H).length?(l(),d("div",te,[(l(!0),d(C,null,U(a(H),e=>(l(),d("div",{key:e.id||e.name||"c",class:"card card-compact card-muted tiktok-controls__row"},[s("div",ee,[s("div",se,[s("div",ae,c(e.name||"Untitled campaign"),1),s("span",{class:h(["tiktok-controls__pill",q(e.status)])},c(R(e.status)),3)]),s("div",ne,[s("span",null,c(at(e.objective)),1),V(e.budget,e.budgetMode)?(l(),d("span",oe," · "+c(V(e.budget,e.budgetMode)),1)):g("",!0)]),e.budgetEditable&&e.id&&a(i).writeAllowed?(l(),d("div",ie,[y(s("input",{"onUpdate:modelValue":r=>a(f)[`campaign:${e.id}`]=r,class:"input tiktok-controls__budget-input",type:"number",min:"1",step:"0.01","aria-label":`Budget for ${e.name||"campaign"}`},null,8,le),[[B,a(f)[`campaign:${e.id}`]]]),s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:a(k)===`budget:campaign:${e.id}`,onClick:r=>X("campaign",e)}," Save budget ",8,de)])):g("",!0)]),s("div",ce,[s("span",re,c(N(e.status)?"On":"Off"),1),s("label",{class:h(["toggle-switch",{"is-busy":a(k)===`status:campaign:${e.id}`}])},[s("input",{class:"toggle-switch__input",type:"checkbox",checked:N(e.status),disabled:!e.id||!a(i).writeAllowed||a(k)===`status:campaign:${e.id}`||!K(e.status),onChange:r=>z("campaign",e,r)},null,40,ue),t[14]||(t[14]=s("span",{class:"toggle-switch__slider"},null,-1))],2)])]))),128))])):(l(),d("div",Xt,[p(o,{name:"mdi:bullhorn-outline",class:"tiktok-controls__empty-icon"}),s("div",Yt,c(a(i).campaigns.length?"No matching campaigns":"No campaigns yet"),1),s("p",Zt,c(a(i).campaigns.length?"Try a different filter or search term.":"Campaigns from this advertiser will show up here once they exist in TikTok Ads Manager."),1)]))],512),[[G,a(x)==="campaigns"]]),y(s("section",_e,[t[17]||(t[17]=s("div",{class:"card-header-row"},[s("div",{class:"card-header"},[s("div",{class:"type-heading-3 text-ink"},"Ad groups"),s("p",{class:"text-sm text-muted"}," Pause or enable ad groups and edit budgets when the ad group holds spend. ")])],-1)),y(s("input",{"onUpdate:modelValue":t[1]||(t[1]=e=>j(_)?_.value=e:null),class:"input tiktok-controls__search tiktok-controls__search--block",type:"search",placeholder:"Search ad groups","aria-label":"Search ad groups"},null,512),[[B,a(_)]]),a(J).length?(l(),d("div",me,[(l(!0),d(C,null,U(a(J),e=>(l(),d("div",{key:e.id||e.name||"ag",class:"card card-compact card-muted tiktok-controls__row"}
1,[s("div",pe,[s("div",he,[s("div",be,c(e.name||"Untitled ad group"),1),s("span",{class:h(["tiktok-controls__pill",q(e.status)])},c(R(e.status)),3)]),s("div",ve,[s("span",null,c(e.campaignName||e.campaignId||"Campaign"),1),V(e.budget,e.budgetMode)?(l(),d("span",fe," · "+c(V(e.budget,e.budgetMode)),1)):g("",!0)]),e.budgetEditable&&e.id&&a(i).writeAllowed?(l(),d("div",ye,[y(s("input",{"onUpdate:modelValue":r=>a(f)[`adgroup:${e.id}`]=r,class:"input tiktok-controls__budget-input",type:"number",min:"1",step:"0.01","aria-label":`Budget for ${e.name||"ad group"}`},null,8,xe),[[B,a(f)[`adgroup:${e.id}`]]]),s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:a(k)===`budget:adgroup:${e.id}`,onClick:r=>X("adgroup",e)}," Save budget ",8,we)])):g("",!0)]),s("div",Ce,[s("span",$e,c(N(e.status)?"On":"Off"),1),s("label",{class:h(["toggle-switch",{"is-busy":a(k)===`status:adgroup:${e.id}`}])},[s("input",{class:"toggle-switch__input",type:"checkbox",checked:N(e.status),disabled:!e.id||!a(i).writeAllowed||a(k)===`status:adgroup:${e.id}`||!K(e.status),onChange:r=>z("adgroup",e,r)},null,40,Te),t[16]||(t[16]=s("span",{class:"toggle-switch__slider"},null,-1))],2)])]))),128))])):(l(),d("div",ge,[p(o,{name:"mdi:folder-outline",class:"tiktok-controls__empty-icon"}),s("div",ke,c(a(i).adgroups.length?"No matching ad groups":"No ad groups yet"),1)]))],512),[[G,a(x)==="adgroups"]]),y(s("section",Ae,[t[19]||(t[19]=s("div",{class:"card-header-row"},[s("div",{class:"card-header"},[s("div",{class:"type-heading-3 text-ink"},"Ads"),s("p",{class:"text-sm text-muted"}," Pause or enable individual ads without opening TikTok Ads Manager. ")])],-1)),y(s("input",{"onUpdate:modelValue":t[2]||(t[2]=e=>j(_)?_.value=e:null),class:"input tiktok-controls__search tiktok-controls__search--block",type:"search",placeholder:"Search ads","aria-label":"Search ads"},null,512),[[B,a(_)]]),a(Q).length?(l(),d("div",Ee,[(l(!0),d(C,null,U(a(Q),e=>(l(),d("div",{key:e.id||e.name||"ad",class:"card card-compact card-muted tiktok-controls__row"},[s("div",Ie,[s("div",Oe,[s("div",Le,c(e.name||"Untitled ad"),1),s("span",{class:h(["tiktok-controls__pill",q(e.status)])},c(R(e.status)),3)]),s("div",Ue,[s("span",null,c(e.adgroupName||e.adgroupId||"Ad group"),1),e.campaignName||e.campaignId?(l(),d("span",Be," · "+c(e.campaignName||e.campaignId),1)):g("",!0)])]),s("div",Me,[s("span",De,c(N(e.status)?"On":"Off"),1),s("label",{class:h(["toggle-switch",{"is-busy":a(k)===`status:ad:${e.id}`}])},[s("input",{class:"toggle-switch__input",type:"checkbox",checked:N(e.status),disabled:!e.id||!a(i).writeAllowed||a(k)===`status:ad:${e.id}`||!K(e.status),onChange:r=>z("ad",e,r)},null,40,Ve),t[18]||(t[18]=s("span",{class:"toggle-switch__slider"},null,-1))],2)])]))),128))])):(l(),d("div",Ne,[p(o,{name:"mdi:image-outline",class:"tiktok-controls__empty-icon"}),s("div",Se,c(a(i).ads.length?"No matching ads":"No ads yet"),1)]))],512),[[G,a(x)==="ads"]])],64)):g("",!0)],64))])}}}),ze=gt(Fe,[["__scopeId","data-v-542dd74e"]]);export{ze 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.