10.17沟通调整

计划收款信息增加复制操作
上传合同调整为:上传合同、上传PI、上传水单(均为必传,且支持多文件操作与下载)
This commit is contained in:
浅念
2025-10-22 11:52:20 +08:00
parent 222d07d483
commit ff0fb83bd0
20 changed files with 2139 additions and 856 deletions
+123 -61
View File
@@ -188,7 +188,7 @@
<ElInput v-model="item.color_interior_code" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="改装" label-width="95px">
<el-select
v-model="item.modify_ids"
@@ -210,7 +210,7 @@
/>
</el-select>
</ElFormItem>
</ElCol>
</ElCol> -->
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
<ElFormItem label="里程" label-width="95px">
<ElInput v-model="item.mileage" placeholder="请输入里程" />
@@ -286,6 +286,23 @@
<ElInput v-model="item.reduction_price_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
<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">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
:label="c.currency_name"
:value="c.currency_code"
/>
</ElSelect>
</template>
</ElInput>
<ElInput v-model="item.unit_price_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
</ElRow>
<ElRow :gutter="12" class="item-row-wrap">
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
@@ -322,6 +339,23 @@
<ElInput v-model="item.modify_fee_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="配件费" label-width="85px">
<ElInput v-model="item.accessory_price" placeholder="请输入配件费">
<template #suffix>
<ElSelect v-model="item.accessory_price_currency" style="width: 74px">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
:label="c.currency_name"
:value="c.currency_code"
/>
</ElSelect>
</template>
</ElInput>
<ElInput v-model="item.accessory_price_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
<ElFormItem label="FOB段运费" label-width="95px">
<ElInput v-model="item.fob_transport_fee" placeholder="请输入FOB段运费">
@@ -390,6 +424,23 @@
<ElInput v-model="item.commission_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="挂账" label-width="85px">
<ElInput v-model="item.retention_price" placeholder="请输入挂账">
<template #suffix>
<ElSelect v-model="item.retention_price_currency" style="width: 74px">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
:label="c.currency_name"
:value="c.currency_code"
/>
</ElSelect>
</template>
</ElInput>
<ElInput v-model="item.retention_price_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="购置税" label-width="95px">
<ElInput v-model="item.purchase_tax" placeholder="请输入购置税">
@@ -408,25 +459,14 @@
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="预估退税额" label-width="95px">
<ElInput v-model="item.tax_refund" placeholder="请输入预估退税额">
<!-- <template #suffix>
<ElSelect v-model="item.tax_refund_currency" style="width: 64px">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
:label="c.currency_name"
:value="c.currency_code"
/>
</ElSelect>
</template> -->
<ElFormItem label="预估退税额" label-width="85px">
<ElInput
v-model="item.tax_refund"
placeholder="正在计算预估退税额"
@input="handleUserEdit(idx)"
>
<template #suffix>
<span style="font-size: 11px">
{{
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)?.currency_name) ||
baseForm.settlement_currency
}}
</span>
<span style="font-size: 11px">人民币</span>
</template>
</ElInput>
<ElInput v-model="item.tax_refund_currency_snapshot" type="hidden" />
@@ -434,11 +474,15 @@
</ElCol>
</ElRow>
<ElRow :gutter="12" class="item-row-wrap">
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
<ElFormItem label="成交价" label-width="95px" :prop="'items.' + idx + '.unit_price'" required>
<ElInput v-model="item.unit_price" placeholder="请输入成交价">
<ElCol :sm="12" :md="12" :lg="6" :xl="4">
<ElFormItem label="车价" label-width="85px">
<ElInput
v-model="item.car_price"
placeholder="正在计算车价"
@input="handleUserEdit(idx)"
>
<template #suffix>
<ElSelect v-model="item.unit_price_currency" style="width: 64px">
<ElSelect v-model="item.car_price_currency" style="width: 74px">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
@@ -448,7 +492,7 @@
</ElSelect>
</template>
</ElInput>
<ElInput v-model="item.unit_price_currency_snapshot" type="hidden" />
<ElInput v-model="item.car_price_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<!-- <ElCol :sm="12" :md="12" :lg="6" :xl="6">
@@ -477,13 +521,7 @@
disabled
>
<template #suffix>
<span style="font-size: 11px">
{{
((currencyOptions || []).find((c: any) => c.currency_code === baseForm.settlement_currency)
?.currency_name) ||
baseForm.settlement_currency
}}
</span>
<span style="font-size: 11px">人民币</span>
</template>
</ElInput>
</ElFormItem>
@@ -543,9 +581,9 @@
<ElRow :gutter="12">
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
<ElFormItem label="合计到岸价" label-width="105px">
<ElInput v-model.number="baseForm.total_cif" placeholder="请输入合计到岸价">
<ElInput v-model.number="baseForm.cif_total" placeholder="请输入合计到岸价">
<template #suffix>
<ElSelect v-model="baseForm.total_cif_currency" style="width: 64px">
<ElSelect v-model="baseForm.cif_total_currency" style="width: 64px">
<ElOption
v-for="c in currencyOptions"
:key="c.currency_code"
@@ -555,7 +593,7 @@
</ElSelect>
</template>
</ElInput>
<ElInput v-model="baseForm.total_cif_currency_snapshot" type="hidden" />
<ElInput v-model="baseForm.cif_total_currency_snapshot" type="hidden" />
</ElFormItem>
</ElCol>
<ElCol :sm="12" :md="12" :lg="6" :xl="6">
@@ -792,8 +830,9 @@
</ElRow>
<ElRow :gutter="12">
<ElCol :span="24" style="text-align: right;">
<ElButton type="success" size="small" @click="copyPaymentItem(idx)">复制</ElButton>
<ElButton type="primary" size="small" @click="addPaymentItem" v-if="idx === paymentItems.length - 1">添加</ElButton>
<ElButton type="danger" size="small" @click="removePaymentItem(idx)" :disabled="paymentItems.length === 1">删除</ElButton>
<ElButton type="primary" size="small" @click="addPaymentItem" v-if="idx === paymentItems.length - 1">添加收款信息</ElButton>
</ElCol>
</ElRow>
</ElForm>
@@ -807,30 +846,46 @@
<span class="border"></span>
<span class="title">上传合同</span>
</div>
<el-upload
class="upload-box"
:action="actionImageUplode"
:headers="uploadHeaders"
:show-file-list="false"
:on-success="handleContractUpload"
:before-upload="beforeContractUpload"
<MultiFileUpload
v-model="contractFiles"
upload-text="点击上传"
hint-text="支持多文件上传"
:icon-src="contractIcon"
accept=".jpg,.jpeg,.png,.gif,.pdf,.doc,.docx,.xls,.xlsx,.txt"
>
<div class="qrcode-upload-box">
<input type="hidden" v-model="baseForm.contract"/>
<img v-if="!contractFile" class="avatar" src="@/assets/img/crm/contract.png" />
<div v-else class="file-preview">
<img v-if="isImageFile(contractFile)" :src="contractFile.url" class="preview-image" />
<div v-else class="file-icon">
<i class="iconfont-sys">&#xe814;</i>
<span class="file-name">{{ contractFile.name }}</span>
</div>
<div class="file-actions">
<el-button type="text" size="small" @click.stop="removeContractFile">删除</el-button>
</div>
</div>
</div>
</el-upload>
@change="(files) => (baseForm.contract = files.map((f) => f.file_name))"
/>
</div>
<!-- 上传PI -->
<div class="boxshadow">
<div class="form-title">
<span class="border"></span>
<span class="title">上传PI</span>
</div>
<MultiFileUpload
v-model="piFiles"
upload-text="点击上传"
hint-text="支持多文件上传"
:icon-src="contractIcon"
accept=".jpg,.jpeg,.png,.gif,.pdf,.doc,.docx,.xls,.xlsx,.txt"
@change="(files) => (baseForm.pi_doc = files.map((f) => f.file_name))"
/>
</div>
<!-- 上传水单 -->
<div class="boxshadow">
<div class="form-title">
<span class="border"></span>
<span class="title">上传水单</span>
</div>
<MultiFileUpload
v-model="waterBillFiles"
upload-text="点击上传"
hint-text="支持多文件上传"
:icon-src="contractIcon"
accept=".jpg,.jpeg,.png,.gif,.pdf,.doc,.docx,.xls,.xlsx,.txt"
@change="(files) => (baseForm.transaction_slip = files.map((f) => f.file_name))"
/>
</div>
<div class="form-card">
<!-- 底部信息 -->
@@ -964,6 +1019,8 @@
import { CrmService } from '@/api/crmApi'
import { useUserStore } from '@/store/modules/user'
import { useStockingForm } from '@/composables/useStockingForm'
import MultiFileUpload from '@/components/core/forms/MultiFileUpload.vue'
import contractIcon from '@/assets/img/crm/contract.png'
import { onMounted, ref, computed } from 'vue'
defineOptions({ name: 'CrmStockingEdit' })
const route = useRoute()
@@ -1004,7 +1061,7 @@
{ required: true, message: '请输入二手挂牌价', trigger: 'blur' }
]
rules[`items.${idx}.unit_price`] = [
{ required: true, message: '请输入成交价', trigger: 'blur' }
{ required: true, message: '请输入收款价', trigger: 'blur' }
]
})
return rules
@@ -1049,7 +1106,9 @@
baseForm,
items,
paymentItems,
contractFile,
contractFiles,
piFiles,
waterBillFiles,
customerDialog,
vehicleDialog,
// 选项数据
@@ -1078,6 +1137,7 @@
validateContractRate,
wrapMoney,
calcProfit,
handleUserEdit,
// 合同文件方法
isImageFile,
@@ -1091,6 +1151,7 @@
removeRow,
// 收款项方法
copyPaymentItem,
addPaymentItem,
removePaymentItem,
@@ -1211,6 +1272,7 @@
flex-direction: column;
align-items: center;
justify-content: center;
padding: 10px;
}
.preview-image {