判断是否有签名换到长链接推送 然后添加 报关价 预估退税计算
This commit is contained in:
-29
@@ -196,35 +196,6 @@
|
|||||||
if (userStore.isLogin) {
|
if (userStore.isLogin) {
|
||||||
try {
|
try {
|
||||||
const data = await UserService.getUserInfo()
|
const data = await UserService.getUserInfo()
|
||||||
const { systemsid } = useUserStore()
|
|
||||||
// 排除移动端电子签名页,不做签名校验
|
|
||||||
const currentPath = router.currentRoute.value?.path || ''
|
|
||||||
const isOnMobileSignature = currentPath.startsWith('/auth/signature/mobile')
|
|
||||||
if (!isOnMobileSignature) {
|
|
||||||
if (data.user.sign_img == null || data.user.sign_img == '') {
|
|
||||||
ElMessageBox.alert('请前往个人中心完成签名操作!', '提醒', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
callback: () => {
|
|
||||||
if (systemsid == '1') {
|
|
||||||
router.push('/admin/user/user_info')
|
|
||||||
} else {
|
|
||||||
router.push('/system/user-center')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else if (data.user.email == null || data.user.email == '') {
|
|
||||||
ElMessageBox.alert('邮箱没有填写!请前往个人中心补充邮箱!', '提醒', {
|
|
||||||
confirmButtonText: '确定',
|
|
||||||
callback: () => {
|
|
||||||
if (systemsid == '1') {
|
|
||||||
router.push('/admin/user/user_info')
|
|
||||||
} else {
|
|
||||||
router.push('/system/user-center')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
userStore.setUserInfo(data)
|
userStore.setUserInfo(data)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('获取用户信息失败', error)
|
console.error('获取用户信息失败', error)
|
||||||
|
|||||||
@@ -132,6 +132,13 @@ export class commonService {
|
|||||||
url: '/common/preset/users'
|
url: '/common/preset/users'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
//用户下拉框
|
||||||
|
static getUserSelectparams(params: any) {
|
||||||
|
return request.get<any>({
|
||||||
|
url: '/common/preset/users',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
//签名 编辑
|
//签名 编辑
|
||||||
static signatureEdit(params: any) {
|
static signatureEdit(params: any) {
|
||||||
return request.post<any>({
|
return request.post<any>({
|
||||||
|
|||||||
@@ -206,6 +206,14 @@
|
|||||||
'—'
|
'—'
|
||||||
}}</template>
|
}}</template>
|
||||||
</ElTableColumn>
|
</ElTableColumn>
|
||||||
|
<ElTableColumn label="报关价" min-width="120" align="center">
|
||||||
|
<template #default="scope">{{
|
||||||
|
scope.row.clearance_price?.currency_info ||
|
||||||
|
scope.row.clearance_price?.amount ||
|
||||||
|
scope.row.clearance_price ||
|
||||||
|
'—'
|
||||||
|
}}</template>
|
||||||
|
</ElTableColumn>
|
||||||
<ElTableColumn fixed="right" label="利润" min-width="120" align="center">
|
<ElTableColumn fixed="right" label="利润" min-width="120" align="center">
|
||||||
<template #default="scope">{{
|
<template #default="scope">{{
|
||||||
scope.row.profit?.currency_info ||
|
scope.row.profit?.currency_info ||
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ref, reactive, watch, onMounted } from 'vue'
|
import { ref, reactive, watch, onMounted, nextTick } from 'vue'
|
||||||
import { componentSizeMap, ElMessage } from 'element-plus'
|
import { componentSizeMap, ElMessage } from 'element-plus'
|
||||||
import { CrmService } from '@/api/crmApi'
|
import { CrmService } from '@/api/crmApi'
|
||||||
import { commonService } from '@/api/commonApi'
|
import { commonService } from '@/api/commonApi'
|
||||||
@@ -75,6 +75,9 @@ export interface ItemRow {
|
|||||||
tax_refund: string
|
tax_refund: string
|
||||||
tax_refund_currency: string
|
tax_refund_currency: string
|
||||||
tax_refund_currency_snapshot: string
|
tax_refund_currency_snapshot: string
|
||||||
|
clearance_price: number | undefined
|
||||||
|
clearance_price_currency: string
|
||||||
|
clearance_price_currency_snapshot: string
|
||||||
retrofit_fee: string
|
retrofit_fee: string
|
||||||
total_price: number | undefined
|
total_price: number | undefined
|
||||||
official_price: number | undefined
|
official_price: number | undefined
|
||||||
@@ -133,6 +136,8 @@ export interface DialogState {
|
|||||||
export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
||||||
const { uploadHeaders } = useUploadHeaders()
|
const { uploadHeaders } = useUploadHeaders()
|
||||||
const actionImageUplode = `${import.meta.env.VITE_API_URL}/ticket/upload?scene=stock_orders`
|
const actionImageUplode = `${import.meta.env.VITE_API_URL}/ticket/upload?scene=stock_orders`
|
||||||
|
// 回显填充抑制标记:为 true 时不触发自动计算覆盖接口值
|
||||||
|
const isPopulating = ref(false)
|
||||||
|
|
||||||
// 选项数据
|
// 选项数据
|
||||||
const channelOptions = ref<any>()
|
const channelOptions = ref<any>()
|
||||||
@@ -218,6 +223,9 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
tax_refund: '',
|
tax_refund: '',
|
||||||
tax_refund_currency: 'CNY',
|
tax_refund_currency: 'CNY',
|
||||||
tax_refund_currency_snapshot: '人民币',
|
tax_refund_currency_snapshot: '人民币',
|
||||||
|
clearance_price: undefined,
|
||||||
|
clearance_price_currency: 'CNY',
|
||||||
|
clearance_price_currency_snapshot: '人民币',
|
||||||
retrofit_fee: '',
|
retrofit_fee: '',
|
||||||
total_price: undefined,
|
total_price: undefined,
|
||||||
official_price: undefined,
|
official_price: undefined,
|
||||||
@@ -484,16 +492,9 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
unit -
|
unit -
|
||||||
(retrofit +
|
(retrofit + fob + listing + handling + port + ocean + commission + purchaseTax) +
|
||||||
fob +
|
taxRefund +
|
||||||
listing +
|
reduction
|
||||||
reduction +
|
|
||||||
handling +
|
|
||||||
port +
|
|
||||||
ocean +
|
|
||||||
commission +
|
|
||||||
purchaseTax) +
|
|
||||||
taxRefund
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -510,11 +511,42 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
unit -
|
unit -
|
||||||
(retrofit + fob + guide + discount + handling + port + ocean + commission + purchaseTax) +
|
(retrofit + fob + guide + handling + port + ocean + commission + purchaseTax) +
|
||||||
taxRefund
|
taxRefund +
|
||||||
|
discount
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const calcClearanceFee = (it: any): number => {
|
||||||
|
const targetCurrency = baseForm.settlement_currency || 'USD'
|
||||||
|
const unit = convertCurrency(it.unit_price, it.unit_price_currency, targetCurrency)
|
||||||
|
const commission = convertCurrency(
|
||||||
|
it.commission ?? (it as any).commission,
|
||||||
|
(it as any).commission_currency,
|
||||||
|
targetCurrency
|
||||||
|
)
|
||||||
|
return unit - commission
|
||||||
|
}
|
||||||
|
|
||||||
|
const calcTaxRefund = (it: any): number => {
|
||||||
|
const mileageVal = Number(it.mileage ?? 0)
|
||||||
|
if (mileageVal > 0) return 0
|
||||||
|
const targetCurrency = baseForm.settlement_currency || 'USD'
|
||||||
|
const official = convertCurrency(
|
||||||
|
it.official_price ?? (it as any).guide_price,
|
||||||
|
(it as any).guide_price_currency,
|
||||||
|
targetCurrency
|
||||||
|
)
|
||||||
|
const discount = convertCurrency(
|
||||||
|
it.discount_price ?? (it as any).discount,
|
||||||
|
(it as any).discount_currency,
|
||||||
|
targetCurrency
|
||||||
|
)
|
||||||
|
const base = official - discount
|
||||||
|
const refund = base * 0.115
|
||||||
|
return refund < 0 ? 0 : refund
|
||||||
|
}
|
||||||
|
|
||||||
// 合同文件相关方法
|
// 合同文件相关方法
|
||||||
const isImageFile = (file: { name: string; url: string; file_name: string }) => {
|
const isImageFile = (file: { name: string; url: string; file_name: string }) => {
|
||||||
return /\.(jpg|jpeg|png|gif)$/i.test(file.name) || file.file_name.startsWith('image/')
|
return /\.(jpg|jpeg|png|gif)$/i.test(file.name) || file.file_name.startsWith('image/')
|
||||||
@@ -675,6 +707,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
// 数据回显方法
|
// 数据回显方法
|
||||||
const populateFromDetail = (res: any) => {
|
const populateFromDetail = (res: any) => {
|
||||||
if (!res) return
|
if (!res) return
|
||||||
|
isPopulating.value = true
|
||||||
// 基础信息
|
// 基础信息
|
||||||
baseForm.pick_up_date = res.pick_up_date || ''
|
baseForm.pick_up_date = res.pick_up_date || ''
|
||||||
baseForm.collect_all_date = res.collect_all_date || ''
|
baseForm.collect_all_date = res.collect_all_date || ''
|
||||||
@@ -703,7 +736,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
baseForm.remark = res.remark || ''
|
baseForm.remark = res.remark || ''
|
||||||
baseForm.settlement_currency = res.settlement_currency || 'CNY'
|
baseForm.settlement_currency = res.settlement_currency || 'CNY'
|
||||||
// 合计与汇率
|
// 合计与汇率
|
||||||
baseForm.total_cif = res.cif_total_amount ? Number(res.cif_total_amount) : undefined
|
baseForm.total_cif = res.cif_total_amount.amount ? Number(res.cif_total_amount.amount) : undefined
|
||||||
baseForm.total_cif_currency = res.settlement_currency || baseForm.total_cif_currency
|
baseForm.total_cif_currency = res.settlement_currency || baseForm.total_cif_currency
|
||||||
baseForm.contract_exchange_rate =
|
baseForm.contract_exchange_rate =
|
||||||
res.contract_exchange_rate || getCurrencyRate(baseForm.total_cif_currency)
|
res.contract_exchange_rate || getCurrencyRate(baseForm.total_cif_currency)
|
||||||
@@ -739,9 +772,6 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
purchase_tax: it.purchase_tax?.amount ?? '',
|
purchase_tax: it.purchase_tax?.amount ?? '',
|
||||||
purchase_tax_currency: it.purchase_tax?.currency || 'CNY',
|
purchase_tax_currency: it.purchase_tax?.currency || 'CNY',
|
||||||
purchase_tax_currency_snapshot: '',
|
purchase_tax_currency_snapshot: '',
|
||||||
tax_refund: it.tax_refund?.amount ?? '',
|
|
||||||
tax_refund_currency: it.tax_refund?.currency || 'CNY',
|
|
||||||
tax_refund_currency_snapshot: '',
|
|
||||||
retrofit_fee: it.retrofit_fee?.amount ?? '',
|
retrofit_fee: it.retrofit_fee?.amount ?? '',
|
||||||
total_price: it.total_price?.amount ? Number(it.total_price.amount) : undefined,
|
total_price: it.total_price?.amount ? Number(it.total_price.amount) : undefined,
|
||||||
official_price: it.official_price?.amount ? Number(it.official_price.amount) : undefined,
|
official_price: it.official_price?.amount ? Number(it.official_price.amount) : undefined,
|
||||||
@@ -768,14 +798,20 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
discount_currency: it.discount_price?.currency || 'CNY',
|
discount_currency: it.discount_price?.currency || 'CNY',
|
||||||
discount_currency_snapshot: '',
|
discount_currency_snapshot: '',
|
||||||
contract_rate: baseForm.contract_exchange_rate ? Number(baseForm.contract_exchange_rate) : undefined,
|
contract_rate: baseForm.contract_exchange_rate ? Number(baseForm.contract_exchange_rate) : undefined,
|
||||||
profit: undefined,
|
profit: it.profit?.amount ? Number(it.profit.amount) : undefined,
|
||||||
profit_type_snapshot: '',
|
profit_type_snapshot: '',
|
||||||
|
clearance_price: it.clearance_price?.amount ? Number(it.clearance_price.amount) : undefined,
|
||||||
|
clearance_price_currency: it.clearance_price?.currency || 'CNY',
|
||||||
|
clearance_price_currency_snapshot: '',
|
||||||
modify_ids: Array.isArray(it.modify_list) ? it.modify_list.map((m: any) => Number(m.option_id)) : [],
|
modify_ids: Array.isArray(it.modify_list) ? it.modify_list.map((m: any) => Number(m.option_id)) : [],
|
||||||
modify_list: Array.isArray(it.modify_list)
|
modify_list: Array.isArray(it.modify_list)
|
||||||
? it.modify_list.map((m: any) => ({ option_id: String(m.option_id), option_name_snapshot: m.option_name_snapshot }))
|
? it.modify_list.map((m: any) => ({ option_id: String(m.option_id), option_name_snapshot: m.option_name_snapshot }))
|
||||||
: [],
|
: [],
|
||||||
modify_fee_currency: it.retrofit_fee?.currency || 'CNY',
|
modify_fee_currency: it.retrofit_fee?.currency || 'CNY',
|
||||||
modify_fee_currency_snapshot: ''
|
modify_fee_currency_snapshot: '',
|
||||||
|
tax_refund: it.tax_refund?.amount ?? '',
|
||||||
|
tax_refund_currency: it.tax_refund?.currency || 'CNY',
|
||||||
|
tax_refund_currency_snapshot: ''
|
||||||
}))
|
}))
|
||||||
// 计划收款
|
// 计划收款
|
||||||
const pays = Array.isArray(res.account_list) ? res.account_list : []
|
const pays = Array.isArray(res.account_list) ? res.account_list : []
|
||||||
@@ -798,6 +834,8 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
file_name: res.contract
|
file_name: res.contract
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 等待本轮变更完成后,再恢复自动计算
|
||||||
|
nextTick(() => { isPopulating.value = false })
|
||||||
}
|
}
|
||||||
|
|
||||||
// 提交方法
|
// 提交方法
|
||||||
@@ -836,7 +874,8 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
ocean_freight: wrapMoney(it.ocean_freight, (it as any).ocean_freight_currency, '海运费'),
|
ocean_freight: wrapMoney(it.ocean_freight, (it as any).ocean_freight_currency, '海运费'),
|
||||||
commission: wrapMoney(it.commission, (it as any).commission_currency, '佣金'),
|
commission: wrapMoney(it.commission, (it as any).commission_currency, '佣金'),
|
||||||
purchase_tax: wrapMoney(it.purchase_tax, (it as any).purchase_tax_currency, '购置税'),
|
purchase_tax: wrapMoney(it.purchase_tax, (it as any).purchase_tax_currency, '购置税'),
|
||||||
tax_refund: wrapMoney(it.tax_refund, (it as any).tax_refund_currency, '退税'),
|
// tax_refund: wrapMoney(it.tax_refund, (it as any).tax_refund_currency, '退税'),
|
||||||
|
tax_refund: wrapMoney(it.tax_refund, baseForm.settlement_currency, '退税'),
|
||||||
retrofit_fee: wrapMoney((it as any).retrofit_fee, (it as any).modify_fee_currency, '改装费'),
|
retrofit_fee: wrapMoney((it as any).retrofit_fee, (it as any).modify_fee_currency, '改装费'),
|
||||||
modify_list: it.modify_list,
|
modify_list: it.modify_list,
|
||||||
// total_price: wrapMoney(it.total_price, (it as any).total_price_currency, '总价'),
|
// total_price: wrapMoney(it.total_price, (it as any).total_price_currency, '总价'),
|
||||||
@@ -851,8 +890,14 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
(it as any).discount_currency,
|
(it as any).discount_currency,
|
||||||
'优惠额'
|
'优惠额'
|
||||||
),
|
),
|
||||||
|
profit: wrapMoney(it.profit, baseForm.settlement_currency, '利润'),
|
||||||
listing_price: wrapMoney(it.listing_price, (it as any).listing_price_currency, '挂牌价'),
|
listing_price: wrapMoney(it.listing_price, (it as any).listing_price_currency, '挂牌价'),
|
||||||
reduction_price: wrapMoney(it.reduction_price, (it as any).reduction_price_currency, '二手减价')
|
reduction_price: wrapMoney(
|
||||||
|
it.reduction_price,
|
||||||
|
(it as any).reduction_price_currency,
|
||||||
|
'二手减价'
|
||||||
|
),
|
||||||
|
clearance_price: wrapMoney(it.clearance_price, baseForm.settlement_currency, '报关价')
|
||||||
}))
|
}))
|
||||||
|
|
||||||
// 从提交参数中移除 settlement_currency
|
// 从提交参数中移除 settlement_currency
|
||||||
@@ -867,6 +912,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
account_list: paymentItems.value,
|
account_list: paymentItems.value,
|
||||||
approval_status: type
|
approval_status: type
|
||||||
}
|
}
|
||||||
|
console.log(payload)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (edit) {
|
if (edit) {
|
||||||
@@ -887,7 +933,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
}
|
}
|
||||||
}, 1000)
|
}, 1000)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
ElMessage.error('保存失败')
|
// ElMessage.error('保存失败')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -895,6 +941,7 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
watch(
|
watch(
|
||||||
() => baseForm.settlement_currency,
|
() => baseForm.settlement_currency,
|
||||||
(newCurrency) => {
|
(newCurrency) => {
|
||||||
|
if (isPopulating.value) return
|
||||||
if (newCurrency) {
|
if (newCurrency) {
|
||||||
baseForm.contract_exchange_rate = getCurrencyRate(newCurrency)
|
baseForm.contract_exchange_rate = getCurrencyRate(newCurrency)
|
||||||
if (typeof validateContractRate === 'function') {
|
if (typeof validateContractRate === 'function') {
|
||||||
@@ -904,6 +951,13 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
(items.value || []).forEach((it: any, index: number) => {
|
(items.value || []).forEach((it: any, index: number) => {
|
||||||
const profit = calcProfit(it)
|
const profit = calcProfit(it)
|
||||||
if (items.value[index]) items.value[index].profit = isNaN(profit) ? 0 : Number(profit.toFixed(2))
|
if (items.value[index]) items.value[index].profit = isNaN(profit) ? 0 : Number(profit.toFixed(2))
|
||||||
|
const clearance = calcClearanceFee(it)
|
||||||
|
if (items.value[index]) items.value[index].clearance_price = isNaN(clearance) ? 0 : Number(clearance.toFixed(2))
|
||||||
|
const refund = calcTaxRefund(it)
|
||||||
|
if (items.value[index]) {
|
||||||
|
items.value[index].tax_refund = isNaN(refund) ? 0 : Number(refund.toFixed(2)) as any
|
||||||
|
;(items.value[index] as any).tax_refund_currency = baseForm.settlement_currency || 'USD'
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -923,11 +977,18 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
watch(
|
watch(
|
||||||
items,
|
items,
|
||||||
(val) => {
|
(val) => {
|
||||||
|
if (isPopulating.value) return
|
||||||
val.forEach((it: any, index: number) => {
|
val.forEach((it: any, index: number) => {
|
||||||
const profit = calcProfit(it)
|
const profit = calcProfit(it)
|
||||||
if (items.value[index]) items.value[index].profit = isNaN(profit) ? 0 : Number(profit.toFixed(2))
|
if (items.value[index]) items.value[index].profit = isNaN(profit) ? 0 : Number(profit.toFixed(2))
|
||||||
|
const clearance = calcClearanceFee(it)
|
||||||
|
if (items.value[index]) items.value[index].clearance_price = isNaN(clearance) ? 0 : Number(clearance.toFixed(2))
|
||||||
|
const refund = calcTaxRefund(it)
|
||||||
|
if (items.value[index]) {
|
||||||
|
items.value[index].tax_refund = isNaN(refund) ? 0 : Number(refund.toFixed(2)) as any
|
||||||
|
;(items.value[index] as any).tax_refund_currency = baseForm.settlement_currency || 'USD'
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
// 合计到岸价 = 所有单价相加
|
// 合计到岸价 = 所有单价相加
|
||||||
const sum = (val || []).reduce((acc: number, cur: any) => {
|
const sum = (val || []).reduce((acc: number, cur: any) => {
|
||||||
const n = cur?.unit_price === undefined || cur?.unit_price === null || cur?.unit_price === '' ? 0 : Number(cur.unit_price)
|
const n = cur?.unit_price === undefined || cur?.unit_price === null || cur?.unit_price === '' ? 0 : Number(cur.unit_price)
|
||||||
@@ -1004,6 +1065,8 @@ export function useStockingForm(isFinal = false, stockingId?: string | number) {
|
|||||||
validateContractRate,
|
validateContractRate,
|
||||||
wrapMoney,
|
wrapMoney,
|
||||||
calcProfit,
|
calcProfit,
|
||||||
|
calcClearanceFee,
|
||||||
|
calcTaxRefund,
|
||||||
|
|
||||||
// 合同文件方法
|
// 合同文件方法
|
||||||
isImageFile,
|
isImageFile,
|
||||||
|
|||||||
+137
-3
@@ -1,6 +1,8 @@
|
|||||||
import mittBus from './mittBus'
|
import mittBus from './mittBus'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification, ElMessageBox } from 'element-plus'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
type JsonValue = Record<string, any> | any[]
|
type JsonValue = Record<string, any> | any[]
|
||||||
|
|
||||||
@@ -18,6 +20,7 @@ let isConnecting = false
|
|||||||
let lastInitToken: string | null = null
|
let lastInitToken: string | null = null
|
||||||
let lastInitAt = 0
|
let lastInitAt = 0
|
||||||
const INIT_DEBOUNCE_MS = 1200
|
const INIT_DEBOUNCE_MS = 1200
|
||||||
|
let isAlertShowing = false
|
||||||
|
|
||||||
// 生成唯一ID
|
// 生成唯一ID
|
||||||
const generateTraceId = (): string => {
|
const generateTraceId = (): string => {
|
||||||
@@ -94,12 +97,143 @@ const handleMessage = (event: MessageEvent) => {
|
|||||||
let data: any = event.data
|
let data: any = event.data
|
||||||
try {
|
try {
|
||||||
data = JSON.parse(event.data)
|
data = JSON.parse(event.data)
|
||||||
} catch (error) {
|
} catch {
|
||||||
// console.warn('WebSocket消息解析失败:', error, '原始数据:', event.data)
|
// console.warn('WebSocket消息解析失败:', error, '原始数据:', event.data)
|
||||||
// 对于无法解析的消息,仍然尝试处理原始数据
|
// 对于无法解析的消息,仍然尝试处理原始数据
|
||||||
data = { event: 'unknown', data: event.data }
|
data = { event: 'unknown', data: event.data }
|
||||||
}
|
}
|
||||||
console.log('WebSocket message:', data)
|
// console.log('WebSocket message:', data)
|
||||||
|
// 判断系统初始化检查
|
||||||
|
if (data.event == 'system.init.check') {
|
||||||
|
const { systemsid } = useUserStore()
|
||||||
|
|
||||||
|
// 检查页面是否已加载完成
|
||||||
|
if (document.readyState !== 'complete') {
|
||||||
|
console.warn('页面未完全加载,延迟处理系统检查消息')
|
||||||
|
// 延迟处理,等待页面加载完成
|
||||||
|
setTimeout(() => {
|
||||||
|
handleMessage(event)
|
||||||
|
}, 1000)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查 router 是否可用
|
||||||
|
let router: any = null
|
||||||
|
let currentPath = ''
|
||||||
|
let isOnMobileSignature = false
|
||||||
|
let isOnUserInfo = false
|
||||||
|
let isOnUserCenter = false
|
||||||
|
|
||||||
|
try {
|
||||||
|
router = useRouter()
|
||||||
|
// 检查 router.currentRoute 是否可用
|
||||||
|
if (router.currentRoute) {
|
||||||
|
currentPath = router.currentRoute.value?.path || ''
|
||||||
|
isOnMobileSignature = currentPath.startsWith('/auth/signature/mobile')
|
||||||
|
isOnUserInfo = currentPath.startsWith('/system/user-center')
|
||||||
|
isOnUserCenter = currentPath.startsWith('/admin/user/user_info')
|
||||||
|
} else {
|
||||||
|
// Router currentRoute 未初始化,使用 window.location 作为备选方案
|
||||||
|
currentPath = window.location.pathname || ''
|
||||||
|
isOnMobileSignature = currentPath.startsWith('/auth/signature/mobile')
|
||||||
|
isOnUserInfo = currentPath.startsWith('/system/user-center')
|
||||||
|
isOnUserCenter = currentPath.startsWith('/admin/user/user_info')
|
||||||
|
// console.warn('Router currentRoute 未初始化,使用 window.location 作为备选方案')
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// Router 完全未初始化,使用 window.location 作为备选方案
|
||||||
|
currentPath = window.location.pathname || ''
|
||||||
|
isOnMobileSignature = currentPath.startsWith('/auth/signature/mobile')
|
||||||
|
isOnUserInfo = currentPath.startsWith('/system/user-center')
|
||||||
|
isOnUserCenter = currentPath.startsWith('/admin/user/user_info')
|
||||||
|
// console.warn('Router 未初始化,使用 window.location 作为备选方案:', error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排除移动端电子签名页,不弹出提示框
|
||||||
|
if (isOnMobileSignature || isOnUserInfo || isOnUserCenter) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接收到消息就弹出提示框(排除移动端电子签名页)
|
||||||
|
if (data.data) {
|
||||||
|
const { is_sign } = data.data
|
||||||
|
const msgs = ref('尚未设置【签名】,请前往个人中心完成操作!')
|
||||||
|
|
||||||
|
// 根据检查结果确定提示信息
|
||||||
|
let alertMessage = ''
|
||||||
|
let shouldShowAlert = false
|
||||||
|
|
||||||
|
// 构建状态标识
|
||||||
|
// const statusKey = `${is_report_to}-${is_office_clerk}-${is_sign}`
|
||||||
|
|
||||||
|
// switch (statusKey) {
|
||||||
|
// case 'false-false-false':
|
||||||
|
// alertMessage = msgs.value
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'true-false-true':
|
||||||
|
// alertMessage = '尚未操作【绑定直属上级、签名】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'true-false-false':
|
||||||
|
// alertMessage = '尚未操作【绑定内勤、签名】】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'true-true-false':
|
||||||
|
// alertMessage = '尚未操作【签名】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'false-true-true':
|
||||||
|
// alertMessage = '尚未操作【直属上级】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'false-true-false':
|
||||||
|
// alertMessage = '尚未操作【直属上级,签名】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// case 'false-false-true':
|
||||||
|
// alertMessage = '尚未操作【直属上级,内勤】,请前往个人中心完成操作!'
|
||||||
|
// shouldShowAlert = true
|
||||||
|
// break
|
||||||
|
// default:
|
||||||
|
// // 其他情况不弹出提示
|
||||||
|
// shouldShowAlert = false
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
if (is_sign == false) {
|
||||||
|
alertMessage = msgs.value
|
||||||
|
shouldShowAlert = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// 只有在需要显示提示且当前没有弹出框的情况下才弹出提示框
|
||||||
|
if (shouldShowAlert && !isAlertShowing) {
|
||||||
|
isAlertShowing = true
|
||||||
|
ElMessageBox.alert(alertMessage, '提醒', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
callback: () => {
|
||||||
|
isAlertShowing = false
|
||||||
|
// 如果 router 可用,使用 router 跳转
|
||||||
|
if (router && router.push) {
|
||||||
|
if (systemsid == '1') {
|
||||||
|
router.push('/admin/user/user_info')
|
||||||
|
} else {
|
||||||
|
router.push('/system/user-center')
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Router 不可用,使用 window.location 跳转
|
||||||
|
const targetPath = systemsid == '1' ? '/admin/user/user_info' : '/system/user-center'
|
||||||
|
window.location.href = targetPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
// 如果弹出框被意外关闭,重置状态
|
||||||
|
isAlertShowing = false
|
||||||
|
})
|
||||||
|
} else if (shouldShowAlert && isAlertShowing) {
|
||||||
|
console.log('当前已有弹出框显示,跳过新的提示框')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 处理通知消息
|
// 处理通知消息
|
||||||
if (data.event == 'notify.receive') {
|
if (data.event == 'notify.receive') {
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="客户来源" label-width="114px">
|
<ElFormItem label="客户来源" label-width="124px">
|
||||||
<el-tooltip class="box-item" content="如需修改客户来源,请先编辑修改客户资料">
|
<el-tooltip class="box-item" content="如需修改客户来源,请先编辑修改客户资料">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="baseForm.customer_source_id"
|
v-model="baseForm.customer_source_id"
|
||||||
@@ -388,7 +388,7 @@
|
|||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预估退税额" label-width="85px">
|
<ElFormItem label="预估退税额" label-width="85px">
|
||||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||||
<template #suffix>
|
<!-- <template #suffix>
|
||||||
<ElSelect v-model="item.tax_refund_currency" style="width: 74px">
|
<ElSelect v-model="item.tax_refund_currency" style="width: 74px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
@@ -397,6 +397,14 @@
|
|||||||
:value="c.currency_code"
|
:value="c.currency_code"
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
|
</template> -->
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</ElInput>
|
</ElInput>
|
||||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||||
@@ -457,6 +465,24 @@
|
|||||||
</ElInput>
|
</ElInput>
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
|
<ElFormItem label="报关价" label-width="85px">
|
||||||
|
<ElInput
|
||||||
|
v-model="item.clearance_price"
|
||||||
|
placeholder="正在计算报关价"
|
||||||
|
:class="Number(item.clearance_price) < 0 ? 'customs-fee-negative' : ''"
|
||||||
|
>
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</ElInput>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElCol>
|
||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">基础信息</span>
|
<span class="title">基础信息</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="base-form" label-position="right">
|
<ElForm :model="baseForm" :rules="baseFormRules" ref="baseFormRef" class="base-form" label-position="right">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="日期" label-width="114px">
|
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.biz_date"
|
v-model="baseForm.biz_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的国" label-width="114px">
|
<ElFormItem label="清关目的国" label-width="114px" prop="clearance_country_id" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="baseForm.clearance_country_id"
|
v-model="baseForm.clearance_country_id"
|
||||||
filterable
|
filterable
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="客户名称" label-width="114px">
|
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="baseForm.customer_snapshot"
|
v-model="baseForm.customer_snapshot"
|
||||||
placeholder="请选择客户"
|
placeholder="请选择客户"
|
||||||
@@ -124,11 +124,11 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">订单详情</span>
|
<span class="title">订单详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm class="items-wrap" label-position="right">
|
<ElForm :model="formModel" :rules="itemRules" ref="itemsFormRef" class="items-wrap" label-position="right">
|
||||||
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="车型" label-width="85px">
|
<ElFormItem label="车型" label-width="85px" :prop="'items.' + idx + '.sku_id'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.model_snapshot"
|
v-model="item.model_snapshot"
|
||||||
placeholder="请选择车型"
|
placeholder="请选择车型"
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/外饰" label-width="85px">
|
<ElFormItem label="颜色/外饰" label-width="85px" :prop="'items.' + idx + '.color_exterior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_exterior_snapshot"
|
v-model="item.color_exterior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -167,7 +167,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/内饰" label-width="85px">
|
<ElFormItem label="颜色/内饰" label-width="85px" :prop="'items.' + idx + '.color_interior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_interior_snapshot"
|
v-model="item.color_interior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -220,7 +220,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4" v-if="(item.mileage ?? 0) <= 0">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4" v-if="(item.mileage ?? 0) <= 0">
|
||||||
<ElFormItem label="官方指导价" label-width="85px">
|
<ElFormItem label="官方指导价" label-width="85px" :prop="'items.' + idx + '.official_price'" required>
|
||||||
<ElInput v-model="item.official_price" placeholder="请输入官方指导价">
|
<ElInput v-model="item.official_price" placeholder="请输入官方指导价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.guide_price_currency" style="width: 64px;border: none;">
|
<ElSelect v-model="item.guide_price_currency" style="width: 64px;border: none;">
|
||||||
@@ -237,7 +237,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4" v-else>
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4" v-else>
|
||||||
<ElFormItem label="二手挂牌价" label-width="85px">
|
<ElFormItem label="二手挂牌价" label-width="85px" :prop="'items.' + idx + '.listing_price'" required>
|
||||||
<ElInput v-model="item.listing_price" placeholder="请输入二手挂牌价">
|
<ElInput v-model="item.listing_price" placeholder="请输入二手挂牌价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
||||||
@@ -411,7 +411,7 @@
|
|||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预估退税额" label-width="85px">
|
<ElFormItem label="预估退税额" label-width="85px">
|
||||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||||
<template #suffix>
|
<!-- <template #suffix>
|
||||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
@@ -420,6 +420,14 @@
|
|||||||
:value="c.currency_code"
|
:value="c.currency_code"
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
|
</template> -->
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</ElInput>
|
</ElInput>
|
||||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||||
@@ -428,7 +436,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="成交价" label-width="85px">
|
<ElFormItem label="成交价" label-width="85px" :prop="'items.' + idx + '.unit_price'" required>
|
||||||
<ElInput v-model="item.unit_price" placeholder="请输入成交价">
|
<ElInput v-model="item.unit_price" placeholder="请输入成交价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
||||||
@@ -480,6 +488,24 @@
|
|||||||
</ElInput>
|
</ElInput>
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
|
<ElFormItem label="报关价" label-width="85px">
|
||||||
|
<ElInput
|
||||||
|
v-model="item.clearance_price"
|
||||||
|
placeholder="正在计算报关价"
|
||||||
|
:class="Number(item.clearance_price) < 0 ? 'profit-negative' : ''"
|
||||||
|
>
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</ElInput>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="车架号" label-width="85px">
|
<ElFormItem label="车架号" label-width="85px">
|
||||||
<ElInput v-model="item.vin" placeholder="请输入车架号"></ElInput>
|
<ElInput v-model="item.vin" placeholder="请输入车架号"></ElInput>
|
||||||
@@ -537,15 +563,15 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">运输详情</span>
|
<span class="title">运输详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="foot-form">
|
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关人" label-width="98px">
|
<ElFormItem label="清关人" label-width="98px" prop="declarant_name" required>
|
||||||
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="全款收齐日" label-width="98px">
|
<ElFormItem label="全款收齐日" label-width="98px" prop="collect_all_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.collect_all_date"
|
v-model="baseForm.collect_all_date"
|
||||||
value-format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD"
|
||||||
@@ -557,7 +583,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="国内收货港" label-width="98px">
|
<ElFormItem label="国内收货港" label-width="98px" prop="domestic_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.domestic_port_id"
|
v-model="baseForm.domestic_port_id"
|
||||||
placeholder="请选择国内收货商"
|
placeholder="请选择国内收货商"
|
||||||
@@ -578,7 +604,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="运输方式" label-width="98px">
|
<ElFormItem label="运输方式" label-width="98px" prop="shipping_method_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.shipping_method_id"
|
v-model="baseForm.shipping_method_id"
|
||||||
placeholder="请选择运输方式"
|
placeholder="请选择运输方式"
|
||||||
@@ -600,7 +626,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="贸易条款" label-width="98px">
|
<ElFormItem label="贸易条款" label-width="98px" prop="trade_term_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.trade_term_id"
|
v-model="baseForm.trade_term_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -621,7 +647,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的港" label-width="98px">
|
<ElFormItem label="清关目的港" label-width="98px" prop="clearance_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.clearance_port_id"
|
v-model="baseForm.clearance_port_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -642,7 +668,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="提车日期" label-width="98px">
|
<ElFormItem label="提车日期" label-width="98px" prop="pick_up_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.pick_up_date"
|
v-model="baseForm.pick_up_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -664,7 +690,7 @@
|
|||||||
<div class="payment-section">
|
<div class="payment-section">
|
||||||
<div class="payment-items">
|
<div class="payment-items">
|
||||||
<div v-for="(payment, idx) in paymentItems" :key="idx" class="payment-item">
|
<div v-for="(payment, idx) in paymentItems" :key="idx" class="payment-item">
|
||||||
<ElForm :model="payment" label-width="55px" class="payment-form">
|
<ElForm :model="payment" :rules="paymentFormRules" :ref="(el) => setPaymentFormRef(el, idx)" label-width="55px" class="payment-form">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="汇款人" label-width="55px">
|
<ElFormItem label="汇款人" label-width="55px">
|
||||||
@@ -807,14 +833,14 @@
|
|||||||
plain
|
plain
|
||||||
size="large"
|
size="large"
|
||||||
class="submit-btn"
|
class="submit-btn"
|
||||||
@click="handleSubmit(0, undefined, '1')"
|
@click="handleSubmitWithValidation(0)"
|
||||||
>保存</ElButton
|
>保存</ElButton
|
||||||
>
|
>
|
||||||
<ElButton
|
<ElButton
|
||||||
type="primary"
|
type="primary"
|
||||||
size="large"
|
size="large"
|
||||||
class="submit-btn"
|
class="submit-btn"
|
||||||
@click="handleSubmit(1, undefined, '1')"
|
@click="handleSubmitWithValidation(1)"
|
||||||
>提交</ElButton
|
>提交</ElButton
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@@ -930,13 +956,70 @@
|
|||||||
import { CrmService } from '@/api/crmApi'
|
import { CrmService } from '@/api/crmApi'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { useStockingForm } from '@/composables/useStockingForm'
|
import { useStockingForm } from '@/composables/useStockingForm'
|
||||||
import { onMounted } from 'vue'
|
import { onMounted, ref, computed } from 'vue'
|
||||||
|
|
||||||
defineOptions({ name: 'CrmStockingFinalAdd' }) // 定义组件名称,用于 KeepAlive 缓存控制
|
defineOptions({ name: 'CrmStockingFinalAdd' }) // 定义组件名称,用于 KeepAlive 缓存控制
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const stocking_id = route.query.id
|
const stocking_id = route.query.id
|
||||||
const { getUserInfo } = useUserStore()
|
const { getUserInfo } = useUserStore()
|
||||||
|
// 表单引用
|
||||||
|
const baseFormRef = ref()
|
||||||
|
const itemsFormRef = ref()
|
||||||
|
const transportFormRef = ref()
|
||||||
|
const paymentFormRefs = ref<any[]>([])
|
||||||
|
const setPaymentFormRef = (el: any, idx: number) => {
|
||||||
|
if (el) paymentFormRefs.value[idx] = el
|
||||||
|
}
|
||||||
|
// 表单模型
|
||||||
|
const formModel = computed(() => ({ items: items.value }))
|
||||||
|
// 基础表单校验
|
||||||
|
const baseFormRules = {
|
||||||
|
biz_date: [{ required: true, message: '请选择日期', trigger: 'change' }],
|
||||||
|
clearance_country_id: [{ required: true, message: '请选择清关目的国', trigger: 'change' }],
|
||||||
|
customer_id: [{ required: true, message: '请选择客户', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 明细动态校验
|
||||||
|
const itemRules = computed(() => {
|
||||||
|
const rules: any = {}
|
||||||
|
items.value.forEach((_, idx) => {
|
||||||
|
rules[`items.${idx}.sku_id`] = [{ required: true, message: '请选择车型', trigger: 'change' }]
|
||||||
|
rules[`items.${idx}.color_exterior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/外饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.color_interior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/内饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.official_price`] = [
|
||||||
|
{ required: true, message: '请输入官方指导价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.listing_price`] = [
|
||||||
|
{ required: true, message: '请输入二手挂牌价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.unit_price`] = [
|
||||||
|
{ required: true, message: '请输入成交价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
return rules
|
||||||
|
})
|
||||||
|
// 运输详情校验
|
||||||
|
const transportFormRules = {
|
||||||
|
declarant_name: [{ required: true, message: '请输入清关人', trigger: 'blur' }],
|
||||||
|
collect_all_date: [{ required: true, message: '请选择全款收齐日', trigger: 'change' }],
|
||||||
|
domestic_port_id: [{ required: true, message: '请选择国内收货港', trigger: 'change' }],
|
||||||
|
shipping_method_id: [{ required: true, message: '请选择运输方式', trigger: 'change' }],
|
||||||
|
trade_term_id: [{ required: true, message: '请选择贸易条款', trigger: 'change' }],
|
||||||
|
clearance_port_id: [{ required: true, message: '请选择清关目的港', trigger: 'change' }],
|
||||||
|
pick_up_date: [{ required: true, message: '请选择提车日期', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 收款信息校验(最终页为回显,不强校验;保留以便需要时启用)
|
||||||
|
const paymentFormRules = {
|
||||||
|
remitter_name: [{ required: true, message: '请输入汇款人', trigger: 'blur' }],
|
||||||
|
remit_country_id: [{ required: true, message: '请选择汇款国', trigger: 'change' }],
|
||||||
|
remit_date: [{ required: true, message: '请选择汇款日期', trigger: 'change' }],
|
||||||
|
account_id: [{ required: true, message: '请选择账户', trigger: 'change' }],
|
||||||
|
amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
|
||||||
|
}
|
||||||
// 使用公共的备货单表单逻辑
|
// 使用公共的备货单表单逻辑
|
||||||
const {
|
const {
|
||||||
// 数据
|
// 数据
|
||||||
@@ -1005,6 +1088,21 @@
|
|||||||
await getdetilfn()
|
await getdetilfn()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
// 提交前统一校验
|
||||||
|
const handleSubmitWithValidation = async (type: number) => {
|
||||||
|
try {
|
||||||
|
await baseFormRef.value?.validate()
|
||||||
|
await itemsFormRef.value?.validate()
|
||||||
|
await transportFormRef.value?.validate()
|
||||||
|
for (let i = 0; i < paymentItems.value.length; i++) {
|
||||||
|
const refForm = paymentFormRefs.value[i]
|
||||||
|
if (refForm) await refForm.validate()
|
||||||
|
}
|
||||||
|
await handleSubmit(type, undefined, '1')
|
||||||
|
} catch (e) {
|
||||||
|
// 校验失败不提交
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@@ -9,15 +9,15 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">基础信息</span>
|
<span class="title">基础信息</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="base-form" label-position="right">
|
<ElForm :model="baseForm" :rules="baseFormRules" ref="baseFormRef" class="base-form" label-position="right">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
||||||
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" />
|
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" disabled />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="日期" label-width="114px">
|
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.biz_date"
|
v-model="baseForm.biz_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的国" label-width="114px">
|
<ElFormItem label="清关目的国" label-width="114px" prop="clearance_country_id" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="baseForm.clearance_country_id"
|
v-model="baseForm.clearance_country_id"
|
||||||
filterable
|
filterable
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="客户名称" label-width="114px">
|
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="baseForm.customer_snapshot"
|
v-model="baseForm.customer_snapshot"
|
||||||
placeholder="请选择客户"
|
placeholder="请选择客户"
|
||||||
@@ -124,11 +124,11 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">订单详情</span>
|
<span class="title">订单详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm class="items-wrap" label-position="right">
|
<ElForm :model="formModel" :rules="itemRules" ref="itemsFormRef" class="items-wrap" label-position="right">
|
||||||
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="车型" label-width="85px">
|
<ElFormItem label="车型" label-width="95px" :prop="'items.' + idx + '.sku_id'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.model_snapshot"
|
v-model="item.model_snapshot"
|
||||||
placeholder="请选择车型"
|
placeholder="请选择车型"
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/外饰" label-width="85px">
|
<ElFormItem label="颜色/外饰" label-width="95px" :prop="'items.' + idx + '.color_exterior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_exterior_snapshot"
|
v-model="item.color_exterior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/内饰" label-width="85px">
|
<ElFormItem label="颜色/内饰" label-width="95px" :prop="'items.' + idx + '.color_interior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_interior_snapshot"
|
v-model="item.color_interior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="改装" label-width="85px">
|
<ElFormItem label="改装" label-width="95px">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.modify_ids"
|
v-model="item.modify_ids"
|
||||||
filterable
|
filterable
|
||||||
@@ -216,7 +216,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="里程" label-width="85px">
|
<ElFormItem label="里程" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.mileage"
|
v-model="item.mileage"
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
@@ -227,7 +227,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
||||||
<ElFormItem label="官方指导价" label-width="85px">
|
<ElFormItem label="官方指导价" label-width="95px" :prop="'items.' + idx + '.official_price'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.official_price"
|
v-model="item.official_price"
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
||||||
<ElFormItem label="二手挂牌价" label-width="85px">
|
<ElFormItem label="二手挂牌价" label-width="95px" :prop="'items.' + idx + '.listing_price'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.listing_price"
|
v-model="item.listing_price"
|
||||||
@@ -277,7 +277,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
||||||
<ElFormItem label="优惠" label-width="85px">
|
<ElFormItem label="优惠" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.discount_price"
|
v-model="item.discount_price"
|
||||||
@@ -302,7 +302,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
||||||
<ElFormItem label="优惠" label-width="85px">
|
<ElFormItem label="优惠" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.reduction_price"
|
v-model="item.reduction_price"
|
||||||
@@ -329,7 +329,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="手续费" label-width="85px">
|
<ElFormItem label="手续费" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.handling_fee"
|
v-model="item.handling_fee"
|
||||||
@@ -354,7 +354,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="改装费" label-width="85px">
|
<ElFormItem label="改装费" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.retrofit_fee"
|
v-model="item.retrofit_fee"
|
||||||
@@ -379,7 +379,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="FOB段运费" label-width="85px">
|
<ElFormItem label="FOB段运费" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.fob_transport_fee"
|
v-model="item.fob_transport_fee"
|
||||||
@@ -404,7 +404,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="港杂费" label-width="85px">
|
<ElFormItem label="港杂费" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.port_misc_fee"
|
v-model="item.port_misc_fee"
|
||||||
@@ -429,7 +429,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="海运费" label-width="85px">
|
<ElFormItem label="海运费" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.ocean_freight"
|
v-model="item.ocean_freight"
|
||||||
@@ -454,10 +454,10 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="佣金" label-width="85px">
|
<ElFormItem label="佣金" label-width="95px">
|
||||||
<ElInput v-model="item.commission" placeholder="请输入佣金">
|
<ElInput :disabled="item._echo_vin === true" v-model="item.commission" placeholder="请输入佣金">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.commission_currency" style="width: 64px">
|
<ElSelect :disabled="item._echo_vin === true" v-model="item.commission_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
:key="c.currency_code"
|
:key="c.currency_code"
|
||||||
@@ -471,10 +471,10 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="购置税" label-width="85px">
|
<ElFormItem label="购置税" label-width="95px">
|
||||||
<ElInput v-model="item.purchase_tax" placeholder="请输入购置税">
|
<ElInput :disabled="item._echo_vin === true" v-model="item.purchase_tax" placeholder="请输入购置税">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.purchase_tax_currency" style="width: 64px">
|
<ElSelect :disabled="item._echo_vin === true" v-model="item.purchase_tax_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
:key="c.currency_code"
|
:key="c.currency_code"
|
||||||
@@ -488,10 +488,10 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预估退税额" label-width="85px">
|
<ElFormItem label="预估退税额" label-width="95px">
|
||||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
<ElInput :disabled="item._echo_vin === true" v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||||
<template #suffix>
|
<!-- <template #suffix>
|
||||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
<ElSelect :disabled="item._echo_vin === true" v-model="item.tax_refund_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
:key="c.currency_code"
|
:key="c.currency_code"
|
||||||
@@ -499,6 +499,14 @@
|
|||||||
:value="c.currency_code"
|
:value="c.currency_code"
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
|
</template> -->
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</ElInput>
|
</ElInput>
|
||||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||||
@@ -507,7 +515,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="成交价" label-width="85px">
|
<ElFormItem label="成交价" label-width="95px" :prop="'items.' + idx + '.unit_price'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.unit_price"
|
v-model="item.unit_price"
|
||||||
@@ -532,7 +540,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="总价" label-width="85px">
|
<ElFormItem label="总价" label-width="95px">
|
||||||
<ElInput v-model="item.total_price" placeholder="请输入总价">
|
<ElInput v-model="item.total_price" placeholder="请输入总价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
||||||
@@ -549,7 +557,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol> -->
|
</ElCol> -->
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="利润" label-width="85px">
|
<ElFormItem label="利润" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.profit"
|
v-model="item.profit"
|
||||||
placeholder="正在计算利润"
|
placeholder="正在计算利润"
|
||||||
@@ -568,7 +576,25 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="车架号" label-width="85px">
|
<ElFormItem label="报关价" label-width="95px">
|
||||||
|
<ElInput
|
||||||
|
v-model="item.clearance_price"
|
||||||
|
placeholder="正在计算报关价"
|
||||||
|
:class="Number(item.clearance_price) < 0 ? 'profit-negative' : ''"
|
||||||
|
>
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</ElInput>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElCol>
|
||||||
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
|
<ElFormItem label="车架号" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
:disabled="item._echo_vin === true"
|
:disabled="item._echo_vin === true"
|
||||||
v-model="item.vin"
|
v-model="item.vin"
|
||||||
@@ -579,7 +605,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
||||||
<ElFormItem label="备注" label-width="85px">
|
<ElFormItem label="备注" label-width="95px">
|
||||||
<ElInput type="textarea" :rows="2" v-model="item.remark" placeholder="请输入备注" />
|
<ElInput type="textarea" :rows="2" v-model="item.remark" placeholder="请输入备注" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
@@ -628,15 +654,15 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">运输详情</span>
|
<span class="title">运输详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="foot-form">
|
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关人" label-width="98px">
|
<ElFormItem label="清关人" label-width="108px" prop="declarant_name" required>
|
||||||
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预计发送日" label-width="98px">
|
<ElFormItem label="预计发送日" label-width="108px" prop="eta_ship_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.eta_ship_date"
|
v-model="baseForm.eta_ship_date"
|
||||||
value-format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD"
|
||||||
@@ -648,7 +674,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="国内收货港" label-width="98px">
|
<ElFormItem label="国内收货港" label-width="108px" prop="domestic_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.domestic_port_id"
|
v-model="baseForm.domestic_port_id"
|
||||||
placeholder="请选择国内收货商"
|
placeholder="请选择国内收货商"
|
||||||
@@ -669,7 +695,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="运输方式" label-width="98px">
|
<ElFormItem label="运输方式" label-width="108px" prop="shipping_method_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.shipping_method_id"
|
v-model="baseForm.shipping_method_id"
|
||||||
placeholder="请选择运输方式"
|
placeholder="请选择运输方式"
|
||||||
@@ -690,7 +716,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="贸易条款" label-width="98px">
|
<ElFormItem label="贸易条款" label-width="108px" prop="trade_term_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.trade_term_id"
|
v-model="baseForm.trade_term_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -711,7 +737,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的港" label-width="98px">
|
<ElFormItem label="清关目的港" label-width="108px" prop="clearance_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.clearance_port_id"
|
v-model="baseForm.clearance_port_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -732,7 +758,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="最迟到港时间" label-width="98px">
|
<ElFormItem label="最迟到港时间" label-width="108px" prop="latest_arrival_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.latest_arrival_date"
|
v-model="baseForm.latest_arrival_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -892,10 +918,10 @@
|
|||||||
<div class="form-card">
|
<div class="form-card">
|
||||||
<!-- 底部信息 -->
|
<!-- 底部信息 -->
|
||||||
<div class="submit-wrap">
|
<div class="submit-wrap">
|
||||||
<ElButton type="primary" plain size="large" class="submit-btn" @click="handleSubmit1(0)"
|
<ElButton type="primary" plain size="large" class="submit-btn" @click="handleSubmitWithValidation(0)"
|
||||||
>保存</ElButton
|
>保存</ElButton
|
||||||
>
|
>
|
||||||
<ElButton type="primary" size="large" class="submit-btn" @click="handleSubmit1(1)"
|
<ElButton type="primary" size="large" class="submit-btn" @click="handleSubmitWithValidation(1)"
|
||||||
>提交</ElButton
|
>提交</ElButton
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@@ -1012,14 +1038,65 @@
|
|||||||
import { CrmService } from '@/api/crmApi'
|
import { CrmService } from '@/api/crmApi'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { useStockingForm } from '@/composables/useStockingForm'
|
import { useStockingForm } from '@/composables/useStockingForm'
|
||||||
import { onMounted } from 'vue'
|
import { onMounted, ref, computed } from 'vue'
|
||||||
defineOptions({ name: 'CrmStockingEdit' })
|
defineOptions({ name: 'CrmStockingEdit' })
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const stocking_id = route.query.id
|
const stocking_id = route.query.id
|
||||||
const { getUserInfo } = useUserStore()
|
const { getUserInfo } = useUserStore()
|
||||||
const handleSubmit1 = async (status: number) => {
|
// 表单引用
|
||||||
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
const baseFormRef = ref()
|
||||||
await handleSubmit(status, typeof id === 'string' ? id : undefined, '1')
|
const itemsFormRef = ref()
|
||||||
|
const transportFormRef = ref()
|
||||||
|
const paymentFormRefs = ref<any[]>([])
|
||||||
|
const setPaymentFormRef = (el: any, idx: number) => { if (el) paymentFormRefs.value[idx] = el }
|
||||||
|
// 表单模型
|
||||||
|
const formModel = computed(() => ({ items: items.value }))
|
||||||
|
// 基础表单校验
|
||||||
|
const baseFormRules = {
|
||||||
|
biz_date: [{ required: true, message: '请选择日期', trigger: 'change' }],
|
||||||
|
clearance_country_id: [{ required: true, message: '请选择清关目的国', trigger: 'change' }],
|
||||||
|
customer_id: [{ required: true, message: '请选择客户', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 明细动态校验
|
||||||
|
const itemRules = computed(() => {
|
||||||
|
const rules: any = {}
|
||||||
|
items.value.forEach((_, idx) => {
|
||||||
|
rules[`items.${idx}.sku_id`] = [{ required: true, message: '请选择车型', trigger: 'change' }]
|
||||||
|
rules[`items.${idx}.color_exterior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/外饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.color_interior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/内饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.official_price`] = [
|
||||||
|
{ required: true, message: '请输入官方指导价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.listing_price`] = [
|
||||||
|
{ required: true, message: '请输入二手挂牌价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.unit_price`] = [
|
||||||
|
{ required: true, message: '请输入成交价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
return rules
|
||||||
|
})
|
||||||
|
// 运输详情校验
|
||||||
|
const transportFormRules = {
|
||||||
|
declarant_name: [{ required: true, message: '请输入清关人', trigger: 'blur' }],
|
||||||
|
eta_ship_date: [{ required: true, message: '请选择预计发送日', trigger: 'change' }],
|
||||||
|
domestic_port_id: [{ required: true, message: '请选择国内收货港', trigger: 'change' }],
|
||||||
|
shipping_method_id: [{ required: true, message: '请选择运输方式', trigger: 'change' }],
|
||||||
|
trade_term_id: [{ required: true, message: '请选择贸易条款', trigger: 'change' }],
|
||||||
|
clearance_port_id: [{ required: true, message: '请选择清关目的港', trigger: 'change' }],
|
||||||
|
latest_arrival_date: [{ required: true, message: '请选择最迟到港时间', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 收款信息校验(编辑页多为回显,规则保留以备需要)
|
||||||
|
const paymentFormRules = {
|
||||||
|
remitter_name: [{ required: true, message: '请输入汇款人', trigger: 'blur' }],
|
||||||
|
remit_country_id: [{ required: true, message: '请选择汇款国', trigger: 'change' }],
|
||||||
|
remit_date: [{ required: true, message: '请选择汇款日期', trigger: 'change' }],
|
||||||
|
account_id: [{ required: true, message: '请选择账户', trigger: 'change' }],
|
||||||
|
amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
|
||||||
}
|
}
|
||||||
// 使用公共的备货单表单逻辑
|
// 使用公共的备货单表单逻辑
|
||||||
const {
|
const {
|
||||||
@@ -1087,6 +1164,23 @@
|
|||||||
chooseVehicle
|
chooseVehicle
|
||||||
} = useStockingForm(true, stocking_id as string) // isFinal = true, stocking_id
|
} = useStockingForm(true, stocking_id as string) // isFinal = true, stocking_id
|
||||||
|
|
||||||
|
// 提交前统一校验
|
||||||
|
const handleSubmitWithValidation = async (status: number) => {
|
||||||
|
try {
|
||||||
|
await baseFormRef.value?.validate()
|
||||||
|
await itemsFormRef.value?.validate()
|
||||||
|
await transportFormRef.value?.validate()
|
||||||
|
for (let i = 0; i < paymentItems.value.length; i++) {
|
||||||
|
const refForm = paymentFormRefs.value[i]
|
||||||
|
if (refForm) await refForm.validate()
|
||||||
|
}
|
||||||
|
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
||||||
|
await handleSubmit(status, typeof id === 'string' ? id : undefined, '1')
|
||||||
|
} catch (e) {
|
||||||
|
// 校验失败不提交
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 获取详情数据
|
// 获取详情数据
|
||||||
const getdetilfn = async () => {
|
const getdetilfn = async () => {
|
||||||
const res = await CrmService.getStockDetail({ id: stocking_id })
|
const res = await CrmService.getStockDetail({ id: stocking_id })
|
||||||
|
|||||||
@@ -9,15 +9,15 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">基础信息</span>
|
<span class="title">基础信息</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="base-form" label-position="right">
|
<ElForm :model="baseForm" :rules="baseFormRules" ref="baseFormRef" class="base-form" label-position="right">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
<ElFormItem label="阿里订单号/PI号" label-width="124px" prop="pi_no" required>
|
||||||
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" />
|
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="日期" label-width="114px">
|
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.biz_date"
|
v-model="baseForm.biz_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的国" label-width="114px">
|
<ElFormItem label="清关目的国" label-width="114px" prop="clearance_country_id" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="baseForm.clearance_country_id"
|
v-model="baseForm.clearance_country_id"
|
||||||
filterable
|
filterable
|
||||||
@@ -51,7 +51,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="客户名称" label-width="114px">
|
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="baseForm.customer_snapshot"
|
v-model="baseForm.customer_snapshot"
|
||||||
placeholder="请选择客户"
|
placeholder="请选择客户"
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="客户来源" label-width="114px">
|
<ElFormItem label="客户来源" label-width="124px">
|
||||||
<el-tooltip class="box-item" content="如需修改客户来源,请先编辑修改客户资料">
|
<el-tooltip class="box-item" content="如需修改客户来源,请先编辑修改客户资料">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="baseForm.customer_source_id"
|
v-model="baseForm.customer_source_id"
|
||||||
@@ -124,11 +124,11 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">订单详情</span>
|
<span class="title">订单详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm class="items-wrap" label-position="right">
|
<ElForm :model="formModel" :rules="itemRules" ref="itemsFormRef" class="items-wrap" label-position="right">
|
||||||
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
<div class="item-row form-box" v-for="(item, idx) in items" :key="idx">
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="车型" label-width="85px">
|
<ElFormItem label="车型" label-width="95px" :prop="'items.' + idx + '.sku_id'" required>
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.model_snapshot"
|
v-model="item.model_snapshot"
|
||||||
placeholder="请选择车型"
|
placeholder="请选择车型"
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/外饰" label-width="85px">
|
<ElFormItem label="颜色/外饰" label-width="95px" :prop="'items.' + idx + '.color_exterior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_exterior_snapshot"
|
v-model="item.color_exterior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -166,7 +166,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="颜色/内饰" label-width="85px">
|
<ElFormItem label="颜色/内饰" label-width="95px" :prop="'items.' + idx + '.color_interior_snapshot'" required>
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.color_interior_snapshot"
|
v-model="item.color_interior_snapshot"
|
||||||
filterable
|
filterable
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="改装" label-width="85px">
|
<ElFormItem label="改装" label-width="95px">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="item.modify_ids"
|
v-model="item.modify_ids"
|
||||||
filterable
|
filterable
|
||||||
@@ -212,17 +212,17 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="里程" label-width="85px">
|
<ElFormItem label="里程" label-width="95px">
|
||||||
<ElInput v-model="item.mileage" placeholder="请输入里程" />
|
<ElInput v-model="item.mileage" placeholder="请输入里程" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
||||||
<ElFormItem label="官方指导价" label-width="85px">
|
<ElFormItem label="官方指导价" label-width="95px" :prop="'items.' + idx + '.official_price'" required>
|
||||||
<ElInput v-model="item.official_price" placeholder="请输入官方指导价">
|
<ElInput v-model="item.official_price" placeholder="请输入官方指导价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.guide_price_currency" style="width: 64px;border: none;">
|
<ElSelect v-model="item.guide_price_currency" style="width: 64px; border: none">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
:key="c.currency_code"
|
:key="c.currency_code"
|
||||||
@@ -236,7 +236,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
||||||
<ElFormItem label="二手挂牌价" label-width="85px">
|
<ElFormItem label="二手挂牌价" label-width="95px" :prop="'items.' + idx + '.listing_price'" required>
|
||||||
<ElInput v-model="item.listing_price" placeholder="请输入二手挂牌价">
|
<ElInput v-model="item.listing_price" placeholder="请输入二手挂牌价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
||||||
@@ -253,7 +253,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-if="(item.mileage ?? 0) <= 0">
|
||||||
<ElFormItem label="优惠" label-width="85px">
|
<ElFormItem label="优惠" label-width="95px">
|
||||||
<ElInput v-model="item.discount_price" placeholder="请输入优惠额">
|
<ElInput v-model="item.discount_price" placeholder="请输入优惠额">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.discount_currency" style="width: 64px">
|
<ElSelect v-model="item.discount_currency" style="width: 64px">
|
||||||
@@ -270,7 +270,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
||||||
<ElFormItem label="优惠" label-width="85px">
|
<ElFormItem label="优惠" label-width="95px">
|
||||||
<ElInput v-model="item.reduction_price" placeholder="请输入优惠">
|
<ElInput v-model="item.reduction_price" placeholder="请输入优惠">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.reduction_price_currency" style="width: 64px">
|
<ElSelect v-model="item.reduction_price_currency" style="width: 64px">
|
||||||
@@ -289,7 +289,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="手续费" label-width="85px">
|
<ElFormItem label="手续费" label-width="95px">
|
||||||
<ElInput v-model="item.handling_fee" placeholder="请输入手续费">
|
<ElInput v-model="item.handling_fee" placeholder="请输入手续费">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.helper_fee_currency" style="width: 64px">
|
<ElSelect v-model="item.helper_fee_currency" style="width: 64px">
|
||||||
@@ -306,7 +306,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="改装费" label-width="85px">
|
<ElFormItem label="改装费" label-width="95px">
|
||||||
<ElInput v-model="item.retrofit_fee" placeholder="请输入改装费">
|
<ElInput v-model="item.retrofit_fee" placeholder="请输入改装费">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.modify_fee_currency" style="width: 64px">
|
<ElSelect v-model="item.modify_fee_currency" style="width: 64px">
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="FOB段运费" label-width="85px">
|
<ElFormItem label="FOB段运费" label-width="95px">
|
||||||
<ElInput v-model="item.fob_transport_fee" placeholder="请输入FOB段运费">
|
<ElInput v-model="item.fob_transport_fee" placeholder="请输入FOB段运费">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.fob_fee_currency" style="width: 64px">
|
<ElSelect v-model="item.fob_fee_currency" style="width: 64px">
|
||||||
@@ -340,7 +340,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="港杂费" label-width="85px">
|
<ElFormItem label="港杂费" label-width="95px">
|
||||||
<ElInput v-model="item.port_misc_fee" placeholder="请输入港杂费">
|
<ElInput v-model="item.port_misc_fee" placeholder="请输入港杂费">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.port_fee_currency" style="width: 64px">
|
<ElSelect v-model="item.port_fee_currency" style="width: 64px">
|
||||||
@@ -357,7 +357,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="海运费" label-width="85px">
|
<ElFormItem label="海运费" label-width="95px">
|
||||||
<ElInput v-model="item.ocean_freight" placeholder="请输入海运费">
|
<ElInput v-model="item.ocean_freight" placeholder="请输入海运费">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.ocean_freight_currency" style="width: 64px">
|
<ElSelect v-model="item.ocean_freight_currency" style="width: 64px">
|
||||||
@@ -374,7 +374,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="佣金" label-width="85px">
|
<ElFormItem label="佣金" label-width="95px">
|
||||||
<ElInput v-model="item.commission" placeholder="请输入佣金">
|
<ElInput v-model="item.commission" placeholder="请输入佣金">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.commission_currency" style="width: 64px">
|
<ElSelect v-model="item.commission_currency" style="width: 64px">
|
||||||
@@ -391,7 +391,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="购置税" label-width="85px">
|
<ElFormItem label="购置税" label-width="95px">
|
||||||
<ElInput v-model="item.purchase_tax" placeholder="请输入购置税">
|
<ElInput v-model="item.purchase_tax" placeholder="请输入购置税">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.purchase_tax_currency" style="width: 64px">
|
<ElSelect v-model="item.purchase_tax_currency" style="width: 64px">
|
||||||
@@ -408,9 +408,9 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预估退税额" label-width="85px">
|
<ElFormItem label="预估退税额" label-width="95px">
|
||||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||||
<template #suffix>
|
<!-- <template #suffix>
|
||||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
@@ -419,6 +419,14 @@
|
|||||||
:value="c.currency_code"
|
:value="c.currency_code"
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
|
</template> -->
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</ElInput>
|
</ElInput>
|
||||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||||
@@ -427,7 +435,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="成交价" label-width="85px">
|
<ElFormItem label="成交价" label-width="95px" :prop="'items.' + idx + '.unit_price'" required>
|
||||||
<ElInput v-model="item.unit_price" placeholder="请输入成交价">
|
<ElInput v-model="item.unit_price" placeholder="请输入成交价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
||||||
@@ -444,7 +452,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="总价" label-width="85px">
|
<ElFormItem label="总价" label-width="95px">
|
||||||
<ElInput v-model="item.total_price" placeholder="请输入总价">
|
<ElInput v-model="item.total_price" placeholder="请输入总价">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
||||||
@@ -461,7 +469,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol> -->
|
</ElCol> -->
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="利润" label-width="85px">
|
<ElFormItem label="利润" label-width="95px">
|
||||||
<ElInput
|
<ElInput
|
||||||
v-model="item.profit"
|
v-model="item.profit"
|
||||||
placeholder="正在计算利润"
|
placeholder="正在计算利润"
|
||||||
@@ -471,7 +479,27 @@
|
|||||||
<template #suffix>
|
<template #suffix>
|
||||||
<span style="font-size: 11px">
|
<span style="font-size: 11px">
|
||||||
{{
|
{{
|
||||||
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)
|
||||||
|
?.currency_name) ||
|
||||||
|
baseForm.settlement_currency
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</ElInput>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElCol>
|
||||||
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
|
<ElFormItem label="报关价" label-width="95px">
|
||||||
|
<ElInput
|
||||||
|
v-model="item.clearance_price"
|
||||||
|
placeholder="正在计算报关价"
|
||||||
|
:class="Number(item.clearance_price) < 0 ? 'profit-negative' : ''"
|
||||||
|
>
|
||||||
|
<template #suffix>
|
||||||
|
<span style="font-size: 11px">
|
||||||
|
{{
|
||||||
|
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)
|
||||||
|
?.currency_name) ||
|
||||||
baseForm.settlement_currency
|
baseForm.settlement_currency
|
||||||
}}
|
}}
|
||||||
</span>
|
</span>
|
||||||
@@ -482,7 +510,7 @@
|
|||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow :gutter="12" class="item-row-wrap">
|
<ElRow :gutter="12" class="item-row-wrap">
|
||||||
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
||||||
<ElFormItem label="备注" label-width="85px">
|
<ElFormItem label="备注" label-width="95px">
|
||||||
<ElInput type="textarea" :rows="2" v-model="item.remark" placeholder="请输入备注" />
|
<ElInput type="textarea" :rows="2" v-model="item.remark" placeholder="请输入备注" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
@@ -532,13 +560,12 @@
|
|||||||
<ElFormItem label="合同汇率" label-width="105px">
|
<ElFormItem label="合同汇率" label-width="105px">
|
||||||
<ElInput v-model="baseForm.contract_exchange_rate" placeholder="请输入">
|
<ElInput v-model="baseForm.contract_exchange_rate" placeholder="请输入">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect v-model="baseForm.settlement_currency" style="width: 64px">
|
<ElSelect v-model="baseForm.settlement_currency" style="width: 64px">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="c in currencyOptions"
|
v-for="c in currencyOptions"
|
||||||
:key="c.currency_code"
|
:key="c.currency_code"
|
||||||
:label="c.currency_name"
|
:label="c.currency_name"
|
||||||
:value="c.currency_code"
|
:value="c.currency_code"
|
||||||
@change="(val) =>(baseForm.contract_exchange_rate =(currencyOptions || []).find((x: any) => x.currency_code === val)?.exchange_rate || '') "
|
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
</template>
|
</template>
|
||||||
@@ -553,15 +580,15 @@
|
|||||||
<span class="border"></span>
|
<span class="border"></span>
|
||||||
<span class="title">运输详情</span>
|
<span class="title">运输详情</span>
|
||||||
</div>
|
</div>
|
||||||
<ElForm :model="baseForm" class="foot-form">
|
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关人" label-width="98px">
|
<ElFormItem label="清关人" label-width="108px" prop="declarant_name" required>
|
||||||
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
<ElInput v-model="baseForm.declarant_name" placeholder="请输入清关人" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="预计发送日" label-width="98px">
|
<ElFormItem label="预计发送日" label-width="108px" prop="eta_ship_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.eta_ship_date"
|
v-model="baseForm.eta_ship_date"
|
||||||
value-format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD"
|
||||||
@@ -573,7 +600,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="国内收货港" label-width="98px">
|
<ElFormItem label="国内收货港" label-width="108px" prop="domestic_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.domestic_port_id"
|
v-model="baseForm.domestic_port_id"
|
||||||
placeholder="请选择国内收货商"
|
placeholder="请选择国内收货商"
|
||||||
@@ -594,7 +621,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="运输方式" label-width="98px">
|
<ElFormItem label="运输方式" label-width="108px" prop="shipping_method_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.shipping_method_id"
|
v-model="baseForm.shipping_method_id"
|
||||||
placeholder="请选择运输方式"
|
placeholder="请选择运输方式"
|
||||||
@@ -615,7 +642,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="贸易条款" label-width="98px">
|
<ElFormItem label="贸易条款" label-width="108px" prop="trade_term_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.trade_term_id"
|
v-model="baseForm.trade_term_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -636,7 +663,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="清关目的港" label-width="98px">
|
<ElFormItem label="清关目的港" label-width="108px" prop="clearance_port_id" required>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
v-model="baseForm.clearance_port_id"
|
v-model="baseForm.clearance_port_id"
|
||||||
placeholder="请选择"
|
placeholder="请选择"
|
||||||
@@ -657,7 +684,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||||
<ElFormItem label="最迟到港时间" label-width="98px">
|
<ElFormItem label="最迟到港时间" label-width="108px" prop="latest_arrival_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="baseForm.latest_arrival_date"
|
v-model="baseForm.latest_arrival_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -679,15 +706,15 @@
|
|||||||
<div class="payment-section">
|
<div class="payment-section">
|
||||||
<div class="payment-items">
|
<div class="payment-items">
|
||||||
<div v-for="(payment, idx) in paymentItems" :key="idx" class="payment-item">
|
<div v-for="(payment, idx) in paymentItems" :key="idx" class="payment-item">
|
||||||
<ElForm :model="payment" label-width="55px" class="payment-form">
|
<ElForm :model="payment" :rules="paymentFormRules" :ref="(el) => setPaymentFormRef(el, idx)" label-width="65px" class="payment-form">
|
||||||
<ElRow :gutter="12">
|
<ElRow :gutter="12">
|
||||||
<ElCol :span="4">
|
<ElCol :span="4">
|
||||||
<ElFormItem label="汇款人">
|
<ElFormItem label="汇款人" prop="remitter_name" required>
|
||||||
<ElInput v-model="payment.remitter_name" placeholder="请选择汇款人" />
|
<ElInput v-model="payment.remitter_name" placeholder="请选择汇款人" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||||
<ElFormItem label="汇款国">
|
<ElFormItem label="汇款国" prop="remit_country_id" required>
|
||||||
<el-select v-model="payment.remit_country_id" filterable placeholder="请选择汇款国" @change="
|
<el-select v-model="payment.remit_country_id" filterable placeholder="请选择汇款国" @change="
|
||||||
(val) =>
|
(val) =>
|
||||||
(payment.remit_country_name_snapshot =
|
(payment.remit_country_name_snapshot =
|
||||||
@@ -704,7 +731,7 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="4" :xl="4">
|
<ElCol :sm="12" :md="12" :lg="4" :xl="4">
|
||||||
<ElFormItem label="日期">
|
<ElFormItem label="日期" prop="remit_date" required>
|
||||||
<ElDatePicker
|
<ElDatePicker
|
||||||
v-model="payment.remit_date"
|
v-model="payment.remit_date"
|
||||||
type="date"
|
type="date"
|
||||||
@@ -716,11 +743,11 @@
|
|||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
||||||
<ElFormItem label="账户">
|
<ElFormItem label="账户" prop="account_id" required>
|
||||||
<ElSelect v-model="payment.account_name_snapshot" placeholder="请选择账户" @change="
|
<ElSelect v-model="payment.account_id" placeholder="请选择账户" @change="
|
||||||
(val) =>
|
(val) =>
|
||||||
(payment.account_id =
|
(payment.account_name_snapshot =
|
||||||
(accountOptions || []).find((x: any) => x.short_desc === val)?.id || '')
|
(accountOptions || []).find((x: any) => x.id === val)?.short_desc || '')
|
||||||
">
|
">
|
||||||
<ElOption
|
<ElOption
|
||||||
v-for="item in accountOptions"
|
v-for="item in accountOptions"
|
||||||
@@ -729,11 +756,11 @@
|
|||||||
:value="item.id"
|
:value="item.id"
|
||||||
/>
|
/>
|
||||||
</ElSelect>
|
</ElSelect>
|
||||||
<ElInput v-model="payment.account_id" type="hidden" />
|
<ElInput v-model="payment.account_name_snapshot" type="hidden" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
</ElCol>
|
</ElCol>
|
||||||
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
||||||
<ElFormItem label="金额">
|
<ElFormItem label="金额" prop="amount" required>
|
||||||
<ElInput v-model="payment.amount" placeholder="请输入金额">
|
<ElInput v-model="payment.amount" placeholder="请输入金额">
|
||||||
<template #suffix>
|
<template #suffix>
|
||||||
<ElSelect
|
<ElSelect
|
||||||
@@ -741,7 +768,9 @@
|
|||||||
style="width: 64px"
|
style="width: 64px"
|
||||||
@change="
|
@change="
|
||||||
(val) => {
|
(val) => {
|
||||||
const found = (currencyOptions || []).find((x: any) => x.currency_code === val)
|
const found = (currencyOptions || []).find(
|
||||||
|
(x: any) => x.currency_code === val
|
||||||
|
)
|
||||||
payment.currency_name_snapshot = found?.currency_name || ''
|
payment.currency_name_snapshot = found?.currency_name || ''
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
@@ -809,14 +838,14 @@
|
|||||||
plain
|
plain
|
||||||
size="large"
|
size="large"
|
||||||
class="submit-btn"
|
class="submit-btn"
|
||||||
@click="handleSubmit1(0)"
|
@click="handleSubmitWithValidation(0)"
|
||||||
>保存</ElButton
|
>保存</ElButton
|
||||||
>
|
>
|
||||||
<ElButton
|
<ElButton
|
||||||
type="primary"
|
type="primary"
|
||||||
size="large"
|
size="large"
|
||||||
class="submit-btn"
|
class="submit-btn"
|
||||||
@click="handleSubmit1(1)"
|
@click="handleSubmitWithValidation(1)"
|
||||||
>提交</ElButton
|
>提交</ElButton
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
@@ -933,14 +962,84 @@
|
|||||||
import { CrmService } from '@/api/crmApi'
|
import { CrmService } from '@/api/crmApi'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import { useStockingForm } from '@/composables/useStockingForm'
|
import { useStockingForm } from '@/composables/useStockingForm'
|
||||||
import { onMounted } from 'vue'
|
import { onMounted, ref, computed } from 'vue'
|
||||||
defineOptions({ name: 'CrmStockingEdit' })
|
defineOptions({ name: 'CrmStockingEdit' })
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const stocking_id = route.query.id
|
const stocking_id = route.query.id
|
||||||
const { getUserInfo } = useUserStore()
|
const { getUserInfo } = useUserStore()
|
||||||
const handleSubmit1 = async (status: number) => {
|
// 表单引用
|
||||||
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
const baseFormRef = ref()
|
||||||
await handleSubmit(status, typeof id === 'string' ? id : undefined)
|
const itemsFormRef = ref()
|
||||||
|
const transportFormRef = ref()
|
||||||
|
const paymentFormRefs = ref<any[]>([])
|
||||||
|
const setPaymentFormRef = (el: any, idx: number) => {
|
||||||
|
if (el) paymentFormRefs.value[idx] = el
|
||||||
|
}
|
||||||
|
// 表单模型(用于明细动态校验)
|
||||||
|
const formModel = computed(() => ({ items: items.value }))
|
||||||
|
// 基础表单校验
|
||||||
|
const baseFormRules = {
|
||||||
|
pi_no: [{ required: true, message: '请输入阿里订单号/PI号', trigger: 'blur' }],
|
||||||
|
biz_date: [{ required: true, message: '请选择日期', trigger: 'change' }],
|
||||||
|
clearance_country_id: [{ required: true, message: '请选择清关目的国', trigger: 'change' }],
|
||||||
|
customer_id: [{ required: true, message: '请选择客户', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 明细动态校验
|
||||||
|
const itemRules = computed(() => {
|
||||||
|
const rules: any = {}
|
||||||
|
items.value.forEach((_, idx) => {
|
||||||
|
rules[`items.${idx}.sku_id`] = [{ required: true, message: '请选择车型', trigger: 'change' }]
|
||||||
|
rules[`items.${idx}.color_exterior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/外饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.color_interior_snapshot`] = [
|
||||||
|
{ required: true, message: '请选择颜色/内饰', trigger: 'change' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.official_price`] = [
|
||||||
|
{ required: true, message: '请输入官方指导价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.listing_price`] = [
|
||||||
|
{ required: true, message: '请输入二手挂牌价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
rules[`items.${idx}.unit_price`] = [
|
||||||
|
{ required: true, message: '请输入成交价', trigger: 'blur' }
|
||||||
|
]
|
||||||
|
})
|
||||||
|
return rules
|
||||||
|
})
|
||||||
|
// 运输详情校验
|
||||||
|
const transportFormRules = {
|
||||||
|
declarant_name: [{ required: true, message: '请输入清关人', trigger: 'blur' }],
|
||||||
|
eta_ship_date: [{ required: true, message: '请选择预计发送日', trigger: 'change' }],
|
||||||
|
domestic_port_id: [{ required: true, message: '请选择国内收货港', trigger: 'change' }],
|
||||||
|
shipping_method_id: [{ required: true, message: '请选择运输方式', trigger: 'change' }],
|
||||||
|
trade_term_id: [{ required: true, message: '请选择贸易条款', trigger: 'change' }],
|
||||||
|
clearance_port_id: [{ required: true, message: '请选择清关目的港', trigger: 'change' }],
|
||||||
|
latest_arrival_date: [{ required: true, message: '请选择最迟到港时间', trigger: 'change' }]
|
||||||
|
}
|
||||||
|
// 收款信息校验
|
||||||
|
const paymentFormRules = {
|
||||||
|
remitter_name: [{ required: true, message: '请输入汇款人', trigger: 'blur' }],
|
||||||
|
remit_country_id: [{ required: true, message: '请选择汇款国', trigger: 'change' }],
|
||||||
|
remit_date: [{ required: true, message: '请选择汇款日期', trigger: 'change' }],
|
||||||
|
account_id: [{ required: true, message: '请选择账户', trigger: 'change' }],
|
||||||
|
amount: [{ required: true, message: '请输入金额', trigger: 'blur' }]
|
||||||
|
}
|
||||||
|
// 带校验的提交
|
||||||
|
const handleSubmitWithValidation = async (status: number) => {
|
||||||
|
try {
|
||||||
|
await baseFormRef.value?.validate()
|
||||||
|
await itemsFormRef.value?.validate()
|
||||||
|
await transportFormRef.value?.validate()
|
||||||
|
for (let i = 0; i < paymentItems.value.length; i++) {
|
||||||
|
const refForm = paymentFormRefs.value[i]
|
||||||
|
if (refForm) await refForm.validate()
|
||||||
|
}
|
||||||
|
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
||||||
|
await handleSubmit(status, typeof id === 'string' ? id : undefined)
|
||||||
|
} catch (e) {
|
||||||
|
// 校验失败不提交
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 使用公共的备货单表单逻辑
|
// 使用公共的备货单表单逻辑
|
||||||
const {
|
const {
|
||||||
|
|||||||
@@ -29,6 +29,14 @@
|
|||||||
<span class="info-label">国 家:</span>
|
<span class="info-label">国 家:</span>
|
||||||
<span class="info-value">{{ userInfo.country_txt }}</span>
|
<span class="info-value">{{ userInfo.country_txt }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info-row">
|
||||||
|
<span class="info-label">上 级:</span>
|
||||||
|
<span class="info-value">{{ userInfo.report_to_info?.name || '' }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-row">
|
||||||
|
<span class="info-label">内 勤:</span>
|
||||||
|
<span class="info-value">{{ userInfo.office_clerk_info?.name || '' }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -111,48 +119,6 @@
|
|||||||
<ElFormItem label="邮箱" prop="email">
|
<ElFormItem label="邮箱" prop="email">
|
||||||
<ElInput v-model="form.email" :disabled="!isEdit" />
|
<ElInput v-model="form.email" :disabled="!isEdit" />
|
||||||
</ElFormItem>
|
</ElFormItem>
|
||||||
<ElFormItem label="签名" prop="signature" class="right-input">
|
|
||||||
<template v-if="form.sign_img">
|
|
||||||
<img :src="sign_img_url" class="signature-img" />
|
|
||||||
<el-button
|
|
||||||
v-if="isEdit"
|
|
||||||
style="margin-left: 12px"
|
|
||||||
@click="showReSignQR = !showReSignQR"
|
|
||||||
>
|
|
||||||
重新签名
|
|
||||||
</el-button>
|
|
||||||
<div
|
|
||||||
v-if="isEdit && showReSignQR"
|
|
||||||
class="signature-qrcode"
|
|
||||||
style="margin-top: 20px; margin-left: 20px"
|
|
||||||
>
|
|
||||||
<qrcode-vue
|
|
||||||
:value="qrcodeUrl"
|
|
||||||
:size="200"
|
|
||||||
level="M"
|
|
||||||
render-as="svg"
|
|
||||||
:include-margin="true"
|
|
||||||
background="#ffffff"
|
|
||||||
foreground="#000000"
|
|
||||||
/>
|
|
||||||
<div class="qrcode-tip">手机扫码重新签名</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<template v-else>
|
|
||||||
<div class="signature-qrcode">
|
|
||||||
<qrcode-vue
|
|
||||||
:value="qrcodeUrl"
|
|
||||||
:size="200"
|
|
||||||
level="M"
|
|
||||||
render-as="svg"
|
|
||||||
:include-margin="true"
|
|
||||||
background="#ffffff"
|
|
||||||
foreground="#000000"
|
|
||||||
/>
|
|
||||||
<div class="qrcode-tip">手机扫码进行签名</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
</ElFormItem>
|
|
||||||
</ElRow>
|
</ElRow>
|
||||||
<ElRow>
|
<ElRow>
|
||||||
<ElFormItem
|
<ElFormItem
|
||||||
@@ -203,8 +169,100 @@
|
|||||||
</div>
|
</div>
|
||||||
</ElForm>
|
</ElForm>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info box-style">
|
||||||
|
<h1 class="title"><span class="border" style="margin-right: 5px"></span>绑定信息</h1>
|
||||||
|
<ElForm
|
||||||
|
:model="formbd"
|
||||||
|
class="form"
|
||||||
|
ref="ruleFormbdRef"
|
||||||
|
:rules="rulesbd"
|
||||||
|
label-width="86px"
|
||||||
|
label-position="left"
|
||||||
|
>
|
||||||
|
<ElRow>
|
||||||
|
<ElFormItem label="直属上级" prop="report_to" required>
|
||||||
|
<ElSelect
|
||||||
|
v-model="formbd.report_to"
|
||||||
|
placeholder="请选择直属上级"
|
||||||
|
:disabled="!isEditbd"
|
||||||
|
>
|
||||||
|
<ElOption
|
||||||
|
v-for="item in userOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</ElSelect>
|
||||||
|
</ElFormItem>
|
||||||
|
<ElFormItem label="所属内勤" prop="office_clerk_id" class="right-input" required>
|
||||||
|
<ElSelect
|
||||||
|
v-model="formbd.office_clerk_id"
|
||||||
|
placeholder="请选择所属内勤"
|
||||||
|
:disabled="!isEditbd"
|
||||||
|
>
|
||||||
|
<ElOption
|
||||||
|
v-for="item in usernqOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</ElSelect>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElRow>
|
||||||
|
|
||||||
<div class="info box-style" style="margin-top: 20px">
|
<ElRow>
|
||||||
|
<ElFormItem label="签名" prop="signature" class="right-input">
|
||||||
|
<template v-if="formbd.sign_img">
|
||||||
|
<img :src="sign_img_url" class="signature-img" />
|
||||||
|
<el-button
|
||||||
|
v-if="isEditbd"
|
||||||
|
style="margin-left: 12px"
|
||||||
|
@click="showReSignQR = !showReSignQR"
|
||||||
|
>
|
||||||
|
重新签名
|
||||||
|
</el-button>
|
||||||
|
<div
|
||||||
|
v-if="isEditbd && showReSignQR"
|
||||||
|
class="signature-qrcode"
|
||||||
|
style="margin-top: 20px; margin-left: 20px"
|
||||||
|
>
|
||||||
|
<qrcode-vue
|
||||||
|
:value="qrcodeUrl"
|
||||||
|
:size="200"
|
||||||
|
level="M"
|
||||||
|
render-as="svg"
|
||||||
|
:include-margin="true"
|
||||||
|
background="#ffffff"
|
||||||
|
foreground="#000000"
|
||||||
|
/>
|
||||||
|
<div class="qrcode-tip">手机扫码重新签名</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<template v-else>
|
||||||
|
<div class="signature-qrcode">
|
||||||
|
<qrcode-vue
|
||||||
|
:value="qrcodeUrl"
|
||||||
|
:size="200"
|
||||||
|
level="M"
|
||||||
|
render-as="svg"
|
||||||
|
:include-margin="true"
|
||||||
|
background="#ffffff"
|
||||||
|
foreground="#000000"
|
||||||
|
/>
|
||||||
|
<div class="qrcode-tip">手机扫码进行签名</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</ElFormItem>
|
||||||
|
</ElRow>
|
||||||
|
<div class="el-form-item-right">
|
||||||
|
<ElButton type="primary" style="width: 90px" v-ripple @click="editbd(ruleFormbdRef)">
|
||||||
|
<i v-if="!isEditbd" class="iconfont-sys"> </i>
|
||||||
|
{{ isEditbd ? '保存' : '编辑' }}
|
||||||
|
</ElButton>
|
||||||
|
</div>
|
||||||
|
</ElForm>
|
||||||
|
</div>
|
||||||
|
<div class="info box-style">
|
||||||
<h1 class="title">更改密码</h1>
|
<h1 class="title">更改密码</h1>
|
||||||
|
|
||||||
<ElForm :model="pwdForm" class="form" label-width="86px" label-position="left">
|
<ElForm :model="pwdForm" class="form" label-width="86px" label-position="left">
|
||||||
@@ -249,9 +307,10 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ElForm, FormInstance } from 'element-plus'
|
import { ElForm, FormInstance, FormRules } from 'element-plus'
|
||||||
import imageUrl from '@/assets/img/crm/upimg.png'
|
import imageUrl from '@/assets/img/crm/upimg.png'
|
||||||
import { CrmService } from '@/api/crmApi'
|
import { CrmService } from '@/api/crmApi'
|
||||||
|
import { commonService } from '@/api/commonApi'
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
import QrcodeVue from 'qrcode.vue'
|
import QrcodeVue from 'qrcode.vue'
|
||||||
import { useUploadHeaders } from '@/composables/useUploadHeaders'
|
import { useUploadHeaders } from '@/composables/useUploadHeaders'
|
||||||
@@ -268,6 +327,7 @@
|
|||||||
const sign_img_url = ref('')
|
const sign_img_url = ref('')
|
||||||
const countryOptions = ref<any>()
|
const countryOptions = ref<any>()
|
||||||
const form = ref<CustomerInfo>({})
|
const form = ref<CustomerInfo>({})
|
||||||
|
const formbd = ref<CustomerInfo>({})
|
||||||
//获取公司 getCompanyList
|
//获取公司 getCompanyList
|
||||||
// const companyList = ref<any>()
|
// const companyList = ref<any>()
|
||||||
//国家
|
//国家
|
||||||
@@ -280,17 +340,30 @@
|
|||||||
countryOptions.value = []
|
countryOptions.value = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//用户下拉
|
||||||
|
const userOptions = ref<any>()
|
||||||
|
const usernqOptions = ref<any>()
|
||||||
|
const getuserOptions = async () => {
|
||||||
|
const res = await commonService.getUserSelect()
|
||||||
|
const resparams = await commonService.getUserSelectparams({ role_id: '5' })
|
||||||
|
userOptions.value = res
|
||||||
|
usernqOptions.value = resparams
|
||||||
|
}
|
||||||
const userInfo = ref<CustomerInfo>({})
|
const userInfo = ref<CustomerInfo>({})
|
||||||
const getuserInfo = async () => {
|
const getuserInfo = async () => {
|
||||||
const data = await CrmService.userget()
|
const data = await CrmService.userget()
|
||||||
userInfo.value = data
|
userInfo.value = data
|
||||||
form.value = data
|
form.value = data
|
||||||
|
formbd.value = data
|
||||||
|
formbd.value.office_clerk_id = data.office_clerk_info?.id || ''
|
||||||
|
formbd.value.report_to = data.report_to_info?.id || ''
|
||||||
imageUrlavatar.value = data.avatar_full
|
imageUrlavatar.value = data.avatar_full
|
||||||
socialize_pic_full.value = data.socialize_pic_full
|
socialize_pic_full.value = data.socialize_pic_full
|
||||||
sign_img_url.value = data.sign_img_url
|
sign_img_url.value = data.sign_img_url
|
||||||
}
|
}
|
||||||
|
|
||||||
const isEdit = ref(false)
|
const isEdit = ref(false)
|
||||||
|
const isEditbd = ref(false)
|
||||||
const showReSignQR = ref(false)
|
const showReSignQR = ref(false)
|
||||||
const isEditPwd = ref(false)
|
const isEditPwd = ref(false)
|
||||||
const pwdForm = reactive({
|
const pwdForm = reactive({
|
||||||
@@ -315,22 +388,27 @@
|
|||||||
// address: [{ required: true, message: '请输入地址', trigger: 'blur' }],
|
// address: [{ required: true, message: '请输入地址', trigger: 'blur' }],
|
||||||
// sex: [{ type: 'array', required: true, message: '请选择性别', trigger: 'blur' }]
|
// sex: [{ type: 'array', required: true, message: '请选择性别', trigger: 'blur' }]
|
||||||
// })
|
// })
|
||||||
|
const ruleFormbdRef = ref<FormInstance>()
|
||||||
|
const rulesbd = reactive<FormRules>({
|
||||||
|
report_to: [{ required: true, message: '请选择直属上级', trigger: 'blur' }],
|
||||||
|
office_clerk_id: [{ required: true, message: '请选择所属内勤', trigger: 'blur' }]
|
||||||
|
})
|
||||||
const options = [
|
const options = [
|
||||||
{
|
{
|
||||||
value: '',
|
value: '',
|
||||||
label: '未知'
|
label: '未知'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: '1',
|
value: 1,
|
||||||
label: '男'
|
label: '男'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: '2',
|
value: 2,
|
||||||
label: '女'
|
label: '女'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
|
await getuserOptions()
|
||||||
await getarea()
|
await getarea()
|
||||||
await getuserInfo()
|
await getuserInfo()
|
||||||
})
|
})
|
||||||
@@ -343,7 +421,21 @@
|
|||||||
getuserInfo()
|
getuserInfo()
|
||||||
}
|
}
|
||||||
isEdit.value = !isEdit.value
|
isEdit.value = !isEdit.value
|
||||||
if (!isEdit.value) {
|
}
|
||||||
|
const editbd = async (formEl: FormInstance | undefined) => {
|
||||||
|
if (isEditbd.value) {
|
||||||
|
if (formbd.value.report_to == '' || formbd.value.office_clerk_id == '') {
|
||||||
|
ElMessage.error('直属上级或所属内勤不能为空')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const payload: any = { ...(formbd.value as any) }
|
||||||
|
delete payload.sign_img_url
|
||||||
|
const res = await CrmService.crmuseredit(payload)
|
||||||
|
ElMessage.success(res?.message || '操作成功')
|
||||||
|
getuserInfo()
|
||||||
|
}
|
||||||
|
isEditbd.value = !isEditbd.value
|
||||||
|
if (!isEditbd.value) {
|
||||||
showReSignQR.value = false
|
showReSignQR.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -434,6 +526,7 @@
|
|||||||
|
|
||||||
.box-style {
|
.box-style {
|
||||||
border: 1px solid var(--art-border-color);
|
border: 1px solid var(--art-border-color);
|
||||||
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
|
|||||||
Reference in New Issue
Block a user