240 lines
9.3 KiB
Vue
240 lines
9.3 KiB
Vue
|
|
<template>
|
|||
|
|
<div>
|
|||
|
|
<el-form label-position="right" label-width="110px" v-loading="loading" :disabled="true">
|
|||
|
|
<el-form-item label="公司名称:">
|
|||
|
|
<el-select v-model="itemInfo.company_id" placeholder="请选择" clearable filterable style="width: 320px;">
|
|||
|
|
<el-option v-for="it in companyList" :key="it.id" :label="it.name" :value="it.id" />
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="选品:">
|
|||
|
|
<el-select v-model="itemInfo.manager_id" placeholder="请选择" clearable filterable style="width: 320px;">
|
|||
|
|
<el-option v-for="it in managerList" :key="it.id" :label="it.username" :value="it.id" />
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="供应商名称:">
|
|||
|
|
<el-select v-model="itemInfo.purchase_supplier_id" placeholder="请选择" clearable filterable style="width: 320px;">
|
|||
|
|
<el-option v-for="it in supplierList" :key="it.id" :label="it.supplier_name" :value="it.id" />
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="商品信息:">
|
|||
|
|
<el-table :data="goodsList" style="width: 100%;margin-top: 15px;" border>
|
|||
|
|
<el-table-column prop="goods.title" label="商品名称" />
|
|||
|
|
<el-table-column label="规格名称">
|
|||
|
|
<template #default="scope">
|
|||
|
|
<span>{{ scope.row.sku && scope.row.sku.title || scope.row.title }}</span>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column label="预计产品单价(含税)" align="center" prop="expect_unit_price" />
|
|||
|
|
<el-table-column label="实际产品单价(含税)" align="center" prop="real_unit_price" />
|
|||
|
|
<el-table-column label="单位" align="center" prop="unit" />
|
|||
|
|
<el-table-column label="预计采购数量" align="center" prop="expect_quantity" />
|
|||
|
|
<el-table-column label="实际采购数量" prop="real_quantity" align="center" />
|
|||
|
|
<el-table-column label="预付款比例(%)" align="center">
|
|||
|
|
<template #default="scope">
|
|||
|
|
<span>{{ scope.row.prepayment_ratio }}%</span>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column label="交货时间" width="160" align="center" prop="delivery_date" />
|
|||
|
|
<el-table-column label="预计订单金额(元)" align="center" prop="estimated_order_amount" />
|
|||
|
|
<el-table-column label="实际订单金额" prop="real_amount" align="center" />
|
|||
|
|
<el-table-column label="预付款(元)" align="center" prop="advance_payment" />
|
|||
|
|
<el-table-column label="尾款(元)" align="center" prop="balance_payment" />
|
|||
|
|
</el-table>
|
|||
|
|
</el-form-item>
|
|||
|
|
|
|||
|
|
<el-form-item label="其他费用:">
|
|||
|
|
<el-table :data="feesList" style="width: 100%;margin-top: 15px;" border>
|
|||
|
|
<el-table-column label="费用名称" >
|
|||
|
|
<template #default="scope">
|
|||
|
|
<span class="iconfont icon-bohui" v-if="scope.row.has_paid_amount * 1 == 0"></span>
|
|||
|
|
<span>{{ scope.row.fee_name }}</span>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column label="订单金额" prop="amount" />
|
|||
|
|
<el-table-column label="打款信息">
|
|||
|
|
<template #default="scope">
|
|||
|
|
<el-select v-model="scope.row.other_expense_account_id" placeholder="请选择" clearable filterable>
|
|||
|
|
<el-option v-for="it in accountList" :key="it.id" :label="it.name" :value="it.id" />
|
|||
|
|
</el-select>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
</el-table>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="备注:">
|
|||
|
|
<span>{{ itemInfo.remark }}</span>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="逾期交货说明:">
|
|||
|
|
<span>{{ itemInfo.late_delivery_explanation }}</span>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="总计:">
|
|||
|
|
<div class="sumbox">
|
|||
|
|
总预计订单金额(元):<span>{{ sumData.total_amount || '0.00' }}</span>,
|
|||
|
|
总预付款(元):<span>{{ sumData.pre_pay_amount || '0.00' }}</span>,
|
|||
|
|
总尾款(元):<span>{{ sumData.balance_amount || '0.00' }}</span>
|
|||
|
|
</div>
|
|||
|
|
</el-form-item>
|
|||
|
|
<div class="h5Tit">其余信息</div>
|
|||
|
|
<el-form-item label="开团时间:">
|
|||
|
|
<span>{{ itemInfo.sold_start_time }}</span>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="预计到仓时间:">
|
|||
|
|
<span>{{ itemInfo.arrived_time }}</span>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="仓库:">
|
|||
|
|
<span>{{ itemInfo.warehouse_name }}</span>
|
|||
|
|
</el-form-item>
|
|||
|
|
</el-form>
|
|||
|
|
<div v-if="itemInfo.approval_instances && itemInfo.approval_instances.length">
|
|||
|
|
<div v-for="it in itemInfo.approval_instances" :key="it.id">
|
|||
|
|
<div v-if="(it.payment_voucher && it.payment_voucher.length) || (it.related_images && it.related_images.length)">
|
|||
|
|
<h4>{{it.type == 1 ? '采购订单' : it.type == 2 ? '预付款打款' : '尾款打款'}}</h4>
|
|||
|
|
<el-form label-position="right" label-width="110px">
|
|||
|
|
<div v-if="it.amount * 1 > 0" style="padding-bottom: 10px;">申请打款金额:{{it.amount}}元</div>
|
|||
|
|
<el-form-item label="支付凭证:" v-if="it.payment_voucher && it.payment_voucher.length">
|
|||
|
|
<div class="imgBox">
|
|||
|
|
<el-image :z-index="9999" v-for="(itm, j) in it.payment_voucher" :key="j" :src="itm" :hide-on-click-modal="true" :preview-src-list="[itm]" fit="cover" :preview-teleported="true" />
|
|||
|
|
</div>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="合同照片:" v-if="it.related_images && it.related_images.length">
|
|||
|
|
<div class="imgBox">
|
|||
|
|
<el-image :z-index="9999" v-for="(itm, j) in it.related_images" :key="j" :src="itm" :hide-on-click-modal="true" :preview-src-list="[itm]" fit="cover" :preview-teleported="true" />
|
|||
|
|
</div>
|
|||
|
|
</el-form-item>
|
|||
|
|
</el-form>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
<div class="space"></div>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import { Plus, Search } from "@element-plus/icons"
|
|||
|
|
import { reactive, toRefs, watch } from 'vue'
|
|||
|
|
import { get } from '@/api/request'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: { Plus, Search },
|
|||
|
|
props: {
|
|||
|
|
show: {
|
|||
|
|
type: Boolean,
|
|||
|
|
default: false
|
|||
|
|
},
|
|||
|
|
id: {
|
|||
|
|
type: Number,
|
|||
|
|
default: 0,
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
setup(props, context) {
|
|||
|
|
const data = reactive({
|
|||
|
|
launchId: 0,
|
|||
|
|
companyList: [],
|
|||
|
|
managerList: [],
|
|||
|
|
supplierList: [],
|
|||
|
|
accountList: [],
|
|||
|
|
loading: false,
|
|||
|
|
goodsList: [],
|
|||
|
|
itemInfo: {},
|
|||
|
|
feesList: [],
|
|||
|
|
sumData: {}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
function getDetail() {
|
|||
|
|
data.loading = true
|
|||
|
|
get(`/api/purchaseOrder/${props.id}`).then((res) => {
|
|||
|
|
data.itemInfo = res.data
|
|||
|
|
data.feesList = res.data.other_expenses
|
|||
|
|
let num1 = 0, num2 = 0
|
|||
|
|
res.data.products.forEach((item) => {
|
|||
|
|
if(item.expect_unit_price && item.expect_quantity) {
|
|||
|
|
item.estimated_order_amount = (item.expect_unit_price * item.expect_quantity).toFixed(2)
|
|||
|
|
if(item.prepayment_ratio) {
|
|||
|
|
item.advance_payment = ((item.estimated_order_amount * item.prepayment_ratio) / 100).toFixed(2)
|
|||
|
|
item.balance_payment = (((item.estimated_order_amount * 100) - (item.advance_payment * 100)) / 100).toFixed(2)
|
|||
|
|
}
|
|||
|
|
num1 += item.expect_unit_price * item.expect_quantity
|
|||
|
|
if(item.prepayment_ratio) {
|
|||
|
|
num2 += num1 * item.prepayment_ratio
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
data.sumData.total_amount = num1.toFixed(2)
|
|||
|
|
data.sumData.pre_pay_amount = (num2 / 100).toFixed(2)
|
|||
|
|
data.sumData.balance_amount = (((data.sumData.total_amount * 100) - (data.sumData.pre_pay_amount * 100)) / 100).toFixed(2)
|
|||
|
|
data.goodsList = res.data.products
|
|||
|
|
data.loading = false
|
|||
|
|
}).catch(() => {
|
|||
|
|
data.loading = false
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getCompany() {
|
|||
|
|
get(`/api/company/all`, {page: 1, pageSize: 1000}).then((res) => {
|
|||
|
|
data.companyList = res.data
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getManagerList() {
|
|||
|
|
get('/api/staff', {role_id: 1}).then((res) => {
|
|||
|
|
data.managerList = res.data
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getSupplier() {
|
|||
|
|
get(`/api/purchaseSupplier`, {page: 1, pageSize: 1000}).then((res) => {
|
|||
|
|
data.supplierList = res.data
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function getAccount() {
|
|||
|
|
get(`/api/otherExpenseAccount`, {page: 1, pageSize: 1000}).then((res) => {
|
|||
|
|
data.accountList = res.data
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
watch(() => props, (newProps) => {
|
|||
|
|
if (newProps.show) {
|
|||
|
|
getDetail()
|
|||
|
|
getCompany()
|
|||
|
|
getManagerList()
|
|||
|
|
getSupplier()
|
|||
|
|
getAccount()
|
|||
|
|
}
|
|||
|
|
}, { deep: true, immediate: true })
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
...toRefs(data),
|
|||
|
|
getCompany,
|
|||
|
|
getManagerList,
|
|||
|
|
getSupplier,
|
|||
|
|
getDetail,
|
|||
|
|
getAccount
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.space{
|
|||
|
|
background: repeating-linear-gradient(-45deg, #F56C6C 0, #F56C6C 20%, transparent 0, transparent 25%, #1989fa 0, #1989fa 45%, transparent 0, transparent 50%);
|
|||
|
|
height: 2px;
|
|||
|
|
background-size: 80px;
|
|||
|
|
margin-bottom: 20px;
|
|||
|
|
}
|
|||
|
|
.icon-bohui{
|
|||
|
|
color: #f00;
|
|||
|
|
margin-right: 5px;
|
|||
|
|
font-size: 20px;
|
|||
|
|
vertical-align: bottom;
|
|||
|
|
}
|
|||
|
|
.imgBox{
|
|||
|
|
display: flex;
|
|||
|
|
flex-wrap: wrap;
|
|||
|
|
.el-image{
|
|||
|
|
width: 60px;
|
|||
|
|
height: 60px;
|
|||
|
|
border-radius: 4px;
|
|||
|
|
margin-right: 10px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|