4444 <el-option v-for =" u in user_options" :key =" u.id" :value =" u.id" :label =" u.username" />
4545 </el-select >
4646 </div >
47- <el-button class =" ml-16" type =" primary" > {{ $t('common.create') }}</el-button >
47+ <el-dropdown trigger =" click" >
48+ <el-button type =" primary" class =" ml-8" >
49+ {{ $t('common.create') }}
50+ <el-icon class =" el-icon--right" >
51+ <arrow-down />
52+ </el-icon >
53+ </el-button >
54+ <template #dropdown >
55+ <el-dropdown-menu class =" create-dropdown" >
56+ <el-dropdown-item @click =" openCreateDialog()" >
57+ <div class =" flex align-center" >
58+ <el-avatar class =" avatar-green" shape =" square" :size =" 32" >
59+ <img src =" @/assets/node/icon_tool.svg" style =" width : 58% " alt =" " />
60+ </el-avatar >
61+ <div class =" pre-wrap ml-8" >
62+ <div class =" lighter" >空白创建</div >
63+ </div >
64+ </div >
65+ </el-dropdown-item >
66+ <el-dropdown-item >
67+ <el-upload
68+ ref =" elUploadRef"
69+ :file-list =" []"
70+ action =" #"
71+ multiple
72+ :auto-upload =" false"
73+ :show-file-list =" false"
74+ :limit =" 1"
75+ :on-change =" (file: any, fileList: any) => importTool(file)"
76+ >
77+ <div class =" flex align-center" >
78+ <el-avatar shape =" square" class =" mt-4" :size =" 36" style =" background : none " >
79+ <img src =" @/assets/icon_import.svg" alt =" " />
80+ </el-avatar >
81+ <div class =" pre-wrap ml-8" >
82+ <div class =" lighter" >{{ $t('common.importCreate') }}</div >
83+ </div >
84+ </div >
85+ </el-upload >
86+ </el-dropdown-item >
87+ <el-dropdown-item @click =" openCreateFolder" divided >
88+ <div class =" flex align-center" >
89+ <AppIcon iconName =" app-folder" style =" font-size : 32px " ></AppIcon >
90+ <div class =" pre-wrap ml-4" >
91+ <div class =" lighter" >
92+ {{ $t('components.folder.addFolder') }}
93+ </div >
94+ </div >
95+ </div >
96+ </el-dropdown-item >
97+ </el-dropdown-menu >
98+ </template >
99+ </el-dropdown >
48100 </div >
49101 </template >
50102
64116 :title =" item.name"
65117 :description =" item.desc || $t('common.noData')"
66118 class =" cursor"
119+ @click =" clickFolder(item)"
67120 >
68121 <template #icon >
69122 <el-avatar shape =" square" :size =" 32" style =" background : none " >
188241 </ContentContainer >
189242 <InitParamDrawer ref =" InitParamDrawerRef" @refresh =" refresh" />
190243 <ToolFormDrawer ref =" ToolFormDrawerRef" @refresh =" refresh" :title =" ToolDrawertitle" />
244+ <CreateFolderDialog ref =" CreateFolderDialogRef" @refresh =" refreshFolder" />
191245 </LayoutContainer >
192246</template >
193247
194248<script lang="ts" setup>
195249import { onMounted , ref , reactive , computed } from ' vue'
196250import { cloneDeep , get } from ' lodash'
197- import ToolApi from ' @/api/shared /tool'
251+ import ToolApi from ' @/api/tool /tool'
198252import useStore from ' @/stores'
199253import InitParamDrawer from ' @/views/tool/component/InitParamDrawer.vue'
200254import ToolFormDrawer from ' ./ToolFormDrawer.vue'
255+ import CreateFolderDialog from ' @/components/folder-tree/CreateFolderDialog.vue'
201256import { t } from ' @/locales'
202257import { isAppIcon } from ' @/utils/common'
203258import { MsgSuccess , MsgConfirm , MsgError } from ' @/utils/message'
@@ -337,12 +392,24 @@ function refresh(data: any) {
337392 getList ()
338393}
339394
395+ function refreshFolder() {
396+ toolList .value = []
397+ getFolder ()
398+ getList ()
399+ }
400+
340401function folderClickHandel(row : any ) {
341402 currentFolder .value = row
342403 toolList .value = []
343404 getList ()
344405}
345406
407+ function clickFolder(item : any ) {
408+ currentFolder .value .id = item .id
409+ toolList .value = []
410+ getList ()
411+ }
412+
346413function copyTool(row : any ) {
347414 ToolDrawertitle .value = t (' views.tool.copyTool' )
348415 const obj = cloneDeep (row )
@@ -368,8 +435,8 @@ function deleteTool(row: any) {
368435 {
369436 confirmButtonText: t (' common.confirm' ),
370437 cancelButtonText: t (' common.cancel' ),
371- confirmButtonClass: ' danger'
372- }
438+ confirmButtonClass: ' danger' ,
439+ },
373440 )
374441 .then (() => {
375442 ToolApi .delTool (row .id , loading ).then (() => {
@@ -387,29 +454,34 @@ function configInitParams(item: any) {
387454 })
388455}
389456
457+ const CreateFolderDialogRef = ref ()
458+ function openCreateFolder() {
459+ CreateFolderDialogRef .value .open (' TOOL' , currentFolder .value .parent_id )
460+ }
390461
391- // function importTool(file: any) {
392- // const formData = new FormData()
393- // formData.append('file', file.raw, file.name)
394- // elUploadRef.value.clearFiles()
395- // ToolApi
396- // .postImportTool(formData, loading)
397- // .then(async (res: any) => {
398- // if (res?.data) {
399- // searchHandle()
400- // }
401- // })
402- // .catch((e: any) => {
403- // if (e.code === 400) {
404- // MsgConfirm(t('common.tip'), t('views.application.tip.professionalMessage'), {
405- // cancelButtonText: t('common.confirm'),
406- // confirmButtonText: t('common.professional')
407- // }).then(() => {
408- // window.open('https://maxkb.cn/pricing.html', '_blank')
409- // })
410- // }
411- // })
412- // }
462+ const elUploadRef = ref ()
463+ function importTool(file : any ) {
464+ const formData = new FormData ()
465+ formData .append (' file' , file .raw , file .name )
466+ elUploadRef .value .clearFiles ()
467+ ToolApi .postImportTool (formData , loading )
468+ .then (async (res : any ) => {
469+ if (res ?.data ) {
470+ toolList .value = []
471+ getList ()
472+ }
473+ })
474+ .catch ((e : any ) => {
475+ if (e .code === 400 ) {
476+ MsgConfirm (t (' common.tip' ), t (' views.application.tip.professionalMessage' ), {
477+ cancelButtonText: t (' common.confirm' ),
478+ confirmButtonText: t (' common.professional' ),
479+ }).then (() => {
480+ window .open (' https://maxkb.cn/pricing.html' , ' _blank' )
481+ })
482+ }
483+ })
484+ }
413485
414486onMounted (() => {
415487 getFolder ()
0 commit comments