Merge branch 'dev_1.0.0' into dev_1.0.1
# Conflicts: # ruoyi-sip/src/main/java/com/ruoyi/sip/controller/vue/OmsPurchaseOrderController.javadev_1.0.1
commit
cc29006013
|
|
@ -4,8 +4,10 @@ import request from '@/utils/request'
|
||||||
export function listProject(query) {
|
export function listProject(query) {
|
||||||
return request({
|
return request({
|
||||||
url: '/sip/project/vue/list',
|
url: '/sip/project/vue/list',
|
||||||
method: 'get',
|
method: 'post',
|
||||||
params: query
|
data: query,
|
||||||
|
headers: { 'Content-Type': 'multipart/form-data' },
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,4 +72,11 @@ export function editJoinTrial(data) {
|
||||||
needLoading:true
|
needLoading:true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
export function exportSingle(id) {
|
||||||
|
return request({
|
||||||
|
url: `/sip/project/vue/joinTrial/export/${id}`,
|
||||||
|
method: 'get',
|
||||||
|
needLoading:true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,11 @@ export const constantRoutes = [
|
||||||
component: () => import('@/views/approve/finance/payment/approved/index'),
|
component: () => import('@/views/approve/finance/payment/approved/index'),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'paymentRedLog',
|
||||||
|
component: () => import('@/views/approve/finance/paymentRefund/approved/index'),
|
||||||
|
hidden: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'invoiceRedLog',
|
path: 'invoiceRedLog',
|
||||||
component: () => import('@/views/approve/finance/invoiceRed/approved/index'),
|
component: () => import('@/views/approve/finance/invoiceRed/approved/index'),
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="收票单详情">
|
<ApproveLayout ref="approveLayout" title="收票单详情">
|
||||||
<invoice-receipt-detail :data="form"></invoice-receipt-detail>
|
<invoice-receipt-detail :data="form"></invoice-receipt-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收票编号: {{ form.receiptBillCode }}</span>
|
<span> {{ form.ticketBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -75,7 +75,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
@ -152,7 +152,7 @@ export default {
|
||||||
|
|
||||||
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
this.loadApproveHistory(this.form.receiptBillCode);
|
this.loadApproveHistory(this.form.ticketBillCode);
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="invoice-receipt-detail">
|
<div class="invoice-receipt-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">收票申请单</div>
|
||||||
<el-descriptions title="收票单信息" :column="3" border>
|
<el-descriptions title="收票单信息" :column="3" border>
|
||||||
<el-descriptions-item label="采购-收票单编号">{{ data.ticketBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="采购-收票单编号">{{ data.ticketBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="收票单详情">
|
<ApproveLayout ref="approveLayout" title="收票单详情">
|
||||||
<invoice-receipt-detail :data="form"></invoice-receipt-detail>
|
<invoice-receipt-detail :data="form"></invoice-receipt-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收票编号: {{ form.ticketBillCode }}</span>
|
<span>{{ form.ticketBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b><el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
@ -195,7 +195,7 @@ export default {
|
||||||
|
|
||||||
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
this.loadApproveHistory(this.form.receiptBillCode);
|
this.loadApproveHistory(this.form.ticketBillCode);
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="红冲发票详情">
|
<ApproveLayout ref="approveLayout" title="红冲发票详情">
|
||||||
<invoice-red-detail :data="form"></invoice-red-detail>
|
<invoice-red-detail :data="form"></invoice-red-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收票编号: {{ form.receiptBillCode }}</span>
|
<span> {{ form.ticketBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -76,7 +76,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
@ -153,7 +153,7 @@ export default {
|
||||||
|
|
||||||
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
this.loadApproveHistory(this.form.receiptBillCode);
|
this.loadApproveHistory(this.form.ticketBillCode);
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="invoice-red-detail">
|
<div class="invoice-red-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">红冲收票申请单</div>
|
||||||
<el-descriptions title="红冲发票信息" :column="3" border>
|
<el-descriptions title="红冲发票信息" :column="3" border>
|
||||||
<el-descriptions-item label="采购-收票单编号">{{ data.ticketBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="采购-收票单编号">{{ data.ticketBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="票据类型">
|
<el-descriptions-item label="票据类型">
|
||||||
<dict-tag :options="dict.type.finance_invoice_type" :value="data.ticketType"/>
|
<dict-tag :options="dict.type.finance_invoice_type" :value="data.ticketType"/>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
<el-descriptions-item label="含税总价(元)"><span style="color: red">{{ data.totalPriceWithTax }} </span></el-descriptions-item>
|
||||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
<el-descriptions-item label="未税总价(元)"><span style="color: red">{{ data.totalPriceWithTax }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="税额(元)">{{ data.taxAmount }}</el-descriptions-item>
|
<el-descriptions-item label="税额(元)"><span style="color: red">{{ data.taxAmount }} </span></el-descriptions-item>
|
||||||
<el-descriptions-item label="收票时间">{{ data.ticketTime }}</el-descriptions-item>
|
<el-descriptions-item label="收票时间">{{ data.ticketTime }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="制造商开票时间">{{ data.vendorTicketTime }}</el-descriptions-item>
|
<el-descriptions-item label="制造商开票时间">{{ data.vendorTicketTime }}</el-descriptions-item>
|
||||||
<!-- <el-descriptions-item label="备注" :span="3">{{ data.remark }}</el-descriptions-item>-->
|
<!-- <el-descriptions-item label="备注" :span="3">{{ data.remark }}</el-descriptions-item>-->
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,11 @@
|
||||||
<el-table-column label="收票编号" align="center" prop="ticketBillCode" />
|
<el-table-column label="收票编号" align="center" prop="ticketBillCode" />
|
||||||
<el-table-column label="供应商" align="center" prop="vendorName" />
|
<el-table-column label="供应商" align="center" prop="vendorName" />
|
||||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
<el-table-column label="金额" align="center" prop="totalPriceWithTax" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color: red">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- <el-table-column label="登记人" align="center" prop="createUserName" />-->
|
<!-- <el-table-column label="登记人" align="center" prop="createUserName" />-->
|
||||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|
@ -77,7 +81,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="红冲发票详情">
|
<ApproveLayout ref="approveLayout" title="红冲发票详情">
|
||||||
<invoice-red-detail :data="form"></invoice-red-detail>
|
<invoice-red-detail :data="form"></invoice-red-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收票编号: {{ form.ticketBillCode }}</span>
|
<span> {{ form.ticketBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -89,7 +93,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
@ -195,7 +199,7 @@ export default {
|
||||||
|
|
||||||
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
getInvoiceReceipt(this.currentInvoiceReceiptId).then(response => {
|
||||||
this.form = response.data;
|
this.form = response.data;
|
||||||
this.loadApproveHistory(this.form.receiptBillCode);
|
this.loadApproveHistory(this.form.ticketBillCode);
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
}).catch(() => {
|
}).catch(() => {
|
||||||
this.detailLoading = false;
|
this.detailLoading = false;
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="付款单详情">
|
<ApproveLayout ref="approveLayout" title="付款单详情">
|
||||||
<payment-detail :data="form"></payment-detail>
|
<payment-detail :data="form"></payment-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>付款编号: {{ form.paymentBillCode }}</span>
|
<span> {{ form.paymentBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b><el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,11 @@
|
||||||
<el-descriptions title="付款单信息" :column="3" border>
|
<el-descriptions title="付款单信息" :column="3" border>
|
||||||
<el-descriptions-item label="采购-付款单编号">{{ data.paymentBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="采购-付款单编号">{{ data.paymentBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="付款单类型">
|
<el-descriptions-item label="付款条件">
|
||||||
<dict-tag :options="dict.type.payment_bill_type" :value="data.paymentBillType"/>
|
{{data.payType==='0'?'入库付款':'出库付款'}}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="付款周期">
|
||||||
|
{{data.payConfigDay}}天
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,10 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b>
|
||||||
|
|
||||||
|
<el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
|
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,11 @@
|
||||||
<el-table-column label="付款编号" align="center" prop="paymentBillCode" />
|
<el-table-column label="付款编号" align="center" prop="paymentBillCode" />
|
||||||
<el-table-column label="制造商" align="center" prop="vendorName" />
|
<el-table-column label="制造商" align="center" prop="vendorName" />
|
||||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
<el-table-column label="金额" align="center" prop="totalPriceWithTax" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color: red">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|
@ -65,7 +69,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="付款单详情">
|
<ApproveLayout ref="approveLayout" title="付款单详情">
|
||||||
<payment-detail :data="form"></payment-detail>
|
<payment-detail :data="form"></payment-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>付款编号: {{ form.paymentBillCode }}</span>
|
<span> {{ form.paymentBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -77,7 +81,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,18 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="payment-refund-detail">
|
<div class="payment-refund-detail">
|
||||||
<el-descriptions title="付款退款单信息" :column="3" border>
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">退款申请单</div>
|
||||||
|
<el-descriptions title="付款单信息" :column="3" border>
|
||||||
<el-descriptions-item label="采购付款单编号">{{ data.paymentBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="采购付款单编号">{{ data.paymentBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
<el-descriptions-item label="制造商名称">{{ data.vendorName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="付款单类型">
|
<el-descriptions-item label="付款条件">
|
||||||
<dict-tag :options="dict.type.payment_bill_type" :value="data.paymentBillType"/>
|
{{data.payType==='0'?'入库付款':'出库付款'}}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
<el-descriptions-item label="付款周期">
|
||||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
{{data.payConfigDay}}天
|
||||||
<el-descriptions-item label="税额(元)">{{ data.taxAmount }}</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="含税总价(元)"><span style="color: red">{{ data.totalPriceWithTax }}</span></el-descriptions-item>
|
||||||
|
<el-descriptions-item label="未税总价(元)"><span style="color: red">{{ data.totalPriceWithoutTax }}</span></el-descriptions-item>
|
||||||
|
<el-descriptions-item label="税额(元)"><span style="color: red">{{ data.taxAmount }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="支付方式">
|
<el-descriptions-item label="支付方式">
|
||||||
<dict-tag :options="dict.type.payment_method" :value="data.paymentMethod"/>
|
<dict-tag :options="dict.type.payment_method" :value="data.paymentMethod"/>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
@ -48,7 +52,7 @@ export default {
|
||||||
default: () => ({})
|
default: () => ({})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
dicts: ['payment_bill_type', 'payment_method']
|
dicts: ['payment_bill_type', 'payment_method','product_type']
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,11 @@
|
||||||
<el-table-column label="付款编号" align="center" prop="paymentBillCode" />
|
<el-table-column label="付款编号" align="center" prop="paymentBillCode" />
|
||||||
<el-table-column label="制造商" align="center" prop="vendorName" />
|
<el-table-column label="制造商" align="center" prop="vendorName" />
|
||||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
<el-table-column label="金额" align="center" prop="totalPriceWithTax" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color: red">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|
@ -89,7 +93,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
@ -184,7 +188,7 @@ export default {
|
||||||
this.handleQuery();
|
this.handleQuery();
|
||||||
},
|
},
|
||||||
toApproved() {
|
toApproved() {
|
||||||
this.$router.push( '/approve/paymentLog' )
|
this.$router.push( '/approve/paymentRedLog' )
|
||||||
},
|
},
|
||||||
handleApprove(row) {
|
handleApprove(row) {
|
||||||
this.resetDetailForm();
|
this.resetDetailForm();
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||||
<receipt-detail :data="form"></receipt-detail>
|
<receipt-detail :data="form"></receipt-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收款编号: {{ form.receiptBillCode }}</span>
|
<span>{{ form.receiptBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="receipt-detail">
|
<div class="receipt-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">收款申请单</div>
|
||||||
<el-descriptions title="收款单信息" :column="3" border>
|
<el-descriptions title="收款单信息" :column="3" border>
|
||||||
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="收款单详情">
|
<ApproveLayout ref="approveLayout" title="收款单详情">
|
||||||
<receipt-detail :data="form"></receipt-detail>
|
<receipt-detail :data="form"></receipt-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>收款编号: {{ form.receiptBillCode }}</span>
|
<span> {{ form.receiptBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,15 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="receipt-detail">
|
<div class="receipt-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">退款申请单</div>
|
||||||
<el-descriptions title="收款单信息" :column="3" border>
|
<el-descriptions title="收款单信息" :column="3" border>
|
||||||
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="销售-收款单编号">{{ data.receiptBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
<el-descriptions-item :span="2" label="进货商名称">{{ data.partnerName }}</el-descriptions-item>
|
||||||
<!-- <el-descriptions-item label="收款单类型">-->
|
<!-- <el-descriptions-item label="收款单类型">-->
|
||||||
<!-- <dict-tag :options="dict.type.receipt_bill_type" :value="data.receiptBillType"/>-->
|
<!-- <dict-tag :options="dict.type.receipt_bill_type" :value="data.receiptBillType"/>-->
|
||||||
<!-- </el-descriptions-item>-->
|
<!-- </el-descriptions-item>-->
|
||||||
<el-descriptions-item label="含税总价(元)">{{ data.totalPriceWithTax }}</el-descriptions-item>
|
<el-descriptions-item label="含税总价(元)"><span style="color: red">{{ data.totalPriceWithTax }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="未税总价(元)">{{ data.totalPriceWithoutTax }}</el-descriptions-item>
|
<el-descriptions-item label="未税总价(元)"><span style="color: red">{{ data.totalPriceWithoutTax }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="税额(元)">{{ data.taxAmount }}</el-descriptions-item>
|
<el-descriptions-item label="税额(元)"><span style="color: red">{{ data.taxAmount }}</span></el-descriptions-item>
|
||||||
<el-descriptions-item label="支付方式">
|
<el-descriptions-item label="支付方式">
|
||||||
<dict-tag :options="dict.type.payment_method" :value="data.receiptMethod"/>
|
<dict-tag :options="dict.type.payment_method" :value="data.receiptMethod"/>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,11 @@
|
||||||
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
<el-table-column label="收款编号" align="center" prop="receiptBillCode" />
|
||||||
<el-table-column label="进货商" align="center" prop="partnerName" />
|
<el-table-column label="进货商" align="center" prop="partnerName" />
|
||||||
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
<!-- <el-table-column label="项目名称" align="center" prop="projectName" />-->
|
||||||
<el-table-column label="金额" align="center" prop="totalPriceWithTax" />
|
<el-table-column label="金额" align="center" prop="totalPriceWithTax" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color: red">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
<!-- <el-table-column label="汇智负责人" align="center" prop="hzUserName" />-->
|
||||||
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
<el-table-column label="提交日期" align="center" prop="applyTime" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
|
@ -89,7 +93,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b><el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="开票单详情">
|
<ApproveLayout ref="approveLayout" title="开票单详情">
|
||||||
<receivable-invoice-detail :data="form"></receivable-invoice-detail>
|
<receivable-invoice-detail :data="form"></receivable-invoice-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>开票编号: {{ form.invoiceBillCode }}</span>
|
<span>{{ form.invoiceBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -75,7 +75,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="invoice-detail">
|
<div class="invoice-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">开票申请单</div>
|
||||||
<el-descriptions title="开票单信息" :column="3" border>
|
<el-descriptions title="开票单信息" :column="3" border>
|
||||||
<el-descriptions-item label="销售-开票单编号">{{ data.invoiceBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="销售-开票单编号">{{ data.invoiceBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2" label="进货商">{{ data.partnerName }}</el-descriptions-item>
|
<el-descriptions-item :span="2" label="进货商">{{ data.partnerName }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@
|
||||||
<ApproveLayout ref="approveLayout" title="开票单详情">
|
<ApproveLayout ref="approveLayout" title="开票单详情">
|
||||||
<receivable-invoice-detail :data="form"></receivable-invoice-detail>
|
<receivable-invoice-detail :data="form"></receivable-invoice-detail>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<span>开票编号: {{ form.invoiceBillCode }}</span>
|
<span>{{ form.invoiceBillCode }}</span>
|
||||||
</template>
|
</template>
|
||||||
</ApproveLayout>
|
</ApproveLayout>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -79,7 +79,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="invoice-detail">
|
<div class="invoice-detail">
|
||||||
|
<div style="text-align: center;font-weight:bold;font-size: 25px;">红冲开票申请单</div>
|
||||||
<el-descriptions title="开票单信息" :column="3" border>
|
<el-descriptions title="开票单信息" :column="3" border>
|
||||||
<el-descriptions-item label="销售-开票单编号">{{ data.invoiceBillCode }}</el-descriptions-item>
|
<el-descriptions-item label="销售-开票单编号">{{ data.invoiceBillCode }}</el-descriptions-item>
|
||||||
<el-descriptions-item :span="2" label="进货商">{{ data.partnerName }}</el-descriptions-item>
|
<el-descriptions-item :span="2" label="进货商">{{ data.partnerName }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -91,7 +91,7 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<h4>{{ log.approveOpinion }}</h4>
|
<h4>{{ log.approveOpinion }}</h4>
|
||||||
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
<p><b>操作人:</b> {{ log.approveUserName }} </p>
|
||||||
<p><b>审批状态:</b> <el-tag size="small">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
<p><b>审批状态:</b> <el-tag :type="log.approveStatus == '3' ? 'success' : log.approveStatus == '2' ? 'danger' : 'info'">{{ getStatusText(log.approveStatus) }}</el-tag></p>
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-timeline-item>
|
</el-timeline-item>
|
||||||
</el-timeline>
|
</el-timeline>
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,8 @@ export default {
|
||||||
projectCode: null,
|
projectCode: null,
|
||||||
projectName: null,
|
projectName: null,
|
||||||
partnerName: null,
|
partnerName: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 列信息
|
// 列信息
|
||||||
columns: {
|
columns: {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<el-dialog title="申请开票" :visible.sync="visible" width="1000px" append-to-body @close="handleClose"
|
<el-dialog title="申请开票" :visible.sync="visible" width="1000px" append-to-body @close="handleClose"
|
||||||
custom-class="invoice-dialog">
|
custom-class="invoice-dialog">
|
||||||
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="110px" class="invoice-form">
|
<el-form ref="form" :model="form" :rules="rules" :disabled="isRedRush" size="small" label-width="110px" class="invoice-form">
|
||||||
|
|
||||||
<!-- 1. 顶部:发票类型与票号日期 -->
|
<!-- 1. 顶部:发票类型与票号日期 -->
|
||||||
<div class="invoice-header">
|
<div class="invoice-header">
|
||||||
|
|
@ -142,14 +142,14 @@
|
||||||
<span v-else>{{ scope.row.taxAmount }}</span>
|
<span v-else>{{ scope.row.taxAmount }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" width="60" align="center">
|
<!-- <el-table-column label="操作" width="60" align="center">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<i class="el-icon-plus table-icon" @click="addDetailRow"
|
<!-- <i class="el-icon-plus table-icon" @click="addDetailRow"-->
|
||||||
v-if="scope.$index === form.detailItemList.length - 1"></i>
|
<!-- v-if="scope.$index === form.detailItemList.length - 1"></i>-->
|
||||||
<i class="el-icon-minus table-icon" @click="removeDetailRow(scope.$index)"
|
<!-- <i class="el-icon-minus table-icon" @click="removeDetailRow(scope.$index)"-->
|
||||||
v-if="form.detailItemList.length > 1" style="margin-left:5px"></i>
|
<!-- v-if="form.detailItemList.length > 1" style="margin-left:5px"></i>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -677,7 +677,11 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.condensed-item {
|
.condensed-item {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.condensed-item ::v-deep .el-form-item__error {
|
||||||
|
z-index: 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
.condensed-item ::v-deep .el-form-item__label {
|
.condensed-item ::v-deep .el-form-item__label {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
title="收票单详情"
|
:title="detail.invoiceBillType==='RED_RUSH'?'红冲开票详情':'开票单详情'"
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
direction="rtl"
|
direction="rtl"
|
||||||
size="70%"
|
size="70%"
|
||||||
|
|
@ -23,25 +23,25 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">含税总价(元): {{ detail.totalPriceWithTax }}</div>
|
<div class="detail-item">含税总价(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ detail.totalPriceWithTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">未税总价(元): {{ detail.totalPriceWithoutTax }}</div>
|
<div class="detail-item">未税总价(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ detail.totalPriceWithoutTax }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">税额(元): {{ $calc.sub(detail.totalPriceWithTax,detail.totalPriceWithoutTax) }}</div>
|
<div class="detail-item">税额(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}">{{ $calc.sub(detail.totalPriceWithTax,detail.totalPriceWithoutTax) }} </span></div>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票含税总价(元): {{ detail.invoicePriceWithTax }}</div>
|
<div class="detail-item">发票含税总价(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"> {{ detail.invoicePriceWithTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票未税总价(元): {{ detail.invoicePriceWithoutTax }}</div>
|
<div class="detail-item">发票未税总价(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"{{ detail.invoicePriceWithoutTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票税额(元): {{ $calc.sub(detail.invoicePriceWithTax,detail.invoicePriceWithoutTax) }}</div>
|
<div class="detail-item">发票税额(元): <span :class="{'red-text':detail.invoiceBillType==='RED_RUSH'}"{{ $calc.sub(detail.invoicePriceWithTax,detail.invoicePriceWithoutTax) }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
@ -118,8 +118,16 @@
|
||||||
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
||||||
<el-table-column property="receivableBillCode" label="销售-应收单编号"></el-table-column>
|
<el-table-column property="receivableBillCode" label="销售-应收单编号"></el-table-column>
|
||||||
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
|
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
|
||||||
<el-table-column property="receiptAmount" label="本次开票金额"></el-table-column>
|
<el-table-column property="receiptAmount" label="本次开票金额">
|
||||||
<el-table-column property="receiptRate" label="本次开票比例(%)"></el-table-column>
|
<template slot-scope="scope">
|
||||||
|
<span>{{ Math.abs(scope.row.receiptAmount) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column property="receiptRate" label="本次开票比例(%)">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ Math.abs(scope.row.receiptRate) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -171,6 +179,9 @@ export default {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.red-text{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
.section {
|
.section {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,14 +119,16 @@
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
|
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
|
||||||
<el-form-item label="票据类型" prop="invoiceType" required>
|
<el-form-item label="票据类型" prop="invoiceType" required>
|
||||||
<el-select v-model="uploadForm.invoiceType" placeholder="请选择票据类型" @change="handleTypeChange">
|
<dict-tag :options="dict.type.finance_invoice_type" :value="uploadForm.invoiceType"/>
|
||||||
<el-option
|
<!-- <el-select v-model="uploadForm.invoiceType" placeholder="请选择票据类型" @change="handleTypeChange">-->
|
||||||
v-for="item in dict.type.finance_invoice_type"
|
<!-- -->
|
||||||
:key="item.value"
|
<!-- <el-option-->
|
||||||
:label="item.label"
|
<!-- v-for="item in dict.type.finance_invoice_type"-->
|
||||||
:value="item.value"
|
<!-- :key="item.value"-->
|
||||||
></el-option>
|
<!-- :label="item.label"-->
|
||||||
</el-select>
|
<!-- :value="item.value"-->
|
||||||
|
<!-- ></el-option>-->
|
||||||
|
<!-- </el-select>-->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="开票附件" prop="file" >
|
<el-form-item label="开票附件" prop="file" >
|
||||||
<div style="display: flex; flex-direction: column; align-items: flex-start;">
|
<div style="display: flex; flex-direction: column; align-items: flex-start;">
|
||||||
|
|
@ -272,7 +274,7 @@ export default {
|
||||||
},
|
},
|
||||||
groupedAttachments() {
|
groupedAttachments() {
|
||||||
if (!this.attachments || this.attachments.length === 0) return [];
|
if (!this.attachments || this.attachments.length === 0) return [];
|
||||||
|
|
||||||
const groups = {};
|
const groups = {};
|
||||||
this.attachments.forEach(att => {
|
this.attachments.forEach(att => {
|
||||||
const time = att.createTime;
|
const time = att.createTime;
|
||||||
|
|
@ -285,7 +287,7 @@ export default {
|
||||||
}
|
}
|
||||||
groups[time].items.push(att);
|
groups[time].items.push(att);
|
||||||
});
|
});
|
||||||
|
|
||||||
return Object.values(groups).sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
|
return Object.values(groups).sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
|
||||||
},
|
},
|
||||||
canUpload() {
|
canUpload() {
|
||||||
|
|
|
||||||
|
|
@ -134,18 +134,30 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="300" />
|
<el-table-column label="进货商名称" align="center" prop="partnerName" width="300" />
|
||||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" />
|
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" >
|
||||||
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" width="180"/>
|
<template slot-scope="scope">
|
||||||
<el-table-column label="发票未税总价(元)" align="center" prop="invoicePriceWithoutTax" width="180"/>
|
<span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span :style="scope.row.totalPriceWithoutTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithoutTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="发票未税总价(元)" align="center" prop="invoicePriceWithoutTax" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ scope.row.invoicePriceWithoutTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="税额(元)" align="center" prop="taxAmount" width="180">
|
<el-table-column label="税额(元)" align="center" prop="taxAmount" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.totalPriceWithoutTax) }}</span>
|
<span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.totalPriceWithoutTax) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="发票税额(元)" align="center" prop="invoicePriceTax" width="180">
|
<el-table-column label="发票税额(元)" align="center" prop="invoicePriceTax" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.invoicePriceWithoutTax) }}</span>
|
<span :style="scope.row.invoicePriceWithoutTax<0?{color:'red'}:{}">{{ $calc.sub(scope.row.totalPriceWithTax, scope.row.invoicePriceWithoutTax) }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="开票状态" align="center" prop="invoiceStatus" width="150" >
|
<el-table-column label="开票状态" align="center" prop="invoiceStatus" width="150" >
|
||||||
|
|
|
||||||
|
|
@ -270,7 +270,9 @@ export default {
|
||||||
createTimeStart: null,
|
createTimeStart: null,
|
||||||
createTimeEnd: null,
|
createTimeEnd: null,
|
||||||
estimatedPaymentTimeStart: null,
|
estimatedPaymentTimeStart: null,
|
||||||
estimatedPaymentTimeEnd: null
|
estimatedPaymentTimeEnd: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 选中行数据
|
// 选中行数据
|
||||||
selectedPayableRows: [],
|
selectedPayableRows: [],
|
||||||
|
|
|
||||||
|
|
@ -97,20 +97,20 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
||||||
<el-table-column label="金额" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
<el-table-column label="毛利" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
||||||
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">
|
<!-- <el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
<el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">
|
<!-- <el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
|
|
||||||
<!-- 应付 -->
|
<!-- 应付 -->
|
||||||
<el-table-column label="应付单" align="center">
|
<el-table-column label="应付单" align="center">
|
||||||
|
|
@ -199,6 +199,8 @@ export default {
|
||||||
chargeStatus: null,
|
chargeStatus: null,
|
||||||
paymentStatus: null,
|
paymentStatus: null,
|
||||||
ticketStatus: null,
|
ticketStatus: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 列信息
|
// 列信息
|
||||||
columns: {
|
columns: {
|
||||||
|
|
@ -208,8 +210,8 @@ export default {
|
||||||
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
||||||
grossProfit: { label: "毛利", visible: true },
|
grossProfit: { label: "毛利", visible: true },
|
||||||
grossProfitRate: { label: "毛利率", visible: true },
|
grossProfitRate: { label: "毛利率", visible: true },
|
||||||
bizChargeDate: { label: "业务计收时间", visible: true },
|
// bizChargeDate: { label: "业务计收时间", visible: true },
|
||||||
financeChargeDate: { label: "财务计收时间", visible: true },
|
// financeChargeDate: { label: "财务计收时间", visible: true },
|
||||||
payableWithTax: { label: "应付含税总价", visible: true },
|
payableWithTax: { label: "应付含税总价", visible: true },
|
||||||
payableWithoutTax: { label: "应付未税总价", visible: true },
|
payableWithoutTax: { label: "应付未税总价", visible: true },
|
||||||
payableTax: { label: "应付税额", visible: true },
|
payableTax: { label: "应付税额", visible: true },
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
title="采购-付款单详情"
|
:title="detail.paymentBillType==='REFUND'?'退款单详情':'付款单详情'"
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
direction="rtl"
|
direction="rtl"
|
||||||
size="70%"
|
size="70%"
|
||||||
|
|
@ -24,13 +24,13 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">含税总价(元): {{ detail.totalPriceWithTax }}</div>
|
<div class="detail-item">含税总价(元):<span :class="{'red-text':detail.paymentBillType==='REFUND'}"> {{ detail.totalPriceWithTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">未税总价(元): {{ detail.totalPriceWithoutTax }}</div>
|
<div class="detail-item">未税总价(元): <span :class="{'red-text':detail.paymentBillType==='REFUND'}">{{ detail.totalPriceWithoutTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">税额(元): {{ detail.taxAmount }}</div>
|
<div class="detail-item">税额(元): <span :class="{'red-text':detail.paymentBillType==='REFUND'}">{{ detail.taxAmount }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
@ -96,8 +96,16 @@
|
||||||
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
||||||
<el-table-column property="payableBillCode" label="采购-应付单编号"></el-table-column>
|
<el-table-column property="payableBillCode" label="采购-应付单编号"></el-table-column>
|
||||||
<el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column>
|
<el-table-column property="totalPriceWithTax" label="含税总价"></el-table-column>
|
||||||
<el-table-column property="paymentAmount" label="本次付款金额"></el-table-column>
|
<el-table-column property="paymentAmount" label="本次付款金额">
|
||||||
<el-table-column property="paymentRate" label="本次付款比例"></el-table-column>
|
<template slot-scope="scope">
|
||||||
|
<span>{{ Math.abs(scope.row.paymentAmount) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column property="paymentRate" label="本次付款比例">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span >{{ Math.abs(scope.row.paymentRate) }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -164,6 +172,9 @@ export default {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.red-text{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
.grid-content {
|
.grid-content {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
min-height: 36px;
|
min-height: 36px;
|
||||||
|
|
|
||||||
|
|
@ -327,6 +327,8 @@ export default {
|
||||||
approveStatus: null,
|
approveStatus: null,
|
||||||
paymentStatus: null,
|
paymentStatus: null,
|
||||||
approveNode: null,
|
approveNode: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 日期范围
|
// 日期范围
|
||||||
dateRangeApproval: [],
|
dateRangeApproval: [],
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
title="收票单详情"
|
:title="detail.ticketBillType==='RED_RUSH'?'红冲收票详情':'收票单详情'"
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
direction="rtl"
|
direction="rtl"
|
||||||
size="70%"
|
size="70%"
|
||||||
|
|
@ -26,28 +26,28 @@
|
||||||
<div class="detail-item">制造商名称: {{ detail.vendorName }}</div>
|
<div class="detail-item">制造商名称: {{ detail.vendorName }}</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">含税总价: {{ detail.totalPriceWithTax }}</div>
|
<div class="detail-item">含税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.totalPriceWithTax }}</span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">未税总价: {{ detail.totalPriceWithoutTax }}</div>
|
<div class="detail-item">未税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.totalPriceWithoutTax }}</span></div>
|
||||||
|
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">税额: {{ detail.taxAmount }}</div>
|
<div class="detail-item">税额: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.taxAmount }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票含税总价: {{ detail.ticketPriceWithTax || '-'}}</div>
|
<div class="detail-item">发票含税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketPriceWithTax || '-'}} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票未税总价: {{ detail.ticketPriceWithoutTax || '-'}}</div>
|
<div class="detail-item">发票未税总价: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketPriceWithoutTax || '-'}} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">发票税额: {{ detail.ticketAmount }}</div>
|
<div class="detail-item">发票税额: <span :class="{'red-text':detail.ticketBillType==='RED_RUSH'}">{{ detail.ticketAmount }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">收票状态:
|
<div class="detail-item">收票状态:
|
||||||
|
|
@ -134,6 +134,9 @@ export default {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
.red-text{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
|
||||||
.section {
|
.section {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="receipt-dialog-body">
|
<div v-else class="receipt-dialog-body">
|
||||||
<div v-if="canUpload" class="upload-btn-container">
|
<div v-if="canUpload" class="upload-btn-container">
|
||||||
<el-button type="primary" icon="el-icon-upload" @click="openUploadDialog">上传{{ titleText }}</el-button>
|
<el-button type="primary" icon="el-icon-upload" v-hasPermi="['finance:receipt:upload']" @click="openUploadDialog">上传{{ titleText }}</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-timeline v-if="attachments.length > 0">
|
<el-timeline v-if="attachments.length > 0">
|
||||||
|
|
@ -114,14 +114,15 @@
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
|
<el-form :model="uploadForm" ref="uploadForm" :rules="rules" label-width="120px" size="medium" >
|
||||||
<el-form-item label="票据类型" prop="ticketType" required>
|
<el-form-item label="票据类型" prop="ticketType" required>
|
||||||
<el-select v-model="uploadForm.ticketType" placeholder="请选择票据类型">
|
<dict-tag :options="dict.type.finance_invoice_type" :value="uploadForm.ticketType"/>
|
||||||
<el-option
|
<!-- <el-select v-model="uploadForm.ticketType" placeholder="请选择票据类型">-->
|
||||||
v-for="item in dict.type.finance_invoice_type"
|
<!-- <el-option-->
|
||||||
:key="item.value"
|
<!-- v-for="item in dict.type.finance_invoice_type"-->
|
||||||
:label="item.label"
|
<!-- :key="item.value"-->
|
||||||
:value="item.value"
|
<!-- :label="item.label"-->
|
||||||
></el-option>
|
<!-- :value="item.value"-->
|
||||||
</el-select>
|
<!-- ></el-option>-->
|
||||||
|
<!-- </el-select>-->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="收票附件" prop="file" required>
|
<el-form-item label="收票附件" prop="file" required>
|
||||||
<div style="display: flex; flex-direction: column; align-items: flex-start;">
|
<div style="display: flex; flex-direction: column; align-items: flex-start;">
|
||||||
|
|
@ -325,7 +326,7 @@ export default {
|
||||||
fetchAttachments() {
|
fetchAttachments() {
|
||||||
if (!this.receiptData.id) return;
|
if (!this.receiptData.id) return;
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
getReceiptAttachments(this.receiptData.id, { type: 'receipt' })
|
getReceiptAttachments(this.receiptData.id, { type: 'ticket' })
|
||||||
.then(response => {
|
.then(response => {
|
||||||
const data = response.data || [];
|
const data = response.data || [];
|
||||||
data.sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
|
data.sort((a, b) => new Date(b.createTime) - new Date(a.createTime));
|
||||||
|
|
|
||||||
|
|
@ -140,9 +140,21 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="制造商名称" align="center" prop="vendorName" />
|
<el-table-column label="制造商名称" align="center" prop="vendorName" />
|
||||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" />
|
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" >
|
||||||
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" />
|
<template slot-scope="scope">
|
||||||
<el-table-column label="税额(元)" align="center" prop="taxAmount" />
|
<span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="未税总价(元)" align="center" prop="totalPriceWithoutTax" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span :style="scope.row.totalPriceWithoutTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithoutTax }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="税额(元)" align="center" prop="taxAmount" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span :style="scope.row.taxAmount<0?{color:'red'}:{}">{{ scope.row.taxAmount }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<!-- <el-table-column label="收票单类型" align="center" prop="ticketBillType" >-->
|
<!-- <el-table-column label="收票单类型" align="center" prop="ticketBillType" >-->
|
||||||
<!-- <template slot-scope="scope">-->
|
<!-- <template slot-scope="scope">-->
|
||||||
<!-- <dict-tag :options="dict.type.ticket_bill_type" :value="scope.row.ticketBillType"/>-->
|
<!-- <dict-tag :options="dict.type.ticket_bill_type" :value="scope.row.ticketBillType"/>-->
|
||||||
|
|
@ -273,6 +285,8 @@ export default {
|
||||||
approveStatus: null,
|
approveStatus: null,
|
||||||
ticketStatus: null,
|
ticketStatus: null,
|
||||||
approveNode: null,
|
approveNode: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 日期范围
|
// 日期范围
|
||||||
dateRangeApproval: [],
|
dateRangeApproval: [],
|
||||||
|
|
|
||||||
|
|
@ -137,10 +137,10 @@
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-edit"
|
icon="el-icon-edit"
|
||||||
v-show="scope.row.unreceivedAmount!==0"
|
v-show="scope.row.uninvoicedAmount!==0"
|
||||||
@click="handleGeneratedInvoice(scope.row)"
|
@click="handleGeneratedInvoice(scope.row)"
|
||||||
v-hasPermi="['finance:invoice:generate']"
|
v-hasPermi="['finance:invoice:generate']"
|
||||||
>生成收票单</el-button>
|
>生成开票单</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
@ -205,7 +205,9 @@ export default {
|
||||||
createTimeStart: null,
|
createTimeStart: null,
|
||||||
createTimeEnd: null,
|
createTimeEnd: null,
|
||||||
estimatedReceiptTimeStart: null,
|
estimatedReceiptTimeStart: null,
|
||||||
estimatedReceiptTimeEnd: null
|
estimatedReceiptTimeEnd: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 选中行数据
|
// 选中行数据
|
||||||
selectedReceivableRows: [],
|
selectedReceivableRows: [],
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
<!-- Left Side: Form Data -->
|
<!-- Left Side: Form Data -->
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<div class="form-tip">请选择客户的支付方式并确认客户打款的账户信息,提交至财务审批</div>
|
<div class="form-tip">请选择客户的支付方式并确认客户打款的账户信息,提交至财务审批</div>
|
||||||
<el-form ref="form" :model="form" label-width="120px" size="small">
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
|
||||||
<el-form-item label="支付方式" prop="receiptMethod">
|
<el-form-item label="支付方式" prop="receiptMethod">
|
||||||
<el-select v-model="form.receiptMethod" placeholder="请选择支付方式" style="width: 100%">
|
<el-select v-model="form.receiptMethod" placeholder="请选择支付方式" style="width: 100%">
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
<el-form-item label="账户名称" prop="receiptAccountName">
|
<el-form-item label="账户名称" prop="receiptAccountName">
|
||||||
<el-input v-model="form.receiptAccountName" placeholder="请输入账户名称"/>
|
<el-input v-model="form.receiptAccountName" placeholder="请输入账户名称"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="银行账号" prop="payBankNumber">
|
<el-form-item label="银行账号" prop="receiptBankNumber">
|
||||||
<el-input v-model="form.receiptBankNumber" placeholder="请输入银行账号"/>
|
<el-input v-model="form.receiptBankNumber" placeholder="请输入银行账号"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="银行开户行" prop="receiptBankOpenAddress">
|
<el-form-item label="银行开户行" prop="receiptBankOpenAddress">
|
||||||
|
|
@ -117,6 +117,29 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
rules: {
|
||||||
|
receiptMethod: [
|
||||||
|
{ required: true, message: "请选择支付方式", trigger: "change" }
|
||||||
|
],
|
||||||
|
receiptAccountName: [
|
||||||
|
{ required: true, message: "请输入账户名称", trigger: "blur" }
|
||||||
|
],
|
||||||
|
receiptBankNumber: [
|
||||||
|
{ required: true, message: "请输入银行账号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
receiptBankOpenAddress: [
|
||||||
|
{ required: true, message: "请输入银行开户行", trigger: "blur" }
|
||||||
|
],
|
||||||
|
bankNumber: [
|
||||||
|
{ required: true, message: "请输入银行行号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
file: [
|
||||||
|
{ required: true, message: "请上传客户付款图", trigger: "change" }
|
||||||
|
],
|
||||||
|
confirmAmount: [
|
||||||
|
{ required: true, message: "请输入确认收款金额", trigger: "blur" }
|
||||||
|
]
|
||||||
|
},
|
||||||
form: {
|
form: {
|
||||||
receiptMethod: null,
|
receiptMethod: null,
|
||||||
receiptAccountName: null,
|
receiptAccountName: null,
|
||||||
|
|
@ -196,11 +219,13 @@ export default {
|
||||||
this.form.fileName = file.name;
|
this.form.fileName = file.name;
|
||||||
this.isPreviewPdf = file.raw.type === 'application/pdf';
|
this.isPreviewPdf = file.raw.type === 'application/pdf';
|
||||||
this.previewUrl = URL.createObjectURL(file.raw);
|
this.previewUrl = URL.createObjectURL(file.raw);
|
||||||
|
this.$refs.form.validateField('file');
|
||||||
},
|
},
|
||||||
handleFileRemove() {
|
handleFileRemove() {
|
||||||
this.form.file = null;
|
this.form.file = null;
|
||||||
this.form.fileName = '';
|
this.form.fileName = '';
|
||||||
this.previewUrl = '';
|
this.previewUrl = '';
|
||||||
|
this.$refs.form.validateField('file');
|
||||||
},
|
},
|
||||||
handleSubmit() {
|
handleSubmit() {
|
||||||
if (this.$calc.sub(this.form.totalPriceWithTax,this.form.confirmAmount)!=0){
|
if (this.$calc.sub(this.form.totalPriceWithTax,this.form.confirmAmount)!=0){
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<el-dialog title="申请退款" :visible.sync="visible" width="600px" append-to-body :before-close="handleClose"
|
<el-dialog title="申请退款" :visible.sync="visible" width="600px" append-to-body :before-close="handleClose"
|
||||||
custom-class="apply-refund-dialog">
|
custom-class="apply-refund-dialog">
|
||||||
<div class="form-tip">请选择客户的退款方式并确认客户收款的账户信息,提交至财务审批</div>
|
<div class="form-tip">请选择客户的退款方式并确认客户收款的账户信息,提交至财务审批</div>
|
||||||
<el-form ref="form" :model="form" label-width="120px" size="small">
|
<el-form ref="form" :model="form" :rules="rules" label-width="120px" size="small">
|
||||||
<el-form-item label="退款方式" prop="receiptMethod">
|
<el-form-item label="退款方式" prop="receiptMethod">
|
||||||
<el-select v-model="form.receiptMethod" placeholder="请选择退款方式" style="width: 100%">
|
<el-select v-model="form.receiptMethod" placeholder="请选择退款方式" style="width: 100%">
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -80,6 +80,26 @@ export default {
|
||||||
confirmAmount: null,
|
confirmAmount: null,
|
||||||
remark: null,
|
remark: null,
|
||||||
id: this.receiptData.id
|
id: this.receiptData.id
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
receiptMethod: [
|
||||||
|
{ required: true, message: "请选择退款方式", trigger: "change" }
|
||||||
|
],
|
||||||
|
receiptAccountName: [
|
||||||
|
{ required: true, message: "请输入账户名称", trigger: "blur" }
|
||||||
|
],
|
||||||
|
receiptBankNumber: [
|
||||||
|
{ required: true, message: "请输入银行账号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
receiptBankOpenAddress: [
|
||||||
|
{ required: true, message: "请输入银行开户行", trigger: "blur" }
|
||||||
|
],
|
||||||
|
bankNumber: [
|
||||||
|
{ required: true, message: "请输入银行行号", trigger: "blur" }
|
||||||
|
],
|
||||||
|
confirmAmount: [
|
||||||
|
{ required: true, message: "请输入确认退款金额", trigger: "blur" }
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
@ -124,14 +144,51 @@ export default {
|
||||||
handleSubmit() {
|
handleSubmit() {
|
||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
// Send as JSON since no file upload
|
const checkFields = ['receiptMethod', 'receiptAccountName', 'receiptBankNumber', 'receiptBankOpenAddress', 'bankNumber'];
|
||||||
submitRefund(this.form).then(response => {
|
let isDiff = false;
|
||||||
this.$modal.msgSuccess("申请退款提交成功");
|
let diffMsg = [];
|
||||||
this.$emit("submit");
|
|
||||||
this.handleClose();
|
checkFields.forEach(field => {
|
||||||
}).catch(error => {
|
// Use loose equality to handle null vs undefined or number vs string issues if necessary,
|
||||||
console.error("申请退款提交失败", error);
|
// but stricter is better if types are consistent.
|
||||||
|
// Given Vue forms often use strings, and receiptData might be from API,
|
||||||
|
// we'll try to match somewhat loosely or ensure strings.
|
||||||
|
const formVal = this.form[field];
|
||||||
|
const originVal = this.receiptData[field];
|
||||||
|
|
||||||
|
// Simple comparison
|
||||||
|
if (formVal != originVal) {
|
||||||
|
isDiff = true;
|
||||||
|
// Get label for friendly message
|
||||||
|
let label = "";
|
||||||
|
switch(field) {
|
||||||
|
case 'receiptMethod': label = "退款方式"; break;
|
||||||
|
case 'receiptAccountName': label = "账户名称"; break;
|
||||||
|
case 'receiptBankNumber': label = "银行账号"; break;
|
||||||
|
case 'receiptBankOpenAddress': label = "银行开户行"; break;
|
||||||
|
case 'bankNumber': label = "银行行号"; break;
|
||||||
|
}
|
||||||
|
diffMsg.push(label);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const doSubmit = () => {
|
||||||
|
submitRefund(this.form).then(response => {
|
||||||
|
this.$modal.msgSuccess("申请退款提交成功");
|
||||||
|
this.$emit("submit");
|
||||||
|
this.handleClose();
|
||||||
|
}).catch(error => {
|
||||||
|
console.error("申请退款提交失败", error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isDiff) {
|
||||||
|
this.$modal.confirm(`检测到以下信息与原收款信息不一致:${diffMsg.join('、')}。确认要提交吗?`).then(() => {
|
||||||
|
doSubmit();
|
||||||
|
}).catch(() => {});
|
||||||
|
} else {
|
||||||
|
doSubmit();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<el-drawer
|
<el-drawer
|
||||||
title="收款单详情"
|
:title="detail.receiptBillType==='REFUND'?'退款单详情':'收款单详情'"
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
direction="rtl"
|
direction="rtl"
|
||||||
size="70%"
|
size="70%"
|
||||||
|
|
@ -24,13 +24,13 @@
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">含税总价(元): {{ detail.totalPriceWithTax }}</div>
|
<div class="detail-item">含税总价(元):<span :class="{'red-text':detail.receiptBillType==='REFUND'}"> {{ detail.totalPriceWithTax }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">未税总价(元): {{ detail.totalPriceWithoutTax }}</div>
|
<div class="detail-item">未税总价(元): <span :class="{'red-text':detail.receiptBillType==='REFUND'}">{{ detail.totalPriceWithoutTax }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<div class="detail-item">税额(元): {{ detail.taxAmount }}</div>
|
<div class="detail-item">税额(元): <span :class="{'red-text':detail.receiptBillType==='REFUND'}">{{ detail.taxAmount }} </span></div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
@ -107,8 +107,20 @@
|
||||||
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
<el-table-column property="projectName" label="项目名称"></el-table-column>
|
||||||
<el-table-column property="receivableBillCode" label="应收单编号"></el-table-column>
|
<el-table-column property="receivableBillCode" label="应收单编号"></el-table-column>
|
||||||
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
|
<el-table-column property="totalPriceWithTax" label="含税总价(元)"></el-table-column>
|
||||||
<el-table-column property="receiptAmount" label="本次收款金额"></el-table-column>
|
<el-table-column property="receiptAmount" label="本次收款金额">
|
||||||
<el-table-column property="receiptRate" label="本次收款比例(%)"></el-table-column>
|
<template slot-scope="scope">
|
||||||
|
<span >
|
||||||
|
{{ Math.abs(scope.row.receiptAmount) }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column property="receiptRate" label="本次收款比例(%)">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span >
|
||||||
|
{{ Math.abs(scope.row.receiptRate) }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -177,6 +189,9 @@ export default {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.red-text{
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
.section {
|
.section {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="receipt-dialog-body">
|
<div v-else class="receipt-dialog-body">
|
||||||
<div v-if="canUpload" class="upload-btn-container">
|
<div v-if="canUpload" class="upload-btn-container">
|
||||||
<el-button type="primary" icon="el-icon-upload" @click="openUploadDialog">上传{{ titleText }}</el-button>
|
<el-button type="primary" icon="el-icon-upload" v-hasPermi="['finance:receive:upload']" @click="openUploadDialog">上传{{ titleText }}</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-timeline v-if="attachments.length > 0">
|
<el-timeline v-if="attachments.length > 0">
|
||||||
|
|
|
||||||
|
|
@ -130,7 +130,11 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="进货商名称" align="center" prop="partnerName" width="230" />
|
<el-table-column label="进货商名称" align="center" prop="partnerName" width="230" />
|
||||||
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" />
|
<el-table-column label="含税总价(元)" align="center" prop="totalPriceWithTax" width="180" >
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span><span :style="scope.row.totalPriceWithTax<0?{color:'red'}:{}">{{ scope.row.totalPriceWithTax }} </span></span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="receiptBillType" width="180">
|
<el-table-column label="备注" align="center" prop="receiptBillType" width="180">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<dict-tag :options="dict.type.receipt_bill_type" :value="scope.row.receiptBillType"/>
|
<dict-tag :options="dict.type.receipt_bill_type" :value="scope.row.receiptBillType"/>
|
||||||
|
|
@ -173,7 +177,7 @@
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-money"
|
icon="el-icon-money"
|
||||||
v-show="scope.row.receiptBillType==='FROM_RECEIVABLE' && scope.row.receiptStatus==='1' && scope.row.approveStatus==='0'"
|
v-show=" scope.row.receiptStatus==='1' && scope.row.approveStatus==='0'"
|
||||||
@click="handleApplyPayment(scope.row)"
|
@click="handleApplyPayment(scope.row)"
|
||||||
>申请收款</el-button>
|
>申请收款</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
|
@ -265,6 +269,8 @@ export default {
|
||||||
approveStatus: null,
|
approveStatus: null,
|
||||||
receiptStatus: null,
|
receiptStatus: null,
|
||||||
approveNode: null,
|
approveNode: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 日期范围
|
// 日期范围
|
||||||
dateRangeApproval: [],
|
dateRangeApproval: [],
|
||||||
|
|
|
||||||
|
|
@ -106,20 +106,20 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
||||||
<el-table-column label="金额" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
<el-table-column label="毛利" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
||||||
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">
|
<!-- <el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
<el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">
|
<!-- <el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
|
|
||||||
<!-- 收款 -->
|
<!-- 收款 -->
|
||||||
<el-table-column label="收款单" align="center" >
|
<el-table-column label="收款单" align="center" >
|
||||||
|
|
@ -201,6 +201,8 @@ export default {
|
||||||
chargeStatus: null,
|
chargeStatus: null,
|
||||||
receiptStatus: null,
|
receiptStatus: null,
|
||||||
invoiceStatus: null,
|
invoiceStatus: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 列信息
|
// 列信息
|
||||||
columns: {
|
columns: {
|
||||||
|
|
@ -213,8 +215,8 @@ export default {
|
||||||
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
||||||
grossProfit: { label: "毛利", visible: true },
|
grossProfit: { label: "毛利", visible: true },
|
||||||
grossProfitRate: { label: "毛利率", visible: true },
|
grossProfitRate: { label: "毛利率", visible: true },
|
||||||
bizChargeDate: { label: "业务计收时间", visible: true },
|
// bizChargeDate: { label: "业务计收时间", visible: true },
|
||||||
financeChargeDate: { label: "财务计收时间", visible: true },
|
// financeChargeDate: { label: "财务计收时间", visible: true },
|
||||||
receiptStatus: { label: "收款状态", visible: true },
|
receiptStatus: { label: "收款状态", visible: true },
|
||||||
receivedWithTax: { label: "已收款含税金额", visible: true },
|
receivedWithTax: { label: "已收款含税金额", visible: true },
|
||||||
receivedWithoutTax: { label: "已收款未税金额", visible: true },
|
receivedWithoutTax: { label: "已收款未税金额", visible: true },
|
||||||
|
|
|
||||||
|
|
@ -136,20 +136,20 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
<el-table-column label="已计收未税金额" align="center" prop="chargedWithoutTax" width="120" v-if="columns.chargedWithoutTax.visible" key="chargedWithoutTax"/>
|
||||||
<el-table-column label="金额" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
<el-table-column label="毛利" align="center" prop="grossProfit" width="120" v-if="columns.grossProfit.visible" key="grossProfit"/>
|
||||||
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
<el-table-column label="毛利率" align="center" prop="grossProfitRate" width="100" v-if="columns.grossProfitRate.visible" key="grossProfitRate"/>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">
|
<!-- <el-table-column label="业务计收时间" align="center" prop="bizChargeDate" width="180" v-if="columns.bizChargeDate.visible" key="bizChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.bizChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
<el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">
|
<!-- <el-table-column label="财务计收时间" align="center" prop="financeChargeDate" width="180" v-if="columns.financeChargeDate.visible" key="financeChargeDate">-->
|
||||||
<template slot-scope="scope">
|
<!-- <template slot-scope="scope">-->
|
||||||
<span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>
|
<!-- <span>{{ parseTime(scope.row.financeChargeDate, '{y}-{m}-{d}') }}</span>-->
|
||||||
</template>
|
<!-- </template>-->
|
||||||
</el-table-column>
|
<!-- </el-table-column>-->
|
||||||
|
|
||||||
<!-- 收款 -->
|
<!-- 收款 -->
|
||||||
<el-table-column label="收款单" align="center" >
|
<el-table-column label="收款单" align="center" >
|
||||||
|
|
@ -276,6 +276,8 @@ export default {
|
||||||
invoiceStatus: null,
|
invoiceStatus: null,
|
||||||
paymentStatus: null,
|
paymentStatus: null,
|
||||||
ticketStatus: null,
|
ticketStatus: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 列信息
|
// 列信息
|
||||||
columns: {
|
columns: {
|
||||||
|
|
@ -288,8 +290,8 @@ export default {
|
||||||
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
chargedWithoutTax: { label: "已计收未税金额", visible: true },
|
||||||
grossProfit: { label: "毛利", visible: true },
|
grossProfit: { label: "毛利", visible: true },
|
||||||
grossProfitRate: { label: "毛利率", visible: true },
|
grossProfitRate: { label: "毛利率", visible: true },
|
||||||
bizChargeDate: { label: "业务计收时间", visible: true },
|
// bizChargeDate: { label: "业务计收时间", visible: true },
|
||||||
financeChargeDate: { label: "财务计收时间", visible: true },
|
// financeChargeDate: { label: "财务计收时间", visible: true },
|
||||||
receiptStatus: { label: "收款状态", visible: true },
|
receiptStatus: { label: "收款状态", visible: true },
|
||||||
receivedWithTax: { label: "已收款含税金额", visible: true },
|
receivedWithTax: { label: "已收款含税金额", visible: true },
|
||||||
receivedWithoutTax: { label: "已收款未税金额", visible: true },
|
receivedWithoutTax: { label: "已收款未税金额", visible: true },
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,8 @@ export default {
|
||||||
invoiceBillCode: null,
|
invoiceBillCode: null,
|
||||||
partnerName: null,
|
partnerName: null,
|
||||||
writeOffType: null,
|
writeOffType: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {}
|
form: {}
|
||||||
|
|
|
||||||
|
|
@ -168,6 +168,8 @@ export default {
|
||||||
paymentBillCode: null,
|
paymentBillCode: null,
|
||||||
vendorName: null,
|
vendorName: null,
|
||||||
writeOffType: null,
|
writeOffType: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {}
|
form: {}
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,8 @@ export default {
|
||||||
receiptBillCode: null,
|
receiptBillCode: null,
|
||||||
partnerName: null,
|
partnerName: null,
|
||||||
writeOffType: null,
|
writeOffType: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {}
|
form: {}
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,8 @@ export default {
|
||||||
receiptBillCode: null,
|
receiptBillCode: null,
|
||||||
vendorName: null,
|
vendorName: null,
|
||||||
writeOffType: null,
|
writeOffType: null,
|
||||||
|
orderByColumn:'createTime',
|
||||||
|
isAsc: 'desc'
|
||||||
},
|
},
|
||||||
// 表单参数
|
// 表单参数
|
||||||
form: {}
|
form: {}
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,7 @@ export default {
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
open(productRow, outerForm) {
|
open(productRow, outerForm) {
|
||||||
|
this.selectedSnList.length=0;
|
||||||
this.reset();
|
this.reset();
|
||||||
this.productData = productRow;
|
this.productData = productRow;
|
||||||
this.outerData = outerForm;
|
this.outerData = outerForm;
|
||||||
|
|
@ -166,12 +167,13 @@ export default {
|
||||||
this.snList = response.rows;
|
this.snList = response.rows;
|
||||||
this.total = response.total;
|
this.total = response.total;
|
||||||
if (this.isInitialLoad) {
|
if (this.isInitialLoad) {
|
||||||
|
this.isInitialLoad = false;
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
if (this.$refs.snTable) {
|
if (this.$refs.snTable) {
|
||||||
|
this.$refs.snTable.clearSelection();
|
||||||
this.$refs.snTable.toggleAllSelection();
|
this.$refs.snTable.toggleAllSelection();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.isInitialLoad = false;
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
:with-header="true"
|
:with-header="true"
|
||||||
>
|
>
|
||||||
<div class="drawer-container">
|
<div class="drawer-container">
|
||||||
<el-form ref="form" :model="form" label-width="120px">
|
<el-form ref="form" :model="form" label-width="150px">
|
||||||
<el-tabs v-model="activeTab">
|
<el-tabs v-model="activeTab">
|
||||||
<el-tab-pane label="项目信息" name="projectInfo">
|
<el-tab-pane label="项目信息" name="projectInfo">
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
|
|
@ -185,15 +185,59 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-form-item label="关键技术问题" prop="keyProblem">
|
<el-divider content-position="left" style="margin-top: 40px">
|
||||||
<el-input v-model="form.keyProblem" type="textarea" readonly />
|
<h3 style="font-weight: bold">技术方案会审</h3>
|
||||||
</el-form-item>
|
</el-divider>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<el-form-item label="项目简述" prop="projectDesc">
|
<el-form-item label="项目简述" prop="projectDesc">
|
||||||
<el-input v-model="form.projectDesc" type="textarea" readonly />
|
<el-input v-model="form.projectDesc" type="textarea" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="服务器配置" prop="serverConfiguration">
|
<el-form-item label="授权" prop="softwareInfo">
|
||||||
|
<el-input v-model="form.softwareInfo" readonly type="textarea" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="终端" prop="hardwareInfo">
|
||||||
|
<el-input v-model="form.hardwareInfo" readonly type="textarea" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="其他终端、外设" prop="terminalPeripheral">
|
||||||
|
<el-input v-model="form.terminalPeripheral" type="textarea" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="服务器" prop="serverConfiguration">
|
||||||
<el-input v-model="form.serverConfiguration" type="textarea" readonly />
|
<el-input v-model="form.serverConfiguration" type="textarea" readonly />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="管理端版本" prop="managementVersion">
|
||||||
|
<el-input v-model="form.managementVersion" readonly></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="桌面虚拟机OS版本" prop="desktopVmOsVersion">
|
||||||
|
<el-input v-model="form.desktopVmOsVersion" readonly></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="虚拟机规格、数量" prop="vmSpecQuantity">
|
||||||
|
<el-input v-model="form.vmSpecQuantity" readonly></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item label="项目风险及技术问题" prop="keyProblem">
|
||||||
|
<el-input v-model="form.keyProblem" type="textarea" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="会审结论" prop="jointTrialResult">
|
||||||
|
<el-input v-model="form.jointTrialResult" type="textarea" readonly />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="附件">
|
||||||
|
<file-upload
|
||||||
|
:value="fileList"
|
||||||
|
:limit="5"
|
||||||
|
:file-size="10"
|
||||||
|
:file-type="['png', 'jpg', 'jpeg', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'pdf', 'zip', 'rar']"
|
||||||
|
:disabled="true"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="配置信息" name="productConfig">
|
<el-tab-pane label="配置信息" name="productConfig">
|
||||||
|
|
@ -330,10 +374,11 @@
|
||||||
<script>
|
<script>
|
||||||
import { getProject } from "@/api/project/info";
|
import { getProject } from "@/api/project/info";
|
||||||
import ProductConfig from "./ProductConfig.vue";
|
import ProductConfig from "./ProductConfig.vue";
|
||||||
|
import FileUpload from "@/components/FileUpload";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "ProjectDetailDrawer",
|
name: "ProjectDetailDrawer",
|
||||||
components: { ProductConfig },
|
components: { ProductConfig, FileUpload },
|
||||||
dicts: ['bg_type', 'bg_yys', 'bg_hysy', 'project_stage', 'operate_institution'],
|
dicts: ['bg_type', 'bg_yys', 'bg_hysy', 'project_stage', 'operate_institution'],
|
||||||
props: {
|
props: {
|
||||||
visible: {
|
visible: {
|
||||||
|
|
@ -347,13 +392,15 @@ export default {
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
fileList: [],
|
||||||
form: {
|
form: {
|
||||||
productConfig: {},
|
productConfig: {},
|
||||||
projectWorkProgressList: [],
|
projectWorkProgressList: [],
|
||||||
projectOperateLogList: [],
|
projectOperateLogList: [],
|
||||||
projectPocInfo: {
|
projectPocInfo: {
|
||||||
projectPocInfoDetailList: []
|
projectPocInfoDetailList: []
|
||||||
}
|
},
|
||||||
|
projectFileList: []
|
||||||
},
|
},
|
||||||
activeTab: 'projectInfo',
|
activeTab: 'projectInfo',
|
||||||
localVisible: this.visible,
|
localVisible: this.visible,
|
||||||
|
|
@ -388,8 +435,10 @@ export default {
|
||||||
projectData.projectOperateLogList = projectData.projectOperateLogList || [];
|
projectData.projectOperateLogList = projectData.projectOperateLogList || [];
|
||||||
projectData.projectPocInfo = projectData.projectPocInfo || { projectPocInfoDetailList: [] };
|
projectData.projectPocInfo = projectData.projectPocInfo || { projectPocInfoDetailList: [] };
|
||||||
projectData.projectPocInfo.projectPocInfoDetailList = projectData.projectPocInfo.projectPocInfoDetailList || [];
|
projectData.projectPocInfo.projectPocInfoDetailList = projectData.projectPocInfo.projectPocInfoDetailList || [];
|
||||||
|
projectData.projectFileList = projectData.projectFileList || [];
|
||||||
|
|
||||||
this.form = projectData;
|
this.form = projectData;
|
||||||
|
this.fileList = this.form.projectFileList;
|
||||||
this.setupIndustryOptions();
|
this.setupIndustryOptions();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div>
|
<div>
|
||||||
<!-- 添加或修改项目管理对话框 -->
|
<!-- 添加或修改项目管理对话框 -->
|
||||||
<el-dialog :title="title" :visible.sync="localVisible" width="80%" append-to-body :close-on-click-modal="false" @close="cancel">
|
<el-dialog :title="title" :visible.sync="localVisible" width="80%" append-to-body :close-on-click-modal="false" @close="cancel">
|
||||||
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
|
<el-form ref="form" :model="form" :rules="rules" label-width="150px">
|
||||||
<el-tabs v-model="activeTab">
|
<el-tabs v-model="activeTab">
|
||||||
<el-tab-pane label="项目信息" name="projectInfo">
|
<el-tab-pane label="项目信息" name="projectInfo">
|
||||||
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
<div style="max-height: 60vh; overflow-y: auto; padding: 15px;">
|
||||||
|
|
@ -201,15 +201,90 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-form-item label="关键技术问题" prop="keyProblem">
|
<el-divider content-position="left" style="margin-top: 40px">
|
||||||
|
<h3 style="font-weight: bold">技术方案会审</h3>
|
||||||
|
</el-divider>
|
||||||
|
<el-form-item label="项目简述" prop="projectDesc">
|
||||||
|
<el-input v-model="form.projectDesc" type="textarea" placeholder="请输入项目简述" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="授权" prop="softwareInfo">
|
||||||
|
<el-input v-model="form.softwareInfo" readonly type="textarea" placeholder="其他终端、外设" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="终端" prop="hardwareInfo">
|
||||||
|
<el-input v-model="form.hardwareInfo" readonly type="textarea" placeholder="其他终端、外设" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="其他终端、外设" prop="terminalPeripheral">
|
||||||
|
<el-input v-model="form.terminalPeripheral" type="textarea" placeholder="其他终端、外设" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="服务器" prop="serverConfiguration">
|
||||||
|
<el-input v-model="form.serverConfiguration" type="textarea" placeholder="请输入服务器配置" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="管理端版本" prop="managementVersion">
|
||||||
|
<el-input v-model="form.managementVersion"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="桌面虚拟机OS版本" prop="desktopVmOsVersion">
|
||||||
|
<el-input v-model="form.desktopVmOsVersion"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="虚拟机规格、数量" prop="vmSpecQuantity">
|
||||||
|
<el-input v-model="form.vmSpecQuantity"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-form-item label="项目风险及技术问题" prop="keyProblem">
|
||||||
|
<template #label>
|
||||||
|
项目风险及技术问题<el-tooltip class="item" effect="dark" placement="right-start">
|
||||||
|
<template #content>
|
||||||
|
<el-row>
|
||||||
|
1.方案风险(如涉及对接外置存储、安全网关部署、城域网等复杂网络、两节点超融合部署、Spacecenter多异地部署、备份对接、功能开发需求评估等)
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
2.技术风险(如涉及功能不满足项强行应标、POC测试不满足用例、老版本部署、混管升级、跨网段唤醒等技术要求)
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
3.服务风险(如涉及异地部署、多区域部署、非省代/原厂交付、大规模点位部署等)
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
4.其他风险(上述未列出的其他特殊风险)
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
<i class="el-icon-question"></i>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
<el-input v-model="form.keyProblem" type="textarea" placeholder="请输入关键技术问题" maxlength="500" :disabled="isFormDisabled" />
|
<el-input v-model="form.keyProblem" type="textarea" placeholder="请输入关键技术问题" maxlength="500" :disabled="isFormDisabled" />
|
||||||
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目简述" prop="projectDesc">
|
<el-form-item prop="jointTrialResult">
|
||||||
<el-input v-model="form.projectDesc" type="textarea" placeholder="请输入项目简述" maxlength="500" :disabled="isFormDisabled" />
|
<template #label>
|
||||||
</el-form-item>
|
会审结论<el-tooltip class="item" effect="dark" placement="right-start">
|
||||||
<el-form-item label="服务器配置" prop="serverConfiguration">
|
<template #content>
|
||||||
<el-input v-model="form.serverConfiguration" type="textarea" placeholder="请输入服务器配置" maxlength="500" :disabled="isFormDisabled" />
|
<el-row>
|
||||||
</el-form-item>
|
1.如果有POC测试项目,必须上传POC测试报告
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
2.会审给出的结论,售前需与新华三销售或者客户确认认可,上传对话截图或者邮件截图
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
<i class="el-icon-question"></i>
|
||||||
|
</el-tooltip>
|
||||||
|
</template>
|
||||||
|
<el-input v-model="form.jointTrialResult" type="textarea" placeholder="请输入关键技术问题" maxlength="500" :disabled="isFormDisabled || !canUpdateJoinTrial" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="附件上传">
|
||||||
|
<file-upload
|
||||||
|
:value="fileList"
|
||||||
|
@file-list-changed="handleFileListChanged"
|
||||||
|
:limit="5"
|
||||||
|
:file-size="10"
|
||||||
|
:file-type="['png', 'jpg', 'jpeg', 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'pdf', 'zip', 'rar']"
|
||||||
|
:disabled="isFormDisabled"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
</div>
|
</div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="配置信息" name="productConfig">
|
<el-tab-pane label="配置信息" name="productConfig">
|
||||||
|
|
@ -371,6 +446,8 @@ import SelectCustomer from "../../system/customer/selectCustomer.vue";
|
||||||
import SelectPartner from "../../system/partner/selectPartner.vue";
|
import SelectPartner from "../../system/partner/selectPartner.vue";
|
||||||
import SelectUser from "@/views/system/user/selectUser";
|
import SelectUser from "@/views/system/user/selectUser";
|
||||||
import ProductConfig from "./ProductConfig.vue";
|
import ProductConfig from "./ProductConfig.vue";
|
||||||
|
import FileUpload from "@/components/FileUpload";
|
||||||
|
import { getToken } from "@/utils/auth";
|
||||||
import {isNaN} from "@riophae/vue-treeselect/src/utils";
|
import {isNaN} from "@riophae/vue-treeselect/src/utils";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
@ -381,9 +458,14 @@ export default {
|
||||||
SelectPartner,
|
SelectPartner,
|
||||||
SelectUser,
|
SelectUser,
|
||||||
ProductConfig,
|
ProductConfig,
|
||||||
|
FileUpload,
|
||||||
},
|
},
|
||||||
dicts: ['bg_type', 'bg_yys', 'bg_hysy', 'project_stage', 'operate_institution'],
|
dicts: ['bg_type', 'bg_yys', 'bg_hysy', 'project_stage', 'operate_institution'],
|
||||||
props: {
|
props: {
|
||||||
|
canUpdateJoinTrial:{
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
visible: {
|
visible: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
|
|
@ -413,6 +495,7 @@ export default {
|
||||||
selectCustomerVisible: false,
|
selectCustomerVisible: false,
|
||||||
selectPartnerVisible: false,
|
selectPartnerVisible: false,
|
||||||
selectUserVisible: false,
|
selectUserVisible: false,
|
||||||
|
fileList: [],
|
||||||
form: {
|
form: {
|
||||||
competitorList: [],
|
competitorList: [],
|
||||||
otherCompetitor: '',
|
otherCompetitor: '',
|
||||||
|
|
@ -425,7 +508,8 @@ export default {
|
||||||
projectOperateLogList: [],
|
projectOperateLogList: [],
|
||||||
projectPocInfo: {
|
projectPocInfo: {
|
||||||
projectPocInfoDetailList: []
|
projectPocInfoDetailList: []
|
||||||
}
|
},
|
||||||
|
projectFileList: []
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
projectName: [
|
projectName: [
|
||||||
|
|
@ -504,6 +588,40 @@ export default {
|
||||||
this.handleAdd();
|
this.handleAdd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
'form.productConfig': {
|
||||||
|
handler(newVal) {
|
||||||
|
if (!newVal) return;
|
||||||
|
|
||||||
|
// 1. Authorization (software)
|
||||||
|
const softwareList = newVal.softwareProjectProductInfoList || [];
|
||||||
|
if (softwareList.length > 0) {
|
||||||
|
this.form.softwareInfo = softwareList
|
||||||
|
.filter(item => item.productBomCode || item.model || (item.quantity !== undefined && item.quantity !== null))
|
||||||
|
.map(item => {
|
||||||
|
const code = item.productBomCode || '';
|
||||||
|
const model = item.model || '';
|
||||||
|
const qty = (item.quantity !== undefined && item.quantity !== null && item.quantity !== '') ? item.quantity : '';
|
||||||
|
return `${code},${model},${qty}个`;
|
||||||
|
})
|
||||||
|
.join(';');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Terminal (hardware)
|
||||||
|
const hardwareList = newVal.hardwareProjectProductInfoList || [];
|
||||||
|
if (hardwareList.length > 0) {
|
||||||
|
this.form.hardwareInfo = hardwareList
|
||||||
|
.filter(item => item.productBomCode || item.model || (item.quantity !== undefined && item.quantity !== null))
|
||||||
|
.map(item => {
|
||||||
|
const code = item.productBomCode || '';
|
||||||
|
const model = item.model || '';
|
||||||
|
const qty = (item.quantity !== undefined && item.quantity !== null && item.quantity !== '') ? item.quantity : '';
|
||||||
|
return `${code},${model},${qty}台`;
|
||||||
|
})
|
||||||
|
.join(';');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
deep: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
@ -579,6 +697,7 @@ export default {
|
||||||
projectPocInfo: {
|
projectPocInfo: {
|
||||||
projectPocInfoDetailList: []
|
projectPocInfoDetailList: []
|
||||||
},
|
},
|
||||||
|
projectFileList: [],
|
||||||
createAt: null,
|
createAt: null,
|
||||||
updatedAt: null
|
updatedAt: null
|
||||||
};
|
};
|
||||||
|
|
@ -586,6 +705,7 @@ export default {
|
||||||
this.isFormDisabled = false;
|
this.isFormDisabled = false;
|
||||||
this.cityOptions = [];
|
this.cityOptions = [];
|
||||||
this.industryOptions = [];
|
this.industryOptions = [];
|
||||||
|
this.fileList = [];
|
||||||
this.resetForm("form");
|
this.resetForm("form");
|
||||||
},
|
},
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
|
|
@ -635,9 +755,17 @@ export default {
|
||||||
this.$set(this.form, 'projectPocInfo', this.form.projectPocInfo || { projectPocInfoDetailList: [] });
|
this.$set(this.form, 'projectPocInfo', this.form.projectPocInfo || { projectPocInfoDetailList: [] });
|
||||||
this.$set(this.form.projectPocInfo, 'projectPocInfoDetailList', this.form.projectPocInfo.projectPocInfoDetailList || []);
|
this.$set(this.form.projectPocInfo, 'projectPocInfoDetailList', this.form.projectPocInfo.projectPocInfoDetailList || []);
|
||||||
|
|
||||||
|
this.$set(this.form, 'projectFileList', this.form.projectFileList || []);
|
||||||
|
this.fileList = this.form.projectFileList;
|
||||||
|
|
||||||
this.title = "修改项目管理";
|
this.title = "修改项目管理";
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
handleFileListChanged(fileList) {
|
||||||
|
this.fileList = fileList;
|
||||||
|
this.form.projectFileList = fileList;
|
||||||
|
this.form.fileId = fileList.map(f => f.id).filter(id => !!id).join(',')
|
||||||
|
},
|
||||||
submitForm() {
|
submitForm() {
|
||||||
this.$refs["form"].validate(valid => {
|
this.$refs["form"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="行业" prop="industryType">
|
<el-form-item label="行业" prop="industryType">
|
||||||
<el-select v-model="queryParams.industryType" placeholder="请选择行业" clearable>
|
<el-select multiple v-model="queryParams.industryTypeList" placeholder="请选择行业" clearable>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in searchIndustryOptions"
|
v-for="item in searchIndustryOptions"
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
|
|
@ -154,7 +154,7 @@
|
||||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="projectList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="projectList" @selection-change="handleSelectionChange" @sort-change="handleSortChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="项目编号" align="center" prop="projectCode" width="100" />
|
<el-table-column label="项目编号" align="center" prop="projectCode" width="100" />
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" width="300">
|
<el-table-column label="项目名称" align="center" prop="projectName" width="300">
|
||||||
|
|
@ -202,18 +202,23 @@
|
||||||
<span>{{ parseTime(scope.row.lastWorkUpdateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
<span>{{ parseTime(scope.row.lastWorkUpdateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="收藏" align="center" prop="collect" width="60">
|
<el-table-column label="最后操作时间" align="center" prop="updateTime" width="160" sortable="custom" :sort-orders="['descending', 'ascending']">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="收藏" align="center" prop="collect" width="60" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-checkbox v-model="scope.row.collect" true-label="1" false-label="0" @change="handleCollectChange(scope.row)" />
|
<el-checkbox v-model="scope.row.collect" true-label="1" false-label="0" @change="handleCollectChange(scope.row)" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="会审" align="center" prop="jointTrial" width="60">
|
<el-table-column label="会审" align="center" prop="jointTrial" width="60" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-checkbox v-if="!canUpdateJoinTrial" :value="scope.row.jointTrial === '1'" @change="()=>{ $modal.msgError('无权限修改');return false;}" />
|
<el-checkbox v-if="!canUpdateJoinTrial" :value="scope.row.jointTrial === '1'" @change="()=>{ $modal.msgError('无权限修改');return false;}" />
|
||||||
<el-checkbox v-else v-model="scope.row.jointTrial" true-label="1" false-label="0" @change="handleJoinTrialChange(scope.row)"/>
|
<el-checkbox v-else v-model="scope.row.jointTrial" true-label="1" false-label="0" @change="handleJoinTrialChange(scope.row)"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="300" fixed="right">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="400" fixed="right">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button
|
<el-button
|
||||||
size="mini"
|
size="mini"
|
||||||
|
|
@ -226,8 +231,8 @@
|
||||||
size="mini"
|
size="mini"
|
||||||
type="text"
|
type="text"
|
||||||
icon="el-icon-refresh"
|
icon="el-icon-refresh"
|
||||||
@click="openOrder(scope.row.id, scope.row.canGenerate)"
|
@click="openOrder(scope.row.id, scope.row.canGenerate, scope.row.jointTrial)"
|
||||||
:disabled="!scope.row.canGenerate || scope.row.jointTrial !== '1'"
|
:disabled="!scope.row.canGenerate "
|
||||||
v-hasPermi="['sip:project:add']"
|
v-hasPermi="['sip:project:add']"
|
||||||
>生成订单</el-button>
|
>生成订单</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
|
|
@ -237,6 +242,13 @@
|
||||||
@click="handleDelete(scope.row)"
|
@click="handleDelete(scope.row)"
|
||||||
v-hasPermi="['sip:project:remove']"
|
v-hasPermi="['sip:project:remove']"
|
||||||
>删除</el-button>
|
>删除</el-button>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="text"
|
||||||
|
icon="el-icon-edit"
|
||||||
|
@click="handleExportSingle(scope.row)"
|
||||||
|
v-show="scope.row.jointTrial==='1'"
|
||||||
|
>技术方案终审下载</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
@ -256,6 +268,7 @@
|
||||||
<project-form
|
<project-form
|
||||||
:visible.sync="projectFormVisible"
|
:visible.sync="projectFormVisible"
|
||||||
:project-id="selectedProjectId"
|
:project-id="selectedProjectId"
|
||||||
|
:canUpdateJoinTrial="canUpdateJoinTrial"
|
||||||
@success="handleFormSuccess"
|
@success="handleFormSuccess"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
@ -265,7 +278,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {listProject, delProject, exportProject, addCollect, updateProject, editJoinTrial} from "@/api/project/info";
|
import {listProject, delProject, exportProject, addCollect, exportSingle, editJoinTrial} from "@/api/project/info";
|
||||||
import ProjectDetailDrawer from "./ProjectDetailDrawer.vue";
|
import ProjectDetailDrawer from "./ProjectDetailDrawer.vue";
|
||||||
import ProjectForm from "./ProjectForm.vue";
|
import ProjectForm from "./ProjectForm.vue";
|
||||||
import OrderDetail from "../order/OrderDetail.vue";
|
import OrderDetail from "../order/OrderDetail.vue";
|
||||||
|
|
@ -317,6 +330,7 @@ export default {
|
||||||
customerName: null,
|
customerName: null,
|
||||||
bgProperty: null,
|
bgProperty: null,
|
||||||
industryType: null,
|
industryType: null,
|
||||||
|
industryTypeList: null,
|
||||||
agentName: null,
|
agentName: null,
|
||||||
jointTrial: null,
|
jointTrial: null,
|
||||||
collect: null,
|
collect: null,
|
||||||
|
|
@ -336,13 +350,10 @@ export default {
|
||||||
created() {
|
created() {
|
||||||
this.getList();
|
this.getList();
|
||||||
const permissions = store.getters && store.getters.permissions
|
const permissions = store.getters && store.getters.permissions
|
||||||
console.log(permissions)
|
|
||||||
const all_permission = "*:*:*"
|
const all_permission = "*:*:*"
|
||||||
debugger
|
|
||||||
this.canUpdateJoinTrial = permissions.some(permission => {
|
this.canUpdateJoinTrial = permissions.some(permission => {
|
||||||
return all_permission === permission || "sip:project:jointTrial"===permission
|
return all_permission === permission || "sip:project:jointTrial"===permission
|
||||||
})
|
})
|
||||||
console.log(this.canUpdateJoinTrial)
|
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
dateRange(val) {
|
dateRange(val) {
|
||||||
|
|
@ -383,6 +394,18 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
handleSortChange(column) {
|
||||||
|
this.queryParams.orderByColumn = column.prop;
|
||||||
|
if (column.order === 'ascending') {
|
||||||
|
this.queryParams.isAsc = 'asc';
|
||||||
|
} else if (column.order === 'descending') {
|
||||||
|
this.queryParams.isAsc = 'desc';
|
||||||
|
} else {
|
||||||
|
this.queryParams.isAsc = null;
|
||||||
|
this.queryParams.orderByColumn = null;
|
||||||
|
}
|
||||||
|
this.getList();
|
||||||
|
},
|
||||||
/** 查询项目管理列表 */
|
/** 查询项目管理列表 */
|
||||||
getList() {
|
getList() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
|
@ -415,6 +438,7 @@ export default {
|
||||||
this.queryParams.lastWorkUpdateTimeStart = null;
|
this.queryParams.lastWorkUpdateTimeStart = null;
|
||||||
this.queryParams.lastWorkUpdateTimeEnd = null;
|
this.queryParams.lastWorkUpdateTimeEnd = null;
|
||||||
this.queryParams.industryType = null; // Clear industry type
|
this.queryParams.industryType = null; // Clear industry type
|
||||||
|
this.queryParams.industryTypeList = null; // Clear industry type
|
||||||
this.handleQuery();
|
this.handleQuery();
|
||||||
},
|
},
|
||||||
// 多选框选中数据
|
// 多选框选中数据
|
||||||
|
|
@ -448,6 +472,10 @@ export default {
|
||||||
this.$modal.msgSuccess("删除成功");
|
this.$modal.msgSuccess("删除成功");
|
||||||
}).catch(() => {});
|
}).catch(() => {});
|
||||||
},
|
},
|
||||||
|
handleExportSingle(row){
|
||||||
|
window.location.href=process.env.VUE_APP_BASE_API +`/sip/project/vue/joinTrial/export/${row.id}`
|
||||||
|
// exportSingle(row.id)
|
||||||
|
},
|
||||||
/** 导出按钮操作 */
|
/** 导出按钮操作 */
|
||||||
handleExport() {
|
handleExport() {
|
||||||
this.$modal.confirm('是否确认导出所有项目管理数据项?').then(() => {
|
this.$modal.confirm('是否确认导出所有项目管理数据项?').then(() => {
|
||||||
|
|
@ -481,7 +509,11 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/** 生成订单 */
|
/** 生成订单 */
|
||||||
openOrder(id, canGenerate) {
|
openOrder(id, canGenerate,jointTrial) {
|
||||||
|
if (jointTrial!=='1') {
|
||||||
|
this.$modal.alertWarning("请联系产品经理和售后团队进行会审后再生成订单");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!canGenerate) {
|
if (!canGenerate) {
|
||||||
this.$modal.alertWarning("该项目已存在订单");
|
this.$modal.alertWarning("该项目已存在订单");
|
||||||
return;
|
return;
|
||||||
|
|
@ -508,7 +540,16 @@ export default {
|
||||||
},
|
},
|
||||||
/** 项目会审状态修改 */
|
/** 项目会审状态修改 */
|
||||||
handleJoinTrialChange(row) {
|
handleJoinTrialChange(row) {
|
||||||
|
if (!row.canGenerate){
|
||||||
|
row.jointTrial='1'
|
||||||
|
this.$modal.msgError("该项目已存在订单,无法取消会审");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (row.jointTrial === '0'){
|
if (row.jointTrial === '0'){
|
||||||
|
if (!row.canGenerate){
|
||||||
|
this.$modal.alertWarning("该项目已存在订单,无法取消会审");
|
||||||
|
return;
|
||||||
|
}
|
||||||
this.$modal.confirm('是否确认取消会审?').then(function() {
|
this.$modal.confirm('是否确认取消会审?').then(function() {
|
||||||
let params={
|
let params={
|
||||||
"id":row.id,
|
"id":row.id,
|
||||||
|
|
@ -517,7 +558,6 @@ export default {
|
||||||
}
|
}
|
||||||
editJoinTrial(params).then(response => {
|
editJoinTrial(params).then(response => {
|
||||||
this.$modal.msgSuccess("取消成功");
|
this.$modal.msgSuccess("取消成功");
|
||||||
|
|
||||||
})
|
})
|
||||||
}).catch((err)=>{
|
}).catch((err)=>{
|
||||||
row.jointTrial = row.jointTrial === '1' ? '0' : '1';
|
row.jointTrial = row.jointTrial === '1' ? '0' : '1';
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ spring:
|
||||||
druid:
|
druid:
|
||||||
# 主库数据源
|
# 主库数据源
|
||||||
master:
|
master:
|
||||||
url: jdbc:mysql://121.199.168.157:3306/unis_sip_pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true
|
url: jdbc:mysql://121.199.168.157:3306/unis_sip_pro?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&nullCatalogMeansCurrent=true
|
||||||
username: root
|
username: root
|
||||||
password: unis@db
|
password: unis@db
|
||||||
# 从库数据源
|
# 从库数据源
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,14 @@ public class OmsReceiptBillController extends BaseController {
|
||||||
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
, OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||||
return AjaxResult.success(data);
|
return AjaxResult.success(data);
|
||||||
}
|
}
|
||||||
|
@GetMapping(value = "/code/{code}")
|
||||||
|
public AjaxResult getInfoByCode(@PathVariable("code") String receiptBillCode) {
|
||||||
|
OmsReceiptBill data = omsReceiptBillService.getInfoByCode(receiptBillCode);
|
||||||
|
// todoService.fillApproveNode(Collections.singletonList(data),
|
||||||
|
// Arrays.asList(processConfig.getDefinition().getFinanceReceiptApprove(), processConfig.getDefinition().getFinanceReceiptRefound())
|
||||||
|
// , OmsReceiptBill::getReceiptBillCode, (a, b) -> a.setApproveNode(b.get(a.getReceiptBillCode())));
|
||||||
|
return AjaxResult.success(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -138,12 +138,13 @@ public class OmsPurchaseOrderController extends BaseController
|
||||||
/**
|
/**
|
||||||
* 导出采购单主表列表
|
* 导出采购单主表列表
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("sip:purchaseorder:export")
|
// @RequiresPermissions("sip:purchaseorder:export")
|
||||||
@Log(title = "采购单主表", businessType = BusinessType.EXPORT)
|
@Anonymous
|
||||||
@PostMapping("/export")
|
@GetMapping("/export")
|
||||||
public void export(HttpServletResponse response, OmsPurchaseOrder omsPurchaseOrder)
|
public void export(OmsPurchaseOrder omsPurchaseOrder, HttpServletResponse response)
|
||||||
{
|
{
|
||||||
List<OmsPurchaseOrder> list = omsPurchaseOrderService.selectOmsPurchaseOrderList(omsPurchaseOrder);
|
List<OmsPurchaseOrder> list = omsPurchaseOrderService.selectOmsPurchaseOrderList(omsPurchaseOrder);
|
||||||
|
todoService.fillPurchaseOrderApproveNode(list);
|
||||||
ExcelUtil<OmsPurchaseOrder> util = new ExcelUtil<OmsPurchaseOrder>(OmsPurchaseOrder.class);
|
ExcelUtil<OmsPurchaseOrder> util = new ExcelUtil<OmsPurchaseOrder>(OmsPurchaseOrder.class);
|
||||||
util.exportExcel(response, list, "采购单主表数据");
|
util.exportExcel(response, list, "采购单主表数据");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,19 +2,30 @@ package com.ruoyi.sip.controller.vue;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.ruoyi.common.annotation.Log;
|
import com.ruoyi.common.annotation.Log;
|
||||||
|
import com.ruoyi.common.config.RuoYiConfig;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.text.Convert;
|
import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.enums.BusinessType;
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.common.utils.file.FileUtils;
|
||||||
|
import com.ruoyi.sip.domain.OmsFileLog;
|
||||||
import com.ruoyi.sip.domain.ProjectInfo;
|
import com.ruoyi.sip.domain.ProjectInfo;
|
||||||
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
import com.ruoyi.sip.domain.ProjectOrderInfo;
|
||||||
|
import com.ruoyi.sip.service.IOmsFileLogService;
|
||||||
import com.ruoyi.sip.service.IProjectInfoService;
|
import com.ruoyi.sip.service.IProjectInfoService;
|
||||||
import com.ruoyi.sip.service.IProjectOrderInfoService;
|
import com.ruoyi.sip.service.IProjectOrderInfoService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.io.File;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -27,6 +38,7 @@ import java.util.Map;
|
||||||
* @date 2025-05-29
|
* @date 2025-05-29
|
||||||
*/
|
*/
|
||||||
@RestController
|
@RestController
|
||||||
|
@Slf4j
|
||||||
@RequestMapping("/sip/project/vue")
|
@RequestMapping("/sip/project/vue")
|
||||||
public class VueProjectInfoController extends BaseController {
|
public class VueProjectInfoController extends BaseController {
|
||||||
|
|
||||||
|
|
@ -39,7 +51,7 @@ public class VueProjectInfoController extends BaseController {
|
||||||
* 查询项目管理列表
|
* 查询项目管理列表
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("sip:project:list")
|
@RequiresPermissions("sip:project:list")
|
||||||
@GetMapping("/list")
|
@PostMapping("/list")
|
||||||
public TableDataInfo list(ProjectInfo projectInfo) {
|
public TableDataInfo list(ProjectInfo projectInfo) {
|
||||||
startPage();
|
startPage();
|
||||||
projectInfo.setCurrentUserId(getUserId());
|
projectInfo.setCurrentUserId(getUserId());
|
||||||
|
|
@ -93,11 +105,54 @@ public class VueProjectInfoController extends BaseController {
|
||||||
return toAjax(projectInfoService.updateProjectInfo(projectInfo));
|
return toAjax(projectInfoService.updateProjectInfo(projectInfo));
|
||||||
}
|
}
|
||||||
@RequiresPermissions("sip:project:edit")
|
@RequiresPermissions("sip:project:edit")
|
||||||
@Log(title = "项目管理", businessType = BusinessType.UPDATE)
|
@Log(title = "会审", businessType = BusinessType.UPDATE)
|
||||||
@PutMapping("/joinTrial")
|
@PutMapping("/joinTrial")
|
||||||
public AjaxResult editJoinTrial(@RequestBody ProjectInfo projectInfo) {
|
public AjaxResult editJoinTrial(@RequestBody ProjectInfo projectInfo) {
|
||||||
return toAjax(projectInfoService.editJoinTrial(projectInfo));
|
return toAjax(projectInfoService.editJoinTrial(projectInfo));
|
||||||
}
|
}
|
||||||
|
@RequiresPermissions("sip:project:export")
|
||||||
|
|
||||||
|
@PostMapping("/export/joinTrial")
|
||||||
|
public AjaxResult exportJoinTrial(ProjectInfo projectInfo) {
|
||||||
|
return AjaxResult.success(projectInfoService.exportJoinTrial(projectInfo));
|
||||||
|
}
|
||||||
|
@GetMapping("/joinTrial/export/{id}")
|
||||||
|
public void exportSingleJoinTrial(@PathVariable("id") Long id, @RequestParam(required = false) String fileName,
|
||||||
|
HttpServletRequest request, HttpServletResponse response) {
|
||||||
|
try {
|
||||||
|
if (id != null) {
|
||||||
|
// 获取订单信息
|
||||||
|
ProjectInfo projectInfo = projectInfoService.selectProjectInfoById(id);
|
||||||
|
if (projectInfo == null) {
|
||||||
|
throw new ServiceException("订单信息不存在");
|
||||||
|
}
|
||||||
|
if (!"1".equals(projectInfo.getJointTrial())){
|
||||||
|
throw new ServiceException("项目未会审,无法导出");
|
||||||
|
}
|
||||||
|
// 新逻辑:生成填充了订单信息的合同模板
|
||||||
|
byte[] fileBytes = projectInfoService.exportSingleJoinTrial(projectInfo);
|
||||||
|
|
||||||
|
// 设置响应头
|
||||||
|
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
|
||||||
|
String downloadFileName = StringUtils.isEmpty(fileName) ? "技术会审_" + projectInfo.getProjectName() + ".docx" : fileName;
|
||||||
|
FileUtils.setAttachmentResponseHeader(response, downloadFileName);
|
||||||
|
|
||||||
|
// 写入响应流
|
||||||
|
response.getOutputStream().write(fileBytes);
|
||||||
|
response.getOutputStream().flush();
|
||||||
|
} else {
|
||||||
|
// 原逻辑:直接下载模板文件
|
||||||
|
String localPath = RuoYiConfig.getExcelTemplate();
|
||||||
|
String downloadPath = localPath + File.separator + (StringUtils.isEmpty(fileName) ? "orderDownloadTemplate.docx" : fileName);
|
||||||
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
|
FileUtils.setAttachmentResponseHeader(response, StringUtils.isEmpty(fileName) ? "orderDownloadTemplate.docx" : fileName);
|
||||||
|
FileUtils.writeBytes(downloadPath, response.getOutputStream());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("下载文件失败", e);
|
||||||
|
throw new ServiceException("下载文件失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除项目管理
|
* 删除项目管理
|
||||||
|
|
|
||||||
|
|
@ -83,6 +83,7 @@ public class VueProjectOrderInfoController extends BaseController {
|
||||||
ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id);
|
ProjectOrderInfo projectOrderInfo = projectOrderInfoService.selectProjectOrderInfoById(id);
|
||||||
mmap.put("projectOrderInfo", projectOrderInfo);
|
mmap.put("projectOrderInfo", projectOrderInfo);
|
||||||
mmap.put("user", ShiroUtils.getSysUser());
|
mmap.put("user", ShiroUtils.getSysUser());
|
||||||
|
//是否可修改文件
|
||||||
mmap.put("canUpdate", ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) ||ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus()));
|
mmap.put("canUpdate", ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus()) ||ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus()));
|
||||||
// boolean showFileFlag=!ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus())
|
// boolean showFileFlag=!ProjectOrderInfo.OrderStatus.WAIT_COMMIT.getCode().equals(projectOrderInfo.getOrderStatus())
|
||||||
// && !ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus())
|
// && !ProjectOrderInfo.OrderStatus.APPROVE_REJECT.getCode().equals(projectOrderInfo.getOrderStatus())
|
||||||
|
|
@ -92,15 +93,18 @@ public class VueProjectOrderInfoController extends BaseController {
|
||||||
ProjectOrderFileLog fileLog = new ProjectOrderFileLog();
|
ProjectOrderFileLog fileLog = new ProjectOrderFileLog();
|
||||||
fileLog.setOrderId(projectOrderInfo.getId());
|
fileLog.setOrderId(projectOrderInfo.getId());
|
||||||
fileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONTRACT_BAK.getCode());
|
fileLog.setFileType(ProjectOrderFileLog.FileTypeEnum.CONTRACT_BAK.getCode());
|
||||||
|
//信息备份数据
|
||||||
mmap.put("orderBakFile", projectOrderFileLogService.mapBakFile(fileLog));
|
mmap.put("orderBakFile", projectOrderFileLogService.mapBakFile(fileLog));
|
||||||
Todo todo = new Todo();
|
Todo todo = new Todo();
|
||||||
todo.setBusinessKey(projectOrderInfo.getOrderCode());
|
todo.setBusinessKey(projectOrderInfo.getOrderCode());
|
||||||
List<Todo> todoCompletedList = todoService.selectTodoCompletedList(todo);
|
List<Todo> todoCompletedList = todoService.selectTodoCompletedList(todo);
|
||||||
|
//审批历史
|
||||||
mmap.put("approveLog", todoCompletedList);
|
mmap.put("approveLog", todoCompletedList);
|
||||||
//判断商务角色 并且是产品或自己审批
|
//判断商务角色 并且是产品或自己审批
|
||||||
boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ?
|
boolean updateFlag = CollUtil.isNotEmpty(todoCompletedList) && ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode().equals(projectOrderInfo.getOrderStatus()) ?
|
||||||
("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName()))
|
("产品经理".equals(todoCompletedList.get(0).getTaskName()) || "售前".equals(todoCompletedList.get(0).getTaskName()))
|
||||||
: (boolean) mmap.get("canUpdate");
|
: (boolean) mmap.get("canUpdate");
|
||||||
|
//是否可修改文件
|
||||||
mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business")||ShiroUtils.getSubject().hasRole("marketing_promotion") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag);
|
mmap.put("updateFile", (ShiroUtils.getSubject().hasRole("sale_assistant")||ShiroUtils.getSubject().hasRole("business")||ShiroUtils.getSubject().hasRole("marketing_promotion") ||ShiroUtils.getSysUser().isAdmin()) && updateFlag);
|
||||||
mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) &&
|
mmap.put("uploadFinalFile", (ShiroUtils.getSubject().hasRole("business") || ShiroUtils.getSysUser().isAdmin()) &&
|
||||||
ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus()));
|
ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode().equals(projectOrderInfo.getOrderStatus()));
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -21,6 +22,7 @@ public class OmsFileLog extends BaseEntity {
|
||||||
* 主键ID
|
* 主键ID
|
||||||
*/
|
*/
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
private List<Integer> idList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新文件名
|
* 新文件名
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package com.ruoyi.sip.domain;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.ruoyi.common.annotation.Excel;
|
||||||
import com.ruoyi.common.core.domain.BaseEntity;
|
import com.ruoyi.common.core.domain.BaseEntity;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
@ -26,70 +28,92 @@ public class OmsPurchaseOrder extends BaseEntity
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
/** 采购单号(系统生成) */
|
/** 采购单号(系统生成) */
|
||||||
|
@Excel(name = "采购单号")
|
||||||
private String purchaseNo;
|
private String purchaseNo;
|
||||||
|
|
||||||
/** 采购方名称 */
|
/** 采购方名称 */
|
||||||
|
@Excel(name = "采购方名称")
|
||||||
private String buyerName;
|
private String buyerName;
|
||||||
|
|
||||||
/** 采购方地址 */
|
/** 采购方地址 */
|
||||||
|
@Excel(name = "采购方地址")
|
||||||
private String buyerAddress;
|
private String buyerAddress;
|
||||||
|
|
||||||
/** 制造商ID */
|
/** 制造商ID */
|
||||||
|
@Excel(name = "制造商ID")
|
||||||
private Long vendorId;
|
private Long vendorId;
|
||||||
|
|
||||||
private String vendorCode;
|
private String vendorCode;
|
||||||
private List<String> authVendorCodeList;
|
private List<String> authVendorCodeList;
|
||||||
|
@Excel(name = "供应商名称")
|
||||||
private String vendorName;
|
private String vendorName;
|
||||||
|
@Excel(name = "供应商联系人")
|
||||||
private String vendorUser;
|
private String vendorUser;
|
||||||
|
@Excel(name = "供应商电话")
|
||||||
private String vendorPhone;
|
private String vendorPhone;
|
||||||
/** 币别(固定人民币) */
|
/** 币别(固定人民币) */
|
||||||
|
@Excel(name = "币别")
|
||||||
private String currency;
|
private String currency;
|
||||||
|
|
||||||
/** 采购员ID */
|
/** 采购员ID */
|
||||||
|
@Excel(name = "采购员ID")
|
||||||
private Long purchaserId;
|
private Long purchaserId;
|
||||||
|
|
||||||
|
|
||||||
/** 采购员姓名 */
|
/** 采购员姓名 */
|
||||||
|
@Excel(name = "采购员姓名")
|
||||||
private String purchaserName;
|
private String purchaserName;
|
||||||
|
|
||||||
/** 采购员电话 */
|
/** 采购员电话 */
|
||||||
|
@Excel(name = "采购员电话")
|
||||||
private String purchaserMobile;
|
private String purchaserMobile;
|
||||||
|
|
||||||
/** 采购员邮箱 */
|
/** 采购员邮箱 */
|
||||||
|
@Excel(name = "采购员邮箱")
|
||||||
private String purchaserEmail;
|
private String purchaserEmail;
|
||||||
|
|
||||||
/** 入库仓库ID */
|
/** 入库仓库ID */
|
||||||
private Long warehouseId;
|
private Long warehouseId;
|
||||||
|
@Excel(name = "入库仓库名称")
|
||||||
private String warehouseName;
|
private String warehouseName;
|
||||||
|
|
||||||
/** 付款方式 */
|
/** 付款方式 1为出库付款,其他为入库*/
|
||||||
|
@Excel(name = "付款方式", defaultValue = "入库付款", readConverterExp = "0=入库付款,1=出库付款,2=入库付款")
|
||||||
private String payMethod;
|
private String payMethod;
|
||||||
|
|
||||||
/** 汇智负责人ID */
|
/** 汇智负责人ID */
|
||||||
|
@Excel(name = "汇智负责人ID")
|
||||||
private Long ownerId;
|
private Long ownerId;
|
||||||
|
|
||||||
/** 汇智负责人姓名 */
|
/** 汇智负责人姓名 */
|
||||||
|
@Excel(name = "汇智负责人姓名")
|
||||||
private String ownerName;
|
private String ownerName;
|
||||||
|
|
||||||
/** 含税总金额 */
|
/** 含税总金额 */
|
||||||
|
@Excel(name = "含税总金额")
|
||||||
private BigDecimal totalAmount;
|
private BigDecimal totalAmount;
|
||||||
|
|
||||||
/** 采购状态(0待入库 1部分入库 2已完成) */
|
/** 采购状态(0待入库 1部分入库 2已完成) */
|
||||||
|
@Excel(name = "采购状态", readConverterExp = "0=待入库,1=部分入库,2=已完成")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
/** 审批状态(0草稿 1审批中 2已通过 3驳回) */
|
/** 审批状态(0草稿 1审批中 2已通过 3驳回) */
|
||||||
|
@Excel(name = "审批状态", readConverterExp = "0=草稿,1=审批中,2=已通过,3=驳回")
|
||||||
private String approveStatus;
|
private String approveStatus;
|
||||||
|
|
||||||
/** 审批时间 */
|
/** 审批时间 */
|
||||||
|
@Excel(name = "审批时间")
|
||||||
private Date approveTime;
|
private Date approveTime;
|
||||||
|
|
||||||
/** 当前审批节点 */
|
/** 当前审批节点 */
|
||||||
|
@Excel(name = "当前审批节点")
|
||||||
private String approveNode;
|
private String approveNode;
|
||||||
|
|
||||||
/** 确认状态(待审批、已确认、或空) */
|
/** 确认状态(待审批、已确认、或空) */
|
||||||
|
@Excel(name = "确认状态", readConverterExp = "0=待审批,1=已确认,2=已驳回")
|
||||||
private String confirmStatus;
|
private String confirmStatus;
|
||||||
|
|
||||||
/** 流程类型(online线上 offline线下) */
|
/** 流程类型(online线上 offline线下) */
|
||||||
|
@Excel(name = "流程类型", readConverterExp = "online=线上,offline=线下")
|
||||||
private String flowType;
|
private String flowType;
|
||||||
|
|
||||||
/** 删除标志(0正常 1删除) */
|
/** 删除标志(0正常 1删除) */
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@ public class ProjectInfo extends BaseEntity
|
||||||
/** 行业 */
|
/** 行业 */
|
||||||
@Excel(name = "行业")
|
@Excel(name = "行业")
|
||||||
private String industryType;
|
private String industryType;
|
||||||
|
private List<String> industryTypeList;
|
||||||
|
|
||||||
/** 代表处 */
|
/** 代表处 */
|
||||||
private String agentCode;
|
private String agentCode;
|
||||||
|
|
@ -170,8 +171,8 @@ public class ProjectInfo extends BaseEntity
|
||||||
private Date updateTimeEnd;
|
private Date updateTimeEnd;
|
||||||
|
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
|
@Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||||
private Date lastWorkUpdateTime;
|
private Date lastWorkUpdateTime;
|
||||||
private Date lastWorkUpdateTimeStart;
|
private Date lastWorkUpdateTimeStart;
|
||||||
private Date lastWorkUpdateTimeEnd;
|
private Date lastWorkUpdateTimeEnd;
|
||||||
|
|
@ -199,6 +200,38 @@ public class ProjectInfo extends BaseEntity
|
||||||
private List<ProjectWorkProgress> projectWorkProgressList;
|
private List<ProjectWorkProgress> projectWorkProgressList;
|
||||||
private ProjectPocInfo projectPocInfo;
|
private ProjectPocInfo projectPocInfo;
|
||||||
|
|
||||||
|
/** 授权信息 */
|
||||||
|
@Excel(name = "授权信息")
|
||||||
|
private String softwareInfo;
|
||||||
|
|
||||||
|
/** 终端类型 */
|
||||||
|
@Excel(name = "终端类型")
|
||||||
|
private String hardwareInfo;
|
||||||
|
|
||||||
|
/** 其它终端外设 */
|
||||||
|
@Excel(name = "其它终端外设")
|
||||||
|
private String terminalPeripheral;
|
||||||
|
|
||||||
|
/** 管理端版本 */
|
||||||
|
@Excel(name = "管理端版本")
|
||||||
|
private String managementVersion;
|
||||||
|
|
||||||
|
/** 桌面虚拟机OS版本 */
|
||||||
|
@Excel(name = "桌面虚拟机OS版本")
|
||||||
|
private String desktopVmOsVersion;
|
||||||
|
|
||||||
|
/** 虚拟机规格及数量 */
|
||||||
|
@Excel(name = "虚拟机规格及数量")
|
||||||
|
private String vmSpecQuantity;
|
||||||
|
|
||||||
|
/** 会审结论 */
|
||||||
|
@Excel(name = "会审结论")
|
||||||
|
private String jointTrialResult;
|
||||||
|
|
||||||
|
private List<OmsFileLog> projectFileList;
|
||||||
|
private String fileId;
|
||||||
|
|
||||||
|
|
||||||
private Boolean availableForOrder;
|
private Boolean availableForOrder;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -46,4 +46,6 @@ public interface OmsFileLogMapper {
|
||||||
*/
|
*/
|
||||||
int batchRemove(Integer[] ids);
|
int batchRemove(Integer[] ids);
|
||||||
|
|
||||||
|
int insertBatch(List<OmsFileLog> fileLogList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ public interface IOmsReceiptBillService {
|
||||||
List<OmsReceiptBill> listApproved(OmsReceiptBill omsReceiptBill);
|
List<OmsReceiptBill> listApproved(OmsReceiptBill omsReceiptBill);
|
||||||
|
|
||||||
AjaxResult revoke(OmsReceiptBill omsReceiptBill);
|
AjaxResult revoke(OmsReceiptBill omsReceiptBill);
|
||||||
|
|
||||||
|
OmsReceiptBill getInfoByCode(String receiptBillCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,4 +70,8 @@ public interface IProjectInfoService
|
||||||
ProjectInfo selectProjectInfoByOrderCode(String orderCode);
|
ProjectInfo selectProjectInfoByOrderCode(String orderCode);
|
||||||
|
|
||||||
int editJoinTrial(ProjectInfo projectInfo);
|
int editJoinTrial(ProjectInfo projectInfo);
|
||||||
|
|
||||||
|
byte[] exportSingleJoinTrial(ProjectInfo projectInfo);
|
||||||
|
|
||||||
|
String exportJoinTrial(ProjectInfo projectInfo);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,17 @@
|
||||||
package com.ruoyi.sip.service.impl;
|
package com.ruoyi.sip.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.ruoyi.sip.domain.OmsFileLog;
|
import com.ruoyi.sip.domain.OmsFileLog;
|
||||||
import com.ruoyi.sip.mapper.OmsFileLogMapper;
|
import com.ruoyi.sip.mapper.OmsFileLogMapper;
|
||||||
import com.ruoyi.sip.service.IOmsFileLogService;
|
import com.ruoyi.sip.service.IOmsFileLogService;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author ch
|
* @Author ch
|
||||||
|
|
|
||||||
|
|
@ -639,9 +639,10 @@ public class OmsInvoiceBillServiceImpl implements IOmsInvoiceBillService, TodoCo
|
||||||
List<String> row = new ArrayList<>();
|
List<String> row = new ArrayList<>();
|
||||||
row.add(String.valueOf(integer.getAndIncrement()));
|
row.add(String.valueOf(integer.getAndIncrement()));
|
||||||
row.add(item.getBuyerName());
|
row.add(item.getBuyerName());
|
||||||
row.add(item.getBuyerCreditCode());
|
row.add(Optional.ofNullable(item.getBuyerCreditCode()).orElse(""));
|
||||||
row.add(item.getBuyerAddress());
|
row.add(Optional.ofNullable(item.getBuyerAddress()).orElse(""));
|
||||||
row.add("开户行:"+item.getBuyerBank()+"\n"+"账号:"+item.getBuyerBankAccount());
|
row.add("开户行:"+Optional.ofNullable(item.getBuyerBank()).orElse("")+"\n"+"账号:"
|
||||||
|
+Optional.ofNullable(item.getBuyerBankAccount()).orElse(""));
|
||||||
row.add("");
|
row.add("");
|
||||||
row.add(item.getProductName());
|
row.add(item.getProductName());
|
||||||
row.add(item.getProductModel());
|
row.add(item.getProductModel());
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@ public class OmsPayablePaymentDetailServiceImpl implements IOmsPayablePaymentDet
|
||||||
OmsPayablePaymentDetail temp = new OmsPayablePaymentDetail();
|
OmsPayablePaymentDetail temp = new OmsPayablePaymentDetail();
|
||||||
BeanUtil.copyProperties(payablePaymentDetail,temp);
|
BeanUtil.copyProperties(payablePaymentDetail,temp);
|
||||||
temp.setId(null);
|
temp.setId(null);
|
||||||
|
temp.setWriteOffId(null);
|
||||||
temp.setPayableDetailType(OmsPayablePaymentDetail.PayableDetailTypeEnum.REFUND.getCode());
|
temp.setPayableDetailType(OmsPayablePaymentDetail.PayableDetailTypeEnum.REFUND.getCode());
|
||||||
temp.setPaymentBillCode(payableBillCode);
|
temp.setPaymentBillCode(payableBillCode);
|
||||||
temp.setCreateBy(ShiroUtils.getUserId().toString());
|
temp.setCreateBy(ShiroUtils.getUserId().toString());
|
||||||
|
|
|
||||||
|
|
@ -104,12 +104,24 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
|
||||||
{
|
{
|
||||||
VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorCode(omsPaymentBill.getVendorCode());
|
VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorCode(omsPaymentBill.getVendorCode());
|
||||||
omsPaymentBill.setCreateBy(ShiroUtils.getUserId().toString());
|
omsPaymentBill.setCreateBy(ShiroUtils.getUserId().toString());
|
||||||
omsPaymentBill.setPayName(vendorInfo.getPayName());
|
if (StrUtil.isEmpty(omsPaymentBill.getPayName())) {
|
||||||
omsPaymentBill.setPayBankNumber(vendorInfo.getPayBankNumber());
|
omsPaymentBill.setPayName(vendorInfo.getPayName());
|
||||||
omsPaymentBill.setPayBankOpenAddress(vendorInfo.getPayBankOpenAddress());
|
}
|
||||||
omsPaymentBill.setBankNumber(vendorInfo.getBankNumber());
|
if (StrUtil.isEmpty(omsPaymentBill.getPayBankNumber())) {
|
||||||
omsPaymentBill.setPaymentStatus(OmsPaymentBill.PaymentStatusEnum.WAIT_PAYMENT.getCode());
|
omsPaymentBill.setPayBankNumber(vendorInfo.getPayBankNumber());
|
||||||
omsPaymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
}
|
||||||
|
if (StrUtil.isEmpty(omsPaymentBill.getPayBankOpenAddress())) {
|
||||||
|
omsPaymentBill.setPayBankOpenAddress(vendorInfo.getPayBankOpenAddress());
|
||||||
|
}
|
||||||
|
if (StrUtil.isEmpty(omsPaymentBill.getBankNumber())) {
|
||||||
|
omsPaymentBill.setBankNumber(vendorInfo.getBankNumber());
|
||||||
|
}
|
||||||
|
if (StrUtil.isEmpty(omsPaymentBill.getPaymentStatus())) {
|
||||||
|
omsPaymentBill.setPaymentStatus(OmsPaymentBill.PaymentStatusEnum.WAIT_PAYMENT.getCode());
|
||||||
|
}
|
||||||
|
if (StrUtil.isEmpty(omsPaymentBill.getApproveStatus())) {
|
||||||
|
omsPaymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
||||||
|
}
|
||||||
omsPaymentBill.setPaymentBillCode(generatePaymentBillCode());
|
omsPaymentBill.setPaymentBillCode(generatePaymentBillCode());
|
||||||
omsPaymentBill.setCreateTime(DateUtils.getNowDate());
|
omsPaymentBill.setCreateTime(DateUtils.getNowDate());
|
||||||
if (omsPaymentBill.getPaymentTime() == null) {
|
if (omsPaymentBill.getPaymentTime() == null) {
|
||||||
|
|
@ -406,9 +418,9 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
|
||||||
originalBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.REFUNDED.getCode());
|
originalBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.REFUNDED.getCode());
|
||||||
updateOmsPaymentBill(originalBill);
|
updateOmsPaymentBill(originalBill);
|
||||||
//4 创建付款明细
|
//4 创建付款明细
|
||||||
detailService.applyRefund(originalBill.getPayableBillCode(),refundBill.getPayableBillCode());
|
detailService.applyRefund(originalBill.getPaymentBillCode(),refundBill.getPaymentBillCode());
|
||||||
//5. 开始退款审批流程
|
//5. 开始退款审批流程
|
||||||
todoService.startProcessDeleteBefore(originalBill.getPaymentBillCode(), originalBill.getPaymentBillCode(),
|
todoService.startProcessDeleteBefore(refundBill.getPaymentBillCode(), refundBill.getPaymentBillCode(),
|
||||||
new HashMap<String, Object>() {{
|
new HashMap<String, Object>() {{
|
||||||
put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
put("applyUserName", ShiroUtils.getSysUser().getUserName());
|
||||||
put("applyUser", ShiroUtils.getUserId());
|
put("applyUser", ShiroUtils.getUserId());
|
||||||
|
|
@ -476,6 +488,9 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
|
||||||
return AjaxResult.error("付款单不存在,请刷新后重试");
|
return AjaxResult.error("付款单不存在,请刷新后重试");
|
||||||
}
|
}
|
||||||
if (OmsPaymentBill.PaymentBillTypeEnum.REFUND.getCode().equals(existBill.getPaymentBillType())){
|
if (OmsPaymentBill.PaymentBillTypeEnum.REFUND.getCode().equals(existBill.getPaymentBillType())){
|
||||||
|
if (OmsPaymentBill.PaymentStatusEnum.REFUNDED.getCode().equals(existBill.getPaymentStatus())){
|
||||||
|
return AjaxResult.error("该退款单已退款成功,无法撤销");
|
||||||
|
}
|
||||||
// 撤销退款单
|
// 撤销退款单
|
||||||
deleteOmsPaymentBillById(existBill.getId());
|
deleteOmsPaymentBillById(existBill.getId());
|
||||||
detailService.deleteByPaymentCode(existBill.getPaymentBillCode());
|
detailService.deleteByPaymentCode(existBill.getPaymentBillCode());
|
||||||
|
|
@ -484,6 +499,9 @@ public class OmsPaymentBillServiceImpl implements IOmsPaymentBillService , TodoC
|
||||||
omsPaymentBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
|
omsPaymentBill.setRefundStatus(OmsPaymentBill.RefundStatusEnum.WAIT_REFUNDED.getCode());
|
||||||
updateOmsPaymentBill(omsPaymentBill);
|
updateOmsPaymentBill(omsPaymentBill);
|
||||||
}else{
|
}else{
|
||||||
|
if (OmsPaymentBill.PaymentStatusEnum.PAYMENT.getCode().equals(existBill.getPaymentStatus())){
|
||||||
|
return AjaxResult.error("该退款单已付款成功,无法撤销");
|
||||||
|
}
|
||||||
// 撤销付款单
|
// 撤销付款单
|
||||||
paymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
paymentBill.setApproveStatus(ApproveStatusEnum.WAIT_COMMIT.getCode());
|
||||||
omsPaymentBillMapper.revoke(paymentBill);
|
omsPaymentBillMapper.revoke(paymentBill);
|
||||||
|
|
|
||||||
|
|
@ -548,6 +548,20 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
||||||
return AjaxResult.success("撤销成功");
|
return AjaxResult.success("撤销成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OmsReceiptBill getInfoByCode(String receiptBillCode) {
|
||||||
|
OmsReceiptBill receiptBill = omsReceiptBillMapper.queryByCode(receiptBillCode);
|
||||||
|
if (receiptBill == null){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
List<ReceiptDetailDTO> receiptDetailDTOS = omsReceivableReceiptDetailService.listReceivableByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||||
|
receiptBill.setDetailDTOList(receiptDetailDTOS);
|
||||||
|
List<OmsFinAttachment> list = attachmentService.list(Collections.singletonList(receiptBill.getId()), OmsFinAttachment.RelatedBillTypeEnum.RECEIPT.getCode());
|
||||||
|
Optional<OmsFinAttachment> first = list.stream().filter(item -> !"2".equals(item.getDelFlag())).max((o1, o2) -> o2.getCreateTime().compareTo(o1.getCreateTime()));
|
||||||
|
receiptBill.setAttachment(first.orElse(null));
|
||||||
|
return receiptBill;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object todoDetail(String businessKey, String processKey, String todoId) {
|
public Object todoDetail(String businessKey, String processKey, String todoId) {
|
||||||
|
|
@ -585,45 +599,45 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
||||||
omsReceiptBillMapper.update(updateBill);
|
omsReceiptBillMapper.update(updateBill);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
if (todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptApprove()) && taskName.startsWith("财务")){
|
// if (todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptApprove()) && taskName.startsWith("财务")){
|
||||||
//处理收款审批
|
// //处理收款审批
|
||||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
// OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||||
updateBill.setId(receiptBill.getId());
|
// updateBill.setId(receiptBill.getId());
|
||||||
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
// updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||||
updateBill.setActualReceiptTime(DateUtils.getNowDate());
|
// updateBill.setActualReceiptTime(DateUtils.getNowDate());
|
||||||
updateBill.setApproveTime(DateUtils.getNowDate());
|
// updateBill.setApproveTime(DateUtils.getNowDate());
|
||||||
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode());
|
// updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode());
|
||||||
if (receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())){
|
// if (receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())){
|
||||||
updateBill.setRemainingAmount(receiptBill.getTotalPriceWithTax());
|
// updateBill.setRemainingAmount(receiptBill.getTotalPriceWithTax());
|
||||||
}
|
// }
|
||||||
omsReceiptBillMapper.update(updateBill);
|
// omsReceiptBillMapper.update(updateBill);
|
||||||
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
// List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||||
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
// receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||||
if (!receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())) {
|
// if (!receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())) {
|
||||||
//审批完成后需要自动核销 因为审批时已经上传附件
|
// //审批完成后需要自动核销 因为审批时已经上传附件
|
||||||
WriteOffReceiptRequestDto writeOffRequestDto = new WriteOffReceiptRequestDto();
|
// WriteOffReceiptRequestDto writeOffRequestDto = new WriteOffReceiptRequestDto();
|
||||||
writeOffRequestDto.setReceiptBillId(receiptBill.getId());
|
// writeOffRequestDto.setReceiptBillId(receiptBill.getId());
|
||||||
writeOffRequestDto.setDetailList(omsReceivableReceiptDetailList);
|
// writeOffRequestDto.setDetailList(omsReceivableReceiptDetailList);
|
||||||
writeOffRequestDto.setPartnerCode(receiptBill.getPartnerCode());
|
// writeOffRequestDto.setPartnerCode(receiptBill.getPartnerCode());
|
||||||
writeOffRequestDto.setPartnerName(receiptBill.getPartnerName());
|
// writeOffRequestDto.setPartnerName(receiptBill.getPartnerName());
|
||||||
writeOffRequestDto.setRemark(StrUtil.format("{}自动核销数据:{}", DateUtils.getTime(), receiptBill.getReceiptBillCode()));
|
// writeOffRequestDto.setRemark(StrUtil.format("{}自动核销数据:{}", DateUtils.getTime(), receiptBill.getReceiptBillCode()));
|
||||||
// 新增核销记录
|
// // 新增核销记录
|
||||||
omsReceivableWriteOffService.autoWriteOff(writeOffRequestDto);
|
// omsReceivableWriteOffService.autoWriteOff(writeOffRequestDto);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
}else if(todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptRefound()) && taskName.startsWith("公司领导")){
|
// }else if(todo.getProcessKey().equals(processConfig.getDefinition().getFinanceReceiptRefound()) && taskName.startsWith("公司领导")){
|
||||||
//处理退款审批
|
// //处理退款审批
|
||||||
OmsReceiptBill updateBill = new OmsReceiptBill();
|
// OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||||
updateBill.setId(receiptBill.getId());
|
// updateBill.setId(receiptBill.getId());
|
||||||
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
// updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||||
updateBill.setApproveTime(DateUtils.getNowDate());
|
// updateBill.setApproveTime(DateUtils.getNowDate());
|
||||||
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode());
|
// updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode());
|
||||||
omsReceiptBillMapper.update(updateBill);
|
// omsReceiptBillMapper.update(updateBill);
|
||||||
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
// List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||||
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
// receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -637,6 +651,52 @@ public class OmsReceiptBillServiceImpl implements IOmsReceiptBillService, TodoCo
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean multiInstanceApproveCallback(String activityName, ProcessInstance processInstance) {
|
public boolean multiInstanceApproveCallback(String activityName, ProcessInstance processInstance) {
|
||||||
|
Map<String, Object> processVariables = processInstance.getProcessVariables();
|
||||||
|
Integer approveBtn = (Integer) processVariables.get("approveBtn");
|
||||||
|
if (approveBtn == null || approveBtn!=1){
|
||||||
|
return TodoCommonTemplate.super.multiInstanceApproveCallback(activityName, processInstance);
|
||||||
|
}
|
||||||
|
String flowBusinessKey = processInstance.getBusinessKey();
|
||||||
|
OmsReceiptBill receiptBill = omsReceiptBillMapper.queryByCode(flowBusinessKey);
|
||||||
|
if (processInstance.getProcessDefinitionKey().equals(processConfig.getDefinition().getFinanceReceiptApprove()) && activityName.startsWith("财务")){
|
||||||
|
//处理收款审批
|
||||||
|
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||||
|
updateBill.setId(receiptBill.getId());
|
||||||
|
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||||
|
updateBill.setActualReceiptTime(DateUtils.getNowDate());
|
||||||
|
updateBill.setApproveTime(DateUtils.getNowDate());
|
||||||
|
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.PAYMENT.getCode());
|
||||||
|
if (receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())){
|
||||||
|
updateBill.setRemainingAmount(receiptBill.getTotalPriceWithTax());
|
||||||
|
}
|
||||||
|
omsReceiptBillMapper.update(updateBill);
|
||||||
|
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||||
|
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||||
|
if (!receiptBill.getReceiptBillType().equals(OmsReceiptBill.ReceiptBillTypeEnum.PRE_RECEIPT.getCode())) {
|
||||||
|
//审批完成后需要自动核销 因为审批时已经上传附件
|
||||||
|
WriteOffReceiptRequestDto writeOffRequestDto = new WriteOffReceiptRequestDto();
|
||||||
|
writeOffRequestDto.setReceiptBillId(receiptBill.getId());
|
||||||
|
writeOffRequestDto.setDetailList(omsReceivableReceiptDetailList);
|
||||||
|
writeOffRequestDto.setPartnerCode(receiptBill.getPartnerCode());
|
||||||
|
writeOffRequestDto.setPartnerName(receiptBill.getPartnerName());
|
||||||
|
writeOffRequestDto.setRemark(StrUtil.format("{}自动核销数据:{}", DateUtils.getTime(), receiptBill.getReceiptBillCode()));
|
||||||
|
// 新增核销记录
|
||||||
|
omsReceivableWriteOffService.autoWriteOff(writeOffRequestDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}else if(processInstance.getProcessDefinitionKey().equals(processConfig.getDefinition().getFinanceReceiptRefound()) && activityName.startsWith("公司领导")){
|
||||||
|
//处理退款审批
|
||||||
|
OmsReceiptBill updateBill = new OmsReceiptBill();
|
||||||
|
updateBill.setId(receiptBill.getId());
|
||||||
|
updateBill.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
|
||||||
|
updateBill.setApproveTime(DateUtils.getNowDate());
|
||||||
|
updateBill.setReceiptStatus(OmsReceiptBill.ReceiptStatusEnum.REFUNDED.getCode());
|
||||||
|
omsReceiptBillMapper.update(updateBill);
|
||||||
|
List<OmsReceivableReceiptDetail> omsReceivableReceiptDetailList = omsReceivableReceiptDetailService.listByReceiptBillCode(receiptBill.getReceiptBillCode());
|
||||||
|
receivableBillService.updateReceiptAmount(omsReceivableReceiptDetailList.stream().map(OmsReceivableReceiptDetail::getReceivableBillId).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
return TodoCommonTemplate.super.multiInstanceApproveCallback(activityName, processInstance);
|
return TodoCommonTemplate.super.multiInstanceApproveCallback(activityName, processInstance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -218,13 +218,13 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
|
||||||
ticketBill.setId(null);
|
ticketBill.setId(null);
|
||||||
OmsTicketBill originalBill = selectOmsTicketBillById(originId);
|
OmsTicketBill originalBill = selectOmsTicketBillById(originId);
|
||||||
if (originalBill == null) {
|
if (originalBill == null) {
|
||||||
return AjaxResult.error("原始付款单不存在");
|
return AjaxResult.error("原始收票单不存在");
|
||||||
}
|
}
|
||||||
if (!OmsTicketBill.TicketStatusEnum.TICKET.getCode().equals(originalBill.getTicketStatus())) {
|
if (!OmsTicketBill.TicketStatusEnum.TICKET.getCode().equals(originalBill.getTicketStatus())) {
|
||||||
return AjaxResult.error("只有已收票的订单才能申请红冲");
|
return AjaxResult.error("只有已收票的数据才能申请红冲");
|
||||||
}
|
}
|
||||||
if (OmsTicketBill.RefundStatusEnum.REFUNDED.getCode().equals(originalBill.getRefundStatus())) {
|
if (OmsTicketBill.RefundStatusEnum.REFUNDED.getCode().equals(originalBill.getRefundStatus())) {
|
||||||
return AjaxResult.error("该付款单已申请过红冲,请勿重复操作");
|
return AjaxResult.error("该收票单已申请过红冲,请勿重复操作");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 创建新的退款单
|
// 2. 创建新的退款单
|
||||||
|
|
@ -242,7 +242,7 @@ public class OmsTicketBillServiceImpl implements IOmsTicketBillService, TodoComm
|
||||||
refundBill.setTicketType(originalBill.getTicketType());
|
refundBill.setTicketType(originalBill.getTicketType());
|
||||||
// 设置新属性
|
// 设置新属性
|
||||||
refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode());
|
refundBill.setTicketBillType(OmsTicketBill.TicketBillTypeEnum.RED_RUSH.getCode());
|
||||||
refundBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.TICKET.getCode());
|
refundBill.setTicketStatus(OmsTicketBill.TicketStatusEnum.WAIT_RED_RUSH.getCode());
|
||||||
refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode());
|
refundBill.setRefundStatus(OmsTicketBill.RefundStatusEnum.REFUNDED.getCode());
|
||||||
refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
|
refundBill.setApproveStatus(ApproveStatusEnum.WAIT_APPROVE.getCode());
|
||||||
refundBill.setTicketPriceWithoutTax(ticketBill.getTicketPriceWithoutTax());
|
refundBill.setTicketPriceWithoutTax(ticketBill.getTicketPriceWithoutTax());
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
package com.ruoyi.sip.service.impl;
|
package com.ruoyi.sip.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.convert.NumberChineseFormatter;
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alibaba.excel.EasyExcel;
|
import com.alibaba.excel.EasyExcel;
|
||||||
import com.alibaba.excel.metadata.CellData;
|
import com.alibaba.excel.metadata.CellData;
|
||||||
import com.alibaba.excel.metadata.Head;
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
|
@ -10,6 +12,7 @@ import com.alibaba.excel.write.metadata.style.WriteCellStyle;
|
||||||
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
|
||||||
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
|
import com.alibaba.excel.write.style.column.AbstractColumnWidthStyleStrategy;
|
||||||
import com.ruoyi.common.annotation.DataScope;
|
import com.ruoyi.common.annotation.DataScope;
|
||||||
|
import com.ruoyi.common.config.RuoYiConfig;
|
||||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||||
import com.ruoyi.common.core.text.Convert;
|
import com.ruoyi.common.core.text.Convert;
|
||||||
import com.ruoyi.common.exception.ServiceException;
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
|
@ -27,13 +30,20 @@ import com.ruoyi.sip.service.*;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.Cell;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
|
import org.apache.poi.xwpf.usermodel.*;
|
||||||
import org.hibernate.validator.internal.constraintvalidators.bv.time.future.FutureValidatorForOffsetTime;
|
import org.hibernate.validator.internal.constraintvalidators.bv.time.future.FutureValidatorForOffsetTime;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
|
|
@ -67,6 +77,9 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ICustomerInfoService customerInfoService;
|
private ICustomerInfoService customerInfoService;
|
||||||
|
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IOmsFileLogService omsFileLogService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IProjectUserCollectInfoService projectUserCollectInfoService;
|
private IProjectUserCollectInfoService projectUserCollectInfoService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
|
@ -75,7 +88,6 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
private static final Integer PROJECT_CODE_LENGTH = 6;
|
private static final Integer PROJECT_CODE_LENGTH = 6;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static final String INDUSTRY_TYPE_YYS_DICT_TYPE = "bg_yys";
|
public static final String INDUSTRY_TYPE_YYS_DICT_TYPE = "bg_yys";
|
||||||
public static final String INDUSTRY_TYPE_DICT_TYPE = "bg_hysy";
|
public static final String INDUSTRY_TYPE_DICT_TYPE = "bg_hysy";
|
||||||
public static final String BG_TYPE_DICT_TYPE = "bg_type";
|
public static final String BG_TYPE_DICT_TYPE = "bg_type";
|
||||||
|
|
@ -99,8 +111,11 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
Map<String, List<ProjectProductInfo>> productListMap = projectProductInfos.stream().collect(Collectors.groupingBy(ProjectProductInfo::getType));
|
Map<String, List<ProjectProductInfo>> productListMap = projectProductInfos.stream().collect(Collectors.groupingBy(ProjectProductInfo::getType));
|
||||||
projectInfo.setSoftwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.SOFTWARE.getType()));
|
projectInfo.setSoftwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.SOFTWARE.getType()));
|
||||||
projectInfo.setHardwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.HARDWARE.getType()));
|
projectInfo.setHardwareProjectProductInfoList(productListMap.get(ProductInfo.ProductTypeEnum.HARDWARE.getType()));
|
||||||
|
// 硬件
|
||||||
List<ProjectProductInfo> maintenanceProjectProductInfoList = productListMap.getOrDefault(ProductInfo.ProductTypeEnum.HARDWARE_MAINTENANCE.getType(), new ArrayList<>());
|
List<ProjectProductInfo> maintenanceProjectProductInfoList = productListMap.getOrDefault(ProductInfo.ProductTypeEnum.HARDWARE_MAINTENANCE.getType(), new ArrayList<>());
|
||||||
|
// 软件
|
||||||
maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.SOFTWARE_MAINTENANCE.getType(), new ArrayList<>()));
|
maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.SOFTWARE_MAINTENANCE.getType(), new ArrayList<>()));
|
||||||
|
// 其他
|
||||||
maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.OTHER.getType(), new ArrayList<>()));
|
maintenanceProjectProductInfoList.addAll(productListMap.getOrDefault(ProductInfo.ProductTypeEnum.OTHER.getType(), new ArrayList<>()));
|
||||||
projectInfo.setMaintenanceProjectProductInfoList(maintenanceProjectProductInfoList);
|
projectInfo.setMaintenanceProjectProductInfoList(maintenanceProjectProductInfoList);
|
||||||
//查询变更记录信息
|
//查询变更记录信息
|
||||||
|
|
@ -108,7 +123,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
projectInfo.setProjectWorkProgressList(projectWorkProgresses);
|
projectInfo.setProjectWorkProgressList(projectWorkProgresses);
|
||||||
//查询操作日志信息
|
//查询操作日志信息
|
||||||
List<ProjectOperateLog> projectOperateLogs = operateLogService.selectProjectOperateLogListByProjectId(projectInfo.getId());
|
List<ProjectOperateLog> projectOperateLogs = operateLogService.selectProjectOperateLogListByProjectId(projectInfo.getId());
|
||||||
projectOperateLogs=projectOperateLogs.stream().filter(item->{
|
projectOperateLogs = projectOperateLogs.stream().filter(item -> {
|
||||||
if (ShiroUtils.getSysUser().isAdmin()) {
|
if (ShiroUtils.getSysUser().isAdmin()) {
|
||||||
return ProjectOperateLog.LogTypeEnum.DETAIL.getValue().equals(item.getLogType());
|
return ProjectOperateLog.LogTypeEnum.DETAIL.getValue().equals(item.getLogType());
|
||||||
}
|
}
|
||||||
|
|
@ -119,6 +134,12 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
if (CollUtil.isNotEmpty(projectPocInfos)) {
|
if (CollUtil.isNotEmpty(projectPocInfos)) {
|
||||||
projectInfo.setProjectPocInfo(projectPocInfos.get(0));
|
projectInfo.setProjectPocInfo(projectPocInfos.get(0));
|
||||||
}
|
}
|
||||||
|
if (StringUtils.isNotEmpty(projectInfo.getFileId())) {
|
||||||
|
OmsFileLog queryFileLog = new OmsFileLog();
|
||||||
|
queryFileLog.setIdList(Arrays.stream(projectInfo.getFileId().split(",")).map(item -> Integer.parseInt(item)).collect(Collectors.toList()));
|
||||||
|
List<OmsFileLog> omsFileLogs = omsFileLogService.queryAll(queryFileLog);
|
||||||
|
projectInfo.setProjectFileList(omsFileLogs);
|
||||||
|
}
|
||||||
return projectInfo;
|
return projectInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,7 +153,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
@DataScope(deptAlias = "t3", userAlias = "t3")
|
@DataScope(deptAlias = "t3", userAlias = "t3")
|
||||||
public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo) {
|
public List<ProjectInfo> selectProjectInfoList(ProjectInfo projectInfo) {
|
||||||
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
||||||
if (CollUtil.isEmpty(projectInfos)){
|
if (CollUtil.isEmpty(projectInfos)) {
|
||||||
return projectInfos;
|
return projectInfos;
|
||||||
}
|
}
|
||||||
//处理客户信息地址
|
//处理客户信息地址
|
||||||
|
|
@ -158,7 +179,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
if (customerInfo != null) {
|
if (customerInfo != null) {
|
||||||
info.setCustomerAddress(customerInfo.getAddress());
|
info.setCustomerAddress(customerInfo.getAddress());
|
||||||
}
|
}
|
||||||
info.setCanGenerate(orderInfoMap.get(info.getId()) == null && "1".equals(info.getJointTrial()));
|
info.setCanGenerate(orderInfoMap.get(info.getId()) == null);
|
||||||
if (info.getLastWorkUpdateTime() != null) {
|
if (info.getLastWorkUpdateTime() != null) {
|
||||||
LocalDate localDate = info.getLastWorkUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
LocalDate localDate = info.getLastWorkUpdateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
|
||||||
Period between = Period.between(localDate, now);
|
Period between = Period.between(localDate, now);
|
||||||
|
|
@ -166,7 +187,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
} else {
|
} else {
|
||||||
info.setHighlight(false);
|
info.setHighlight(false);
|
||||||
}
|
}
|
||||||
info.setCollect(projectCollectMap.getOrDefault(info.getId(),"0"));
|
info.setCollect(projectCollectMap.getOrDefault(info.getId(), "0"));
|
||||||
}
|
}
|
||||||
return projectInfos;
|
return projectInfos;
|
||||||
}
|
}
|
||||||
|
|
@ -268,7 +289,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
saveOtherInfo(projectInfo);
|
saveOtherInfo(projectInfo);
|
||||||
// 记录操作日志
|
// 记录操作日志
|
||||||
recordOperationLogs(projectInfo, oldProjectInfo);
|
recordOperationLogs(projectInfo, oldProjectInfo);
|
||||||
if (CollUtil.isNotEmpty(projectOrderInfos)){
|
if (CollUtil.isNotEmpty(projectOrderInfos)) {
|
||||||
ProjectOrderInfo projectOrderInfo = projectOrderInfos.get(0);
|
ProjectOrderInfo projectOrderInfo = projectOrderInfos.get(0);
|
||||||
ProjectOrderInfo update = new ProjectOrderInfo();
|
ProjectOrderInfo update = new ProjectOrderInfo();
|
||||||
update.setId(projectOrderInfo.getId());
|
update.setId(projectOrderInfo.getId());
|
||||||
|
|
@ -367,7 +388,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
operateLogService.insertProjectOperateLog(operateLog);
|
operateLogService.insertProjectOperateLog(operateLog);
|
||||||
//记录type
|
//记录type
|
||||||
}
|
}
|
||||||
if (logSimpleContent.length() > 0){
|
if (logSimpleContent.length() > 0) {
|
||||||
ProjectOperateLog operateLog = new ProjectOperateLog();
|
ProjectOperateLog operateLog = new ProjectOperateLog();
|
||||||
operateLog.setProjectId(projectInfo.getId());
|
operateLog.setProjectId(projectInfo.getId());
|
||||||
operateLog.setOperateLog(logSimpleContent.toString());
|
operateLog.setOperateLog(logSimpleContent.toString());
|
||||||
|
|
@ -388,21 +409,21 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
return ++index;
|
return ++index;
|
||||||
}
|
}
|
||||||
if (oldInfo != null) {
|
if (oldInfo != null) {
|
||||||
index=compareField(logContent, index, "POC服务器配置", oldInfo.getServerConfig(), info.getServerConfig());
|
index = compareField(logContent, index, "POC服务器配置", oldInfo.getServerConfig(), info.getServerConfig());
|
||||||
index=compareField(logContent, index, "POC云桌面版本", oldInfo.getVdiVersion(), info.getVdiVersion());
|
index = compareField(logContent, index, "POC云桌面版本", oldInfo.getVdiVersion(), info.getVdiVersion());
|
||||||
index=compareField(logContent, index, "POC配置终端", oldInfo.getTerminalConfig(), info.getTerminalConfig());
|
index = compareField(logContent, index, "POC配置终端", oldInfo.getTerminalConfig(), info.getTerminalConfig());
|
||||||
index=compareField(logContent, index, "POC操作系统", oldInfo.getOperateSystem(), info.getOperateSystem());
|
index = compareField(logContent, index, "POC操作系统", oldInfo.getOperateSystem(), info.getOperateSystem());
|
||||||
index=compareField(logContent, index, "POC H3C接口人", oldInfo.getH3cPerson(), info.getH3cPerson());
|
index = compareField(logContent, index, "POC H3C接口人", oldInfo.getH3cPerson(), info.getH3cPerson());
|
||||||
index=compareField(logContent, index, "POC H3C TEL", oldInfo.getH3cPhone(), info.getH3cPhone());
|
index = compareField(logContent, index, "POC H3C TEL", oldInfo.getH3cPhone(), info.getH3cPhone());
|
||||||
index=compareField(logContent, index, "POC汇智接口人", oldInfo.getHzInterfacePerson(), info.getHzInterfacePerson());
|
index = compareField(logContent, index, "POC汇智接口人", oldInfo.getHzInterfacePerson(), info.getHzInterfacePerson());
|
||||||
index=compareField(logContent, index, "POC汇智 TEL", oldInfo.getHzInterfacePhone(), info.getHzInterfacePhone());
|
index = compareField(logContent, index, "POC汇智 TEL", oldInfo.getHzInterfacePhone(), info.getHzInterfacePhone());
|
||||||
index=compareField(logContent, index, "POC研发接口人", oldInfo.getProcessPerson(), info.getProcessPerson());
|
index = compareField(logContent, index, "POC研发接口人", oldInfo.getProcessPerson(), info.getProcessPerson());
|
||||||
index=compareField(logContent, index, "POC研发 TEL", oldInfo.getProcessPhone(), info.getProcessPhone());
|
index = compareField(logContent, index, "POC研发 TEL", oldInfo.getProcessPhone(), info.getProcessPhone());
|
||||||
index=compareField(logContent, index, "POC现场接口人", oldInfo.getHandlePerson(), info.getHandlePerson());
|
index = compareField(logContent, index, "POC现场接口人", oldInfo.getHandlePerson(), info.getHandlePerson());
|
||||||
index=compareField(logContent, index, "POC现场 TEL", oldInfo.getHandlePhone(), info.getHandlePhone());
|
index = compareField(logContent, index, "POC现场 TEL", oldInfo.getHandlePhone(), info.getHandlePhone());
|
||||||
index=compareField(logContent, index, "POC启动时间", formatterDate(oldInfo.getStartDate()), formatterDate(info.getStartDate()));
|
index = compareField(logContent, index, "POC启动时间", formatterDate(oldInfo.getStartDate()), formatterDate(info.getStartDate()));
|
||||||
index=compareField(logContent, index, "POC预计完成时间", formatterDate(oldInfo.getPlanFinishTime()), formatterDate(info.getPlanFinishTime()));
|
index = compareField(logContent, index, "POC预计完成时间", formatterDate(oldInfo.getPlanFinishTime()), formatterDate(info.getPlanFinishTime()));
|
||||||
index=compareField(logContent, index, "POC实际完成时间", formatterDate(oldInfo.getRealFinishTime()), formatterDate(info.getRealFinishTime()));
|
index = compareField(logContent, index, "POC实际完成时间", formatterDate(oldInfo.getRealFinishTime()), formatterDate(info.getRealFinishTime()));
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
@ -413,6 +434,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
}
|
}
|
||||||
return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date);
|
return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 比较产品信息列表并生成日志内容
|
* 比较产品信息列表并生成日志内容
|
||||||
*
|
*
|
||||||
|
|
@ -435,7 +457,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
//删除
|
//删除
|
||||||
List<String> deleteCode =CollUtil.isEmpty(oldList) ? Collections.emptyList() : oldList.stream().filter(item -> !newMap.containsKey(item.getId())).map(ProjectProductInfo::getProductBomCode).collect(Collectors.toList());
|
List<String> deleteCode = CollUtil.isEmpty(oldList) ? Collections.emptyList() : oldList.stream().filter(item -> !newMap.containsKey(item.getId())).map(ProjectProductInfo::getProductBomCode).collect(Collectors.toList());
|
||||||
if (CollUtil.isNotEmpty(deleteCode)) {
|
if (CollUtil.isNotEmpty(deleteCode)) {
|
||||||
logContent.append(index).append(".产品删除").append(type).append(":").append(String.join(",", deleteCode)).append("\n");
|
logContent.append(index).append(".产品删除").append(type).append(":").append(String.join(",", deleteCode)).append("\n");
|
||||||
index++;
|
index++;
|
||||||
|
|
@ -482,7 +504,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
index,
|
index,
|
||||||
fieldName,
|
fieldName,
|
||||||
oldValue,
|
oldValue,
|
||||||
newValue));
|
newValue));
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
return index;
|
return index;
|
||||||
|
|
@ -520,7 +542,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
enrichProjectData(projectInfos);
|
enrichProjectData(projectInfos);
|
||||||
|
|
||||||
// 计算各类产品的最大数量
|
// 计算各类产品的最大数量
|
||||||
List<Integer> maxCounts= calculateMaxProductCounts(projectInfos);
|
List<Integer> maxCounts = calculateMaxProductCounts(projectInfos);
|
||||||
int maxSoftware = maxCounts.get(0);
|
int maxSoftware = maxCounts.get(0);
|
||||||
int maxHardware = maxCounts.get(1);
|
int maxHardware = maxCounts.get(1);
|
||||||
int maxMaintenance = maxCounts.get(2);
|
int maxMaintenance = maxCounts.get(2);
|
||||||
|
|
@ -545,7 +567,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
StringBuilder authSql = new StringBuilder();
|
StringBuilder authSql = new StringBuilder();
|
||||||
authSql.append(" and t1.id in (select project_id from project_order_info where ");
|
authSql.append(" and t1.id in (select project_id from project_order_info where ");
|
||||||
authSql.append(StringUtils.format(" order_status in ('{}','{}')"
|
authSql.append(StringUtils.format(" order_status in ('{}','{}')"
|
||||||
,ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode(),ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode()));
|
, ProjectOrderInfo.OrderStatus.APPROVE_COMPLETE.getCode(), ProjectOrderInfo.OrderStatus.WAIT_APPROVE.getCode()));
|
||||||
if ("总代".equals(sysUser.getDept().getDeptName())) {
|
if ("总代".equals(sysUser.getDept().getDeptName())) {
|
||||||
//总代
|
//总代
|
||||||
authSql.append(" and ( ");
|
authSql.append(" and ( ");
|
||||||
|
|
@ -558,7 +580,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
}
|
}
|
||||||
authSql.append(" ) ");
|
authSql.append(" ) ");
|
||||||
dto.setAuthSql(authSql.toString());
|
dto.setAuthSql(authSql.toString());
|
||||||
}else{
|
} else {
|
||||||
dto.setAuthSql(null);
|
dto.setAuthSql(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -604,9 +626,185 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int editJoinTrial(ProjectInfo projectInfo) {
|
public int editJoinTrial(ProjectInfo projectInfo) {
|
||||||
|
if ("0".equals(projectInfo.getJointTrial())) {
|
||||||
|
List<ProjectOrderInfo> projectOrderInfos = orderInfoService.selectProjectOrderInfoByProjectId(Collections.singletonList(projectInfo.getId()));
|
||||||
|
if (CollUtil.isNotEmpty(projectOrderInfos)) {
|
||||||
|
throw new ServiceException("已生成项目,无法取消会审");
|
||||||
|
}
|
||||||
|
}
|
||||||
return projectInfoMapper.updateProjectInfo(projectInfo);
|
return projectInfoMapper.updateProjectInfo(projectInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] exportSingleJoinTrial(ProjectInfo projectInfo) {
|
||||||
|
try {
|
||||||
|
// 加载模板文件 - 模板文件位于 ruoyi-admin/src/main/resources/wordTemplate/
|
||||||
|
String localPath = RuoYiConfig.getExcelTemplate() + File.separator + "jointTrialTemplate.docx";
|
||||||
|
InputStream templateStream = Files.newInputStream(Paths.get(localPath));
|
||||||
|
if (templateStream == null) {
|
||||||
|
throw new ServiceException("模板文件不存在,请确认 wordTemplate/orderDownloadTemplate.docx 文件是否在资源目录中");
|
||||||
|
}
|
||||||
|
XWPFDocument document = new XWPFDocument(templateStream);
|
||||||
|
|
||||||
|
// 替换文档中的占位符
|
||||||
|
replaceTextInDocument(document, projectInfo);
|
||||||
|
|
||||||
|
// 将文档写入字节数组
|
||||||
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
document.write(baos);
|
||||||
|
document.close();
|
||||||
|
templateStream.close();
|
||||||
|
|
||||||
|
return baos.toByteArray();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("导出合同模板失败", e);
|
||||||
|
throw new ServiceException("导出合同模板失败: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void replaceTextInDocument(XWPFDocument document, ProjectInfo projectInfo) {
|
||||||
|
// 替换段落中的文本
|
||||||
|
for (XWPFParagraph paragraph : document.getParagraphs()) {
|
||||||
|
replaceTextInParagraph(paragraph, projectInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void replaceTextInParagraph(XWPFParagraph paragraph, ProjectInfo projectInfo) {
|
||||||
|
String text = paragraph.getText();
|
||||||
|
if (text != null && text.contains("${")) {
|
||||||
|
// 创建替换映射
|
||||||
|
Map<String, String> replacements = createReplacementMap(projectInfo);
|
||||||
|
|
||||||
|
// 替换文本
|
||||||
|
for (Map.Entry<String, String> entry : replacements.entrySet()) {
|
||||||
|
String placeholder = "${" + entry.getKey() + "}";
|
||||||
|
if (text.contains(placeholder)) {
|
||||||
|
text = text.replace(placeholder, entry.getValue() != null ? entry.getValue() : "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除原有运行并设置新文本
|
||||||
|
for (int i = paragraph.getRuns().size() - 1; i >= 0; i--) {
|
||||||
|
paragraph.removeRun(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
XWPFRun run = paragraph.createRun();
|
||||||
|
run.setText(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private Map<String, String> createReplacementMap(ProjectInfo projectInfo) {
|
||||||
|
Map<String, String> replacements = new HashMap<>();
|
||||||
|
|
||||||
|
// 基本订单信息
|
||||||
|
replacements.put("projectCode", projectInfo.getProjectCode());
|
||||||
|
replacements.put("projectName", projectInfo.getProjectName());
|
||||||
|
// 金额信息
|
||||||
|
replacements.put("customerName", projectInfo.getCustomerName());
|
||||||
|
replacements.put("customerUserName", StrUtil.isEmpty(projectInfo.getCustomerUserName())?" ":projectInfo.getCustomerUserName());
|
||||||
|
replacements.put("customerPhone", projectInfo.getCustomerPhone());
|
||||||
|
replacements.put("countryProduct", formatterStr(projectInfo.getCountryProduct()));
|
||||||
|
replacements.put("poc", formatterStr(projectInfo.getPoc()));
|
||||||
|
replacements.put("hzSupportUserName", projectInfo.getHzSupportUserName());
|
||||||
|
|
||||||
|
replacements.put("projectDesc", projectInfo.getProjectDesc());
|
||||||
|
// 责任人信息
|
||||||
|
replacements.put("softwareInfo", projectInfo.getSoftwareInfo());
|
||||||
|
replacements.put("hardwareInfo", projectInfo.getHardwareInfo());
|
||||||
|
|
||||||
|
// 进货商信息
|
||||||
|
replacements.put("terminalPeripheral", projectInfo.getTerminalPeripheral());
|
||||||
|
replacements.put("serverConfiguration", projectInfo.getServerConfiguration());
|
||||||
|
replacements.put("managementVersion", projectInfo.getManagementVersion());
|
||||||
|
replacements.put("desktopVmOsVersion", projectInfo.getDesktopVmOsVersion());
|
||||||
|
replacements.put("vmSpecQuantity", projectInfo.getVmSpecQuantity());
|
||||||
|
replacements.put("keyProblem", projectInfo.getKeyProblem());
|
||||||
|
replacements.put("jointTrialResult", projectInfo.getJointTrialResult());
|
||||||
|
|
||||||
|
return replacements;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String exportJoinTrial(ProjectInfo projectInfo) {
|
||||||
|
try {
|
||||||
|
projectInfo.setJointTrial("1");
|
||||||
|
// 获取项目信息列表
|
||||||
|
List<ProjectInfo> projectInfos = fetchProjectInfos(projectInfo);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 构建 Excel 表头和数据
|
||||||
|
List<List<String>> header = buildExcelJointTrialHeader();
|
||||||
|
List<List<String>> data = buildExcelJointTrialData(projectInfos);
|
||||||
|
|
||||||
|
// 导出 Excel 文件
|
||||||
|
return writeExcelToFile(header, data);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("导出项目信息失败", e);
|
||||||
|
throw new ServiceException("导出项目信息失败,请稍后重试");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<List<String>> buildExcelJointTrialData(List<ProjectInfo> projectInfos) {
|
||||||
|
List<List<String>> dataList = new ArrayList<>();
|
||||||
|
for (ProjectInfo info : projectInfos) {
|
||||||
|
List<String> row = new ArrayList<>();
|
||||||
|
// 添加基础字段
|
||||||
|
row.add(info.getProjectCode());
|
||||||
|
row.add(info.getProjectName());
|
||||||
|
row.add(info.getCustomerName());
|
||||||
|
row.add(info.getCustomerUserName());
|
||||||
|
row.add(info.getCustomerPhone());
|
||||||
|
row.add(info.getHzSupportUserName());
|
||||||
|
row.add(formatterStr(info.getCountryProduct()));
|
||||||
|
row.add(formatterStr(info.getPoc()));
|
||||||
|
row.add(info.getProjectDesc());
|
||||||
|
row.add(info.getSoftwareInfo());
|
||||||
|
row.add(info.getHardwareInfo());
|
||||||
|
row.add(info.getTerminalPeripheral());
|
||||||
|
row.add(info.getServerConfiguration());
|
||||||
|
row.add(info.getManagementVersion());
|
||||||
|
row.add(info.getDesktopVmOsVersion());
|
||||||
|
row.add(info.getVmSpecQuantity());
|
||||||
|
|
||||||
|
row.add(info.getKeyProblem());
|
||||||
|
row.add(info.getJointTrialResult());
|
||||||
|
|
||||||
|
dataList.add(row);
|
||||||
|
}
|
||||||
|
return dataList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<List<String>> buildExcelJointTrialHeader() {
|
||||||
|
|
||||||
|
List<List<String>> headerList = new ArrayList<>();
|
||||||
|
headerList.add(Collections.singletonList("项目编号"));
|
||||||
|
headerList.add(Collections.singletonList("项目名称"));
|
||||||
|
headerList.add(Collections.singletonList("最终客户"));
|
||||||
|
headerList.add(Collections.singletonList("客户联系人"));
|
||||||
|
headerList.add(Collections.singletonList("客户 TEL"));
|
||||||
|
headerList.add(Collections.singletonList("汇智负责人"));
|
||||||
|
headerList.add(Collections.singletonList("是否国产"));
|
||||||
|
headerList.add(Collections.singletonList("poc"));
|
||||||
|
headerList.add(Collections.singletonList("项目描述"));
|
||||||
|
headerList.add(Collections.singletonList("授权"));
|
||||||
|
headerList.add(Collections.singletonList("终端"));
|
||||||
|
headerList.add(Collections.singletonList("其它终端、外设"));
|
||||||
|
headerList.add(Collections.singletonList("服务器"));
|
||||||
|
headerList.add(Collections.singletonList("管理端版本"));
|
||||||
|
headerList.add(Collections.singletonList("桌面虚拟机OS版本"));
|
||||||
|
headerList.add(Collections.singletonList("虚拟机规格、数量"));
|
||||||
|
headerList.add(Collections.singletonList("技术风险与问题"));
|
||||||
|
headerList.add(Collections.singletonList("会审结论"));
|
||||||
|
|
||||||
|
return headerList;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private List<ProjectInfo> fetchProjectInfos(ProjectInfo projectInfo) {
|
private List<ProjectInfo> fetchProjectInfos(ProjectInfo projectInfo) {
|
||||||
projectInfo.setCurrentUserId(ShiroUtils.getUserId());
|
projectInfo.setCurrentUserId(ShiroUtils.getUserId());
|
||||||
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
List<ProjectInfo> projectInfos = projectInfoMapper.selectProjectInfoList(projectInfo);
|
||||||
|
|
@ -620,7 +818,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
Map<Long, String> projectCollectMap = projectUserCollectInfos.stream().collect(
|
Map<Long, String> projectCollectMap = projectUserCollectInfos.stream().collect(
|
||||||
Collectors.toMap(ProjectUserCollectInfo::getProjectId, ProjectUserCollectInfo::getCollect, (v1, v2) -> v1));
|
Collectors.toMap(ProjectUserCollectInfo::getProjectId, ProjectUserCollectInfo::getCollect, (v1, v2) -> v1));
|
||||||
projectInfos.forEach(item -> {
|
projectInfos.forEach(item -> {
|
||||||
item.setCollect(projectCollectMap.getOrDefault(item.getId(),"0"));
|
item.setCollect(projectCollectMap.getOrDefault(item.getId(), "0"));
|
||||||
});
|
});
|
||||||
return projectInfos;
|
return projectInfos;
|
||||||
}
|
}
|
||||||
|
|
@ -704,7 +902,6 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
public static class CustomColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
|
public static class CustomColumnWidthStyleStrategy extends AbstractColumnWidthStyleStrategy {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
|
protected void setColumnWidth(WriteSheetHolder writeSheetHolder, List<CellData> list, Cell cell, Head head, Integer integer, Boolean aBoolean) {
|
||||||
int columnIndex = cell.getColumnIndex();
|
int columnIndex = cell.getColumnIndex();
|
||||||
|
|
@ -714,7 +911,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
if (columnIndex >= 0 && columnIndex <= 24) {
|
if (columnIndex >= 0 && columnIndex <= 24) {
|
||||||
// 自适应列宽逻辑
|
// 自适应列宽逻辑
|
||||||
sheet.setColumnWidth(columnIndex, 256 * 30); // 设置固定宽度为 20 个字符
|
sheet.setColumnWidth(columnIndex, 256 * 30); // 设置固定宽度为 20 个字符
|
||||||
}
|
}
|
||||||
// 产品和服务列范围(从第 25 列开始)
|
// 产品和服务列范围(从第 25 列开始)
|
||||||
else {
|
else {
|
||||||
// 固定列宽逻辑
|
// 固定列宽逻辑
|
||||||
|
|
@ -723,7 +920,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<List<String>> buildExcelHeader( int maxSoftware, int maxHardware, int maxMaintenance, int maxWorkIndex) {
|
public List<List<String>> buildExcelHeader(int maxSoftware, int maxHardware, int maxMaintenance, int maxWorkIndex) {
|
||||||
List<List<String>> headerList = new ArrayList<>();
|
List<List<String>> headerList = new ArrayList<>();
|
||||||
headerList.add(Collections.singletonList("项目编号"));
|
headerList.add(Collections.singletonList("项目编号"));
|
||||||
headerList.add(Collections.singletonList("项目名称"));
|
headerList.add(Collections.singletonList("项目名称"));
|
||||||
|
|
@ -782,7 +979,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
headerList.add(Collections.singletonList("产品总价"));
|
headerList.add(Collections.singletonList("产品总价"));
|
||||||
|
|
||||||
|
|
||||||
for (int i = 1; i <=maxWorkIndex; i++) {
|
for (int i = 1; i <= maxWorkIndex; i++) {
|
||||||
headerList.add(Collections.singletonList("变更内容" + i));
|
headerList.add(Collections.singletonList("变更内容" + i));
|
||||||
headerList.add(Collections.singletonList("变更人" + i));
|
headerList.add(Collections.singletonList("变更人" + i));
|
||||||
headerList.add(Collections.singletonList("变更时间" + i));
|
headerList.add(Collections.singletonList("变更时间" + i));
|
||||||
|
|
@ -806,13 +1003,13 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
row.add(info.getCustomerName());
|
row.add(info.getCustomerName());
|
||||||
row.add(info.getCustomerUserName());
|
row.add(info.getCustomerUserName());
|
||||||
row.add(info.getCustomerPhone());
|
row.add(info.getCustomerPhone());
|
||||||
row.add(DictUtils.getDictLabel("operate_institution",info.getOperateInstitution()));
|
row.add(DictUtils.getDictLabel("operate_institution", info.getOperateInstitution()));
|
||||||
row.add(info.getH3cPerson());
|
row.add(info.getH3cPerson());
|
||||||
row.add(info.getH3cPhone());
|
row.add(info.getH3cPhone());
|
||||||
row.add(info.getPartnerName());
|
row.add(info.getPartnerName());
|
||||||
row.add(info.getPartnerUserName());
|
row.add(info.getPartnerUserName());
|
||||||
row.add(info.getContactWay());
|
row.add(info.getContactWay());
|
||||||
row.add(info.getEstimatedAmount()!=null?info.getEstimatedAmount().toString():"");
|
row.add(info.getEstimatedAmount() != null ? info.getEstimatedAmount().toString() : "");
|
||||||
row.add(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
|
row.add(DateUtil.format(info.getEstimatedOrderTime(), "yyyy-MM-dd"));
|
||||||
row.add(formatterStr(info.getPoc()));
|
row.add(formatterStr(info.getPoc()));
|
||||||
row.add(info.getCompetitor());
|
row.add(info.getCompetitor());
|
||||||
|
|
@ -821,14 +1018,14 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
row.add(info.getProjectDesc());
|
row.add(info.getProjectDesc());
|
||||||
row.add(info.getServerConfiguration());
|
row.add(info.getServerConfiguration());
|
||||||
row.add(DateUtil.format(info.getUpdateTime(), "yyyy-MM-dd"));
|
row.add(DateUtil.format(info.getUpdateTime(), "yyyy-MM-dd"));
|
||||||
row.add("1".equals(info.getCollect())?"是":"否");
|
row.add("1".equals(info.getCollect()) ? "是" : "否");
|
||||||
row.add("1".equals(info.getJointTrial())?"是":"否");
|
row.add("1".equals(info.getJointTrial()) ? "是" : "否");
|
||||||
BigDecimal totalPrice = BigDecimal.ZERO;
|
BigDecimal totalPrice = BigDecimal.ZERO;
|
||||||
|
|
||||||
// 添加软件产品列
|
// 添加软件产品列
|
||||||
for (int i = 0; i < maxSoftware; i++) {
|
for (int i = 0; i < maxSoftware; i++) {
|
||||||
if (CollUtil.isNotEmpty(info.getSoftwareProjectProductInfoList()) && i < info.getSoftwareProjectProductInfoList().size()) {
|
if (CollUtil.isNotEmpty(info.getSoftwareProjectProductInfoList()) && i < info.getSoftwareProjectProductInfoList().size()) {
|
||||||
totalPrice= addProductRow(info.getSoftwareProjectProductInfoList().get(i), row, totalPrice);
|
totalPrice = addProductRow(info.getSoftwareProjectProductInfoList().get(i), row, totalPrice);
|
||||||
} else {
|
} else {
|
||||||
addProductRow(null, row, totalPrice);
|
addProductRow(null, row, totalPrice);
|
||||||
}
|
}
|
||||||
|
|
@ -837,7 +1034,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
// 添加终端产品列
|
// 添加终端产品列
|
||||||
for (int i = 0; i < maxHardware; i++) {
|
for (int i = 0; i < maxHardware; i++) {
|
||||||
if (CollUtil.isNotEmpty(info.getHardwareProjectProductInfoList()) && i < info.getHardwareProjectProductInfoList().size()) {
|
if (CollUtil.isNotEmpty(info.getHardwareProjectProductInfoList()) && i < info.getHardwareProjectProductInfoList().size()) {
|
||||||
totalPrice=addProductRow(info.getHardwareProjectProductInfoList().get(i), row, totalPrice);
|
totalPrice = addProductRow(info.getHardwareProjectProductInfoList().get(i), row, totalPrice);
|
||||||
} else {
|
} else {
|
||||||
addProductRow(null, row, totalPrice);
|
addProductRow(null, row, totalPrice);
|
||||||
}
|
}
|
||||||
|
|
@ -846,7 +1043,7 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
// 添加服务产品列
|
// 添加服务产品列
|
||||||
for (int i = 0; i < maxMaintenance; i++) {
|
for (int i = 0; i < maxMaintenance; i++) {
|
||||||
if (CollUtil.isNotEmpty(info.getMaintenanceProjectProductInfoList()) && i < info.getMaintenanceProjectProductInfoList().size()) {
|
if (CollUtil.isNotEmpty(info.getMaintenanceProjectProductInfoList()) && i < info.getMaintenanceProjectProductInfoList().size()) {
|
||||||
totalPrice=addProductRow(info.getMaintenanceProjectProductInfoList().get(i), row, totalPrice);
|
totalPrice = addProductRow(info.getMaintenanceProjectProductInfoList().get(i), row, totalPrice);
|
||||||
} else {
|
} else {
|
||||||
addProductRow(null, row, totalPrice);
|
addProductRow(null, row, totalPrice);
|
||||||
}
|
}
|
||||||
|
|
@ -874,12 +1071,13 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
|
||||||
return dataList;
|
return dataList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String formatterStr(String value){
|
private String formatterStr(String value) {
|
||||||
if (StringUtils.isEmpty(value)){
|
if (StringUtils.isEmpty(value)) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return "0".equals(value)?"否":"是";
|
return "1".equals(value) ? "是":"否";
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BigDecimal addProductRow(ProjectProductInfo productInfo, List<String> row, BigDecimal totalPrice) {
|
private static BigDecimal addProductRow(ProjectProductInfo productInfo, List<String> row, BigDecimal totalPrice) {
|
||||||
if (productInfo == null) {
|
if (productInfo == null) {
|
||||||
row.add("");
|
row.add("");
|
||||||
|
|
|
||||||
|
|
@ -294,6 +294,10 @@ public class ProjectOrderInfoServiceImpl implements IProjectOrderInfoService, To
|
||||||
if (projectOrderInfo.getProjectId() == null) {
|
if (projectOrderInfo.getProjectId() == null) {
|
||||||
throw new ServiceException("请选择项目");
|
throw new ServiceException("请选择项目");
|
||||||
}
|
}
|
||||||
|
ProjectInfo projectInfo = projectInfoMapper.selectProjectInfoById(projectOrderInfo.getProjectId());
|
||||||
|
if (projectInfo == null|| !"1".equals(projectInfo.getJointTrial())){
|
||||||
|
throw new ServiceException("请进行项目会审");
|
||||||
|
}
|
||||||
List<ProjectOrderInfo> projectOrderInfos = this.selectProjectOrderInfoByProjectId(Collections.singletonList(projectOrderInfo.getProjectId()));
|
List<ProjectOrderInfo> projectOrderInfos = this.selectProjectOrderInfoByProjectId(Collections.singletonList(projectOrderInfo.getProjectId()));
|
||||||
if (CollUtil.isNotEmpty(projectOrderInfos)) {
|
if (CollUtil.isNotEmpty(projectOrderInfos)) {
|
||||||
throw new ServiceException("该项目存在订单流转,无法添加");
|
throw new ServiceException("该项目存在订单流转,无法添加");
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,13 @@
|
||||||
<if test="id != null">
|
<if test="id != null">
|
||||||
and id = #{id}
|
and id = #{id}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="idList != null">
|
||||||
|
and id in (
|
||||||
|
<foreach item="item" index="index" collection="idList" separator=",">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
)
|
||||||
|
</if>
|
||||||
<if test="newFilename != null and newFilename != ''">
|
<if test="newFilename != null and newFilename != ''">
|
||||||
and new_filename = #{newFilename}
|
and new_filename = #{newFilename}
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -141,6 +148,18 @@
|
||||||
</if>
|
</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
|
<insert id="insertBatch">
|
||||||
|
INSERT INTO oms_file_log
|
||||||
|
(new_filename,file_name,file_path,file_size,file_type,create_by,
|
||||||
|
create_time, update_by, update_time, remark,project_id)
|
||||||
|
|
||||||
|
values
|
||||||
|
<foreach item="item" index="index" collection="list" separator="," open="(" close=")">
|
||||||
|
#{item.newFilename}, #{item.fileName}, #{item.filePath}, #{item.fileSize}, #{item.fileType},
|
||||||
|
#{item.createBy},
|
||||||
|
#{item.createTime}, #{item.updateBy}, #{item.updateTime}, #{item.remark},#{item.projectId}
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
|
||||||
<!--通过主键修改数据-->
|
<!--通过主键修改数据-->
|
||||||
<update id="update">
|
<update id="update">
|
||||||
|
|
|
||||||
|
|
@ -462,9 +462,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="updateBy != null and updateBy != ''">
|
<if test="updateBy != null and updateBy != ''">
|
||||||
update_by = #{updateBy},
|
update_by = #{updateBy},
|
||||||
</if>
|
</if>
|
||||||
<if test="updateTime != null">
|
|
||||||
update_time = #{updateTime},
|
|
||||||
</if>
|
|
||||||
<if test="remark != null and remark != ''">
|
<if test="remark != null and remark != ''">
|
||||||
remark = #{remark},
|
remark = #{remark},
|
||||||
</if>
|
</if>
|
||||||
|
|
@ -520,6 +518,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="invoiceApplyUser != null and invoiceApplyUser != ''">
|
<if test="invoiceApplyUser != null and invoiceApplyUser != ''">
|
||||||
invoice_apply_user = #{invoiceApplyUser},
|
invoice_apply_user = #{invoiceApplyUser},
|
||||||
</if>
|
</if>
|
||||||
|
|
||||||
|
update_time = now()
|
||||||
</trim>
|
</trim>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
@ -545,6 +545,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="refundStatus != null and refundStatus != ''">
|
<if test="refundStatus != null and refundStatus != ''">
|
||||||
refund_status = #{refundStatus},
|
refund_status = #{refundStatus},
|
||||||
</if>
|
</if>
|
||||||
|
update_time = now()
|
||||||
</trim>
|
</trim>
|
||||||
where invoice_bill_code = #{invoiceBillCode}
|
where invoice_bill_code = #{invoiceBillCode}
|
||||||
</update>
|
</update>
|
||||||
|
|
@ -561,14 +562,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
approve_status=#{approveStatus},
|
approve_status=#{approveStatus},
|
||||||
invoice_type=#{invoiceType},
|
invoice_type=#{invoiceType},
|
||||||
remark=#{remark},
|
remark=#{remark},
|
||||||
update_time=#{updateTime}
|
update_time=now()
|
||||||
where invoice_bill_code = #{invoiceBillCode}
|
where invoice_bill_code = #{invoiceBillCode}
|
||||||
|
|
||||||
</update>
|
</update>
|
||||||
<update id="clearApprove">
|
<update id="clearApprove">
|
||||||
update oms_invoice_bill
|
update oms_invoice_bill
|
||||||
set approve_status=#{approveStatus},
|
set approve_status=#{approveStatus},
|
||||||
approve_time=null
|
approve_time=null,
|
||||||
|
update_time=now()
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
<update id="updateReturnWriteOffBatch">
|
<update id="updateReturnWriteOffBatch">
|
||||||
|
|
@ -643,7 +645,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectMaxCodeByPrefix" resultType="java.lang.Integer">
|
<select id="selectMaxCodeByPrefix" resultType="java.lang.Integer">
|
||||||
select COALESCE(MAX(CAST(SUBSTRING(invoice_bill_code, #{codePrefix.length() + 1}) AS UNSIGNED)), 0)
|
select ifnull(max(SUBSTR(invoice_bill_code FROM LENGTH(#{codePrefix}) + 1 FOR 4)), 0)
|
||||||
from oms_invoice_bill
|
from oms_invoice_bill
|
||||||
where invoice_bill_code LIKE CONCAT(#{codePrefix}, '%')
|
where invoice_bill_code LIKE CONCAT(#{codePrefix}, '%')
|
||||||
</select>
|
</select>
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
select t1.payment_amount, t2.payable_bill_code,t2.product_type, t4.project_name, t4.project_code, t2.total_price_with_tax
|
select t1.payment_amount, t2.payable_bill_code,t2.product_type, t4.project_name, t4.project_code, t2.total_price_with_tax
|
||||||
from (SELECT sum(payment_amount) payment_amount,
|
from (SELECT sum(payment_amount) payment_amount,
|
||||||
payable_bill_id
|
payable_bill_id
|
||||||
FROM oms_payable_ticket_detail
|
FROM oms_payable_ticket_detail t1
|
||||||
WHERE write_off_id is null and ticket_bill_code in
|
left join oms_ticket_write_off t2 on t1.write_off_id=t2.id
|
||||||
|
WHERE (t1.write_off_id is null or t1.payment_bill_code=t2.payment_bill_code) and ticket_bill_code in
|
||||||
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
|
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
|
||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
|
|
|
||||||
|
|
@ -96,8 +96,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
select t1.receipt_amount, t2.receivable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax,t2.product_type
|
select t1.receipt_amount, t2.receivable_bill_code, t4.project_name, t4.project_code, t2.total_price_with_tax,t2.product_type
|
||||||
from (SELECT sum(receipt_amount) receipt_amount,
|
from (SELECT sum(receipt_amount) receipt_amount,
|
||||||
receivable_bill_id
|
receivable_bill_id
|
||||||
FROM oms_receivable_receipt_detail
|
FROM oms_receivable_receipt_detail t1
|
||||||
WHERE write_off_id is null and receipt_bill_code in
|
left join oms_receivable_write_off t2 on t1.write_off_id = t2.id
|
||||||
|
WHERE (t1.write_off_id is null or t1.receipt_bill_code=t2.receipt_bill_code) and receipt_bill_code in
|
||||||
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
|
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
|
||||||
#{item}
|
#{item}
|
||||||
</foreach>
|
</foreach>
|
||||||
|
|
|
||||||
|
|
@ -33,12 +33,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="updateTime" column="update_time" />
|
<result property="updateTime" column="update_time" />
|
||||||
<result property="bgProperty" column="bg_property" />
|
<result property="bgProperty" column="bg_property" />
|
||||||
<result property="jointTrial" column="joint_trial" />
|
<result property="jointTrial" column="joint_trial" />
|
||||||
|
<result property="softwareInfo" column="software_info" />
|
||||||
|
<result property="hardwareInfo" column="hardware_info" />
|
||||||
|
<result property="terminalPeripheral" column="terminal_peripheral" />
|
||||||
|
<result property="managementVersion" column="management_version" />
|
||||||
|
<result property="desktopVmOsVersion" column="desktop_vm_os_version" />
|
||||||
|
<result property="vmSpecQuantity" column="vm_spec_quantity" />
|
||||||
|
<result property="jointTrialResult" column="joint_trial_result" />
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectProjectInfoVo">
|
<sql id="selectProjectInfoVo">
|
||||||
select id, project_code, project_name,bg_property, customer_code, customer_name, industry_type, agent_code, project_stage, project_grasp_degree, hz_support_user, operate_institution
|
select id, project_code, project_name,bg_property, customer_code, customer_name, industry_type, agent_code, project_stage, project_grasp_degree, hz_support_user, operate_institution
|
||||||
, partner_code, partner_name, contact_way, estimated_amount, currency_type, estimated_order_time, estimated_deliver_time, competitor, country_product, server_configuration
|
, partner_code, partner_name, contact_way, estimated_amount, currency_type, estimated_order_time, estimated_deliver_time, competitor, country_product, server_configuration,file_id
|
||||||
, key_problem, project_desc, create_by, create_time, update_by, update_time,customer_user_name,customer_phone,partner_email,partner_user_name,h3c_person,h3c_phone,poc,joint_trial from project_info t1
|
, key_problem, project_desc, create_by, create_time, update_by, update_time,customer_user_name,customer_phone,partner_email,partner_user_name,h3c_person,h3c_phone,poc,joint_trial,software_info,hardware_info,terminal_peripheral,management_version,desktop_vm_os_version,vm_spec_quantity,joint_trial_result from project_info t1
|
||||||
</sql>
|
</sql>
|
||||||
<sql id="selectRelationProjectInfoVo">
|
<sql id="selectRelationProjectInfoVo">
|
||||||
select t1.id,
|
select t1.id,
|
||||||
|
|
@ -70,11 +77,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
t1.update_by,
|
t1.update_by,
|
||||||
t1.update_time,
|
t1.update_time,
|
||||||
t1.joint_trial,
|
t1.joint_trial,
|
||||||
|
t1.software_info,
|
||||||
|
t1.hardware_info,
|
||||||
|
t1.terminal_peripheral,
|
||||||
|
t1.management_version,
|
||||||
|
t1.desktop_vm_os_version,
|
||||||
|
t1.vm_spec_quantity,
|
||||||
|
t1.joint_trial_result,
|
||||||
|
t1.file_id,
|
||||||
t1.customer_user_name,t1.customer_phone,t1.partner_user_name,t1.h3c_person,t1.poc,t1.h3c_phone,
|
t1.customer_user_name,t1.customer_phone,t1.partner_user_name,t1.h3c_person,t1.poc,t1.h3c_phone,
|
||||||
t2.agent_name,t2.contact_email,t2.contact_phone,t2.contact_person,
|
t2.agent_name,t2.contact_email,t2.contact_phone,t2.contact_person,
|
||||||
t3.user_name as hz_support_user_name,
|
t3.user_name as hz_support_user_name,
|
||||||
t5.level,
|
t5.level,
|
||||||
t5.contact_email as partner_email,
|
t5.contact_email as partner_email,
|
||||||
|
t1.update_time ,
|
||||||
ifnull(t4.work_time,t1.update_time) as last_work_update_time
|
ifnull(t4.work_time,t1.update_time) as last_work_update_time
|
||||||
from project_info t1
|
from project_info t1
|
||||||
left join agent_info t2 on t1.agent_code = t2.agent_code
|
left join agent_info t2 on t1.agent_code = t2.agent_code
|
||||||
|
|
@ -97,6 +113,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="agentName != null and agentName != ''"> and t2.agent_name like concat('%', #{agentName}, '%')</if>
|
<if test="agentName != null and agentName != ''"> and t2.agent_name like concat('%', #{agentName}, '%')</if>
|
||||||
<if test="customerName != null and customerName != ''"> and t1.customer_name like concat('%', #{customerName}, '%')</if>
|
<if test="customerName != null and customerName != ''"> and t1.customer_name like concat('%', #{customerName}, '%')</if>
|
||||||
<if test="industryType != null and industryType != ''"> and t1.industry_type = #{industryType}</if>
|
<if test="industryType != null and industryType != ''"> and t1.industry_type = #{industryType}</if>
|
||||||
|
<if test="industryTypeList != null and industryTypeList.size>0"> and t1.industry_type in
|
||||||
|
<foreach collection="industryTypeList" item="item" separator="," open="(" close=")">
|
||||||
|
#{item}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
<if test="bgProperty != null and bgProperty != ''"> and t1.bg_property = #{bgProperty}</if>
|
<if test="bgProperty != null and bgProperty != ''"> and t1.bg_property = #{bgProperty}</if>
|
||||||
<if test="jointTrial != null and jointTrial != ''"> and t1.joint_trial = #{jointTrial}</if>
|
<if test="jointTrial != null and jointTrial != ''"> and t1.joint_trial = #{jointTrial}</if>
|
||||||
<if test="collect != null and collect != ''">
|
<if test="collect != null and collect != ''">
|
||||||
|
|
@ -258,6 +279,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="updateBy != null">update_by,</if>
|
<if test="updateBy != null">update_by,</if>
|
||||||
<if test="updateTime != null">update_time,</if>
|
<if test="updateTime != null">update_time,</if>
|
||||||
<if test="jointTrial != null and jointTrial != ''"> joint_trial ,</if>
|
<if test="jointTrial != null and jointTrial != ''"> joint_trial ,</if>
|
||||||
|
<if test="softwareInfo != null">software_info,</if>
|
||||||
|
<if test="hardwareInfo != null">hardware_info,</if>
|
||||||
|
<if test="terminalPeripheral != null">terminal_peripheral,</if>
|
||||||
|
<if test="managementVersion != null">management_version,</if>
|
||||||
|
<if test="desktopVmOsVersion != null">desktop_vm_os_version,</if>
|
||||||
|
<if test="vmSpecQuantity != null">vm_spec_quantity,</if>
|
||||||
|
<if test="jointTrialResult != null">joint_trial_result,</if>
|
||||||
</trim>
|
</trim>
|
||||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||||
<if test="projectCode != null">#{projectCode},</if>
|
<if test="projectCode != null">#{projectCode},</if>
|
||||||
|
|
@ -295,6 +323,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="updateBy != null">#{updateBy},</if>
|
<if test="updateBy != null">#{updateBy},</if>
|
||||||
<if test="updateTime != null">#{updateTime},</if>
|
<if test="updateTime != null">#{updateTime},</if>
|
||||||
<if test="jointTrial != null and jointTrial != ''"> #{jointTrial},</if>
|
<if test="jointTrial != null and jointTrial != ''"> #{jointTrial},</if>
|
||||||
|
<if test="softwareInfo != null">#{softwareInfo},</if>
|
||||||
|
<if test="hardwareInfo != null">#{hardwareInfo},</if>
|
||||||
|
<if test="terminalPeripheral != null">#{terminalPeripheral},</if>
|
||||||
|
<if test="managementVersion != null">#{managementVersion},</if>
|
||||||
|
<if test="desktopVmOsVersion != null">#{desktopVmOsVersion},</if>
|
||||||
|
<if test="vmSpecQuantity != null">#{vmSpecQuantity},</if>
|
||||||
|
<if test="jointTrialResult != null">#{jointTrialResult},</if>
|
||||||
</trim>
|
</trim>
|
||||||
</insert>
|
</insert>
|
||||||
<update id="updateCustomerCodeByCode">
|
<update id="updateCustomerCodeByCode">
|
||||||
|
|
@ -319,7 +354,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="projectGraspDegree != null">project_grasp_degree = #{projectGraspDegree},</if>
|
<if test="projectGraspDegree != null">project_grasp_degree = #{projectGraspDegree},</if>
|
||||||
<if test="hzSupportUser != null">hz_support_user = #{hzSupportUser},</if>
|
<if test="hzSupportUser != null">hz_support_user = #{hzSupportUser},</if>
|
||||||
<if test="operateInstitution != null">operate_institution = #{operateInstitution},</if>
|
<if test="operateInstitution != null">operate_institution = #{operateInstitution},</if>
|
||||||
partner_code = #{partnerCode},
|
|
||||||
<if test="partnerName != null">partner_name = #{partnerName},</if>
|
<if test="partnerName != null">partner_name = #{partnerName},</if>
|
||||||
<if test="partnerUserName != null">partner_user_name = #{partnerUserName},</if>
|
<if test="partnerUserName != null">partner_user_name = #{partnerUserName},</if>
|
||||||
<if test="partnerEmail != null">partner_email=#{partnerEmail},</if>
|
<if test="partnerEmail != null">partner_email=#{partnerEmail},</if>
|
||||||
|
|
@ -335,9 +370,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="projectDesc != null">project_desc = #{projectDesc},</if>
|
<if test="projectDesc != null">project_desc = #{projectDesc},</if>
|
||||||
<if test="createBy != null">create_by = #{createBy},</if>
|
<if test="createBy != null">create_by = #{createBy},</if>
|
||||||
<if test="createTime != null">create_time = #{createTime},</if>
|
<if test="createTime != null">create_time = #{createTime},</if>
|
||||||
<if test="updateBy != null">update_by = #{updateBy},</if>
|
|
||||||
<if test="updateTime != null">update_time = #{updateTime},</if>
|
<if test="updateTime != null">update_time = #{updateTime},</if>
|
||||||
<if test="jointTrial != null and jointTrial != ''"> joint_trial = #{jointTrial},</if>
|
<if test="jointTrial != null and jointTrial != ''"> joint_trial = #{jointTrial},</if>
|
||||||
|
<if test="softwareInfo != null">software_info = #{softwareInfo},</if>
|
||||||
|
<if test="hardwareInfo != null">hardware_info = #{hardwareInfo},</if>
|
||||||
|
<if test="terminalPeripheral != null">terminal_peripheral = #{terminalPeripheral},</if>
|
||||||
|
<if test="managementVersion != null">management_version = #{managementVersion},</if>
|
||||||
|
<if test="desktopVmOsVersion != null">desktop_vm_os_version = #{desktopVmOsVersion},</if>
|
||||||
|
<if test="vmSpecQuantity != null">vm_spec_quantity = #{vmSpecQuantity},</if>
|
||||||
|
<if test="jointTrialResult != null">joint_trial_result = #{jointTrialResult},</if>
|
||||||
|
partner_code = #{partnerCode},
|
||||||
|
file_id = #{fileId},
|
||||||
|
update_by = now()
|
||||||
</trim>
|
</trim>
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue