diff --git a/src/api/statistics/statistics.js b/src/api/statistics/statistics.js
new file mode 100644
index 0000000..c337e97
--- /dev/null
+++ b/src/api/statistics/statistics.js
@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+import qs from 'qs'
+
+// 总量统计
+// fondsIds=1&fondsIds=2&fondsIds=3&fondsIds=4&years=2024&years=2025&years=2026
+export function FetchTotalStatistics(params) {
+ return request({
+ url: 'api/control/getTotalStatistics' + '?' + qs.stringify(params, { indices: false }),
+ method: 'get'
+ })
+}
+
+// 管理库档案年度
+export function FetchArchivedAllYear(params) {
+ return request({
+ url: 'api/control/getArchivedAllYear' + '?' + qs.stringify(params, { indices: false }),
+ method: 'get'
+ })
+}
+
+// 室藏统计
+export function FetchRoomCollectionStatistics(params) {
+ return request({
+ url: 'api/control/getRoomCollectionStatistics' + '?' + qs.stringify(params, { indices: false }),
+ method: 'get'
+ })
+}
+
+// 删除AI辅助著录
+// export function FetchDelAssistEnter(data) {
+// return request({
+// url: 'api/ai/delAssistEnter',
+// method: 'post',
+// data
+// })
+// }
+
+export default {
+ FetchTotalStatistics,
+ FetchArchivedAllYear,
+ FetchRoomCollectionStatistics
+}
diff --git a/src/views/archiveUtilize/archiveSearch/index.vue b/src/views/archiveUtilize/archiveSearch/index.vue
index 8f2b04f..c76f9e0 100644
--- a/src/views/archiveUtilize/archiveSearch/index.vue
+++ b/src/views/archiveUtilize/archiveSearch/index.vue
@@ -366,6 +366,7 @@ export default {
if (wheresql) {
this.isResult = true
this.$nextTick(() => {
+ this.$refs.resultListRef.conditionData = this.conditionData
this.$refs.resultListRef.condition = wheresql
this.$refs.resultListRef.getSeniorSearch(wheresql)
})
diff --git a/src/views/archiveUtilize/archiveSearch/module/resultList.vue b/src/views/archiveUtilize/archiveSearch/module/resultList.vue
index b58b9b0..c13846f 100644
--- a/src/views/archiveUtilize/archiveSearch/module/resultList.vue
+++ b/src/views/archiveUtilize/archiveSearch/module/resultList.vue
@@ -105,7 +105,7 @@
检索 “{{ keywords }}” 成功获得{{ page.total }}条结果
-
检索成功获得
{{ page.total }}条结果
高级检索 点击查看检索条件
+
检索成功获得
{{ page.total }}条结果
高级检索: {{ advancedSearchDisplayText }}
@@ -259,13 +259,40 @@ export default {
resultData: [],
classifyLoading: false,
resultLoading: false,
- condition: ''
+ condition: '',
+ conditionData: []
}
},
computed: {
...mapGetters([
'user'
- ])
+ ]),
+ // 格式化高级检索条件显示文案
+ advancedSearchDisplayText() {
+ if (!this.conditionData || this.conditionData.length === 0) {
+ return ''
+ }
+ // 如果 condition 是数组,进行格式化
+ return this.conditionData.map(item => {
+ if (item.field) {
+ // 字段条件
+ let keywordDisplay = item.keyWord
+ if (item.symbol === '包含' || item.symbol === '不包含') {
+ keywordDisplay = `'%${item.keyWord}%'`
+ } else if (item.keyWord && isNaN(parseInt(item.keyWord))) {
+ keywordDisplay = `'${item.keyWord}'`
+ }
+ return `${item.field} ${item.symbol} ${keywordDisplay}`
+ } else if (item.connector) {
+ // 连接符
+ return item.connector
+ } else if (item.bracket) {
+ // 括号
+ return item.bracket
+ }
+ return ''
+ }).join(' ')
+ }
},
watch: {
filterFondsText(val) {
diff --git a/src/views/archivesStatistics/annualReportStatistics/index.vue b/src/views/archivesStatistics/annualReportStatistics/index.vue
deleted file mode 100644
index 2478f09..0000000
--- a/src/views/archivesStatistics/annualReportStatistics/index.vue
+++ /dev/null
@@ -1,302 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
- - 本单位填报(6)
- - 下级上报(0)
- - 汇总上报(0)
-
-
-
-
-
-
-
-
-
-
- 删除
-
-
-
-
双击列表数据查看年报详情
-
-
-
-
-
-
-
-
-
-
-
-
- {{ scope.row.create_time | parseTime }}
-
-
-
-
-
-
- 录入中
- 已汇总
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
年度:
- {{ detailContent && detailContent.year }}
-
- -
-
年报模板:
- 2019
-
- -
-
填报单位:
- {{ detailContent && detailContent.unit }}
-
- -
-
报表模板:
- {{ detailContent && detailContent.template }}
-
- -
-
填报人:
- {{ detailContent && detailContent.creator }}
-
- -
-
上报至:
- {{ detailContent && detailContent.upToUint }}
-
- -
-
上报日期:
- {{ detailContent && detailContent.upToDate | parseTime }}
-
- -
-
备注:
- {{ detailContent && detailContent.remark }}
-
- -
-
附件列表:
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/views/archivesStatistics/customDefinedStatistics/index.vue b/src/views/archivesStatistics/borrowingStatistics/index.vue
similarity index 96%
rename from src/views/archivesStatistics/customDefinedStatistics/index.vue
rename to src/views/archivesStatistics/borrowingStatistics/index.vue
index f810f2d..03c6d17 100644
--- a/src/views/archivesStatistics/customDefinedStatistics/index.vue
+++ b/src/views/archivesStatistics/borrowingStatistics/index.vue
@@ -60,7 +60,7 @@ import 'katex/dist/katex.min.css'
import markdownText2 from '@/assets/test.md'
export default {
- name: 'CustomDefinedStatistics',
+ name: 'BorrowingStatistics',
components: { },
data() {
return {
diff --git a/src/views/archivesStatistics/dataStatistics/index.vue b/src/views/archivesStatistics/dataStatistics/index.vue
index e026b86..20607b4 100644
--- a/src/views/archivesStatistics/dataStatistics/index.vue
+++ b/src/views/archivesStatistics/dataStatistics/index.vue
@@ -1,287 +1,157 @@
-
-
-
-
-
-
-
{{ row.category }}
-
-
-
-
未归档
-
{{ row.unfiled }}
-
归档中
-
{{ row.collectArchiving }}
-
-
-
未装盒
-
{{ row.collectPacked }}
-
已装盒
-
{{ row.collectPacked }}
-
-
-
-
-
-
全部
-
{{ row.collectAll }}
-
-
-
-
{{ row.destroy }}
-
-
-
未装盒
-
{{ row.manageUnpacked }}
-
已装盒
-
{{ row.managePacked }}
-
-
-
未入库
-
{{ row.manageUnstored }}
-
已入库
-
{{ row.manageStored }}
-
-
-
空闲中
-
{{ row.manageIdle }}
-
审批中
-
{{ row.manageApproving }}
-
-
-
-
全部
-
{{ row.collectAll }}
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/archivesStatistics/roomCollectionStatistics/index.vue b/src/views/archivesStatistics/roomCollectionStatistics/index.vue
new file mode 100644
index 0000000..9461852
--- /dev/null
+++ b/src/views/archivesStatistics/roomCollectionStatistics/index.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/archivesStatistics/usageCountStatistics/index.vue b/src/views/archivesStatistics/usageCountStatistics/index.vue
new file mode 100644
index 0000000..e37be74
--- /dev/null
+++ b/src/views/archivesStatistics/usageCountStatistics/index.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/archivesStatistics/utilizeRegistrationStatistics/index.vue b/src/views/archivesStatistics/utilizeRegistrationStatistics/index.vue
new file mode 100644
index 0000000..e94601b
--- /dev/null
+++ b/src/views/archivesStatistics/utilizeRegistrationStatistics/index.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/components/category/PreviewForm.vue b/src/views/components/category/PreviewForm.vue
index 290c032..92b8477 100644
--- a/src/views/components/category/PreviewForm.vue
+++ b/src/views/components/category/PreviewForm.vue
@@ -22,7 +22,7 @@
:span="item.isLine || item.fieldName === 'barcode' ? 24 : 12"
>
-
+
{ this.$refs.addOrUpdateForm.validateField(item.fieldName) }"
>
{{ getAutoNameUnknown(node.label) }}
+
+ {{ fieldErrors[item.fieldName] }}
+
@@ -62,13 +67,11 @@
"
:max="addOrUpdateForm.is_entity === 0 && (item.fieldName === 'doc_qty' || item.fieldName === 'doc_qty_now') ? 0 : null"
:min="0"
-
:validate-event="!isDisabled"
@mousewheel.native.prevent
@DOMMouseScroll.native.prevent
@keyup.enter.native="isRepeatHandle(item)"
@input="autoAddZero(item.isFilling, item.fieldName, addOrUpdateForm[item.fieldName], item.fillingDigit)"
-
@blur="isRepeatHandle(item); syncEntityByQty(item)"
>
@@ -287,6 +290,7 @@ export default {
},
rules: {
},
+ fieldErrors: {},
isTableType: 1,
tableTitle: '字典列表',
popoverTableData: [], // popover - popoverTableData
@@ -458,29 +462,6 @@ export default {
Vue.set(this.loadingStatus, fieldName, true)
console.log(`字段${fieldName}加载状态:`, this.loadingStatus[fieldName])
-
- // try {
-
- // // 2. 模拟接口请求(替换为真实接口)
- // // const response = await new Promise((resolve) => {
- // // setTimeout(() => {
- // // resolve({ data: { code: 200, data: `NO-${Date.now().slice(-6)}` }})
- // // }, 2000)
- // // })
-
- // // // 3. 处理接口结果
- // // if (response.data.code === 200) {
- // // this.inputValue = response.data.data
- // // this.$message?.success('编号生成成功') || alert('生成成功')
- // // }
- // } catch (error) {
- // console.error('接口请求失败:', error)
- // this.$message?.error('生成失败') || alert('生成失败')
- // } finally {
- // // 4. 无论成功/失败,重置为false
- // Vue.set(this.loadingStatus, fieldName, false)
- // console.log('请求结束,isMaxLoading重置为:', this.isMaxLoading)
- // }
},
preUplpadClose() {
@@ -494,24 +475,6 @@ export default {
this.fileJsonString = null
this.newFileCount = 0
},
- // handleSuccessResource(data, fileName, jsonArrayToSend) {
- // this.minioPreResult = data
- // // console.log('handleSuccessResource', filePath)
- // // console.log('handleSuccessResource', fileName)
- // // console.log('handleSuccessResource', jsonArrayToSend)
- // // console.log('handleSuccessResource', jsonArrayToSend[0].fileJsonString)
- // this.fileOriginal = fileName.join(',')
- // // this.fileOriginal = fileName
-
- // const fileJson = JSON.parse(jsonArrayToSend[0].fileJsonString)
- // fileJson[0].file_path = '/' + data.filePath
- // fileJson[0].is_quote = null
- // fileJson[0].last_modified = jsonArrayToSend[0].last_modified
- // fileJson[0].ca_id = this.minioPreResult.caId
- // fileJson[0].encryption_time = this.minioPreResult.timestamp
- // fileJson[0].signature = this.minioPreResult.signature
- // this.fileJsonString = JSON.stringify(fileJson)
- // },
// 1. 修改文件上传成功处理方法(核心修改)
handleSuccessResource(data, fileName, jsonArrayToSend) {
console.log('原始fileJsonString:', this.fileJsonString)
@@ -1308,6 +1271,9 @@ export default {
this.addOrUpdateForm[this.treeCurrentFiled.fieldName] = val.dictionaryName
}
+ // 清除该字段的错误信息
+ this.$set(this.fieldErrors, this.treeCurrentFiled.fieldName, '')
+
// 重复检查
if (this.treeCurrentFiled.isRepeat) {
const params = this.isDesFormType !== 'prearchiveLibrary' && this.isDesFormType !== 'mergeFile'
@@ -1475,12 +1441,13 @@ export default {
}
if (item.fieldName === 'fonds_name' && this.isDesFormType !== 'category') {
- console.log(' this.selectedCategory.fondName', this.selectedCategory.fondName)
this.$set(this.addOrUpdateForm, item.fieldName, this.selectedCategory.fondName)
}
+ console.log('item', item)
+ console.log('item.isRequired', item.isRequired)
const rule = {
required: !!item.isRequired,
- message: (item.isInputClass === 'text' ? '请输入' : '请选择') + item.fieldCnName,
+ message: ((item.isInputClass === 'text' || item.isInputClass === 'textarea') ? '请输入' : '请选择') + item.fieldCnName,
trigger: item.isInputClass === 'text' ? 'blur' : 'change'
}
@@ -1503,7 +1470,7 @@ export default {
}
if (isRequired && value === '') {
- rule.message = item.isInputClass === 'text' ? `请输入${item.fieldCnName}` : `请选择${item.fieldCnName}`
+ rule.message = (item.isInputClass === 'text' || item.isInputClass === 'textarea') ? `请输入${item.fieldCnName}` : `请选择${item.fieldCnName}`
callback(new Error(rule.message))
return
}
@@ -1538,7 +1505,7 @@ export default {
}
if (isRequired && value === '') {
- rule.message = item.isInputClass === 'text' ? `请输入${item.fieldCnName}` : `请选择${item.fieldCnName}`
+ rule.message = (item.isInputClass === 'text' || item.isInputClass === 'textarea') ? `请输入${item.fieldCnName}` : `请选择${item.fieldCnName}`
callback(new Error(rule.message))
return
}
@@ -1670,15 +1637,28 @@ export default {
console.log('this.addOrUpdateForm', this.addOrUpdateForm)
// 先验证重复字段
- // if (this.archivesType !== 'edit') {
const isRepeatValid = await this.validateRepeatFieldsBeforeSubmit(formName)
if (!isRepeatValid) {
return false
}
- // }
this.$nextTick(() => {
this.$refs[formName].validate((valid, fields) => {
+ // 检查必填字段是否有值(针对 treeselect 等非 Element UI 原生组件) 保证和el-form的同时进行
+ this.fieldErrors = {}
+ let hasRequiredError = false
+ const requiredFields = this.formPreviewData.filter(item => item.isRequired)
+ for (const item of requiredFields) {
+ const fieldValue = this.addOrUpdateForm[item.fieldName]
+ if (!fieldValue && fieldValue !== 0 && fieldValue !== false) {
+ // 设置错误信息
+ this.$set(this.fieldErrors, item.fieldName, (item.isInputClass === 'text' || item.isInputClass === 'textarea' ? '请输入' : '请选择') + item.fieldCnName)
+ hasRequiredError = true
+ }
+ }
+ if (hasRequiredError) {
+ return false
+ }
if (valid) {
this.addOrUpdateForm.archive_no = originalArchiveNo
delete this.addOrUpdateForm.id
@@ -1701,7 +1681,6 @@ export default {
'fondsAffiliation': this.selectedDocument.fondsId
}
- console.log('this.fileJsonString', JSON.parse(this.fileJsonString))
console.log('params', params)
prearchEdit(params).then(res => {
if (res) {
@@ -1723,7 +1702,6 @@ export default {
'archivesNo': this.addOrUpdateForm.archive_no,
'jsonString': JSON.stringify(this.addOrUpdateForm)
}
- console.log('合并成件this.selectedCategory', this.selectedCategory)
console.log('params', params)
FetchMergeToFile(params).then(res => {
if (res.code !== 500) {
@@ -1768,7 +1746,6 @@ export default {
} else if (this.selectedCategory.arrangeType === 3 && this.activeIndex === 1 && (this.archivesType === 'add' || this.archivesType === 'copy')) {
// 在项目下,未整理的文件只属于门类下,不属于任何项目或案卷,所以parentsId === null
const fileIds = []
- console.log('this.uploadedFileData', this.uploadedFileData)
if (this.uploadedFileData) {
if (Array.isArray(this.uploadedFileData)) {
this.uploadedFileData.forEach(item => {
@@ -2017,10 +1994,6 @@ export default {
* @param {String} pickerVal 面板选择的yyyyMMdd格式日期
*/
handlePickerChange(item, pickerVal) {
- console.log('item', item)
- console.log('item.fieldName', item.fieldName)
- console.log('pickerVal', pickerVal)
-
// 选择了具体日期(强制更新,不管是否和旧值相同)
if (pickerVal) {
this.$set(this.addOrUpdateForm, item.fieldName, pickerVal)
@@ -2089,6 +2062,21 @@ export default {
::v-deep .vue-treeselect__control{
height: 32px !important;
}
+ ::v-deep .treeselect-error .vue-treeselect__control {
+ border-color: #ff4949 !important;
+ }
+ ::v-deep .treeselect-error .vue-treeselect__control:hover {
+ border-color: #ff4949 !important;
+ }
+ .treeselect-error-tip {
+ color: #ff4949 !important;
+ font-size: 12px !important;
+ line-height: 1 !important;
+ padding-top: 4px !important;
+ position: absolute !important;
+ top: 100% !important;
+ left: 0 !important;
+ }
::v-deep .el-input__prefix {
text-align: right;
right: 5px !important;