Compare commits
2 Commits
c9c04a54fb
...
be5dcee8ee
| Author | SHA1 | Date | |
|---|---|---|---|
| be5dcee8ee | |||
| 58b46a35a8 |
@ -16,78 +16,158 @@
|
|||||||
<el-option v-for="it in supplierList" :key="it.id" :label="it.supplier_name" :value="it.id" />
|
<el-option v-for="it in supplierList" :key="it.id" :label="it.supplier_name" :value="it.id" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="商品信息:">
|
<template v-if="Type == 1">
|
||||||
<el-table :data="goodsList" style="width: 100%;margin-top: 15px;" border>
|
<el-form-item label="商品信息:">
|
||||||
<el-table-column prop="goods.title" label="商品名称" />
|
<el-table :data="itemInfo.products" style="width: 100%;margin-top: 15px;" border>
|
||||||
<el-table-column label="规格名称">
|
<el-table-column label="商品名称" prop="goods.title" />
|
||||||
<template #default="scope">
|
<el-table-column label="规格名称" prop="sku.title" />
|
||||||
<span>{{ scope.row.sku && scope.row.sku.title || scope.row.title }}</span>
|
<el-table-column label="预计产品单价(含税)" align="center" prop="expect_unit_price" />
|
||||||
</template>
|
<el-table-column label="实际产品单价(含税)" align="center" prop="real_unit_price" v-if="itemInfo.approval_type == 3" />
|
||||||
</el-table-column>
|
<el-table-column label="单位" align="center" prop="unit" />
|
||||||
<el-table-column label="预计产品单价(含税)" align="center" prop="expect_unit_price" />
|
<el-table-column label="预计采购数量" align="center" prop="expect_quantity" />
|
||||||
<el-table-column label="实际产品单价(含税)" align="center" prop="real_unit_price" />
|
<el-table-column label="实际采购数量" prop="real_quantity" align="center" v-if="itemInfo.approval_type == 3" />
|
||||||
<el-table-column label="单位" align="center" prop="unit" />
|
<el-table-column label="预付款比例(%)" align="center">
|
||||||
<el-table-column label="预计采购数量" align="center" prop="expect_quantity" />
|
<template #default="scope">
|
||||||
<el-table-column label="实际采购数量" prop="real_quantity" align="center" />
|
<span>{{ scope.row.prepayment_ratio }}%</span>
|
||||||
<el-table-column label="预付款比例(%)" align="center">
|
</template>
|
||||||
<template #default="scope">
|
</el-table-column>
|
||||||
<span>{{ scope.row.prepayment_ratio }}%</span>
|
<el-table-column label="交货时间" align="center" prop="delivery_date" />
|
||||||
</template>
|
<el-table-column label="预计订单金额(元)" align="center" prop="estimated_order_amount" />
|
||||||
</el-table-column>
|
<el-table-column label="实际订单金额" prop="real_amount" align="center" v-if="itemInfo.approval_type == 3" />
|
||||||
<el-table-column label="交货时间" width="160" align="center" prop="delivery_date" />
|
<el-table-column label="预付款(元)" align="center" prop="advance_payment" v-if="itemInfo.approval_type == 2" />
|
||||||
<el-table-column label="预计订单金额(元)" align="center" prop="estimated_order_amount" />
|
<el-table-column label="已打款" prop="has_paid_amount" align="center" v-if="itemInfo.approval_type == 3" />
|
||||||
<el-table-column label="实际订单金额" prop="real_amount" align="center" />
|
<el-table-column label="尾款(元)" align="center" prop="balance_payment" v-if="itemInfo.approval_type == 2" />
|
||||||
<el-table-column label="预付款(元)" align="center" prop="advance_payment" />
|
</el-table>
|
||||||
<el-table-column label="尾款(元)" align="center" prop="balance_payment" />
|
</el-form-item>
|
||||||
</el-table>
|
<el-form-item label="其他费用:">
|
||||||
</el-form-item>
|
<el-table :data="itemInfo.other_expenses" style="width: 100%;margin-top: 15px;" border>
|
||||||
|
<el-table-column label="费用名称" prop="fee_name">
|
||||||
|
<template #default="scope">
|
||||||
|
<span>{{ scope.row.fee_name }}</span>
|
||||||
|
<span class="iconfont icon-bohui" v-if="scope.row.money_approve_status == 3"></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>
|
||||||
|
</template>
|
||||||
|
|
||||||
<el-form-item label="其他费用:">
|
<div v-for="(item, index) in logsList" :key="item.id">
|
||||||
<el-table :data="feesList" style="width: 100%;margin-top: 15px;" border>
|
<div v-if="item.extend && item.extend.purchaseOrder">
|
||||||
<el-table-column label="费用名称" >
|
<div class="h1Tit" v-if="approvalType[item.type]">{{approvalType[item.type]}}
|
||||||
<template #default="scope">
|
<span class="iconfont icon-bohui" v-if="item.status == 3"></span>
|
||||||
<span class="iconfont icon-bohui" v-if="scope.row.has_paid_amount * 1 == 0"></span>
|
</div>
|
||||||
<span>{{ scope.row.fee_name }}</span>
|
<template v-if="item.type == 1 || item.type == 3">
|
||||||
</template>
|
<el-form-item label="商品信息:">
|
||||||
</el-table-column>
|
<el-table :data="item.extend.purchaseOrder.products" style="width: 100%;margin-top: 15px;" border>
|
||||||
<el-table-column label="订单金额" prop="amount" />
|
<el-table-column label="商品名称" prop="goods_title" />
|
||||||
<el-table-column label="打款信息">
|
<el-table-column label="规格名称" prop="sku_title" />
|
||||||
<template #default="scope">
|
<el-table-column label="预计产品单价(含税)" align="center" prop="expect_unit_price" />
|
||||||
<el-select v-model="scope.row.other_expense_account_id" placeholder="请选择" clearable filterable>
|
<el-table-column label="实际产品单价(含税)" align="center" prop="real_unit_price" v-if="item.type == 3">
|
||||||
<el-option v-for="it in accountList" :key="it.id" :label="it.name" :value="it.id" />
|
<template #default="scope"><span class="blue">{{ scope.row.real_unit_price }}</span></template>
|
||||||
</el-select>
|
</el-table-column>
|
||||||
</template>
|
<el-table-column label="单位" align="center" prop="unit" />
|
||||||
</el-table-column>
|
<el-table-column label="预计采购数量" align="center" prop="expect_quantity" />
|
||||||
</el-table>
|
<el-table-column label="实际采购数量" prop="real_quantity" align="center" v-if="item.type == 3">
|
||||||
</el-form-item>
|
<template #default="scope"><span class="blue">{{ scope.row.real_quantity }}</span></template>
|
||||||
<el-form-item label="备注:">
|
</el-table-column>
|
||||||
<span>{{ itemInfo.remark }}</span>
|
<el-table-column label="预付款比例(%)" align="center">
|
||||||
</el-form-item>
|
<template #default="scope">
|
||||||
<el-form-item label="逾期交货说明:">
|
<span>{{ scope.row.prepayment_ratio }}%</span>
|
||||||
<span>{{ itemInfo.late_delivery_explanation }}</span>
|
</template>
|
||||||
</el-form-item>
|
</el-table-column>
|
||||||
<el-form-item label="总计:">
|
<el-table-column label="交货时间" align="center" prop="delivery_date" />
|
||||||
<div class="sumbox">
|
<el-table-column label="预计订单金额(元)" align="center" prop="estimated_order_amount" />
|
||||||
总预计订单金额(元):<span>{{ sumData.total_amount || '0.00' }}</span>,
|
<el-table-column label="实际订单金额" prop="real_amount" align="center" v-if="item.type == 3">
|
||||||
总预付款(元):<span>{{ sumData.pre_pay_amount || '0.00' }}</span>,
|
<template #default="scope"><span class="blue">{{ scope.row.real_amount }}</span></template>
|
||||||
总尾款(元):<span>{{ sumData.balance_amount || '0.00' }}</span>
|
</el-table-column>
|
||||||
|
<el-table-column label="预付款(元)" align="center" prop="advance_payment" v-if="item.type == 1" />
|
||||||
|
<el-table-column label="已打款" prop="has_paid_amount" align="center" v-if="item.type == 3">
|
||||||
|
<template #default="scope"><span class="blue">{{ scope.row.has_paid_amount }}</span></template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="尾款(元)" align="center" prop="balance_payment" v-if="item.type == 1" />
|
||||||
|
<el-table-column label="申请打款金数" align="center" prop="apply_amount" v-if="item.type == 3">
|
||||||
|
<template #default="scope"><span class="blue">{{ scope.row.apply_amount }}</span></template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="其他费用:">
|
||||||
|
<el-table :data="filteredData(item.extend.purchaseOrder.other_expenses, item)" style="width: 100%;margin-top: 15px;" border>
|
||||||
|
<el-table-column label="费用名称" prop="fee_name" />
|
||||||
|
<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>
|
||||||
|
</template>
|
||||||
|
<template v-if="item.type == 1">
|
||||||
|
<el-form-item label="备注:">
|
||||||
|
<span>{{ item.extend.purchaseOrder.remark }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="逾期交货说明:">
|
||||||
|
<span>{{ item.extend.purchaseOrder.late_delivery_explanation }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="总计:">
|
||||||
|
<div class="sumbox">
|
||||||
|
总预计订单金额(元):<span>{{ item.total_amount || '0.00' }}</span>,
|
||||||
|
总预付款(元):<span>{{ item.pre_pay_amount || '0.00' }}</span>,
|
||||||
|
总尾款(元):<span>{{ item.balance_amount || '0.00' }}</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<div class="block"></div>
|
||||||
|
<h4>其余信息</h4>
|
||||||
|
<el-form-item label="开团时间:">
|
||||||
|
<span>{{ item.extend.purchaseOrder.sold_start_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="预计到仓时间:">
|
||||||
|
<span>{{ item.extend.purchaseOrder.arrived_time }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="仓库:">
|
||||||
|
<span>{{ item.extend.purchaseOrder.warehouse_name }}</span>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<!-- <template v-if="item.type == 2">
|
||||||
|
<el-form-item label="订单合同:">
|
||||||
|
<div class="imgBox">
|
||||||
|
<el-image :z-index="9999" v-for="(itm, j) in item.extend.related_images" :key="j" :src="itm" :hide-on-click-modal="true" :preview-src-list="[itm]" fit="cover" :preview-teleported="true" />
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</template> -->
|
||||||
|
<template v-if="item.type == 3">
|
||||||
|
<div style="padding: 20px 0;color: #f00;">合计申请打款金额:{{item.amount}}元</div>
|
||||||
|
<div class="huibox">
|
||||||
|
<div>
|
||||||
|
打款前:总实际订单金额(元):{{item.extend.before_amount}},
|
||||||
|
总实际已支付金额(元):{{item.extend.purchaseOrder.has_paid_amount}},
|
||||||
|
总实际未支付金额(元):{{ ((item.extend.before_amount * 100 - item.extend.purchaseOrder.has_paid_amount * 100) / 100).toFixed(2) }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
打款后:总实际订单金额(元):{{item.extend.purchaseOrder.total_amount}},
|
||||||
|
总实际已支付金额(元):{{ ((item.extend.purchaseOrder.has_paid_amount * 100 + item.amount * 100) / 100).toFixed(2) }},
|
||||||
|
总实际未支付金额(元):{{ ((item.extend.purchaseOrder.total_amount * 100 - item.extend.purchaseOrder.has_paid_amount * 100 - item.amount * 100) / 100).toFixed(2) }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</div>
|
||||||
<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>
|
</el-form>
|
||||||
<div v-if="itemInfo.approval_instances && itemInfo.approval_instances.length">
|
<div v-if="itemInfo.approval_instances && itemInfo.approval_instances.length">
|
||||||
<div v-for="it in itemInfo.approval_instances" :key="it.id">
|
<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)">
|
<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>
|
<div class="h1Tit">{{it.type == 1 ? '采购订单' : it.type == 2 ? '预付款打款' : '尾款打款'}}</div>
|
||||||
<el-form label-position="right" label-width="110px">
|
<el-form label-position="right" label-width="110px">
|
||||||
<div v-if="it.amount * 1 > 0" style="padding-bottom: 10px;">申请打款金额:{{it.amount}}元</div>
|
<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">
|
<el-form-item label="支付凭证:" v-if="it.payment_voucher && it.payment_voucher.length">
|
||||||
@ -123,6 +203,10 @@ export default {
|
|||||||
id: {
|
id: {
|
||||||
type: Number,
|
type: Number,
|
||||||
default: 0,
|
default: 0,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: Number,
|
||||||
|
default: 0,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setup(props, context) {
|
setup(props, context) {
|
||||||
@ -135,39 +219,86 @@ export default {
|
|||||||
loading: false,
|
loading: false,
|
||||||
goodsList: [],
|
goodsList: [],
|
||||||
itemInfo: {},
|
itemInfo: {},
|
||||||
feesList: [],
|
sumData: {},
|
||||||
sumData: {}
|
logsList: [],
|
||||||
|
approvalType: {
|
||||||
|
'1': '采购订单审批',
|
||||||
|
'2': '',
|
||||||
|
'3': '尾款打款审批'
|
||||||
|
},
|
||||||
|
Type: 1
|
||||||
})
|
})
|
||||||
|
|
||||||
function getDetail() {
|
async function getDetail() {
|
||||||
data.loading = true
|
data.loading = true
|
||||||
get(`/api/purchaseOrder/${props.id}`).then((res) => {
|
await get(`/api/purchaseOrder/${props.id}`).then((res) => {
|
||||||
data.itemInfo = res.data
|
data.itemInfo = res.data
|
||||||
data.feesList = res.data.other_expenses
|
data.goodsList = res.data.products
|
||||||
let num1 = 0, num2 = 0
|
res.data.products.forEach((item, index) => {
|
||||||
res.data.products.forEach((item) => {
|
|
||||||
if(item.expect_unit_price && item.expect_quantity) {
|
if(item.expect_unit_price && item.expect_quantity) {
|
||||||
item.estimated_order_amount = (item.expect_unit_price * item.expect_quantity).toFixed(2)
|
item.estimated_order_amount = (item.expect_unit_price * item.expect_quantity).toFixed(2)
|
||||||
if(item.prepayment_ratio) {
|
if(item.prepayment_ratio) {
|
||||||
item.advance_payment = ((item.estimated_order_amount * item.prepayment_ratio) / 100).toFixed(2)
|
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)
|
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
|
data.loading = false
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
data.loading = false
|
data.loading = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getLogsList() {
|
||||||
|
get(`/api/purchaseOrder/orderInstanceList`, {purchase_order_id: props.id}).then((res) => {
|
||||||
|
res.data.forEach((itm) => {
|
||||||
|
if(itm.extend && itm.extend.purchaseOrder) {
|
||||||
|
let num1 = 0, num2 = 0, total_num = 0, total = 0
|
||||||
|
itm.extend.purchaseOrder.products.forEach((item, index) => {
|
||||||
|
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 * 100
|
||||||
|
if(item.prepayment_ratio) {
|
||||||
|
num2 += num1 * item.prepayment_ratio
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(itm.type == 3) {
|
||||||
|
item.apply_amount = itm.extend.products[index].apply_amount
|
||||||
|
item.real_quantity = itm.extend.products[index].real_quantity
|
||||||
|
item.real_unit_price = itm.extend.products[index].real_unit_price
|
||||||
|
let real_amount = item.real_unit_price * item.real_quantity
|
||||||
|
total += real_amount * 100
|
||||||
|
total_num += item.apply_amount * 100
|
||||||
|
}
|
||||||
|
item.goods_title = data.goodsList[index] && data.goodsList[index].goods && data.goodsList[index].goods.title
|
||||||
|
item.sku_title = data.goodsList[index] && data.goodsList[index].sku && data.goodsList[index].sku.title
|
||||||
|
})
|
||||||
|
itm.extend.purchaseOrder.other_expenses.forEach((item, index) => {
|
||||||
|
if(item.batch_number == itm.batch_number) {
|
||||||
|
total_num += item.amount * 100
|
||||||
|
total += item.amount * 100
|
||||||
|
|
||||||
|
if(item.amount * 1 > 0) {
|
||||||
|
num1 += item.amount * 100
|
||||||
|
num2 += item.amount * 10000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
itm.apply_total_amount = (total_num / 100).toFixed(2)
|
||||||
|
itm.real_total_amount = (total / 100).toFixed(2)
|
||||||
|
itm.total_amount = (num1 / 100).toFixed(2)
|
||||||
|
itm.pre_pay_amount = (num2 / 10000).toFixed(2)
|
||||||
|
itm.balance_amount = (((itm.total_amount * 100) - (itm.pre_pay_amount * 100)) / 100).toFixed(2)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
data.logsList = res.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
function getCompany() {
|
function getCompany() {
|
||||||
get(`/api/company/all`, {page: 1, pageSize: 1000}).then((res) => {
|
get(`/api/company/all`, {page: 1, pageSize: 1000}).then((res) => {
|
||||||
data.companyList = res.data
|
data.companyList = res.data
|
||||||
@ -192,9 +323,19 @@ export default {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(() => props, (newProps) => {
|
function filteredData(list, row) {
|
||||||
|
if(list) {
|
||||||
|
return list.filter(item => item.batch_number == row.batch_number)
|
||||||
|
} else {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watch(() => props, async (newProps) => {
|
||||||
if (newProps.show) {
|
if (newProps.show) {
|
||||||
getDetail()
|
data.Type = newProps.type
|
||||||
|
await getDetail()
|
||||||
|
getLogsList()
|
||||||
getCompany()
|
getCompany()
|
||||||
getManagerList()
|
getManagerList()
|
||||||
getSupplier()
|
getSupplier()
|
||||||
@ -208,7 +349,9 @@ export default {
|
|||||||
getManagerList,
|
getManagerList,
|
||||||
getSupplier,
|
getSupplier,
|
||||||
getDetail,
|
getDetail,
|
||||||
getAccount
|
getAccount,
|
||||||
|
getLogsList,
|
||||||
|
filteredData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -221,6 +364,11 @@ export default {
|
|||||||
background-size: 80px;
|
background-size: 80px;
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
.block{
|
||||||
|
height: 1px;
|
||||||
|
border-top: 1px dashed #999;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
.icon-bohui{
|
.icon-bohui{
|
||||||
color: #f00;
|
color: #f00;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
@ -237,4 +385,19 @@ export default {
|
|||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.h1Tit{
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-left: 4px solid #409eff;
|
||||||
|
background-color: rgb(236, 245, 255);
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.huibox{
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
padding: 15px;
|
||||||
|
line-height: 30px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.blue{
|
||||||
|
color: #1989fa;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog v-model="showDialog" title="预付款打款审批" width="1250px" @close="closeDialog">
|
<el-dialog v-model="showDialog" title="预付款打款审批" width="1250px" @close="closeDialog">
|
||||||
<approval-detail :id="detail_id" :show="showDialog"></approval-detail>
|
<approval-detail :id="detail_id" :type="2" :show="showDialog"></approval-detail>
|
||||||
<el-form label-position="right" label-width="90px">
|
<el-form label-position="right" label-width="90px">
|
||||||
<el-form-item label="订单合同:">
|
<el-form-item label="订单合同:">
|
||||||
<el-upload
|
<el-upload
|
||||||
|
|||||||
@ -29,6 +29,12 @@ export const whiteList = [
|
|||||||
full_path: 'views/commodity/brand.vue',
|
full_path: 'views/commodity/brand.vue',
|
||||||
component: () => import('views/commodity/brand')
|
component: () => import('views/commodity/brand')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/commodity/cost',
|
||||||
|
name: 'commoditycost',
|
||||||
|
full_path: 'views/commodity/cost.vue',
|
||||||
|
component: () => import('views/commodity/cost')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/purchase/index',
|
path: '/purchase/index',
|
||||||
name: 'purchaselist',
|
name: 'purchaselist',
|
||||||
@ -109,6 +115,7 @@ export const constantRouterComponents = {
|
|||||||
'commoditySku': () => import('views/commodity/sku'),
|
'commoditySku': () => import('views/commodity/sku'),
|
||||||
'combination': () => import('views/commodity/combination'),
|
'combination': () => import('views/commodity/combination'),
|
||||||
'commodityBrand': () => import('views/commodity/brand'),
|
'commodityBrand': () => import('views/commodity/brand'),
|
||||||
|
'commoditycost': () => import('views/commodity/cost'),
|
||||||
'purchaselist': () => import('views/purchase/index'),
|
'purchaselist': () => import('views/purchase/index'),
|
||||||
'warehouse': () => import('views/warehouse/index'),
|
'warehouse': () => import('views/warehouse/index'),
|
||||||
'warehouseIO': () => import('views/warehouse/io'),
|
'warehouseIO': () => import('views/warehouse/io'),
|
||||||
|
|||||||
@ -77,6 +77,12 @@
|
|||||||
<el-form-item label="锁定库存:">
|
<el-form-item label="锁定库存:">
|
||||||
<el-input v-model="itemInfo.lock_in_stock" clearable></el-input>
|
<el-input v-model="itemInfo.lock_in_stock" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="商品成本:">
|
||||||
|
<el-input placeholder="商品成本" v-model="itemInfo.goods_cost" clearable style="width: 250px;"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="运费成本:">
|
||||||
|
<el-input placeholder="运费成本" v-model="itemInfo.freight_cost" clearable style="width: 250px;"></el-input>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="状态:">
|
<el-form-item label="状态:">
|
||||||
<el-radio-group v-model="itemInfo.status">
|
<el-radio-group v-model="itemInfo.status">
|
||||||
<el-radio :label="1">启用</el-radio>
|
<el-radio :label="1">启用</el-radio>
|
||||||
@ -212,6 +218,9 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function commitOpa() {
|
function commitOpa() {
|
||||||
|
if(!data.itemInfo.goods_cost || data.itemInfo.goods_cost * 1 == 0) {
|
||||||
|
return ElMessage({ type: 'info', message: '商品成本必填' })
|
||||||
|
}
|
||||||
data.opa_loading = true
|
data.opa_loading = true
|
||||||
let params = {
|
let params = {
|
||||||
...data.itemInfo
|
...data.itemInfo
|
||||||
|
|||||||
174
src/views/commodity/cost.vue
Normal file
174
src/views/commodity/cost.vue
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
<template>
|
||||||
|
<div class="pageBox">
|
||||||
|
<div class="searchBox">
|
||||||
|
<div class="row">
|
||||||
|
<span class="span">时间:</span>
|
||||||
|
<div class="right">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="pickTime"
|
||||||
|
type="datetimerange"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
format="YYYY-MM-DD HH:mm:ss"
|
||||||
|
style="width: 340px;">
|
||||||
|
</el-date-picker>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<el-button type="primary" @click="handleSearch"><el-icon><Search /></el-icon> 筛选</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<el-card shadow="never">
|
||||||
|
<el-table :data="goodsList" style="width: 100%" border v-loading="loading">
|
||||||
|
<el-table-column prop="target_id" label="ID" width="80" align="center" />
|
||||||
|
<el-table-column prop="title" label="商品名称" header-align="center" />
|
||||||
|
<el-table-column prop="goods_code" label="商品编码" align="center" />
|
||||||
|
|
||||||
|
<el-table-column prop="target_type" label="商品类型" header-align="center">
|
||||||
|
<template #default="scope">
|
||||||
|
<span v-if="scope.row.goods_sku == 'goods_sku'">商品规格</span>
|
||||||
|
<span v-else-if="scope.row.goods_sku == 'combination_goods'">组合商品</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="sum_goods_cost" label="商品ID" align="center" />
|
||||||
|
<el-table-column prop="sum_freight_cost" label="规格名称" align="center" />
|
||||||
|
</el-table>
|
||||||
|
<div class="page-pagination">
|
||||||
|
<el-pagination
|
||||||
|
:current-page="page"
|
||||||
|
background
|
||||||
|
layout="prev, pager, next, sizes, total"
|
||||||
|
:total="total"
|
||||||
|
:page-sizes="[10, 50, 100]"
|
||||||
|
:page-size="pageSize"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"></el-pagination>
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { onMounted, reactive, toRefs } from "vue"
|
||||||
|
import { get } from "@/api/request"
|
||||||
|
import { Search, Plus, Edit, ZoomIn, Delete } from '@element-plus/icons'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Search, Plus, Edit, ZoomIn, Delete
|
||||||
|
},
|
||||||
|
setup() {
|
||||||
|
const data = reactive({
|
||||||
|
pickTime: [],
|
||||||
|
goodsList: [],
|
||||||
|
page: 1,
|
||||||
|
pageSize: 10,
|
||||||
|
total: 0,
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
|
||||||
|
function handleSearch() {
|
||||||
|
data.page = 1
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
const fetchData = () => {
|
||||||
|
data.loading = true
|
||||||
|
let params = {
|
||||||
|
page: data.page,
|
||||||
|
pageSize: data.pageSize,
|
||||||
|
start_date: data.pickTime ? data.pickTime[0] : '',
|
||||||
|
end_date: data.pickTime ? data.pickTime[1] : ''
|
||||||
|
}
|
||||||
|
get(`/api/goods-cost-report`, params).then((res) => {
|
||||||
|
data.goodsList = res.data
|
||||||
|
data.total = res.meta.total
|
||||||
|
data.loading = false
|
||||||
|
}).catch(() => {
|
||||||
|
data.loading = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleCurrentChange(e) {
|
||||||
|
data.page = e
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleSizeChange(e) {
|
||||||
|
data.page = 1
|
||||||
|
data.pageSize = e
|
||||||
|
fetchData()
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
let today = dayjs().format('YYYY-MM-DD')
|
||||||
|
let start = today + ' 00:00:00'
|
||||||
|
let end = today + ' 23:59:59'
|
||||||
|
data.pickTime = [start, end]
|
||||||
|
fetchData()
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
...toRefs(data),
|
||||||
|
handleSearch,
|
||||||
|
handleCurrentChange,
|
||||||
|
handleSizeChange,
|
||||||
|
fetchData
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.searchBox{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 15px 0 0 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
.row{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0 15px 15px 0;
|
||||||
|
.span{
|
||||||
|
display: block;
|
||||||
|
width: 80px;
|
||||||
|
font-size: 14px;
|
||||||
|
text-align: right;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.opaBox{
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
.imgBox{
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
.el-image{
|
||||||
|
width: 60px;
|
||||||
|
height: 60px;
|
||||||
|
border-radius: 4px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.skuBox{
|
||||||
|
border: 1px solid #e5e5e5;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 15px 0;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
background-color: #f3f3f3;
|
||||||
|
.tit{
|
||||||
|
padding-left: 40px;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@ -158,6 +158,13 @@
|
|||||||
<el-radio :label="0">不启用</el-radio>
|
<el-radio :label="0">不启用</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="运费类型:">
|
||||||
|
<el-radio-group v-model="item.freight_type">
|
||||||
|
<el-radio :label="1">有运费</el-radio>
|
||||||
|
<el-radio :label="3">无运费</el-radio>
|
||||||
|
<el-radio :label="2">后补</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="商品成本:">
|
<el-form-item label="商品成本:">
|
||||||
<el-input placeholder="商品成本" v-model="item.goods_cost" clearable style="width: 250px;"></el-input>
|
<el-input placeholder="商品成本" v-model="item.goods_cost" clearable style="width: 250px;"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -306,6 +313,13 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function commitOpa() {
|
function commitOpa() {
|
||||||
|
for (let index = 0; index < data.skusList.length; index++) {
|
||||||
|
let item = data.skusList[index]
|
||||||
|
item.freight_cost = item.freight_cost || 0
|
||||||
|
if(!item.goods_cost || item.goods_cost * 1 == 0) {
|
||||||
|
return ElMessage({ type: 'info', message: '商品成本必填' })
|
||||||
|
}
|
||||||
|
}
|
||||||
data.opa_loading = true
|
data.opa_loading = true
|
||||||
let imgs = []
|
let imgs = []
|
||||||
data.fileList.forEach((it) => {
|
data.fileList.forEach((it) => {
|
||||||
@ -381,7 +395,8 @@ export default {
|
|||||||
sort: 0,
|
sort: 0,
|
||||||
gift: 0,
|
gift: 0,
|
||||||
goods_cost: '',
|
goods_cost: '',
|
||||||
freight_cost: ''
|
freight_cost: '',
|
||||||
|
freight_type: 1
|
||||||
}
|
}
|
||||||
data.skusList.push(sku)
|
data.skusList.push(sku)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -187,6 +187,13 @@
|
|||||||
<el-form-item label="售后锁定库存:">
|
<el-form-item label="售后锁定库存:">
|
||||||
<el-input v-model="itemInfo.after_sale_stock" clearable></el-input>
|
<el-input v-model="itemInfo.after_sale_stock" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="运费类型:">
|
||||||
|
<el-radio-group v-model="itemInfo.freight_type">
|
||||||
|
<el-radio :label="1">有运费</el-radio>
|
||||||
|
<el-radio :label="3">无运费</el-radio>
|
||||||
|
<el-radio :label="2">后补</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-form-item>
|
||||||
<el-form-item label="商品成本:">
|
<el-form-item label="商品成本:">
|
||||||
<el-input v-model="itemInfo.goods_cost" clearable></el-input>
|
<el-input v-model="itemInfo.goods_cost" clearable></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@ -315,7 +322,8 @@ export default {
|
|||||||
data.itemInfo = {
|
data.itemInfo = {
|
||||||
status: 1,
|
status: 1,
|
||||||
sort: 0,
|
sort: 0,
|
||||||
gift: 0
|
gift: 0,
|
||||||
|
freight_type: 1
|
||||||
}
|
}
|
||||||
data.showDialog = true
|
data.showDialog = true
|
||||||
}
|
}
|
||||||
@ -343,6 +351,9 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function commitOpa() {
|
function commitOpa() {
|
||||||
|
if(!data.itemInfo.goods_cost || data.itemInfo.goods_cost * 1 == 0) {
|
||||||
|
return ElMessage({ type: 'info', message: '商品成本必填' })
|
||||||
|
}
|
||||||
data.opa_loading = true
|
data.opa_loading = true
|
||||||
let params = {
|
let params = {
|
||||||
...data.itemInfo
|
...data.itemInfo
|
||||||
|
|||||||
@ -149,7 +149,7 @@
|
|||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<el-dialog v-model="showDetail" width="1400px" title="查看详情">
|
<el-dialog v-model="showDetail" width="1400px" title="查看详情">
|
||||||
<approval-detail :id="curId" :show="showDetail"></approval-detail>
|
<approval-detail :id="curId" :type="1" :show="showDetail"></approval-detail>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 订单审批 -->
|
<!-- 订单审批 -->
|
||||||
|
|||||||
@ -41,6 +41,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<el-table :data="tableData" style="width: 100%" border v-loading="loading">
|
<el-table :data="tableData" style="width: 100%" border v-loading="loading">
|
||||||
<el-table-column prop="id" label="ID" width="80" align="center" />
|
<el-table-column prop="id" label="ID" width="80" align="center" />
|
||||||
|
<el-table-column prop="purchase_order_id" label="采购单ID" width="100" align="center" />
|
||||||
<el-table-column prop="amount" label="审批金额" align="center" />
|
<el-table-column prop="amount" label="审批金额" align="center" />
|
||||||
<el-table-column prop="type" label="审批类型" align="center">
|
<el-table-column prop="type" label="审批类型" align="center">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|||||||
@ -146,6 +146,7 @@
|
|||||||
<el-table-column prop="total_price" label="支付金额" align="center" />
|
<el-table-column prop="total_price" label="支付金额" align="center" />
|
||||||
<el-table-column prop="refund_amount" label="退款金额" align="center" />
|
<el-table-column prop="refund_amount" label="退款金额" align="center" />
|
||||||
<el-table-column prop="total_profit" label="利润" align="center" />
|
<el-table-column prop="total_profit" label="利润" align="center" />
|
||||||
|
<el-table-column prop="order_rate" label="订单占比" align="center" />
|
||||||
<el-table-column label="趋势图" align="center" width="80">
|
<el-table-column label="趋势图" align="center" width="80">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" circle @click="getDataLine(scope.row)" :loading="scope.row.loading"><el-icon><TrendCharts /></el-icon></el-button>
|
<el-button type="primary" circle @click="getDataLine(scope.row)" :loading="scope.row.loading"><el-icon><TrendCharts /></el-icon></el-button>
|
||||||
@ -337,7 +338,7 @@ export default {
|
|||||||
function handleAnalysis(sku_code) {
|
function handleAnalysis(sku_code) {
|
||||||
let end = dayjs().format('YYYY-MM-DD')
|
let end = dayjs().format('YYYY-MM-DD')
|
||||||
let start = dayjs().subtract(30, 'day').format('YYYY-MM-DD')
|
let start = dayjs().subtract(30, 'day').format('YYYY-MM-DD')
|
||||||
data.pickTime = [end, end]
|
data.pickTime = [start, end]
|
||||||
data.itemId = sku_code
|
data.itemId = sku_code
|
||||||
getDialogList()
|
getDialogList()
|
||||||
data.showDialog = true
|
data.showDialog = true
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user