mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-02-12 19:40:06 +08:00
feat: 修改文件选择组件
This commit is contained in:
parent
405db20980
commit
b002614759
@ -4,6 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/dto/request"
|
"github.com/1Panel-dev/1Panel/backend/app/dto/request"
|
||||||
"github.com/1Panel-dev/1Panel/backend/app/dto/response"
|
"github.com/1Panel-dev/1Panel/backend/app/dto/response"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/buserr"
|
||||||
|
"github.com/1Panel-dev/1Panel/backend/constant"
|
||||||
"io/fs"
|
"io/fs"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
@ -57,7 +59,6 @@ func (f FileService) GetFileTree(op request.FileOption) ([]response.FileTree, er
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f FileService) Create(op request.FileCreate) error {
|
func (f FileService) Create(op request.FileCreate) error {
|
||||||
|
|
||||||
fo := files.NewFileOp()
|
fo := files.NewFileOp()
|
||||||
if fo.Stat(op.Path) {
|
if fo.Stat(op.Path) {
|
||||||
return errors.New("file is exist")
|
return errors.New("file is exist")
|
||||||
@ -154,6 +155,10 @@ func (f FileService) Wget(w request.FileWget) (string, error) {
|
|||||||
|
|
||||||
func (f FileService) MvFile(m request.FileMove) error {
|
func (f FileService) MvFile(m request.FileMove) error {
|
||||||
fo := files.NewFileOp()
|
fo := files.NewFileOp()
|
||||||
|
if !fo.Stat(m.NewPath) {
|
||||||
|
return buserr.New(constant.ErrPathNotFound)
|
||||||
|
}
|
||||||
|
|
||||||
if m.Type == "cut" {
|
if m.Type == "cut" {
|
||||||
return fo.Cut(m.OldPaths, m.NewPath)
|
return fo.Cut(m.OldPaths, m.NewPath)
|
||||||
}
|
}
|
||||||
|
@ -70,3 +70,8 @@ var (
|
|||||||
ErrAccountCannotDelete = "ErrAccountCannotDelete"
|
ErrAccountCannotDelete = "ErrAccountCannotDelete"
|
||||||
ErrSSLApply = "ErrSSLApply"
|
ErrSSLApply = "ErrSSLApply"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//file
|
||||||
|
var (
|
||||||
|
ErrPathNotFound = "ErrPathNotFound"
|
||||||
|
)
|
||||||
|
@ -23,10 +23,10 @@ ErrAppRequired: "{{ .detail }} app is required"
|
|||||||
ErrNotInstall: "App not installed"
|
ErrNotInstall: "App not installed"
|
||||||
ErrPortInOtherApp: "{{ .port }} port already in use by {{ .apps }}"
|
ErrPortInOtherApp: "{{ .port }} port already in use by {{ .apps }}"
|
||||||
|
|
||||||
|
|
||||||
#file
|
#file
|
||||||
ErrFileCanNotRead: "File can not read"
|
ErrFileCanNotRead: "File can not read"
|
||||||
ErrFileToLarge: "file is too large"
|
ErrFileToLarge: "file is too large"
|
||||||
|
ErrPathNotFound: "Path is not found"
|
||||||
|
|
||||||
#website
|
#website
|
||||||
ErrDomainIsExist: "Domain is already exist"
|
ErrDomainIsExist: "Domain is already exist"
|
||||||
|
@ -26,6 +26,7 @@ ErrPortInOtherApp: "{{ .port }} 端口已被 {{ .apps }}占用!"
|
|||||||
#file
|
#file
|
||||||
ErrFileCanNotRead: "此文件不支持预览"
|
ErrFileCanNotRead: "此文件不支持预览"
|
||||||
ErrFileToLarge: "文件超过10M,无法打开"
|
ErrFileToLarge: "文件超过10M,无法打开"
|
||||||
|
ErrPathNotFound: "目录不存在"
|
||||||
|
|
||||||
#website
|
#website
|
||||||
ErrDomainIsExist: "域名已存在"
|
ErrDomainIsExist: "域名已存在"
|
||||||
|
1
frontend/components.d.ts
vendored
1
frontend/components.d.ts
vendored
@ -59,6 +59,7 @@ declare module 'vue' {
|
|||||||
ElRow: typeof import('element-plus/es')['ElRow']
|
ElRow: typeof import('element-plus/es')['ElRow']
|
||||||
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
||||||
ElSelect: typeof import('element-plus/es')['ElSelect']
|
ElSelect: typeof import('element-plus/es')['ElSelect']
|
||||||
|
ElSpan: typeof import('element-plus/es')['ElSpan']
|
||||||
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
|
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
|
||||||
ElSwitch: typeof import('element-plus/es')['ElSwitch']
|
ElSwitch: typeof import('element-plus/es')['ElSwitch']
|
||||||
ElTable: typeof import('element-plus/es')['ElTable']
|
ElTable: typeof import('element-plus/es')['ElTable']
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer :close-on-click-modal="false" v-model="open" size="30%">
|
<el-drawer :close-on-click-modal="false" v-model="open" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<Header :header="$t('commons.msg.operate')" :resource="resourceName" :back="handleClose"></Header>
|
<Header :header="$t('commons.msg.operate')" :resource="resourceName" :back="handleClose"></Header>
|
||||||
</template>
|
</template>
|
||||||
|
@ -19,11 +19,10 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="form.from === 'path'" prop="path">
|
<el-form-item v-if="form.from === 'path'" prop="path">
|
||||||
<el-input
|
<el-input
|
||||||
disabled
|
|
||||||
:placeholder="$t('commons.example') + '/tmp/docker-compose.yml'"
|
:placeholder="$t('commons.example') + '/tmp/docker-compose.yml'"
|
||||||
v-model="form.path"
|
v-model="form.path"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="loadDir" :dir="false"></FileList>
|
<FileList @choose="loadDir" :dir="false"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="newNameVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
|
<el-drawer v-model="newNameVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('container.rename')" :back="handleClose" />
|
<DrawerHeader :header="$t('container.rename')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-else :rules="Rules.requiredSelect" prop="dockerfile">
|
<el-form-item v-else :rules="Rules.requiredSelect" prop="dockerfile">
|
||||||
<el-input clearable v-model="form.dockerfile">
|
<el-input clearable v-model="form.dockerfile">
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="loadBuildDir" :dir="true"></FileList>
|
<FileList @choose="loadBuildDir" :dir="true"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="loadVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
|
<el-drawer v-model="loadVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('container.importImage')" :back="handleClose" />
|
<DrawerHeader :header="$t('container.importImage')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
<el-form v-loading="loading" ref="formRef" :model="form" label-position="top">
|
<el-form v-loading="loading" ref="formRef" :model="form" label-position="top">
|
||||||
<el-form-item :label="$t('container.path')" :rules="Rules.requiredSelect" prop="path">
|
<el-form-item :label="$t('container.path')" :rules="Rules.requiredSelect" prop="path">
|
||||||
<el-input disabled v-model="form.path">
|
<el-input v-model="form.path">
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="loadLoadDir" :dir="false"></FileList>
|
<FileList @choose="loadLoadDir" :dir="false"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('container.path')" :rules="Rules.requiredSelect" prop="path">
|
<el-form-item :label="$t('container.path')" :rules="Rules.requiredSelect" prop="path">
|
||||||
<el-input disabled v-model="form.path">
|
<el-input v-model="form.path">
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="loadSaveDir" :dir="true"></FileList>
|
<FileList @choose="loadSaveDir" :dir="true"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -93,8 +93,8 @@
|
|||||||
:label="$t('cronjob.sourceDir')"
|
:label="$t('cronjob.sourceDir')"
|
||||||
prop="sourceDir"
|
prop="sourceDir"
|
||||||
>
|
>
|
||||||
<el-input style="width: 100%" disabled v-model="dialogData.rowData!.sourceDir">
|
<el-input style="width: 100%" v-model="dialogData.rowData!.sourceDir">
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="loadDir" :dir="true"></FileList>
|
<FileList @choose="loadDir" :dir="true"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="dialogVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
|
<el-drawer v-model="dialogVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('database.remoteAccess')" :back="handleClose" />
|
<DrawerHeader :header="$t('database.remoteAccess')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="dialogVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="30%">
|
<el-drawer v-model="dialogVisiable" :destroy-on-close="true" :close-on-click-modal="false" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('database.rootPassword')" :back="handleClose" />
|
<DrawerHeader :header="$t('database.rootPassword')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
@ -30,8 +30,8 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('file.compressDst')" prop="dst">
|
<el-form-item :label="$t('file.compressDst')" prop="dst">
|
||||||
<el-input v-model="form.dst" disabled>
|
<el-input v-model="form.dst">
|
||||||
<template #append><FileList :path="form.dst" @choose="getLinkPath"></FileList></template>
|
<template #prepend><FileList :path="form.dst" @choose="getLinkPath"></FileList></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="addForm.isLink" :label="$t('file.linkPath')" prop="linkPath">
|
<el-form-item v-if="addForm.isLink" :label="$t('file.linkPath')" prop="linkPath">
|
||||||
<el-input v-model="addForm.linkPath">
|
<el-input v-model="addForm.linkPath">
|
||||||
<template #append>
|
<template #prepend>
|
||||||
<FileList @choose="getLinkPath"></FileList>
|
<FileList @choose="getLinkPath"></FileList>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
@ -4,14 +4,16 @@
|
|||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:before-close="handleClose"
|
:before-close="handleClose"
|
||||||
size="30%"
|
size="40%"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('file.deCompress')" :back="handleClose" />
|
<DrawerHeader :header="$t('file.deCompress')" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="22" :offset="1">
|
||||||
<el-form
|
<el-form
|
||||||
ref="fileForm"
|
ref="fileForm"
|
||||||
label-position="left"
|
label-position="top"
|
||||||
:model="form"
|
:model="form"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
@ -21,11 +23,13 @@
|
|||||||
<el-input v-model="name" disabled></el-input>
|
<el-input v-model="name" disabled></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('file.deCompressDst')" prop="dst">
|
<el-form-item :label="$t('file.deCompressDst')" prop="dst">
|
||||||
<el-input v-model="form.dst" disabled>
|
<el-input v-model="form.dst">
|
||||||
<template #append><FileList :path="form.dst" @choose="getLinkPath"></FileList></template>
|
<template #prepend><FileList :path="form.dst" @choose="getLinkPath"></FileList></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
|
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:before-close="handleClose"
|
:before-close="handleClose"
|
||||||
size="30%"
|
size="40%"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('file.download')" :back="handleClose" />
|
<DrawerHeader :header="$t('file.download')" :back="handleClose" />
|
||||||
|
@ -4,25 +4,29 @@
|
|||||||
:destroy-on-close="true"
|
:destroy-on-close="true"
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:before-close="handleClose"
|
:before-close="handleClose"
|
||||||
size="30%"
|
size="40%"
|
||||||
>
|
>
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="title" :back="handleClose" />
|
<DrawerHeader :header="title" :back="handleClose" />
|
||||||
</template>
|
</template>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="22" :offset="1">
|
||||||
<el-form
|
<el-form
|
||||||
ref="fileForm"
|
ref="fileForm"
|
||||||
label-position="left"
|
label-position="top"
|
||||||
:model="addForm"
|
:model="addForm"
|
||||||
label-width="100px"
|
label-width="100px"
|
||||||
:rules="rules"
|
:rules="rules"
|
||||||
v-loading="loading"
|
v-loading="loading"
|
||||||
>
|
>
|
||||||
<el-form-item :label="$t('file.path')" prop="newPath">
|
<el-form-item :label="$t('file.path')" prop="newPath">
|
||||||
<el-input v-model="addForm.newPath" disabled>
|
<el-input v-model="addForm.newPath">
|
||||||
<template #append><FileList @choose="getPath" :dir="true"></FileList></template>
|
<template #prepend><FileList @choose="getPath" :dir="true"></FileList></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span class="dialog-footer">
|
<span class="dialog-footer">
|
||||||
<el-button @click="handleClose" :disabled="loading">{{ $t('commons.button.cancel') }}</el-button>
|
<el-button @click="handleClose" :disabled="loading">{{ $t('commons.button.cancel') }}</el-button>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="open" :before-close="handleClose" :title="$t('file.rename')" size="30%">
|
<el-drawer v-model="open" :before-close="handleClose" :title="$t('file.rename')" size="40%">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="22" :offset="1">
|
<el-col :span="22" :offset="1">
|
||||||
<el-form
|
<el-form
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
<el-input v-model="addForm.url" @input="getFileName" />
|
<el-input v-model="addForm.url" @input="getFileName" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('file.path')" prop="path">
|
<el-form-item :label="$t('file.path')" prop="path">
|
||||||
<el-input v-model="addForm.path" disabled>
|
<el-input v-model="addForm.path">
|
||||||
<template #append><FileList :path="addForm.path" @choose="getPath"></FileList></template>
|
<template #prepend><FileList :path="addForm.path" @choose="getPath"></FileList></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="$t('file.name')" prop="name">
|
<el-form-item :label="$t('file.name')" prop="name">
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
prop="varsJson['dir']"
|
prop="varsJson['dir']"
|
||||||
:rules="Rules.requiredInput"
|
:rules="Rules.requiredInput"
|
||||||
>
|
>
|
||||||
<el-input disabled v-model="dialogData.rowData!.varsJson['dir']">
|
<el-input v-model="dialogData.rowData!.varsJson['dir']">
|
||||||
<template #append>
|
<template #append>
|
||||||
<FileList @choose="loadDir" :dir="true"></FileList>
|
<FileList @choose="loadDir" :dir="true"></FileList>
|
||||||
</template>
|
</template>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer :close-on-click-modal="false" v-model="open" size="30%">
|
<el-drawer :close-on-click-modal="false" v-model="open" size="40%">
|
||||||
<template #header>
|
<template #header>
|
||||||
<DrawerHeader :header="$t('website.defaulServer')" :back="handleClose"></DrawerHeader>
|
<DrawerHeader :header="$t('website.defaulServer')" :back="handleClose"></DrawerHeader>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user