|
|
@@ -61,7 +61,7 @@
|
|
|
<el-table-column
|
|
|
prop="piHao"
|
|
|
label="批号"
|
|
|
- width="75"
|
|
|
+ width="85"
|
|
|
header-align="center"
|
|
|
align="center"
|
|
|
sortable
|
|
|
@@ -69,7 +69,7 @@
|
|
|
<el-table-column
|
|
|
prop="changJia"
|
|
|
label="厂家"
|
|
|
- width="100"
|
|
|
+ width="110"
|
|
|
header-align="center"
|
|
|
/>
|
|
|
<el-table-column
|
|
|
@@ -235,29 +235,53 @@ export default {
|
|
|
]
|
|
|
},
|
|
|
handleExport() {
|
|
|
+ // 处理数据,将日期字段转换为文本格式
|
|
|
+ const exportData = this.reagentData.map(item => ({
|
|
|
+ ...item,
|
|
|
+ youXiaoQi: this.formatDateForExport(item.youXiaoQi)
|
|
|
+ }))
|
|
|
+
|
|
|
IbpsExport.excel({
|
|
|
columns: this.getColumns(),
|
|
|
- data: this.reagentData,
|
|
|
+ data: exportData,
|
|
|
nameKey: 'name',
|
|
|
title: '实验试剂信息'
|
|
|
}).then(() => {
|
|
|
ActionUtils.success('导出成功')
|
|
|
})
|
|
|
},
|
|
|
+
|
|
|
+ // 新增方法:为导出格式化日期
|
|
|
+ formatDateForExport(dateStr) {
|
|
|
+ if (!dateStr) return dateStr
|
|
|
+
|
|
|
+ // 在日期前添加单引号,强制Excel将其作为文本处理
|
|
|
+ // 这样导入时就不会被转换为美国格式
|
|
|
+ return `'${dateStr}`
|
|
|
+ },
|
|
|
handleImport(file, options) {
|
|
|
this.loading = false
|
|
|
IbpsImport.xlsx(file, options).then(({ header, results }) => {
|
|
|
const keys = this.getKeys(this.getColumns())
|
|
|
const list = []
|
|
|
+
|
|
|
results.forEach((item) => {
|
|
|
const obj = {}
|
|
|
Object.keys(item).forEach((key) => {
|
|
|
if (keys[key]) {
|
|
|
- obj[keys[key]] = item[key]
|
|
|
+ let value = item[key]
|
|
|
+
|
|
|
+ // 处理有效期字段的多种日期格式
|
|
|
+ if (keys[key] === 'youXiaoQi') {
|
|
|
+ value = this.normalizeDate(value)
|
|
|
+ }
|
|
|
+
|
|
|
+ obj[keys[key]] = value
|
|
|
}
|
|
|
})
|
|
|
list.push(obj)
|
|
|
})
|
|
|
+
|
|
|
const keysValue = Object.values(keys)
|
|
|
const isError = list.some((item) => keysValue.some((key) => !item[key]))
|
|
|
if (isError || !list.length) {
|
|
|
@@ -265,22 +289,76 @@ export default {
|
|
|
'导出模板中的每一项都需填写,请检查您的数据!'
|
|
|
)
|
|
|
}
|
|
|
- const dateRegex = /^(\d{4})[-/](\d{2})(?:[-/](\d{2}))?$/
|
|
|
+
|
|
|
+ // 放宽日期验证,支持更多格式
|
|
|
+ const dateRegex = /^(\d{4}[-/]\d{1,2}([-/]\d{1,2})?|\d{1,2}\/\d{1,2}\/\d{2,4})$/
|
|
|
const isDateError = list.some((item) => {
|
|
|
- return !dateRegex.test(item.youXiaoQi)
|
|
|
+ return !dateRegex.test(String(item.youXiaoQi))
|
|
|
})
|
|
|
if (isDateError) {
|
|
|
return this.$message.warning(
|
|
|
- '有效期格式支持【2024-01】、【2024/01】、【2024-01-01】、【2024/01/01】,请检查您的数据!'
|
|
|
+ '有效期格式不正确,请检查您的数据!支持格式:2024-01、2024/01、2024-01-01、2024/01/01、01/01/24等'
|
|
|
)
|
|
|
}
|
|
|
+
|
|
|
+ // 统一格式化日期
|
|
|
list.forEach((item) => {
|
|
|
- item.youXiaoQi = item.youXiaoQi.replace(/\//g, '-')
|
|
|
+ item.youXiaoQi = this.formatToStandardDate(item.youXiaoQi)
|
|
|
})
|
|
|
+
|
|
|
this.reagentData.push(...list)
|
|
|
this.showImportTable = false
|
|
|
})
|
|
|
},
|
|
|
+
|
|
|
+ // 新增方法:标准化日期格式
|
|
|
+ normalizeDate(dateValue) {
|
|
|
+ if (!dateValue) return dateValue
|
|
|
+
|
|
|
+ const dateStr = String(dateValue)
|
|
|
+
|
|
|
+ // 处理美国格式 "MM/DD/YY" 或 "MM/DD/YYYY"
|
|
|
+ const usFormat = dateStr.match(/^(\d{1,2})\/(\d{1,2})\/(\d{2,4})$/)
|
|
|
+ if (usFormat) {
|
|
|
+ const month = usFormat[1].padStart(2, '0')
|
|
|
+ const day = usFormat[2].padStart(2, '0')
|
|
|
+ let year = usFormat[3]
|
|
|
+
|
|
|
+ // 如果是两位年份,转换为四位
|
|
|
+ if (year.length === 2) {
|
|
|
+ year = '20' + year
|
|
|
+ }
|
|
|
+
|
|
|
+ return `${year}-${month}-${day}`
|
|
|
+ }
|
|
|
+
|
|
|
+ return dateStr
|
|
|
+ },
|
|
|
+
|
|
|
+ // 统一格式化为标准日期
|
|
|
+ formatToStandardDate(dateStr) {
|
|
|
+ if (!dateStr) return dateStr
|
|
|
+
|
|
|
+ let formatted = String(dateStr).replace(/\//g, '-')
|
|
|
+
|
|
|
+ // 移除可能存在的单引号(文本格式标记)
|
|
|
+ formatted = formatted.replace(/^'/, '')
|
|
|
+
|
|
|
+ const parts = formatted.split('-')
|
|
|
+ if (parts.length >= 2) {
|
|
|
+ // 补零
|
|
|
+ if (parts[1]) {
|
|
|
+ parts[1] = parts[1].padStart(2, '0')
|
|
|
+ }
|
|
|
+ if (parts[2]) {
|
|
|
+ parts[2] = parts[2].padStart(2, '0')
|
|
|
+ }
|
|
|
+
|
|
|
+ formatted = parts.join('-')
|
|
|
+ }
|
|
|
+
|
|
|
+ return formatted
|
|
|
+ },
|
|
|
getKeys(data) {
|
|
|
return Array.isArray(data)
|
|
|
? data.reduce((acc, item) => ({ ...acc, [item.label]: item.name }), {})
|