Browse Source

bug修改/需求更新/ai著录

master
xuhuajiao 4 months ago
parent
commit
ddeb607e91
  1. 4
      .env.production
  2. 4
      public/static/config.js
  3. 215
      src/views/AIAssistant/AICataloging/index.vue
  4. 2
      src/views/AIAssistant/AIKeywords/index.vue
  5. 2
      src/views/AIAssistant/AIknowledgeGraph/index.vue
  6. 9
      src/views/archiveUtilize/archiveSearch/module/resultList.vue
  7. 52
      src/views/archiveUtilize/utillizeRecord/myUtilizeList.vue
  8. 52
      src/views/archiveUtilize/utillizeRecord/recordList.vue
  9. 2
      src/views/archivesManage/managementLibrary/index.vue
  10. 4
      src/views/collectReorganizi/collectionLibrary/index.vue
  11. 1
      src/views/collectReorganizi/collectionLibrary/module/bulkImport/index.vue
  12. 61
      src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue
  13. 1
      src/views/components/archivesDetail/detail.vue
  14. 4
      src/views/system/log/search.vue
  15. 6
      src/views/system/processManage/runningProcess/module/businessDetails/index.vue
  16. 5
      src/views/system/processManage/runningProcess/module/detail.vue
  17. 2
      src/views/system/user/center.vue
  18. 5
      src/views/system/user/processCenter/module/form.vue

4
.env.production

@ -2,10 +2,10 @@ ENV = 'production'
# 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置 # 如果使用 Nginx 代理后端接口,那么此处需要改为 '/',文件查看 Docker 部署篇,Nginx 配置
# 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http # 接口地址,注意协议,如果你没有配置 ssl,需要将 https 改为 http
VUE_APP_BASE_API = 'http://192.168.99.107:11100'
# VUE_APP_BASE_API = 'http://192.168.99.107:11100'
# VUE_APP_BASE_API = 'http://27.19.215.77:11100' # VUE_APP_BASE_API = 'http://27.19.215.77:11100'
# VUE_APP_BASE_API = 'http://27.16.212.58:11100' # VUE_APP_BASE_API = 'http://27.16.212.58:11100'
# VUE_APP_BASE_API = 'http://192.168.99.71:11110'
VUE_APP_BASE_API = 'http://192.168.99.71:11110'
# 如果接口是 http 形式, wss 需要改为 ws # 如果接口是 http 形式, wss 需要改为 ws
VUE_APP_WS_API = 'ws://27.16.212.58:11110' VUE_APP_WS_API = 'ws://27.16.212.58:11110'
VUE_APP_CAMERA_API = '192.168.99.107:3000' VUE_APP_CAMERA_API = '192.168.99.107:3000'

4
public/static/config.js

@ -1,8 +1,8 @@
window.g = { window.g = {
AXIOS_TIMEOUT: 10000, AXIOS_TIMEOUT: 10000,
// ApiUrl: 'http://27.16.212.58:11100', // 配置服务器地址, // ApiUrl: 'http://27.16.212.58:11100', // 配置服务器地址,
// ApiUrl: 'http://192.168.99.71:11110',
ApiUrl: 'http://192.168.99.107:11100',
ApiUrl: 'http://192.168.99.71:11110',
// ApiUrl: 'http://192.168.99.107:11100',
// ParentPage: { // 后续看需求配置 // ParentPage: { // 后续看需求配置
// CrossDomainProxyUrl: '/Home/CrossDomainProxy', // CrossDomainProxyUrl: '/Home/CrossDomainProxy',
// BtnsApi: '/api/services/app/Authorization/GetBtns', // BtnsApi: '/api/services/app/Authorization/GetBtns',

215
src/views/AIAssistant/AICataloging/index.vue

@ -36,8 +36,8 @@
<div v-if="selectedCategory.isType === 2" class="container-right"> <div v-if="selectedCategory.isType === 2" class="container-right">
<span class="right-top-line" /> <span class="right-top-line" />
<span class="left-bottom-line" /> <span class="left-bottom-line" />
<div>
<el-form>
<div style="display: flex; justify-content: flex-start;">
<!-- <el-form>
<el-form-item label="电子原件" prop="aiFileOriginal" class="prearch-upload"> <el-form-item label="电子原件" prop="aiFileOriginal" class="prearch-upload">
<p class="input-style">{{ aiFileOriginal }}</p> <p class="input-style">{{ aiFileOriginal }}</p>
<div class="upload-btn"> <div class="upload-btn">
@ -47,7 +47,19 @@
</el-button> </el-button>
</div> </div>
</el-form-item> </el-form-item>
</el-form>
</el-form> -->
<div class="upload-btn">
<input id="upFile" type="file" name="upFile" multiple @change="changeFile($event)">
<el-button :loading="aiLoading" size="small" type="primary"><i :class="['iconfont', aiLoading ? 'icon-huoqu' : 'icon-shangchuan']" />{{ aiLoading ? 'AI辅助著录识别中' : '选择文件' }}</el-button>
</div>
<!-- margin-left: 10px; line-height: 34px; height: 106px; overflow: hidden; overflow-y: scroll; -->
<div style="flex: 1; font-size: 12px; display: flex; line-height: 34px; ">
<div v-for="item in fileList" :key="item.name" class="file-list" style="margin-left: 10px;">
<i class="iconfont icon-xiaowenjian" style="font-size: 14px;" />
{{ item.name }}
<!-- <i class="el-icon-close" @click="deleteFile(item)" /> -->
</div>
</div>
</div> </div>
<div class="ai-category-main"> <div class="ai-category-main">
<div class="ai-des-left"> <div class="ai-des-left">
@ -72,8 +84,8 @@
<div class="des-title"> <div class="des-title">
<p>AI识别数据</p> <p>AI识别数据</p>
</div> </div>
<div ref="typingContainer" class="ai-des-json">
<pre v-if="aiJsonData" v-highlightjs="displayedText">{{ displayedText }}</pre>
<div class="ai-des-json">
<pre v-if="aiJsonData" ref="typingContainer" v-highlightjs="displayedText">{{ displayedText }}</pre>
</div> </div>
<div v-if="typingFinished" style="text-align: right;"> <div v-if="typingFinished" style="text-align: right;">
<el-button @click="saveAiData">保存</el-button> <el-button @click="saveAiData">保存</el-button>
@ -90,7 +102,7 @@ import crudCategory from '@/api/system/category/category'
import CRUD, { presenter, header } from '@crud/crud' import CRUD, { presenter, header } from '@crud/crud'
import PreviewForm from '@/views/components/category/PreviewForm' import PreviewForm from '@/views/components/category/PreviewForm'
import { FetchInitCategoryInputFieldByPid, FetchCategoryMenu } from '@/api/system/category/category' import { FetchInitCategoryInputFieldByPid, FetchCategoryMenu } from '@/api/system/category/category'
import { getCurrentTime } from '@/utils/index'
// import { getCurrentTime } from '@/utils/index'
export default { export default {
name: 'AICataloging', name: 'AICataloging',
@ -127,12 +139,7 @@ export default {
isDesFormType: 'arcives', isDesFormType: 'arcives',
collectLevel: 3, collectLevel: 3,
categoryMenu: [], categoryMenu: [],
aiLoading: false,
aiFileOriginal: null, aiFileOriginal: null,
aiJsonData: null,
displayedText: '',
typingInterval: null,
typingFinished: false,
file: null, // change file: null, // change
fileNames: '', // - name fileNames: '', // - name
formatType: '', // - type formatType: '', // - type
@ -141,7 +148,14 @@ export default {
filePath: '', // - path filePath: '', // - path
px: '', // - px: '', // -
nowDate: '', // nowDate: '', //
fileJsonString: null
fileJsonString: null,
aiLoading: false,
fileList: [],
aiJsonData: null,
displayedText: '',
typingInterval: null,
typingFinished: false,
currentLineIndex: 0
} }
}, },
computed: { computed: {
@ -198,6 +212,7 @@ export default {
children: item.categoryList.map(category => { children: item.categoryList.map(category => {
return { return {
label: category.cnName, label: category.cnName,
cnName: category.cnName,
id: category.id, id: category.id,
arrangeType: category.arrangeType, arrangeType: category.arrangeType,
isType: category.isType, isType: category.isType,
@ -215,6 +230,7 @@ export default {
return children.map(child => { return children.map(child => {
return { return {
label: child.cnName, label: child.cnName,
cnName: child.cnName,
id: child.id, id: child.id,
isType: child.isType, isType: child.isType,
pid: child.pid, pid: child.pid,
@ -320,23 +336,110 @@ export default {
}, },
// //
async changeFile(e) { 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)
// aiJsonData
this.aiJsonData = null
this.currentLineIndex = 0
this.displayedText = ''
this.typingFinished = false
this.typingInterval = null
// if (this.typingInterval) {
// clearInterval(this.typingInterval)
// }
const selectedFiles = Array.from(e.target.files)
const imageFiles = selectedFiles.filter(file => file.type.startsWith('image/'))
const nonImageFiles = selectedFiles.filter(file => !file.type.startsWith('image/'))
//
if (imageFiles.length > 0 && nonImageFiles.length > 0) {
this.$message.error('不能同时选择图片和其他类型文件,请重新选择')
return
}
const existingImageFiles = this.fileList.filter(item => item.formatType === 'image')
const existingNonImageFiles = this.fileList.filter(item => item.formatType !== 'image')
if (imageFiles.length > 0) {
if (existingImageFiles.length > 0) {
if (existingImageFiles.length + imageFiles.length > 3) {
// 3
this.fileList = this.fileList.filter(item => item.formatType !== 'image')
}
} else if (existingNonImageFiles.length > 0) {
//
this.fileList = this.fileList.filter(item => item.formatType === 'image')
}
//
if (imageFiles.length > 3) {
this.$message.error('图片文件最多只能选择 3 个,请重新选择')
return
}
for (const file of imageFiles) {
//
if (this.fileList.some(item => item.name === file.name)) {
this.$message.warning(`文件 ${file.name} 已存在,请勿重复上传`)
continue
}
const fileInfo = {
file: file,
size: file.size,
formatType: file.type.substring(0, file.type.indexOf('/')),
name: file.name,
postfix: file.name.substring(
file.name.lastIndexOf('.') + 1,
file.name.length
),
px: ''
}
const fileBase64 = await this.getBase64(file)
const res = await this.getImgPx(fileBase64) const res = await this.getImgPx(fileBase64)
this.px = res.width + 'px*' + res.height + 'px'
} else {
this.px = ''
fileInfo.px = res.width + 'px*' + res.height + 'px'
this.fileList.push(fileInfo)
this.uploadSave()
}
} else if (nonImageFiles.length > 0) {
if (existingNonImageFiles.length > 0) {
//
this.fileList = this.fileList.filter(item => item.formatType === 'image')
} else if (existingImageFiles.length > 0) {
//
this.fileList = this.fileList.filter(item => item.formatType !== 'image')
}
//
if (nonImageFiles.length > 1) {
this.$message.error('非图片文件最多只能选择 1 个,请重新选择')
return
}
for (const file of nonImageFiles) {
//
if (this.fileList.some(item => item.name === file.name)) {
this.$message.warning(`文件 ${file.name} 已存在,请勿重复上传`)
continue
} }
const fileInfo = {
file: file,
size: file.size,
formatType: file.type.substring(0, file.type.indexOf('/')),
name: file.name,
postfix: file.name.substring(
file.name.lastIndexOf('.') + 1,
file.name.length
),
px: ''
}
this.fileList.push(fileInfo)
this.uploadSave() this.uploadSave()
}
}
// //
// reDocumentUpload(this.baseApi + '/api/re-document/uploadFile', this.file, this.selectedDocument.id).then(res => { // reDocumentUpload(this.baseApi + '/api/re-document/uploadFile', this.file, this.selectedDocument.id).then(res => {
// if (res.data.code === 200) { // if (res.data.code === 200) {
@ -348,26 +451,26 @@ export default {
// - // -
uploadSave() { uploadSave() {
this.aiLoading = true this.aiLoading = true
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,
'last_modified': this.file.lastModified
}
const arrayUpload = []
arrayUpload.push(json)
this.aiFileOriginal = this.fileNames
this.fileJsonString = JSON.stringify(arrayUpload)
console.log(this.fileJsonString)
// 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,
// 'last_modified': this.file.lastModified
// }
// const arrayUpload = []
// arrayUpload.push(json)
// this.aiFileOriginal = this.fileNames
// this.fileJsonString = JSON.stringify(arrayUpload)
// console.log(this.fileJsonString)
setTimeout(() => { setTimeout(() => {
const json = `{ const json = `{
@ -416,24 +519,28 @@ export default {
this.aiJsonData = json this.aiJsonData = json
this.startTypingEffect() this.startTypingEffect()
this.aiLoading = false
}, 3000) }, 3000)
}, },
startTypingEffect() { startTypingEffect() {
const lines = this.aiJsonData.split('\n') const lines = this.aiJsonData.split('\n')
let currentLineIndex = 0
this.currentLineIndex = 0
this.displayedText = '' this.displayedText = ''
this.typingFinished = false this.typingFinished = false
this.typingInterval = setInterval(() => { this.typingInterval = setInterval(() => {
if (currentLineIndex < lines.length) {
this.displayedText += lines[currentLineIndex] + '\n'
currentLineIndex++
if (this.currentLineIndex < lines.length) {
this.displayedText += lines[this.currentLineIndex] + '\n'
this.currentLineIndex++
} else { } else {
clearInterval(this.typingInterval) clearInterval(this.typingInterval)
setTimeout(() => { setTimeout(() => {
this.typingFinished = true this.typingFinished = true
if (this.aiJsonData) {
// this.$refs.previewForm.archivesType = 'add'
this.$refs.previewForm.addOrUpdateForm = JSON.parse(this.aiJsonData) this.$refs.previewForm.addOrUpdateForm = JSON.parse(this.aiJsonData)
this.aiLoading = false
}
}, 1000) }, 1000)
} }
@ -493,6 +600,7 @@ export default {
.ai-category-main{ .ai-category-main{
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
margin-top: 10px;
.ai-des-left{ .ai-des-left{
width: 740px; width: 740px;
@ -502,9 +610,8 @@ export default {
flex: 1; flex: 1;
} }
.ai-des-form,
.ai-des-json{
height: calc(100vh - 272px);
.ai-des-form{
height: calc(100vh - 262px);
overflow-y: auto; overflow-y: auto;
padding-right: 10px; padding-right: 10px;
} }
@ -582,5 +689,7 @@ pre {
border-radius: 4px; border-radius: 4px;
white-space: pre-wrap; white-space: pre-wrap;
word-wrap: break-word; word-wrap: break-word;
height: calc(100vh - 300px);
overflow-y: auto;
} }
</style> </style>

2
src/views/AIAssistant/AIKeywords/index.vue

@ -405,6 +405,7 @@ export default {
children: item.categoryList.map(category => { children: item.categoryList.map(category => {
return { return {
label: category.cnName, label: category.cnName,
cnName: category.cnName,
id: category.id, id: category.id,
arrangeType: category.arrangeType, arrangeType: category.arrangeType,
isType: category.isType, isType: category.isType,
@ -422,6 +423,7 @@ export default {
return children.map(child => { return children.map(child => {
return { return {
label: child.cnName, label: child.cnName,
cnName: child.cnName,
id: child.id, id: child.id,
isType: child.isType, isType: child.isType,
pid: child.pid, pid: child.pid,

2
src/views/AIAssistant/AIknowledgeGraph/index.vue

@ -126,6 +126,7 @@ export default {
children: item.categoryList.map(category => { children: item.categoryList.map(category => {
return { return {
label: category.cnName, label: category.cnName,
cnName: category.cnName,
id: category.id, id: category.id,
arrangeType: category.arrangeType, arrangeType: category.arrangeType,
isType: category.isType, isType: category.isType,
@ -143,6 +144,7 @@ export default {
return children.map(child => { return children.map(child => {
return { return {
label: child.cnName, label: child.cnName,
cnName: child.cnName,
id: child.id, id: child.id,
isType: child.isType, isType: child.isType,
pid: child.pid, pid: child.pid,

9
src/views/archiveUtilize/archiveSearch/module/resultList.vue

@ -156,6 +156,7 @@
</template> </template>
<script > <script >
import { crud } from '@crud/crud'
import { FetchInitSearchFonds, FetchInitSearchCategory, FetchInitSearchArchiveCtgNo, FetchResearch, FetchSeniorSearch } from '@/api/archiveUtilize/archiveUtilize' import { FetchInitSearchFonds, FetchInitSearchCategory, FetchInitSearchArchiveCtgNo, FetchResearch, FetchSeniorSearch } from '@/api/archiveUtilize/archiveUtilize'
import { FetchAddBorrowCar } from '@/api/archiveUtilize/cart' import { FetchAddBorrowCar } from '@/api/archiveUtilize/cart'
import ArchivesInfo from '@/views/components/archivesDetail/detail' import ArchivesInfo from '@/views/components/archivesDetail/detail'
@ -165,6 +166,7 @@ import { mapGetters } from 'vuex'
export default { export default {
name: 'ResultList', name: 'ResultList',
components: { ArchivesInfo, LendForm }, components: { ArchivesInfo, LendForm },
mixins: [crud()],
props: { props: {
isCommon: { isCommon: {
type: Boolean, type: Boolean,
@ -484,6 +486,10 @@ export default {
this.categoryId = row.categoryPid this.categoryId = row.categoryPid
this.arcId = row.archivesId this.arcId = row.archivesId
this.$nextTick(() => { this.$nextTick(() => {
console.log('this.$refs.archivesInfo', this.$refs.archivesInfo)
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.isFourTest = true
if (row.categoryLevel === 2) { if (row.categoryLevel === 2) {
this.$refs.archivesInfo.isHasFile = false this.$refs.archivesInfo.isHasFile = false
this.$refs.archivesInfo.detailTitle = '案卷详情' this.$refs.archivesInfo.detailTitle = '案卷详情'
@ -493,9 +499,6 @@ export default {
this.$refs.archivesInfo.detailTitle = '文件详情' this.$refs.archivesInfo.detailTitle = '文件详情'
this.$refs.archivesInfo.getDetial(3, row.archivesId) this.$refs.archivesInfo.getDetial(3, row.archivesId)
} }
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.isFourTest = true
this.$refs.archivesInfo.archivesInfoVisible = true
}) })
}, },
initiateLending(item) { initiateLending(item) {

52
src/views/archiveUtilize/utillizeRecord/myUtilizeList.vue

@ -97,6 +97,7 @@
:data="detailArcData" :data="detailArcData"
style="width: 100%;" style="width: 100%;"
height="calc(100vh - 560px)" height="calc(100vh - 560px)"
@cell-dblclick="tableArcDoubleClick"
> >
<el-table-column type="index" label="序号" align="center" width="55" /> <el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="title" label="档案文件"> <el-table-column prop="title" label="档案文件">
@ -129,6 +130,7 @@
<el-button type="primary" @click.native="handleCloseDialog">关闭</el-button> <el-button type="primary" @click.native="handleCloseDialog">关闭</el-button>
</div> </div>
</el-dialog> </el-dialog>
<ArchivesInfo ref="archivesInfo" :category-id="categoryId" :arc-id="arcId" :is-title-type="isTitleType" />
</div> </div>
</template> </template>
@ -137,10 +139,12 @@ import CRUD, { presenter, crud } from '@crud/crud'
import pagination from '@crud/Pagination' import pagination from '@crud/Pagination'
import DateRangePicker from '@/components/DateRangePicker' import DateRangePicker from '@/components/DateRangePicker'
import { FetchBusinessFlowDetails } from '@/api/archivesManage/library' import { FetchBusinessFlowDetails } from '@/api/archivesManage/library'
import ArchivesInfo from '@/views/components/archivesDetail/detail'
import { parseTime } from '@/utils/index'
export default { export default {
name: 'RecordList', name: 'RecordList',
components: { pagination, DateRangePicker },
components: { pagination, DateRangePicker, ArchivesInfo },
mixins: [presenter(), crud()], mixins: [presenter(), crud()],
cruds() { cruds() {
return CRUD({ return CRUD({
@ -194,7 +198,10 @@ export default {
{ value: null, label: '全部' }, { value: null, label: '全部' },
{ value: true, label: '包含实体' }, { value: true, label: '包含实体' },
{ value: false, label: '不包含实体' } { value: false, label: '不包含实体' }
]
],
categoryId: null,
arcId: '',
isTitleType: 3
} }
}, },
watch: { watch: {
@ -253,6 +260,47 @@ export default {
}, },
handleCloseDialog(done) { handleCloseDialog(done) {
this.lendDetail = false this.lendDetail = false
},
// table -
tableArcDoubleClick(row) {
this.categoryId = row.categoryPid
this.arcId = row.archivesId
this.$nextTick(() => {
const currentDate = new Date()
const formattedDate = this.formatDate(currentDate)
const isStartTimeValid = parseTime(this.rowCurrent.giveStartTime) <= formattedDate
const isEndTimeValid = parseTime(this.rowCurrent.giveEndTime) >= formattedDate
console.log(isStartTimeValid)
console.log(isEndTimeValid)
// isShowUtilizeHandleBtn
if (this.rowCurrent.status === 3 && isStartTimeValid && isEndTimeValid) {
this.$refs.archivesInfo.isShowUtilizeHandleBtn = true
} else {
this.$refs.archivesInfo.isShowUtilizeHandleBtn = false
}
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.isFourTest = true
if (row.categoryLevel === 2) {
this.$refs.archivesInfo.isHasFile = false
this.$refs.archivesInfo.detailTitle = '案卷详情'
this.$refs.archivesInfo.getDetial(2, row.archivesId)
} else {
this.$refs.archivesInfo.isHasFile = true
this.$refs.archivesInfo.detailTitle = '文件详情'
this.$refs.archivesInfo.getDetial(3, row.archivesId)
}
})
},
formatDate(date) {
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
} }
} }
} }

52
src/views/archiveUtilize/utillizeRecord/recordList.vue

@ -108,6 +108,7 @@
:data="detailArcData" :data="detailArcData"
style="width: 100%;" style="width: 100%;"
height="calc(100vh - 560px)" height="calc(100vh - 560px)"
@cell-dblclick="tableArcDoubleClick"
> >
<el-table-column type="index" label="序号" align="center" width="55" /> <el-table-column type="index" label="序号" align="center" width="55" />
<el-table-column prop="title" label="档案文件"> <el-table-column prop="title" label="档案文件">
@ -140,6 +141,7 @@
<el-button type="primary" @click.native="handleCloseDialog">关闭</el-button> <el-button type="primary" @click.native="handleCloseDialog">关闭</el-button>
</div> </div>
</el-dialog> </el-dialog>
<ArchivesInfo ref="archivesInfo" :category-id="categoryId" :arc-id="arcId" :is-title-type="isTitleType" />
</div> </div>
</template> </template>
@ -148,10 +150,12 @@ import CRUD, { presenter, crud } from '@crud/crud'
import pagination from '@crud/Pagination' import pagination from '@crud/Pagination'
import DateRangePicker from '@/components/DateRangePicker' import DateRangePicker from '@/components/DateRangePicker'
import { FetchBusinessFlowDetails } from '@/api/archivesManage/library' import { FetchBusinessFlowDetails } from '@/api/archivesManage/library'
import ArchivesInfo from '@/views/components/archivesDetail/detail'
import { parseTime } from '@/utils/index'
export default { export default {
name: 'RecordList', name: 'RecordList',
components: { pagination, DateRangePicker },
components: { pagination, DateRangePicker, ArchivesInfo },
mixins: [presenter(), crud()], mixins: [presenter(), crud()],
cruds() { cruds() {
return CRUD({ return CRUD({
@ -220,7 +224,10 @@ export default {
{ value: 1, label: '全部' }, { value: 1, label: '全部' },
{ value: 2, label: '包含实体' }, { value: 2, label: '包含实体' },
{ value: 3, label: '不包含实体' } { value: 3, label: '不包含实体' }
]
],
categoryId: null,
arcId: '',
isTitleType: 3
} }
}, },
watch: { watch: {
@ -327,6 +334,47 @@ export default {
}, },
handleCloseDialog(done) { handleCloseDialog(done) {
this.lendDetail = false this.lendDetail = false
},
// table -
tableArcDoubleClick(row) {
this.categoryId = row.categoryPid
this.arcId = row.archivesId
this.$nextTick(() => {
const currentDate = new Date()
const formattedDate = this.formatDate(currentDate)
const isStartTimeValid = parseTime(this.rowCurrent.giveStartTime) <= formattedDate
const isEndTimeValid = parseTime(this.rowCurrent.giveEndTime) >= formattedDate
console.log(isStartTimeValid)
console.log(isEndTimeValid)
// isShowUtilizeHandleBtn
if (this.rowCurrent.status === 3 && isStartTimeValid && isEndTimeValid) {
this.$refs.archivesInfo.isShowUtilizeHandleBtn = true
} else {
this.$refs.archivesInfo.isShowUtilizeHandleBtn = false
}
this.$refs.archivesInfo.archivesInfoVisible = true
this.$refs.archivesInfo.archivesTabIndex = 0
this.$refs.archivesInfo.isFourTest = true
if (row.categoryLevel === 2) {
this.$refs.archivesInfo.isHasFile = false
this.$refs.archivesInfo.detailTitle = '案卷详情'
this.$refs.archivesInfo.getDetial(2, row.archivesId)
} else {
this.$refs.archivesInfo.isHasFile = true
this.$refs.archivesInfo.detailTitle = '文件详情'
this.$refs.archivesInfo.getDetial(3, row.archivesId)
}
})
},
formatDate(date) {
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
} }
} }
} }

2
src/views/archivesManage/managementLibrary/index.vue

@ -232,6 +232,7 @@ export default {
children: item.categoryList.map(category => { children: item.categoryList.map(category => {
return { return {
label: category.cnName, label: category.cnName,
cnName: category.cnName,
id: category.id, id: category.id,
arrangeType: category.arrangeType, arrangeType: category.arrangeType,
isType: category.isType, isType: category.isType,
@ -249,6 +250,7 @@ export default {
return children.map(child => { return children.map(child => {
return { return {
label: child.cnName, label: child.cnName,
cnName: child.cnName,
id: child.id, id: child.id,
isType: child.isType, isType: child.isType,
pid: child.pid, pid: child.pid,

4
src/views/collectReorganizi/collectionLibrary/index.vue

@ -232,6 +232,7 @@ export default {
children: item.categoryList.map(category => { children: item.categoryList.map(category => {
return { return {
label: category.cnName, label: category.cnName,
cnName: category.cnName,
id: category.id, id: category.id,
arrangeType: category.arrangeType, arrangeType: category.arrangeType,
isType: category.isType, isType: category.isType,
@ -249,6 +250,7 @@ export default {
return children.map(child => { return children.map(child => {
return { return {
label: child.cnName, label: child.cnName,
cnName: child.cnName,
id: child.id, id: child.id,
isType: child.isType, isType: child.isType,
pid: child.pid, pid: child.pid,
@ -337,6 +339,8 @@ export default {
// //
localStorage.setItem('currentArchivesKey', JSON.stringify(val)) localStorage.setItem('currentArchivesKey', JSON.stringify(val))
this.selectedCategory = val this.selectedCategory = val
console.log('val', val)
console.log('selectedCategoryselectedCategoryselectedCategoryselectedCategory', val)
if (this.selectedCategory.isType !== 1) { if (this.selectedCategory.isType !== 1) {
this.getDictionaryTreeByCategoryId(val.id) this.getDictionaryTreeByCategoryId(val.id)

1
src/views/collectReorganizi/collectionLibrary/module/bulkImport/index.vue

@ -134,6 +134,7 @@ export default {
created() { created() {
}, },
mounted() { mounted() {
console.log('selectedCategory', this.selectedCategory)
this.$nextTick(() => { this.$nextTick(() => {
this.getInitCategoryInputFieldByPid() this.getInitCategoryInputFieldByPid()
}) })

61
src/views/collectReorganizi/collectionLibrary/module/collectHeader.vue

@ -160,19 +160,21 @@
/> />
<div v-if="isAiAutoCategory" style="flex: 1; margin-left: 10px; "> <div v-if="isAiAutoCategory" style="flex: 1; margin-left: 10px; ">
<!-- AI辅助著录内容 --> <!-- AI辅助著录内容 -->
<div style="display: flex; justify-content: flex-start;">
<!-- style="display: flex; justify-content: flex-start;" -->
<!-- <div> -->
<div class="upload-btn"> <div class="upload-btn">
<input id="upFile" type="file" name="upFile" multiple @change="changeAiFile($event)"> <input id="upFile" type="file" name="upFile" multiple @change="changeAiFile($event)">
<el-button :loading="aiLoading" size="small" type="primary"><i :class="['iconfont', aiLoading ? 'icon-huoqu' : 'icon-shangchuan']" />{{ aiLoading ? 'AI辅助著录识别中' : '选择文件' }}</el-button> <el-button :loading="aiLoading" size="small" type="primary"><i :class="['iconfont', aiLoading ? 'icon-huoqu' : 'icon-shangchuan']" />{{ aiLoading ? 'AI辅助著录识别中' : '选择文件' }}</el-button>
</div> </div>
<div style="flex: 1; margin-left: 10px; line-height: 34px; height: 106px; overflow: hidden; overflow-y: scroll;">
<!-- margin-left: 10px; line-height: 34px; height: 106px; overflow: hidden; overflow-y: scroll; -->
<div style="flex: 1; padding: 10px 0; font-size: 12px; ">
<div v-for="item in fileList" :key="item.name" class="file-list"> <div v-for="item in fileList" :key="item.name" class="file-list">
<i class="iconfont icon-xiaowenjian" />
<i class="iconfont icon-xiaowenjian" style="font-size: 14px;" />
{{ item.name }} {{ item.name }}
<i class="el-icon-close" @click="deleteFile(item)" />
</div>
<!-- <i class="el-icon-close" @click="deleteFile(item)" /> -->
</div> </div>
</div> </div>
<!-- </div> -->
<pre v-if="aiJsonData" ref="typingContainer" v-highlightjs="displayedText">{{ displayedText }}</pre> <pre v-if="aiJsonData" ref="typingContainer" v-highlightjs="displayedText">{{ displayedText }}</pre>
</div> </div>
</div> </div>
@ -327,7 +329,8 @@ export default {
aiJsonData: null, aiJsonData: null,
displayedText: '', displayedText: '',
typingInterval: null, typingInterval: null,
typingFinished: false
typingFinished: false,
currentLineIndex: 0
} }
}, },
computed: { computed: {
@ -568,6 +571,16 @@ export default {
handleClose(done) { handleClose(done) {
this.formVisible = false this.formVisible = false
this.quickPaper = false this.quickPaper = false
this.isAiAutoCategory = false
this.aiJsonData = null
this.currentLineIndex = 0
this.displayedText = ''
this.typingFinished = false
if (this.typingInterval) {
clearInterval(this.typingInterval)
}
this.fileList = []
done() done()
}, },
// //
@ -1270,11 +1283,13 @@ export default {
async changeAiFile(e) { async changeAiFile(e) {
// aiJsonData // aiJsonData
this.aiJsonData = null this.aiJsonData = null
this.currentLineIndex = 0
this.displayedText = '' this.displayedText = ''
this.typingFinished = false this.typingFinished = false
if (this.typingInterval) {
clearInterval(this.typingInterval)
}
this.typingInterval = null
// if (this.typingInterval) {
// clearInterval(this.typingInterval)
// }
const selectedFiles = Array.from(e.target.files) const selectedFiles = Array.from(e.target.files)
const imageFiles = selectedFiles.filter(file => file.type.startsWith('image/')) const imageFiles = selectedFiles.filter(file => file.type.startsWith('image/'))
@ -1373,8 +1388,6 @@ export default {
}, },
uploadSave() { uploadSave() {
this.aiLoading = true this.aiLoading = true
this.aiJsonData = null
// this.$refs.previewForm.addOrUpdateForm = {}
setTimeout(() => { setTimeout(() => {
const json = `{ const json = `{
@ -1398,21 +1411,24 @@ export default {
}, },
startTypingEffect() { startTypingEffect() {
const lines = this.aiJsonData.split('\n') const lines = this.aiJsonData.split('\n')
let currentLineIndex = 0
this.currentLineIndex = 0
this.displayedText = '' this.displayedText = ''
this.typingFinished = false this.typingFinished = false
this.typingInterval = setInterval(() => { this.typingInterval = setInterval(() => {
if (currentLineIndex < lines.length) {
this.displayedText += lines[currentLineIndex] + '\n'
currentLineIndex++
if (this.currentLineIndex < lines.length) {
this.displayedText += lines[this.currentLineIndex] + '\n'
this.currentLineIndex++
} else { } else {
clearInterval(this.typingInterval) clearInterval(this.typingInterval)
setTimeout(() => { setTimeout(() => {
this.typingFinished = true this.typingFinished = true
this.$refs.previewForm.archivesType = 'add'
if (this.aiJsonData) {
// this.$refs.previewForm.archivesType = 'add'
this.$refs.previewForm.addOrUpdateForm = JSON.parse(this.aiJsonData) this.$refs.previewForm.addOrUpdateForm = JSON.parse(this.aiJsonData)
this.aiLoading = false
}
}, 1000) }, 1000)
} }
@ -1421,15 +1437,14 @@ export default {
if (container) { if (container) {
container.scrollTop = container.scrollHeight container.scrollTop = container.scrollHeight
} }
this.aiLoading = false
}, 200) }, 200)
}, },
deleteFile(item) {
const index = this.fileList.indexOf(item)
if (index !== -1) {
this.fileList.splice(index, 1)
}
},
// deleteFile(item) {
// const index = this.fileList.indexOf(item)
// if (index !== -1) {
// this.fileList.splice(index, 1)
// }
// },
// base64 // base64
getBase64(file) { getBase64(file) {
const reader = new FileReader() const reader = new FileReader()

1
src/views/components/archivesDetail/detail.vue

@ -105,6 +105,7 @@ export default {
}, },
methods: { methods: {
getDetial(collectLevel, rowId) { getDetial(collectLevel, rowId) {
console.log('111111111')
const params = { const params = {
'categoryId': this.categoryId !== '' ? this.categoryId : this.selectedCategory.id, 'categoryId': this.categoryId !== '' ? this.categoryId : this.selectedCategory.id,
'categoryLevel': collectLevel, 'categoryLevel': collectLevel,

4
src/views/system/log/search.vue

@ -106,7 +106,11 @@ export default {
}, },
methods: { methods: {
[CRUD.HOOK.beforeRefresh]() { [CRUD.HOOK.beforeRefresh]() {
if (this.isCenter) {
this.crud.query.username = this.user.username
} else {
this.crud.query[this.optionVal] = this.keyWord this.crud.query[this.optionVal] = this.keyWord
}
if (this.blurryTime) { if (this.blurryTime) {
this.crud.query.startTime = this.blurryTime[0] this.crud.query.startTime = this.blurryTime[0]
this.crud.query.endTime = this.blurryTime[1] this.crud.query.endTime = this.blurryTime[1]

6
src/views/system/processManage/runningProcess/module/businessDetails/index.vue

@ -154,18 +154,16 @@ export default {
this.$nextTick(() => { this.$nextTick(() => {
const currentDate = new Date() const currentDate = new Date()
const formattedDate = this.formatDate(currentDate) const formattedDate = this.formatDate(currentDate)
console.log('currentDate', currentDate)
console.log(parseTime(this.baseInfo.giveStartTime))
// console.log('currentDate', currentDate)
// console.log(parseTime(this.baseInfo.giveStartTime))
const isStartTimeValid = parseTime(this.baseInfo.giveStartTime) <= formattedDate const isStartTimeValid = parseTime(this.baseInfo.giveStartTime) <= formattedDate
const isEndTimeValid = parseTime(this.baseInfo.giveEndTime) >= formattedDate const isEndTimeValid = parseTime(this.baseInfo.giveEndTime) >= formattedDate
console.log(isStartTimeValid) console.log(isStartTimeValid)
console.log(isEndTimeValid) console.log(isEndTimeValid)
// isShowUtilizeHandleBtn // isShowUtilizeHandleBtn
if (this.isUtilize && this.baseInfo.status === 3 && isStartTimeValid && isEndTimeValid) { if (this.isUtilize && this.baseInfo.status === 3 && isStartTimeValid && isEndTimeValid) {
console.log('222222222')
this.$refs.archivesInfo.isShowUtilizeHandleBtn = true this.$refs.archivesInfo.isShowUtilizeHandleBtn = true
} else { } else {
console.log('ffffffff')
this.$refs.archivesInfo.isShowUtilizeHandleBtn = false this.$refs.archivesInfo.isShowUtilizeHandleBtn = false
} }
this.$refs.archivesInfo.archivesInfoVisible = true this.$refs.archivesInfo.archivesInfoVisible = true

5
src/views/system/processManage/runningProcess/module/detail.vue

@ -145,8 +145,11 @@ export default {
} }
}, },
getBusinessFlowDetails() { getBusinessFlowDetails() {
console.log('this.isMessage', this.isMessage)
console.log('this.selectCenterRow', this.selectCenterRow)
console.log('this.selectRow', this.selectRow)
const params = { const params = {
'businessId': this.isMessage ? this.selectCenterRow.businessId : this.selectRow.id,
'businessId': this.isMessage ? this.selectCenterRow.businessId : (this.selectRow.id || this.selectRow.businessId),
'page': this.setPage.page, 'page': this.setPage.page,
'size': this.setPage.size 'size': this.setPage.size
} }

2
src/views/system/user/center.vue

@ -90,7 +90,7 @@
</template> </template>
<script> <script>
import myUpload from 'vue-image-crop-upload/upload-2.vue'
import myUpload from 'vue-image-crop-upload'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import updatePass from './center/updatePass' import updatePass from './center/updatePass'
import updateEmail from './center/updateEmail' import updateEmail from './center/updateEmail'

5
src/views/system/user/processCenter/module/form.vue

@ -291,8 +291,8 @@ export default {
} else if (this.selectRow.businessType === 7) { } else if (this.selectRow.businessType === 7) {
// 线 // 线
FetchOfflineTransferConfirm(params).then((res) => { FetchOfflineTransferConfirm(params).then((res) => {
if (res) {
this.$message({ message: '操作提交成功', type: 'success', offset: 8 })
if (res.code !== 500) {
this.$message({ message: res, type: 'success', offset: 8 })
} else { } else {
this.$message({ message: '操作提交失败', type: 'error', offset: 8 }) this.$message({ message: '操作提交失败', type: 'error', offset: 8 })
} }
@ -302,6 +302,7 @@ export default {
console.log(err) console.log(err)
}) })
} }
// this.closedDialog()
} else { } else {
this.submitLoading = false this.submitLoading = false
this.submitLoading2 = false this.submitLoading2 = false

Loading…
Cancel
Save