4 changed files with 1899 additions and 1974 deletions
File diff suppressed because it is too large
@ -1,414 +1,368 @@ |
|||||
<template> |
<template> |
||||
<div> |
<div> |
||||
<Row class="operation" v-if="!showOnly"> |
<Row class="operation" v-if="!showOnly"> |
||||
<Button @click="add" type="primary" icon="md-add">添加文件夹</Button> |
<Button @click="add" type="primary" icon="md-add">添加文件夹</Button> |
||||
<Dropdown @on-click="handleTreeDropdown"> |
<Dropdown @on-click="handleTreeDropdown"> |
||||
<Button> |
<Button> |
||||
更多操作 |
更多操作 |
||||
<Icon type="md-arrow-dropdown" /> |
<Icon type="md-arrow-dropdown" /> |
||||
</Button> |
</Button> |
||||
<DropdownMenu slot="list"> |
<DropdownMenu slot="list"> |
||||
<DropdownItem |
<DropdownItem name="edit" :disabled="selectNode.id == 0 || selectNode.id == -1">编辑文件夹</DropdownItem> |
||||
name="edit" |
<DropdownItem name="del" :disabled="selectNode.id == 0 || selectNode.id == -1">删除文件夹</DropdownItem> |
||||
:disabled="selectNode.id == 0 || selectNode.id == -1" |
<DropdownItem name="refresh">刷新</DropdownItem> |
||||
>编辑文件夹</DropdownItem |
</DropdownMenu> |
||||
> |
</Dropdown> |
||||
<DropdownItem |
</Row> |
||||
name="del" |
<Alert show-icon v-if="!showOnly"> |
||||
:disabled="selectNode.id == 0 || selectNode.id == -1" |
当前选择: |
||||
>删除文件夹</DropdownItem |
<span class="select-title">{{ editTitle }}</span> |
||||
> |
<a class="select-clear" v-if="editTitle && selectNode.id != '0'" @click="cancelEdit">取消选择</a> |
||||
<DropdownItem name="refresh">刷新</DropdownItem> |
</Alert> |
||||
</DropdownMenu> |
<Input v-model="searchKey" suffix="ios-search" @on-change="search" placeholder="输入搜索文件夹名称" clearable /> |
||||
</Dropdown> |
<div style="position: relative"> |
||||
</Row> |
<div class="tree-bar" :style="{ maxHeight: maxHeight }"> |
||||
<Alert show-icon v-if="!showOnly"> |
<Tree ref="tree" :data="data" :load-data="loadData" :render="renderContent" |
||||
当前选择: |
@on-check-change="changeSelect" @on-select-change="selectTree"></Tree> |
||||
<span class="select-title">{{ editTitle }}</span> |
</div> |
||||
<a |
<Spin size="large" fix v-if="loading"></Spin> |
||||
class="select-clear" |
</div> |
||||
v-if="editTitle && selectNode.id != '0'" |
|
||||
@click="cancelEdit" |
|
||||
>取消选择</a |
|
||||
> |
|
||||
</Alert> |
|
||||
<Input |
|
||||
v-model="searchKey" |
|
||||
suffix="ios-search" |
|
||||
@on-change="search" |
|
||||
placeholder="输入搜索文件夹名称" |
|
||||
clearable |
|
||||
/> |
|
||||
<div style="position: relative"> |
|
||||
<div class="tree-bar" :style="{ maxHeight: maxHeight }"> |
|
||||
<Tree |
|
||||
ref="tree" |
|
||||
:data="data" |
|
||||
:load-data="loadData" |
|
||||
:render="renderContent" |
|
||||
@on-check-change="changeSelect" |
|
||||
@on-select-change="selectTree" |
|
||||
></Tree> |
|
||||
</div> |
|
||||
<Spin size="large" fix v-if="loading"></Spin> |
|
||||
</div> |
|
||||
|
|
||||
<Modal |
<Modal :title="modalTitle" v-model="modalVisible" :mask-closable="false" :width="500"> |
||||
:title="modalTitle" |
<Form ref="form" :model="form" :label-width="85" :rules="formValidate"> |
||||
v-model="modalVisible" |
<FormItem label="上级节点:">{{ form.parentTitle }} |
||||
:mask-closable="false" |
<Tooltip :content=" |
||||
:width="500" |
|
||||
> |
|
||||
<Form ref="form" :model="form" :label-width="85" :rules="formValidate"> |
|
||||
<FormItem label="上级节点:" |
|
||||
>{{ form.parentTitle }} |
|
||||
<Tooltip |
|
||||
:content=" |
|
||||
selectNode.id == '0' |
selectNode.id == '0' |
||||
? '若需添加子目录,请先点击选择一个文件夹' |
? '若需添加子目录,请先点击选择一个文件夹' |
||||
: '若需添加一级目录,请先取消选择当前文目录' |
: '若需添加一级目录,请先取消选择当前文目录' |
||||
" |
" placement="right" transfer max-width="290" style="display: inline-block !important"> |
||||
placement="right" |
<Icon type="md-help-circle" size="20" color="#c5c5c5" |
||||
transfer |
style="margin-left: 10px; cursor: pointer" /> |
||||
max-width="290" |
</Tooltip> |
||||
style="display: inline-block !important" |
</FormItem> |
||||
> |
<FormItem label="文件夹名" prop="title"> |
||||
<Icon |
<Input v-model="form.title" /> |
||||
type="md-help-circle" |
</FormItem> |
||||
size="20" |
<FormItem label="排序值" prop="sortOrder"> |
||||
color="#c5c5c5" |
<Tooltip trigger="hover" placement="right" content="值越小越靠前,支持小数"> |
||||
style="margin-left: 10px; cursor: pointer" |
<InputNumber :max="1000" :min="0" v-model="form.sortOrder"></InputNumber> |
||||
/> |
</Tooltip> |
||||
</Tooltip> |
</FormItem> |
||||
</FormItem> |
</Form> |
||||
<FormItem label="文件夹名" prop="title"> |
<div slot="footer"> |
||||
<Input v-model="form.title" /> |
<Button type="text" @click="modalVisible = false">取消</Button> |
||||
</FormItem> |
<Button type="primary" :loading="submitLoading" @click="handelSubmit">提交</Button> |
||||
<FormItem label="排序值" prop="sortOrder"> |
</div> |
||||
<Tooltip |
</Modal> |
||||
trigger="hover" |
</div> |
||||
placement="right" |
|
||||
content="值越小越靠前,支持小数" |
|
||||
> |
|
||||
<InputNumber |
|
||||
:max="1000" |
|
||||
:min="0" |
|
||||
v-model="form.sortOrder" |
|
||||
></InputNumber> |
|
||||
</Tooltip> |
|
||||
</FormItem> |
|
||||
</Form> |
|
||||
<div slot="footer"> |
|
||||
<Button type="text" @click="modalVisible = false">取消</Button> |
|
||||
<Button type="primary" :loading="submitLoading" @click="handelSubmit" |
|
||||
>提交</Button |
|
||||
> |
|
||||
</div> |
|
||||
</Modal> |
|
||||
</div> |
|
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import { |
import { |
||||
getFileCate, |
getFileCate, |
||||
addFileCate, |
addFileCate, |
||||
editFileCate, |
editFileCate, |
||||
trashFileCate, |
trashFileCate, |
||||
searchFileCate, |
searchFileCate, |
||||
} from "@/api/index"; |
} from "@/api/index"; |
||||
export default { |
export default { |
||||
name: "fileCategory", |
name: "fileCategory", |
||||
props: { |
props: { |
||||
showOnly: { |
showOnly: { |
||||
type: Boolean, |
type: Boolean, |
||||
default: false, |
default: false, |
||||
}, |
}, |
||||
}, |
}, |
||||
data() { |
data() { |
||||
return { |
return { |
||||
loading: false, // 树加载状态 |
loading: false, // 树加载状态 |
||||
maxHeight: "500px", |
maxHeight: "500px", |
||||
searchKey: "", // 搜索树 |
searchKey: "", // 搜索树 |
||||
selectNode: {}, |
selectNode: {}, |
||||
selectList: [], // 多选数据 |
selectList: [], // 多选数据 |
||||
modalVisible: false, |
modalVisible: false, |
||||
modalTitle: "", |
modalTitle: "", |
||||
editTitle: "", |
editTitle: "", |
||||
submitLoading: false, |
submitLoading: false, |
||||
form: { |
form: { |
||||
title: "", |
title: "", |
||||
sortOrder: 0, |
sortOrder: 0, |
||||
parentId: 0, |
parentId: 0, |
||||
}, |
}, |
||||
formValidate: { |
formValidate: { |
||||
// 表单验证规则 |
// 表单验证规则 |
||||
title: [{ required: true, message: "请输入", trigger: "blur" }], |
title: [{ |
||||
sortOrder: [ |
required: true, |
||||
{ |
message: "请输入", |
||||
required: true, |
trigger: "blur" |
||||
type: "number", |
}], |
||||
message: "请输入排序值", |
sortOrder: [{ |
||||
trigger: "change", |
required: true, |
||||
}, |
type: "number", |
||||
], |
message: "请输入排序值", |
||||
}, |
trigger: "change", |
||||
data: [], |
}, ], |
||||
editData: {}, |
}, |
||||
}; |
data: [], |
||||
}, |
editData: {}, |
||||
methods: { |
}; |
||||
init() { |
}, |
||||
this.getParentList(); |
methods: { |
||||
this.editTitle = "未归档"; |
init() { |
||||
this.selectNode = { |
this.getParentList(); |
||||
id: "0", |
this.editTitle = "未归档"; |
||||
title: "未归档", |
this.selectNode = { |
||||
}; |
id: "0", |
||||
this.$emit("on-select", this.selectNode); |
title: "未归档", |
||||
}, |
}; |
||||
renderContent(h, { root, node, data }) { |
this.$emit("on-select", this.selectNode); |
||||
let icon = "md-folder-open"; |
}, |
||||
if (data.id == "0") { |
renderContent(h, { |
||||
icon = "md-pricetags"; |
root, |
||||
} else if (data.id == "-1") { |
node, |
||||
icon = "md-star-outline"; |
data |
||||
} |
}) { |
||||
return h("span", [ |
let icon = "md-folder-open"; |
||||
h( |
if (data.id == "0") { |
||||
"span", |
icon = "md-pricetags"; |
||||
|
} else if (data.id == "-1") { |
||||
|
icon = "md-star-outline"; |
||||
|
} |
||||
|
return h("span", [ |
||||
|
h( |
||||
|
"span", |
||||
|
|
||||
[ |
[ |
||||
h("Icon", { |
h("Icon", { |
||||
props: { |
props: { |
||||
type: icon, |
type: icon, |
||||
size: 16, |
size: 16, |
||||
}, |
}, |
||||
style: { |
style: { |
||||
"margin-right": "8px", |
"margin-right": "8px", |
||||
}, |
}, |
||||
}), |
}), |
||||
h("span", data.title), |
h("span", data.title), |
||||
] |
] |
||||
), |
), |
||||
]); |
]); |
||||
}, |
}, |
||||
getParentList() { |
getParentList() { |
||||
this.loading = true; |
this.loading = true; |
||||
let param = { |
let param = { |
||||
parentId: 0, |
parentId: 0, |
||||
delFlag: 0, |
delFlag: 0, |
||||
}; |
}; |
||||
getFileCate(param).then((res) => { |
getFileCate(param).then((res) => { |
||||
this.loading = false; |
this.loading = false; |
||||
if (res.success) { |
if (res.success) { |
||||
res.result.forEach(function (e) { |
res.result.forEach(function(e) { |
||||
if (e.isParent) { |
if (e.isParent) { |
||||
e.loading = false; |
e.loading = false; |
||||
e.children = []; |
e.children = []; |
||||
e._loading = false; |
e._loading = false; |
||||
} |
} |
||||
}); |
}); |
||||
this.data = res.result; |
this.data = res.result; |
||||
this.data.unshift( |
this.data.unshift({ |
||||
{ |
id: "0", |
||||
id: "0", |
title: "未归档", |
||||
title: "未归档", |
selected: true, |
||||
selected: true, |
}, { |
||||
}, |
id: "-1", |
||||
{ |
title: "收藏夹", |
||||
id: "-1", |
selected: false, |
||||
title: "收藏夹", |
}); |
||||
selected: false, |
} |
||||
} |
}); |
||||
); |
}, |
||||
} |
loadData(item, callback) { |
||||
}); |
let param = { |
||||
}, |
parentId: item.id, |
||||
loadData(item, callback) { |
delFlag: 0, |
||||
let param = { |
}; |
||||
parentId: item.id, |
getFileCate(param).then((res) => { |
||||
delFlag: 0, |
if (res.success) { |
||||
}; |
res.result.forEach(function(e) { |
||||
getFileCate(param).then((res) => { |
if (e.isParent) { |
||||
if (res.success) { |
e.loading = false; |
||||
res.result.forEach(function (e) { |
e.children = []; |
||||
if (e.isParent) { |
e._loading = false; |
||||
e.loading = false; |
} |
||||
e.children = []; |
}); |
||||
e._loading = false; |
callback(res.result); |
||||
} |
} |
||||
}); |
}); |
||||
callback(res.result); |
}, |
||||
} |
search() { |
||||
}); |
// 搜索树 |
||||
}, |
if (this.searchKey) { |
||||
search() { |
this.loading = true; |
||||
// 搜索树 |
searchFileCate({ |
||||
if (this.searchKey) { |
title: this.searchKey |
||||
this.loading = true; |
}).then((res) => { |
||||
searchFileCate({ title: this.searchKey }).then((res) => { |
this.loading = false; |
||||
this.loading = false; |
if (res.success) { |
||||
if (res.success) { |
this.data = res.result; |
||||
this.data = res.result; |
} |
||||
} |
}); |
||||
}); |
} else { |
||||
} else { |
// 为空重新加载 |
||||
// 为空重新加载 |
this.getParentList(); |
||||
this.getParentList(); |
} |
||||
} |
}, |
||||
}, |
selectTree(v) { |
||||
selectTree(v) { |
if (v.length > 0) { |
||||
if (v.length > 0) { |
this.$refs.form.resetFields(); |
||||
this.$refs.form.resetFields(); |
// 转换null为"" |
||||
// 转换null为"" |
for (let attr in v[0]) { |
||||
for (let attr in v[0]) { |
if (v[0][attr] == null) { |
||||
if (v[0][attr] == null) { |
v[0][attr] = ""; |
||||
v[0][attr] = ""; |
} |
||||
} |
} |
||||
} |
let str = JSON.stringify(v[0]); |
||||
let str = JSON.stringify(v[0]); |
let data = JSON.parse(str); |
||||
let data = JSON.parse(str); |
this.selectNode = data; |
||||
this.selectNode = data; |
this.form = data; |
||||
this.form = data; |
this.editData = data; |
||||
this.editData = data; |
this.editTitle = data.title; |
||||
this.editTitle = data.title; |
this.$emit("on-select", this.selectNode); |
||||
this.$emit("on-select", this.selectNode); |
} else { |
||||
} else { |
this.cancelEdit(); |
||||
this.cancelEdit(); |
} |
||||
} |
}, |
||||
}, |
cancelEdit() { |
||||
cancelEdit() { |
if (this.selectNode.id == "0") { |
||||
if (this.selectNode.id == "0") { |
this.data[0].selected = true; |
||||
this.data[0].selected = true; |
return; |
||||
return; |
} |
||||
} |
let data = this.$refs.tree.getSelectedNodes()[0]; |
||||
let data = this.$refs.tree.getSelectedNodes()[0]; |
if (data) { |
||||
if (data) { |
data.selected = false; |
||||
data.selected = false; |
} |
||||
} |
this.$refs.form.resetFields(); |
||||
this.$refs.form.resetFields(); |
this.editData = {}; |
||||
this.editData = {}; |
// 取消选择后获取全部数据 |
||||
// 取消选择后获取全部数据 |
this.selectNode = { |
||||
this.selectNode = { |
id: "0", |
||||
id: "0", |
title: "未归档", |
||||
title: "未归档", |
}; |
||||
}; |
this.editTitle = "未归档"; |
||||
this.editTitle = "未归档"; |
this.data[0].selected = true; |
||||
this.data[0].selected = true; |
this.$emit("on-select", this.selectNode); |
||||
this.$emit("on-select", this.selectNode); |
}, |
||||
}, |
changeSelect(v) { |
||||
changeSelect(v) { |
this.selectList = v; |
||||
this.selectList = v; |
}, |
||||
}, |
handleTreeDropdown(name) { |
||||
handleTreeDropdown(name) { |
if (name == "edit") { |
||||
if (name == "edit") { |
this.edit(); |
||||
this.edit(); |
} else if (name == "del") { |
||||
} else if (name == "del") { |
this.del(); |
||||
this.del(); |
} else if (name == "refresh") { |
||||
} else if (name == "refresh") { |
this.init(); |
||||
this.init(); |
} |
||||
} |
}, |
||||
}, |
add() { |
||||
add() { |
this.modalType = 0; |
||||
this.modalType = 0; |
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
||||
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
// 一级目录 |
||||
// 一级目录 |
this.modalTitle = "添加一级文件夹"; |
||||
this.modalTitle = "添加一级文件夹"; |
this.form = { |
||||
this.form = { |
parentId: "0", |
||||
parentId: "0", |
parentTitle: "一级目录", |
||||
parentTitle: "一级目录", |
sortOrder: this.data.length + 1, |
||||
sortOrder: this.data.length + 1, |
}; |
||||
}; |
} else { |
||||
} else { |
// 子目录 |
||||
// 子目录 |
this.modalTitle = "添加子文件夹"; |
||||
this.modalTitle = "添加子文件夹"; |
if (!this.form.children) { |
||||
if (!this.form.children) { |
this.form.children = []; |
||||
this.form.children = []; |
} |
||||
} |
this.form = { |
||||
this.form = { |
parentId: this.selectNode.id, |
||||
parentId: this.selectNode.id, |
parentTitle: this.selectNode.title, |
||||
parentTitle: this.selectNode.title, |
sortOrder: this.form.children.length + 1, |
||||
sortOrder: this.form.children.length + 1, |
}; |
||||
}; |
} |
||||
} |
this.modalVisible = true; |
||||
this.modalVisible = true; |
}, |
||||
}, |
edit() { |
||||
edit() { |
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
||||
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
this.$Message.warning("您还未选择要编辑的文件夹"); |
||||
this.$Message.warning("您还未选择要编辑的文件夹"); |
return; |
||||
return; |
} |
||||
} |
if (this.editData) { |
||||
if (this.editData) { |
this.form = this.editData; |
||||
this.form = this.editData; |
} |
||||
} |
this.modalType = 1; |
||||
this.modalType = 1; |
this.modalTitle = "编辑文件夹"; |
||||
this.modalTitle = "编辑文件夹"; |
this.modalVisible = true; |
||||
this.modalVisible = true; |
}, |
||||
}, |
handelSubmit() { |
||||
handelSubmit() { |
this.$refs.form.validate((valid) => { |
||||
this.$refs.form.validate((valid) => { |
if (valid) { |
||||
if (valid) { |
this.submitLoading = true; |
||||
this.submitLoading = true; |
if (this.modalType == 0) { |
||||
if (this.modalType == 0) { |
// 添加 避免编辑后传入id等数据 记得删除 |
||||
// 添加 避免编辑后传入id等数据 记得删除 |
delete this.form.id; |
||||
delete this.form.id; |
addFileCate(this.form).then((res) => { |
||||
addFileCate(this.form).then((res) => { |
this.submitLoading = false; |
||||
this.submitLoading = false; |
if (res.success) { |
||||
if (res.success) { |
this.$Message.success("操作成功"); |
||||
this.$Message.success("操作成功"); |
this.getParentList(); |
||||
this.getParentList(); |
this.modalVisible = false; |
||||
this.modalVisible = false; |
} |
||||
} |
}); |
||||
}); |
} else if (this.modalType == 1) { |
||||
} else if (this.modalType == 1) { |
// 编辑 |
||||
// 编辑 |
editFileCate(this.form).then((res) => { |
||||
editFileCate(this.form).then((res) => { |
this.submitLoading = false; |
||||
this.submitLoading = false; |
if (res.success) { |
||||
if (res.success) { |
this.editTitle = this.form.title; |
||||
this.editTitle = this.form.title; |
this.$Message.success("操作成功"); |
||||
this.$Message.success("操作成功"); |
this.getParentList(); |
||||
this.getParentList(); |
this.modalVisible = false; |
||||
this.modalVisible = false; |
} |
||||
} |
}); |
||||
}); |
} |
||||
} |
} |
||||
} |
}); |
||||
}); |
}, |
||||
}, |
del() { |
||||
del() { |
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
||||
if (this.selectNode.id == "0" || this.selectNode.id == "-1") { |
this.$Message.warning("您还未选择要删除的文件夹"); |
||||
this.$Message.warning("您还未选择要删除的文件夹"); |
return; |
||||
return; |
} |
||||
} |
this.$Modal.confirm({ |
||||
this.$Modal.confirm({ |
title: "确认删除", |
||||
title: "确认删除", |
loading: true, |
||||
loading: true, |
content: "您确认要将文件夹 " + |
||||
content: |
this.selectNode.title + |
||||
"您确认要将文件夹 " + |
" 及其所有文件移入回收站, 7天内后自动彻底删除", |
||||
this.selectNode.title + |
onOk: () => { |
||||
" 及其所有文件移入回收站, 7天内后自动彻底删除", |
// 删除 |
||||
onOk: () => { |
trashFileCate({ |
||||
// 删除 |
id: this.selectNode.id |
||||
trashFileCate({ id: this.selectNode.id }).then((res) => { |
}).then((res) => { |
||||
this.$Modal.remove(); |
this.$Modal.remove(); |
||||
if (res.success) { |
if (res.success) { |
||||
this.$Message.success("操作成功"); |
this.$Message.success("操作成功"); |
||||
this.init(); |
this.init(); |
||||
} |
} |
||||
}); |
}); |
||||
}, |
}, |
||||
}); |
}); |
||||
}, |
}, |
||||
}, |
}, |
||||
mounted() { |
mounted() { |
||||
// 计算高度 |
// 计算高度 |
||||
let height = document.documentElement.clientHeight; |
let height = document.documentElement.clientHeight; |
||||
this.maxHeight = Number(height - 287) + "px"; |
this.maxHeight = Number(height - 287) + "px"; |
||||
this.init(); |
this.init(); |
||||
}, |
}, |
||||
}; |
}; |
||||
</script> |
</script> |
||||
|
|
||||
<style lang="less"> |
<style lang="less"> |
||||
</style> |
</style> |
||||
|
|
||||
@ -1,403 +1,373 @@ |
|||||
<style lang="less"> |
<style lang="less"> |
||||
@import "@/styles/single-common.less"; |
@import "@/styles/single-common.less"; |
||||
</style> |
</style> |
||||
<template> |
<template> |
||||
<div> |
<div> |
||||
<Card> |
<Card> |
||||
<div slot="title"> |
<div slot="title"> |
||||
<div class="edit-head"> |
<div class="edit-head"> |
||||
<a @click="close" class="back-title"> |
<a @click="close" class="back-title"> |
||||
<Icon type="ios-arrow-back" />返回 |
<Icon type="ios-arrow-back" />返回 |
||||
</a> |
</a> |
||||
<div class="head-name">回收站</div> |
<div class="head-name">回收站</div> |
||||
<span></span> |
<span></span> |
||||
<a @click="close" class="window-close"> |
<a @click="close" class="window-close"> |
||||
<Icon type="ios-close" size="31" class="ivu-icon-ios-close" /> |
<Icon type="ios-close" size="31" class="ivu-icon-ios-close" /> |
||||
</a> |
</a> |
||||
</div> |
</div> |
||||
</div> |
</div> |
||||
<Row class="operation" align="middle" justify="space-between"> |
<Row class="operation" align="middle" justify="space-between"> |
||||
<div class="br"> |
<div class="br"> |
||||
<Button @click="clear" type="error" icon="md-trash" |
<Button @click="clear" type="error" icon="md-trash">清空回收站</Button> |
||||
>清空回收站</Button |
<Input v-model="searchForm.title" suffix="ios-search" @on-change="getDataList" placeholder="输入文件名搜索" |
||||
> |
clearable style="width: 250px" /> |
||||
<Input |
</div> |
||||
v-model="searchForm.title" |
<div class="icons"> |
||||
suffix="ios-search" |
<Tooltip content="刷新" placement="top" transfer> |
||||
@on-change="getDataList" |
<Icon type="md-refresh" size="18" class="item" @click="getDataList" /> |
||||
placeholder="输入文件名搜索" |
</Tooltip> |
||||
clearable |
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer> |
||||
style="width: 250px" |
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" /> |
||||
/> |
</Tooltip> |
||||
</div> |
</div> |
||||
<div class="icons"> |
</Row> |
||||
<Tooltip content="刷新" placement="top" transfer> |
<Alert show-icon v-show="openTip"> |
||||
<Icon |
已选择 |
||||
type="md-refresh" |
<span class="select-count">{{ selectList.length }}</span> 项 |
||||
size="18" |
<a class="select-clear" @click="clearSelectAll">清空</a> |
||||
class="item" |
</Alert> |
||||
@click="getDataList" |
<Table :loading="loading" border :columns="columns" :data="data" ref="table" sortable="custom" |
||||
/> |
@on-sort-change="changeSort" @on-selection-change="changeSelect"></Table> |
||||
</Tooltip> |
<Row type="flex" justify="end" class="page"> |
||||
<Tooltip |
<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize" |
||||
:content="openTip ? '关闭提示' : '开启提示'" |
@on-change="changePage" size="small" show-total show-elevator></Page> |
||||
placement="top" |
</Row> |
||||
transfer |
</Card> |
||||
> |
</div> |
||||
<Icon |
|
||||
type="md-bulb" |
|
||||
size="18" |
|
||||
class="item tip" |
|
||||
@click="openTip = !openTip" |
|
||||
/> |
|
||||
</Tooltip> |
|
||||
</div> |
|
||||
</Row> |
|
||||
<Alert show-icon v-show="openTip"> |
|
||||
已选择 |
|
||||
<span class="select-count">{{ selectList.length }}</span> 项 |
|
||||
<a class="select-clear" @click="clearSelectAll">清空</a> |
|
||||
</Alert> |
|
||||
<Table |
|
||||
:loading="loading" |
|
||||
border |
|
||||
:columns="columns" |
|
||||
:data="data" |
|
||||
ref="table" |
|
||||
sortable="custom" |
|
||||
@on-sort-change="changeSort" |
|
||||
@on-selection-change="changeSelect" |
|
||||
></Table> |
|
||||
<Row type="flex" justify="end" class="page"> |
|
||||
<Page |
|
||||
:current="searchForm.pageNumber" |
|
||||
:total="total" |
|
||||
:page-size="searchForm.pageSize" |
|
||||
@on-change="changePage" |
|
||||
size="small" |
|
||||
show-total |
|
||||
show-elevator |
|
||||
></Page> |
|
||||
</Row> |
|
||||
</Card> |
|
||||
</div> |
|
||||
</template> |
</template> |
||||
|
|
||||
<script> |
<script> |
||||
import { |
import { |
||||
getFileCate, |
getFileCate, |
||||
getUserFileListData, |
getUserFileListData, |
||||
trashFileCate, |
trashFileCate, |
||||
trashFile, |
trashFile, |
||||
deleteUserFile, |
deleteUserFile, |
||||
clearTrashFile, |
clearTrashFile, |
||||
deleteFileCate, |
deleteFileCate, |
||||
clearTrashFileCate, |
clearTrashFileCate, |
||||
} from "@/api/index"; |
} from "@/api/index"; |
||||
import { vi } from "date-fns/locale"; |
import { |
||||
export default { |
vi |
||||
name: "trash", |
} from "date-fns/locale"; |
||||
data() { |
export default { |
||||
return { |
name: "trash", |
||||
loading: false, |
data() { |
||||
openTip: true, |
return { |
||||
selectList: [], |
loading: false, |
||||
searchForm: { |
openTip: true, |
||||
// 搜索框对应data对象 |
selectList: [], |
||||
title: "", |
searchForm: { |
||||
pageNumber: 1, // 当前页数 |
// 搜索框对应data对象 |
||||
pageSize: 10, // 页面大小 |
title: "", |
||||
sort: "updateTime", // 默认排序字段 |
pageNumber: 1, // 当前页数 |
||||
order: "desc", // 默认排序方式 |
pageSize: 10, // 页面大小 |
||||
delFlag: 2, |
sort: "updateTime", // 默认排序字段 |
||||
}, |
order: "desc", // 默认排序方式 |
||||
columns: [ |
delFlag: 2, |
||||
// 表头 |
}, |
||||
{ |
columns: [ |
||||
type: "selection", |
// 表头 |
||||
width: 60, |
{ |
||||
align: "center", |
type: "selection", |
||||
}, |
width: 60, |
||||
{ |
align: "center", |
||||
type: "index", |
}, |
||||
width: 60, |
{ |
||||
align: "center", |
type: "index", |
||||
}, |
width: 60, |
||||
{ |
align: "center", |
||||
title: "文件名", |
}, |
||||
key: "title", |
{ |
||||
minWidth: 150, |
title: "文件名", |
||||
sortable: true, |
key: "title", |
||||
render: (h, params) => { |
minWidth: 150, |
||||
return h( |
sortable: true, |
||||
"div", |
render: (h, params) => { |
||||
{ |
return h( |
||||
style: { |
"div", { |
||||
display: "flex", |
style: { |
||||
"align-items": "center", |
display: "flex", |
||||
}, |
"align-items": "center", |
||||
}, |
}, |
||||
[ |
}, |
||||
h("img", { |
[ |
||||
attrs: { |
h("img", { |
||||
src: this.getFileIcon(params.row), |
attrs: { |
||||
}, |
src: this.getFileIcon(params.row), |
||||
style: { |
}, |
||||
width: "30px", |
style: { |
||||
height: "40px", |
width: "30px", |
||||
margin: "0 10px 0 0", |
height: "40px", |
||||
"object-fit": "contain", |
margin: "0 10px 0 0", |
||||
}, |
"object-fit": "contain", |
||||
}), |
}, |
||||
h("span", params.row.title), |
}), |
||||
] |
h("span", params.row.title), |
||||
); |
] |
||||
}, |
); |
||||
}, |
}, |
||||
{ |
}, |
||||
title: "文件类型", |
{ |
||||
key: "type", |
title: "文件类型", |
||||
width: 120, |
key: "type", |
||||
sortable: true, |
width: 120, |
||||
tooltip: true, |
sortable: true, |
||||
}, |
tooltip: true, |
||||
{ |
}, |
||||
title: "文件大小", |
{ |
||||
key: "size", |
title: "文件大小", |
||||
width: 120, |
key: "size", |
||||
align: "center", |
width: 120, |
||||
sortable: true, |
align: "center", |
||||
render: (h, params) => { |
sortable: true, |
||||
if (!params.row.isFolder) { |
render: (h, params) => { |
||||
let m = this.util.getFileSize(params.row.size); |
if (!params.row.isFolder) { |
||||
return h("span", m); |
let m = this.util.getFileSize(params.row.size); |
||||
} |
return h("span", m); |
||||
}, |
} |
||||
}, |
}, |
||||
{ |
}, |
||||
title: "创建时间", |
{ |
||||
key: "createTime", |
title: "创建时间", |
||||
width: 180, |
key: "createTime", |
||||
sortable: true, |
width: 180, |
||||
}, |
sortable: true, |
||||
{ |
}, |
||||
title: "更新时间", |
{ |
||||
key: "createTime", |
title: "更新时间", |
||||
width: 180, |
key: "createTime", |
||||
sortable: true, |
width: 180, |
||||
sortType: "desc", |
sortable: true, |
||||
}, |
sortType: "desc", |
||||
{ |
}, |
||||
title: "剩余时间", |
{ |
||||
key: "restDelTime", |
title: "剩余时间", |
||||
width: 150, |
key: "restDelTime", |
||||
sortable: true, |
width: 150, |
||||
align: "center", |
sortable: true, |
||||
}, |
align: "center", |
||||
{ |
}, |
||||
title: "操作", |
{ |
||||
key: "action", |
title: "操作", |
||||
align: "center", |
key: "action", |
||||
fixed: "right", |
align: "center", |
||||
width: 170, |
fixed: "right", |
||||
render: (h, params) => { |
width: 170, |
||||
return h("div", [ |
render: (h, params) => { |
||||
h( |
return h("div", [ |
||||
"a", |
h( |
||||
{ |
"a", { |
||||
on: { |
on: { |
||||
click: () => { |
click: () => { |
||||
this.revert(params.row); |
this.revert(params.row); |
||||
}, |
}, |
||||
}, |
}, |
||||
}, |
}, |
||||
"恢复" |
"恢复" |
||||
), |
), |
||||
h("Divider", { |
h("Divider", { |
||||
props: { |
props: { |
||||
type: "vertical", |
type: "vertical", |
||||
}, |
}, |
||||
}), |
}), |
||||
h( |
h( |
||||
"a", |
"a", { |
||||
{ |
on: { |
||||
on: { |
click: () => { |
||||
click: () => { |
this.delete(params.row); |
||||
this.delete(params.row); |
}, |
||||
}, |
}, |
||||
}, |
}, |
||||
}, |
"彻底删除" |
||||
"彻底删除" |
), |
||||
), |
]); |
||||
]); |
}, |
||||
}, |
}, |
||||
}, |
], |
||||
], |
data: [], // 表单数据 |
||||
data: [], // 表单数据 |
total: 0, // 表单数据总数 |
||||
total: 0, // 表单数据总数 |
}; |
||||
}; |
}, |
||||
}, |
methods: { |
||||
methods: { |
init() { |
||||
init() { |
this.getDataList(); |
||||
this.getDataList(); |
}, |
||||
}, |
getDataList() { |
||||
getDataList() { |
this.loading = true; |
||||
this.loading = true; |
getFileCate(this.searchForm).then((res) => { |
||||
getFileCate(this.searchForm).then((res) => { |
if (res.success) { |
||||
if (res.success) { |
res.result.forEach((e) => { |
||||
res.result.forEach((e) => { |
e.isFolder = true; |
||||
e.isFolder = true; |
e.type = "文件夹"; |
||||
e.type = "文件夹"; |
}); |
||||
}); |
this.data = res.result; |
||||
this.data = res.result; |
let totalElements = res.result.length; |
||||
let totalElements = res.result.length; |
getUserFileListData(this.searchForm).then((res) => { |
||||
getUserFileListData(this.searchForm).then((res) => { |
this.loading = false; |
||||
this.loading = false; |
if (res.success) { |
||||
if (res.success) { |
this.data = this.data.concat(res.result.content); |
||||
this.data = this.data.concat(res.result.content); |
this.total = totalElements + res.result.totalElements; |
||||
this.total = totalElements + res.result.totalElements; |
if (this.data.length == 0 && this.searchForm.pageNumber > 1) { |
||||
if (this.data.length == 0 && this.searchForm.pageNumber > 1) { |
this.searchForm.pageNumber -= 1; |
||||
this.searchForm.pageNumber -= 1; |
this.getDataList(); |
||||
this.getDataList(); |
} |
||||
} |
} |
||||
} |
}); |
||||
}); |
} else { |
||||
} else { |
this.loading = false; |
||||
this.loading = false; |
} |
||||
} |
}); |
||||
}); |
}, |
||||
}, |
getFileIcon(v) { |
||||
getFileIcon(v) { |
if (!v) { |
||||
if (!v) { |
return ""; |
||||
return ""; |
} |
||||
} |
if (v.isFolder) { |
||||
if (v.isFolder) { |
return require("@/assets/icon/folder.png"); |
||||
return require("@/assets/icon/folder.png"); |
} |
||||
} |
let url = ""; |
||||
let url = ""; |
if (!v.type) { |
||||
if (!v.type) { |
url = require("@/assets/icon/file-unknown.png"); |
||||
url = require("@/assets/icon/file-unknown.png"); |
} else if (v.type.indexOf("image") >= 0) { |
||||
} else if (v.type.indexOf("image") >= 0) { |
url = v.url; |
||||
url = v.url; |
} else if (v.type.indexOf("video") >= 0) { |
||||
} else if (v.type.indexOf("video") >= 0) { |
url = require("@/assets/icon/file-video.png"); |
||||
url = require("@/assets/icon/file-video.png"); |
} else if (v.type.indexOf("audio") >= 0) { |
||||
} else if (v.type.indexOf("audio") >= 0) { |
url = require("@/assets/icon/mp3.png"); |
||||
url = require("@/assets/icon/mp3.png"); |
} else if (v.type.indexOf("pdf") >= 0) { |
||||
} else if (v.type.indexOf("pdf") >= 0) { |
url = require("@/assets/icon/pdf.png"); |
||||
url = require("@/assets/icon/pdf.png"); |
} else if (v.type.indexOf("word") >= 0) { |
||||
} else if (v.type.indexOf("word") >= 0) { |
url = require("@/assets/icon/word.png"); |
||||
url = require("@/assets/icon/word.png"); |
} else if ( |
||||
} else if ( |
v.type.indexOf("sheet") >= 0 || |
||||
v.type.indexOf("sheet") >= 0 || |
v.fkey.indexOf(".xlsx") >= 0 || |
||||
v.fkey.indexOf(".xlsx") >= 0 || |
v.fkey.indexOf(".xls") >= 0 |
||||
v.fkey.indexOf(".xls") >= 0 |
) { |
||||
) { |
url = require("@/assets/icon/xls.png"); |
||||
url = require("@/assets/icon/xls.png"); |
} else if (v.type.indexOf("presentation") >= 0) { |
||||
} else if (v.type.indexOf("presentation") >= 0) { |
url = require("@/assets/icon/ppt.png"); |
||||
url = require("@/assets/icon/ppt.png"); |
} else if ( |
||||
} else if ( |
v.type.indexOf("zip") >= 0 || |
||||
v.type.indexOf("zip") >= 0 || |
v.type.indexOf("rar") >= 0 || |
||||
v.type.indexOf("rar") >= 0 || |
v.type.indexOf("7z") >= 0 |
||||
v.type.indexOf("7z") >= 0 |
) { |
||||
) { |
url = require("@/assets/icon/zip.png"); |
||||
url = require("@/assets/icon/zip.png"); |
} else if (v.type.indexOf("text") >= 0 || v.type.indexOf("octet") >= 0) { |
||||
} else if (v.type.indexOf("text") >= 0 || v.type.indexOf("octet") >= 0) { |
url = require("@/assets/icon/file.png"); |
||||
url = require("@/assets/icon/file.png"); |
} else { |
||||
} else { |
url = require("@/assets/icon/file.png"); |
||||
url = require("@/assets/icon/file.png"); |
} |
||||
} |
return url; |
||||
return url; |
}, |
||||
}, |
clearSelectAll() { |
||||
clearSelectAll() { |
this.$refs.table.selectAll(false); |
||||
this.$refs.table.selectAll(false); |
}, |
||||
}, |
changePage(v) { |
||||
changePage(v) { |
this.searchForm.pageNumber = v; |
||||
this.searchForm.pageNumber = v; |
this.getDataList(); |
||||
this.getDataList(); |
this.clearSelectAll(); |
||||
this.clearSelectAll(); |
}, |
||||
}, |
changeSort(e) { |
||||
changeSort(e) { |
this.searchForm.sort = e.key; |
||||
this.searchForm.sort = e.key; |
this.searchForm.order = e.order; |
||||
this.searchForm.order = e.order; |
if (e.order == "normal") { |
||||
if (e.order == "normal") { |
this.searchForm.order = ""; |
||||
this.searchForm.order = ""; |
} |
||||
} |
this.getDataList(); |
||||
this.getDataList(); |
}, |
||||
}, |
clear() { |
||||
clear() { |
this.$Modal.confirm({ |
||||
this.$Modal.confirm({ |
title: "请谨慎进行此操作!", |
||||
title: "请谨慎进行此操作!", |
content: "确认彻底清空回收站所有文件?", |
||||
content: "确认彻底清空回收站所有文件?", |
loading: true, |
||||
loading: true, |
onOk: () => { |
||||
onOk: () => { |
clearTrashFile().then((res) => { |
||||
clearTrashFile().then((res) => { |
if (res.success) { |
||||
if (res.success) { |
clearTrashFileCate().then((res) => { |
||||
clearTrashFileCate().then((res) => { |
this.$Modal.remove(); |
||||
this.$Modal.remove(); |
if (res.success) { |
||||
if (res.success) { |
this.getDataList(); |
||||
this.getDataList(); |
this.$Message.success("清空回收站成功"); |
||||
this.$Message.success("清空回收站成功"); |
} |
||||
} |
}); |
||||
}); |
} |
||||
} |
}); |
||||
}); |
}, |
||||
}, |
}); |
||||
}); |
}, |
||||
}, |
revert(v) { |
||||
revert(v) { |
if (!v.isFolder) { |
||||
if (!v.isFolder) { |
trashFile({ |
||||
trashFile({ ids: v.id }).then((res) => { |
ids: v.id |
||||
if (res.success) { |
}).then((res) => { |
||||
this.getDataList(); |
if (res.success) { |
||||
this.$Message.success("操作成功"); |
this.getDataList(); |
||||
} |
this.$Message.success("操作成功"); |
||||
}); |
} |
||||
} else { |
}); |
||||
trashFileCate({ id: v.id }).then((res) => { |
} else { |
||||
if (res.success) { |
trashFileCate({ |
||||
this.getDataList(); |
id: v.id |
||||
this.$Message.success("操作成功"); |
}).then((res) => { |
||||
} |
if (res.success) { |
||||
}); |
this.getDataList(); |
||||
} |
this.$Message.success("操作成功"); |
||||
}, |
} |
||||
delete(v) { |
}); |
||||
this.$Modal.confirm({ |
} |
||||
title: "确认彻底删除", |
}, |
||||
content: v.isFolder |
delete(v) { |
||||
? "确定彻底删除文件夹 " + v.title |
this.$Modal.confirm({ |
||||
: "确定彻底删除文件 " + v.title, |
title: "确认彻底删除", |
||||
loading: true, |
content: v.isFolder ? |
||||
onOk: () => { |
"确定彻底删除文件夹 " + v.title : |
||||
if (!v.isFolder) { |
"确定彻底删除文件 " + v.title, |
||||
deleteUserFile({ ids: v.id }).then((res) => { |
loading: true, |
||||
this.$Modal.remove(); |
onOk: () => { |
||||
if (res.success) { |
if (!v.isFolder) { |
||||
this.getDataList(); |
deleteUserFile({ |
||||
this.$Message.success("删除文件 " + v.title + " 成功"); |
ids: v.id |
||||
} |
}).then((res) => { |
||||
}); |
this.$Modal.remove(); |
||||
} else { |
if (res.success) { |
||||
deleteFileCate({ ids: v.id }).then((res) => { |
this.getDataList(); |
||||
this.$Modal.remove(); |
this.$Message.success("删除文件 " + v.title + " 成功"); |
||||
if (res.success) { |
} |
||||
this.getDataList(); |
}); |
||||
this.$Message.success("删除文件夹 " + v.title + " 成功"); |
} else { |
||||
} |
deleteFileCate({ |
||||
}); |
ids: v.id |
||||
} |
}).then((res) => { |
||||
}, |
this.$Modal.remove(); |
||||
}); |
if (res.success) { |
||||
}, |
this.getDataList(); |
||||
close() { |
this.$Message.success("删除文件夹 " + v.title + " 成功"); |
||||
this.$emit("close", true); |
} |
||||
}, |
}); |
||||
submited() { |
} |
||||
this.$emit("submited", true); |
}, |
||||
}, |
}); |
||||
}, |
}, |
||||
mounted() { |
close() { |
||||
this.init(); |
this.$emit("close", true); |
||||
}, |
}, |
||||
}; |
submited() { |
||||
|
this.$emit("submited", true); |
||||
|
}, |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.init(); |
||||
|
}, |
||||
|
}; |
||||
</script> |
</script> |
||||
@ -0,0 +1,102 @@ |
|||||
|
<template> |
||||
|
<div > |
||||
|
<Upload :action="uploadFileUrl" :headers="accessToken" :data="uploadData" :on-success="handleSuccess" |
||||
|
:on-error="handleError" :max-size="100000000" :before-upload="beforeUpload" |
||||
|
multiple type="drag" ref="up"> |
||||
|
<div style="padding: 20px 0"> |
||||
|
<Icon type="ios-cloud-upload" size="52" style="color: #3399ff"></Icon> |
||||
|
<p>点击这里或将文件拖拽到这里上传</p> |
||||
|
</div> |
||||
|
</Upload> |
||||
|
<Form ref="form" :model="form" :label-width="85" :rules="formValidate"> |
||||
|
<FormItem label="版本号" prop="title"> |
||||
|
<Input v-model="form.version" /> |
||||
|
</FormItem> |
||||
|
</Form> |
||||
|
<div slot="footer"> |
||||
|
<Button type="primary" :loading="submitLoading" @click="handelSubmit">提交</Button> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { |
||||
|
getFileCate, |
||||
|
addFileCate, |
||||
|
editFileCate, |
||||
|
uploadFile, |
||||
|
trashFileCate, |
||||
|
searchFileCate, |
||||
|
checkOssSet, |
||||
|
} from "@/api/index"; |
||||
|
export default { |
||||
|
name: "fileCategory", |
||||
|
props: { |
||||
|
showOnly: { |
||||
|
type: Boolean, |
||||
|
default: false, |
||||
|
}, |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
uploadFileUrl: uploadFile, |
||||
|
submitLoading: false, |
||||
|
accessToken: {}, |
||||
|
uploadData: {}, |
||||
|
form:{ |
||||
|
path:'', |
||||
|
version:'' |
||||
|
} |
||||
|
}; |
||||
|
}, |
||||
|
methods: { |
||||
|
init() { |
||||
|
this.accessToken = { |
||||
|
accessToken: this.getStore("accessToken"), |
||||
|
}; |
||||
|
checkOssSet().then((res) => { |
||||
|
if (!res.success) { |
||||
|
this.$Modal.confirm({ |
||||
|
title: "系统还未配置OSS", |
||||
|
content: "管理员还未配置第三方OSS服务,是否现在立即去配置?", |
||||
|
onOk: () => { |
||||
|
this.$router.push({ |
||||
|
name: "setting", |
||||
|
query: { |
||||
|
name: "oss" |
||||
|
}, |
||||
|
}); |
||||
|
}, |
||||
|
}); |
||||
|
} |
||||
|
}); |
||||
|
}, |
||||
|
beforeUpload() { |
||||
|
return true; |
||||
|
}, |
||||
|
handleSuccess(res, file, fileList) { |
||||
|
if (res.success) { |
||||
|
this.$Message.success("上传文件 " + file.name + " 成功"); |
||||
|
this.form.path = res.result |
||||
|
} else { |
||||
|
file.percentage = 0; |
||||
|
file.status = "fail"; |
||||
|
file.name += "(上传失败)"; |
||||
|
this.$Message.error(res.message); |
||||
|
} |
||||
|
}, |
||||
|
handleError(error, file, fileList) { |
||||
|
this.$Message.error(error.toString()); |
||||
|
}, |
||||
|
handelSubmit() { |
||||
|
console.log(this.form) |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.init(); |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="less"> |
||||
|
</style> |
||||
Loading…
Reference in new issue