From 5772c050f81aa8db35aa34a40ac2b843b26b5a00 Mon Sep 17 00:00:00 2001 From: xieyonghong <18010623010@163.com> Date: Fri, 21 Apr 2023 18:49:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.sh | 4 +- public/images/device/cover.png | Bin 0 -> 3847 bytes public/images/device/ignore.png | Bin 0 -> 3759 bytes public/images/device/import1.png | Bin 0 -> 3458 bytes public/images/device/import2.png | Bin 0 -> 3552 bytes public/images/device/intersection.png | Bin 0 -> 3606 bytes public/images/device/matadataMap.png | Bin 0 -> 9494 bytes public/images/device/union.png | Bin 0 -> 3542 bytes src/api/device/instance.ts | 13 + src/utils/request.ts | 5 +- .../Info/components/InklingModal/index.ts | 3 + .../Info/components/InklingModal/index.vue | 72 +++++ .../device/Instance/Detail/Info/index.vue | 77 ++++- src/views/device/Instance/Import/file.vue | 173 ++++++++++ src/views/device/Instance/Import/modal.vue | 119 ++++++- src/views/device/Instance/Import/plugin.vue | 40 +++ src/views/device/Instance/Import/product.vue | 216 +++++-------- src/views/device/Instance/index.vue | 4 +- .../Detail/DeviceAccess/accessModal.vue | 24 +- .../Product/Detail/DeviceAccess/index.vue | 231 +++++++++---- .../Detail/DeviceAccess/metadataModal.vue | 259 +++++++++++++++ .../Product/Detail/MetadataMap/index.ts | 3 + .../Product/Detail/MetadataMap/index.vue | 225 +++++++++++++ src/views/device/Product/Detail/index.vue | 5 + .../device/components/InklingDevice/index.ts | 2 + .../device/components/InklingDevice/index.vue | 305 ++++++++++++++++++ src/views/init-home/data/RoleData.ts | 30 +- src/views/init-home/data/baseMenu.ts | 57 ++++ src/views/init-home/index.vue | 4 +- .../AccessConfig/components/Plugin/index.vue | 7 +- src/views/link/plugin/Save.vue | 6 +- 31 files changed, 1643 insertions(+), 241 deletions(-) create mode 100644 public/images/device/cover.png create mode 100644 public/images/device/ignore.png create mode 100644 public/images/device/import1.png create mode 100644 public/images/device/import2.png create mode 100644 public/images/device/intersection.png create mode 100644 public/images/device/matadataMap.png create mode 100644 public/images/device/union.png create mode 100644 src/views/device/Instance/Detail/Info/components/InklingModal/index.ts create mode 100644 src/views/device/Instance/Detail/Info/components/InklingModal/index.vue create mode 100644 src/views/device/Instance/Import/file.vue create mode 100644 src/views/device/Instance/Import/plugin.vue create mode 100644 src/views/device/Product/Detail/DeviceAccess/metadataModal.vue create mode 100644 src/views/device/Product/Detail/MetadataMap/index.ts create mode 100644 src/views/device/Product/Detail/MetadataMap/index.vue create mode 100644 src/views/device/components/InklingDevice/index.ts create mode 100644 src/views/device/components/InklingDevice/index.vue diff --git a/build.sh b/build.sh index 8849f58c..bf6d3418 100644 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:1.0.0 . -docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:1.0.0 +docker build -t registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.1 . +docker push registry.cn-shenzhen.aliyuncs.com/jetlinks/jetlinks-ui-vue:2.1 diff --git a/public/images/device/cover.png b/public/images/device/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..2c54ad7a4108e761da26ca6d2e25810090737420 GIT binary patch literal 3847 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 JPDHLkV1ht=RjdF2 literal 0 HcmV?d00001 diff --git a/public/images/device/ignore.png b/public/images/device/ignore.png new file mode 100644 index 0000000000000000000000000000000000000000..9dbe4865497fa3e4a94381b92f9c3706914a9adc GIT binary patch literal 3759 zcmV;g4p8xlP)rK~#7FeOg4z%=2f)CbF#uKNe(rAgSGgB=^X0Kj%43^UZsO0x_pIK_H>n&_ z8@dJ+_m%O~*n>g!=y<$-&pqG1=(M)O=$G4^QG<5sB{$eyrlbs#DQaT5Rxk{j`VLsR z*shdolH9V+s0ppuqHN4K9-N;{Cf91?Ds5Obp85$Q%vl7m?!o=@Kg&Phdnm_LXVaaU zSsUs=%CsC+hg_eY^D$BNx4u(RW}|L%bv=AIvqc`9qNa6D6TxVM@>acDrBL<*rMxoE za-A*O`#Q^tL7F%{DOy%JDcF(cO*qhNm~$#-GZnpr@j3HM;nhB4sh$T7eXMSS*@VQ& z>@hC$svyNCJ*cj=FxO)kx{yJG1#~cUh_FkZ)KJ0bO$`y^p3lB;H$WQ1XZ0@4<2VoD+p%km7yvVrT{l5xJ7`4O1;d0(ht#NM*mjIak2 z6f(~-^g1!1hz6BR9XqARqo;ewM(RMk%9F8Y57d6uaPSNEzXE17f?!3(jU0nq;9tXHv1xMru&59VI zlM_k?qn=60CPw6!1kGK;MPHr&_~a;cxxLER#7)+Z46R@kqLrYnwiRUASsKj zb#=TE@Ct02F>u{AL)dX~z~KCwt@~Mc_q_FjgM4IJCQJZm6d}kW4JvW)<6;U0dM6te z0!pEN-~lj)4+nT|XNksQ!Y~8fu=ZLYz5Av-kdH?;ZpTFxeCMuNxax`;`mVpfG=@Jv zxeo6x+AMZuyeQw7rC0@SBXK9$3B8jIf<7_~_wNt*6gT^h+`;JBi?idDr#h<$15>+$ zA0NRtZ=Zo#=dFLAY~biC6L{^7*2}uYdF}>R|LJQ-aNw#T9DZySp8w~Bi6Ts>5K0wu zso*)%1_eE=P-ucYBkA(fNx0l`K44SQr@(T~0N%OsWGUAth)CW@<=0$U!*{)ZeO z(N*}%)9YyyN;3Zo@a#V(@Y(A|@a4}&au;P~k#$YQkkcvEcYb%S7B#q5fh zHk>|=oy**M>@D;vllzvJUAvfBD-rOUTX^Exb=W>v!Sx4*IRn~+|5Be| zT$eFlUk-Hd$%XzSD9XTnlr0!9*CL$?(Lgs{Kjqv0?YVV0Ip4zlKV9m3gB~j1&k8vIW}57{BC+EOZWOkYg^v zFjr#JtVsiLzf<$cxO)#J<20PfxY=pbm1`6GmHWWxG3AK1O~~_x?RHSy21VQ`V!*=X zF-@{L99Ax%r}$FwQw&QTa|o%QC!00w-zrJg1KniYVoqYTLQ`0ID3Z|Q5sFY`8a=G{BJ)M?7zA8q8_f>uVQ*mTEk8Xktsp%3ixp2I_a52;H-Bmh zbOvq}EGd*p7{ON?XKDKv12f)$A!pZ#tH-f=JtEM~&40YPnN_|7jekL5Dte3e5lUgW`= zioXbn6~h+{-nL`Pxnuy#TL_ROHQ1^K3PZo~wuJ|OxdOla(<)qXSq)b>PtjO!JI}rF z@&s0#xAZ3^4|X(h9HWeL=evIL^f7~FYe?5{YG6EhEGz^l`l%$g-{BUw_XNujIv8u> z-pD}m9yRh1wR}ojrGctAe}VGfT(I!gJ7akMrQ-XVfo!)Bwka64Eldc0-&sN2r$q)X z9D%IcqVibK!&$b>`?1Jkl5FzYq0jPAXC(+(;@n}*l3i8cL#LdHDq~$u?HeEKA=6?? zsoZVfK9@jl3L9rp)Ix3uK%bJ>&ss{s{MhY%jLi(m8LurEcq3VK9pkvCn1wU6A3N*x zDZGN2=XyM`!7N(L70f(p^M2Upbxr`}J)2aUkEthwM4|mXlVNdC(9;0D#2VHu^c4MP2el}7v!MXU5mrXzsQ(3;+ z{eqLjIya84a1!hcqf;tcttIn_IiN~cv@rmX5rlYElx%GmwxJEiG%16TjEN<2bx~77 zw}hp4lB860N(D@nc`#x&PzJlgJ9=va(Dk^6Z3j{oItQ|y_B`fBXo=gF#Xuejin7rx zAh8kk>U$QznEGid*PB-C$?=l>;Bn~j5^`T5ijD`}11->d$7(;8oq1TzT*crvA0&DX z`V7X*ivYP2rh8>WlP%;1G(de7Cf5Mc~_?!(P9fNau z`dWg1JrO13d@_8=!H{JbRnG0)r;?Z^`FABBc@RqH1`^wRBAvdr@J18%g>!G*fPF0E z8~}RuWtg#LH^wl}Qcw{N=4+Kc*+(0poPlX#yl>z(BG`YlVF14Y%}`<*J!CP6~Z3qS?y6sq@er8b%t@4Jr1 ztOM3Hm?#3N(`jB^D!i~tN>-1m_)~VkFaygU2SpQ6` zfHH`l%SoIRcbNn!qu+?eZs}_}pi-ad{%Y4?6|8H}y40UOiFu`Ic4$`UCj(1IBZj%U zM*S&N>0K{FDI#s8dQFQ5dKGVK%@YbWyqghVM?^8dlWHX*@#A#Fde(2u1EE-~Cq|?xqL+BWKfC zSgU7XZTl8zjvNVItHVjKv3uNPoOlgZx9)O6)*OYnTU(_MgX?RKVBFi92e3bw#I3V| zEY{YNVVg#N8-yT$X9*)Ir_rcxz@Tw`htrT1~&8))u zk)wVN!XIB!eejxlJ_v(7r=gyjf+79U7=4zZT`4i@jXcxA(PM7i+{@3hpvraPgsa=zPx&WC;Y>ruBe}<1Ox?Ky@R3LS z^68DDx{d$}JgN+LhzY81tls50{S|^7or;`JJ2_C^sGiG%9R1e~u^xQ~-f&18(bb@~ Z literal 0 HcmV?d00001 diff --git a/public/images/device/import1.png b/public/images/device/import1.png new file mode 100644 index 0000000000000000000000000000000000000000..493dace57620c8699fa8a7df97d302e7b365d53d GIT binary patch literal 3458 zcmV-|4Sn*7P)6R- z<}-7*ZS%%rarEMgKYaR@mBZPOD?zAsSowRHY@=XOCMg(oT5lOlljgB4GpGG(x-QeL z+niBo!x9y9>U{8cxmK>3Q~OL zgW3iU8xw+Ia2a%1K?lL9|k{p`R zZ4-?&ZDK(Bg3pnXf`?~%4z;cgV+Rs0c5}Z3cjr#5G%#Xo`9dRX!3>4MatytZ512rM zhNktM+Tv>IiC`mbAXa5%Y;HmqSB(I_B>&ss=5v^3zZk<{FnC78RQ>I3z`?OUvb&6F zcx3;o0tYM9LKx7xLsr__8g!Q~B}_DAwlBU5&FX5fnDvbc|CVvf*kJqzF+<5u`Um^t zgw>QLWMK;-jR1qMXfv;iQ_$?~5o!Yz39APO;1-JncW>Z`T(D6Q6*^@=DPT0AltM8= zzYZ`H>zEZ*gafFS2yR>a58CV3H7X|8J9!dZO|+h@)P9}_!7@HpiuDbF<>1HA%8?Q$ z=krrSn|6|6Yb(jrk=YjK!RKKhnu#HI4UrbMLwNnqhcOGG z?G9r0rQ~faywCF~{aBZM6}XT1on$BUO)?1jnjly#5I)gp8F>g)T9h@#YX0M%E8jQ) z-}&Z=G=3N-&K8ykCW2NG7%Y0gjzy^1h`A!+^6cY;O-Y|plnVoR=gP{`DA+VfQ=dRC z6^`Cd^8EN$A0~e@(K1xb~TrO<2@cg$=!1u!YxzBbfoic$(f`(O)w{uz^ ztP&-lFg?3KM<~jNYC^&;r!2a`LpB4rkx?BSiB0IwvXvYznR_MhBLyFofd$A48LhQYz zGqIayo}ltKYm6A~Z<+(v`0SdD+*l+#acMavY$U6bU}}5+eh}{EB;36q)GvOM%65IU zK_M#_$7`yf0kK36^Bq$v4fo+=n=_AnqXo$}#M{t0u=_Igxu&#O&f&Bc-e=2E{|7-h z9Vfm@LwrdG0FK}HHAz4{QRAFdGLM)9lff>8%wu;wCBJb|gzUfye~xypDc3k(F~q(e zAE*5iEOj%=<62>`O3iZcKvonl#JtF>@W1be(aKtw)`rMtp+MSAXzO@2u=K({cA?qw6AP z$2#3_#Z=L(p=f+u4AHPZ6Cb?At0x-p71rL)0q6x`Z=q_G5PgKb2Lmu-t?tj?rSVBgV?2z8q)$*Y>dovV~H8Ij2=7CBYXM zjuDEqgH8vgIMyCmCxy}G&qB+>re@IF#lIR?LJ`UY!B1OwgceMD${RNXieProwMG2c zH>UjOI3_cktBbrs0hLb``Re!vr-XGW96jkII34E1&6yl=YYu4A6)Ow?6ahl4DohT3 z3|l>7@K_$g_>2bojmC1N@0HN4VHu6YDV3g5?LuV%>sP*lU1gmNtT4()N(K-Fcww>D4D1gWlx>-dvbk5_1$_M-8Dw)WPygWV3JQT zi6$~rPWMB4pabKB9}o7nBqg}Qgzgw5Q>G&XvqO-6v?ERlcuIbqp^rQX<*Kdtw#n}0 zNw+QA>D(KSi9Vij4geGTGAyFy*vGKUQqTk(EY~VQO0k(#A1p0iL%lwc*4vg8Jn+Mk zX@(LSC$4ax6K5zh4^uBtEmARWpyi>ww8t`9BEaZ4qF#C=Dl)p#HQf30dj4|5hR?y* z_&&zpL})OKLH5&hUSIlS?f5uh0dKONDHQ1~4e{E$KZz{#H!H<8(ptavv(Ra8Diy*B z=y_{V$U(u5)pdwri4)4wu~SwyR<#zlXbF*Y@8R9~OB5C5U@8iBo1u6LPTe`}H=YM< z|Drx+HE4*TVQMJqu~=|bNMIC*0L3~b{)Gipv7%cbCehs+hUTpYx8^V0yS@6Ji5>au zo-8&{VOY7l=2m`+bd_}k*oBknCHIljLHefpzRw$1*T=aXb()z8mhvCh3$3tqcj16D zx;&=S??|KT%0D%w&ArqRVR<~qM=)SI(HmVn) zmMmnK$1S0xv#f-TWm*M{Kvb@kxU7Cf2~tPzoaP?rHXYEg&*A=J=x_i&bQnVFPgi1* zY0?g9g8?K&fN!pZ~(*V8Z61IegQpoCWd<+=(ubJiA=b}h`uhpJ^up3g~|>6_PL(u^*mnM zfTis#T2V>N1J%uV{uZI{X3!JgB*VFL`hB~69P~>rZ zg$)M*cPH9-OV#%t4!c!2JaY>AYuA$1x^#Tz{AN(b&cET{^k)K*!w^Ek&(P#+tE0mZ zV8Yj71aLeJ!qaOhSR5W^!JeAOZ4iP0o+-?wo@S%AmO&H7&Z-;S<&ehB46Lck;gIRY zwjfwI@L4W{V5Vd}<&b1y!SWNo9sOzC zwQwSRA^q`~_K{FZ5AAzsi$Ha@Pu+LHeWXkWM}G|K<`$P_L6v7`C$w!%hy0y+I@6H( zi0+NxQ!ktaeC@Tkd`6+DZA5?^j~df2Xo4C$n{O%SlVCn3Ryw18a-e)%JJ%;V^}U;u k(a!OPL;47>_R<*O|L}qfgILe?$N&HU07*qoM6N<$g8Impt^fc4 literal 0 HcmV?d00001 diff --git a/public/images/device/import2.png b/public/images/device/import2.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff766bb05ba929cfc16ea6974abdd58b8fb0575 GIT binary patch literal 3552 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 a%ke+Vo8*pC2__Z*0000V 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 literal 0 HcmV?d00001 diff --git a/public/images/device/matadataMap.png b/public/images/device/matadataMap.png new file mode 100644 index 0000000000000000000000000000000000000000..e410ee4bd91c78bd43913aca51d9a430444a2bc8 GIT binary patch literal 9494 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 QJpcdz07*qoM6N<$f+PT_jQ{`u literal 0 HcmV?d00001 diff --git a/src/api/device/instance.ts b/src/api/device/instance.ts index 9f4cf6f9..838d9529 100644 --- a/src/api/device/instance.ts +++ b/src/api/device/instance.ts @@ -573,4 +573,17 @@ export const queryLogsType = () => server.get(`/dictionary/device-log-type/items export const getDeviceNumber = (data?:any) => server.post('/device-instance/_count', data) +/** + * 导入映射设备 + * @param productId + * @param data + */ +export const importDeviceByPlugin = (productId: string, data: any[]) => server.post(`/device/instance/plugin/${productId}/import`, data) + +export const metadateMapById = (productId: string, data: ant[]) => server.patch(`/device/metadata/mapping/product/${productId}`, data) + +export const getMetadateMapById = (productId: string) => server.get(`/device/metadata/mapping/product/${productId}`) + +export const getInkingDevices = (data: string[]) => server.post('/plugin/mapping/device/_all', data) + diff --git a/src/utils/request.ts b/src/utils/request.ts index a74fb062..9676b40d 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -63,11 +63,12 @@ export const put = function (url: string, data = {}) { * @param {Object} [data] * @returns {AxiosInstance} */ -export const patch = function (url: string, data = {}) { +export const patch = function (url: string, data = {}, ext: any = {}) { return request>({ method: 'PATCH', url, - data + data, + ...ext }) } /** diff --git a/src/views/device/Instance/Detail/Info/components/InklingModal/index.ts b/src/views/device/Instance/Detail/Info/components/InklingModal/index.ts new file mode 100644 index 00000000..a2701e55 --- /dev/null +++ b/src/views/device/Instance/Detail/Info/components/InklingModal/index.ts @@ -0,0 +1,3 @@ +import Inkling from './index.vue' + +export default Inkling \ No newline at end of file diff --git a/src/views/device/Instance/Detail/Info/components/InklingModal/index.vue b/src/views/device/Instance/Detail/Info/components/InklingModal/index.vue new file mode 100644 index 00000000..971f35e1 --- /dev/null +++ b/src/views/device/Instance/Detail/Info/components/InklingModal/index.vue @@ -0,0 +1,72 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/Instance/Detail/Info/index.vue b/src/views/device/Instance/Detail/Info/index.vue index b62a13bc..c9879798 100644 --- a/src/views/device/Instance/Detail/Info/index.vue +++ b/src/views/device/Instance/Detail/Info/index.vue @@ -14,12 +14,36 @@ {{ instanceStore.current?.id }} + + + 映射 +
+
+ {{ inklingDeviceId }} +
+ + + +
+
{{ instanceStore.current?.productName }} - - - {{ instanceStore.current?.deviceType?.text }} @@ -83,6 +107,14 @@ @close="visible = false" @save="saveBtn" /> + \ No newline at end of file diff --git a/src/views/device/Instance/Import/file.vue b/src/views/device/Instance/Import/file.vue new file mode 100644 index 00000000..feb42d93 --- /dev/null +++ b/src/views/device/Instance/Import/file.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/Instance/Import/modal.vue b/src/views/device/Instance/Import/modal.vue index 8f957635..f55c983d 100644 --- a/src/views/device/Instance/Import/modal.vue +++ b/src/views/device/Instance/Import/modal.vue @@ -1,17 +1,39 @@ diff --git a/src/views/device/Instance/Import/plugin.vue b/src/views/device/Instance/Import/plugin.vue new file mode 100644 index 00000000..6b40a00f --- /dev/null +++ b/src/views/device/Instance/Import/plugin.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/Instance/Import/product.vue b/src/views/device/Instance/Import/product.vue index f83030b5..34640f26 100644 --- a/src/views/device/Instance/Import/product.vue +++ b/src/views/device/Instance/Import/product.vue @@ -3,56 +3,72 @@ :columns="columns" type='simple' @search="handleSearch" - class="scene-search" + class="device-import-product" target="device-import-product" /> - - - + + + + + \ No newline at end of file diff --git a/src/views/device/Product/Detail/MetadataMap/index.ts b/src/views/device/Product/Detail/MetadataMap/index.ts new file mode 100644 index 00000000..19a39952 --- /dev/null +++ b/src/views/device/Product/Detail/MetadataMap/index.ts @@ -0,0 +1,3 @@ +import Index from './index.vue' + +export default Index \ No newline at end of file diff --git a/src/views/device/Product/Detail/MetadataMap/index.vue b/src/views/device/Product/Detail/MetadataMap/index.vue new file mode 100644 index 00000000..d1a60f75 --- /dev/null +++ b/src/views/device/Product/Detail/MetadataMap/index.vue @@ -0,0 +1,225 @@ + + + + + \ No newline at end of file diff --git a/src/views/device/Product/Detail/index.vue b/src/views/device/Product/Detail/index.vue index f311ede6..b57d8898 100644 --- a/src/views/device/Product/Detail/index.vue +++ b/src/views/device/Product/Detail/index.vue @@ -112,6 +112,7 @@ import Info from './BasicInfo/indev.vue'; import Device from './DeviceAccess/index.vue'; import Metadata from '../../../device/components/Metadata/index.vue'; import DataAnalysis from './DataAnalysis/index.vue'; +import MetadataMap from './MetadataMap' // import Metadata from '../../../components/Metadata/index.vue'; import { _deploy, @@ -163,6 +164,7 @@ const tabs = { Metadata, Device, DataAnalysis, + MetadataMap }; watch( @@ -280,6 +282,9 @@ const getProtocol = async () => { ]; } } + if (productStore.current?.accessProvider === 'plugin_gateway') { + list.value.push({ key: 'MetadataMap', tab: '物模型映射'}) + } } }; /** diff --git a/src/views/device/components/InklingDevice/index.ts b/src/views/device/components/InklingDevice/index.ts new file mode 100644 index 00000000..7ecf6a37 --- /dev/null +++ b/src/views/device/components/InklingDevice/index.ts @@ -0,0 +1,2 @@ +import InklingDevice from './index.vue' +export default InklingDevice \ No newline at end of file diff --git a/src/views/device/components/InklingDevice/index.vue b/src/views/device/components/InklingDevice/index.vue new file mode 100644 index 00000000..0ba77908 --- /dev/null +++ b/src/views/device/components/InklingDevice/index.vue @@ -0,0 +1,305 @@ + + + + + \ No newline at end of file diff --git a/src/views/init-home/data/RoleData.ts b/src/views/init-home/data/RoleData.ts index 9729255d..098e5a41 100644 --- a/src/views/init-home/data/RoleData.ts +++ b/src/views/init-home/data/RoleData.ts @@ -469,7 +469,7 @@ export default { id: '1-4-9', parentId: '1-4', path: 'T4zX-A0TC-BFum', - sortIndex: 9999, + sortIndex: 9998, level: 1, name: '远程升级', code: 'device/Firmware', @@ -493,6 +493,34 @@ export default { accessDescription: '此菜单不支持数据权限控制', granted: true, }, + { + id: '1-4-10', + parentId: '1-4', + path: 'T4zX-A0TC-BFum', + sortIndex: 9999, + level: 1, + name: '插件管理', + code: 'link/plugin', + icon: 'BoxPlotOutlined', + url: '/iot/link/plugin', + buttons: [ + { id: 'view', name: '查看', enabled: true, granted: true }, + { id: 'update', name: '编辑', enabled: true, granted: true }, + { id: 'delete', name: '删除', enabled: true, granted: true }, + { + id: 'add', + name: '新增', + enabled: true, + granted: true, + }, + ], + accessSupport: { text: '不支持', value: 'unsupported' }, + assetAccesses: [], + options: {}, + createTime: 1659344075524, + accessDescription: '此菜单不支持数据权限控制', + granted: true, + }, ], [ROLEKEYS.complex]: [ { diff --git a/src/views/init-home/data/baseMenu.ts b/src/views/init-home/data/baseMenu.ts index e6daa6a0..61adef4e 100644 --- a/src/views/init-home/data/baseMenu.ts +++ b/src/views/init-home/data/baseMenu.ts @@ -1436,6 +1436,63 @@ export default [ supportDataAccess: false, indirectMenus: ['8ddbb67de5f65514105d47b448bfd70e'] }, + { + code: 'link/plugin', + name: '插件管理', + owner: 'iot', + //parentId: '1-4', + id: 'a20354876e9519e48f5ed6710ba6efb3', + sortIndex: 10, + url: '/iot/link/plugin', + icon: 'BoxPlotOutlined', + showPage: ['plugin-driver'], + permissions: [], + buttons: [ + { + id: 'view', + name: '查看', + permissions: [ + { + permission: 'plugin-driver', + actions: ['save'], + }, + ], + }, + { + id: 'update', + name: '编辑', + permissions: [ + { + permission: 'plugin-driver', + actions: ['save'], + }, + ], + }, + { + id: 'delete', + name: '删除', + permissions: [ + { + permission: 'plugin-driver', + actions: ['delete'], + }, + ], + }, + { + id: 'add', + name: '新增', + permissions: [ + { + permission: 'plugin-driver', + actions: ['save'], + }, + ], + }, + + ], + accessSupport: { text: "不支持", value: "unsupported" }, + supportDataAccess: false, + }, ], }, { diff --git a/src/views/init-home/index.vue b/src/views/init-home/index.vue index 021029c0..90ce6a3c 100644 --- a/src/views/init-home/index.vue +++ b/src/views/init-home/index.vue @@ -135,11 +135,11 @@ const submitData = async () => { const judgeInitSet = async () => { const resp: any = await getInit(); if (resp.status === 200 && resp.result.length) { - window.location.href = '/'; + // window.location.href = '/'; } }; onBeforeMount(() => { - // judgeInitSet(); + judgeInitSet(); });