Merge branch 'test'
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package com.bms.ar.domain.vo;
|
package com.bms.ar.domain.vo;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
import org.springframework.format.annotation.DateTimeFormat;
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import com.bms.ar.domain.ArBill;
|
import com.bms.ar.domain.ArBill;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -13,6 +14,9 @@ public class ArBillQuery extends ArBill
|
|||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 多选账单状态;为空时与旧版 status 参数保持兼容并表示不按状态筛选。 */
|
||||||
|
private List<String> statuses;
|
||||||
|
|
||||||
/** 账单日期查询起始日。 */
|
/** 账单日期查询起始日。 */
|
||||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||||
private Date billDateStart;
|
private Date billDateStart;
|
||||||
|
|||||||
@@ -85,7 +85,15 @@
|
|||||||
'%')
|
'%')
|
||||||
</if>
|
</if>
|
||||||
<if test="query.customerId != null">and customer_id = #{query.customerId}</if>
|
<if test="query.customerId != null">and customer_id = #{query.customerId}</if>
|
||||||
<if test="query.status != null and query.status != ''">and status = #{query.status}</if>
|
<choose>
|
||||||
|
<when test="query.statuses != null and query.statuses.size() > 0">
|
||||||
|
and status in
|
||||||
|
<foreach collection="query.statuses" item="statusValue" open="(" separator="," close=")">
|
||||||
|
#{statusValue}
|
||||||
|
</foreach>
|
||||||
|
</when>
|
||||||
|
<when test="query.status != null and query.status != ''">and status = #{query.status}</when>
|
||||||
|
</choose>
|
||||||
<if test="query.currency != null and query.currency != ''">and currency = #{query.currency}</if>
|
<if test="query.currency != null and query.currency != ''">and currency = #{query.currency}</if>
|
||||||
<if test="query.billDateStart != null">and bill_date >= #{query.billDateStart}</if>
|
<if test="query.billDateStart != null">and bill_date >= #{query.billDateStart}</if>
|
||||||
<if test="query.billDateEnd != null">and bill_date <= #{query.billDateEnd}</if>
|
<if test="query.billDateEnd != null">and bill_date <= #{query.billDateEnd}</if>
|
||||||
@@ -106,6 +114,7 @@
|
|||||||
coalesce(sum(unwritten_amount), 0) as unwritten_amount
|
coalesce(sum(unwritten_amount), 0) as unwritten_amount
|
||||||
from ar_bill b
|
from ar_bill b
|
||||||
<include refid="arBillListFilter"/>
|
<include refid="arBillListFilter"/>
|
||||||
|
and status in ('CONFIRMED', 'PARTIAL_WRITTEN_OFF', 'WRITTEN_OFF')
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectArBillById" parameterType="long" resultMap="ArBillResult">
|
<select id="selectArBillById" parameterType="long" resultMap="ArBillResult">
|
||||||
|
|||||||
@@ -80,7 +80,13 @@ const router = useRouter()
|
|||||||
const tableRef = ref()
|
const tableRef = ref()
|
||||||
// 从客户余额页“查看账单”跳入时,按当前客户预筛选(重置后仍保留该条件)
|
// 从客户余额页“查看账单”跳入时,按当前客户预筛选(重置后仍保留该条件)
|
||||||
const defaultSearchParams = computed(() => ({
|
const defaultSearchParams = computed(() => ({
|
||||||
customerId: route.query.customerId ? Number(route.query.customerId) : undefined
|
customerId: route.query.customerId ? Number(route.query.customerId) : undefined,
|
||||||
|
statuses: [
|
||||||
|
AR_BILL_STATUS.DRAFT,
|
||||||
|
AR_BILL_STATUS.CONFIRMED,
|
||||||
|
AR_BILL_STATUS.PARTIAL_WRITTEN_OFF,
|
||||||
|
AR_BILL_STATUS.WRITTEN_OFF
|
||||||
|
]
|
||||||
}))
|
}))
|
||||||
const detailOpen = ref(false)
|
const detailOpen = ref(false)
|
||||||
const detailLoading = ref(false)
|
const detailLoading = ref(false)
|
||||||
@@ -158,7 +164,7 @@ const columns = [
|
|||||||
]
|
]
|
||||||
const searchColumns = [
|
const searchColumns = [
|
||||||
{ label: '账单号', prop: 'billNo', component: 'input', placeholder: '账单号', width: '180px' }, { label: '账单名称', prop: 'billName', component: 'input', placeholder: '账单名称', width: '180px' }, { label: '客户名称', prop: 'customerId', component: 'input', placeholder: '请选择客户', width: '220px' },
|
{ label: '账单号', prop: 'billNo', component: 'input', placeholder: '账单号', width: '180px' }, { label: '账单名称', prop: 'billName', component: 'input', placeholder: '账单名称', width: '180px' }, { label: '客户名称', prop: 'customerId', component: 'input', placeholder: '请选择客户', width: '220px' },
|
||||||
{ label: '状态', prop: 'status', component: 'select', options: statusOptions, placeholder: '全部状态', width: '150px' }, { label: '账单日期', prop: 'billDateRange', component: 'daterange', width: '300px' }, { label: '账单截止日', prop: 'billPeriodEnd', component: 'date', width: '160px' }
|
{ label: '状态', prop: 'statuses', component: 'select', options: statusOptions, placeholder: '请选择状态', width: '190px', props: { multiple: true, clearable: true, collapseTags: true, collapseTagsTooltip: true } }, { label: '账单日期', prop: 'billDateRange', component: 'daterange', width: '300px' }, { label: '账单截止日', prop: 'billPeriodEnd', component: 'date', width: '160px' }
|
||||||
]
|
]
|
||||||
|
|
||||||
// 将页面日期范围转换为后端查询字段,其他筛选条件原样透传。
|
// 将页面日期范围转换为后端查询字段,其他筛选条件原样透传。
|
||||||
|
|||||||
+10
-7
@@ -29,9 +29,9 @@
|
|||||||
</template>
|
</template>
|
||||||
<template #pagination-extra>
|
<template #pagination-extra>
|
||||||
<div class="bill-summary">
|
<div class="bill-summary">
|
||||||
<span>应收总额:<b class="amount">{{ money(billSummary.totalAmount) }}</b></span>
|
<span>有效账单金额:<b class="amount">{{ money(billSummary.totalAmount) }}</b></span>
|
||||||
<span>已核销:<b class="written">{{ money(billSummary.writtenOffAmount) }}</b></span>
|
<span>已核销:<b class="written">{{ money(billSummary.writtenOffAmount) }}</b></span>
|
||||||
<span>未核销:<b class="unwritten">{{ money(billSummary.unwrittenAmount) }}</b></span>
|
<span>当前未核销:<b class="unwritten">{{ money(billSummary.unwrittenAmount) }}</b></span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #col-status="{ row }">
|
<template #col-status="{ row }">
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
<span class="written">{{ money(row.writtenOffAmount) }}</span>
|
<span class="written">{{ money(row.writtenOffAmount) }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #col-unwrittenAmount="{ row }">
|
<template #col-unwrittenAmount="{ row }">
|
||||||
<span class="unwritten">{{ money(row.unwrittenAmount) }}</span>
|
<span class="unwritten">{{ isCurrentReceivable(row.status) ? money(row.unwrittenAmount) : '-' }}</span>
|
||||||
</template>
|
</template>
|
||||||
</basic-table>
|
</basic-table>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { computed, getCurrentInstance, ref } from 'vue'
|
import { computed, getCurrentInstance, ref } from 'vue'
|
||||||
import { listCustomerBills } from '@/api/customersuppliermanagement/customermoney/customerbill'
|
import { listCustomerBills } from '@/api/customersuppliermanagement/customermoney/customerbill'
|
||||||
import { AR_BILL_STATUS_OPTIONS, AR_BILL_STATUS_TYPES } from '@/constants/ar/bill'
|
import { AR_BILL_STATUS, AR_BILL_STATUS_OPTIONS, AR_BILL_STATUS_TYPES } from '@/constants/ar/bill'
|
||||||
import { arEnumLabel } from '@/constants/ar/enums'
|
import { arEnumLabel } from '@/constants/ar/enums'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
@@ -86,16 +86,16 @@ const columns = [
|
|||||||
{ label: '客户编码', prop: 'customerCode', minWidth: 120, showOverflowTooltip: true },
|
{ label: '客户编码', prop: 'customerCode', minWidth: 120, showOverflowTooltip: true },
|
||||||
{ label: '账单截止日', prop: 'billPeriodEnd', minWidth: 120, formatter: row => `截至 ${date(row.billPeriodEnd)}` },
|
{ label: '账单截止日', prop: 'billPeriodEnd', minWidth: 120, formatter: row => `截至 ${date(row.billPeriodEnd)}` },
|
||||||
{ label: '订单数', prop: 'orderCount', width: 80 },
|
{ label: '订单数', prop: 'orderCount', width: 80 },
|
||||||
{ label: '应收总额', prop: 'totalAmount', width: 120, align: 'right', slot: 'totalAmount' },
|
{ label: '账单金额', prop: 'totalAmount', width: 120, align: 'right', slot: 'totalAmount' },
|
||||||
{ label: '已核销', prop: 'writtenOffAmount', width: 110, align: 'right', slot: 'writtenOffAmount' },
|
{ label: '已核销', prop: 'writtenOffAmount', width: 110, align: 'right', slot: 'writtenOffAmount' },
|
||||||
{ label: '未核销', prop: 'unwrittenAmount', width: 110, align: 'right', slot: 'unwrittenAmount' },
|
{ label: '当前未核销', prop: 'unwrittenAmount', width: 110, align: 'right', slot: 'unwrittenAmount' },
|
||||||
{ label: '状态', prop: 'status', width: 110, slot: 'status' },
|
{ label: '状态', prop: 'status', width: 110, slot: 'status' },
|
||||||
{ label: '账单日期', prop: 'billDate', width: 120, formatter: row => date(row.billDate) }
|
{ label: '账单日期', prop: 'billDate', width: 120, formatter: row => date(row.billDate) }
|
||||||
]
|
]
|
||||||
const searchColumns = [
|
const searchColumns = [
|
||||||
{ label: '账单号', prop: 'billNo', component: 'input', placeholder: '账单号', width: '180px' },
|
{ label: '账单号', prop: 'billNo', component: 'input', placeholder: '账单号', width: '180px' },
|
||||||
{ label: '账单名称', prop: 'billName', component: 'input', placeholder: '账单名称', width: '180px' },
|
{ label: '账单名称', prop: 'billName', component: 'input', placeholder: '账单名称', width: '180px' },
|
||||||
{ label: '状态', prop: 'status', component: 'select', options: statusOptions, placeholder: '全部状态', width: '150px' },
|
{ label: '状态', prop: 'statuses', component: 'select', options: statusOptions, placeholder: '全部状态', width: '190px', props: { multiple: true, clearable: true, collapseTags: true, collapseTagsTooltip: true } },
|
||||||
{ label: '账单日期', prop: 'billDateRange', component: 'daterange', width: '300px' },
|
{ label: '账单日期', prop: 'billDateRange', component: 'daterange', width: '300px' },
|
||||||
{ label: '账单截止日', prop: 'billPeriodEnd', component: 'date', width: '160px' }
|
{ label: '账单截止日', prop: 'billPeriodEnd', component: 'date', width: '160px' }
|
||||||
]
|
]
|
||||||
@@ -142,6 +142,9 @@ function money(value) {
|
|||||||
}
|
}
|
||||||
function statusText(value) { return arEnumLabel(AR_BILL_STATUS_OPTIONS, value) }
|
function statusText(value) { return arEnumLabel(AR_BILL_STATUS_OPTIONS, value) }
|
||||||
function statusType(value) { return AR_BILL_STATUS_TYPES[value] || 'info' }
|
function statusType(value) { return AR_BILL_STATUS_TYPES[value] || 'info' }
|
||||||
|
function isCurrentReceivable(status) {
|
||||||
|
return [AR_BILL_STATUS.CONFIRMED, AR_BILL_STATUS.PARTIAL_WRITTEN_OFF, AR_BILL_STATUS.WRITTEN_OFF].includes(status)
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Reference in New Issue
Block a user