阅行客电子档案
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1067 lines
38 KiB

<template>
<div class="preview-content right-preview">
<el-form ref="addOrUpdateForm" :model="addOrUpdateForm" :rules="rules" :validate-on-rule-change="false" label-width="125px">
<el-row :gutter="4" style="padding:0 20px">
<draggable v-bind="{draggable:'.drag-item',animation:500}" :disabled="!isDraggable" @update="datadragEnd">
<el-col v-for="(item,index) in formPreviewData" v-show="item.fieldName !== 'barcode' && item.fieldName !== 'is_entity'" :key="index" :class="['drag-item',item.fieldName === 'barcode'? 'barcode-input':'']" :span="item.isLine || item.fieldName === 'barcode' ? 24 : 12">
<el-form-item :label="item.fieldCnName" :prop="item.fieldName">
<!-- select :load-options="loadOptions"-->
<treeselect
v-if="item.isInputClass === 'select'"
v-model="addOrUpdateForm[item.fieldName]"
:options="item.options"
:normalizer=" isTableType === 1 ? normalizerFonds : (isTableType === 2 ? normalizerClassify : normalizer)"
:clearable="false"
placeholder=""
flat
:style="{ width: item.editLength+'px'}"
:disabled="isDisabled"
:validate-event="!isDisabled"
no-options-text="无数据"
@select="selectTree"
@open="openTree(item)"
>
<div slot="value-label" slot-scope="{ node }">{{ getAutoNameUnknown(node.label) }}</div>
</treeselect>
<!-- text / number / textarea / popover -->
<!-- :validate-event="isDisabled" -->
<el-input
v-if="item.isInputClass !== 'select' && item.isInputClass !== 'date' && item.fieldName !== 'barcode' "
v-model="addOrUpdateForm[item.fieldName]"
:type="item.isInputClass === 'popover'? 'text' : item.isInputClass"
:rows="item.isInputClass === 'textarea' ? 3 : ''"
:class="{'input-popover':(item.isInputClass === 'popover')}"
:style="{ width: item.editLength+'px'}"
:disabled="isDisabled || (item.fieldName === 'archival_category_code')"
:validate-event="!isDisabled"
@keyup.enter.native="isRepeatHandle(item)"
@input="autoAddZero(item.isFilling, item.fieldName, addOrUpdateForm[item.fieldName], item.fillingDigit)"
@blur="isRepeatHandle(item)"
>
<i v-if="item.isInputClass === 'popover'" slot="suffix" class="el-input__icon iconfont icon-gengduo1" @click="handleCurrentFieldName(item)" />
</el-input>
<!-- date -->
<el-date-picker v-if="item.isInputClass === 'date'" v-model="addOrUpdateForm[item.fieldName]" type="date" align="right" format="yyyy-MM-dd" placeholder="" :clearable="false" :style="{ width: item.editLength+'px'}" :disabled="isDisabled" :validate-event="!isDisabled" />
</el-form-item>
</el-col>
</draggable>
</el-row>
<el-row v-if="!isHasCode && isDesFormType !== 'prearchiveLibrary' && isDesFormType !== 'mergeFile'" class="preview-form-bottom">
<el-col v-for="(item,index) in formPreviewData.slice(formPreviewData.length-1,formPreviewData.length)" :key="'barcode'+index">
<el-form-item :label="item.fieldCnName" :prop="item.fieldName">
<el-input v-model="addOrUpdateForm[item.fieldName]" type="text" style="width: 510px" :disabled="isDisabled" :validate-event="!isDisabled" @keyup.enter.native="isRepeatHandle(item)" @blur="isRepeatHandle(item)" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="isDesFormType === 'prearchiveLibrary'" class="preview-form-bottom">
<el-col>
<el-form-item label="电子原件" prop="fileOriginal" class="prearch-upload">
<el-input
v-model="fileOriginal"
type="text"
style="width: 446px"
readonly
/>
<div class="upload-btn">
<input id="upFile" type="file" name="upFile" @change="changeFile($event)">
<el-button size="small" type="primary"><i class="iconfont icon-shangchuan" />上传</el-button>
</div>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="isDesFormType !== 'prearchiveLibrary' && isDesFormType !== 'mergeFile'" class="preview-form-bottom">
<el-col v-for="(item,index) in formPreviewData" :key="index">
<el-form-item v-if="item.fieldName === 'is_entity'" :label="item.fieldCnName" :prop="item.fieldName" :rules="[{ required: true, message: '请选择',trigger: 'change' }]" class="pbysical-style">
<el-radio-group v-model="addOrUpdateForm[item.fieldName]">
<el-radio label="有" />
<el-radio label="无" />
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- 弹框形式的内容展示 -->
<el-dialog class="edit-form-dialog" :append-to-body="true" :visible="popoverVisible" :before-close="handleClose" :close-on-click-modal="false" :title="tableTitle">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table ref="popoverTable" :data="popoverTableData" highlight-current-row row-key="dictionaryCode" :tree-props="{children: 'childDictionarys', hasChildren: 'hasChildren'}" height="600" style="width: 100%;" @selection-change="handleSelectionChange" @row-click="clickRowHandler">
<el-table-column :selectable="checkboxT" type="selection" width="55" />
<el-table-column prop="dictionaryName" label="字典名称" show-overflow-tooltip />
<el-table-column prop="dictionaryCode" label="字典代码" />
<el-table-column prop="dictionaryRemarks" label="内容说明" show-overflow-tooltip />
</el-table>
</div>
</el-dialog>
<el-dialog class="edit-form-dialog" :append-to-body="true" :visible="popoverFondsVisible" :before-close="handleClose" :close-on-click-modal="false" :title="tableTitle">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table ref="popoverTable" :data="popoverTableDataFonds" highlight-current-row row-key="id" :tree-props="{children: 'childMenus', hasChildren: 'hasChildren'}" height="600" style="width: 100%; he" @selection-change="handleSelectionChange" @row-click="clickRowHandler">
<el-table-column type="selection" width="55" show-overflow-tooltip />
<el-table-column prop="fondsNo" label="全宗号" />
<el-table-column prop="fondsName" label="全宗名称" show-overflow-tooltip />
<el-table-column prop="fondsOrders" label="排序" width="60" />
</el-table>
</div>
</el-dialog>
<el-dialog class="edit-form-dialog" :append-to-body="true" :visible="popoverClassifyVisible" :before-close="handleClose" :close-on-click-modal="false" :title="tableTitle">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-table ref="popoverTable" :data="popoverTableDataClassify" highlight-current-row row-key="id" :tree-props="{children: 'childArchivesClass', hasChildren: 'hasChildren'}" height="600" style="width: 100%;" @selection-change="handleSelectionChange" @row-click="clickRowHandler">
<el-table-column type="selection" width="55" />
<el-table-column label="分类名称" prop="name" width="130" show-overflow-tooltip />
<el-table-column label="分类编号" prop="code" />
<el-table-column label="排序" prop="classSeq" />
<el-table-column label="所属门类" prop="categoryName" show-overflow-tooltip />
</el-table>
</div>
</el-dialog>
</div>
</template>
<script>
import { crud } from '@crud/crud'
import { FetchDoeditIsRepeat } from '@/api/archivesManage/archivesList'
import { collectAdd, collectEdit } from '@/api/collect/collect'
import { prearchEdit, FetchMergeToFile, FetchReDoeditIsRepeat } from '@/api/prearchiveLibrary/prearchiveLibrary'
import { getNoFormatField } from '@/api/system/category/fileNoFormat'
import draggable from 'vuedraggable'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { FetchSonDictionaryList, FetchDictionaryTree } from '@/api/system/dict'
import { FetchFondsAll } from '@/api/system/fonds'
import { FetchArchivesClassTree, FetchSonArchivesClass } from '@/api/system/archivesClass'
import { parseTime, getCurrentTime } from '@/utils/index'
import { reDocumentUpload } from '@/utils/upload'
import { mapGetters } from 'vuex'
export default {
name: 'PreviewForm',
components: { draggable, Treeselect },
mixins: [crud()],
inject: ['parentsData'],
props: {
isDisabled: {
type: Boolean,
required: true
},
formPreviewData: {
type: Array,
required: true
},
selectedCategory: {
type: Object,
default: function() {
return {}
}
},
selectedDocument: {
type: Object,
default: function() {
return {}
}
},
arcId: {
type: String,
default: ''
},
isHasCode: {
type: Boolean,
required: true
},
isDraggable: {
type: Boolean,
default: false
},
isDesFormType: {
type: String,
default: ''
},
collectLevel: {
type: Number,
default: 1
},
isTitleType: {
type: Number,
default: 2
}
},
data() {
return {
fileOriginal: null,
addOrUpdateForm: {
},
rules: {
},
isTableType: 1,
tableTitle: '字典列表',
popoverTableData: [], // popover - popoverTableData
popoverVisible: false, // popover - visible
popoverTableDataClassify: [],
popoverClassifyVisible: false,
popoverTableDataFonds: [],
popoverFondsVisible: false,
currentFieldName: null, // popover 当前fieldName
treeCurrentFiled: null,
categoryId: null,
result: null,
autoMatic: null,
file: null, // 附件 change
fileNames: '', // 附件 - name
formatType: '', // 附件 - type
postfix: '', // 附件 - 文件后缀
fileSize: '', // 附件 - 大小
filePath: '', // 附件 - path
px: '', // 附件 - 分辨率
nowDate: '', // 当前时间
fileJsonString: null,
mergeFileArcIds: null,
mergeFileCategory: null,
archivesType: null
}
},
computed: {
...mapGetters([
'baseApi'
])
},
watch: {
selectedCategory: function(newValue, oldValue) {
},
selectedDocument: function(newValue, oldValue) {
},
arcId: function(newValue, oldValue) {
},
isDesFormType: function(newValue, oldValue) {
},
formPreviewData: function() {
this.editFormRow()
// 区分 门类著录项 和 档案管理
if (this.isDesFormType === 'category') {
this.FetchNoFormatField(this.selectedCategory.id)
}
}
},
created() {
this.editFormRow()
},
mounted() {
},
methods: {
checkboxT(row, rowIndex) {
return row.level ? row.level === 3 : true
},
normalizer(node) {
if ((node.childDictionarys && !node.childDictionarys.length) || node.childDictionarys === null) {
delete node.childDictionarys
}
return {
id: node.dictionaryName,
label: node.dictionaryName,
children: node.childDictionarys,
isDisabled: node.level && node.level !== 3
}
},
normalizerClassify(node) {
if ((node.childArchivesClass && !node.childArchivesClass.length) || node.childArchivesClass === null) {
delete node.childArchivesClass
}
return {
id: node.code,
label: node.name,
children: node.childArchivesClass
}
},
normalizerFonds(node) {
if (node.childMenus == null || node.childMenus === 'null') {
delete node.childMenus
}
return {
id: node.fondsNo,
label: node.fondsName,
children: node.childMenus
}
},
// 处理vue-treeSelect回显出现unknown问题
getAutoNameUnknown(name) {
if (name.lastIndexOf('unknown') > -1) {
// 当treeselect翻译不了值时,name中有id,截取id,去调接口或者字典查询出名字
return name.split('(')[0]
} else {
return name
}
},
getNode(list, dictionaryName) {
let data;
(list || []).map(item => {
if (item.dictionaryName === dictionaryName) {
data = [item]
} else {
const child = this.getNode(item.childMenus, dictionaryName)
if (child) {
data = child
}
}
})
return data
},
getFondsNode(list, fondsNo) {
let data;
(list || []).map(item => {
if (item.fondsNo === fondsNo) {
data = [item]
} else {
const child = this.getFondsNode(item.childMenus, fondsNo)
if (child) {
data = child
}
}
})
return data
},
getClassfiyNode(list, code) {
let data;
(list || []).map(item => {
if (item.code === code) {
data = [item]
} else {
const child = this.getClassfiyNode(item.childArchivesClass, code)
if (child) {
data = child
}
}
})
return data
},
// 自动生成
handleAuto() {
let string = ''
const getAutoFiledVal = []
this.autoMatic.forEach(async val => {
if (!this.addOrUpdateForm[val.fieldName]) {
string += ''
} else {
const fieldInfo = this.formPreviewData.find(element => element.fieldName === val.fieldName)
if (fieldInfo.isInputClass === 'select' || fieldInfo.isInputClass === 'popover') {
if (fieldInfo.mateData === 3) {
await FetchSonDictionaryList({ 'pid': fieldInfo.dictionaryId.id }).then(res => {
const option = this.getNode(res, this.addOrUpdateForm[val.fieldName])
if (option) {
const obj = {}
obj.name = val.fieldName
obj.val = option[0].dictionaryCode + val.connector
obj.sequence = val.sequence
getAutoFiledVal.push(obj)
}
})
}
if (fieldInfo.mateData === 1) {
await FetchFondsAll().then(res => {
const option = this.getFondsNode(res, this.addOrUpdateForm[val.fieldName])
if (option) {
const obj = {}
obj.name = val.fieldName
obj.val = option[0].fondsNo + val.connector
obj.sequence = val.sequence
getAutoFiledVal.push(obj)
}
})
}
if (fieldInfo.mateData === 2) {
let categoryId
if (this.isDesFormType !== 'mergeFile' && this.isDesFormType !== 'arcives' && this.isDesFormType !== 'manageArcives') {
categoryId = this.selectedCategory.pid
} else {
categoryId = this.selectedCategory.id
}
await FetchArchivesClassTree({ 'categoryId': categoryId }).then(res => {
const option = this.getClassfiyNode(res, this.addOrUpdateForm[val.fieldName])
if (option) {
const obj = {}
obj.name = val.name
obj.val = option[0].code + val.connector
obj.sequence = val.sequence
getAutoFiledVal.push(obj)
}
})
}
} else {
const obj = {}
obj.name = val.fieldName
obj.val = this.addOrUpdateForm[val.fieldName] + val.connector
obj.sequence = val.sequence
getAutoFiledVal.push(obj)
}
}
getAutoFiledVal.sort(this.compare('sequence'))
string = getAutoFiledVal.map((item) => item.val).join('')
this.formPreviewData.map(item => {
if (item.isAutomatic) {
this.$set(this.addOrUpdateForm, item.fieldName, string)
}
})
})
},
// 排序
compare(property) {
return function(a, b) {
var value1 = a[property]
var value2 = b[property]
return value1 - value2
}
},
// 获取档号组成项
FetchNoFormatField(categoryId) {
getNoFormatField({ categoryId: categoryId, categoryLevel: this.collectLevel }).then(res => {
this.autoMatic = res
this.handleAuto()
})
},
// 获取对应字典子集数据
getAllSubset(item) {
if (item.mateData === 1) {
this.getFondsDatas(item)
} else if (item.mateData === 2) {
if (item.categoryId) {
this.getClassifyTree(item)
}
} else {
if (item.dictionaryId) {
const params = {
'pid': item.dictionaryId.id
}
this.isTableType = 3
this.tableTitle = '字典列表'
if (this.selectedCategory.arrangeType === 3 && this.collectLevel === 2 && item.dictionaryId.dictionaryCode === 'project_class') {
this.getDictsList(item)
} else {
FetchSonDictionaryList(params).then(res => {
if (item.isInputClass === 'select') {
this.$set(item, 'options', res)
} else if (item.isInputClass === 'popover') {
this.popoverTableData = res
this.popoverVisible = true
}
})
}
}
}
},
getFondsDatas(item) {
const parent = {}
parent.id = 0
parent.fondsName = '全宗选择'
this.isTableType = 1
this.tableTitle = '全宗列表'
FetchFondsAll().then(res => {
if (item.isInputClass === 'select') {
this.$set(item, 'options', res)
} else if (item.isInputClass === 'popover') {
this.popoverTableDataFonds = res
this.popoverFondsVisible = true
}
})
},
getClassifyTree(item) {
this.isTableType = 2
this.tableTitle = '分类列表'
let categoryId
if (this.isDesFormType !== 'mergeFile' && this.isDesFormType !== 'arcives' && this.isDesFormType !== 'manageArcives') {
categoryId = this.selectedCategory.pid
} else {
categoryId = this.selectedCategory.id
}
FetchArchivesClassTree({ 'categoryId': categoryId }).then(res => {
if (item.isInputClass === 'select') {
const classifyOptions = res.map(function(obj) {
if (obj.childArchivesClass !== null) {
obj.hasChildren = true
} else {
obj.hasChildren = false
}
if (obj.hasChildren) {
obj.children = null
}
return obj
})
this.$set(item, 'options', classifyOptions)
} else if (item.isInputClass === 'popover') {
this.popoverTableDataClassify = res
this.popoverClassifyVisible = true
}
})
},
getSonClass(tree, treeNode, resolve) {
setTimeout(() => {
FetchSonArchivesClass({ pid: tree.id }).then(res => {
const data = res.map(function(obj) {
if (obj.sonNum !== 0 && obj.sonNum) {
obj.hasChildren = true
obj.children = null
} else {
obj.hasChildren = false
}
return obj
})
resolve(data)
})
}, 100)
},
// 判断重复api
handlerIsRepeat(params, item) {
if (this.isDesFormType !== 'prearchiveLibrary') {
FetchDoeditIsRepeat(params).then(res => {
if (res) {
this.$message.error(item.fieldCnName + '不可重复')
}
})
} else {
FetchReDoeditIsRepeat(params).then(res => {
if (res) {
this.$message.error(item.fieldCnName + '不可重复')
}
})
}
},
// input 判断是否重复
isRepeatHandle(item) {
// 自动重复字段 - 是否重复
if (item.isRepeat) {
let params
if (this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile') {
params = {
'categoryId': this.selectedCategory.id,
'archivesId': this.arcId,
'fieldName': item.fieldName,
'value': this.addOrUpdateForm[item.fieldName]
}
} else {
params = {
'documentId': this.selectedCategory.id,
'archivesId': null,
'fieldName': item.fieldName,
'value': this.addOrUpdateForm[item.fieldName]
}
}
this.handlerIsRepeat(params, item)
}
if (this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile') {
if (!item.isAutomatic) {
const index = this.autoMatic.findIndex(i => item.fieldName === i.fieldName)
if (index !== -1) {
this.handleAuto()
}
}
}
},
// tree - open
openTree(item) {
this.treeCurrentFiled = item
this.$set(item, 'options', [])
this.getAllSubset(this.treeCurrentFiled)
},
// tree - select
selectTree(val) {
if (val.fondsNo) {
this.addOrUpdateForm[this.treeCurrentFiled.fieldName] = val.fondsName
} else if (val.code) {
this.addOrUpdateForm[this.treeCurrentFiled.fieldName] = val.name
} else {
this.addOrUpdateForm[this.treeCurrentFiled.fieldName] = val.dictionaryName
}
// 自动重复字段 - 是否重复 - treeSelect方式
if (this.treeCurrentFiled.isRepeat) {
let params
if (this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile') {
params = {
'categoryId': this.selectedCategory.id,
'archivesId': this.arcId,
'fieldName': this.treeCurrentFiled.fieldName,
'value': val.dictionaryName
}
} else {
params = {
'documentId': this.selectedCategory.id,
'archivesId': null,
'fieldName': this.treeCurrentFiled.fieldName,
'value': val.dictionaryName
}
}
this.handlerIsRepeat(params, this.treeCurrentFiled)
}
if (this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile') {
if (this.autoMatic) {
const index = this.autoMatic.findIndex(i => this.treeCurrentFiled.fieldName === i.fieldName)
if (index !== -1) {
this.handleAuto()
}
}
}
},
// popover - table 单选
clickRowHandler(row) {
this.$refs.popoverTable.clearSelection()
if (!row.level || row.level === 3) {
this.$refs.popoverTable.toggleRowSelection(row)
} else {
return false
}
},
// popover - table 选中得项
handleSelectionChange(val) {
if (val.length > 0) {
if (this.isTableType === 1) {
this.addOrUpdateForm[this.currentFieldName] = val[0].fondsNo
} else if (this.isTableType === 2 && this.isDesFormType !== 'prearchiveLibrary') {
this.addOrUpdateForm[this.currentFieldName] = val[0].code
} else {
this.addOrUpdateForm[this.currentFieldName] = val[0].dictionaryName
}
}
this.$refs.popoverTable.clearSelection()
this.popoverVisible = false
this.popoverClassifyVisible = false
this.popoverFondsVisible = false
if (this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile') {
if (this.autoMatic) {
const index = this.autoMatic.findIndex(i => this.currentFieldName === i.fieldName)
if (index !== -1) {
this.handleAuto()
}
}
}
},
// popover - 当前选中得
handleCurrentFieldName(item) {
this.currentFieldName = item.fieldName
this.getAllSubset(item)
},
// 预览和输入时,自动补零
autoAddZero(isFilling, fieldName, value, fillingDigit) {
if (isFilling) {
this.addOrUpdateForm[fieldName] = value.toString().padStart(fillingDigit, '0').slice(-1 * fillingDigit)
}
},
// 寻找pid档案门类代码
findNodeById(node, targetId) {
if (node.id === targetId) {
return node
}
if (node.children && node.children.length > 0) {
for (const child of node.children) {
const result = this.findNodeById(child, targetId)
if (result) {
return result
}
}
}
return null
},
// 动态生成表单
editFormRow() {
this.rules = {}
this.formPreviewData.map(item => {
if (item.isInputClass === 'select') {
this.$set(item, 'options', [])
this.$set(this.addOrUpdateForm, item.fieldName, null) // 防止unkonwn
}
if (item.isDefaultValue !== '') {
this.$set(this.addOrUpdateForm, item.fieldName, item.isDefaultValue)
} else {
this.$set(this.addOrUpdateForm, item.fieldName, '')
if (item.isInputClass === 'select') {
this.$set(this.addOrUpdateForm, item.fieldName, null) // 防止unkonwn
}
}
if (item.fieldName === 'archival_category_code') {
let targetNode
if (this.isDesFormType !== 'mergeFile' && this.isDesFormType !== 'arcives' && this.isDesFormType !== 'manageArcives') {
const targetId = this.selectedCategory.pid
targetNode = this.findNodeById(this.crud.data[0], targetId)
} else {
targetNode = this.selectedCategory
}
if (targetNode) {
this.$set(this.addOrUpdateForm, item.fieldName, targetNode.code)
} else {
this.$set(this.addOrUpdateForm, item.fieldName, '')
}
}
this.$set(this.rules, item.fieldName, [
{
required: !!item.isRequired,
message: (item.isInputClass === 'text' ? '请输入' : '请选择') + item.fieldCnName,
trigger: item.isInputClass === 'text' ? 'blur' : 'change'
}
])
})
},
// 预览界面排序
datadragEnd(event) {
// 调换顺序
const oldIndex = event.oldIndex // 移动初始位置
const newIndex = event.newIndex // 运动终止位置
const diff = Math.abs(newIndex - oldIndex) // 插值绝对值
const index = this.formPreviewData[oldIndex]
if (oldIndex > newIndex) {
for (let i = 0; i < diff; i++) {
this.formPreviewData[oldIndex - i] = this.formPreviewData[oldIndex - i - 1]
}
this.formPreviewData[newIndex] = index
} else {
for (let i = 0; i < diff; i++) {
this.formPreviewData[oldIndex + i] = this.formPreviewData[oldIndex + i + 1]
}
this.formPreviewData[newIndex] = index
}
},
submitForm(formName, categoryId, quickPaperArcId) {
// 时间格式化
this.formPreviewData.map(item => {
if (item.isInputClass === 'date') {
if (this.addOrUpdateForm[item.fieldName] !== '') {
this.$set(this.addOrUpdateForm, item.fieldName, parseTime(this.addOrUpdateForm[item.fieldName]).split(' ')[0])
}
}
})
delete this.addOrUpdateForm.id
this.$refs[formName].validate((valid) => {
if (valid) {
// 预归档库
if (this.isDesFormType === 'prearchiveLibrary') {
if (this.fileOriginal === null) {
this.$message({
message: '请上传电子文件',
type: 'error'
})
return false
}
const params = {
'id': this.arcId,
'ids': null,
'documentId': categoryId,
'delMan': null,
'jsonString': JSON.stringify(this.addOrUpdateForm),
'fileJsonString': this.fileJsonString
}
prearchEdit(params).then(res => {
if (res) {
this.$message.success(res)
this.$emit('close-dialog')
this.crud.refresh()
}
})
} else if (this.isDesFormType === 'mergeFile') {
// 合并成件
const params = {
'archivesId': null,
'archivesIds': this.mergeFileArcIds,
'documentId': categoryId,
'categoryId': this.mergeFileCategory,
'jsonString': JSON.stringify(this.addOrUpdateForm)
}
FetchMergeToFile(params).then(res => {
if (res) {
this.$message.success(res)
this.$emit('close-dialog')
this.crud.refresh()
}
})
} else {
// 收集库
let parentsId = null
// 2 项目 3 案卷 /文件 4 卷内 6 文件
if (this.isTitleType === 2) {
parentsId = null
} else if (this.isTitleType === 3) {
if (this.selectedCategory.arrangeType === 1) {
parentsId = null
} else {
parentsId = this.parentsData.parentsProjectId
}
} else if (this.isTitleType === 4) {
// 卷内
parentsId = this.parentsData.parentsAnjuanId
} else if (this.isTitleType === 6) {
// 原文
parentsId = this.parentsData.parentsJuanneiId
}
let params
if (quickPaperArcId.length !== 0 && this.archivesType === 'add') {
// 快速组卷时,组卷的文件是数组,所以要archivesIds 而不是 archivesId,正好是新增文件,所以this.arcId = null不用担心
params = {
'archivesId': this.arcId,
'archivesIds': quickPaperArcId,
'categoryId': categoryId,
'parentsId': parentsId,
'categoryLevel': 2,
'jsonString': JSON.stringify(this.addOrUpdateForm)
}
} else if (this.selectedCategory.arrangeType === 3 && this.collectLevel === 3 && this.archivesType === 'add') {
// 在项目下,未整理的文件只属于门类下,不属于任何项目或案卷,所以parentsId === null
params = {
'archivesId': this.arcId,
'archivesIds': null,
'categoryId': categoryId,
'parentsId': null,
'categoryLevel': this.collectLevel,
'jsonString': JSON.stringify(this.addOrUpdateForm)
}
} else {
params = {
'archivesId': this.arcId,
'archivesIds': null,
'categoryId': categoryId,
'parentsId': parentsId,
'categoryLevel': this.collectLevel,
'jsonString': JSON.stringify(this.addOrUpdateForm)
}
}
console.log(params)
if (this.archivesType === 'add') {
collectAdd(params).then(res => {
if (res.code === 200) {
this.$message.success(res)
this.$emit('close-dialog', parentsId)
}
})
} else {
collectEdit(params).then(res => {
if (res.code === 200) {
this.$message.success(res)
this.$emit('close-dialog', parentsId)
}
})
}
}
} else {
console.log('error submit!!')
return false
}
})
},
handleClose(done) {
this.popoverVisible = false
this.popoverClassifyVisible = false
this.popoverFondsVisible = false
this.popoverTableData = []
this.popoverTableDataClassify = []
this.popoverTableDataFonds = []
done()
},
// 选择附件
async changeFile(e) {
this.file = e.target.files[0]
this.fileSize = this.file.size
this.formatType = this.file.type.substring(0, this.file.type.indexOf('/'))
this.fileNames = this.file.name
this.postfix = this.file.name.substring(
this.fileNames.lastIndexOf('.') + 1,
this.fileNames.length
)
if (this.formatType === 'image') {
const fileBase64 = await this.getBase64(this.file)
const res = await this.getImgPx(fileBase64)
this.px = res.width + 'px*' + res.height + 'px'
} else {
this.px = ''
}
// 上传附件
reDocumentUpload(this.baseApi + '/api/re-document/uploadFile', this.file, this.selectedDocument.id).then(res => {
if (res.data.code === 200) {
this.filePath = res.data.data
this.uploadSave()
}
})
},
// 上传附件 - 选择上传即保存
uploadSave() {
this.nowDate = getCurrentTime()
const json = {
'file_name': this.fileNames,
'file_size': this.fileSize,
'file_type': this.postfix,
'file_path': this.filePath,
'sequence': null,
'archive_id': this.arcId,
'file_dpi': this.px,
'file_thumbnail': '',
'create_time': this.nowDate,
'id': null,
'is_quote': null
}
const arrayUpload = []
arrayUpload.push(json)
this.fileOriginal = this.fileNames
this.fileJsonString = JSON.stringify(arrayUpload)
},
// 将上传的图片转为base64
getBase64(file) {
const reader = new FileReader()
reader.readAsDataURL(file)
return new Promise((resolve) => {
reader.onload = () => {
resolve(reader.result)
}
})
},
// 获取图片的分辨率
getImgPx(img) {
const image = new Image()
image.src = img
return new Promise((resolve) => {
image.onload = () => {
const width = image.width
const height = image.height
resolve({ width, height })
}
})
},
// 项目级别 - 阶段分类
getDictsList(item) {
FetchDictionaryTree().then((res) => {
const filterCodes = ['project_class']
let filteredItems = JSON.parse(JSON.stringify(res)).filter(item => filterCodes.includes(item.dictionaryCode))
filteredItems = this.addLevelToDictionaryList(filteredItems, 1)
if (item.isInputClass === 'select') {
this.$set(item, 'options', filteredItems)
} else if (item.isInputClass === 'popover') {
this.popoverTableData = filteredItems
this.popoverVisible = true
}
}).catch(err => {
console.log(err)
})
},
// 给筛选出来的数据加level 方便后面是否可点击
addLevelToDictionaryList(dictionaryList, level) {
dictionaryList.forEach(dictionary => {
dictionary.level = level
if (dictionary.childDictionarys) {
dictionary.childDictionarys = this.addLevelToDictionaryList(dictionary.childDictionarys, level + 1)
}
})
return dictionaryList
}
}
}
</script>
<style lang="scss" scoped>
@import "~@/assets/styles/mixin.scss";
@import "~@/assets/styles/variables.scss";
@mixin preview-border-style{
[data-theme="dark"] & {
border: 1px solid #3a99fd;
}
[data-theme="light"] & {
border: 1px solid #EDEFF3;
}
}
@mixin preview-border-color{
[data-theme="dark"] & {
// border-color: #3a99fd;
border-color: #EDEFF3;
}
[data-theme="light"] & {
border-color: #EDEFF3;
}
}
.preview-content {
padding: 20px 0 0 0 !important;
margin-top: 0 !important;
border-radius: 4px;
margin: 0 auto;
border: 1px solid;
@include preview-border-color;
.el-row {
margin-left: 0 !important;
margin-right: 0 !important;
}
.el-col {
padding-left: 0 !important;
padding-right: 0 !important;
}
::v-deep .el-form-item__label{
@include tree_font_color;
}
::v-deep .el-input__inner,
::v-deep .vue-treeselect__control,
::v-deep .el-textarea__inner {
width: 100%;
background-color: transparent;
@include input_style;
}
::v-deep .vue-treeselect__control{
height: 32px !important;
}
::v-deep .el-input__prefix {
text-align: right;
right: 5px !important;
@include tree_font_color;
}
.input-popover {
::v-deep .el-input__suffix {
@include tree_font_color;
}
}
::v-deep .el-date-editor {
width: 225px;
.el-input__inner {
padding-left: 15px;
}
}
::v-deep .el-form-item--small .el-form-item__content {
line-height: 30px;
}
::v-deep .el-input.is-disabled .el-input__inner{
background-color: #f5f7fa;
color: #c0c4cc;
}
}
.preview-form-bottom{
padding: 20px 20px 0 20px;
border-top: 1px solid;
@include preview-border-color;
}
.prearch-upload{
margin-right: 0 !important;
::v-deep .el-form-item__content{
width: 540px !important;
display: flex;
justify-content: space-between;
.upload-btn{
position: relative;
width:96px;
margin-right: 0 !important;
margin-left: 10px;
overflow: initial !important;
#upFile{
position: absolute;
left: 0;
top: 0;
// opacity: 0;
width: 84px;
height: 34px;
}
.el-button{
margin-top: -2px;
font-weight: bold;
border-color: #0348f3;
color: #0348f3;
}
}
}
}
</style>