- <template>
- <div class="operate">
- <el-form
- ref="ruleForm"
- :model="form"
- :rules="rules"
- class="dialogForm"
- :label-width="90"
- :disabled="opts.type === 'view'"
- >
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="文件名称:" prop="fileName">
- <el-input
- v-model="form.fileName"
- type="text"
- placeholder="请输入分类名称"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="保密等级:" prop="secretLevel">
- <el-select
- v-model="form.secretLevel"
- placeholder="请选择保密等级"
- style="width: 100%"
- >
- <el-option
- v-for="dict in document_secret_level"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="所属分类:" prop="typeId">
- <el-tree-select
- v-model="form.typeId"
- :data="treeData"
- node-key="id"
- :render-after-expand="false"
- :props="{label: 'typeName'}"
- check-strictly
- style="width: 100%"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="文件标签:" prop="fileTag">
- <el-select
- v-model="form.fileTag"
- placeholder="请选择文件标签"
- clearable
- style="width: 100%"
- multiple
- >
- <el-option
- v-for="dict in document_tag"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="12">
- <el-form-item label="电子档:" prop="sysFileSaveRequestList">
- <FileUpload
- v-model="form.sysFileSaveRequestList"
- :limit="1"
- :isBackName="true"
- :disabled="opts.type === 'view'"
- @preview="handlePreview"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="纸质原件:" prop="saveAddressId">
- <el-select
- v-model="form.saveAddressId"
- placeholder="请选择纸质原件存放地址"
- style="width: 100%"
- clearable
- >
- <el-option
- v-for="item in documentSaveAddressList"
- :key="item.id"
- :label="item.addressName"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="8">
- <el-form-item label="电子档名称:">
- <el-input
- :model-value="fileInfo.name"
- type="text"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="电子档格式:">
- <el-input
- :model-value="fileInfo.extension"
- type="text"
- disabled
- />
- </el-form-item>
- </el-col>
- <el-col :span="8">
- <el-form-item label="电子档大小:">
- <el-input
- :model-value="handleFileSize(fileInfo.size)"
- type="text"
- disabled
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row :gutter="20">
- <el-col :span="24">
- <el-form-item label="文件描述:" prop="remark">
- <el-input
- v-model="form.remark"
- type="textarea"
- placeholder="请输入文件描述"
- resize="none"
- :rows="4"
- />
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- </div>
- </template>
-
- <script setup>
- import { ref, reactive, onMounted, watch } from 'vue'
- import { inheritAttr } from '@/utils/v3'
- import { required } from '@/utils/validate-helper'
- import { handleFileSize } from '@/utils'
- import {
- getDocumentSaveAddressList,
- documentFileAdd,
- documentFileEdit,
- documentFileDetail
- } from '@/api/document/fileManagement/list'
- import { documentAccessRecordAdd } from '@/api/document/fileManagement/loanRecord'
- import { documentTypeTree } from '@/api/document/dataClassify'
- import FileUpload from '@/components/FileUpload'
- import { fileList } from '@/api/system/file'
- const methed = {
- add: documentFileAdd,
- edit: documentFileEdit
- }
-
- const { proxy } = getCurrentInstance()
- const {
- document_secret_level,
- document_tag,
- document_save_type
- } = proxy.useDict('document_secret_level', 'document_tag', 'document_save_type')
-
- const props = defineProps({
- curRow: {
- type: Object,
- default: () => ({})
- },
- opts: {
- type: Object,
- default: () => ({})
- }
- })
- const { curRow, opts } = props
- const emit = defineEmits(['close'])
- const treeData = ref([])
- const form = reactive({
- id: curRow.id || '',
- fileName: '',
- secretLevel: '',
- saveType: '',
- saveAddressId: '',
- typeId: '',
- fileTag: [],
- remark: '',
- sysFileSaveRequestList: []
- })
- watch(() => form.sysFileSaveRequestList, (val) => {
- if(val[0]){
- val[0].refType = 'document_file_attachment'
- }
- fileInfo.value = val[0] || {}
- nextTick(() => {
- proxy.$refs.ruleForm.validateField('sysFileSaveRequestList')
- })
- })
- const fileInfo = ref({})
-
- const rules = reactive({
- fileName: required('文件名称'),
- secretLevel: required('保密等级'),
- typeId: required('所属分类'),
- fileTag: required('文件标签'),
- sysFileSaveRequestList: required('电子档')
- })
-
- const documentSaveAddressList = ref([])
-
- const submit = () => {
- proxy.$refs.ruleForm.validate(async (valid, fields) => {
- if (valid) {
- let api = methed[opts.type]
- if(!api) return
- let saveType = 'electronic'
- if(form.saveAddressId){
- saveType = 'electronic,paper'
- }
- const params = {
- ...form,
- fileTag: form.fileTag.join(),
- saveType
- }
- const res = await api(params)
- if(res?.code !== 200) return
- proxy.$modal.msgSuccess('操作成功')
- emit('close', opts)
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- const getDocumentSaveAddressListFn = async () => {
- const res = await getDocumentSaveAddressList()
- if(res?.code !== 200) return
- documentSaveAddressList.value = res.data || []
- }
-
- const getTreeData = async () => {
- const res = await documentTypeTree()
- if(res?.code !== 200) return
- treeData.value = res.data || []
- }
-
- const getDetail = async () => {
- const res = await documentFileDetail(curRow.id)
- if(res?.code !== 200) return
- inheritAttr(res.data, form)
- form.fileTag = form.fileTag ? form.fileTag.split(',') : []
- getFileInfo(res.data.id, 'document_file_attachment', (data) => {
- if(!data.length) return
- const fileInfo = data[0]
- form.sysFileSaveRequestList = [{ ...fileInfo, refType: 'document_file_attachment' }]
- })
- }
-
- const getFileInfo = async (id, refType, callback) => {
- const res = await fileList({ refId: id, refType })
- if(res?.code !== 200) return
- callback && callback(res.data)
- }
-
- const handlePreview = () => {
- console.log(form.id)
- documentAccessRecordAdd({
- fileId: form.id
- })
- }
-
- onMounted(() => {
- getDocumentSaveAddressListFn()
- getTreeData()
- if(curRow?.id) getDetail()
- })
-
- defineExpose({
- submit
- })
- </script>
-
- <style lang="scss" scoped>
-
- </style>