diff --git a/src/common/lang/en-us.js b/src/common/lang/en-us.js
index 6b765100..9a504a6a 100644
--- a/src/common/lang/en-us.js
+++ b/src/common/lang/en-us.js
@@ -509,6 +509,11 @@ module.exports = {
pleaseUpload: 'Please Upload',
file: 'File'
},
+ importWithTemplate: {
+ chooseFile: 'Select file',
+ downTemplate: 'Click to download template',
+ noFileMsg: 'Please select a file'
+ },
// 系统管理
system,
// 个人中心
diff --git a/src/common/lang/zh-cn.js b/src/common/lang/zh-cn.js
index eb0c1521..f4769af6 100644
--- a/src/common/lang/zh-cn.js
+++ b/src/common/lang/zh-cn.js
@@ -509,6 +509,11 @@ module.exports = {
pleaseUpload: '请上传',
file: '文件'
},
+ importWithTemplate: {
+ chooseFile: '选择文件',
+ downTemplate: '点击下载模板',
+ noFileMsg: '请选择一个文件'
+ },
// 系统管理
system,
// 个人中心
diff --git a/src/components/ImportWithTemplate.vue b/src/components/ImportWithTemplate.vue
new file mode 100644
index 00000000..d93aecdd
--- /dev/null
+++ b/src/components/ImportWithTemplate.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+ {{ $t('importWithTemplate.chooseFile') }}
+
+
+
+ {{ $t('importWithTemplate.downTemplate') }}
+
+
+
+
+
+
+
+
diff --git a/src/components/PersonnelInfo.vue b/src/components/PersonnelInfo.vue
new file mode 100644
index 00000000..ba08ac61
--- /dev/null
+++ b/src/components/PersonnelInfo.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ step.nodeName }}
+ {{ step.nodeName }}
+
+
+
+
+
+
+
+ {{ step.nodeRoleName }}
+ {{ step.nodeRoleName }}
+
+
+
+
+
+
+
+
+
{{ step.userList }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/jero/JUpload.vue b/src/components/jero/JUpload.vue
index a436bcce..81a465b5 100644
--- a/src/components/jero/JUpload.vue
+++ b/src/components/jero/JUpload.vue
@@ -2,44 +2,36 @@
-
-
-
- {{ text }}
-
+
+
+
+
+ {{ text }}
+
+
-
-
-
-
![]()
-
-
-
-
-
@@ -48,11 +40,15 @@
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getFileAccessHttpUrl, downloadFile } from '@/api/manage'
-import { previewPdf } from '@/utils/previewPdf'
-import JImagePreviewModal from '@comp/jero/modal/JImagePreviewModal.vue'
+import { getFileInfo } from '@/api/api'
+import { previewPdf } from '../../utils/previewPdf'
+
+// eslint-disable-next-line no-undef
+// const Base64 = require('js-base64').Base64
const FILE_TYPE_ALL = 'all'
const FILE_TYPE_IMG = 'image'
+// const FILE_TYPE_TXT = 'file'
const FILE_TYPE_IMGS = ['jpg', 'jpeg', 'png', 'raw']
const FILE_TYPE_PDF = 'pdf'
@@ -66,20 +62,19 @@ const Base64 = require('js-base64').Base64
const CAN_PREVIEW_FILE_TYPE = ['pdf', 'image']
// 不支持预览的文件后缀
const CAN_PREVIEW_FILE_SUFFIX = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'mp3', 'mp4', 'flv']
-
+const uidGenerator = () => {
+ return '-' + parseInt(Math.random() * 10000 + 1, 10)
+}
export default {
name: 'JUpload',
- components: { JImagePreviewModal },
data () {
return {
uploadAction: window._CONFIG.domianURL + '/sys/common/upload',
headers: {},
fileList: [],
newFileList: [],
- image: false,
uploadGoOn: true,
- containerId: null,
- imageUrl: null
+ fileTypes: this.fileType
}
},
props: {
@@ -126,6 +121,16 @@ export default {
required: false,
default: true
},
+ /**
+ * 仅返回文件id
+ * true 仅返回文件id
+ * false 返回reurl
+ * */
+ returnId: {
+ type: Boolean,
+ required: false,
+ default: false
+ },
number: {
type: Number,
required: false,
@@ -136,15 +141,9 @@ export default {
required: false,
default: true
},
- multiple: {
- type: Boolean,
- default: true
- },
- beforeUpload: {
- type: Function
- },
- isDownload: {
+ showUploadList: {
type: Boolean,
+ required: false,
default: true
}
},
@@ -153,16 +152,15 @@ export default {
immediate: true,
handler () {
const val = this.value
- this.initFileList(val)
- // if (val instanceof Array) {
- // if (this.returnUrl) {
- // this.initFileList(val.join(','))
- // } else {
- // this.initFileListArr(val)
- // }
- // } else {
- // this.initFileList(val)
- // }
+ if (val instanceof Array) {
+ if (this.returnUrl) {
+ this.initFileList(val.join(','))
+ } else {
+ this.initFileListArr(val)
+ }
+ } else {
+ this.initFileList(val)
+ }
}
}
},
@@ -190,67 +188,90 @@ export default {
// ---------------------------- end 图片左右换位置 -------------------------------------
},
methods: {
- // 将url的参数拆分成对象
- urlToParams (url) {
- const commonUrl = window._CONFIG.staticDomainURL
- // url截取参数的部分
- const paramsStr = url.slice(url.indexOf('?') + 1)
- const paramsObj = {
- url,
- id: url.slice(url.indexOf(commonUrl) + commonUrl.length + 1, url.indexOf('?'))
- }
- paramsStr.split('&').forEach(item => {
- const arr = item.split('=')
- paramsObj[arr[0]] = arr[1]
- })
- return paramsObj
- },
- initFileList (val) {
+ initFileListArr (val) {
if (!val || val.length === 0) {
this.fileList = []
return
}
- // 所有文件url的数组
- let arr = []
- // 用于临时存储文件的数组,最终会被赋值到this.fileList
- const fileList = []
- if (val instanceof Array) {
- // url数组直接返回,如果是对象数组,就将每个对象的url取出
- arr = this.returnUrl ? val : val.map(item => item.filePath)
- } else {
- // 将字符串拆分数组(props声明value只能是Array或String)
- arr = val.split(',')
+ for (let a = 0; a < val.length; a++) {
+ this.fileList.forEach((item) => {
+ if (item.url === val[a]) {
+ item.uid = uidGenerator()
+ item.response.status = 'done'
+ }
+ })
}
- arr.forEach(url => {
- if (url) {
- const params = this.urlToParams(url)
+ },
+ async initFileList (paths) {
+ if (!paths || paths.length === 0) {
+ this.fileList = []
+ return
+ }
+ let arr = paths.split(',')
+ // 返回路径的时候,对路径进行操作,取出所属id
+ if (!this.returnId && arr.length > 0) {
+ const newArr = []
+ arr.map(item => {
+ const itemArr = item.split('/')
+ newArr.push(itemArr[itemArr.length - 1])
+ })
+ arr = newArr
+ }
+ const fileList = []
+ for (let a = 0; a < arr.length; a++) {
+ // 获取每一个文件的信息,组成fileList
+ // 突然想判断现在的fileList 中是否是历史的信息,如果是的话则先进行匹配
+ const isHistory = this.fileList.find(file => file.response.status === 'history' && (file.response.result || {}).id === arr[a])
+ console.log('isHistory===', isHistory)
+ if (isHistory) {
+ fileList.push(isHistory)
+ } else {
+ const fileObj = await this.getFileInfo(arr[a])
+ const url = getFileAccessHttpUrl(arr[a])
+ const fileName = (fileObj || {}).fileName
+ const fileNameNotType = fileName.substring(0, fileName.lastIndexOf('.'))
+ const previewUrl = (fileObj || {}).url || ''
+ const previewName = previewUrl.substring(previewUrl.lastIndexOf(fileNameNotType))
fileList.push({
- uid: params.id,
- name: params.fullfilename,
+ uid: uidGenerator(),
+ name: (fileObj || {}).fileName,
status: 'done',
- url,
- // response用于下载和预览
+ url: url,
+ previewName,
response: {
- success: true,
- result: {
- id: params.id,
- fileName: params.fullfilename
- },
- status: 'history'
+ status: 'history',
+ message: arr[a],
+ result: fileObj
}
})
}
- })
- // 将处理好的数据回显
- this.fileList = fileList
+ }
+ this.fileList = [...fileList]
},
handlePathChange () {
const uploadFiles = this.fileList
let path = ''
+ // 文件id
+ let fileIds = ''
if (!uploadFiles || uploadFiles.length === 0) {
path = ''
}
const arr = []
+ // 如果returnid为true 只返回id
+ if (this.returnId) {
+ for (let a = 0; a < uploadFiles.length; a++) {
+ if (uploadFiles[a].status === 'done') {
+ arr.push(uploadFiles[a].response.result.id)
+ } else {
+ return
+ }
+ }
+ if (arr.length > 0) {
+ fileIds = arr.join(',')
+ }
+ this.$emit('change', fileIds)
+ return
+ }
for (let a = 0; a < uploadFiles.length; a++) {
if (uploadFiles[a].status === 'done') {
@@ -264,20 +285,39 @@ export default {
}
this.$emit('change', path)
},
- doBeforeUpload (file) {
+ beforeUpload (file) {
this.uploadGoOn = true
- const fileType = file.type
- if (this.fileType === FILE_TYPE_IMG) {
- if (fileType.indexOf('image') < 0) {
- this.$message.warning('请上传图片')
+ file.uploadGoOn = true
+ const fileSize = file.size // 上传的文件大小
+ const fileType = file.type // 上传的文件类型
+ if (fileSize > 1024 * 1024 * 100) {
+ this.$message.warning('文件大小限制为100M')
+ this.uploadGoOn = false
+ file.uploadGoOn = false
+ return false
+ }
+ // 不等于全部类型可以上传的时候,对上传的文件进行判断
+ if (this.fileType !== FILE_TYPE_ALL) {
+ // filter(tt => fileType.indexOf(tt) > -1) 判断用户传的文件类型,和要求传的文件类型是否一致
+ // 当上传的图片格式为jpg时,在此组件中,会返回类型为 image/jpeg ElememntUI设计如此 所以需要把用户传下来的jpg强制改成jpeg
+ this.fileTypes = this.fileTypes.replace('jpg', 'jpeg')
+ const arr = this.fileTypes.split(',').filter(tt => fileType.indexOf(tt) > -1)
+ if (arr.length === 0) {
+ this.$message.warning(this.fileTypeErrorMessage || `请上传${this.fileTypes}文件`)
this.uploadGoOn = false
+ file.uploadGoOn = false
return false
}
}
- // 扩展 beforeUpload 验证
- if (typeof this.beforeUpload === 'function') {
- return this.beforeUpload(file)
+ if (this.fileTypes === FILE_TYPE_IMG) {
+ if (fileType.indexOf('image') < 0) {
+ this.$message.warning('请上传图片')
+ this.uploadGoOn = false
+ file.uploadGoOn = false
+ return false
+ }
}
+ // TODO 扩展功能验证文件大小
return true
},
handleChange (info) {
@@ -292,14 +332,15 @@ export default {
if (info.file.response.success) {
fileList = fileList.map((file) => {
if (file.response) {
- // const reUrl = `${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.response.result.fileName}`
- // TODO getFileAccessHttpUrl方法会追加token,在之后拼参数
- file.url = getFileAccessHttpUrl(file.response.result.id) + '&fullfilename=' + file.response.result.fileName
+ // let reUrl = `${file.response.result.id}?token=${Vue.ls.get(ACCESS_TOKEN)}&fullfilename=${file.response.result.fileName}`;
+ file.url = getFileAccessHttpUrl(file.response.result.id)
}
return file
})
} else {
- this.$message.error(info.file.response.message)
+ info.fileList.pop()
+ this.uploadGoOn = false
+ this.$message.warn(info.file.response.message)
}
// this.$message.success(`${info.file.name} 上传成功!`);
} else if (info.file.status === 'error') {
@@ -373,6 +414,29 @@ export default {
const url = `${window._CONFIG.onlinePreviewDomainURL}?url=${encodeURIComponent(Base64.encode(fileFullUrl))}`
window.open(url)
},
+ getFileUrl (fileId) {
+ return `${window._CONFIG.domianURL}/sys/common/download/${fileId}`
+ },
+ /**
+ * 通过文件的id获取文件的相关信息
+ * @param id
+ */
+ getFileInfo (id) {
+ return new Promise(resolve => {
+ let result = {}
+ getFileInfo({ id: id }).then(res => {
+ if (res.success) {
+ result = res.result
+ }
+ }).finally(() => {
+ resolve(result)
+ })
+ })
+ },
+ /**
+ * 单个文件的下载功能
+ * @param file
+ */
handleDownload (file) {
// 下载文件
downloadFile(`/sys/common/download/${file.response.result.id}`, file.name)
@@ -387,7 +451,7 @@ export default {
}
-