|
@@ -5,7 +5,7 @@
|
|
|
title="导入发票信息"
|
|
|
:visible="innerVisible"
|
|
|
:close-on-click-modal="false"
|
|
|
- @close="() => innerVisible = false"
|
|
|
+ @close="handleClose"
|
|
|
>
|
|
|
<div v-if="tableData && tableData.length > 0" class="tr" style="padding: 10px 0 0 0">
|
|
|
<el-button :size="'mini'" @click="() => tableData = []">取消</el-button>
|
|
@@ -21,27 +21,22 @@
|
|
|
:data="tableData"
|
|
|
style="margin: 15px 0 0 0"
|
|
|
/>
|
|
|
-
|
|
|
- <div style="width:100%;display:flex;justify-content:flex-end;margin-top:10px">
|
|
|
- <el-button size="mini" type="primary">保存</el-button>
|
|
|
- </div>
|
|
|
</el-dialog>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import companyHelper from '@/mixins/companyHelper'
|
|
|
import { MessageBox } from 'element-ui'
|
|
|
-import dayjs from 'dayjs'
|
|
|
|
|
|
import {
|
|
|
- helper,
|
|
|
columns,
|
|
|
+ getColumn,
|
|
|
getTableProperty,
|
|
|
- createErrorMessage,
|
|
|
- createFieldVerification,
|
|
|
requsetFields,
|
|
|
requiredFields,
|
|
|
+ mapFields,
|
|
|
} from './_template'
|
|
|
+import { invoiceTypeList } from '@/assets/js/statusList'
|
|
|
|
|
|
export default {
|
|
|
mixins: [companyHelper],
|
|
@@ -84,59 +79,38 @@ export default {
|
|
|
|
|
|
return isHeaderOk
|
|
|
},
|
|
|
- validateRequiredField(requiredFields) {
|
|
|
- const verification = createFieldVerification('发票申请编号、发票类型、发票号码、开票日期、税后金额不能为空')
|
|
|
- const fields = helper.fields(requiredFields)
|
|
|
- requiredFields[fields[0]].forEach((_, index) => {
|
|
|
- if (!helper.values(requiredFields, fields, index).every(value => value && String(value).trim() !== '')) {
|
|
|
- verification.isValid = false
|
|
|
- verification.notValidRows.push(index + 1)
|
|
|
- }
|
|
|
- })
|
|
|
- return verification
|
|
|
- },
|
|
|
- /* 处理不合法的值,提示错误信息,并返回最终的验证状态 **/
|
|
|
- handleNotValidFields(...validStates) {
|
|
|
- const messages = {}
|
|
|
- let isFinalValid = true
|
|
|
+ /* 校验导入的数据 **/
|
|
|
+ /* 校验导入的数据 **/
|
|
|
+ validateFields() {
|
|
|
+ for (const index in this.tableData) {
|
|
|
+ const line = Number(index) + 1
|
|
|
+ const tableItem = this.tableData[index]
|
|
|
+ const properties = Object.keys(tableItem)
|
|
|
+ for (const property of properties) {
|
|
|
+ if(requiredFields.includes(property) && !this.isValueNotNull(tableItem[property])){
|
|
|
+ this.$message.warning(`第 ${line} 行 : ${getColumn(property).label} 不能为空`)
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
- for (const validState of validStates) {
|
|
|
- const { message, isValid, notValidRows } = validState
|
|
|
- if (isValid) continue
|
|
|
- isFinalValid = false
|
|
|
+ if(property === mapFields.invoiceType){
|
|
|
+ const invoiceType = invoiceTypeList.find(({label}) => label === tableItem[property])
|
|
|
|
|
|
- notValidRows.forEach(row => {
|
|
|
- if (!messages[row]) messages[row] = []
|
|
|
- messages[row].push(message)
|
|
|
- })
|
|
|
- }
|
|
|
+ if(!invoiceType){
|
|
|
+ this.$message.warning(`第 ${line} 行 : ${getColumn(property).label} 必须为 ${invoiceTypeList.map(({label}) => label).join('、')}`)
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
- return {
|
|
|
- isFinalValid,
|
|
|
- message: () => !isFinalValid && MessageBox({
|
|
|
- type: 'warning',
|
|
|
- title: '数据填写错误',
|
|
|
- dangerouslyUseHTMLString: true,
|
|
|
- message: createErrorMessage(messages),
|
|
|
- customClass: 'error-message__wrapper'
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- /* 校验导入的数据 **/
|
|
|
- validateFields(tableData = []) {
|
|
|
- const mapTableFieldToTableData = {}
|
|
|
- for (const tableItem of tableData) {
|
|
|
- const propertys = Object.keys(tableItem)
|
|
|
- for (const property of propertys) {
|
|
|
- const value = tableItem[property]
|
|
|
- if (!mapTableFieldToTableData[property]) mapTableFieldToTableData[property] = []
|
|
|
- mapTableFieldToTableData[property].push(value)
|
|
|
+ // this.tableData[index][property] = invoiceType.value
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return this.handleNotValidFields(
|
|
|
- this.validateRequiredField(helper.write(mapTableFieldToTableData, requiredFields))
|
|
|
- )
|
|
|
+ return true
|
|
|
+ },
|
|
|
+ isValueNotNull(value){
|
|
|
+ if(!value) return
|
|
|
+ const _value = String(value)
|
|
|
+ return _value.trim() !== ""
|
|
|
},
|
|
|
mapTemplateItemToTableItem(templateItem) {
|
|
|
const tableItem = {}
|
|
@@ -149,7 +123,7 @@ export default {
|
|
|
},
|
|
|
onSuccess({ results: templateItems, header: templateHeader }) {
|
|
|
const isHeaderValid = this.validateTableHeader(
|
|
|
- this.columns.map(({ label }) => label).slice(1),
|
|
|
+ this.columns.map(({ label }) => label).slice(2),
|
|
|
templateHeader
|
|
|
)
|
|
|
if (!isHeaderValid) {
|
|
@@ -164,18 +138,33 @@ export default {
|
|
|
const tableItem = this.mapTemplateItemToTableItem(templateItem)
|
|
|
this.tableData.push(tableItem)
|
|
|
})
|
|
|
- this.validateFields(this.tableData).message()
|
|
|
+ this.validateFields(this.tableData)
|
|
|
+ },
|
|
|
+ handleClose(){
|
|
|
+ this.innerVisible = false
|
|
|
+ this.tableData = []
|
|
|
},
|
|
|
async onSubmit() {
|
|
|
- const { message, isFinalValid } = this.validateFields(this.tableData)
|
|
|
- if (!isFinalValid) return message()
|
|
|
+ if(!this.validateFields(this.tableData)){
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ const list = this.tableData.map(tableItem => requsetFields.reduce((prev, currentKey) => {
|
|
|
+ let data = tableItem[currentKey]
|
|
|
+ if(currentKey === mapFields.invoiceType){
|
|
|
+ const invoiceType = invoiceTypeList.find(({label}) => label === tableItem[currentKey])
|
|
|
+ data = invoiceType.value
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ ...prev,
|
|
|
+ [currentKey]: data
|
|
|
+ }
|
|
|
+ }, {}))
|
|
|
|
|
|
- const list = this.tableData.map(tableItem => requsetFields.reduce((prev, currentKey) => ({
|
|
|
- ...prev,
|
|
|
- [currentKey]: tableItem[currentKey]
|
|
|
- }), {}))
|
|
|
|
|
|
- this.loading = true
|
|
|
+ this.$emit("change",list)
|
|
|
+ this.innerVisible = false
|
|
|
}
|
|
|
}
|
|
|
}
|