From 2f276d1807d3d6ba7abcb314159f6917c185a630 Mon Sep 17 00:00:00 2001
From: Your Name <8589561@qq.com>
Date: Tue, 8 Sep 2026 21:41:04 +0800
Subject: [PATCH] Add plugin test plugin 090802 v0.0.1
- first commit
- update logo
---
plugins/test-plugin-090802/.gitignore | 25 ++
plugins/test-plugin-090802/CHANGELOG.md | 5 +
plugins/test-plugin-090802/README.md | 281 ++++++++++++++++++
plugins/test-plugin-090802/index.html | 11 +
plugins/test-plugin-090802/package.json | 20 ++
.../test-plugin-090802/src-ztools/logo.png | Bin 0 -> 46612 bytes
.../test-plugin-090802/src-ztools/plugin.json | 52 ++++
.../src-ztools/preload/package.json | 3 +
.../src-ztools/preload/services.js | 27 ++
plugins/test-plugin-090802/src/App.vue | 25 ++
.../test-plugin-090802/src/Hello/index.vue | 25 ++
plugins/test-plugin-090802/src/Read/index.vue | 105 +++++++
.../test-plugin-090802/src/Write/index.vue | 40 +++
plugins/test-plugin-090802/src/env.d.ts | 23 ++
plugins/test-plugin-090802/src/main.css | 63 ++++
plugins/test-plugin-090802/src/main.ts | 5 +
plugins/test-plugin-090802/tsconfig.json | 19 ++
plugins/test-plugin-090802/vite.config.js | 12 +
18 files changed, 741 insertions(+)
create mode 100644 plugins/test-plugin-090802/.gitignore
create mode 100644 plugins/test-plugin-090802/CHANGELOG.md
create mode 100644 plugins/test-plugin-090802/README.md
create mode 100644 plugins/test-plugin-090802/index.html
create mode 100644 plugins/test-plugin-090802/package.json
create mode 100644 plugins/test-plugin-090802/src-ztools/logo.png
create mode 100644 plugins/test-plugin-090802/src-ztools/plugin.json
create mode 100644 plugins/test-plugin-090802/src-ztools/preload/package.json
create mode 100644 plugins/test-plugin-090802/src-ztools/preload/services.js
create mode 100644 plugins/test-plugin-090802/src/App.vue
create mode 100644 plugins/test-plugin-090802/src/Hello/index.vue
create mode 100644 plugins/test-plugin-090802/src/Read/index.vue
create mode 100644 plugins/test-plugin-090802/src/Write/index.vue
create mode 100644 plugins/test-plugin-090802/src/env.d.ts
create mode 100644 plugins/test-plugin-090802/src/main.css
create mode 100644 plugins/test-plugin-090802/src/main.ts
create mode 100644 plugins/test-plugin-090802/tsconfig.json
create mode 100644 plugins/test-plugin-090802/vite.config.js
diff --git a/plugins/test-plugin-090802/.gitignore b/plugins/test-plugin-090802/.gitignore
new file mode 100644
index 000000000..cb45445de
--- /dev/null
+++ b/plugins/test-plugin-090802/.gitignore
@@ -0,0 +1,25 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+src-ztools/dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/plugins/test-plugin-090802/CHANGELOG.md b/plugins/test-plugin-090802/CHANGELOG.md
new file mode 100644
index 000000000..91d6f895b
--- /dev/null
+++ b/plugins/test-plugin-090802/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Changelog
+
+## 0.0.1 - 2026-09-08
+
+- 初次发布,将插件提交至 ZTools 插件仓库。
diff --git a/plugins/test-plugin-090802/README.md b/plugins/test-plugin-090802/README.md
new file mode 100644
index 000000000..aa31efdac
--- /dev/null
+++ b/plugins/test-plugin-090802/README.md
@@ -0,0 +1,281 @@
+# test-plugin-090802
+
+> A ZTools plugin
+
+这是一个使用 **Vue 3 + Vite + TypeScript** 构建的 ZTools 插件。
+
+## ✨ 功能特性
+
+### 📌 已包含的示例功能
+
+- **Hello** - 基础功能指令示例
+ - 触发指令:`你好` / `hello`
+ - 展示简单的 Vue 组件界面
+
+- **读文件** - 文件读取功能示例
+ - 功能指令:`读文件`
+ - 匹配指令:支持拖拽文件触发
+ - 演示如何使用 Node.js 能力读取文件内容
+
+- **保存为文件** - 文件写入功能示例
+ - 匹配指令:任意文本/图片 → `保存为文件`
+ - 演示如何将剪贴板内容保存为文件
+
+## 📁 项目结构
+
+```
+.
+├── src-ztools/
+│ ├── logo.png # 插件图标
+│ ├── plugin.json # 插件配置文件
+│ └── preload/ # Preload 脚本目录
+│ ├── package.json # Preload 依赖配置
+│ └── services.js # Node.js 能力扩展
+├── src/
+│ ├── main.ts # 入口文件
+│ ├── main.css # 全局样式
+│ ├── App.vue # 根组件
+│ ├── env.d.ts # 类型声明
+│ ├── Hello/ # Hello 功能组件
+│ │ └── index.vue
+│ ├── Read/ # 读文件功能组件
+│ │ └── index.vue
+│ └── Write/ # 写文件功能组件
+│ └── index.vue
+├── index.html # HTML 模板
+├── vite.config.js # Vite 配置
+├── tsconfig.json # TypeScript 配置
+├── package.json # 项目依赖
+└── README.md # 项目文档
+```
+
+## 🚀 快速开始
+
+### 安装依赖
+
+```bash
+npm install
+```
+
+### 开发模式
+
+```bash
+npm run dev
+```
+
+开发服务器将在 `http://localhost:5173` 启动。ZTools 会自动加载开发版本。
+
+### 构建生产版本
+
+```bash
+npm run build
+```
+
+构建产物将输出到 `src-ztools/dist/` 目录,`src-ztools/` 是完整的 ZTools 插件目录。
+
+## 📖 开发指南
+
+### 1. 修改插件配置
+
+编辑 `src-ztools/plugin.json` 文件:
+
+```json
+{
+ "name": "你的插件名称",
+ "description": "插件描述",
+ "author": "作者名称",
+ "version": "1.0.0",
+ "features": [
+ // 添加你的功能配置
+ ]
+}
+```
+
+### 2. 创建新功能
+
+#### 步骤 1: 创建 Vue 组件
+
+在 `src/` 目录下创建新的功能组件:
+
+```vue
+
+
+ {{ title }}
+
+
hrT@><}(Vi>+xc}`oC`- ?A%WRKUN0^S`E
zUoQi+URAZ8Mpk`w6i~V;LtrVTeLOw6m^yU?Nj1>2w;E~UoG!C)Np1Ii!kVUowj8tS
zc!!8vQQGrmRlP}r=BJg&kVaO8zob=%t*)jk8Kf1{|1!7O{7H|hS2Z19-wLc-=!IS<
zYZzsJkZsoZgAk}@YvTw-AXKxaomM_Yz1x2HclFb{Vg7Fh^25&@;x`~RsQuf7ynOk7
zi7C3QYY?spr$P6s%FLj)g$ml*KJfyzc|6r(4}83_@S55Qh`CeG6p
zxn3T};`5StLrgy1c5XUP`U;XYyeJd3x`GuH2l3t7tP^-{5PLezucG%~f%$vyW3{Oo
zxu)Wm>5qB-<6;74rOi))1~c~E{Bj9wCyC`kwD4JAy
zWqIJm`%9uYQEAY>1}9>HA1cH!#*^XKi%
sC#r38B_@xzofCI_u~
zPjOdxiwA?
z@=n^7H@}Uw9UQ!{nioD|W+-d5J6=A*6AsA%rmzLZTu;F@8#)Ela{ LsEu(9R&%f
zA%@v$=>aW(;lv!bNZmF3bHx!2>fCLG{0fPj4FU-Nx8?3m7MlS7%3`Y0seCV-+6d?M
zMA
=00ZofaHG7=pLMCf%jO8wVlSeKT_d<=d-e1R1!Q`UZ|feOw-oP)Wf?wt zy%-ZHcT@mAO~af`?4e{$?!xCi4N&zhA5gG>R%j7Hs+z&C%KjinOe(ASjnpUsY zB63!dUBTKB*du{O_b)m+3*DP&%6f;1q-d_oX6-(GEDx-=IT@`DBF6)Baz2}$X6NMG zD0f}%cKt^IZlglEn~(cMhi*&1a?{bVV2p3fM=wgW7VMeR3BrwhR{!?!v45Kh7xxyL z%DUY|aVkn@4e26M0ZHf1<`y4>2x=HHC0r)GJviC&gad=AsW{}fbcoPe-v=CcA;{a+ zT#+o~(m#97dG9Ilc;UJO(pCofl5?A@(Mz_d4{xmdd$X`%Yw~cNjdJOD5DedNCiKW` zFX iSg!y+M)gok$6kc%eW`rI2OlJgl Y_iY;S|2<3G03MPAmvPcdt!9VL00{Pk5e9{q z9go%bQpvb6O53o dL&$MEoQVlSU8pH!lQO$~_6<6TbF|6) z=FEAJKsWsXC~dSdyrJd2#iA-$z3|p#%KG)od;^*>%>ao~i>0sy_Jt+V8+&_uTbi1z z-P;fRq6q?;3HwHz0O&+xN?)^)<>}m~*AWG2H>)9~g@xPuA>Zhx%thXU7qPv?vXRh0 zrL36XsYswPt}Lc@h_SXsaGJDvBhhLqouW7VIMi7pmzPkg{(v-~=`*zr`|DZ^tv0x2 zy}Aocd#CO`DG`3G;d>xqvKa4a%YWTH#wfp~th2l|clz{-0#Q8A_JF9;GV-xCI5}^- zK$@$;tXY=J%-~%OJM@HR1+XXtx-IBBwTs2`+Dr|C2VKZQ@qVaXKc%m2qa-<3Gh5zV7ixf5gFYgMy6zWU=gJHbi7q zI50J_Ydsm%M4@-S`>8r5XwxS#-AZJMo2WClfUiZogdOqLsBYTu>Y(PCR-{sK0eI&B z!9qM7nEu^Y$G`6N6ba f0)Z#`y+ z7M-D?mg(BP*x=;gbHG7BMH;1;%l%^?32hby #Fyi{es2PWn_s{4@~&*& zr2*D1nFF#E=9wrEJUK1@#nTY%3`~`N{F-@J&nQTG2RP$Lfy2XeN4S8~T;ST+OC_QU z%w;7fSPNp{K sL zE*NG&f;s9~O(`0GHM5-WK)yXTph!Fm`gz!uB%*7iUNl8Y#9rF;1#yj<-SLXft>$;F zvvcgNu7OLHANd~I>*$0}_~b!9FY9j>U-c|WmcobLkS|m7G5vWnD>+Gz{q&WVTr)$d zV^a `t2otSP*RbhYeBD6n56ocu7d%3Tc In!ElSHZ>^oV$mSV3ulY89b>m?2fppf!4JMtrP$h|+QYxCN?od_qfQG<>2^qq zIyWbG3rNC+>l@# NOqb%Sw~bNlJ?C2_6uL;G1#m&ZAr0#d1sGF;Hlyxw-?Vg5 zhiZxp@enZG<>c6DT2=lleI`tAI+`c2qw9R$=#Xh2ApJ8UKH~3ACK-pyI+|nL-4Em> zyHM}`XE!X`)O3#i6y`Cg;phCKh2J!w< !;GX{zQtkK?E=A Qpqf3;{p%AD23r66x~TxW7d=m mlh-CbhZ=wwvNkaHN4a{> z-jgMxW@?#rXbzfX=E8q3T_a>$+md@M8C>de<2-ge@q5X(4+FTOU5N}bFA`;ufHUNr zx$@^-yeOBTnGisr-i{2GoVF6PjW07Ff6-cgJ&TS&9P&u4ld4NbxecYk3wx;0Ki NBCQZ8B(Cf%J?5AEY@~3o?XS}?QbnbY%ZhzhH8*E>k(E?Hv zJLGOf(Nh;loHo=i2P^IiA2z}Ls%{H-TrzyUSkB-{=oJr)YNWdSd5N~tS-ck@uBT(Q zwBxDaG+8!ls-trVoOmfTNwtv6&3Wq2(a}?b+xu$+iz(DcHe0MRtc$7#-GnTICVj(4 z+2juIS&MZ;Pk$drt?wp%^Sa>t?_fy9-&7XQ<7&@e&S`WUFR(@negE9E;K~S=oj^B+ zne!MA=lA~2cu#kzB%8c<0Kcg6wB&QPCZEdNrhHQV>Ni8I8n%zW2>^@8mJG%+>I%%r z_|8ge%WN&NI6#_rtJobTQs9WY{d=>lRKx#me9{Sv??Ua?c1(Sn_IMZcS^xp8zG!wU zoZ6;;d|G2E0)L+3)@n$Az>hA%ne_`hq|W6CNa#wD4eIM%b2@%qA?ehuTQAL~+$*y~ zGA*6`JYH?0m1^PTGW)e?6DYO+vRa@km)J1Lo7Wb%PhDEsb}-eNGE{a7ljt*X(;qq5 zTQ#~$4Ie1`w@}L4^!HA-6jHhSCvjvqwyWc)l-p~N7jQqOHZ^#vaDk-l_&%PbpZ^Vx zqZ8n7vl@$_gbfQ}k7?V`mveV}!Ksi*V@dK%{>e97XVC7b6dm Qr^Bs-Nl|>J;0i z%oe6dpu6b~e dNGhSd#cy&qPq zYdADs>NWj% `86Np( z2haUQH*A=aZhP@pTJ${8YN$-d)|H)fR!>`k1<>zwI>CH&xXkm?5gzFR?iAtB`0&q0 zgYMez7J0Ti{o&<_>2>QC 2pa0iBw1gP7cnLvF17grCKq3Oc}j$AC=Y z5^K@U(o(riyVPzUc2Lay^ucpfdy8|1%X@t~B!XR`vCQ0zT93Pbhw1UzsP #(lov3DAOieG%IVrdkp@UOg^|#vTK*`)@e8&nI4vEq&uGd}Jo#D0U~- zVkT?S1h&C`+&W-_+R^Bgm=bHb(#SZv;PS`TzYoFFtheDPEfh)a^ItfEqG`Q68EyZ| zU+>bL|KQZjl-Vlz)7z8GNv`&l;CUtGobo^idGoEg*I!DCl5a#xQe47#*?s*Y!zp51 zOz7#Kam|J{{`Of%F?^Hv%3#<(TSf(Ark|zht=7dpZ^9*3x8oA7as6F{tKvYJI!x`orIY5x2E&nocCS93i!ixCs+-=Q<}O)&4zC%@j* zTB|XNIQEOP A`(UW28uH!`ATQ0?( z!Eb0&BMKT!$fxO53>CIV(eX7+|7;MRw;nDY|1dDt(KWORCWzBrdskI-VArlHp|DZt zzyJ6+4@cM*U`gJ)+%S(MI&Q?Dv#9$#lin&ZPe?gI^b`=Jr0n1r@gH+t(k|Uk_O57C z* EJ{4iSZM$agnZ? znVlrp?n;0;?KQh|2Uar+8-V98@}+-GeeC(vh4Hz-*o&nqB=M?#Wgq_KS)VbT2;@s< z?a6)LKU^sVw!#%WcdRS)=yHvQOEn-hx c*&a0Qpvk=3R$lYd|CbGdqa#CtBW8e;m53k4i=F8m6HDv6OwDBoSdR< zqn+gJ^fTa2{*|{ruA}pyW3CoF)ha!on1b}G)tZy}b$Db=dtI#FI~ea}9SxnIcF%K7 zR!Z^wBm4Iqn!10v$4j-t%{02^`#&P1_Z%_+5cDfoSuXUt0`gkVjFa?o2Hqd&*13fk zZLMHQ)1VhRh7Yp3s6r)1Y`=0m^=pgl(h1r#@p?$xR$*O;OQh0StW??h^jb?<57-|S zEB#p&_V+^`TWhTJPDrd6IXT~NAY~_Ox+n@K_W5L^p*2}&W4&I1{iyICnY426X*(Eu z_75)G6=g9TEwpHzG}5j+Sauo6%~?6{lLyw;KTBU*-wVyifU`qAhClQF=Gp2Z(_xWgor17 z@#IxLd69W?{@3}P>wLfZ@$#M*_Id+DCRE<4%f<7a)@V$gKJgf?o*yv|4v~vKj(#mh z3=# L2g0_bj@G3%9 zN~ExJ^txP}Hh$9}eA3b+dUkWFA2RWc`r&LV{_@de@Q#QeoMeGSJ2N%iC@>%>7wLn< zPOYzHTwW{A2}s2+yxAEtltqq?zId{pL-}hkkFE7G`ay8?ryJwA_TB7Wy+M6=ZTp#z zDt7d>=3#HTTxb8uRBGUjcm=IE1T~(|*dgrVj=?A0x37DH^K9C`^I%!DZ9h)9YZE*I zmq_;qY~ki<;1C*R75`E4n=2TPAPKsP&lVGOzyXb~NB90?Pf6~5X;xyX*~=0u #X#ffoW~DR)_L0xYGxZ5 zxX7_*vML6iqIp|-dh6kT4)j&(5@#a??|J NQ=?V>udQU}GsA%>T*z&?8@rx$%{R%xN+@^wEnK zp2vk3;pe`KW^tL=KQU#Oom^vZ@w*twog3NNR~*)=E9z pL_w(qfr9uUI!^CEbfmn-8FU)VLBh}jqmkIqMy!!FGk(0vbxHZBvbLBY=3 z6RH3+5~Z#&>HT(CD=DrV+S(9z-s5ZR-xkAnQ#j|59!Y%% zXfFxB+4rgEwA(T3yMY${=
D9<{Uu$cTQaWIc(N6U7A-uzt2t`1&jq=9zBPV1c~0fTbtg{l#3ig%3*Akk972#@ z)h`I}d0W99{BlwUsQ5I;8M0yG@s=>ct;jvcWA>l)Y?{lrGzso@-=(9TWxIW{lEG@v zJ| Rox zAi)@Jn}T|>`nEc8q06NEvkKa}WqRyggnP#(44cpAH|NfzrZyg|*4e*ES1pFQv8F|* zB6fbThhP1TW+-OkXH3zhb<%}|DaI$4FTK845(E#`xP7kzGWVO(RY`Bzo181iO@9DC z&at#mre)%uHhM%es*daTs8iF=#H{Qrk-SYiU{a|Lm@wK*I<`1Yr`(q>3%_i(Vs-#I zP|E_5h i@?* z5EZp+`Y~Sh6F*Dz{on5yh1u_$I=Au4=ZG;q{(L#-JU8=uE|xA;Ain~86`%U$mPjss z*PJL%SCJH!x}Cfo&GI5IT9eJHT_YBBQv7W78(zbCtqfX C*bbK3jCZnJJuhVe zM&Tdj3Vy^Qzu1gQI(UUI3g!t03 Fb3O(r6FN*4C`O-t6}{=!5o;KxG$_`1jC?V{9NX4S0r z%~d_v4w}$t5nfsATUy0!sdrWPB6}xdS=-E`$LH4EwXA}parGCf#N(AdM7i6i@p+G> zDwtq}#^eDxJ@#STjuSB+QV9`TIm?YYtR})G_;E>=D$#gMO%!u2%SA==Ig)o|G;^}@ zQrx$Xm37MXt>s;y^_LDM!!&a>fknqzE+1+|Fj0#N4mUU0J$%CpjEa}pYRs4 !9%zWZyB4N>+O3qh^UZrPWcZ>!W3FJ~Dy$G80u)XVRu&g)C%w%ZG30p7>u zNiH7EK#Zn@7RN>6bocGpnia?DAKsy;C}oZ5A|z&Gj0tvR!~RbhvxnctYrMn!GX%Nu z87-KITycmNcYg5At!g2P?v_hx<2f(6>*0}httV9Oh?&`d=}lxIYNf;7f5q?DnB1rO zvSF#T+aq==`v9#~<-BWe09$6M;bU?IT^2)1lMLDap*w$v&J$@zjZJM32UbS-;Cw41 z^|BvIE#)+`Ji;O2P-a#@T00LMc{{&o<#*1Fp(M2?iKpHSP%ZQPE%P7S8O>@ZZIR<* zWjb(RS}fB6Q+&33TMJW_d8<6>sr^WR)1Ik&14 )J1=^n=CJ1Ir6l9*-5*s{?M}SVMi#v!8iso5PD^N02)b)!83C3D#||HA5qoVujZ` zwT4`1)2Lr{66^O>&LrIM0X7G9@77+xXka35E}?F&3i=}dtcr0Bvq((d9Inf{D1&}x zEixh3*8I%VP>?AE%PqLi%-{pywt79|13v0;X{<{6+rVhH;s4yG7a-?D6rQCB6RE3O zTKajE1YZU4W?Hhw_}8h6 b8_bdn1n%NIpw`hqDF8{$mEEcKLeV1 z^)~}Mz8~bnwiK5e-iKTC3-cR9I+KO5@2(4a{4s854bT#SJ?D)c#NPY29ee9b4Ec z^;F5{Q7jb!r&%UCekUAktu4GgusZ!j`YDS-s)Ij5X-yGNGf&$j{hON_r{-4+v?lAg zvbJfl5@*WU>qkj*Q1l*toh2upCKMJ`Jv>9)b|P=k%j5C*_eYFZt@XQoH~O!OseH#< zT)21UWH( h+g0v@UcZ+VXk>?$35qKfyv;ywLugq9s0`q-5`Dty>fLB}j% zFbfkqHOlDm?9Y9DKGvy$bzS*gWz)`v1{>fBe85X@9U8OIChzG;Ql7e>#62EJ==|fy z{&`*%A+pC?hiej6@)I-3T5-2s80sE>*h@RRFIwVkwNc~H1EP4E3)n2#Q=p!*|@t!R4e#Xt$L7(2C8Qa0cGic1r+1?%^ z=lpu%A&sOyoU`Pwm<`t-jEC!gHtDEcOu;lYZSO3OxGL4uH{B%0c oM69O~yy3@3T`)D%Dvg1XMDk zDn7s9P$84Khl$ qN|0R8tX0i8VY!4-E- zWZ?QM2somu{ST9a2m8MIq?{W!Sx*@r(9L>w{AR_RFSChHeH4jruR00MP!D2r6}6X~ z9logX8Z2JNM_3b0=R7SK{;4f0ZbUxhDJFh#rx|1lm#)JhqQj6Iu6DS0J5I`nRkGPV zk)vB5Qb5~X^2bAksU90ub_QqPG9XqN@?+ePHUkLo_z1YZV~7OT!Qc@OaI}AgA`$$# zXBFk%xaf%E-ZX_=@rb#ksR>ED+h?NZQMzg5?&2>m %2St%xqYUJQv9mycr^n!J-cvh6GmBa z6%eeeJvz}k;E_Mx>;tyj#jmrlHB;75{RV3VvnHw=1bb^Z)k=P7;@ky*P?WsW9Y6x+ z182!_Ut`VTn3b+UXq*|7-}MDiBveax3wfWp) Nad2*!r+Cz;S=vlFcQd2mH~`6O-+xOU?App8j|^1HT8mH{spgj& =An#~A-GB8x7*}-X*)(ypp~~q-&}-*!Ap~cS zcOm!zC^Dv|mf=DDLG*Q4TL^=UaLB9g?0Ygr0mVuSZ}sNbs>55JBZjVKWDlfQ_fg8< z?fBR$$OcM}n2#if>zCei;Sg0tKTl3SX^F_Kw6j|EaG^|;O}gJD<@xyMeGTpvZO}lQ zq8Sw7TkG_(6yfoxgek~7<*eaX@7AY)-FU6zd8n{~;sgdL#pmVQ*2Lu~e5ke;WNt)S zzu&{gV;3lpp0dE#`dn1h_`?gBs_ygs7IYZh70H+H4taN4l|AJ@Y?KmYgE7^8nRmmF z^%!lo8r0SkTnele4l(tsEKMJe4m2K&uHqjm!ul%;Ol!_w{i58~zCN74D*mO6yyX46 z87(6uRyMd`Wj(!}<5TPmv-(wL7gQ=-loE1cK2Su*7GUL3EI>aJB9>XnChstPzRvTi z)N$`wJ!F^O^(tP2o*k)WgpOC1YKFpwp)wcJJ>=`WuhEtgIbnmf`0qGj+B(H=kZ6b& zT6fCFyA@VO7lQt|P)0ccIY$TubHto2et;gMhJV7 CsZuX-OX_{j*+eNo9GTQ;@Tj@SoB5bUa+AW30U}MbC0sVlvoZ?{D|Ok+~5CBl_GR zKQw|7`2i6#i5IS_Wk>5oZ}L<}O6 ~Izyx5TzF*mE3ESBZfvk`&e!r< z;IFI}5(`XmOxDpR|L0b~Bhg&SQ2G6}WGV{2K(K4j%O^~Vwt2+s*O7J{ba|k<1{9+= zvcv3+DrcRX?N4Z*OlYn)IO?%S6Alxat6IhI4#b^GvKsVTG+~Q+)JKx@By(S|W?`sp zA+!q|reYR-zIdVB3WOR;h9}w&ZqhxO0!emYV2 7H$5YL*FcRYL2GtyN@v;e>S)&<(@9wfBEWUW*h JRH*S1n{rIJSi&4|o zLtX=AY&-Nc%Al>=Ut9v%9q%6@nn4(Rs4}|LvBxbMP-XiicZJ55_>GS<@*eA^BV$sw zJB|1t XAA^ReEagH#vy*AY6pe)bYucty{l=FQc#iJit9|D zEJwlzCoor-PRtpC_?85aCYL#$X;uFObP7RW(f!&?cX4}%^txEn+NMW7*$zLLQHZ&r z4;17xIyOI@a#?_6AG>A_uAeYZlkrdWjOf }<$AfaEI?QY8H)GuiU8H66nb+bOzQ92~piVEmt znylJeDXZHkVz-eK&RFY9L=SkFW6ztPM^#s|1r=sbnH6t;w>CTr*xt38gM&e%FKC e*5p(T7nE3op+gIsnHCwdX%94l3I3U3Gvyt2S_?Xeh?7$Jp~8s#i&~Rtu11M) z`kgW1GvlPj;WX{?9>Y5uiXX#_m`&L&PTr`E+dmA^K&?<(uIx2W{Q{&rV&HNA5Ptm3 zW*3PPD`WKy((Ii8T3~hsTFcVCbAAdh92Q0M7RYeb(~4owu5xT%**?GIgU}UNMd)^J z)!Gg%Hz!hmicQ7^WVQ23kxqiSz%d 38!3wr2l*kCHV%l8V+bW)XR|NAp>Pp6sMkfreA6qCT%Q9o*H&O %8$a};jZNU7F zSjKQsqst7?Vl`&tD|2&Ph48 |iIKM moCHMV{n98VB|D63 za?9Mg0k=&Zq;HRJSrl_m)yeh_ZQCdU_*;46TPE^b4 uwJA~7PdgaD zx7Gy#fBlzp|2&yNE3Z9KCEn?=d2lozmm?#nxu5<|iV0ZRNJV$G;1`%2Oi$XBN}}mY z2z{*6tU%4>eH2#B`CeM VzU=gNJ7Qcbp>m`D@ zH@X@ocfYq?){0R~%eRGFjmGRnvoYxT<>sEV@Z-}uiskgxJZw_3<)76PBtKtiZ{ML} zciNCRTS3~m-lVkJmvWykB;DlK#aaiER4z-(wX*hlS+!Q{ziTT^OU#6dOZ~0bm~a+r zwy}iP@~zK=JlxXqnv7(q%( of7Yx|tGNn`de#Cj)cs2Ml!3I*LHByIXm4kT zaKI1P{?n)1PdR4@TC_zicy-h1)^h!+=ZHJ^Ag%hgP?Ga}+l*YcTVPR7f|1ge&c-M+ z3vZ;J9{<$>n2g&qcY icMHffY_9wEF zzB 3h(kM=XmGIa4v8rQG)aUrn5Fg zpK=BWUz%{-O^%2;GmY~n?L}P3o|;j355tpvgZb4#&)7h!_WG!n-yzjL+QG$c$-s*e zlkKU|EF!W|&RY9lNA=Fzgu{t`q;)JfRmo`9LGt!_w;75D@0;YlLEiDgo{dnX?8R@0 zb~DwW2cH#NR)1$E&oc!d@-WPLV~G{0vPuti|0-s(-NQR9-UIRjEHyTyzR|JtNoQd- zdwP}BG3KM@E7gJ(^TXs_cV*q?YWo&(Z8e5k=qcpezrNQa7w@T<5p9EO|Dpgd3j^Z< zI8Ci=;=decQMpt^<2p=L$(uaU09HG3+zkWuNUsqD#iKCV6L*dwQIEup?*~8%;sRVZ z9V^k;M3v0S(qJ2EyXd+l0n{Lm^^s^^{hh6KND1zB6nVBi@ZU4`ULk?jDa jIEawI=z@u>s5<+k@RObTu`nB!&C)uEQ6a^gv zV@xG-K`hUijdW~iDGyDo!~*B@#&!vVR6V;DqROFswycimkJIhKNe&*JMm_o>A?2c% zVHxS8&YITVT{cly9l#*RNamuYmxy7#4I9Jxk4|%cN|mw5jge4yuobx1LYMv3zu`{> zp}kFtRel05e}q0;VD}2v4L=^v=CDcns?v1h;D {GpG(K@ZFGf?eX=DN;JKItUNO?jm>K^3 zZuSB5e^x^M{riQ~T;3a-9HR(TD=z#ph!@r@GJMPSRhb+|!F$%r)I2w}E9te^`-jNS zDome@766@2IbFo-qB5NV7?hgIQXcb?JADbFFt>~7VPFsa`w<0}HeJ}Vb;{uGva6N- zyaQz4e!6aWjW3Qq_ZU)aQ_`rFHkltKLd%P3RWK}osp3+g48Ys gKZ@D i*Q$C&a}6vjC}sx|-pp+u6~N(guoZ2?a(R5AeM%jY?|@CXdV7 z6PW@y;L7F+`y@YfEyDm;4I^4Gt@5VIyQvOzDgN>(0vlpAsTS*HJB0#qP+Lclqdg&c zZAr3o=w`avr)KXqqsFa|bYIES(Csmx15;vzRgK~MIth6sn5ZM%${0MbH_s4auZ7>V zN>U4t)(|Tzt?k82n&o|U_X((v?g0Meq)pURH!REeEOjQ@^wlyJfX?2NDqa3X+=k-b z@!Cn$`R?m6&US|Q$z%j{7`Fm=i+)7Tk(^UX!ErQ5sya^_By2b59|(Z znrk|omuQn;pzzN^4K2%&+l(b{O~(nUB*ZyNn21}w`>Wq#`{WHjw7q%s%~%^2T_sn; zEWHrLr6XyEgd3cfCZp
y>lUxYd?(WaC7 zCP8YSvX=+#>b0UXSF 0ie!O2&=tw)>a->eni`J(cNUt}EnF^l@eAxL@sW4d zQMVboLi*B>vS`utl3a4{As?n9z_;EBpHn{`Satfy!4>}+bi&FnwRN!mgi7r{3$K-K zz)x?Z@+no>doN~tzL5V}uf??eF@;Zlg1soyAi-d+AM@+rGxZ!xzu@i}N)zSo|0x*6 zRWQsY)bQ1m!ep)TJXgoZ0t(oK@XoR)SjYMIY?kNYpY`*!=JEvF8xjZCKWj^cX{ <3{jJ%B!RVLUcdQ%P*O*Ls*miYDgc@uj z>uv|Vq%`$BSdYAuK~^75*GRH+c~9lBnGM BODtrYNghiL1_+4-%Si_2y;Fa{8 zWtf4bALxq(C8NZuV 9VmV2l<@A6@CzhJ-3V&v1j_Sk$z z>p4|%3<<$M=1kBKqFpznlXOYo`Okn=`sTsJ80ih$2ZY#3ThH4%Ak*g*^uf<%e>)!a zRH|qHNt0jc8BqALarm%G#PFNd5f|1U6H1iMR!8@$DjDq72G9b==@y4~R{xP3F*Z?6 zpQ%RTq{~7+A#3zBkQ>V0RTl5+j0|DF%9vxvNG+U@-Q<}yEv>-K@$|rVekI516yN*i zHa2l|cYM^c#C);sVNpxZxkKGbiB5i*C_nQ(uX zXDUr>oOaElK|F$&FLteK!X@b<%;gVfRr#7SA2em91tvZME}#dGuEx!49JcjIqH8ph zMEkf*JTHv&sVz8dSeH0IQD04G(-v8J6=D0jY#x5J=!+)V3@fktMNpHS4f<`S>s{q* zie)d|OJUj1)1V|tnshv)AA8yx98k!n^irPaDg~_%h@7ut^~@vwgF~HHH}STY)JUiu z4`khVZ9rY#kUGk1uRp-vkTnh+!UVLWgn-T{{TO%K{q#L0Ta=o%z95#tNwf$UUg&~T zIsUQe;R7O$dexd1$RIhGj(z%^2-3x(L!;CJ3BCt?@}^{1%d5$uY>WfjYC6hWsYG*d(NU>ZDj2 zQ^iy|h5Hvb83VIr3-w~6mIRcvYe4oSp?8h5fd9~y-_U=66} rYxa-*h{eTE*pO-mbZcI86>XdFlDY$~Q6)=9Zx1CcMR{F;>U@jtNg6SK!+$ zZnUTEBCt}zkfgUYzN9=LpjVFL&1y(iVCo|9I<>UPxEKBt*rIuEOPV;fs#$F fSjz_48AqQ8oj#scx;}7yKDq)Gzp8V{*f1 zv@z NxCI3P`n1Y7$KU43ngXgy|uOSOz zr2GqyzQ~W9j)6;xWq=8I9;=j)a9{I1GJPBA?fFiSymqDx#E_M9BNLybV43NM?3=V! zKM4@T)RxvJ2gppY{Rw)Lul604ZDZ$RlZxcB6Y{)e6EOOs<@U`c_M?PYjUUz`39m6q zLXM0YfC5t4MIDX=_ZBrPMe<0C9iXbq64Ri3QW}n(=#R+g0TTxknA%QWJ;40Hg _{cXhqWE6R=HFAx34r}@2)GB`LdXHb|mei*e{+Y zTb2rKMV`37>CLT-{~4!dMHX1oULgeEiuFV@yiQcFx*4l#6)sNbbuygU>T}_k)fhv_ zSWk<1UZ|Z;=+Lm78$azdZU=WkU=r#E@tocQw@cUdRPYTHd6Bptj^OD4+}G?_$Z*EY zbJ~V!%GDN*;;cJlPPSb}wEKK3e_PH!E;AuGpU>d+UU^yfUNw}`Y{kmJIfuWsB&x$@ z`fi|xNXq-YcDZlUFbaJmN+hVZ$EG`Q?Bv-DD{f+H{B=FlmaSdB5nF$&Np{!P@^1A4 ztEAlZRq(vq8j@Z1dKJ@{y-u0V ;o;ye>Uxs@nyN zCa9wVvYf!vWpF=XUopQBp>88)xCrM+1YNmB-Le+=?Ffq>3`Sif25{z5uW-9C&+$U$ zc~?>{)Plf%8cTV@<}pL{!BzY>KEC1nz%LFGV|5vk4~IpobUy1r$Y`KtAaSP-9hd%s z3cr?n?8|LZ_vFreEj$eJo}?Wt*~GS65HUD-2{Ca-b6J5HG(BxlOyn>g&lKD%d?M~n z5JGf31qet-Dtut{vB7B6eg@1g_-0Jz%iSsBDGi=jxaxtlOSbxz-AYQt+>^1#(wbF+ zdDO(oiC@2d YQQocg#BMm=bKqNZ#2Br5*K$`eNUM5!{ zc>w)>9$=St84urzj-Zpzxargu_Y-#-PH9wJv+;-a+%WdNGq1T)>nErATT=4kVf-risI7y)HY@X6wYA6ePUpNY4)}n)yU?D% zw@U%POY>kdU>x)(xRbNRx>O+iN4<+LOfFMK$*o|eBnkMW-6EFr--j31*}iC-kaaD8 za-QZuiaYN{$RZgo|0A$q6>ZTb{KFW6AR$Tx((wKLlw8D+3HJ7i;y%EJC3B?j*J5|$ zPzvkbD(Ct=bpkcRRW5W8*8OHnrh4ir$f)L#3XfXGz!ML2UcX?^;P^o}nKht!UTUjM z+vs-&*uYY;NAmWusw|D39hG^oo;mQyDCYJk+h=gQcsrWliK56mC7mKKwl# ?at1CLMPol&X8281)1Hpk^}p<+oV%lVft-79cZu+4 z<+s@Cn
ZqKkj?9_HPOwItR_vw4#9Xg$yNUYw#;vL z5u+v(g@uwf7ME4`vQ&MpS9!M`;_U3;knpJY3h#C(-*zqnu1G`&9^|ltIWHamWCzga zejY*HhJD>+VpL|3OjC?hS 9rr=>{Rl$a^_Z^M_ngAa7xF!=+9z^uDCUelAO2I qe2M8DF& za&V`eK5nSFk2f+`=Q2^zSsTm4 t>pOLoHeS55hFaN?6K0 Toxu}a2xv%`Eg3R=zY{0gM0uZdVb2(V`ePWYGa~W!phh6ZY-yY9fKH&>3vBq zB0^fenU%~SIxyw~?yA-n9Oxbu0^)9(VZ2$?PHN+7ll4;YNJXW5WvWjX@9QQD)!eKz z&-4bBcY$_Tj<&6|9B*xyftq?Vi28~%J|41^x9n=ZEuPtA3fapP1)k3AoX+?reQuAW z4Jz=D^3GE?bxr} - z;BRzPEi0SAY h|*F|HvmB-&*92p3Cw; zbk(WKK@IJkpbn|UHUD&Ju*KC8&^Fy%gc&undvE`9gMoor@8Nx&=fasXnN6qRweRNG z9t!!Sy`!Rqn|zv^UL9?iH37-OZP|3HCEQ@$5qUCuMk9h}Nnjs3DMM;Iq(6)Wdi^Al zRYR;(bN-^qhrfd6c&*c6EtxagbS&r~_b#GV@fFc00zUK?w7Q7 |m|R68+W{q4#~)zP*(s4YFsY*mS;-6 4jKyv9UaT4qu*!+F2>pG-gS7|)NWndwP`DZw*ZTlt68`9tYLo#jWj267{ zEL))I= (=K zTi9&5w89SiS#WE>Lk{D0wLPY7s{vlv6aFtNK*yH;m*q@Fkxiv@ r9l@=s*o4Hiq4sOg05A{ZO!RMJe)iXovfA-m~*J2e-%MxD9>2Hl7^b8pBl=< z%AMHf__6ENM^0EB2a!I=IK=3)hG!b}dtj-MTwq$A#qgdDD_hA#IsIu_uv?XV4ft_q z8 Q5n9KkGML!^=Kg2A@^>nk8gaQP~+&fB~c4mVM%j|QvXF(sVh4f z(%kmpG~S~0+Ezfu3jaIQ?P|$H7O7;DS7J85hn7`7SgacZVv~gmYK2^y#()^r7~e6W zv26>6m`it4bFEk0ZG`29_8bNsE4Opdct^&qLRjg%h6XwS<-O$gT0} z8)MTY%EoU+3+TpI9+hmdh?C zu#)+`#r!6YZmdd(o?aLhKE2P@?(zkiCaa0IaJd+MKPc_kh6iG 7#noi* zvI8CY7>Tozr*a#h7CSbTLQ-FmQ5YOGF4O+_58#pQ7Gmz%o|Y^%4Up&31+wG`|MA{c zkF0;#ZkEU2s?u}zkB!LhTR!@&uk$q{3hFBu0t9-(9dwIkG~#zOKomg9o8_1qr;XfP zWxk?HQ4@AW Fg~6d&M3xUyuw(my0=?}i0|{J$8NQoNeWPTk^_D {uthH4|K1dRXyT85H>1XYMMRHz;e8_HoyoVs>fv-)y-)2IH1^*y7sM zy)MIe&3~t>FU{tXSKpn{7i )- zhMcBvkaNljzqdFi?F`SLj0_BCXE)bxkr@~mSpH6^Obpk!{$UadtR~POVR)!#e823T H{oDTm=Kg`# literal 0 HcmV?d00001 diff --git a/plugins/test-plugin-090802/src-ztools/plugin.json b/plugins/test-plugin-090802/src-ztools/plugin.json new file mode 100644 index 000000000..ac50c05a8 --- /dev/null +++ b/plugins/test-plugin-090802/src-ztools/plugin.json @@ -0,0 +1,52 @@ +{ + "$schema": "node_modules/@ztools-center/ztools-api-types/resource/ztools.schema.json", + "name": "test-plugin-090802", + "title": "test plugin 090802", + "description": "A ZTools plugin", + "author": "Your Name", + "version": "0.0.1", + "main": "dist/index.html", + "preload": "preload/services.js", + "logo": "logo.png", + "development": { + "main": "http://localhost:5173" + }, + "features": [ + { + "code": "hello", + "explain": "这是插件应用的第一个功能", + "icon": "logo.png", + "cmds": ["你好", "hello"] + }, + { + "code": "read", + "explain": "功能指令+匹配指令示例,使用 node.js 能力读文件", + "icon": "logo.png", + "cmds": [ + "读文件", + { + "type": "files", + "fileType": "file", + "maxLength": 1, + "label": "读文件" + } + ] + }, + { + "code": "write", + "explain": "匹配指令示例,使用 node.js 能力写文件", + "icon": "logo.png", + "mainHide": true, + "cmds": [ + { + "type": "over", + "label": "保存为文件" + }, + { + "type": "img", + "label": "保存为文件" + } + ] + } + ] +} diff --git a/plugins/test-plugin-090802/src-ztools/preload/package.json b/plugins/test-plugin-090802/src-ztools/preload/package.json new file mode 100644 index 000000000..5bbefffba --- /dev/null +++ b/plugins/test-plugin-090802/src-ztools/preload/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/plugins/test-plugin-090802/src-ztools/preload/services.js b/plugins/test-plugin-090802/src-ztools/preload/services.js new file mode 100644 index 000000000..83c3ef1f5 --- /dev/null +++ b/plugins/test-plugin-090802/src-ztools/preload/services.js @@ -0,0 +1,27 @@ +const fs = require('node:fs') +const path = require('node:path') + +// 通过 window 对象向渲染进程注入 nodejs 能力 +window.services = { + // 读文件 + readFile(file) { + return fs.readFileSync(file, { encoding: 'utf-8' }) + }, + // 文本写入到下载目录 + writeTextFile(text) { + const filePath = path.join(window.ztools.getPath('downloads'), Date.now().toString() + '.txt') + fs.writeFileSync(filePath, text, { encoding: 'utf-8' }) + return filePath + }, + // 图片写入到下载目录 + writeImageFile(base64Url) { + const matchs = /^data:image\/([a-z]{1,20});base64,/i.exec(base64Url) + if (!matchs) return + const filePath = path.join( + window.ztools.getPath('downloads'), + Date.now().toString() + '.' + matchs[1] + ) + fs.writeFileSync(filePath, base64Url.substring(matchs[0].length), { encoding: 'base64' }) + return filePath + } +} diff --git a/plugins/test-plugin-090802/src/App.vue b/plugins/test-plugin-090802/src/App.vue new file mode 100644 index 000000000..d4fabacba --- /dev/null +++ b/plugins/test-plugin-090802/src/App.vue @@ -0,0 +1,25 @@ + + + +