This commit is contained in:
van
2026-09-07 19:27:24 +08:00
parent 42805f0731
commit ee686dbe59
2 changed files with 51 additions and 15 deletions
@@ -95,7 +95,7 @@
/> />
</el-form-item> </el-form-item>
<el-divider content-position="left">落库必填(与中控录单一致)</el-divider> <el-divider content-position="left">落库必填(物流链接或物流单号填一项即可)</el-divider>
<el-form-item label="下单人"> <el-form-item label="下单人">
<el-input v-model="form.buyer" placeholder="落库必填" clearable /> <el-input v-model="form.buyer" placeholder="落库必填" clearable />
</el-form-item> </el-form-item>
@@ -109,7 +109,10 @@
<el-input v-model="form.orderIdText" placeholder="落库必填,与表单「订单号(需填)」一致" clearable /> <el-input v-model="form.orderIdText" placeholder="落库必填,与表单「订单号(需填)」一致" clearable />
</el-form-item> </el-form-item>
<el-form-item label="物流链接"> <el-form-item label="物流链接">
<el-input v-model="form.logisticsLink" type="textarea" :rows="2" placeholder="落库必填" clearable /> <el-input v-model="form.logisticsLink" type="textarea" :rows="2" placeholder="有链接就填;没有则可改填下方物流单号" clearable />
</el-form-item>
<el-form-item label="物流单号">
<el-input v-model="form.waybillNo" placeholder="无物流链接时必填,如 SF1234567890" clearable />
</el-form-item> </el-form-item>
<div v-if="!isMobile" class="btn-row"> <div v-if="!isMobile" class="btn-row">
@@ -258,7 +261,8 @@ export default {
paymentText: '', paymentText: '',
rebateText: '', rebateText: '',
orderIdText: '', orderIdText: '',
logisticsLink: '' logisticsLink: '',
waybillNo: ''
}, },
loading: false, loading: false,
resultText: '', resultText: '',
@@ -528,6 +532,7 @@ export default {
const rebate = (this.form.rebateText || '').trim() const rebate = (this.form.rebateText || '').trim()
const orderId = (this.form.orderIdText || '').trim() const orderId = (this.form.orderIdText || '').trim()
const logistics = (this.form.logisticsLink || '').trim() const logistics = (this.form.logisticsLink || '').trim()
const waybill = (this.form.waybillNo || '').trim()
const thirdPartyOrderNo = (this.form.thirdPartyOrderNoText || '').trim() const thirdPartyOrderNo = (this.form.thirdPartyOrderNoText || '').trim()
if (thirdPartyOrderNo) { if (thirdPartyOrderNo) {
// 与 InstructionServiceImpl.WENAN_D 一致:「第三方单号:值」同行,下一行才是分隔线 // 与 InstructionServiceImpl.WENAN_D 一致:「第三方单号:值」同行,下一行才是分隔线
@@ -554,6 +559,9 @@ export default {
if (logistics) { if (logistics) {
t = t.replace(/(物流链接(需填):)\n\n/, `$1\n${logistics}\n\n`) t = t.replace(/(物流链接(需填):)\n\n/, `$1\n${logistics}\n\n`)
} }
if (waybill) {
t = t.replace(/(物流单号(无链接时填):)\n\n/, `$1\n${waybill}\n\n`)
}
return t return t
}, },
formBodyLooksPersistable(text) { formBodyLooksPersistable(text) {
@@ -565,7 +573,8 @@ export default {
const pay = (this.form.paymentText || '').trim() const pay = (this.form.paymentText || '').trim()
const orderId = (this.form.orderIdText || '').trim() const orderId = (this.form.orderIdText || '').trim()
const logistics = (this.form.logisticsLink || '').trim() const logistics = (this.form.logisticsLink || '').trim()
return !!(buyer && pay && orderId && logistics) const waybill = (this.form.waybillNo || '').trim()
return !!(buyer && pay && orderId && (logistics || waybill))
}, },
formatInstructionData(data) { formatInstructionData(data) {
if (Array.isArray(data)) { if (Array.isArray(data)) {
@@ -658,7 +667,7 @@ export default {
} }
if (!this.canPersistOrderFields()) { if (!this.canPersistOrderFields()) {
this.resultText = merged this.resultText = merged
this.$modal.msgWarning('已生成录单文案。落库需填写:下单人、下单付款、订单号、物流链接(后返可不填,将按 0.00)') this.$modal.msgWarning('已生成录单文案。落库需填写:下单人、下单付款、订单号,以及物流链接或物流单号(后返可不填,将按 0.00)')
return return
} }
const res2 = await executeInstruction({ command: merged }) const res2 = await executeInstruction({ command: merged })
@@ -700,7 +709,7 @@ export default {
if (!this.canPersistOrderFields()) { if (!this.canPersistOrderFields()) {
this.resultText = merged this.resultText = merged
this.verifyDialogVisible = false this.verifyDialogVisible = false
this.$modal.msgWarning('已强制生成表单。落库仍需填写:下单人、下单付款、订单号、物流链接') this.$modal.msgWarning('已强制生成表单。落库仍需填写:下单人、下单付款、订单号,以及物流链接或物流单号')
return return
} }
const res2 = await executeInstruction({ command: merged }) const res2 = await executeInstruction({ command: merged })
@@ -729,7 +738,8 @@ export default {
paymentText: '', paymentText: '',
rebateText: '', rebateText: '',
orderIdText: '', orderIdText: '',
logisticsLink: '' logisticsLink: '',
waybillNo: ''
} }
this.resultText = '' this.resultText = ''
}, },
@@ -794,7 +804,8 @@ export default {
payment: field('下单付款(注意核对):', ['后返金额(注意核对):']), payment: field('下单付款(注意核对):', ['后返金额(注意核对):']),
rebate: field('后返金额(注意核对):', ['订单号(需填):']), rebate: field('后返金额(注意核对):', ['订单号(需填):']),
orderId: field('订单号(需填):', ['物流链接(需填):']), orderId: field('订单号(需填):', ['物流链接(需填):']),
logistics: field('物流链接(需填):', ['备注(下单号码有变动', '—————————', '京粉实际价格']) logistics: field('物流链接(需填):', ['物流单号(无链接时填):', '备注(下单号码有变动', '—————————', '京粉实际价格']),
waybill: field('物流单号(无链接时填):', ['备注(下单号码有变动', '—————————', '京粉实际价格'])
} }
} }
return { return {
@@ -817,7 +828,7 @@ export default {
String(parsed.buyer || '').trim() String(parsed.buyer || '').trim()
&& String(parsed.payment || '').trim() && String(parsed.payment || '').trim()
&& String(parsed.orderId || '').trim() && String(parsed.orderId || '').trim()
&& String(parsed.logistics || '').trim() && (String(parsed.logistics || '').trim() || String(parsed.waybill || '').trim())
) )
}, },
isPersistFilledOrder(row) { isPersistFilledOrder(row) {
@@ -826,7 +837,7 @@ export default {
String(row.buyer || '').trim() String(row.buyer || '').trim()
&& row.paymentAmount != null && row.paymentAmount !== '' && row.paymentAmount != null && row.paymentAmount !== ''
&& String(row.orderId || '').trim() && String(row.orderId || '').trim()
&& String(row.logisticsLink || '').trim() && (String(row.logisticsLink || '').trim() || String(row.waybillNo || '').trim())
) )
}, },
historyItemMatchesKeyword(item, kw) { historyItemMatchesKeyword(item, kw) {
@@ -840,6 +851,8 @@ export default {
item.orderId, item.orderId,
item.distributionMark, item.distributionMark,
item.thirdPartyOrderNo, item.thirdPartyOrderNo,
item.waybillNo,
item.logisticsLink,
item.remark item.remark
].join(' ').toLowerCase() ].join(' ').toLowerCase()
return blob.includes(kw.toLowerCase()) return blob.includes(kw.toLowerCase())
@@ -867,6 +880,7 @@ export default {
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(),
orderTime: parts.time, orderTime: parts.time,
rawText: body rawText: body
} }
@@ -889,6 +903,7 @@ export default {
rebateAmount: row.rebateAmount, rebateAmount: row.rebateAmount,
orderId: row.orderId || '', orderId: row.orderId || '',
logisticsLink: row.logisticsLink || '', logisticsLink: row.logisticsLink || '',
waybillNo: row.waybillNo || '',
orderTime: row.orderTime || row.createTime, orderTime: row.orderTime || row.createTime,
id: row.id id: row.id
} }
@@ -1011,6 +1026,7 @@ export default {
this.form.rebateText = this.formatHistoryMoney(row.rebateAmount) this.form.rebateText = this.formatHistoryMoney(row.rebateAmount)
this.form.orderIdText = String(row.orderId || '').trim() this.form.orderIdText = String(row.orderId || '').trim()
this.form.logisticsLink = String(row.logisticsLink || '').trim() this.form.logisticsLink = String(row.logisticsLink || '').trim()
this.form.waybillNo = String(row.waybillNo || '').trim()
this.resultText = row.rawText || '' this.resultText = row.rawText || ''
this.historyVisible = false this.historyVisible = false
this.$modal.msgSuccess(row.filled ? '已回填历史记录,可修改后录单' : '已回填待填写表单,请补全后录单') this.$modal.msgSuccess(row.filled ? '已回填历史记录,可修改后录单' : '已回填待填写表单,请补全后录单')
+25 -5
View File
@@ -289,6 +289,12 @@
icon="el-icon-copy-document"> icon="el-icon-copy-document">
复制物流链接 复制物流链接
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item
v-if="row.waybillNo"
:command="{action: 'copyWaybill', row: row}"
icon="el-icon-copy-document">
复制物流单号
</el-dropdown-item>
<el-dropdown-item <el-dropdown-item
:command="{action: 'copyBasketShip', row: row}" :command="{action: 'copyBasketShip', row: row}"
icon="el-icon-document-copy"> icon="el-icon-document-copy">
@@ -949,6 +955,12 @@
icon="el-icon-copy-document"> icon="el-icon-copy-document">
复制物流链接 复制物流链接
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item
v-if="scope.row.waybillNo"
:command="{action: 'copyWaybill', row: scope.row}"
icon="el-icon-copy-document">
复制物流单号
</el-dropdown-item>
<el-dropdown-item <el-dropdown-item
:command="{action: 'copyBasketShip', row: scope.row}" :command="{action: 'copyBasketShip', row: scope.row}"
icon="el-icon-document-copy"> icon="el-icon-document-copy">
@@ -1007,6 +1019,7 @@
<el-button v-if="scope.row.thirdPartyOrderNo" type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.thirdPartyOrderNo)" title="复制第三方单号">三方</el-button> <el-button v-if="scope.row.thirdPartyOrderNo" type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.thirdPartyOrderNo)" title="复制第三方单号">三方</el-button>
<el-button type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.address)" title="复制地址">地址</el-button> <el-button type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.address)" title="复制地址">地址</el-button>
<el-button v-if="scope.row.logisticsLink" type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.logisticsLink)" title="复制物流链接">物流</el-button> <el-button v-if="scope.row.logisticsLink" type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.logisticsLink)" title="复制物流链接">物流</el-button>
<el-button v-if="scope.row.waybillNo" type="text" size="mini" class="jd-act-link" icon="el-icon-copy-document" @click="copyToClipboard(scope.row.waybillNo)" title="复制物流单号">运单</el-button>
<el-button type="text" size="mini" class="jd-act-link" icon="el-icon-document-copy" @click="copyBasketShipSummary(scope.row)" title="复制篮子发货摘要(型号、地址、物流)">篮子</el-button> <el-button type="text" size="mini" class="jd-act-link" icon="el-icon-document-copy" @click="copyBasketShipSummary(scope.row)" title="复制篮子发货摘要(型号、地址、物流)">篮子</el-button>
<el-button type="text" size="mini" class="jd-act-link" @click="copyReturnInfo(scope.row)" title="复制退货信息">退货</el-button> <el-button type="text" size="mini" class="jd-act-link" @click="copyReturnInfo(scope.row)" title="复制退货信息">退货</el-button>
</div> </div>
@@ -1646,19 +1659,21 @@ export default {
this.showDesktopExpandedFilters = true this.showDesktopExpandedFilters = true
} }
}, },
/** 已发货:联盟 express_status≠10;无联盟数据时有物流链接视为已发货 */ /** 已发货:联盟 express_status≠10;无联盟数据时有物流链接或物流单号视为已发货 */
isOrderShipped(row) { isOrderShipped(row) {
if (!row || row.isRefunded === 1) return false if (!row || row.isRefunded === 1) return false
if (row.expressStatus != null) return row.expressStatus !== 10 if (row.expressStatus != null) return row.expressStatus !== 10
const link = row.logisticsLink == null ? '' : String(row.logisticsLink).trim() const link = row.logisticsLink == null ? '' : String(row.logisticsLink).trim()
return link.length > 0 const waybill = row.waybillNo == null ? '' : String(row.waybillNo).trim()
return link.length > 0 || waybill.length > 0
}, },
/** 待发货:联盟 express_status=10;无联盟数据且无物流链接 */ /** 待发货:联盟 express_status=10;无联盟数据且无物流链接、无物流单号 */
isOrderPendingShip(row) { isOrderPendingShip(row) {
if (!row || row.isRefunded === 1) return false if (!row || row.isRefunded === 1) return false
if (row.expressStatus != null) return row.expressStatus === 10 if (row.expressStatus != null) return row.expressStatus === 10
const link = row.logisticsLink == null ? '' : String(row.logisticsLink).trim() const link = row.logisticsLink == null ? '' : String(row.logisticsLink).trim()
return link.length === 0 const waybill = row.waybillNo == null ? '' : String(row.waybillNo).trim()
return link.length === 0 && waybill.length === 0
}, },
/** 凡系分销标识:历史 F 与 F-中文(如 F-王杰)等同 */ /** 凡系分销标识:历史 F 与 F-中文(如 F-王杰)等同 */
isFanDistributionMark(mark) { isFanDistributionMark(mark) {
@@ -1735,6 +1750,9 @@ export default {
case 'copyLogistics': case 'copyLogistics':
this.copyToClipboard(row.logisticsLink) this.copyToClipboard(row.logisticsLink)
break break
case 'copyWaybill':
this.copyToClipboard(row.waybillNo)
break
case 'copyBasketShip': case 'copyBasketShip':
this.copyBasketShipSummary(row) this.copyBasketShipSummary(row)
break break
@@ -2466,7 +2484,9 @@ export default {
const model = this.fullModelNumber(row) || '—' const model = this.fullModelNumber(row) || '—'
const addrRaw = row.address != null ? String(row.address).trim() : '' const addrRaw = row.address != null ? String(row.address).trim() : ''
const addr = (addrRaw.replace(/\s+/g, '')) || '—' const addr = (addrRaw.replace(/\s+/g, '')) || '—'
const url = this.normalizeBasketLogisticsUrl(row.logisticsLink) const url = row.logisticsLink
? this.normalizeBasketLogisticsUrl(row.logisticsLink)
: ((row.waybillNo && String(row.waybillNo).trim()) || '—')
const sep = '————————————' const sep = '————————————'
return `「发货摘要」\n${sep}\n型号: ${model}\n地址:${addr}\n物流:${url}\n` return `「发货摘要」\n${sep}\n型号: ${model}\n地址:${addr}\n物流:${url}\n`
}, },