✨ 新增应收账单按角色和客户归属的行级数据权限

This commit is contained in:
caojia
2026-10-29 16:42:28 +08:00
parent b091d47f64
commit 02c49e3efe
30 changed files with 587 additions and 72 deletions
+8
View File
@@ -1,5 +1,13 @@
import request from '@/utils/request'
export function listArBillCustomerOptions(query) {
return request({ url: '/ar/bill/customer-options', method: 'get', params: query })
}
export function listArBillGenerateCustomerOptions(query) {
return request({ url: '/ar/bill/generate/customer-options', method: 'get', params: query })
}
// 应收账单接口统一放在这里;生成和导出均为异步任务,提交接口不等待后台处理完成。
export function listArBill(query) {
return request({ url: '/ar/bill/list', method: 'get', params: query })
@@ -36,6 +36,11 @@ import { listCustomer, listCustomerOption } from '@/api/customersuppliermanageme
import { listSupplier } from '@/api/customersuppliermanagement/supplierinfo/supplier.js'
const props = defineProps({
// 业务页面可传入专用选项接口,默认行为保持不变。
fetchOptions: {
type: Function,
default: undefined
},
// 单选时为 String/Number;multiple 时为数组
modelValue: {
type: [String, Number, Array],
@@ -143,9 +148,9 @@ const displayOptions = computed(() => {
function fetchList(keyword = '') {
if (!props.remoteSearch && loaded.value) return Promise.resolve(options.value)
loading.value = true
const api = !isCustomer.value
const api = props.fetchOptions || (!isCustomer.value
? listSupplier
: (props.optionSelect ? listCustomerOption : listCustomer)
: (props.optionSelect ? listCustomerOption : listCustomer))
const currentRequest = ++requestSerial
const query = String(keyword || '').trim()
return api({
@@ -3,7 +3,7 @@
<el-dialog v-model="dialogOpen" class="generate-dialog" title="生成应收账单" width="1200px" append-to-body destroy-on-close>
<el-form ref="generateFormRef" :model="generateForm" :rules="generateRules" label-width="110px" class="generate-form">
<el-row :gutter="16">
<el-col :span="8"><el-form-item label="客户" prop="customerId"><customer-select v-model="generateForm.customerId" placeholder="请输入客户名称或代码搜索" :remote-search="true" :page-size="20" @change="handleCustomerChange" /></el-form-item></el-col>
<el-col :span="8"><el-form-item label="客户" prop="customerId"><customer-select :fetch-options="listArBillGenerateCustomerOptions" v-model="generateForm.customerId" placeholder="请输入客户名称或代码搜索" :remote-search="true" :page-size="20" @change="handleCustomerChange" /></el-form-item></el-col>
<el-col :span="8"><el-form-item label="币种" prop="currency"><el-select v-model="generateForm.currency" placeholder="请选择币种" style="width: 100%;" @change="handleCurrencyChange"><el-option label="人民币 CNY" value="CNY" /><el-option label="美元 USD" value="USD" /></el-select></el-form-item></el-col>
<el-col :span="8"><el-form-item label="账单截止日" prop="cutoffDate"><el-date-picker v-model="generateForm.cutoffDate" type="date" value-format="YYYY-MM-DD" placeholder="请选择账单截止日" style="width: 100%;" @change="resetPreview" /></el-form-item></el-col>
<el-col :span="8">
@@ -146,7 +146,7 @@
</template>
<script setup name="GenerateBillDialog">
import { getDefaultArBankAccount, previewArBill, previewExcludedArBill, generateArBill } from '@/api/ar/bill'
import { listArBillGenerateCustomerOptions, getDefaultArBankAccount, previewArBill, previewExcludedArBill, generateArBill } from '@/api/ar/bill'
import { Refresh, Search, Select } from '@element-plus/icons-vue'
import { AR_BILL_SELECTION_MODE } from '@/constants/ar/enums'
+2 -2
View File
@@ -36,7 +36,7 @@
<el-button type="warning" plain icon="Download" v-hasPermi="['ar:bill:export']" @click="handleExport">导出</el-button>
</template>
<template #search-customerId="{ model }">
<customer-select v-model="model.customerId" placeholder="请输入客户名称或代码搜索" :remote-search="true" :page-size="20" />
<customer-select :fetch-options="listArBillCustomerOptions" v-model="model.customerId" placeholder="请输入客户名称或代码搜索" :remote-search="true" :page-size="20" />
</template>
<template #col-status="{ row }"><el-tag :type="statusType(row.status)">{{ statusText(row.status) }}</el-tag></template>
<template #col-totalAmount="{ row }"><span class="amount">{{ money(row.totalAmount) }}</span></template>
@@ -69,7 +69,7 @@
<script setup name="ArBill">
import { saveAs } from 'file-saver'
import { listArBill, getArBill, confirmArBill, voidArBill, exportArBill, getArBillExport, downloadArBillExport, getArBillGenerateTask, listActiveArBillGenerateTasks, cancelArBillGenerateTask, retryArBillGenerateTask } from '@/api/ar/bill'
import { listArBillCustomerOptions, listArBill, getArBill, confirmArBill, voidArBill, exportArBill, getArBillExport, downloadArBillExport, getArBillGenerateTask, listActiveArBillGenerateTasks, cancelArBillGenerateTask, retryArBillGenerateTask } from '@/api/ar/bill'
import BillDetail from './components/BillDetail.vue'
import GenerateBillDialog from './components/GenerateBillDialog.vue'
import { AR_BILL_STATUS, AR_BILL_STATUS_OPTIONS, AR_BILL_STATUS_TYPES } from '@/constants/ar/bill'