user5 8 mesiacov pred
rodič
commit
b86095effa

+ 2 - 0
package.json

@@ -18,6 +18,7 @@
     "@vueuse/core": "^8.5.0",
     "@wangeditor/editor": "^5.1.23",
     "@wangeditor/editor-for-vue": "^5.1.12",
+	"ali-oss": "^6.17.1",
     "ace-builds": "^1.4.14",
     "animate.css": "4.1.1",
     "axios": "^0.26.1",
@@ -34,6 +35,7 @@
     "jeeplus-form-boot-v3": "^2.1.0",
     "jeeplus-devtools-boot-v3": "^2.1.2",
     "jquery": "^3.6.0",
+	"js-base64": "^3.7.2",
     "js-cookie": "3.0.0",
     "lodash": "^4.17.21",
     "lodash.omit": "^4.5.0",

+ 265 - 0
src/api/sys/OSSService.js

@@ -0,0 +1,265 @@
+import OSS from 'ali-oss'
+import { ElMessage } from 'element-plus'
+import request from '@/utils/httpRequest'
+
+export default class OSSSerive {
+	queryById (id) {
+		return request({
+			url: '/oss/file/queryById',
+			method: 'get',
+			params: { id: id },
+		})
+	}
+  saveMsg (param) {
+    return request({
+      url: '/oss/file/saveMsg',
+      method: 'post',
+      data: param
+    })
+  }
+	save (param) {
+    return request({
+      url: '/oss/file/save',
+      method: 'post',
+      data: param
+    })
+  }
+  findFileList (attachmentId) {
+    return request({
+		  url: '/oss/file/findFileList',
+      method: 'get',
+      params: {attachmentId: attachmentId}
+    })
+  }
+  getTemporaryUrl (url) {
+    return request({
+      url: '/oss/file/getTemporaryUrl',
+      method: 'get',
+      params: {url: url}
+    })
+  }
+  getFileSizeByUrl (url) {
+    return request({
+      url: '/oss/file/getFileSizeByUrl',
+      method: 'get',
+      params: {url: url}
+    })
+  }
+  deleteMsgById (id) {
+    return request({
+      url: '/oss/file/deleteMsgById',
+      method: 'get',
+      params: {id: id}
+    })
+  }
+  downLoadAttach (url) {
+    return request({
+      url: '/oss/file/downLoadAttach',
+      method: 'get',
+      responseType: 'blob',
+      params: {file: url}
+    })
+  }
+
+  getFileListByAttachmentIdAndModuleType (attachmentId,moduleType) {
+	return request({
+		url: '/oss/file/getFileListByAttachmentIdAndModuleType',
+		method: 'get',
+		params: {attachmentId: attachmentId,moduleType:moduleType}
+	})
+  }
+}
+
+export const client = new OSS({
+region: 'oss-cn-hangzhou', // oss地址
+accessKeyId: 'LTAI5tKa6kzGr5EyPWJB4EcD', // 通过阿里云控制台创建的AccessKey ID。
+accessKeySecret: 'arHxB7ZPhizrBYf4844TtyaRctPMgW', // 通过阿里云控制台创建的AccessKey Secret。
+  bucket: 'xgxm-test', // 仓库名字
+	// bucket: 'xg-pg', // 仓库名字
+  useFetch: true, // 支持上传大于100KB的文件
+  secure: false // 返回的url为https
+})
+
+export const headers = {
+  // 指定该Object被下载时网页的缓存行为。
+  'Cache-Control': 'no-cache',
+  // 指定该Object被下载时的名称。
+  'Content-Disposition': 'inline',
+  // 指定该Object被下载时的内容编码格式。
+  'Content-Encoding': 'UTF-8',
+  // 指定过期时间。
+  Expires: 'Wed, 08 Jul 2023 16:57:01 GMT',
+  // 指定Object的存储类型。
+  'x-oss-storage-class': 'Standard',
+  // 指定Object的访问权限。
+  // 'x-oss-object-acl': 'private',
+  // 设置Object的标签,可同时设置多个标签。
+  'x-oss-tagging': 'Tag1=1&Tag2=2',
+  // 指定CopyObject操作时是否覆盖同名目标Object。此处设置为true,表示禁止覆盖同名Object。
+  'x-oss-forbid-overwrite': 'true'
+  // 'secure': 'true'
+}
+
+export function onChange (file, files) {
+  // console.log(file, 'file', files, 'Filest')
+  return files
+}
+
+// eslint-disable-next-line no-unused-vars
+export function handleUploadSuccess (response, file, fileS) {
+  // console.log(response, file, fileS, 'response, file, fileList')
+}
+
+export function handleRemove (e, files) {
+  return files
+}
+
+export function fileName (file) {
+  // console.log('文件名称处理')
+  const tmpcnt = file.file.name.lastIndexOf('.')
+  let fileName = file.file.name.substring(0, tmpcnt)
+  // 将单引号‘’都转换成',将双引号“”都转换成"
+  fileName = fileName.replace(/’|‘/g, '\'').replace(/“|”/g, '')
+  // 将中括号【】转换成[],将大括号{}转换成{}
+  fileName = fileName.replace(/【/g, '(').replace(/】/g, ')').replace(/{/g, '(').replace(/}/g, ')')
+  fileName = fileName.replace(/\[/g, '(').replace(/]/g, ')').replace(/{/g, '(').replace(/}/g, ')')
+  // 将逗号,转换成,,将:转换成:
+  fileName = fileName.replace(/,/g, ',').replace(/:/g, ':')
+  // 将中文——转换为英文-
+  fileName = fileName.replace(/—/g, '-')
+  fileName = fileName.replace(/……/g, '')
+  fileName = fileName.replace(/±/g, '')
+  fileName = fileName.replace(/#/g, '')
+  fileName = fileName.replace(/%/g, '')
+  fileName = fileName.replace(/Π/g, '')
+  fileName = fileName.replace(/π/g, '')
+  fileName = fileName.replace(/·/g, '.')
+  // console.log('文件名处理结果', fileName)
+  return fileName
+}
+
+export function beforeAvatarUpload (file, fileList, maxValue) {
+  // 文件大小校验
+  const isLt2M = file.size / 1024 / 1024 < maxValue
+  if (!isLt2M) {
+    fileList.splice(fileList.length - 1, 1)
+    // console.log('文件大小不能超过 ' + maxValue + ' MB!')
+  }
+  return isLt2M
+}
+
+export function exnameFix (file, isShow, names) {
+  // console.log('格式校验')
+  const tmpcnt = file.name.lastIndexOf('.')
+  const exname = file.name.substring(tmpcnt + 1) // 获取后缀名
+  if (names.indexOf(exname) < 0) {
+    if (isShow === '1') {
+		ElMessage({
+			message: '不支持的格式!',
+			type: 'error',
+		})
+    }
+    return false
+  }
+  return true
+}
+
+export async function httpRequest (file, name, type, maxValue) { // 阿里云OSS上传
+  if (!beforeAvatarUpload(file.file, [], maxValue)) {
+    return
+  }
+  // console.log('开始上传')
+  // 判断扩展名
+  const tmpcnt = file.file.name.lastIndexOf('.') // 获取.的下标
+  const exname = file.file.name.substring(tmpcnt + 1) // 获取后缀名
+  // console.log(exname, '后缀名')
+  const now = new Date()
+  const year = now.getFullYear()
+  const month = now.getMonth() + 1
+  const day = now.getDate() > 10 ? now.getDate() : '0' + now.getDate()
+  const filePath = '/attachment-file/assess/' + type + '/' + year + '/' + month + '/' + day + '/' + now.getTime()
+  // console.log(filePath, '文件存储路径')
+  const fileName = filePath + name + '.' + exname
+  // console.log(fileName, '文件名')
+
+  await client.multipartUpload(fileName, file.file, {
+	  // eslint-disable-next-line no-unused-vars
+    progress: await function (p, checkpoint) {
+      file.onProgress({percent: Math.floor(p * 100)}) // 触发el-upload组件的onProgress方法
+    }
+    // mime: type,
+  }).then(await function (result) {
+    // console.log(result)
+    if (result.res.status === 200) {
+      // file.onSuccess(result) // 触发el-upload组件的onSuccess方法
+      file.file.url = fileName
+    }
+	  // eslint-disable-next-line handle-callback-err,no-unused-vars
+  }).catch(function (err) {
+    // console.log(err)
+    file.onError('上传失败') // 触发el-upload组件的onError方法,此方法会移除文件列表
+  })
+}
+
+// eslint-disable-next-line no-unused-vars
+function getTemporaryByUrl (url) {
+  return request({
+    url: '/oss/file/getTemporaryUrl',
+    method: 'get',
+    params: {url: url}
+  })
+}
+
+export async function openWindowOnUrl (row) {
+  if (row.url === undefined || row.url === null || row.url === '') {
+    // Message.error('没有获取到文件的url')
+    return
+  }
+  let rowUrl = ''
+  let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
+  if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+    await getTemporaryByUrl(row.url).then((data) => {
+      // eslint-disable-next-line no-undef
+      onPreview(data)
+    })
+    return
+  }
+  await getTemporaryByUrl(row.url).then((data) => {
+    rowUrl = data
+  })
+  if (suffix === 'pdf') {
+    window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
+  } else if (suffix === 'rar' || suffix === 'zip' || suffix === 'jar' || suffix === '7z') {
+    window.open('https://view.xdocin.com/xdoc?_xdoc=' + encodeURIComponent(rowUrl), '_blank')
+  } else {
+    window.open('https://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(rowUrl), '_blank')
+  }
+}
+
+export async function toHref (row) {
+	let name
+	if (row.attachmentName === '' || row.attachmentName === null ||row.attachmentName === undefined){
+		name = row.name
+	}else {
+		name = row.attachmentName
+	}
+  if (row.url === null || row.url === undefined || row.url === '') {
+    // Message.error('没有获取到文件的url')
+    return
+  }
+  const link = document.createElement('a')
+  await getTemporaryByUrl(row.url).then((data) => {
+    const url = data // 完整的url则直接使用
+    // 这里是将url转成blob地址,
+    fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
+      link.href = URL.createObjectURL(blob)
+      link.download = name || '' // 下载文件的名字
+      // a.download = url.split('/')[url.split('/').length -1] //  // 下载文件的名字
+      document.body.appendChild(link)
+      link.click()
+      // 在资源下载完成后 清除 占用的缓存资源
+      window.URL.revokeObjectURL(link.href)
+      document.body.removeChild(link)
+    })
+  })
+}

+ 2 - 0
src/main.js

@@ -4,6 +4,7 @@ import "element-plus/dist/index.css";
 import "element-plus/theme-chalk/display.css";
 import locale from "element-plus/lib/locale/lang/zh-cn";
 import moment from "moment";
+import commonJS from '@/utils/common';
 
 import VXETable from "vxe-table";
 import "vxe-table/lib/style.css";
@@ -45,6 +46,7 @@ app.config.globalProperties.lodash = lodash;
 app.config.globalProperties.deepClone = utils.deepClone;
 app.config.globalProperties.validatenull = utils.validatenull;
 app.config.globalProperties.$http = httpRequest; // ajax请求方法
+app.config.globalProperties.commonJS = commonJS; // ajax请求方法
 app.config.globalProperties.$cookies = VueCookies;
 
 app.use(store);

+ 3 - 0
src/utils/common.js

@@ -66,6 +66,9 @@ export default {
     }
     return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
   },
+  isNotEmpty (value) {
+  	return !this.isEmpty(value)
+  },
   /**
    * @param {string} value
    */

+ 21 - 14
src/utils/httpRequest.js

@@ -21,7 +21,7 @@ const BASE_URL =
 		: import.meta.env.VITE_APP_BASE;
 // 对面暴露的基础请求路径
 axios.BASE_URL = BASE_URL;
-
+let showAlert = true;
 /**
  * 请求拦截
  */
@@ -43,6 +43,9 @@ axios.interceptors.request.use(
 		if (tool.data.get(sysConfig.TOKEN)) {
 			config.headers.token = tool.data.get(sysConfig.TOKEN);
 		}
+
+		// 请求头带上当前域名
+		config.headers.domain = window.location.hostname;
 		// 请求地址处理
 		if (
 			!config.url.startsWith("http") &&
@@ -97,20 +100,24 @@ axios.interceptors.response.use(
 		if (error.response) {
 			// eslint-disable-next-line no-debugger
 			if (error.response.status === 408) {
-				// 超时自动刷新
-				ElMessageBox.confirm(
-					"当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。",
-					"无权限访问",
-					{
-						type: "error",
-						closeOnClickModal: false,
-						center: true,
-						confirmButtonText: "重新登录",
+					if (showAlert){
+						// 超时自动刷新
+						ElMessageBox.confirm(
+							"当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。",
+							"无权限访问",
+							{
+								type: "error",
+								closeOnClickModal: false,
+								center: true,
+								confirmButtonText: "重新登录",
+							}
+						).then(() => {
+							clearLoginInfo();
+							router.replace({ path: "/login" });
+						});
+						// 将标识变量设置为 false,表示已经弹出了提示
+						showAlert = false;
 					}
-				).then(() => {
-					clearLoginInfo();
-					router.replace({ path: "/login" });
-				});
 			} else if (error.response.status === 401) {
 				// 需要重新登录
 				ElNotification.error({

+ 544 - 0
src/views/common/UpLoadComponent.vue

@@ -0,0 +1,544 @@
+<!--文件上传组件-->
+<template>
+	<div :key="uploadKey">
+		<el-divider v-if="showDivider" content-position="left"><i class="el-icon-document"></i> {{dividerName}}</el-divider>
+		<el-upload ref="upload" style="display: inline-block; :show-header='status'" action=""
+				   :limit="999" :http-request="httpRequest"
+				   multiple
+				   :on-exceed="(files, fileList) =>{
+                      $message.warning(`当前限制选择 999 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+                     }"
+				   :show-file-list="false"
+				   :on-change="changes"
+				   :before-upload="beforeUpload"
+				   :on-progress="uploadVideoProcess"
+				   :on-success="success"
+				   :file-list="fileList">
+			<template v-if="auth==='view'&&uploadFlag===false" #tip>
+				<el-button :loading="loading" type="primary" size="default" :disabled="true"> 点击上传 </el-button>
+			</template>
+			<template v-else #trigger>
+				<el-button :loading="loading" type="primary" size="default"> 点击上传 </el-button>
+			</template>
+		</el-upload>
+		<div style="height: calc(100% - 80px);margin-top: 10px">
+			<!-- 进度条 -->
+			<el-progress style="margin-left: 5em" v-if="progressFlag" :percentage="loadProgress"></el-progress>
+			<el-table
+				ref="uploadTable"
+				v-loading="loading"
+				:key="tableKey"
+				:data="dataListNew">
+				<el-table-column type="seq" width="40"></el-table-column>
+				<el-table-column label="文件名称" prop="name" align="center">
+					<template #default="scope">
+						<div v-if="ifName(scope.row) === true">
+							<el-image
+								style="width: 30px; height: 30px;padding-top: 4px;"
+								:src="scope.row.lsUrl"
+								:preview-src-list="[scope.row.lsUrl]"
+								:preview-teleported="true"
+							></el-image>
+						</div>
+						<div v-else>
+							<el-link  type="primary" :underline="false" @click="showFile(scope.row)">{{scope.row.name}}</el-link>
+						</div>
+					</template>
+				</el-table-column>
+				<el-table-column label="创建人" prop="createBy.name" align="center"></el-table-column>
+				<el-table-column label="创建时间" prop="createTime" align="center"></el-table-column>
+				<el-table-column label="文件大小" prop="size" align="center">
+					<template #default="scope">
+						{{getSize(scope.row.size)}}
+					</template>
+				</el-table-column>
+				<el-table-column label="操作" width="200px" fixed="right" align="center">
+					<template  #default="scope">
+						<el-button text type="primary" key="01" icon="el-icon-download" size="small" @click="toHref(scope.row)" >下载</el-button>
+						<el-button text type="primary" key="02" icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index,fileList)" :disabled="auth==='view'&&delFlag === false&&createBy!==scope.row.createBy.name">删除</el-button>
+						<!--            <el-button v-if="createBy===scope.row.createBy.name" type="text"  icon="el-icon-delete" size="small"  @click="deleteById(scope.row, scope.$index)" :disabled="auth==='view'&&delFlag === false">删除2</el-button>-->
+					</template>
+				</el-table-column>
+			</el-table>
+		</div>
+		<!--    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" :zIndex=9999></el-image-viewer>-->
+	</div>
+</template>
+
+<script>
+	// eslint-disable-next-line no-unused-vars
+	import OSSSerivce, {
+		httpRequest,
+		// eslint-disable-next-line no-unused-vars
+		handleRemove,
+		fileName,
+		// eslint-disable-next-line no-unused-vars
+		beforeAvatarUpload,
+		// eslint-disable-next-line no-unused-vars
+		openWindowOnUrl,
+		// eslint-disable-next-line no-unused-vars
+		toHref
+	} from '@/api/sys/OSSService'
+	// import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
+	import moment from 'moment'
+	export default {
+		data () {
+			return {
+				uploadKey: '',
+				progressFlag: false,
+				loadProgress: 0,
+				fileList: [],
+				dataList: [],
+				oldDataList: [],
+				dataListNew: [],
+				url: '',
+				showViewer: false,
+				ossService: null,
+				auth: '',
+				directory: 'public',
+				maxValue: 300,
+				tableKey: '',
+				fileLoading: true,
+				dividerName: '',
+				uploadFlag: false,
+				delFlag: false,
+				createBy: '',
+				showDivider: true,
+				loading: false,
+				dataListLength: '',
+				uploadDelFlag: false
+			}
+		},
+		watch: {
+		},
+		created () {
+			this.ossService = new OSSSerivce()
+		},
+		components: {
+			// ElImageViewer
+		},
+		mounted () {
+			window.onPreview = this.onPreview
+		},
+		methods: {
+			/**
+			 * dividerName: 组件中divider的名称赋值
+			 * showDivider: ‘附件‘Divider是否展示
+			 *     注:值为空时,默认值为true
+			 *    showDivider=false时 ‘附件‘Divider隐藏
+			 **/
+			setDividerName (dividerName, showDivider) {
+				if (this.commonJS.isNotEmpty(dividerName)) {
+					this.dividerName = dividerName
+				}
+				if (this.commonJS.isNotEmpty(showDivider)) {
+					if (showDivider === false) {
+						this.showDivider = false
+					} else {
+						this.showDivider = true
+					}
+				} else {
+					this.showDivider = true
+				}
+			},
+			/**
+			 * 文件上传组件初始化
+			 * @param auth
+			 *    auth的值为"view"时,不可上传/编辑文件
+			 *    auth为其他值时,可上传/编辑文件
+			 * @param fileList  要显示到文件上传列表中的文件。
+			 *    注:文件必须要有url属性并且文件的url属性值必须是在oss中的路径值
+			 *    例:'/attachment-file/xxx/xxx/2022/9/08/xxx.jpg'
+			 * @param directory  要存放到oss的哪个文件夹下。
+			 *    注:值为空时,默认存放到"public"文件夹
+			 * @param maxValue  上传文件允许的最大值,单位:MB
+			 *    注:值为空时,默认值为300MB
+			 * @param dividerName  组件中divider的名称
+			 *    注:值为空时,默认值为‘附件’
+			 * @param uploadFlag  ‘上传文件’按钮是否禁用
+			 *    注:值为空时,默认值为false
+			 *    auth=view&&uploadFlag=false时 ‘上传文件’按钮禁用
+			 * @param delFlag  ‘删除’按钮是否禁用
+			 *    注:值为空时,默认值为false
+			 *    auth=view&&delFlag=false时 ‘删除’按钮禁用
+			 * @param showDivider  ‘附件‘Divider是否展示
+			 *    注:值为空时,默认值为true
+			 *    showDivider=false时 ‘附件‘Divider隐藏
+			 */
+			async newUpload (auth, fileList, directory, maxValue, dividerName, uploadFlag, delFlag, showDivider) {
+				this.uploadKey = Math.random()
+				await this.fileLoadingFalse()
+				if (this.commonJS.isEmpty(fileList)) {
+					fileList = []
+					this.fileLoading = true
+				} else {
+					this.dataListLength = fileList.length
+				}
+				if (this.commonJS.isEmpty(dividerName)) {
+					this.dividerName = '附件'
+				} else {
+					this.dividerName = dividerName
+				}
+				if (directory !== undefined && directory !== null && directory !== '' && directory !== {}) {
+					this.directory = directory
+				} else {
+					this.directory = 'public'
+				}
+				if (maxValue !== undefined && maxValue !== null && maxValue !== '' && maxValue !== 0) {
+					this.maxValue = maxValue
+				} else {
+					this.maxValue = 300
+				}
+				this.auth = auth
+				if (this.commonJS.isEmpty(uploadFlag)) {
+					this.uploadFlag = false
+				} else {
+					if (uploadFlag !== true && uploadFlag !== false) {
+						this.uploadFlag = false
+					} else {
+						this.uploadFlag = uploadFlag
+					}
+				}
+				if (this.commonJS.isEmpty(delFlag)) {
+					this.delFlag = false
+				} else {
+					if (delFlag !== true && delFlag !== false) {
+						this.delFlag = false
+						this.createBy = delFlag
+					} else {
+						this.delFlag = delFlag
+					}
+				}
+				this.oldDataList = []
+				for await (let item of fileList) {
+					await this.ossService.getFileSizeByUrl(item.url).then((data) => {
+						item.lsUrl = data.url
+						item.size = data.size
+						this.dataList.push(item)
+						this.oldDataList.push(item)
+						this.dataListNew.push(item)
+						if (this.dataListNew.length === fileList.length) {
+							this.fileLoading = true
+						}
+					})
+				}
+				// this.dataList = JSON.parse(JSON.stringify(fileList))
+				// this.dataListNew = JSON.parse(JSON.stringify(fileList))
+				if (this.commonJS.isEmpty(showDivider)) {
+					this.showDivider = true
+				} else {
+					if (showDivider === false) {
+						this.showDivider = false
+					} else {
+						this.showDivider = true
+					}
+				}
+			},
+			async httpRequest (file) {
+				await httpRequest(file, fileName(file), this.directory, this.maxValue)
+			},
+			async beforeUpload(file) {
+				console.log("beforeUpload",file)
+				if(this.uploadDelFlag){
+					this.$message.warning('该文件已上传,请勿重复上传');
+					this.uploadKey = Math.random()
+
+					return true; // 取消上传
+				}
+				// 其他判定逻辑...
+				return true; // 允许上传
+			},
+			uploadVideoProcess (event, file, fileList) {
+
+				let parent = this.$parent
+				while (!parent.inputForm) {
+					parent = parent['$parent']
+				}
+				this.progressFlag = true // 显示进度条
+				this.loadProgress = parseInt(event.percent) // 动态获取文件上传进度
+				if (this.loadProgress >= 100) {
+					this.loadProgress = 100
+					setTimeout(() => {
+						this.progressFlag = false
+					}, 1000) // 一秒后关闭进度条
+				}
+			},
+			getSize (value) {
+				if (this.commonJS.isEmpty(value)) {
+					return '0 B'
+				} else {
+					let val = parseInt(value)
+					if (this.commonJS.isEmpty(val)) {
+						return '0 B'
+					}
+					if (isNaN(val)) {
+						return '0 B'
+					}
+					if (val === 0) {
+						return '0 B'
+					}
+					let k = 1024
+					let sizes = ['B', 'KB', 'MB', 'GB', 'PB', 'TB', 'EB', 'ZB', 'YB']
+					let i = Math.floor(Math.log(val) / Math.log(k))
+					let result = val / Math.pow(k, i);
+					let kb = parseFloat(result.toPrecision(3));
+					return kb + '' + sizes[i]
+				}
+			},
+			async changes (file, fileList) {
+
+				this.uploadKey = Math.random()
+				console.log(fileList)
+				this.uploadDelFlag = false;
+				// if (file.status !== 'ready') {
+				//   return
+				// }
+
+				if (!beforeAvatarUpload(file, 1, this.maxValue)) {
+					this.$message.error('文件大小不能超过 ' + this.maxValue + ' MB!')
+					return
+				}
+				var verificationFileList = []
+				if(this.oldDataList){
+					for (let item of this.oldDataList) {
+						verificationFileList.push(item)
+					}
+				}
+				for (let item of fileList) {
+					verificationFileList.push(item)
+				}
+				var fileCount = 0;
+				for (let item of verificationFileList) {
+					var fileItem = item;
+					if(item.raw !== undefined && item.raw !== null && item.raw !== {}){
+						fileItem = item.raw;
+					}
+					if(file.raw.name === fileItem.name){
+						fileCount ++
+					}
+				}
+
+
+				if(fileCount>1){
+					this.uploadDelFlag = true;
+					return
+				}
+
+				this.dataListNew = []
+				this.dataList.forEach((item) => {
+					this.dataListNew.push(item)
+				})
+
+				var fileListNames = []
+				for (let fileItem of this.fileList) {
+					fileListNames.push(fileItem.name)
+				}
+				for (let item of fileList) {
+					if(fileListNames.length === 0 || fileListNames.indexOf(item.name) === -1){
+						this.fileList.push(item)
+					}
+					item.createTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
+					item.createBy = {
+						id: '',
+						name: ''
+					}
+					item.createBy.id = this.$store.state.user.id
+					item.createBy.name = this.$store.state.user.name
+					this.dataListNew.push(item)
+				}
+				for (let item of this.dataListNew) {
+					if (item.raw !== undefined && item.raw !== null && item.raw !== {}) {
+						item.url = item.raw.url
+						if (item.raw.url !== undefined && item.raw.url !== null && item.raw.url !== {}) {
+							this.ossService.getTemporaryUrl(item.raw.url).then((data) => {
+								item.lsUrl = data
+							})
+						}
+					}
+				}
+			},
+			async success(res, file,fileList) {
+				if(file.url){
+					this.$message.error('文件上传失败,请重新上传!')
+					for (let i = 0; i < this.dataListNew.length; i++) {
+						var fileItem = this.dataListNew[i];
+						if(this.dataListNew[i].raw !== undefined && this.dataListNew[i].raw !== null && this.dataListNew[i].raw !== {}){
+							fileItem = this.dataListNew[i].raw;
+						}
+						if(file.name === fileItem.name){
+							await this.deleteById(file,i)
+						}
+					}
+					for (let i = 0; i < fileList.length; i++) {
+						var fileListItem = fileList[i];
+						if(fileList[i].raw !== undefined && fileList[i].raw !== null && fileList[i].raw !== {}){
+							fileListItem = fileList[i].raw;
+						}
+						if(file.name === fileListItem.name){
+							await this.deleteById(file,i)
+						}
+					}
+				}
+			},
+			showFile (row) {
+				console.log('row', row)
+				openWindowOnUrl(row)
+			},
+			onPreview (url) {
+				this.url = url
+				this.showViewer = true
+			},
+			// 关闭查看器
+			closeViewer () {
+				this.url = ''
+				this.showViewer = false
+			},
+			toHref (row) {
+				toHref(row)
+			},
+			async deleteById (row, index,fileList) {
+				// this.$refs.upload.handleRemove(this.dataListNew[index])
+				await this.dataListNew.splice(index, 1)
+				await this.dataList.splice(index, 1)
+				if (this.commonJS.isNotEmpty(row.id)) {
+					this.ossService.deleteMsgById(row.id)
+				}
+				var newFileList = [];
+				for (var i = 0; i < fileList.length; i++) {
+					if (fileList[i].name !== row.name) {
+						newFileList.push(fileList[i])
+					}
+				}
+				this.fileList = newFileList;
+
+			},
+			async deleteFileById (row, index,fileList) {
+				// this.$refs.upload.handleRemove(this.dataListNew[index])
+				await this.dataListNew.splice(index, 1)
+				await this.dataList.splice(index, 1)
+				if (this.commonJS.isNotEmpty(row.id)) {
+					this.ossService.deleteMsgById(row.id)
+				}
+				var newFileList = [];
+				for (var i = 0; i < fileList.length; i++) {
+					if (fileList[i].name !== row.name) {
+						newFileList.push(fileList[i])
+					}
+				}
+				this.fileList = newFileList;
+
+				let parent = this.$parent
+				while (!parent.inputForm) {
+					parent = parent['$parent']
+				}
+			},
+			async parentDeleteById (row) {
+				console.log('this.dataListNew',this.dataListNew)
+				var index = null;
+				for (var j = 0; j < this.dataListNew.length; j++) {
+					if (this.dataListNew[j].name === row.name) {
+						index = j;
+					}
+				}
+				await this.dataListNew.splice(index, 1)
+				await this.dataList.splice(index, 1)
+				if (this.commonJS.isNotEmpty(row.id)) {
+					this.ossService.deleteMsgById(row.id)
+				}
+				var newFileList = [];
+				for (var i = 0; i < this.fileList.length; i++) {
+					if (this.fileList[i].name !== row.name) {
+						newFileList.push(this.fileList[i])
+					}
+				}
+				this.fileList = newFileList;
+
+				let parent = this.$parent
+				while (!parent.inputForm) {
+					parent = parent['$parent']
+				}
+
+			},
+			async deleteFileinfo (row) {
+				var index = null;
+				for (var j = 0; j < this.dataListNew.length; j++) {
+					if (this.dataListNew[j].name === row.name) {
+						index = j;
+					}
+				}
+				await this.dataListNew.splice(index, 1)
+				await this.dataList.splice(index, 1)
+				var newFileList = [];
+				for (var i = 0; i < this.fileList.length; i++) {
+					if (this.fileList[i].name !== row.name) {
+						newFileList.push(this.fileList[i])
+					}
+				}
+				this.fileList = newFileList;
+			},
+			/**
+			 * 关闭dialog时使用  清除el-upload中上传的文件
+			 */
+			clearUpload () {
+				this.fileList = []//用于清除上传文件的缓存
+				this.$refs.upload.clearFiles()
+				this.dataList = []
+				this.dataListNew = []
+				this.createBy = ''
+			},
+			/**
+			 * 获取当前文件列表中的文件数据
+			 */
+			getDataList () {
+				return this.dataListNew
+			},
+			/**
+			 * 判断进度条是否结束,附件是否加载完成
+			 * @returns {boolean}
+			 */
+			checkProgress () {
+				if (this.progressFlag === true) {
+					this.$message.warning('请等待附件上传完成再进行操作')
+					return true
+				}
+				if (this.fileLoading === false) {
+					this.$message.warning('请等待附件加载完成再进行操作')
+					if (this.dataListLength === this.dataListNew.length) {
+						this.fileLoading = true
+					}
+					return true
+				}
+				return false
+			},
+			ifName (row) {
+				if (this.commonJS.isEmpty(row.name)) {
+					row.name = '---'
+					return false
+				}
+				let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
+				if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+					return true
+				} else {
+					return false
+				}
+			},
+			fileLoadingFalse () {
+				this.fileLoading = false
+			},
+			// 开启/关闭页面的加载中状态
+			changeLoading (loading) {
+				if (this.commonJS.isNotEmpty(loading)) {
+					this.loading = loading
+				} else {
+					this.loading = false
+				}
+			}
+		}
+	}
+</script>
+<style>
+	.el-divider__text {
+		font-size: 16px;
+		font-weight: bold;
+	}
+</style>