koishi-plugin-filter-pro 1.0.17 → 1.0.18

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/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{icons as e,message as t,send as n}from"@koishijs/client";import{Fragment as r,Teleport as i,computed as a,createBlock as o,createCommentVNode as s,createElementBlock as c,createElementVNode as l,createTextVNode as u,createVNode as d,defineComponent as f,normalizeClass as p,normalizeStyle as m,onBeforeUnmount as h,onMounted as g,openBlock as _,ref as v,renderList as y,resolveComponent as b,toDisplayString as x,vModelText as S,watch as C,withCtx as w,withDirectives as T,withKeys as E,withModifiers as D}from"vue";const O=[`disabled`],k={class:`label`},A=[`onClick`];var j=f({__name:`fp-select`,props:{modelValue:{type:String,required:!0},options:{type:Array,required:!0},placeholder:{type:String,required:!1},disabled:{type:Boolean,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,u=t,d=v(null),f=v(!1),b=v({left:0,top:0,width:0}),S=a(()=>n.options.find(e=>e.value===n.modelValue)?.label||``);function w(){n.disabled||(f.value=!f.value,f.value&&D())}function T(e){u(`update:modelValue`,e),f.value=!1}function E(e){let t=e.target;!d.value||!t||d.value.contains(t)||(f.value=!1)}function D(){if(!d.value)return;let e=d.value.getBoundingClientRect(),t=window.innerHeight-e.bottom-6,n=e.top-6,r=t<180&&n>t,i=Math.min(240,r?n:t);b.value={left:e.left,width:e.width,top:r?Math.max(8,e.top-Math.max(120,i)-6):e.bottom+6}}function j(){f.value&&D()}return C(f,e=>{e&&D()}),g(()=>{document.addEventListener(`click`,E),window.addEventListener(`resize`,j),window.addEventListener(`scroll`,j,!0)}),h(()=>{document.removeEventListener(`click`,E),window.removeEventListener(`resize`,j),window.removeEventListener(`scroll`,j,!0)}),(t,n)=>(_(),c(r,null,[l(`div`,{class:`fp-select`,ref_key:`root`,ref:d},[l(`button`,{type:`button`,class:p([`trigger`,{disabled:e.disabled}]),onClick:w,disabled:e.disabled},[l(`span`,k,x(S.value||e.placeholder),1),n[0]||=l(`span`,{class:`arrow`},`▾`,-1)],10,O)],512),(_(),o(i,{to:`body`},[f.value?(_(),c(`div`,{key:0,class:`menu`,style:m({left:`${b.value.left}px`,top:`${b.value.top}px`,width:`${b.value.width}px`})},[(_(!0),c(r,null,y(e.options,t=>(_(),c(`button`,{key:t.value,type:`button`,class:p([`item`,{active:t.value===e.modelValue}]),onClick:e=>T(t.value)},x(t.label),11,A))),128))],4)):s(`v-if`,!0)]))],64))}}),M=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},N=M(j,[[`__scopeId`,`data-v-4a262c3e`]]);const P={class:`chip-text`},F=[`onClick`],I=[`placeholder`,`onKeydown`];var L=M(f({name:`TagInput`,__name:`tag-input`,props:{modelValue:{type:Array,required:!0},placeholder:{type:String,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,i=t,a=v(null),o=v(``),u=v(!1);function d(){a.value?.focus()}function f(){let e=o.value.trim();e&&(n.modelValue.includes(e)||i(`update:modelValue`,[...n.modelValue,e]),o.value=``)}function m(e){let t=[...n.modelValue];t.splice(e,1),i(`update:modelValue`,t)}function h(){i(`update:modelValue`,[]),o.value=``}function g(){o.value===``&&n.modelValue.length>0&&m(n.modelValue.length-1)}function b(){let e=o.value.trim();e&&!n.modelValue.includes(e)&&i(`update:modelValue`,[...n.modelValue,e]),o.value=``,u.value=!1}return(t,n)=>(_(),c(`div`,{class:p([`tag-input-wrap`,{"is-focused":u.value}]),onClick:d},[(_(!0),c(r,null,y(e.modelValue,(e,t)=>(_(),c(`span`,{key:t,class:`tag-chip`},[l(`span`,P,x(e),1),l(`button`,{class:`chip-del`,onClick:D(e=>m(t),[`stop`]),tabindex:`-1`,title:`移除`},`×`,8,F)]))),128)),T(l(`input`,{ref_key:`inputEl`,ref:a,class:`tag-text-input`,"onUpdate:modelValue":n[0]||=e=>o.value=e,placeholder:e.modelValue.length===0?e.placeholder??``:``,onKeydown:[E(D(f,[`prevent`]),[`enter`]),E(g,[`backspace`])],onFocus:n[1]||=e=>u.value=!0,onBlur:b},null,40,I),[[S,o.value]]),e.modelValue.length>0?(_(),c(`button`,{key:0,class:`tag-clear-btn`,onClick:D(h,[`stop`]),tabindex:`-1`,title:`清空`},`×`)):s(`v-if`,!0)],2))}}),[[`__scopeId`,`data-v-8e9ea736`]]);const R={class:`cf-editor`},z={class:`rows-section`},B={key:0,class:`conn-and-wrap`},V={class:`cf-row`},H=[`onUpdate:modelValue`],U={key:1,class:`bool-toggle`},W=[`checked`,`onChange`],G={class:`bool-label`},ee=[`onUpdate:modelValue`,`onInput`,`placeholder`],te={class:`row-btns`},ne=[`disabled`,`onClick`],re={key:0,class:`add-section`},ie={class:`preview-section`},ae={class:`preview-code`};var K=M(f({name:`ExprEditor`,__name:`expr-editor`,props:{modelValue:{type:Object,required:!0}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=0,i=()=>String(++n),f=[{value:`guildId`,label:`群组 ID(guildId)`},{value:`channelId`,label:`频道 ID(channelId)`},{value:`userId`,label:`用户 ID(userId)`},{value:`platform`,label:`平台(platform)`},{value:`content`,label:`消息内容(content)`},{value:`isDirect`,label:`私聊(isDirect)`},{value:`type`,label:`消息类型(type)`}],m=[...f,{value:`__custom__`,label:`自定义字段...`}],h=[{value:`eq`,label:`等于`},{value:`ne`,label:`不等于`},{value:`in`,label:`等于以下各项`},{value:`nin`,label:`不等于以下各项`},{value:`includes`,label:`包含以下各项`},{value:`notincludes`,label:`不包含以下各项`},{value:`regex`,label:`正则匹配`},{value:`gt`,label:`大于`},{value:`gte`,label:`大于等于`},{value:`lt`,label:`小于`},{value:`lte`,label:`小于等于`},{value:`exists`,label:`存在`}],g=[{value:`eq`,label:`等于`},{value:`ne`,label:`不等于`},{value:`exists`,label:`存在`}],E={eq:`eq`,ne:`ne`,in:`in`,nin:`nin`,includes:`contains`,notincludes:`not-contains`,regex:`matches`,gt:`gt`,gte:`gte`,lt:`lt`,lte:`lte`,exists:`exists`},D=e,O=t,k=v(P(D.modelValue)),A=JSON.stringify(D.modelValue);C(()=>D.modelValue,e=>{let t=JSON.stringify(e);t!==A&&(A=t,k.value=P(e))},{deep:!0});function j(e,t=`guildId`){let n=t===`isDirect`;return{id:i(),field:t,customField:``,operator:`eq`,valueText:n?`false`:``,value:n?!1:``,connector:e}}function M(e,t){let n=f.some(t=>t.value===e.field),r=n?e.field:`__custom__`,a=Q(e.operator),o=r===`isDirect`?!1:a?[]:``,s=e.value??o;return a&&(typeof s==`string`?s=s?s.split(/[,,]/).map(e=>e.trim()).filter(Boolean):[]:Array.isArray(s)||(s=[])),{id:i(),field:r,customField:n?``:e.field,operator:e.operator,valueText:Array.isArray(s)||s==null?``:String(s),value:s,connector:t}}function P(e){if(!e)return[j(null)];if(e.type===`compare`)return[M(e,null)];if(e.type===`group`){if(e.children.every(e=>e.type===`compare`))return e.children.map((t,n)=>M(t,n===0?null:e.operator));if(e.operator===`or`){let t=[],n=!0;for(let r of e.children)r.type===`compare`?(t.push(M(r,n?null:`or`)),n=!1):r.type===`group`&&r.operator===`and`&&r.children.forEach((e,r)=>{e.type===`compare`&&(t.push(M(e,n?null:r===0?`or`:`and`)),n=!1)});if(t.length>0)return t}}return[j(null)]}function F(e){return{type:`compare`,field:e.field===`__custom__`?(e.customField||``).trim()||`guildId`:e.field,operator:e.operator,value:e.operator===`exists`?void 0:e.value}}function I(e){if(e.length===0)return{type:`compare`,field:`guildId`,operator:`eq`,value:``};if(e.length===1)return F(e[0]);let t=[],n=[e[0]];for(let r=1;r<e.length;r++)e[r].connector===`or`?(t.push(n),n=[e[r]]):n.push(e[r]);t.push(n);let r=t.map(e=>e.length===1?F(e[0]):{type:`group`,operator:`and`,children:e.map(F)});return r.length===1?r[0]:{type:`group`,operator:`or`,children:r}}function K(e){if(e.type===`compare`){let t=E[e.operator]||e.operator,n;return n=e.value===void 0?``:Array.isArray(e.value)?`{${e.value.map(e=>JSON.stringify(e)).join(` `)}}`:JSON.stringify(e.value),`(${e.field} ${t} ${n})`}if(e.type===`group`){let t=e.operator===`and`?` AND `:` OR `;return e.children.map(K).join(t)}return e.type===`not`?`NOT (${K(e.child)})`:``}let q=a(()=>K(I(k.value)));function J(){let e=I(k.value);A=JSON.stringify(e),O(`update:modelValue`,e)}function Y(e){k.value.push(j(e??`and`)),J()}function X(e,t){k.value.splice(e+1,0,j(t)),J()}function oe(e){k.value.length<=1||(k.value.splice(e,1),e===0&&(k.value[0].connector=null),J())}function Z(e){e<=0||(k.value[e].connector=k.value[e].connector===`or`?`and`:`or`,J())}function se(e){let t=e.trim();if(!t)return``;if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`)return null;let n=Number(t);return Number.isFinite(n)?n:e}function Q(e){return[`in`,`nin`,`includes`,`notincludes`].includes(e)}function $(e){return Q(e)?`输入后按 Enter 添加`:`比较值`}return(e,t)=>{let n=b(`k-button`);return _(),c(`div`,R,[s(` 条件行 `),l(`div`,z,[(_(!0),c(r,null,y(k.value,(e,i)=>(_(),c(r,{key:e.id},[s(` 连接符(第一行之后显示) `),i>0?(_(),c(`div`,{key:0,class:p([`connector-sep`,`conn-`+e.connector])},[s(` AND:细线 + 按钮 + 细线 `),e.connector===`and`?(_(),c(`div`,B,[t[2]||=l(`div`,{class:`conn-vline`},null,-1),d(n,{title:`点击切换为或(OR)`,onClick:e=>Z(i)},{default:w(()=>[...t[1]||=[u(`且(AND)`,-1)]]),_:1},8,[`onClick`]),t[3]||=l(`div`,{class:`conn-vline`},null,-1)])):(_(),c(r,{key:1},[s(` OR:仅按钮 `),d(n,{title:`点击切换为且(AND)`,onClick:e=>Z(i)},{default:w(()=>[...t[4]||=[u(`或(OR)`,-1)]]),_:1},8,[`onClick`])],2112))],2)):s(`v-if`,!0),s(` 条件行 `),l(`div`,V,[d(N,{"model-value":e.field,options:m,class:`sel-field`,"onUpdate:modelValue":t=>{let n=e.field===`isDirect`;e.field=t,t===`isDirect`?(e.value=!1,e.valueText=`false`,[`eq`,`ne`,`exists`].includes(e.operator)||(e.operator=`eq`)):n&&(e.value=Q(e.operator)?[]:``,e.valueText=``),J()}},null,8,[`model-value`,`onUpdate:modelValue`]),e.field===`__custom__`?T((_(),c(`input`,{key:0,class:`input custom-input`,"onUpdate:modelValue":t=>e.customField=t,onInput:J,placeholder:`字段路径,如 author.name`},null,40,H)),[[S,e.customField]]):s(`v-if`,!0),d(N,{"model-value":e.operator,options:e.field===`isDirect`?g:h,class:`sel-op`,"onUpdate:modelValue":t=>{let n=Q(e.operator),r=Q(t);e.operator=t,r&&!n?(e.value=[],e.valueText=``):!r&&n&&(e.value=``,e.valueText=``),J()}},null,8,[`model-value`,`options`,`onUpdate:modelValue`]),s(` isDirect:开关 `),e.field===`isDirect`&&e.operator!==`exists`?(_(),c(`label`,U,[l(`input`,{type:`checkbox`,checked:e.value===!0,onChange:t=>{e.value=t.target.checked,e.valueText=String(e.value),J()}},null,40,W),l(`span`,G,x(e.value===!0?`是(true)`:`否(false)`),1)])):e.field!==`isDirect`&&e.operator!==`exists`&&Q(e.operator)?(_(),c(r,{key:2},[s(` 数组操作符:Tag 输入 `),d(L,{"model-value":Array.isArray(e.value)?e.value:[],placeholder:$(e.operator),"onUpdate:modelValue":t=>{e.value=t,J()}},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`])],2112)):e.field!==`isDirect`&&e.operator!==`exists`?(_(),c(r,{key:3},[s(` 普通文本输入 `),T(l(`input`,{class:`input val-input`,"onUpdate:modelValue":t=>e.valueText=t,onInput:()=>{e.value=se(e.valueText),J()},placeholder:$(e.operator)},null,40,ee),[[S,e.valueText]])],2112)):s(`v-if`,!0),l(`div`,te,[d(n,{onClick:e=>X(i,`and`)},{default:w(()=>[...t[5]||=[u(`且(AND)`,-1)]]),_:1},8,[`onClick`]),i===k.value.length-1?(_(),o(n,{key:0,onClick:e=>X(i,`or`)},{default:w(()=>[...t[6]||=[u(`或(OR)`,-1)]]),_:1},8,[`onClick`])):s(`v-if`,!0)]),l(`button`,{class:`del-btn`,disabled:k.value.length<=1,onClick:e=>oe(i),title:`删除此条件`},` ✕ `,8,ne)])],64))),128))]),s(` 添加条件(仅空状态) `),k.value.length===0?(_(),c(`div`,re,[d(n,{onClick:t[0]||=e=>Y(null)},{default:w(()=>[...t[7]||=[u(`+ 添加条件`,-1)]]),_:1})])):s(`v-if`,!0),s(` 表达式预览 `),l(`div`,ie,[t[8]||=l(`div`,{class:`preview-title`},`表达式预览`,-1),l(`code`,ae,x(q.value||`(空)`),1)])])}}}),[[`__scopeId`,`data-v-40533e84`]]);const q={class:`plugin-selector`},J={class:`label`},Y={class:`dialog-header`},X={class:`dialog-body`},oe={class:`toolbar`},Z={class:`checkbox-item select-all`},se=[`checked`],Q=[`placeholder`],$={class:`plugin-list`},ce=[`value`,`checked`,`onChange`],le={key:0,class:`empty-state`};var ue=M(f({__name:`plugin-selector`,props:{modelValue:{type:Array,required:!0},options:{type:Array,required:!0},mode:{type:String,required:!1}},emits:[`update:modelValue`],setup(e,{emit:t}){let n=e,u=t,d=v(!1),f=v(``),p=v([...n.modelValue]),m=a(()=>n.mode===`command`),h=a(()=>m.value?`选择指令`:`选择插件实例`),g=a(()=>m.value?`搜索指令...`:`搜索插件...`),b=a(()=>m.value?`没有找到匹配的指令`:`没有找到匹配的插件`),w=a(()=>{let e=m.value?`指令`:`插件`,t=m.value?`请选择指令`:`请选择插件实例`;return p.value.length===0?t:p.value.length===1?n.options.find(e=>e.key===p.value[0])?.label||`已选择 1 个${e}`:`已选择 ${p.value.length} 个${e}`}),E=a(()=>{if(!f.value)return n.options;let e=f.value.toLowerCase();return n.options.filter(t=>t.label.toLowerCase().includes(e))}),O=a(()=>E.value.length>0&&E.value.every(e=>p.value.includes(e.key)));function k(e){let t=p.value.indexOf(e);t>-1?p.value.splice(t,1):p.value.push(e)}function A(e){if(e.target.checked)for(let e of E.value)p.value.includes(e.key)||p.value.push(e.key);else p.value=p.value.filter(e=>!E.value.some(t=>t.key===e))}function j(){u(`update:modelValue`,[...p.value]),d.value=!1}function M(){p.value=[...n.modelValue],d.value=!1}return C(()=>n.modelValue,e=>{p.value=[...e]}),C(d,e=>{e&&(f.value=``)}),(e,t)=>(_(),c(`div`,q,[s(` 触发按钮 `),l(`button`,{type:`button`,class:`trigger-btn`,onClick:t[0]||=e=>d.value=!0},[l(`span`,J,x(w.value),1),t[5]||=l(`span`,{class:`arrow`},`▾`,-1)]),s(` 多选对话框 `),(_(),o(i,{to:`body`},[d.value?(_(),c(`div`,{key:0,class:`dialog-overlay`,onClick:t[4]||=e=>d.value=!1},[l(`div`,{class:`dialog-content`,onClick:t[3]||=D(()=>{},[`stop`])},[l(`div`,Y,[l(`h3`,null,x(h.value),1),l(`button`,{class:`close-btn`,onClick:t[1]||=e=>d.value=!1},`✕`)]),l(`div`,X,[s(` 搜索和全选 `),l(`div`,oe,[l(`label`,Z,[l(`input`,{type:`checkbox`,checked:O.value,onChange:A},null,40,se),t[6]||=l(`span`,null,`全选`,-1)]),T(l(`input`,{"onUpdate:modelValue":t[2]||=e=>f.value=e,class:`search-input`,placeholder:g.value},null,8,Q),[[S,f.value]])]),s(` 插件/指令列表 `),l(`div`,$,[(_(!0),c(r,null,y(E.value,e=>(_(),c(`label`,{key:e.key,class:`checkbox-item`},[l(`input`,{type:`checkbox`,value:e.key,checked:p.value.includes(e.key),onChange:t=>k(e.key)},null,40,ce),l(`span`,null,x(e.label),1)]))),128)),E.value.length===0?(_(),c(`div`,le,x(b.value),1)):s(`v-if`,!0)])]),l(`div`,{class:`dialog-footer`},[l(`button`,{class:`btn btn-cancel`,onClick:M},`取消`),l(`button`,{class:`btn btn-confirm`,onClick:j},`确定`)])])])):s(`v-if`,!0)]))]))}}),[[`__scopeId`,`data-v-6b39c823`]]);const de={class:`fp-layout`},fe={class:`fp-main`},pe={class:`editor-header`},me={class:`rule-list`},he=[`onClick`],ge={class:`top`},_e={class:`name`},ve={class:`meta`},ye={class:`editor-header`},be={class:`actions`},xe={class:`editor-body`},Se={class:`editor-grid`},Ce={class:`field`},we={class:`field`},Te={key:0,class:`field`},Ee={key:1,class:`field`},De={class:`field`},Oe={class:`field`},ke={class:`field switch`},Ae={class:`expr-wrap`},je={class:`footer-actions`},Me={class:`confirm-dialog`},Ne={class:`confirm-actions`};var Pe=M(f({__name:`page`,setup(e){let f=n,m={bypass:`放行`,block:`拦截`},h=[{label:`全局`,value:`global`},{label:`插件`,value:`plugin`},{label:`指令`,value:`command`}],g=[{label:`放行(bypass)`,value:`bypass`},{label:`拦截(block)`,value:`block`}];a(()=>[{label:`请选择插件实例`,value:``},...O.value.map(e=>({label:e.label,value:e.key}))]);let E=v([]),O=v([]),k=v([]),A=v(``),j=v(!1),M=a(()=>[...E.value].sort((e,t)=>e.priority-t.priority||e.id.localeCompare(t.id))),P=a(()=>M.value.find(e=>e.id===A.value));function F(e){return e.type===`global`?`全局`:e.type===`plugin`?Array.isArray(e.value)?e.value.length>0?`插件 (${e.value.length})`:`未指定插件`:e.value||`未指定插件`:e.type===`command`?Array.isArray(e.value)?e.value.length>0?`指令 (${e.value.length})`:`未指定指令`:e.value||`未指定指令`:`未知`}C(()=>P.value?.target.type,(e,t)=>{e&&t&&e!==t&&P.value&&(P.value.target.value=e===`global`?``:[])});function I(){return{type:`group`,operator:`and`,children:[{type:`compare`,field:`guildId`,operator:`eq`,value:``}]}}async function L(){let[e,n,r]=await Promise.all([f(`filter-pro/list`),f(`filter-pro/targets`),f(`filter-pro/commands`)]);O.value=n,k.value=r,E.value=e,(!A.value||!E.value.some(e=>e.id===A.value))&&(A.value=M.value[0]?.id||``),t.success(`刷新成功`)}async function R(){await f(`filter-pro/create`,{name:`new-rule`,enabled:!0,priority:(M.value.at(-1)?.priority??-1)+1,action:`block`,target:{type:`global`,value:``},condition:I(),response:``}),await L(),A.value=M.value.at(-1)?.id||A.value,t.success(`创建成功`)}function z(e){let t=e.target,n=Number(t.value);(n<1||!Number.isInteger(n))&&(t.value=String(Math.max(1,Math.floor(Math.abs(n))||1)),P.value&&(P.value.priority=Number(t.value)))}async function B(e){e.enabled=!e.enabled,await f(`filter-pro/toggle`,{id:e.id,enabled:e.enabled})}async function V(e){let n;n=e.target.type===`global`?{type:`global`,value:``}:e.target.type===`plugin`?{type:`plugin`,value:e.target.value||[]}:{type:`command`,value:e.target.value||[]},await f(`filter-pro/update`,{id:e.id,name:e.name,enabled:e.enabled,priority:e.priority,action:e.action,target:n,condition:e.condition,response:e.response||``}),await L(),t.success(`保存成功`)}async function H(){P.value&&(j.value=!0)}async function U(){j.value=!1,P.value&&await W(P.value.id)}async function W(e){await f(`filter-pro/delete`,e),await L(),t.success(`删除成功`)}async function G(e,t){let n=M.value,r=n.findIndex(t=>t.id===e);if(r<0)return;let i=r+t;if(i<0||i>=n.length)return;let a=[...n];[a[r],a[i]]=[a[i],a[r]],await f(`filter-pro/reorder`,a.map(e=>e.id)),await L()}return L(),(e,t)=>{let n=b(`k-button`),a=b(`k-card`),f=b(`k-layout`);return _(),c(r,null,[d(f,null,{default:w(()=>[l(`div`,de,[l(`div`,fe,[d(a,{class:`panel list`},{header:w(()=>[l(`div`,pe,[t[14]||=l(`div`,{class:`panel-title`},`规则列表`,-1),d(n,{onClick:R},{default:w(()=>[...t[13]||=[u(`新建规则`,-1)]]),_:1})])]),default:w(()=>[l(`div`,me,[(_(!0),c(r,null,y(M.value,e=>(_(),c(`button`,{key:e.id,class:p([`rule-item`,{active:A.value===e.id}]),onClick:t=>A.value=e.id},[l(`div`,ge,[l(`span`,_e,x(e.name||`未命名规则`),1),l(`span`,{class:p([`badge`,e.action])},x(m[e.action]),3)]),l(`div`,ve,[l(`span`,null,`#`+x(e.priority),1),l(`span`,null,x(F(e.target)),1),l(`span`,null,x(e.enabled?`启用`:`停用`),1)])],10,he))),128))])]),_:1}),P.value?(_(),o(a,{key:0,class:`panel editor`},{header:w(()=>[l(`div`,ye,[t[18]||=l(`div`,{class:`panel-title`},`规则编辑`,-1),l(`div`,be,[d(n,{onClick:t[0]||=e=>P.value&&V(P.value),disabled:!P.value},{default:w(()=>[...t[15]||=[u(`保存`,-1)]]),_:1},8,[`disabled`]),d(n,{onClick:H,disabled:!P.value},{default:w(()=>[...t[16]||=[u(`删除`,-1)]]),_:1},8,[`disabled`]),d(n,{onClick:L},{default:w(()=>[...t[17]||=[u(`刷新`,-1)]]),_:1})])])]),default:w(()=>[l(`div`,xe,[l(`div`,Se,[l(`label`,Ce,[t[19]||=l(`span`,null,`规则名`,-1),T(l(`input`,{class:`input`,"onUpdate:modelValue":t[1]||=e=>P.value.name=e,placeholder:`输入规则名`},null,512),[[S,P.value.name]])]),l(`label`,we,[t[20]||=l(`span`,null,`目标`,-1),d(N,{modelValue:P.value.target.type,"onUpdate:modelValue":t[2]||=e=>P.value.target.type=e,options:h},null,8,[`modelValue`])]),s(` 插件多选 `),P.value.target.type===`plugin`?(_(),c(`label`,Te,[t[21]||=l(`span`,null,`插件实例`,-1),d(ue,{mode:`plugin`,"model-value":Array.isArray(P.value.target.value)?P.value.target.value:P.value.target.value?[P.value.target.value]:[],options:O.value,"onUpdate:modelValue":t[3]||=e=>P.value.target.value=e},null,8,[`model-value`,`options`])])):s(`v-if`,!0),s(` 指令多选 `),P.value.target.type===`command`?(_(),c(`label`,Ee,[t[22]||=l(`span`,null,`作用指令`,-1),d(ue,{mode:`command`,"model-value":Array.isArray(P.value.target.value)?P.value.target.value:P.value.target.value?[P.value.target.value]:[],options:k.value.map(e=>({key:e.name,name:e.name,ident:``,label:e.label})),"onUpdate:modelValue":t[4]||=e=>P.value.target.value=e},null,8,[`model-value`,`options`])])):s(`v-if`,!0),l(`label`,De,[t[23]||=l(`span`,null,`动作`,-1),d(N,{modelValue:P.value.action,"onUpdate:modelValue":t[5]||=e=>P.value.action=e,options:g},null,8,[`modelValue`])]),l(`label`,Oe,[t[24]||=l(`span`,null,`优先级`,-1),T(l(`input`,{class:`input`,type:`number`,min:`1`,step:`1`,"onUpdate:modelValue":t[6]||=e=>P.value.priority=e,onInput:z},null,544),[[S,P.value.priority,void 0,{number:!0}]])]),l(`label`,ke,[t[26]||=l(`span`,null,`启用状态`,-1),l(`div`,{class:p([`toggle-switch`,{active:P.value.enabled}]),onClick:t[7]||=e=>B(P.value)},[...t[25]||=[l(`div`,{class:`toggle-thumb`},null,-1)]],2)])]),l(`div`,Ae,[t[27]||=l(`div`,{class:`panel-title small`},`条件表达式`,-1),d(K,{modelValue:P.value.condition,"onUpdate:modelValue":t[8]||=e=>P.value.condition=e},null,8,[`modelValue`])]),l(`div`,je,[d(n,{onClick:t[9]||=e=>G(P.value.id,-1)},{default:w(()=>[...t[28]||=[u(`上移`,-1)]]),_:1}),d(n,{onClick:t[10]||=e=>G(P.value.id,1)},{default:w(()=>[...t[29]||=[u(`下移`,-1)]]),_:1})])])]),_:1})):s(`v-if`,!0)])])]),_:1}),s(` 删除确认弹窗 `),(_(),o(i,{to:`body`},[j.value?(_(),c(`div`,{key:0,class:`confirm-overlay`,onClick:t[12]||=D(e=>j.value=!1,[`self`])},[l(`div`,Me,[t[31]||=l(`div`,{class:`confirm-title`},`删除规则`,-1),t[32]||=l(`div`,{class:`confirm-body`},`确定要删除这条规则吗?此操作不可撤销。`,-1),l(`div`,Ne,[d(n,{onClick:t[11]||=e=>j.value=!1},{default:w(()=>[...t[30]||=[u(`取消`,-1)]]),_:1}),l(`button`,{class:`confirm-danger-btn`,onClick:U},`确认删除`)])])])):s(`v-if`,!0)]))],64)}}}),[[`__scopeId`,`data-v-0e916acc`]]);const Fe={},Ie={class:`k-icon`,viewBox:`0 0 512 512`,xmlns:`http://www.w3.org/2000/svg`};function Le(e,t){return _(),c(`svg`,Ie,[s(` 漏斗主体 `),t[0]||=l(`path`,{fill:`none`,stroke:`currentColor`,"stroke-width":`32`,"stroke-linejoin":`round`,d:`M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z`},null,-1)])}var Re=M(Fe,[[`render`,Le]]),ze=t=>{e.register(`activity:filter-pro`,Re),t.page({name:`规则集`,path:`/filter-pro`,icon:`activity:filter-pro`,order:320,component:Pe})};export{ze as default};
1
+ import{send as ue,message as te,icons as re}from"@koishijs/client";import{defineComponent as ee,ref as w,computed as F,watch as Z,onMounted as de,onBeforeUnmount as ce,createElementBlock as m,openBlock as u,Fragment as z,createElementVNode as t,createBlock as j,normalizeClass as H,toDisplayString as L,Teleport as ae,createCommentVNode as M,normalizeStyle as ve,renderList as le,withDirectives as G,withModifiers as Y,withKeys as se,vModelText as W,resolveComponent as ne,createVNode as x,withCtx as T,createTextVNode as P}from"vue";const pe=["disabled"],fe={class:"label"},me=["onClick"],ge=ee({__name:"fp-select",props:{modelValue:{},options:{},placeholder:{},disabled:{type:Boolean}},emits:["update:modelValue"],setup(y,{emit:$}){const g=y,E=$,k=w(null),p=w(false),d=w({left:0,top:0,width:0}),B=F(()=>{var i;return((i=g.options.find(c=>c.value===g.modelValue))==null?void 0:i.label)||""});function D(){g.disabled||(p.value=!p.value,p.value&&n())}function S(i){E("update:modelValue",i),p.value=false}function N(i){const c=i.target;!k.value||!c||k.value.contains(c)||(p.value=false)}function n(){if(!k.value)return;const i=k.value.getBoundingClientRect(),c=window.innerHeight,A=240,O=6,q=c-i.bottom-O,b=i.top-O,f=q<180&&b>q,r=Math.min(A,f?b:q);d.value={left:i.left,width:i.width,top:f?Math.max(8,i.top-Math.max(120,r)-O):i.bottom+O}}function V(){p.value&&n()}return Z(p,i=>{i&&n()}),de(()=>{document.addEventListener("click",N),window.addEventListener("resize",V),window.addEventListener("scroll",V,true)}),ce(()=>{document.removeEventListener("click",N),window.removeEventListener("resize",V),window.removeEventListener("scroll",V,true)}),(i,c)=>(u(),m(z,null,[t("div",{class:"fp-select",ref_key:"root",ref:k},[t("button",{type:"button",class:H(["trigger",{disabled:y.disabled}]),onClick:D,disabled:y.disabled},[t("span",fe,L(B.value||y.placeholder),1),c[0]||(c[0]=t("span",{class:"arrow"},"▾",-1))],10,pe)],512),(u(),j(ae,{to:"body"},[p.value?(u(),m("div",{key:0,class:"menu",style:ve({left:`${d.value.left}px`,top:`${d.value.top}px`,width:`${d.value.width}px`})},[(u(true),m(z,null,le(y.options,A=>(u(),m("button",{key:A.value,type:"button",class:H(["item",{active:A.value===y.modelValue}]),onClick:O=>S(A.value)},L(A.label),11,me))),128))],4)):M("",true)]))],64))}}),Q=(y,$)=>{const g=y.__vccOpts||y;for(const[E,k]of $)g[E]=k;return g},oe=Q(ge,[["__scopeId","data-v-689c822e"]]),be={class:"chip-text"},ye=["onClick"],ke=["placeholder","onKeydown"],he=ee({name:"TagInput",__name:"tag-input",props:{modelValue:{},placeholder:{}},emits:["update:modelValue"],setup(y,{emit:$}){const g=y,E=$,k=w(null),p=w(""),d=w(false);function B(){var i;(i=k.value)==null||i.focus()}function D(){const i=p.value.trim();i&&(g.modelValue.includes(i)||E("update:modelValue",[...g.modelValue,i]),p.value="")}function S(i){const c=[...g.modelValue];c.splice(i,1),E("update:modelValue",c)}function N(){E("update:modelValue",[]),p.value=""}function n(){p.value===""&&g.modelValue.length>0&&S(g.modelValue.length-1)}function V(){const i=p.value.trim();i&&!g.modelValue.includes(i)&&E("update:modelValue",[...g.modelValue,i]),p.value="",d.value=false}return(i,c)=>(u(),m("div",{class:H(["tag-input-wrap",{"is-focused":d.value}]),onClick:B},[(u(true),m(z,null,le(y.modelValue,(A,O)=>(u(),m("span",{key:O,class:"tag-chip"},[t("span",be,L(A),1),t("button",{class:"chip-del",onClick:Y(q=>S(O),["stop"]),tabindex:"-1",title:"移除"},"×",8,ye)]))),128)),G(t("input",{ref_key:"inputEl",ref:k,class:"tag-text-input","onUpdate:modelValue":c[0]||(c[0]=A=>p.value=A),placeholder:y.modelValue.length===0?y.placeholder??"":"",onKeydown:[se(Y(D,["prevent"]),["enter"]),se(n,["backspace"])],onFocus:c[1]||(c[1]=A=>d.value=true),onBlur:V},null,40,ke),[[W,p.value]]),y.modelValue.length>0?(u(),m("button",{key:0,class:"tag-clear-btn",onClick:Y(N,["stop"]),tabindex:"-1",title:"清空"},"×")):M("",true)],2))}}),_e=Q(he,[["__scopeId","data-v-4638740c"]]),$e={class:"cf-editor"},Ve={class:"rows-section"},Ce={key:0,class:"conn-and-wrap"},xe={class:"cf-row"},Ae=["onUpdate:modelValue"],Ie={key:1,class:"bool-toggle"},Te=["checked","onChange"],De={class:"bool-label"},Se=["onUpdate:modelValue","onInput","placeholder"],Oe={class:"row-btns"},Ue=["disabled","onClick"],Ee={key:0,class:"add-section"},Ne={class:"preview-section"},we={class:"preview-code"},Be=ee({name:"ExprEditor",__name:"expr-editor",props:{modelValue:{}},emits:["update:modelValue"],setup(y,{emit:$}){let g=0;const E=()=>String(++g),k=[{value:"guildId",label:"群组 ID(guildId)"},{value:"channelId",label:"频道 ID(channelId)"},{value:"userId",label:"用户 ID(userId)"},{value:"platform",label:"平台(platform)"},{value:"content",label:"消息内容(content)"},{value:"isDirect",label:"私聊(isDirect)"},{value:"type",label:"消息类型(type)"}],p=[...k,{value:"__custom__",label:"自定义字段..."}],d=[{value:"eq",label:"等于"},{value:"ne",label:"不等于"},{value:"in",label:"等于以下各项"},{value:"nin",label:"不等于以下各项"},{value:"includes",label:"包含以下各项"},{value:"notincludes",label:"不包含以下各项"},{value:"regex",label:"正则匹配"},{value:"gt",label:"大于"},{value:"gte",label:"大于等于"},{value:"lt",label:"小于"},{value:"lte",label:"小于等于"},{value:"exists",label:"存在"}],B=[{value:"eq",label:"等于"},{value:"ne",label:"不等于"},{value:"exists",label:"存在"}],D={eq:"eq",ne:"ne",in:"in",nin:"nin",includes:"contains",notincludes:"not-contains",regex:"matches",gt:"gt",gte:"gte",lt:"lt",lte:"lte",exists:"exists"},S=y,N=$,n=w(A(S.modelValue));let V=JSON.stringify(S.modelValue);Z(()=>S.modelValue,e=>{const s=JSON.stringify(e);s!==V&&(V=s,n.value=A(e))},{deep:true});function i(e,s="guildId"){const v=s==="isDirect";return{id:E(),field:s,customField:"",operator:"eq",valueText:v?"false":"",value:v?false:"",connector:e}}function c(e,s){const v=k.some(K=>K.value===e.field),o=v?e.field:"__custom__",h=I(e.operator),_=o==="isDirect"?false:h?[]:"";let U=e.value??_;return h&&(typeof U=="string"?U=U?U.split(/[,,]/).map(K=>K.trim()).filter(Boolean):[]:Array.isArray(U)||(U=[])),{id:E(),field:o,customField:v?"":e.field,operator:e.operator,valueText:Array.isArray(U)||U==null?"":String(U),value:U,connector:s}}function A(e){if(!e)return[i(null)];if(e.type==="compare")return[c(e,null)];if(e.type==="group"){if(e.children.every(s=>s.type==="compare"))return e.children.map((s,v)=>c(s,v===0?null:e.operator));if(e.operator==="or"){const s=[];let v=true;for(const o of e.children)o.type==="compare"?(s.push(c(o,v?null:"or")),v=false):o.type==="group"&&o.operator==="and"&&o.children.forEach((h,_)=>{h.type==="compare"&&(s.push(c(h,v?null:_===0?"or":"and")),v=false)});if(s.length>0)return s}}return[i(null)]}function O(e){return{type:"compare",field:e.field==="__custom__"?(e.customField||"").trim()||"guildId":e.field,operator:e.operator,value:e.operator==="exists"?void 0:e.value}}function q(e){if(e.length===0)return{type:"compare",field:"guildId",operator:"eq",value:""};if(e.length===1)return O(e[0]);const s=[];let v=[e[0]];for(let h=1;h<e.length;h++)e[h].connector==="or"?(s.push(v),v=[e[h]]):v.push(e[h]);s.push(v);const o=s.map(h=>h.length===1?O(h[0]):{type:"group",operator:"and",children:h.map(O)});return o.length===1?o[0]:{type:"group",operator:"or",children:o}}function b(e){if(e.type==="compare"){const s=D[e.operator]||e.operator;let v;return e.value===void 0?v="":Array.isArray(e.value)?v=`{${e.value.map(o=>JSON.stringify(o)).join(" ")}}`:v=JSON.stringify(e.value),`(${e.field} ${s} ${v})`}if(e.type==="group"){const s=e.operator==="and"?" AND ":" OR ";return e.children.map(b).join(s)}return e.type==="not"?`NOT (${b(e.child)})`:""}const f=F(()=>b(q(n.value)));function r(){const e=q(n.value);V=JSON.stringify(e),N("update:modelValue",e)}function J(e){n.value.push(i("and")),r()}function X(e,s){n.value.splice(e+1,0,i(s)),r()}function a(e){n.value.length<=1||(n.value.splice(e,1),e===0&&(n.value[0].connector=null),r())}function l(e){e<=0||(n.value[e].connector=n.value[e].connector==="or"?"and":"or",r())}function C(e){const s=e.trim();if(!s)return"";if(s==="true")return true;if(s==="false")return false;if(s==="null")return null;const v=Number(s);return Number.isFinite(v)?v:e}function I(e){return["in","nin","includes","notincludes"].includes(e)}function R(e){return I(e)?"输入后按 Enter 添加":"比较值"}return(e,s)=>{const v=ne("k-button");return u(),m("div",$e,[t("div",Ve,[(u(true),m(z,null,le(n.value,(o,h)=>(u(),m(z,{key:o.id},[h>0?(u(),m("div",{key:0,class:H(["connector-sep","conn-"+o.connector])},[o.connector==="and"?(u(),m("div",Ce,[s[2]||(s[2]=t("div",{class:"conn-vline"},null,-1)),x(v,{title:"点击切换为或(OR)",onClick:_=>l(h)},{default:T(()=>[...s[1]||(s[1]=[P("且(AND)",-1)])]),_:1},8,["onClick"]),s[3]||(s[3]=t("div",{class:"conn-vline"},null,-1))])):(u(),j(v,{key:1,title:"点击切换为且(AND)",onClick:_=>l(h)},{default:T(()=>[...s[4]||(s[4]=[P("或(OR)",-1)])]),_:1},8,["onClick"]))],2)):M("",true),t("div",xe,[x(oe,{"model-value":o.field,options:p,class:"sel-field","onUpdate:modelValue":_=>{const U=o.field==="isDirect";o.field=_,_==="isDirect"?(o.value=false,o.valueText="false",["eq","ne","exists"].includes(o.operator)||(o.operator="eq")):U&&(o.value=I(o.operator)?[]:"",o.valueText=""),r()}},null,8,["model-value","onUpdate:modelValue"]),o.field==="__custom__"?G((u(),m("input",{key:0,class:"input custom-input","onUpdate:modelValue":_=>o.customField=_,onInput:r,placeholder:"字段路径,如 author.name"},null,40,Ae)),[[W,o.customField]]):M("",true),x(oe,{"model-value":o.operator,options:o.field==="isDirect"?B:d,class:"sel-op","onUpdate:modelValue":_=>{const U=I(o.operator),K=I(_);o.operator=_,K&&!U?(o.value=[],o.valueText=""):!K&&U&&(o.value="",o.valueText=""),r()}},null,8,["model-value","options","onUpdate:modelValue"]),o.field==="isDirect"&&o.operator!=="exists"?(u(),m("label",Ie,[t("input",{type:"checkbox",checked:o.value===true,onChange:_=>{o.value=_.target.checked,o.valueText=String(o.value),r()}},null,40,Te),t("span",De,L(o.value===true?"是(true)":"否(false)"),1)])):o.field!=="isDirect"&&o.operator!=="exists"&&I(o.operator)?(u(),j(_e,{key:2,"model-value":Array.isArray(o.value)?o.value:[],placeholder:R(o.operator),"onUpdate:modelValue":_=>{o.value=_,r()}},null,8,["model-value","placeholder","onUpdate:modelValue"])):o.field!=="isDirect"&&o.operator!=="exists"?G((u(),m("input",{key:3,class:"input val-input","onUpdate:modelValue":_=>o.valueText=_,onInput:()=>{o.value=C(o.valueText),r()},placeholder:R(o.operator)},null,40,Se)),[[W,o.valueText]]):M("",true),t("div",Oe,[x(v,{onClick:_=>X(h,"and")},{default:T(()=>[...s[5]||(s[5]=[P("且(AND)",-1)])]),_:1},8,["onClick"]),h===n.value.length-1?(u(),j(v,{key:0,onClick:_=>X(h,"or")},{default:T(()=>[...s[6]||(s[6]=[P("或(OR)",-1)])]),_:1},8,["onClick"])):M("",true)]),t("button",{class:"del-btn",disabled:n.value.length<=1,onClick:_=>a(h),title:"删除此条件"}," ✕ ",8,Ue)])],64))),128))]),n.value.length===0?(u(),m("div",Ee,[x(v,{onClick:s[0]||(s[0]=o=>J())},{default:T(()=>[...s[7]||(s[7]=[P("+ 添加条件",-1)])]),_:1})])):M("",true),t("div",Ne,[s[8]||(s[8]=t("div",{class:"preview-title"},"表达式预览",-1)),t("code",we,L(f.value||"(空)"),1)])])}}}),Le=Q(Be,[["__scopeId","data-v-8216ad16"]]),Me={class:"plugin-selector"},Fe={class:"label"},Pe={class:"dialog-header"},qe={class:"dialog-body"},Re={class:"toolbar"},Je={class:"checkbox-item select-all"},ze=["checked"],je=["placeholder"],He={class:"plugin-list"},Ke=["value","checked","onChange"],Ge={key:0,class:"empty-state"},We=ee({__name:"plugin-selector",props:{modelValue:{},options:{},mode:{}},emits:["update:modelValue"],setup(y,{emit:$}){const g=y,E=$,k=w(false),p=w(""),d=w([...g.modelValue]),B=F(()=>g.mode==="command"),D=F(()=>B.value?"选择指令":"选择插件实例"),S=F(()=>B.value?"搜索指令...":"搜索插件..."),N=F(()=>B.value?"没有找到匹配的指令":"没有找到匹配的插件"),n=F(()=>{const b=B.value?"指令":"插件",f=B.value?"请选择指令":"请选择插件实例";if(d.value.length===0)return f;if(d.value.length===1){const r=g.options.find(J=>J.key===d.value[0]);return(r==null?void 0:r.label)||`已选择 1 个${b}`}return`已选择 ${d.value.length} 个${b}`}),V=F(()=>{if(!p.value)return g.options;const b=p.value.toLowerCase();return g.options.filter(f=>f.label.toLowerCase().includes(b))}),i=F(()=>V.value.length>0&&V.value.every(b=>d.value.includes(b.key)));function c(b){const f=d.value.indexOf(b);f>-1?d.value.splice(f,1):d.value.push(b)}function A(b){if(b.target.checked)for(const r of V.value)d.value.includes(r.key)||d.value.push(r.key);else d.value=d.value.filter(r=>!V.value.some(J=>J.key===r))}function O(){E("update:modelValue",[...d.value]),k.value=false}function q(){d.value=[...g.modelValue],k.value=false}return Z(()=>g.modelValue,b=>{d.value=[...b]}),Z(k,b=>{b&&(p.value="")}),(b,f)=>(u(),m("div",Me,[t("button",{type:"button",class:"trigger-btn",onClick:f[0]||(f[0]=r=>k.value=true)},[t("span",Fe,L(n.value),1),f[5]||(f[5]=t("span",{class:"arrow"},"▾",-1))]),(u(),j(ae,{to:"body"},[k.value?(u(),m("div",{key:0,class:"dialog-overlay",onClick:f[4]||(f[4]=r=>k.value=false)},[t("div",{class:"dialog-content",onClick:f[3]||(f[3]=Y(()=>{},["stop"]))},[t("div",Pe,[t("h3",null,L(D.value),1),t("button",{class:"close-btn",onClick:f[1]||(f[1]=r=>k.value=false)},"✕")]),t("div",qe,[t("div",Re,[t("label",Je,[t("input",{type:"checkbox",checked:i.value,onChange:A},null,40,ze),f[6]||(f[6]=t("span",null,"全选",-1))]),G(t("input",{"onUpdate:modelValue":f[2]||(f[2]=r=>p.value=r),class:"search-input",placeholder:S.value},null,8,je),[[W,p.value]])]),t("div",He,[(u(true),m(z,null,le(V.value,r=>(u(),m("label",{key:r.key,class:"checkbox-item"},[t("input",{type:"checkbox",value:r.key,checked:d.value.includes(r.key),onChange:J=>c(r.key)},null,40,Ke),t("span",null,L(r.label),1)]))),128)),V.value.length===0?(u(),m("div",Ge,L(N.value),1)):M("",true)])]),t("div",{class:"dialog-footer"},[t("button",{class:"btn btn-cancel",onClick:q},"取消"),t("button",{class:"btn btn-confirm",onClick:O},"确定")])])])):M("",true)]))]))}}),ie=Q(We,[["__scopeId","data-v-f4ad12a5"]]),Qe={class:"fp-layout"},Xe={class:"fp-main"},Ye={class:"editor-header"},Ze={class:"rule-list"},el=["onClick"],ll={class:"top"},tl={class:"name"},nl={class:"meta"},ol={class:"editor-header"},al={class:"actions"},sl={class:"editor-body"},il={class:"editor-grid"},ul={class:"field"},rl={class:"field"},dl={key:0,class:"field"},cl={key:1,class:"field"},vl={class:"field"},pl={class:"field"},fl={class:"field switch"},ml={class:"expr-wrap"},gl={class:"footer-actions"},bl={class:"confirm-dialog"},yl={class:"confirm-actions"},kl=ee({__name:"page",setup(y){const $=ue,g={bypass:"放行",block:"拦截"},E=[{label:"全局",value:"global"},{label:"插件",value:"plugin"},{label:"指令",value:"command"}],k=[{label:"放行(bypass)",value:"bypass"},{label:"拦截(block)",value:"block"}];F(()=>[{label:"请选择插件实例",value:""},...d.value.map(a=>({label:a.label,value:a.key}))]);const p=w([]),d=w([]),B=w([]),D=w(""),S=w(false),N=F(()=>[...p.value].sort((a,l)=>a.priority-l.priority||a.id.localeCompare(l.id))),n=F(()=>N.value.find(a=>a.id===D.value));function V(a){return a.type==="global"?"全局":a.type==="plugin"?Array.isArray(a.value)?a.value.length>0?`插件 (${a.value.length})`:"未指定插件":a.value||"未指定插件":a.type==="command"?Array.isArray(a.value)?a.value.length>0?`指令 (${a.value.length})`:"未指定指令":a.value||"未指定指令":"未知"}Z(()=>{var a;return(a=n.value)==null?void 0:a.target.type},(a,l)=>{a&&l&&a!==l&&n.value&&(n.value.target.value=a==="global"?"":[])});function i(){return{type:"group",operator:"and",children:[{type:"compare",field:"guildId",operator:"eq",value:""}]}}async function c(){var I;const[a,l,C]=await Promise.all([$("filter-pro/list"),$("filter-pro/targets"),$("filter-pro/commands")]);d.value=l,B.value=C,p.value=a,(!D.value||!p.value.some(R=>R.id===D.value))&&(D.value=((I=N.value[0])==null?void 0:I.id)||""),te.success("刷新成功")}async function A(){var a,l;await $("filter-pro/create",{name:"new-rule",enabled:true,priority:(((a=N.value.at(-1))==null?void 0:a.priority)??-1)+1,action:"block",target:{type:"global",value:""},condition:i(),response:""}),await c(),D.value=((l=N.value.at(-1))==null?void 0:l.id)||D.value,te.success("创建成功")}function O(a){const l=a.target,C=Number(l.value);(C<1||!Number.isInteger(C))&&(l.value=String(Math.max(1,Math.floor(Math.abs(C))||1)),n.value&&(n.value.priority=Number(l.value)))}async function q(a){a.enabled=!a.enabled,await $("filter-pro/toggle",{id:a.id,enabled:a.enabled})}async function b(a){let l;a.target.type==="global"?l={type:"global",value:""}:a.target.type==="plugin"?l={type:"plugin",value:a.target.value||[]}:l={type:"command",value:a.target.value||[]},await $("filter-pro/update",{id:a.id,name:a.name,enabled:a.enabled,priority:a.priority,action:a.action,target:l,condition:a.condition,response:a.response||""}),await c(),te.success("保存成功")}async function f(){n.value&&(S.value=true)}async function r(){S.value=false,n.value&&await J(n.value.id)}async function J(a){await $("filter-pro/delete",a),await c(),te.success("删除成功")}async function X(a,l){const C=N.value,I=C.findIndex(s=>s.id===a);if(I<0)return;const R=I+l;if(R<0||R>=C.length)return;const e=[...C];[e[I],e[R]]=[e[R],e[I]],await $("filter-pro/reorder",e.map(s=>s.id)),await c()}return c(),(a,l)=>{const C=ne("k-button"),I=ne("k-card"),R=ne("k-layout");return u(),m(z,null,[x(R,null,{default:T(()=>[t("div",Qe,[t("div",Xe,[x(I,{class:"panel list"},{header:T(()=>[t("div",Ye,[l[14]||(l[14]=t("div",{class:"panel-title"},"规则列表",-1)),x(C,{onClick:A},{default:T(()=>[...l[13]||(l[13]=[P("新建规则",-1)])]),_:1})])]),default:T(()=>[t("div",Ze,[(u(true),m(z,null,le(N.value,e=>(u(),m("button",{key:e.id,class:H(["rule-item",{active:D.value===e.id}]),onClick:s=>D.value=e.id},[t("div",ll,[t("span",tl,L(e.name||"未命名规则"),1),t("span",{class:H(["badge",e.action])},L(g[e.action]),3)]),t("div",nl,[t("span",null,"#"+L(e.priority),1),t("span",null,L(V(e.target)),1),t("span",null,L(e.enabled?"启用":"停用"),1)])],10,el))),128))])]),_:1}),n.value?(u(),j(I,{key:0,class:"panel editor"},{header:T(()=>[t("div",ol,[l[18]||(l[18]=t("div",{class:"panel-title"},"规则编辑",-1)),t("div",al,[x(C,{onClick:l[0]||(l[0]=e=>n.value&&b(n.value)),disabled:!n.value},{default:T(()=>[...l[15]||(l[15]=[P("保存",-1)])]),_:1},8,["disabled"]),x(C,{onClick:f,disabled:!n.value},{default:T(()=>[...l[16]||(l[16]=[P("删除",-1)])]),_:1},8,["disabled"]),x(C,{onClick:c},{default:T(()=>[...l[17]||(l[17]=[P("刷新",-1)])]),_:1})])])]),default:T(()=>[t("div",sl,[t("div",il,[t("label",ul,[l[19]||(l[19]=t("span",null,"规则名",-1)),G(t("input",{class:"input","onUpdate:modelValue":l[1]||(l[1]=e=>n.value.name=e),placeholder:"输入规则名"},null,512),[[W,n.value.name]])]),t("label",rl,[l[20]||(l[20]=t("span",null,"目标",-1)),x(oe,{modelValue:n.value.target.type,"onUpdate:modelValue":l[2]||(l[2]=e=>n.value.target.type=e),options:E},null,8,["modelValue"])]),n.value.target.type==="plugin"?(u(),m("label",dl,[l[21]||(l[21]=t("span",null,"插件实例",-1)),x(ie,{mode:"plugin","model-value":Array.isArray(n.value.target.value)?n.value.target.value:n.value.target.value?[n.value.target.value]:[],options:d.value,"onUpdate:modelValue":l[3]||(l[3]=e=>n.value.target.value=e)},null,8,["model-value","options"])])):M("",true),n.value.target.type==="command"?(u(),m("label",cl,[l[22]||(l[22]=t("span",null,"作用指令",-1)),x(ie,{mode:"command","model-value":Array.isArray(n.value.target.value)?n.value.target.value:n.value.target.value?[n.value.target.value]:[],options:B.value.map(e=>({key:e.name,name:e.name,ident:"",label:e.label})),"onUpdate:modelValue":l[4]||(l[4]=e=>n.value.target.value=e)},null,8,["model-value","options"])])):M("",true),t("label",vl,[l[23]||(l[23]=t("span",null,"动作",-1)),x(oe,{modelValue:n.value.action,"onUpdate:modelValue":l[5]||(l[5]=e=>n.value.action=e),options:k},null,8,["modelValue"])]),t("label",pl,[l[24]||(l[24]=t("span",null,"优先级",-1)),G(t("input",{class:"input",type:"number",min:"1",step:"1","onUpdate:modelValue":l[6]||(l[6]=e=>n.value.priority=e),onInput:O},null,544),[[W,n.value.priority,void 0,{number:true}]])]),t("label",fl,[l[26]||(l[26]=t("span",null,"启用状态",-1)),t("div",{class:H(["toggle-switch",{active:n.value.enabled}]),onClick:l[7]||(l[7]=e=>q(n.value))},[...l[25]||(l[25]=[t("div",{class:"toggle-thumb"},null,-1)])],2)])]),t("div",ml,[l[27]||(l[27]=t("div",{class:"panel-title small"},"条件表达式",-1)),x(Le,{modelValue:n.value.condition,"onUpdate:modelValue":l[8]||(l[8]=e=>n.value.condition=e)},null,8,["modelValue"])]),t("div",gl,[x(C,{onClick:l[9]||(l[9]=e=>X(n.value.id,-1))},{default:T(()=>[...l[28]||(l[28]=[P("上移",-1)])]),_:1}),x(C,{onClick:l[10]||(l[10]=e=>X(n.value.id,1))},{default:T(()=>[...l[29]||(l[29]=[P("下移",-1)])]),_:1})])])]),_:1})):M("",true)])])]),_:1}),(u(),j(ae,{to:"body"},[S.value?(u(),m("div",{key:0,class:"confirm-overlay",onClick:l[12]||(l[12]=Y(e=>S.value=false,["self"]))},[t("div",bl,[l[31]||(l[31]=t("div",{class:"confirm-title"},"删除规则",-1)),l[32]||(l[32]=t("div",{class:"confirm-body"},"确定要删除这条规则吗?此操作不可撤销。",-1)),t("div",yl,[x(C,{onClick:l[11]||(l[11]=e=>S.value=false)},{default:T(()=>[...l[30]||(l[30]=[P("取消",-1)])]),_:1}),t("button",{class:"confirm-danger-btn",onClick:r},"确认删除")])])])):M("",true)]))],64)}}}),hl=Q(kl,[["__scopeId","data-v-9422f484"]]),_l={},$l={class:"k-icon",viewBox:"0 0 512 512",xmlns:"http://www.w3.org/2000/svg"};function Vl(y,$){return u(),m("svg",$l,[...$[0]||($[0]=[t("path",{fill:"none",stroke:"currentColor","stroke-width":"32","stroke-linejoin":"round",d:"M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"},null,-1)])])}const Cl=Q(_l,[["render",Vl]]),Il=y=>{re.register("activity:filter-pro",Cl),y.page({name:"规则集",path:"/filter-pro",icon:"activity:filter-pro",authority:4,order:320,component:hl})};export{Il as default};