1
This commit is contained in:
@@ -205,6 +205,8 @@
|
|||||||
<el-tag v-if="!row.filled" type="warning" size="mini">待填写</el-tag>
|
<el-tag v-if="!row.filled" type="warning" size="mini">待填写</el-tag>
|
||||||
<el-tag v-else type="success" size="mini">已落库</el-tag>
|
<el-tag v-else type="success" size="mini">已落库</el-tag>
|
||||||
<span v-if="row.distributionMark">{{ row.distributionMark }}</span>
|
<span v-if="row.distributionMark">{{ row.distributionMark }}</span>
|
||||||
|
<span v-if="row.remark">{{ row.remark }}</span>
|
||||||
|
<span v-if="row.thirdPartyOrderNo">{{ row.thirdPartyOrderNo }}</span>
|
||||||
<span v-if="row.buyer">{{ row.buyer }}</span>
|
<span v-if="row.buyer">{{ row.buyer }}</span>
|
||||||
<span v-if="row.paymentAmount != null && row.paymentAmount !== ''">付款 {{ formatHistoryMoney(row.paymentAmount) }}</span>
|
<span v-if="row.paymentAmount != null && row.paymentAmount !== ''">付款 {{ formatHistoryMoney(row.paymentAmount) }}</span>
|
||||||
<span v-if="row.orderId">{{ row.orderId }}</span>
|
<span v-if="row.orderId">{{ row.orderId }}</span>
|
||||||
@@ -857,34 +859,68 @@ export default {
|
|||||||
].join(' ').toLowerCase()
|
].join(' ').toLowerCase()
|
||||||
return blob.includes(kw.toLowerCase())
|
return blob.includes(kw.toLowerCase())
|
||||||
},
|
},
|
||||||
normalizeDraftItem(rawItem) {
|
splitOrderFormBodies(text) {
|
||||||
const parts = this.extractHistoryParts(rawItem)
|
const raw = this.extractFormBody(text).replace(/\r\n/g, '\n').trim()
|
||||||
const body = this.extractFormBody(parts.text)
|
if (!raw) return []
|
||||||
|
const idxs = []
|
||||||
|
const re = /^单:/gm
|
||||||
|
let m
|
||||||
|
while ((m = re.exec(raw)) !== null) {
|
||||||
|
idxs.push(m.index)
|
||||||
|
}
|
||||||
|
if (!idxs.length) {
|
||||||
|
return this.formBodyLooksPersistable(raw) ? [raw] : []
|
||||||
|
}
|
||||||
|
const out = []
|
||||||
|
for (let i = 0; i < idxs.length; i++) {
|
||||||
|
const chunk = raw.slice(idxs[i], i + 1 < idxs.length ? idxs[i + 1] : raw.length).trim()
|
||||||
|
if (this.formBodyLooksPersistable(chunk)) out.push(chunk)
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
},
|
||||||
|
draftDedupeKey(item) {
|
||||||
|
const third = String((item && item.thirdPartyOrderNo) || '').trim()
|
||||||
|
if (third) return 't:' + third
|
||||||
|
const remark = String((item && item.remark) || '').trim()
|
||||||
|
const addr = this.compressAddressOneLine((item && item.address) || '')
|
||||||
|
if (remark || addr) return 'r:' + remark + '|' + addr
|
||||||
|
return String((item && item.key) || '')
|
||||||
|
},
|
||||||
|
normalizeDraftItemFromBody(body, time, seq) {
|
||||||
if (!this.formBodyLooksPersistable(body)) return null
|
if (!this.formBodyLooksPersistable(body)) return null
|
||||||
const parsed = this.parseOrderFormText(body)
|
const parsed = this.parseOrderFormText(body)
|
||||||
const modelFull = String(parsed.model || '').split('\n')[0].trim()
|
const modelFull = String(parsed.model || '').split('\n')[0].trim()
|
||||||
const shopParsed = this.parseModelWithShop(modelFull)
|
const shopParsed = this.parseModelWithShop(modelFull)
|
||||||
|
const third = String(parsed.thirdParty || '').trim()
|
||||||
|
const remark = String(parsed.remark || '').trim()
|
||||||
|
const addr = this.compressAddressOneLine(parsed.address)
|
||||||
return {
|
return {
|
||||||
key: 'draft-' + (parsed.remark || parts.time || modelFull),
|
key: 'draft-' + (third || [remark, addr, time, seq].filter(Boolean).join('|')),
|
||||||
source: 'draft',
|
source: 'draft',
|
||||||
filled: this.isPersistFilledText(parsed),
|
filled: this.isPersistFilledText(parsed),
|
||||||
remark: String(parsed.remark || '').trim(),
|
remark,
|
||||||
distributionMark: String(parsed.mark || '').trim(),
|
distributionMark: String(parsed.mark || '').trim(),
|
||||||
modelNumber: shopParsed.base || modelFull,
|
modelNumber: shopParsed.base || modelFull,
|
||||||
modelShop: shopParsed.prefix,
|
modelShop: shopParsed.prefix,
|
||||||
address: this.compressAddressOneLine(parsed.address),
|
address: addr,
|
||||||
link: String(parsed.link || '').trim(),
|
link: String(parsed.link || '').trim(),
|
||||||
thirdPartyOrderNo: String(parsed.thirdParty || '').trim(),
|
thirdPartyOrderNo: third,
|
||||||
buyer: String(parsed.buyer || '').trim(),
|
buyer: String(parsed.buyer || '').trim(),
|
||||||
paymentAmount: String(parsed.payment || '').trim(),
|
paymentAmount: String(parsed.payment || '').trim(),
|
||||||
rebateAmount: String(parsed.rebate || '').trim(),
|
rebateAmount: String(parsed.rebate || '').trim(),
|
||||||
orderId: String(parsed.orderId || '').trim(),
|
orderId: String(parsed.orderId || '').trim(),
|
||||||
logisticsLink: String(parsed.logistics || '').trim(),
|
logisticsLink: String(parsed.logistics || '').trim(),
|
||||||
waybillNo: String(parsed.waybill || '').trim(),
|
waybillNo: String(parsed.waybill || '').trim(),
|
||||||
orderTime: parts.time,
|
orderTime: time,
|
||||||
rawText: body
|
rawText: body
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
normalizeDraftItems(rawItem) {
|
||||||
|
const parts = this.extractHistoryParts(rawItem)
|
||||||
|
return this.splitOrderFormBodies(parts.text)
|
||||||
|
.map((body, i) => this.normalizeDraftItemFromBody(body, parts.time, i))
|
||||||
|
.filter(Boolean)
|
||||||
|
},
|
||||||
normalizeOrderItem(row) {
|
normalizeOrderItem(row) {
|
||||||
if (!row) return null
|
if (!row) return null
|
||||||
return {
|
return {
|
||||||
@@ -938,20 +974,16 @@ export default {
|
|||||||
})
|
})
|
||||||
])
|
])
|
||||||
const orders = ((orderRes && orderRes.rows) || []).map(this.normalizeOrderItem).filter(Boolean)
|
const orders = ((orderRes && orderRes.rows) || []).map(this.normalizeOrderItem).filter(Boolean)
|
||||||
const persistedRemarks = new Set(
|
const persistedKeys = new Set(orders.map(o => this.draftDedupeKey(o)).filter(Boolean))
|
||||||
orders.map(o => String(o.remark || '').trim()).filter(Boolean)
|
|
||||||
)
|
|
||||||
const draftMap = new Map()
|
const draftMap = new Map()
|
||||||
;((histRes && histRes.data) || []).forEach(raw => {
|
;((histRes && histRes.data) || []).forEach(raw => {
|
||||||
const draft = this.normalizeDraftItem(raw)
|
this.normalizeDraftItems(raw).forEach(draft => {
|
||||||
if (!draft) return
|
|
||||||
if (kw && !this.historyItemMatchesKeyword(draft, kw)) return
|
if (kw && !this.historyItemMatchesKeyword(draft, kw)) return
|
||||||
const remark = draft.remark
|
const dk = this.draftDedupeKey(draft)
|
||||||
if (remark && persistedRemarks.has(remark)) return
|
if (dk && persistedKeys.has(dk)) return
|
||||||
if (remark && draftMap.has(remark)) return
|
if (draftMap.has(draft.key) || (dk && draftMap.has(dk))) return
|
||||||
const fallbackKey = draft.key
|
draftMap.set(dk || draft.key, draft)
|
||||||
if (!remark && draftMap.has(fallbackKey)) return
|
})
|
||||||
draftMap.set(remark || fallbackKey, draft)
|
|
||||||
})
|
})
|
||||||
const drafts = Array.from(draftMap.values()).filter(d => !d.filled)
|
const drafts = Array.from(draftMap.values()).filter(d => !d.filled)
|
||||||
const unfilledOrders = orders.filter(o => !o.filled)
|
const unfilledOrders = orders.filter(o => !o.filled)
|
||||||
|
|||||||
Reference in New Issue
Block a user