2025-07-03 18:05:32 +08:00

152 lines
4.6 KiB
Vue

<template>
<div>
<el-dialog
v-model="state.showDialog"
destroy-on-close
title="加载共享文件夹"
draggable
:close-on-click-modal="false"
:close-on-press-escape="false"
width="600px"
>
<el-form :model="form" ref="formRef" label-width="120px">
<el-alert
v-if="state.isReadonly"
title="当前为指定文件夹加载模式,父级文件夹和文件路径已自动设置"
type="info"
:closable="false"
style="margin-bottom: 20px"
/>
<el-row :gutter="35">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="父级文件夹">
<el-input
v-if="state.isReadonly"
v-model="state.parentName"
readonly
placeholder="根目录"
class="w100"
/>
<el-tree-select
v-else
v-model="form.parentId"
:data="templateTreeData.filter(item => (item.type || 1) === 1)"
node-key="id"
check-strictly
default-expand-all
render-after-expand
fit-input-width
clearable
:empty-values="[0, null, undefined]"
class="w100"
:props="{ label: 'name', value: 'id' }"
placeholder="请选择父级文件夹,为空则表示根目录"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="文件夹路径" prop="folderPath" :rules="[{ required: true, message: '请输入文件夹路径', trigger: ['blur', 'change'] }]">
<el-input
v-model="form.folderPath"
:readonly="state.isReadonly"
clearable
placeholder="请输入共享文件夹路径"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="包含子文件夹">
<el-switch v-model="form.includeSubfolders" />
<el-text type="info" size="small" style="margin-left: 10px">
是否包含子文件夹内容
</el-text>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel"> </el-button>
<el-button type="primary" @click="onSure" :loading="state.sureLoading">开始加载</el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<script lang="ts" setup name="admin/templatecenter/folder-load-form">
import { reactive, toRefs, getCurrentInstance, ref, PropType } from 'vue'
import { TemplateCenterGetTreeOutput } from '/@/api/admin/TemplateCenter'
import { TemplateCenterApi } from '/@/api/admin/TemplateCenter'
import eventBus from '/@/utils/mitt'
defineProps({
templateTreeData: {
type: Array as PropType<TemplateCenterGetTreeOutput[]>,
default: () => [],
},
})
const { proxy } = getCurrentInstance() as any
const formRef = ref()
const state = reactive({
showDialog: false,
sureLoading: false,
isReadonly: false,
parentName: '',
form: {
parentId: undefined as number | undefined,
folderPath: '',
includeSubfolders: false,
},
})
const { form } = toRefs(state)
// 打开对话框
const open = async (parentId?: number, parentName?: string, folderPath?: string) => {
state.isReadonly = !!(parentId && parentName) // 如果传入了父级信息,则为只读模式
state.parentName = parentName || ''
state.form = {
parentId: parentId || undefined,
folderPath: folderPath || '',
includeSubfolders: false,
}
state.showDialog = true
}
// 取消
const onCancel = () => {
state.showDialog = false
}
// 确定
const onSure = () => {
formRef.value.validate(async (valid: boolean) => {
if (!valid) return
state.sureLoading = true
const res = await new TemplateCenterApi().getSharedFolderContent({
folderPath: state.form.folderPath,
parentId: state.form.parentId && state.form.parentId > 0 ? state.form.parentId : undefined,
includeSubfolders: state.form.includeSubfolders,
}, { showSuccessMessage: true }).catch(() => {
state.sureLoading = false
})
state.sureLoading = false
if (res?.success) {
eventBus.emit('refreshTemplateCenter')
state.showDialog = false
}
})
}
defineExpose({
open,
})
</script>
<style scoped lang="scss"></style>