判断是否有签名换到长链接推送 然后添加 报关价 预估退税计算
This commit is contained in:
@@ -62,7 +62,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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-select
|
||||
v-model="baseForm.customer_source_id"
|
||||
@@ -388,7 +388,7 @@
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="预估退税额" label-width="85px">
|
||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||
<template #suffix>
|
||||
<!-- <template #suffix>
|
||||
<ElSelect v-model="item.tax_refund_currency" style="width: 74px">
|
||||
<ElOption
|
||||
v-for="c in currencyOptions"
|
||||
@@ -397,6 +397,14 @@
|
||||
:value="c.currency_code"
|
||||
/>
|
||||
</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>
|
||||
</ElInput>
|
||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||
@@ -457,6 +465,24 @@
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
</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 :gutter="12" class="item-row-wrap">
|
||||
<ElCol :sm="24" :md="24" :lg="24" :xl="24">
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">基础信息</span>
|
||||
</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">
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
||||
@@ -17,7 +17,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="日期" label-width="114px">
|
||||
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||
<ElDatePicker
|
||||
v-model="baseForm.biz_date"
|
||||
type="date"
|
||||
@@ -29,7 +29,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_country_id"
|
||||
filterable
|
||||
@@ -51,7 +51,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="客户名称" label-width="114px">
|
||||
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||
<ElInput
|
||||
v-model="baseForm.customer_snapshot"
|
||||
placeholder="请选择客户"
|
||||
@@ -124,11 +124,11 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">订单详情</span>
|
||||
</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">
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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
|
||||
v-model="item.model_snapshot"
|
||||
placeholder="请选择车型"
|
||||
@@ -144,7 +144,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_exterior_snapshot"
|
||||
filterable
|
||||
@@ -167,7 +167,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_interior_snapshot"
|
||||
filterable
|
||||
@@ -220,7 +220,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入官方指导价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.guide_price_currency" style="width: 64px;border: none;">
|
||||
@@ -237,7 +237,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入二手挂牌价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
||||
@@ -411,7 +411,7 @@
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="预估退税额" label-width="85px">
|
||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||
<template #suffix>
|
||||
<!-- <template #suffix>
|
||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
||||
<ElOption
|
||||
v-for="c in currencyOptions"
|
||||
@@ -420,6 +420,14 @@
|
||||
:value="c.currency_code"
|
||||
/>
|
||||
</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>
|
||||
</ElInput>
|
||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||
@@ -428,7 +436,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入成交价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
||||
@@ -480,6 +488,24 @@
|
||||
</ElInput>
|
||||
</ElFormItem>
|
||||
</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">
|
||||
<ElFormItem label="车架号" label-width="85px">
|
||||
<ElInput v-model="item.vin" placeholder="请输入车架号"></ElInput>
|
||||
@@ -537,15 +563,15 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">运输详情</span>
|
||||
</div>
|
||||
<ElForm :model="baseForm" class="foot-form">
|
||||
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||
<ElRow :gutter="12">
|
||||
<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="请输入清关人" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.collect_all_date"
|
||||
value-format="YYYY-MM-DD"
|
||||
@@ -557,7 +583,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.domestic_port_id"
|
||||
placeholder="请选择国内收货商"
|
||||
@@ -578,7 +604,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.shipping_method_id"
|
||||
placeholder="请选择运输方式"
|
||||
@@ -600,7 +626,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.trade_term_id"
|
||||
placeholder="请选择"
|
||||
@@ -621,7 +647,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_port_id"
|
||||
placeholder="请选择"
|
||||
@@ -642,7 +668,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.pick_up_date"
|
||||
type="date"
|
||||
@@ -664,7 +690,7 @@
|
||||
<div class="payment-section">
|
||||
<div class="payment-items">
|
||||
<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">
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="汇款人" label-width="55px">
|
||||
@@ -807,14 +833,14 @@
|
||||
plain
|
||||
size="large"
|
||||
class="submit-btn"
|
||||
@click="handleSubmit(0, undefined, '1')"
|
||||
@click="handleSubmitWithValidation(0)"
|
||||
>保存</ElButton
|
||||
>
|
||||
<ElButton
|
||||
type="primary"
|
||||
size="large"
|
||||
class="submit-btn"
|
||||
@click="handleSubmit(1, undefined, '1')"
|
||||
@click="handleSubmitWithValidation(1)"
|
||||
>提交</ElButton
|
||||
>
|
||||
</div>
|
||||
@@ -930,13 +956,70 @@
|
||||
import { CrmService } from '@/api/crmApi'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { useStockingForm } from '@/composables/useStockingForm'
|
||||
import { onMounted } from 'vue'
|
||||
import { onMounted, ref, computed } from 'vue'
|
||||
|
||||
defineOptions({ name: 'CrmStockingFinalAdd' }) // 定义组件名称,用于 KeepAlive 缓存控制
|
||||
|
||||
const route = useRoute()
|
||||
const stocking_id = route.query.id
|
||||
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 {
|
||||
// 数据
|
||||
@@ -1005,6 +1088,21 @@
|
||||
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>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">基础信息</span>
|
||||
</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">
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="阿里订单号/PI号" label-width="114px">
|
||||
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" />
|
||||
<ElInput v-model="baseForm.pi_no" placeholder="请输入阿里订单号/PI号" disabled />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="日期" label-width="114px">
|
||||
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||
<ElDatePicker
|
||||
v-model="baseForm.biz_date"
|
||||
type="date"
|
||||
@@ -29,7 +29,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_country_id"
|
||||
filterable
|
||||
@@ -51,7 +51,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="客户名称" label-width="114px">
|
||||
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||
<ElInput
|
||||
v-model="baseForm.customer_snapshot"
|
||||
placeholder="请选择客户"
|
||||
@@ -124,11 +124,11 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">订单详情</span>
|
||||
</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">
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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
|
||||
v-model="item.model_snapshot"
|
||||
placeholder="请选择车型"
|
||||
@@ -144,7 +144,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_exterior_snapshot"
|
||||
filterable
|
||||
@@ -168,7 +168,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_interior_snapshot"
|
||||
filterable
|
||||
@@ -192,7 +192,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="改装" label-width="85px">
|
||||
<ElFormItem label="改装" label-width="95px">
|
||||
<el-select
|
||||
v-model="item.modify_ids"
|
||||
filterable
|
||||
@@ -216,7 +216,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="里程" label-width="85px">
|
||||
<ElFormItem label="里程" label-width="95px">
|
||||
<ElInput
|
||||
v-model="item.mileage"
|
||||
:disabled="item._echo_vin === true"
|
||||
@@ -227,7 +227,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.official_price"
|
||||
@@ -252,7 +252,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.listing_price"
|
||||
@@ -277,7 +277,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.discount_price"
|
||||
@@ -302,7 +302,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6" v-else>
|
||||
<ElFormItem label="优惠" label-width="85px">
|
||||
<ElFormItem label="优惠" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.reduction_price"
|
||||
@@ -329,7 +329,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="手续费" label-width="85px">
|
||||
<ElFormItem label="手续费" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.handling_fee"
|
||||
@@ -354,7 +354,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="改装费" label-width="85px">
|
||||
<ElFormItem label="改装费" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.retrofit_fee"
|
||||
@@ -379,7 +379,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="FOB段运费" label-width="85px">
|
||||
<ElFormItem label="FOB段运费" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.fob_transport_fee"
|
||||
@@ -404,7 +404,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="港杂费" label-width="85px">
|
||||
<ElFormItem label="港杂费" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.port_misc_fee"
|
||||
@@ -429,7 +429,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="海运费" label-width="85px">
|
||||
<ElFormItem label="海运费" label-width="95px">
|
||||
<ElInput
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.ocean_freight"
|
||||
@@ -454,10 +454,10 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="佣金" label-width="85px">
|
||||
<ElInput v-model="item.commission" placeholder="请输入佣金">
|
||||
<ElFormItem label="佣金" label-width="95px">
|
||||
<ElInput :disabled="item._echo_vin === true" v-model="item.commission" placeholder="请输入佣金">
|
||||
<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
|
||||
v-for="c in currencyOptions"
|
||||
:key="c.currency_code"
|
||||
@@ -471,10 +471,10 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="购置税" label-width="85px">
|
||||
<ElInput v-model="item.purchase_tax" placeholder="请输入购置税">
|
||||
<ElFormItem label="购置税" label-width="95px">
|
||||
<ElInput :disabled="item._echo_vin === true" v-model="item.purchase_tax" placeholder="请输入购置税">
|
||||
<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
|
||||
v-for="c in currencyOptions"
|
||||
:key="c.currency_code"
|
||||
@@ -488,10 +488,10 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="预估退税额" label-width="85px">
|
||||
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
||||
<ElFormItem label="预估退税额" label-width="95px">
|
||||
<ElInput :disabled="item._echo_vin === true" v-model="item.tax_refund" placeholder="请输入预估退税额">
|
||||
<!-- <template #suffix>
|
||||
<ElSelect :disabled="item._echo_vin === true" v-model="item.tax_refund_currency" style="width: 64px">
|
||||
<ElOption
|
||||
v-for="c in currencyOptions"
|
||||
:key="c.currency_code"
|
||||
@@ -499,6 +499,14 @@
|
||||
:value="c.currency_code"
|
||||
/>
|
||||
</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>
|
||||
</ElInput>
|
||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||
@@ -507,7 +515,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.unit_price"
|
||||
@@ -532,7 +540,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<!-- <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="请输入总价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
||||
@@ -549,7 +557,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol> -->
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="利润" label-width="85px">
|
||||
<ElFormItem label="利润" label-width="95px">
|
||||
<ElInput
|
||||
v-model="item.profit"
|
||||
placeholder="正在计算利润"
|
||||
@@ -568,7 +576,25 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
:disabled="item._echo_vin === true"
|
||||
v-model="item.vin"
|
||||
@@ -579,7 +605,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入备注" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
@@ -628,15 +654,15 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">运输详情</span>
|
||||
</div>
|
||||
<ElForm :model="baseForm" class="foot-form">
|
||||
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||
<ElRow :gutter="12">
|
||||
<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="请输入清关人" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.eta_ship_date"
|
||||
value-format="YYYY-MM-DD"
|
||||
@@ -648,7 +674,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.domestic_port_id"
|
||||
placeholder="请选择国内收货商"
|
||||
@@ -669,7 +695,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.shipping_method_id"
|
||||
placeholder="请选择运输方式"
|
||||
@@ -690,7 +716,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.trade_term_id"
|
||||
placeholder="请选择"
|
||||
@@ -711,7 +737,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_port_id"
|
||||
placeholder="请选择"
|
||||
@@ -732,7 +758,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.latest_arrival_date"
|
||||
type="date"
|
||||
@@ -892,10 +918,10 @@
|
||||
<div class="form-card">
|
||||
<!-- 底部信息 -->
|
||||
<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 type="primary" size="large" class="submit-btn" @click="handleSubmit1(1)"
|
||||
<ElButton type="primary" size="large" class="submit-btn" @click="handleSubmitWithValidation(1)"
|
||||
>提交</ElButton
|
||||
>
|
||||
</div>
|
||||
@@ -1012,14 +1038,65 @@
|
||||
import { CrmService } from '@/api/crmApi'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { useStockingForm } from '@/composables/useStockingForm'
|
||||
import { onMounted } from 'vue'
|
||||
import { onMounted, ref, computed } from 'vue'
|
||||
defineOptions({ name: 'CrmStockingEdit' })
|
||||
const route = useRoute()
|
||||
const stocking_id = route.query.id
|
||||
const { getUserInfo } = useUserStore()
|
||||
const handleSubmit1 = async (status: number) => {
|
||||
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
||||
await handleSubmit(status, typeof id === 'string' ? id : undefined, '1')
|
||||
// 表单引用
|
||||
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' }],
|
||||
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 {
|
||||
@@ -1087,6 +1164,23 @@
|
||||
chooseVehicle
|
||||
} = 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 res = await CrmService.getStockDetail({ id: stocking_id })
|
||||
|
||||
@@ -9,15 +9,15 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">基础信息</span>
|
||||
</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">
|
||||
<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号" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="日期" label-width="114px">
|
||||
<ElFormItem label="日期" label-width="114px" prop="biz_date" required>
|
||||
<ElDatePicker
|
||||
v-model="baseForm.biz_date"
|
||||
type="date"
|
||||
@@ -29,7 +29,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_country_id"
|
||||
filterable
|
||||
@@ -51,7 +51,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="客户名称" label-width="114px">
|
||||
<ElFormItem label="客户名称" label-width="114px" prop="customer_id" required>
|
||||
<ElInput
|
||||
v-model="baseForm.customer_snapshot"
|
||||
placeholder="请选择客户"
|
||||
@@ -66,7 +66,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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-select
|
||||
v-model="baseForm.customer_source_id"
|
||||
@@ -124,11 +124,11 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">订单详情</span>
|
||||
</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">
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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
|
||||
v-model="item.model_snapshot"
|
||||
placeholder="请选择车型"
|
||||
@@ -143,7 +143,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_exterior_snapshot"
|
||||
filterable
|
||||
@@ -166,7 +166,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="item.color_interior_snapshot"
|
||||
filterable
|
||||
@@ -189,7 +189,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
|
||||
<ElFormItem label="改装" label-width="85px">
|
||||
<ElFormItem label="改装" label-width="95px">
|
||||
<el-select
|
||||
v-model="item.modify_ids"
|
||||
filterable
|
||||
@@ -212,17 +212,17 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入里程" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入官方指导价">
|
||||
<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
|
||||
v-for="c in currencyOptions"
|
||||
:key="c.currency_code"
|
||||
@@ -236,7 +236,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入二手挂牌价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.listing_price_currency" style="width: 64px">
|
||||
@@ -253,7 +253,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入优惠额">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.discount_currency" style="width: 64px">
|
||||
@@ -270,7 +270,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入优惠">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.reduction_price_currency" style="width: 64px">
|
||||
@@ -289,7 +289,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入手续费">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.helper_fee_currency" style="width: 64px">
|
||||
@@ -306,7 +306,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入改装费">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.modify_fee_currency" style="width: 64px">
|
||||
@@ -323,7 +323,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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段运费">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.fob_fee_currency" style="width: 64px">
|
||||
@@ -340,7 +340,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入港杂费">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.port_fee_currency" style="width: 64px">
|
||||
@@ -357,7 +357,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入海运费">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.ocean_freight_currency" style="width: 64px">
|
||||
@@ -374,7 +374,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入佣金">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.commission_currency" style="width: 64px">
|
||||
@@ -391,7 +391,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入购置税">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.purchase_tax_currency" style="width: 64px">
|
||||
@@ -408,9 +408,9 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="请输入预估退税额">
|
||||
<template #suffix>
|
||||
<!-- <template #suffix>
|
||||
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
|
||||
<ElOption
|
||||
v-for="c in currencyOptions"
|
||||
@@ -419,6 +419,14 @@
|
||||
:value="c.currency_code"
|
||||
/>
|
||||
</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>
|
||||
</ElInput>
|
||||
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
|
||||
@@ -427,7 +435,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入成交价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
|
||||
@@ -444,7 +452,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<!-- <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="请输入总价">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="item.total_price_currency" style="width: 64px">
|
||||
@@ -461,7 +469,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol> -->
|
||||
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
|
||||
<ElFormItem label="利润" label-width="85px">
|
||||
<ElFormItem label="利润" label-width="95px">
|
||||
<ElInput
|
||||
v-model="item.profit"
|
||||
placeholder="正在计算利润"
|
||||
@@ -471,7 +479,27 @@
|
||||
<template #suffix>
|
||||
<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
|
||||
}}
|
||||
</span>
|
||||
@@ -482,7 +510,7 @@
|
||||
</ElRow>
|
||||
<ElRow :gutter="12" class="item-row-wrap">
|
||||
<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="请输入备注" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
@@ -532,13 +560,12 @@
|
||||
<ElFormItem label="合同汇率" label-width="105px">
|
||||
<ElInput v-model="baseForm.contract_exchange_rate" placeholder="请输入">
|
||||
<template #suffix>
|
||||
<ElSelect v-model="baseForm.settlement_currency" style="width: 64px">
|
||||
<ElSelect v-model="baseForm.settlement_currency" style="width: 64px">
|
||||
<ElOption
|
||||
v-for="c in currencyOptions"
|
||||
:key="c.currency_code"
|
||||
:label="c.currency_name"
|
||||
:value="c.currency_code"
|
||||
@change="(val) =>(baseForm.contract_exchange_rate =(currencyOptions || []).find((x: any) => x.currency_code === val)?.exchange_rate || '') "
|
||||
/>
|
||||
</ElSelect>
|
||||
</template>
|
||||
@@ -553,15 +580,15 @@
|
||||
<span class="border"></span>
|
||||
<span class="title">运输详情</span>
|
||||
</div>
|
||||
<ElForm :model="baseForm" class="foot-form">
|
||||
<ElForm :model="baseForm" :rules="transportFormRules" ref="transportFormRef" class="foot-form">
|
||||
<ElRow :gutter="12">
|
||||
<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="请输入清关人" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.eta_ship_date"
|
||||
value-format="YYYY-MM-DD"
|
||||
@@ -573,7 +600,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.domestic_port_id"
|
||||
placeholder="请选择国内收货商"
|
||||
@@ -594,7 +621,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.shipping_method_id"
|
||||
placeholder="请选择运输方式"
|
||||
@@ -615,7 +642,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.trade_term_id"
|
||||
placeholder="请选择"
|
||||
@@ -636,7 +663,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.clearance_port_id"
|
||||
placeholder="请选择"
|
||||
@@ -657,7 +684,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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
|
||||
v-model="baseForm.latest_arrival_date"
|
||||
type="date"
|
||||
@@ -679,15 +706,15 @@
|
||||
<div class="payment-section">
|
||||
<div class="payment-items">
|
||||
<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">
|
||||
<ElCol :span="4">
|
||||
<ElFormItem label="汇款人">
|
||||
<ElFormItem label="汇款人" prop="remitter_name" required>
|
||||
<ElInput v-model="payment.remitter_name" placeholder="请选择汇款人" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<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="
|
||||
(val) =>
|
||||
(payment.remit_country_name_snapshot =
|
||||
@@ -704,7 +731,7 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="4" :xl="4">
|
||||
<ElFormItem label="日期">
|
||||
<ElFormItem label="日期" prop="remit_date" required>
|
||||
<ElDatePicker
|
||||
v-model="payment.remit_date"
|
||||
type="date"
|
||||
@@ -716,11 +743,11 @@
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
||||
<ElFormItem label="账户">
|
||||
<ElSelect v-model="payment.account_name_snapshot" placeholder="请选择账户" @change="
|
||||
<ElFormItem label="账户" prop="account_id" required>
|
||||
<ElSelect v-model="payment.account_id" placeholder="请选择账户" @change="
|
||||
(val) =>
|
||||
(payment.account_id =
|
||||
(accountOptions || []).find((x: any) => x.short_desc === val)?.id || '')
|
||||
(payment.account_name_snapshot =
|
||||
(accountOptions || []).find((x: any) => x.id === val)?.short_desc || '')
|
||||
">
|
||||
<ElOption
|
||||
v-for="item in accountOptions"
|
||||
@@ -729,11 +756,11 @@
|
||||
:value="item.id"
|
||||
/>
|
||||
</ElSelect>
|
||||
<ElInput v-model="payment.account_id" type="hidden" />
|
||||
<ElInput v-model="payment.account_name_snapshot" type="hidden" />
|
||||
</ElFormItem>
|
||||
</ElCol>
|
||||
<ElCol :sm="12" :md="12" :lg="5" :xl="5">
|
||||
<ElFormItem label="金额">
|
||||
<ElFormItem label="金额" prop="amount" required>
|
||||
<ElInput v-model="payment.amount" placeholder="请输入金额">
|
||||
<template #suffix>
|
||||
<ElSelect
|
||||
@@ -741,7 +768,9 @@
|
||||
style="width: 64px"
|
||||
@change="
|
||||
(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 || ''
|
||||
}
|
||||
"
|
||||
@@ -809,14 +838,14 @@
|
||||
plain
|
||||
size="large"
|
||||
class="submit-btn"
|
||||
@click="handleSubmit1(0)"
|
||||
@click="handleSubmitWithValidation(0)"
|
||||
>保存</ElButton
|
||||
>
|
||||
<ElButton
|
||||
type="primary"
|
||||
size="large"
|
||||
class="submit-btn"
|
||||
@click="handleSubmit1(1)"
|
||||
@click="handleSubmitWithValidation(1)"
|
||||
>提交</ElButton
|
||||
>
|
||||
</div>
|
||||
@@ -933,14 +962,84 @@
|
||||
import { CrmService } from '@/api/crmApi'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import { useStockingForm } from '@/composables/useStockingForm'
|
||||
import { onMounted } from 'vue'
|
||||
import { onMounted, ref, computed } from 'vue'
|
||||
defineOptions({ name: 'CrmStockingEdit' })
|
||||
const route = useRoute()
|
||||
const stocking_id = route.query.id
|
||||
const { getUserInfo } = useUserStore()
|
||||
const handleSubmit1 = async (status: number) => {
|
||||
const id = Array.isArray(stocking_id) ? stocking_id[0] : stocking_id
|
||||
await handleSubmit(status, typeof id === 'string' ? id : undefined)
|
||||
// 表单引用
|
||||
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 = {
|
||||
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 {
|
||||
|
||||
@@ -29,6 +29,14 @@
|
||||
<span class="info-label">国 家:</span>
|
||||
<span class="info-value">{{ userInfo.country_txt }}</span>
|
||||
</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>
|
||||
@@ -111,48 +119,6 @@
|
||||
<ElFormItem label="邮箱" prop="email">
|
||||
<ElInput v-model="form.email" :disabled="!isEdit" />
|
||||
</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>
|
||||
<ElFormItem
|
||||
@@ -203,8 +169,100 @@
|
||||
</div>
|
||||
</ElForm>
|
||||
</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>
|
||||
|
||||
<ElForm :model="pwdForm" class="form" label-width="86px" label-position="left">
|
||||
@@ -249,9 +307,10 @@
|
||||
</template>
|
||||
|
||||
<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 { CrmService } from '@/api/crmApi'
|
||||
import { commonService } from '@/api/commonApi'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
import QrcodeVue from 'qrcode.vue'
|
||||
import { useUploadHeaders } from '@/composables/useUploadHeaders'
|
||||
@@ -268,6 +327,7 @@
|
||||
const sign_img_url = ref('')
|
||||
const countryOptions = ref<any>()
|
||||
const form = ref<CustomerInfo>({})
|
||||
const formbd = ref<CustomerInfo>({})
|
||||
//获取公司 getCompanyList
|
||||
// const companyList = ref<any>()
|
||||
//国家
|
||||
@@ -280,17 +340,30 @@
|
||||
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 getuserInfo = async () => {
|
||||
const data = await CrmService.userget()
|
||||
userInfo.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
|
||||
socialize_pic_full.value = data.socialize_pic_full
|
||||
sign_img_url.value = data.sign_img_url
|
||||
}
|
||||
|
||||
const isEdit = ref(false)
|
||||
const isEditbd = ref(false)
|
||||
const showReSignQR = ref(false)
|
||||
const isEditPwd = ref(false)
|
||||
const pwdForm = reactive({
|
||||
@@ -315,22 +388,27 @@
|
||||
// address: [{ 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 = [
|
||||
{
|
||||
value: '',
|
||||
label: '未知'
|
||||
},
|
||||
{
|
||||
value: '1',
|
||||
value: 1,
|
||||
label: '男'
|
||||
},
|
||||
{
|
||||
value: '2',
|
||||
value: 2,
|
||||
label: '女'
|
||||
}
|
||||
]
|
||||
onMounted(async () => {
|
||||
await getuserOptions()
|
||||
await getarea()
|
||||
await getuserInfo()
|
||||
})
|
||||
@@ -343,7 +421,21 @@
|
||||
getuserInfo()
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -434,6 +526,7 @@
|
||||
|
||||
.box-style {
|
||||
border: 1px solid var(--art-border-color);
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.content {
|
||||
|
||||
Reference in New Issue
Block a user