680 行
29 KiB
JavaScript
680 行
29 KiB
JavaScript
define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {
|
|
|
|
var Controller = {
|
|
index: function () {
|
|
let vue = new Vue({
|
|
el: '#vue',
|
|
data: {
|
|
breadcrumb: [],
|
|
checkAll: false,
|
|
sortList: [{
|
|
id: 1,
|
|
value: '添加时间升序'
|
|
}, {
|
|
id: 2,
|
|
value: '添加时间降序'
|
|
}, {
|
|
id: 3,
|
|
value: '文件名升序'
|
|
}, {
|
|
id: 4,
|
|
value: '文件名降序'
|
|
}],
|
|
// 搜索字段
|
|
search: {
|
|
keyword: '',
|
|
type: 1,
|
|
nav: '',
|
|
order: 2
|
|
},
|
|
// 默认每页数据量
|
|
pageSize: 50,
|
|
// 当前页码
|
|
currentPage: 1,
|
|
// 默认数据总数
|
|
totalCount: 0,
|
|
navList: [],
|
|
dirList: [],
|
|
fileList: [],
|
|
formData: {
|
|
nav: ''
|
|
},
|
|
navDialog: false,
|
|
multipleSelection: [],
|
|
fileListUrl: []
|
|
},
|
|
created() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
methods: {
|
|
// 刷新页面
|
|
refreshPage() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
handleOrderChange() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 节点点击
|
|
handleClickNode(e) {
|
|
this.search.nav = e.value;
|
|
this.currentPage = 1;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 选择文件
|
|
handleSelectFile(index) {
|
|
this.fileList[index].checked = !this.fileList[index].checked;
|
|
this.fileList[index].showTools = !this.fileList[index].showTools;
|
|
},
|
|
// 文件目录管理
|
|
handleOpenNav() {
|
|
Fast.api.open('general/nav/index', '文件目录管理', {
|
|
area: ['100%', '100%'],
|
|
callback: res => {
|
|
|
|
}
|
|
});
|
|
},
|
|
// 回收站
|
|
handleOpenRecycle() {
|
|
Fast.api.open('general/file/recycle', '回收站管理', {
|
|
area: ['100%', '100%'],
|
|
callback: res => {
|
|
|
|
}
|
|
});
|
|
},
|
|
// 文件移入
|
|
enterFileItem(e, index) {
|
|
this.fileList[index].showTools = true;
|
|
},
|
|
// 文件移出
|
|
leaveFileItem(e, index) {
|
|
this.fileList[index].showTools = false;
|
|
},
|
|
// 上传前
|
|
beforeFileUpload(file) {
|
|
// 文件大小验证
|
|
if (file.size / 1024 / 1024 > 30) {
|
|
this.$message.warning('上传的文件大小不能超过30M');
|
|
return false;
|
|
}
|
|
|
|
this.uploadLoading = this.$loading({
|
|
lock: true,
|
|
text: '正在上传中...',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.1)'
|
|
});
|
|
},
|
|
// 上传成功后
|
|
uploadFileSuccess(res, file, fileList) {
|
|
this.uploadLoading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success(res.msg);
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
// 打开目录
|
|
handleOpenDir(id) {
|
|
this.search.nav = id;
|
|
this.currentPage = 1;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 打开文件
|
|
handleOpenFile(url) {
|
|
window.open(url, '_blank');
|
|
},
|
|
// 打开归类
|
|
handleNavDialog() {
|
|
this.getSelectFileIds();
|
|
|
|
if (this.multipleSelection.length === 0) {
|
|
this.$message.warning('请选择至少一个文件进行归类!');
|
|
return;
|
|
}
|
|
this.formData = {
|
|
nav: ''
|
|
};
|
|
this.navDialog = true;
|
|
},
|
|
submitNav() {
|
|
if (this.formData.nav === '') {
|
|
this.$message.warning('请您选择分类!');
|
|
return;
|
|
}
|
|
// 提交
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在归类中...',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
|
|
this.formData.ids = this.multipleSelection;
|
|
|
|
$.ajax({
|
|
url: 'general/file/nav',
|
|
type: 'POST',
|
|
data: this.formData,
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 200) {
|
|
this.$message.success(res.msg);
|
|
this.navDialog = false;
|
|
this.multipleSelection = [];
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
}
|
|
})
|
|
},
|
|
onSelectFile(item, type) {
|
|
let url = [];
|
|
if (type === 'multiple') {
|
|
this.getSelectFileUrl();
|
|
// 多选
|
|
if (this.fileListUrl.length === 0) {
|
|
this.$message.warning('请您选择文件');
|
|
return;
|
|
}
|
|
|
|
url = this.fileListUrl.join(',');
|
|
} else {
|
|
// 单选
|
|
url = item.url
|
|
}
|
|
|
|
var multiple = Backend.api.query('multiple');
|
|
multiple = multiple == 'true' ? true : false;
|
|
|
|
Fast.api.close({url, multiple});
|
|
},
|
|
// 搜索
|
|
searchData() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 从服务器读取数据
|
|
loadData(key, currentPage, pageSize, order) {
|
|
// 提交
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '图片加载中...',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
|
|
$.getJSON('general/file/index', {
|
|
keyword: key,
|
|
type: this.search.type,
|
|
nav: this.search.nav,
|
|
page: currentPage,
|
|
rows: pageSize,
|
|
order,
|
|
}, data => {
|
|
loading.close();
|
|
this.totalCount = data.total;
|
|
this.breadcrumb = data.breadcrumb;
|
|
|
|
if (!this.navList.length) {
|
|
this.navList = data.navList;
|
|
}
|
|
|
|
this.dirList = data.dirList;
|
|
this.fileList = data.list;
|
|
});
|
|
},
|
|
// 每页显示数据量变更
|
|
handleSizeChange(val) {
|
|
this.pageSize = val;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 页码变更
|
|
handleCurrentChange(val) {
|
|
this.currentPage = val;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
// 批量删除
|
|
del() {
|
|
this.getSelectFileIds();
|
|
|
|
if (this.multipleSelection.length === 0) {
|
|
this.$message.warning('请选择至少一个文件进行删除!');
|
|
return;
|
|
}
|
|
|
|
this.$confirm('您确定要删除所选的文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在删除中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/file/dell',
|
|
data: "ids=" + this.multipleSelection,
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('删除文件成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
// 单条删除
|
|
dell(id) {
|
|
this.$confirm('您确定要删除此文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在删除中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/file/dell',
|
|
data: {
|
|
ids: id
|
|
},
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('删除文件成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
handleInpClear() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
checkAllChange(e) {
|
|
this.fileList.map(item => {
|
|
item.checked = e;
|
|
item.showTools = e;
|
|
});
|
|
},
|
|
// 获取选中的文件
|
|
getSelectFileIds() {
|
|
this.fileList.map(item => {
|
|
if (item.checked) {
|
|
this.multipleSelection.push(item.id);
|
|
}
|
|
});
|
|
},
|
|
// 获取选中文件路径
|
|
getSelectFileUrl() {
|
|
this.fileList.map(item => {
|
|
if (item.checked) {
|
|
this.fileListUrl.push(item.url);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
})
|
|
},
|
|
recycle: function () {
|
|
let vue = new Vue({
|
|
el: '#vue',
|
|
data: {
|
|
uploadLoading: '',
|
|
uploadData: {},
|
|
navList: [],
|
|
// 表格当前页数据
|
|
tableData: [],
|
|
// 多选数组
|
|
multipleSelection: [],
|
|
// 搜索条件
|
|
key: '',
|
|
// 默认每页数据量
|
|
pageSize: 10,
|
|
// 当前页码
|
|
currentPage: 1,
|
|
// 默认数据总数
|
|
totalCount: 0,
|
|
// 列表加载遮罩
|
|
listLoading: false,
|
|
// 搜索字段
|
|
search: {
|
|
startTime: '',
|
|
endTime: '',
|
|
keyword: '',
|
|
type: '',
|
|
sort: 'id',
|
|
typeIndex: '',
|
|
category: '',
|
|
},
|
|
// 类型
|
|
typeList: [{
|
|
index: 1,
|
|
name: '图片',
|
|
key: 'image/'
|
|
}, {
|
|
index: 2,
|
|
name: '音频',
|
|
key: 'audio/'
|
|
}, {
|
|
index: 3,
|
|
name: '视频',
|
|
key: 'video/'
|
|
}, {
|
|
index: 4,
|
|
name: '文档',
|
|
key: 'text/'
|
|
}, {
|
|
index: 5,
|
|
name: '应用',
|
|
key: 'application/'
|
|
}, {
|
|
index: 6,
|
|
name: '压缩包',
|
|
key: 'zip/'
|
|
}],
|
|
searchOpt: [{
|
|
id: 1,
|
|
value: '文件名'
|
|
}],
|
|
sendStartTime: '',
|
|
sendEndTime: '',
|
|
// 时间格式化
|
|
dateFormat: function (row, column) {
|
|
var date = row[column.property];
|
|
if (date === undefined || date === 0) {
|
|
return '';
|
|
}
|
|
return moment(date * 1000).format("YYYY-MM-DD HH:mm:ss");
|
|
}
|
|
},
|
|
created() {
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
methods: {
|
|
handleClearSelect(field) {
|
|
// 重新加载
|
|
this.$set(this.search, field, '');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
},
|
|
handleClearSearchInp() {
|
|
if (this.search.type) {
|
|
// 重新加载
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize, this.search.order);
|
|
}
|
|
},
|
|
// 刷新页面
|
|
refreshPage() {
|
|
this.search = {
|
|
startTime: '',
|
|
endTime: '',
|
|
keyword: '',
|
|
type: '',
|
|
sort: 'id',
|
|
category: '',
|
|
typeIndex: '',
|
|
};
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
},
|
|
// 从服务器读取数据
|
|
loadData(key, currentPage, pageSize) {
|
|
this.listLoading = true;
|
|
$.getJSON('general/file/recycle', {
|
|
keyword: key,
|
|
type: this.search.type,
|
|
status: this.search.status,
|
|
nav: this.search.nav,
|
|
start_time: this.sendStartTime,
|
|
end_time: this.sendEndTime,
|
|
category: this.search.category,
|
|
mimetype: this.search.typeIndex > 0 ? this.typeList[this.search.typeIndex - 1].key :'',
|
|
page: currentPage,
|
|
rows: pageSize,
|
|
}, data => {
|
|
this.totalCount = data.total;
|
|
this.tableData = data.list;
|
|
this.listLoading = false;
|
|
});
|
|
},
|
|
handleNavChange(e) {
|
|
if (e.length === 0) {
|
|
// 重新加载
|
|
this.$set(this.search, 'nav', '');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
}
|
|
},
|
|
handleSelectCategory(index) {
|
|
for (let item of this.categoryOpt) {
|
|
item.selected = false;
|
|
}
|
|
this.categoryOpt[index].selected = true;
|
|
this.search.category = this.categoryOpt[index].category === 'all' ? '' : this.categoryOpt[index].category;
|
|
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
},
|
|
// 搜索
|
|
searchData() {
|
|
this.sendStartTime = this.search.startTime !== '' ? +this.search.startTime / 1000 : '';
|
|
this.sendEndTime = this.search.endTime !== '' ? +this.search.endTime / 1000 : '';
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
},
|
|
// 每页显示数据量变更
|
|
handleSizeChange(val) {
|
|
this.pageSize = val;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
},
|
|
// 页码变更
|
|
handleCurrentChange(val) {
|
|
this.currentPage = val;
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
},
|
|
// 多选响应
|
|
handleSelectionChange(val) {
|
|
this.multipleSelection = val;
|
|
},
|
|
// 批量恢复
|
|
restoreMany() {
|
|
if (this.multipleSelection.length === 0) {
|
|
this.$message.warning('请选择至少一个文件进行恢复!');
|
|
return;
|
|
}
|
|
var array = [];
|
|
this.multipleSelection.forEach((row) => {
|
|
array.push(row.id);
|
|
});
|
|
|
|
this.$confirm('您确定要恢复所选的文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在删除中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/file/restoreData',
|
|
data: "ids=" + array,
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('恢复文件成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
restore(id) {
|
|
this.$confirm('您确定要恢复此文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在恢复中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/file/restoreData',
|
|
data: {
|
|
ids: id
|
|
},
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('删除恢复成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
// 批量删除
|
|
del() {
|
|
if (this.multipleSelection.length === 0) {
|
|
this.$message.warning('请选择至少一个文件进行删除!');
|
|
return;
|
|
}
|
|
var array = [];
|
|
this.multipleSelection.forEach((row) => {
|
|
array.push(row.id);
|
|
});
|
|
|
|
this.$confirm('您确定要删除所选的文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在删除中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/attachment/del',
|
|
data: "ids=" + array,
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('删除文件成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
// 单条删除
|
|
dell(id) {
|
|
this.$confirm('您确定要删除此文件吗?', '温馨提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
let loading = this.$loading({
|
|
lock: true,
|
|
text: '正在删除中..',
|
|
spinner: 'el-icon-loading',
|
|
background: 'rgba(0, 0, 0, 0.3)'
|
|
});
|
|
$.ajax({
|
|
url: 'general/attachment/del',
|
|
data: {
|
|
ids: id
|
|
},
|
|
type: "POST",
|
|
dataType: 'json',
|
|
success: res => {
|
|
loading.close();
|
|
if (res.code === 1) {
|
|
this.$message.success('删除文件成功');
|
|
this.loadData(this.search.keyword, this.currentPage, this.pageSize);
|
|
} else {
|
|
this.$message.warning(res.msg);
|
|
}
|
|
},
|
|
error: function (er) {
|
|
|
|
}
|
|
});
|
|
}).catch(() => {
|
|
|
|
});
|
|
},
|
|
}
|
|
})
|
|
},
|
|
add: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
edit: function () {
|
|
Controller.api.bindevent();
|
|
},
|
|
api: {
|
|
bindevent: function () {
|
|
Form.api.bindevent($("form[role=form]"));
|
|
}
|
|
}
|
|
};
|
|
return Controller;
|
|
});
|