<style lang="less">
	@import "@/styles/tree&table-common.less";
	@import "@/styles/table-common.less";
	@import "./ossManage.less";
</style>
<template>
	<div class="search">
		<Card>
			<Row v-show="openSearch" @keydown.enter.native="handleSearch">
				<Form ref="searchForm" :model="searchForm" inline :label-width="85">
					<FormItem label="原文件名" prop="title">
						<Input type="text" v-model="searchForm.title" placeholder="请输入文件名" clearable
							style="width: 200px" />
					</FormItem>
					<FormItem label="上传者账号" prop="createBy">
						<Input type="text" v-model="searchForm.createBy" placeholder="请输入上传者登录账号" clearable
							style="width: 200px" />
					</FormItem>
					<span v-if="drop">
						<FormItem label="存储文件名" prop="fKey">
							<Input type="text" v-model="searchForm.fkey" placeholder="请输入存储文件名" clearable
								style="width: 200px" />
						</FormItem>
						<FormItem label="创建时间">
							<DatePicker :options="options" v-model="selectDate" type="daterange" format="yyyy-MM-dd"
								clearable @on-change="selectDateRange" placeholder="选择起始时间" style="width: 200px">
							</DatePicker>
						</FormItem>
					</span>
					<FormItem style="margin-left: -35px" class="br">
						<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
						<Button @click="handleReset">重置</Button>
						<a class="drop-down" @click="dropDown">
							{{ dropDownContent }}
							<Icon :type="dropDownIcon"></Icon>
						</a>
					</FormItem>
				</Form>
			</Row>
			<Row align="middle" justify="space-between" class="operation">
				<div class="br">
					<Button @click="uploadVisible = true" type="primary" icon="md-cloud-upload">上传文件</Button>
					<Dropdown @on-click="handleDropdown">
						<Button>
							更多操作
							<Icon type="md-arrow-dropdown" />
						</Button>
						<DropdownMenu slot="list">
							<DropdownItem v-show="showType == 'list'" name="removeAll">批量删除</DropdownItem>
							<DropdownItem v-show="showType == 'thumb'" name="title">原名称排序</DropdownItem>
							<DropdownItem v-show="showType == 'thumb'" name="size">文件大小排序</DropdownItem>
							<DropdownItem v-show="showType == 'thumb'" name="type">文件类型排序</DropdownItem>
							<DropdownItem v-show="showType == 'thumb'" name="time">创建时间排序</DropdownItem>
							<DropdownItem name="config">存储配置</DropdownItem>
						</DropdownMenu>
					</Dropdown>
				</div>

				<div class="icons">
					<Tooltip content="刷新" placement="top" transfer>
						<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
					</Tooltip>
					<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
						<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
					</Tooltip>
					<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
						<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
					</Tooltip>
					<Select v-model="fileType" style="width: 150px; margin: 0 25px 0 15px" @on-change="changeFileType">
						<Option value="all">所有文件</Option>
						<Option value="word">Word</Option>
						<Option value="excel">Excel</Option>
						<Option value="pdf">PDF</Option>
						<Option value="pic">图片</Option>
						<Option value="video">视频</Option>
						<Option value="audio">音频</Option>
						<Option value="text">文本</Option>
						<Option value="ppt">PPT</Option>
						<Option value="zip">ZIP</Option>
						<Option value="rar">RAR</Option>
					</Select>
					<RadioGroup v-model="showType" type="button" @on-change="changeShowType">
						<Radio title="列表" label="list">
							<Icon type="md-list"></Icon>
						</Radio>
						<Radio title="缩略图" label="thumb">
							<Icon type="ios-apps"></Icon>
						</Radio>
					</RadioGroup>
				</div>
			</Row>

			<div v-show="showType == 'list'">
				<Alert show-icon v-show="openTip">
					已选择
					<span class="select-count">{{ selectList.length }}</span> 项
					<a class="select-clear" @click="clearSelectAll">清空</a>
					<span v-if="selectList.length > 0" style="margin-left: 15px">共计 {{ totalSize }} 存储量</span>
				</Alert>
				<Table :loading="loading" border :columns="columns" :data="data" ref="table" sortable="custom"
					@on-sort-change="changeSort" @on-selection-change="changeSelect"></Table>
			</div>
			<Row type="flex" :gutter="30" v-show="showType == 'thumb'">
				<Col :lg="6" :md="12" :xs="12" v-for="(item, i) in data" :key="i">
				<Card class="oss-card">
					<div class="content">
						<img @click="showPic(item)" v-if="item.type.indexOf('image') >= 0" class="img"
							:src="item.url" />
						<div v-else-if="item.type.indexOf('video') >= 0" class="video" @click="showVideo(item)">
							<video class="cover">
								<source :src="item.url + '#t=1'" preload="metadata" />
							</video>
							<img class="play" src="@/assets/icon/play.png" />
						</div>
						<div v-else class="other" @click="previewFile(item)">
							<div class="name">{{ item.title }}</div>
							<div class="key">{{ item.fkey }}</div>
							<div class="info">
								文件类型：{{ util.ellipsis(item.type, 30) }} 文件大小：{{
                    util.getFileSize(item.size)
                  }}
								创建时间：{{ item.createTime }}
							</div>
						</div>
						<div class="actions">
							<div class="btn">
								<Tooltip content="下载" placement="top">
									<Icon @click="download(item)" type="md-download" size="16" />
								</Tooltip>
							</div>
							<div class="btn">
								<Tooltip content="重命名" placement="top">
									<Icon @click="rename(item)" type="md-create" size="16" />
								</Tooltip>
							</div>
							<div class="btn">
								<Tooltip content="复制" placement="top">
									<Icon @click="copy(item)" type="md-copy" size="16" />
								</Tooltip>
							</div>
							<div class="btn-no">
								<Tooltip content="删除" placement="top">
									<Icon @click="remove(item)" type="md-trash" size="16" />
								</Tooltip>
							</div>
						</div>
					</div>
				</Card>
				</Col>
			</Row>
			<Row type="flex" justify="end" class="page">
				<Page :current="searchForm.pageNumber" :total="total" :page-size="searchForm.pageSize"
					@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="pageSizeOpts"
					size="small" show-total show-elevator show-sizer></Page>
			</Row>
		</Card>

		<Drawer title="文件上传" closable v-model="uploadVisible" width="500">
			<Upload :action="uploadFileUrl" :headers="accessToken" :on-success="handleSuccess" :on-error="handleError"
				:max-size="5120" :on-exceeded-size="handleMaxSize" :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>
			<div class="drawer-footer">
				<Button @click="clearFiles">清空上传列表</Button>
			</div>
		</Drawer>

		<Modal :title="modalTitle" v-model="modalVisible" :mask-closable="false" :width="500">
			<Form ref="form" :model="form" :label-width="95" :rules="formValidate">
				<FormItem label="原文件名" prop="title">
					<Input v-model="form.title" />
				</FormItem>
				<FormItem label="存储文件名" prop="fkey">
					<Input v-model="form.fkey" />
				</FormItem>
			</Form>
			<div slot="footer">
				<Button type="text" @click="handleCancel">取消</Button>
				<Button type="primary" :loading="submitLoading" @click="handleSubmit">提交</Button>
			</div>
		</Modal>

		<Modal v-model="videoVisible" :title="videoTitle" :width="800" @on-cancel="closeVideo" draggable>
			<div id="dplayer" style="height: 500px"></div>
			<div slot="footer">
				<span>文件类型：{{ util.ellipsis(file.type, 30) }} 文件大小：{{
            file.msize
          }}
					创建时间：{{ file.createTime }}</span>
			</div>
		</Modal>
	</div>
</template>

<script>
	import {
		uploadFile,
		checkOssSet,
		getFileListData,
		copyFile,
		renameFile,
		deleteFile,
	} from "@/api/index";
	import DPlayer from "dplayer";
	import "viewerjs/dist/viewer.css";
	import Viewer from "viewerjs";
	import {
		shortcuts
	} from "@/libs/shortcuts";
	export default {
		name: "oss-manage",
		components: {},
		data() {
			return {
				dp: null,
				uploadFileUrl: uploadFile,
				openSearch: true,
				openTip: true,
				accessToken: {}, // 上传token鉴权
				loading: false, // 表单加载状态
				drop: false,
				dropDownContent: "展开",
				dropDownIcon: "ios-arrow-down",
				fileType: "all",
				showType: "list",
				modalVisible: false, // 添加或编辑显示
				uploadVisible: false,
				videoVisible: false,
				picVisible: false,
				picTitle: "",
				videoTitle: "",
				modalTitle: "", // 添加或编辑标题
				searchForm: {
					// 搜索框对应data对象
					title: "",
					fkey: "",
					type: "",
					pageNumber: 1, // 当前页数
					pageSize: 5, // 页面大小
					sort: "createTime", // 默认排序字段
					order: "desc", // 默认排序方式
					startDate: "", // 起始时间
					endDate: "", // 终止时间
				},
				selectDate: null, // 选择日期绑定modal
				options: {
					shortcuts: shortcuts,
				},
				form: {
					title: "",
					fkey: "",
				},
				file: {},
				// 表单验证规则
				formValidate: {
					title: [{
						required: true,
						message: "请输入",
						trigger: "blur"
					}],
					fkey: [{
						required: true,
						message: "请输入",
						trigger: "blur"
					}],
				},
				submitLoading: false, // 添加或编辑提交状态
				selectList: [], // 多选数据
				totalSize: "", // 文件大小统计
				columns: [
					// 表头
					{
						type: "selection",
						width: 60,
						align: "center",
					},
					{
						type: "index",
						width: 60,
						align: "center",
					},
					{
						title: "原文件名",
						key: "title",
						minWidth: 130,
						sortable: true,
					},
					{
						title: "存储文件名",
						key: "fkey",
						minWidth: 165,
						sortable: true,
					},
					{
						title: "缩略图(点击预览)",
						key: "url",
						width: 150,
						align: "center",
						render: (h, params) => {
							if (params.row.type.includes("image") > 0) {
								return h("img", {
									attrs: {
										src: params.row.url,
									},
									style: {
										cursor: "zoom-in",
										width: "80px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showPic(params.row);
										},
									},
								});
							} else if (params.row.type.includes("video") > 0) {
								return h(
									"video", {
										style: {
											cursor: "pointer",
											width: "80px",
											height: "60px",
											margin: "10px 0",
											"object-fit": "contain",
										},
										on: {
											click: () => {
												this.showVideo(params.row);
											},
										},
									},
									[
										h("source", {
											attrs: {
												src: params.row.url + "#t=1",
												preload: "metadata",
											},
										}),
									]
								);
							} else if (params.row.type.includes("word") > 0) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/word.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "80px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showOffice(params.row);
										},
									},
								});
							} else if (
								params.row.fkey.includes(".xlsx") > 0 ||
								params.row.fkey.includes(".xls") > 0 ||
								params.row.type.includes("sheet") > 0
							) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/xls.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "80px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showOffice(params.row);
										},
									},
								});
							} else if (params.row.type.includes("presentation") > 0) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/ppt.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "80px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showOffice(params.row);
										},
									},
								});
							} else if (params.row.type.includes("pdf") > 0) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/pdf.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showFile(params.row);
										},
									},
								});
							} else if (params.row.type.includes("audio") > 0) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/mp3.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showVideo(params.row);
										},
									},
								});
							} else if (
								params.row.type.includes("zip") > 0 ||
								params.row.type.includes("rar") > 0 ||
								params.row.type.includes("7z") > 0
							) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/zip.png"),
									},
									style: {
										width: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.$Message.warning("暂不支持预览");
										},
									},
								});
							} else if (
								params.row.type.includes("text") > 0 ||
								params.row.type.includes("octet") > 0
							) {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/file.png"),
									},
									style: {
										cursor: "zoom-in",
										width: "55px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.showFile(params.row);
										},
									},
								});
							} else {
								return h("img", {
									attrs: {
										src: require("@/assets/icon/file.png"),
									},
									style: {
										width: "55px",
										height: "60px",
										margin: "10px 0",
										"object-fit": "contain",
									},
									on: {
										click: () => {
											this.$Message.warning("暂不支持预览");
										},
									},
								});
							}
						},
					},
					{
						title: "文件类型",
						key: "type",
						width: 120,
						sortable: true,
						tooltip: true,
					},
					{
						title: "文件大小",
						key: "size",
						width: 120,
						align: "center",
						sortable: true,
						render: (h, params) => {
							let m = this.util.getFileSize(params.row.size);
							return h("span", m);
						},
					},
					{
						title: "上传者",
						key: "createBy",
						width: 120,
						sortable: true,
						align: "center",
					},
					{
						title: "存储位置",
						key: "location",
						align: "center",
						width: 110,
						render: (h, params) => {
							let location = "",
								color = "";
							if (params.row.location == 0) {
								location = "本地服务器";
								color = "green";
							} else if (params.row.location == 1) {
								location = "七牛云";
								color = "blue";
							} else if (params.row.location == 2) {
								location = "阿里云";
								color = "orange";
							} else if (params.row.location == 3) {
								location = "腾讯云";
								color = "geekblue";
							} else if (params.row.location == 4) {
								location = "MinIO";
								color = "magenta";
							}
							return h("div", [
								h(
									"Tag", {
										props: {
											color: color,
										},
									},
									location
								),
							]);
						},
					},
					{
						title: "创建时间",
						key: "createTime",
						width: 180,
						sortable: true,
						sortType: "desc",
					},
					{
						title: "操作",
						key: "action",
						align: "center",
						fixed: "right",
						width: 170,
						render: (h, params) => {
							return h("div", [
								h(
									"a", {
										on: {
											click: () => {
												this.download(params.row);
											},
										},
									},
									"下载"
								),
								h("Divider", {
									props: {
										type: "vertical",
									},
								}),
								h(
									"Dropdown", {
										props: {
											transfer: true
										},
										on: {
											"on-click": (v) => {
												this.changeDropDown(params.row, v);
											},
										},
									},
									[
										h("a", [
											"更多操作",
											h("Icon", {
												props: {
													type: "ios-arrow-down",
												},
											}),
										]),
										h("DropdownMenu", {
											slot: "list"
										}, [
											h("DropdownItem", {
												props: {
													name: "share"
												}
											}, "文件链接"),
											h("DropdownItem", {
												props: {
													name: "rename"
												}
											}, "重命名"),
											h("DropdownItem", {
												props: {
													name: "copy"
												}
											}, "复制"),
											h("DropdownItem", {
												props: {
													name: "remove"
												}
											}, "删除"),
										]),
									]
								),
							]);
						},
					},
				],
				data: [], // 表单数据
				total: 0, // 表单数据总数
				pageSizeOpts: [5, 10, 20],
			};
		},
		methods: {
			handleDropdown(name) {
				if (name == "removeAll") {
					this.removeAll();
				} else if (name == "title") {
					this.searchForm.sort = "title";
					this.getDataList();
				} else if (name == "size") {
					this.searchForm.sort = "size";
					this.getDataList();
				} else if (name == "type") {
					this.searchForm.sort = "type";
					this.getDataList();
				} else if (name == "time") {
					this.searchForm.sort = "createTime";
					this.getDataList();
				} else if (name == "config") {
					this.$router.push({
						name: "setting",
						query: {
							name: "oss"
						},
					});
				}
			},
			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"
									},
								});
							},
						});
					} else {
						this.getDataList();
					}
				});
			},
			showPic(v) {
				let image = new Image();
				image.src = v.url;
				let viewer = new Viewer(image, {
					hidden: function() {
						viewer.destroy();
					},
				});
				viewer.show();
			},
			showVideo(v) {
				this.dp = new DPlayer({
					container: document.getElementById("dplayer"),
					screenshot: true,
					video: {
						url: v.url,
					},
				});
				this.file = v;
				this.file.msize = this.util.getFileSize(v.size);
				this.videoTitle = v.title + "(" + v.fkey + ")";
				this.videoVisible = true;
			},
			closeVideo() {
				if (this.dp) {
					this.dp.destroy();
				}
			},
			dropDown() {
				if (this.drop) {
					this.dropDownContent = "展开";
					this.dropDownIcon = "ios-arrow-down";
				} else {
					this.dropDownContent = "收起";
					this.dropDownIcon = "ios-arrow-up";
				}
				this.drop = !this.drop;
			},
			changePage(v) {
				this.searchForm.pageNumber = v;
				this.getDataList();
				this.clearSelectAll();
			},
			changePageSize(v) {
				this.searchForm.pageSize = v;
				this.getDataList();
			},
			changeSort(e) {
				this.searchForm.sort = e.key;
				this.searchForm.order = e.order;
				if (e.order == "normal") {
					this.searchForm.order = "";
				}
				this.getDataList();
			},
			selectDateRange(v) {
				if (v) {
					this.searchForm.startDate = v[0];
					this.searchForm.endDate = v[1];
				}
			},
			changeShowType() {
				this.searchForm.pageNumber = 1;
				if (this.showType == "list") {
					this.searchForm.pageSize = 5;
				} else {
					this.searchForm.pageSize = 12;
				}
				this.getDataList();
			},
			getDataList() {
				if (this.showType == "list") {
					this.pageSizeOpts = [5, 10, 20];
				} else {
					this.pageSizeOpts = [12, 24];
				}
				this.loading = true;
				getFileListData(this.searchForm).then((res) => {
					this.loading = false;
					if (res.success) {
						this.data = res.result.content;
						this.total = res.result.totalElements;
						if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
							this.searchForm.pageNumber -= 1;
							this.getDataList();
						}
					}
				});
			},
			handleSearch() {
				this.searchForm.pageNumber = 1;
				if (this.showType == "list") {
					this.searchForm.pageSize = 5;
				} else {
					this.searchForm.pageSize = 12;
				}
				this.getDataList();
			},
			changeFileType() {
				let name = this.fileType;
				if (name == "all") {
					this.searchForm.type = "";
				} else if (name == "pic") {
					this.searchForm.type = "image";
				} else if (name == "video") {
					this.searchForm.type = "video";
				} else if (name == "word") {
					this.searchForm.type = "word";
				} else if (name == "excel") {
					this.searchForm.type = "sheet";
				} else if (name == "ppt") {
					this.searchForm.type = "presentation";
				} else if (name == "pdf") {
					this.searchForm.type = "pdf";
				} else if (name == "audio") {
					this.searchForm.type = "audio";
				} else if (name == "text") {
					this.searchForm.type = "text";
				} else if (name == "zip") {
					this.searchForm.type = "zip";
				} else if (name == "rar") {
					this.searchForm.type = "rar";
				}
				this.handleSearch();
			},
			handleReset() {
				this.$refs.searchForm.resetFields();
				this.searchForm.pageNumber = 1;
				if (this.showType == "list") {
					this.searchForm.pageSize = 5;
				} else {
					this.searchForm.pageSize = 12;
				}
				this.selectDate = null;
				this.searchForm.startDate = "";
				this.searchForm.endDate = "";
				// 重新加载数据
				this.getDataList();
			},
			beforeUpload() {
				return true;
			},
			handleMaxSize(file) {
				this.$Notice.warning({
					title: "文件大小过大",
					desc: "所选文件‘ " + file.name + " ’大小过大, 不得超过 5M.",
				});
			},
			handleSuccess(res, file, fileList) {
				if (res.success) {
					this.$Message.success("上传文件 " + file.name + " 成功");
					this.getDataList();
				} else {
					file.percentage = 0;
					file.status = "fail";
					file.name += "（上传失败）";
					this.$Message.error(res.message);
				}
			},
			handleError(error, file, fileList) {
				this.$Message.error(error.toString());
			},
			clearFiles() {
				this.$refs.up.clearFiles();
			},
			handleCancel() {
				this.modalVisible = false;
			},
			download(v) {
				window.open(
					v.url +
					"?attname=&response-content-type=application/octet-stream&filename=" +
					v.title
				);
			},
			showOffice(v) {
				window.open("https://view.officeapps.live.com/op/view.aspx?src=" + v.url);
			},
			showFile(v) {
				window.open(v.url + "?preview=true");
			},
			previewFile(v) {
				if (v.type.indexOf("audio") >= 0) {
					this.showVideo(v);
				} else if (v.type.indexOf("office") >= 0 || v.type.indexOf("word") >= 0) {
					this.showOffice(v);
				} else if (
					v.type.indexOf("pdf") >= 0 ||
					v.type.indexOf("text") >= 0 ||
					v.type.indexOf("octet") >= 0
				) {
					this.showFile(v);
				}
			},
			changeDropDown(row, v) {
				if (v == "rename") {
					this.rename(row);
				} else if (v == "copy") {
					this.copy(row);
				} else if (v == "remove") {
					this.remove(row);
				} else if (v == "share") {
					this.share(row);
				}
			},
			share(v) {
				this.$copyText(v.url).then((e) => {
					this.$Message.success("复制链接成功");
				});
			},
			copy(v) {
				this.$Modal.confirm({
					title: "确认复制",
					content: "您确认要复制文件 " + v.title + " ?",
					loading: true,
					onOk: () => {
						copyFile({
							id: v.id,
							key: v.fkey
						}).then((res) => {
							this.$Modal.remove();
							if (res.success) {
								this.$Message.success("复制文件成功，新文件名为 副本_" + v.title);
								this.getDataList();
							}
						});
					},
				});
			},
			removeAll() {
				if (this.selectList.length <= 0) {
					this.$Message.warning("您还未选择要删除的数据");
					return;
				}
				this.$Modal.confirm({
					title: "确认删除",
					content: "您确认要删除所选的 " + this.selectList.length + " 个文件?",
					loading: true,
					onOk: () => {
						let ids = "";
						this.selectList.forEach(function(e) {
							ids += e.id + ",";
						});
						ids = ids.substring(0, ids.length - 1);
						deleteFile({
							ids: ids
						}).then((res) => {
							this.$Modal.remove();
							if (res.success) {
								this.$Message.success("批量删除文件成功");
								this.clearSelectAll();
								this.getDataList();
							}
						});
					},
				});
			},
			remove(v) {
				this.$Modal.confirm({
					title: "确认删除",
					content: "您确认要删除文件 " + v.title + " ?",
					loading: true,
					onOk: () => {
						deleteFile({
							ids: v.id
						}).then((res) => {
							this.$Modal.remove();
							if (res.success) {
								this.clearSelectAll();
								this.$Message.success("删除文件 " + v.title + " 成功");
								this.getDataList();
							}
						});
					},
				});
			},
			handleSubmit() {
				this.$refs.form.validate((valid) => {
					if (valid) {
						this.submitLoading = true;
						let params = {
							id: this.form.id,
							newKey: this.form.fkey,
							newTitle: this.form.title,
						};
						renameFile(params).then((res) => {
							this.submitLoading = false;
							if (res.success) {
								this.$Message.success("操作成功");
								this.getDataList();
								this.modalVisible = false;
							}
						});
					}
				});
			},
			rename(v) {
				this.modalTitle = "编辑文件名";
				// 转换null为""
				for (let attr in v) {
					if (v[attr] == null) {
						v[attr] = "";
					}
				}
				let str = JSON.stringify(v);
				let data = JSON.parse(str);
				this.form = data;
				this.modalVisible = true;
			},
			clearSelectAll() {
				this.$refs.table.selectAll(false);
				this.totalSize = "";
			},
			changeSelect(e) {
				this.selectList = e;
				let size = 0;
				e.forEach((item) => {
					size += item.size * 1.0;
				});
				this.totalSize = this.util.getFileSize(size);
			},
		},
		mounted() {
			this.init();
		},
	};
</script>