Compare commits
3 Commits
fbc7c9d7b6
...
43d16cd196
| Author | SHA1 | Date | |
|---|---|---|---|
| 43d16cd196 | |||
| 5d813c24bc | |||
| 646baa08fe |
@ -115,6 +115,7 @@ def get_list():
|
|||||||
page = request.args.get('page', 1, type=int)
|
page = request.args.get('page', 1, type=int)
|
||||||
limit = request.args.get('pageSize', 15, type=int)
|
limit = request.args.get('pageSize', 15, type=int)
|
||||||
keyword = request.args.get('keyword', '')
|
keyword = request.args.get('keyword', '')
|
||||||
|
sku = request.args.get('sku', '')
|
||||||
|
|
||||||
# 新增筛选参数
|
# 新增筛选参数
|
||||||
category = request.args.get('category', '')
|
category = request.args.get('category', '')
|
||||||
@ -137,7 +138,7 @@ def get_list():
|
|||||||
statuses_str = request.args.get('statuses', '')
|
statuses_str = request.args.get('statuses', '')
|
||||||
statuses = statuses_str.split(',') if statuses_str else []
|
statuses = statuses_str.split(',') if statuses_str else []
|
||||||
|
|
||||||
result = BuyInboundService.get_list(page, limit, keyword, statuses, category, material_type, company,
|
result = BuyInboundService.get_list(page, limit, keyword, sku, statuses, category, material_type, company,
|
||||||
order_by, is_asc, advanced_filters)
|
order_by, is_asc, advanced_filters)
|
||||||
# 字段级脱敏
|
# 字段级脱敏
|
||||||
user_permissions = get_current_user_permissions()
|
user_permissions = get_current_user_permissions()
|
||||||
|
|||||||
@ -73,6 +73,7 @@ def get_list():
|
|||||||
page = request.args.get('page', 1, type=int)
|
page = request.args.get('page', 1, type=int)
|
||||||
limit = request.args.get('pageSize', 15, type=int)
|
limit = request.args.get('pageSize', 15, type=int)
|
||||||
keyword = request.args.get('keyword', '')
|
keyword = request.args.get('keyword', '')
|
||||||
|
sku = request.args.get('sku', '')
|
||||||
statuses_str = request.args.get('statuses', '')
|
statuses_str = request.args.get('statuses', '')
|
||||||
statuses = statuses_str.split(',') if statuses_str else []
|
statuses = statuses_str.split(',') if statuses_str else []
|
||||||
category = request.args.get('category', '')
|
category = request.args.get('category', '')
|
||||||
@ -104,7 +105,7 @@ def get_list():
|
|||||||
|
|
||||||
# 调用服务,传入所有参数
|
# 调用服务,传入所有参数
|
||||||
result = ProductInboundService.get_list(
|
result = ProductInboundService.get_list(
|
||||||
page, limit, keyword, statuses,
|
page, limit, keyword, sku, statuses,
|
||||||
category=extra_filters.get('category'),
|
category=extra_filters.get('category'),
|
||||||
material_type=extra_filters.get('material_type'),
|
material_type=extra_filters.get('material_type'),
|
||||||
company=extra_filters.get('company'),
|
company=extra_filters.get('company'),
|
||||||
|
|||||||
@ -73,6 +73,7 @@ def get_list():
|
|||||||
page = request.args.get('page', 1, type=int)
|
page = request.args.get('page', 1, type=int)
|
||||||
limit = request.args.get('pageSize', 15, type=int)
|
limit = request.args.get('pageSize', 15, type=int)
|
||||||
keyword = request.args.get('keyword', '')
|
keyword = request.args.get('keyword', '')
|
||||||
|
sku = request.args.get('sku', '')
|
||||||
statuses_str = request.args.get('statuses', '')
|
statuses_str = request.args.get('statuses', '')
|
||||||
statuses = statuses_str.split(',') if statuses_str else []
|
statuses = statuses_str.split(',') if statuses_str else []
|
||||||
company = request.args.get('company', '')
|
company = request.args.get('company', '')
|
||||||
@ -104,7 +105,7 @@ def get_list():
|
|||||||
|
|
||||||
# 调用服务,传入所有参数
|
# 调用服务,传入所有参数
|
||||||
result = SemiInboundService.get_list(
|
result = SemiInboundService.get_list(
|
||||||
page, limit, keyword, statuses,
|
page, limit, keyword, sku, statuses,
|
||||||
**extra_filters
|
**extra_filters
|
||||||
)
|
)
|
||||||
user_permissions = get_current_user_permissions()
|
user_permissions = get_current_user_permissions()
|
||||||
|
|||||||
@ -240,17 +240,16 @@ class BuyInboundService:
|
|||||||
# 5. 获取列表 (支持排序和高级筛选)
|
# 5. 获取列表 (支持排序和高级筛选)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
|
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
|
||||||
order_by='', is_asc='', advanced_filters=None):
|
order_by='', is_asc='', advanced_filters=None):
|
||||||
try:
|
try:
|
||||||
from sqlalchemy import and_, or_
|
from sqlalchemy import and_, or_
|
||||||
query = db.session.query(StockBuy).outerjoin(MaterialBase, StockBuy.base_id == MaterialBase.id)
|
query = db.session.query(StockBuy).outerjoin(MaterialBase, StockBuy.base_id == MaterialBase.id)
|
||||||
|
|
||||||
# 1. 通用关键词搜索
|
# 1. 通用关键词搜索(名称、规格、公司)
|
||||||
if keyword:
|
if keyword:
|
||||||
k_str = f'%{keyword.strip()}%'
|
k_str = f'%{keyword.strip()}%'
|
||||||
conditions = [
|
conditions = [
|
||||||
StockBuy.sku.ilike(k_str),
|
|
||||||
StockBuy.barcode.ilike(k_str),
|
StockBuy.barcode.ilike(k_str),
|
||||||
StockBuy.batch_number.ilike(k_str),
|
StockBuy.batch_number.ilike(k_str),
|
||||||
StockBuy.serial_number.ilike(k_str),
|
StockBuy.serial_number.ilike(k_str),
|
||||||
@ -262,6 +261,11 @@ class BuyInboundService:
|
|||||||
]
|
]
|
||||||
query = query.filter(or_(*conditions))
|
query = query.filter(or_(*conditions))
|
||||||
|
|
||||||
|
# 1.1 SKU 独立搜索
|
||||||
|
if sku and sku.strip():
|
||||||
|
sku_str = f'%{sku.strip()}%'
|
||||||
|
query = query.filter(StockBuy.sku.ilike(sku_str))
|
||||||
|
|
||||||
# 2. 类别独立搜索
|
# 2. 类别独立搜索
|
||||||
if category and category.strip():
|
if category and category.strip():
|
||||||
query = query.filter(MaterialBase.category == category.strip())
|
query = query.filter(MaterialBase.category == category.strip())
|
||||||
|
|||||||
@ -270,11 +270,12 @@ class ProductInboundService:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
|
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
|
||||||
order_by_column=None, is_asc=None, advanced_filters=None):
|
order_by_column=None, is_asc=None, advanced_filters=None):
|
||||||
from app.models.inbound.product import StockProduct
|
from app.models.inbound.product import StockProduct
|
||||||
try:
|
try:
|
||||||
query = db.session.query(StockProduct).outerjoin(MaterialBase, StockProduct.base_id == MaterialBase.id)
|
query = db.session.query(StockProduct).outerjoin(MaterialBase, StockProduct.base_id == MaterialBase.id)
|
||||||
|
# 1. 通用关键词搜索(名称、规格、公司)
|
||||||
if keyword:
|
if keyword:
|
||||||
kw = f'%{keyword}%'
|
kw = f'%{keyword}%'
|
||||||
query = query.filter(or_(
|
query = query.filter(or_(
|
||||||
@ -283,9 +284,12 @@ class ProductInboundService:
|
|||||||
MaterialBase.company_name.ilike(kw),
|
MaterialBase.company_name.ilike(kw),
|
||||||
StockProduct.serial_number.ilike(kw),
|
StockProduct.serial_number.ilike(kw),
|
||||||
StockProduct.work_order_code.ilike(kw),
|
StockProduct.work_order_code.ilike(kw),
|
||||||
StockProduct.order_id.ilike(kw),
|
StockProduct.order_id.ilike(kw)
|
||||||
StockProduct.sku.ilike(kw)
|
|
||||||
))
|
))
|
||||||
|
# 1.1 SKU 独立搜索
|
||||||
|
if sku and sku.strip():
|
||||||
|
sku_str = f'%{sku.strip()}%'
|
||||||
|
query = query.filter(StockProduct.sku.ilike(sku_str))
|
||||||
if category and category.strip():
|
if category and category.strip():
|
||||||
query = query.filter(MaterialBase.category == category.strip())
|
query = query.filter(MaterialBase.category == category.strip())
|
||||||
if material_type and material_type.strip():
|
if material_type and material_type.strip():
|
||||||
|
|||||||
@ -359,11 +359,12 @@ class SemiInboundService:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_list(page, limit, keyword=None, statuses=None, category=None, material_type=None, company=None,
|
def get_list(page, limit, keyword=None, sku=None, statuses=None, category=None, material_type=None, company=None,
|
||||||
order_by_column=None, is_asc=None, advanced_filters=None):
|
order_by_column=None, is_asc=None, advanced_filters=None):
|
||||||
from app.models.inbound.semi import StockSemi
|
from app.models.inbound.semi import StockSemi
|
||||||
try:
|
try:
|
||||||
query = db.session.query(StockSemi).outerjoin(MaterialBase, StockSemi.base_id == MaterialBase.id)
|
query = db.session.query(StockSemi).outerjoin(MaterialBase, StockSemi.base_id == MaterialBase.id)
|
||||||
|
# 1. 通用关键词搜索(名称、规格、公司)
|
||||||
if keyword:
|
if keyword:
|
||||||
kw = f'%{keyword}%'
|
kw = f'%{keyword}%'
|
||||||
query = query.filter(
|
query = query.filter(
|
||||||
@ -373,11 +374,14 @@ class SemiInboundService:
|
|||||||
MaterialBase.company_name.ilike(kw),
|
MaterialBase.company_name.ilike(kw),
|
||||||
StockSemi.batch_number.ilike(kw),
|
StockSemi.batch_number.ilike(kw),
|
||||||
StockSemi.serial_number.ilike(kw),
|
StockSemi.serial_number.ilike(kw),
|
||||||
StockSemi.sku.ilike(kw),
|
|
||||||
StockSemi.work_order_code.ilike(kw),
|
StockSemi.work_order_code.ilike(kw),
|
||||||
StockSemi.bom_code.ilike(kw)
|
StockSemi.bom_code.ilike(kw)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
# 1.1 SKU 独立搜索
|
||||||
|
if sku and sku.strip():
|
||||||
|
sku_str = f'%{sku.strip()}%'
|
||||||
|
query = query.filter(StockSemi.sku.ilike(sku_str))
|
||||||
if category and category.strip():
|
if category and category.strip():
|
||||||
query = query.filter(MaterialBase.category == category.strip())
|
query = query.filter(MaterialBase.category == category.strip())
|
||||||
if material_type and material_type.strip():
|
if material_type and material_type.strip():
|
||||||
|
|||||||
@ -17,12 +17,26 @@
|
|||||||
|
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.keyword"
|
v-model="queryParams.keyword"
|
||||||
placeholder="请输入名称或规格"
|
placeholder="请输入名称、规格搜索..."
|
||||||
class="filter-item-input"
|
class="filter-item-input"
|
||||||
clearable
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
@clear="fetchData"
|
@clear="fetchData"
|
||||||
@keyup.enter="fetchData"
|
@keyup.enter="fetchData"
|
||||||
style="width: 240px;"
|
style="width: 200px;"
|
||||||
|
>
|
||||||
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
|
</el-input>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.sku"
|
||||||
|
placeholder="请输入SKU搜索..."
|
||||||
|
class="filter-item-input"
|
||||||
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
|
@clear="fetchData"
|
||||||
|
@keyup.enter="fetchData"
|
||||||
|
style="width: 160px;"
|
||||||
>
|
>
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -652,6 +666,17 @@ import WebRtcCamera from '@/components/Camera/WebRtcCamera.vue'
|
|||||||
import WarehouseSelector from '@/components/WarehouseSelector.vue'
|
import WarehouseSelector from '@/components/WarehouseSelector.vue'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
|
// ------------------------------------
|
||||||
|
// 防抖函数
|
||||||
|
// ------------------------------------
|
||||||
|
const debounce = (fn: Function, delay: number = 500) => {
|
||||||
|
let timer: ReturnType<typeof setTimeout> | null = null
|
||||||
|
return (...args: any[]) => {
|
||||||
|
if (timer) clearTimeout(timer)
|
||||||
|
timer = setTimeout(() => fn(...args), delay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// 自定义指令:v-loadmore (适配 Teleport 到 Body 的下拉框)
|
// 自定义指令:v-loadmore (适配 Teleport 到 Body 的下拉框)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
@ -745,6 +770,7 @@ const queryParams = reactive({
|
|||||||
page: 1,
|
page: 1,
|
||||||
pageSize: 100,
|
pageSize: 100,
|
||||||
keyword: '',
|
keyword: '',
|
||||||
|
sku: '',
|
||||||
category: '',
|
category: '',
|
||||||
material_type: '',
|
material_type: '',
|
||||||
company: '',
|
company: '',
|
||||||
@ -1213,6 +1239,16 @@ const fetchData = async () => {
|
|||||||
} finally { loading.value = false }
|
} finally { loading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 防抖即时搜索
|
||||||
|
const debouncedSearch = debounce(() => {
|
||||||
|
queryParams.page = 1
|
||||||
|
fetchData()
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
const handleInputSearch = () => {
|
||||||
|
debouncedSearch()
|
||||||
|
}
|
||||||
|
|
||||||
const fetchOptions = async () => {
|
const fetchOptions = async () => {
|
||||||
try {
|
try {
|
||||||
const res: any = await getFilterOptions()
|
const res: any = await getFilterOptions()
|
||||||
@ -1240,6 +1276,7 @@ const loadWarehouseTree = async () => {
|
|||||||
|
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.keyword = ''
|
queryParams.keyword = ''
|
||||||
|
queryParams.sku = ''
|
||||||
queryParams.category = ''
|
queryParams.category = ''
|
||||||
queryParams.material_type = ''
|
queryParams.material_type = ''
|
||||||
queryParams.company = ''
|
queryParams.company = ''
|
||||||
|
|||||||
@ -16,12 +16,26 @@
|
|||||||
|
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.keyword"
|
v-model="queryParams.keyword"
|
||||||
placeholder="请输入名称或规格"
|
placeholder="请输入名称、规格搜索..."
|
||||||
class="filter-item-input"
|
class="filter-item-input"
|
||||||
clearable
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
@clear="fetchData"
|
@clear="fetchData"
|
||||||
@keyup.enter="fetchData"
|
@keyup.enter="fetchData"
|
||||||
style="width: 240px;"
|
style="width: 200px;"
|
||||||
|
>
|
||||||
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
|
</el-input>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.sku"
|
||||||
|
placeholder="请输入SKU搜索..."
|
||||||
|
class="filter-item-input"
|
||||||
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
|
@clear="fetchData"
|
||||||
|
@keyup.enter="fetchData"
|
||||||
|
style="width: 160px;"
|
||||||
>
|
>
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -522,6 +536,17 @@ import { getLabelPreview, executePrint } from '@/api/common/print'
|
|||||||
import { getWarehouseTree } from '@/api/common/warehouse'
|
import { getWarehouseTree } from '@/api/common/warehouse'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
|
// ------------------------------------
|
||||||
|
// 防抖函数
|
||||||
|
// ------------------------------------
|
||||||
|
const debounce = (fn: Function, delay: number = 500) => {
|
||||||
|
let timer: ReturnType<typeof setTimeout> | null = null
|
||||||
|
return (...args: any[]) => {
|
||||||
|
if (timer) clearTimeout(timer)
|
||||||
|
timer = setTimeout(() => fn(...args), delay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// v-loadmore
|
// v-loadmore
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
@ -555,7 +580,7 @@ const dialogStatus = ref<'create' | 'update'>('create')
|
|||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
const queryParams = reactive({ page: 1, pageSize: 100, keyword: '', category: '', material_type: '', statuses: ['在库', '借库'], company: '', orderByColumn: '', isAsc: '', advancedFilters: [] })
|
const queryParams = reactive({ page: 1, pageSize: 100, keyword: '', sku: '', category: '', material_type: '', statuses: ['在库', '借库'], company: '', orderByColumn: '', isAsc: '', advancedFilters: [] })
|
||||||
const categoryOptions = ref<string[]>([])
|
const categoryOptions = ref<string[]>([])
|
||||||
const typeOptions = ref<string[]>([])
|
const typeOptions = ref<string[]>([])
|
||||||
const companyOptions = ref<string[]>([]) // [新增]
|
const companyOptions = ref<string[]>([]) // [新增]
|
||||||
@ -942,8 +967,8 @@ const handleManagerSelect = (item: any) => {
|
|||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const params = {
|
const params = {
|
||||||
...queryParams,
|
...queryParams,
|
||||||
statuses: queryParams.statuses.join(','),
|
statuses: queryParams.statuses.join(','),
|
||||||
orderByColumn: queryParams.orderByColumn,
|
orderByColumn: queryParams.orderByColumn,
|
||||||
isAsc: queryParams.isAsc,
|
isAsc: queryParams.isAsc,
|
||||||
@ -955,6 +980,16 @@ const fetchData = async () => {
|
|||||||
} finally { loading.value = false }
|
} finally { loading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 防抖即时搜索
|
||||||
|
const debouncedSearch = debounce(() => {
|
||||||
|
queryParams.page = 1
|
||||||
|
fetchData()
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
const handleInputSearch = () => {
|
||||||
|
debouncedSearch()
|
||||||
|
}
|
||||||
|
|
||||||
const fetchOptions = async () => {
|
const fetchOptions = async () => {
|
||||||
try {
|
try {
|
||||||
const res: any = await getFilterOptions()
|
const res: any = await getFilterOptions()
|
||||||
@ -982,6 +1017,7 @@ const loadWarehouseTree = async () => {
|
|||||||
|
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.keyword = ''
|
queryParams.keyword = ''
|
||||||
|
queryParams.sku = ''
|
||||||
queryParams.category = ''
|
queryParams.category = ''
|
||||||
queryParams.material_type = ''
|
queryParams.material_type = ''
|
||||||
queryParams.company = ''
|
queryParams.company = ''
|
||||||
|
|||||||
@ -17,12 +17,26 @@
|
|||||||
|
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.keyword"
|
v-model="queryParams.keyword"
|
||||||
placeholder="请输入名称或规格"
|
placeholder="请输入名称、规格搜索..."
|
||||||
class="filter-item-input"
|
class="filter-item-input"
|
||||||
clearable
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
@clear="fetchData"
|
@clear="fetchData"
|
||||||
@keyup.enter="fetchData"
|
@keyup.enter="fetchData"
|
||||||
style="width: 240px;"
|
style="width: 200px;"
|
||||||
|
>
|
||||||
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
|
</el-input>
|
||||||
|
|
||||||
|
<el-input
|
||||||
|
v-model="queryParams.sku"
|
||||||
|
placeholder="请输入SKU搜索..."
|
||||||
|
class="filter-item-input"
|
||||||
|
clearable
|
||||||
|
@input="handleInputSearch"
|
||||||
|
@clear="fetchData"
|
||||||
|
@keyup.enter="fetchData"
|
||||||
|
style="width: 160px;"
|
||||||
>
|
>
|
||||||
<template #prefix><el-icon><Search /></el-icon></template>
|
<template #prefix><el-icon><Search /></el-icon></template>
|
||||||
</el-input>
|
</el-input>
|
||||||
@ -586,6 +600,17 @@ import {getLabelPreview, executePrint} from '@/api/common/print'
|
|||||||
import { getWarehouseTree } from '@/api/common/warehouse'
|
import { getWarehouseTree } from '@/api/common/warehouse'
|
||||||
import { useUserStore } from '@/stores/user'
|
import { useUserStore } from '@/stores/user'
|
||||||
|
|
||||||
|
// ------------------------------------
|
||||||
|
// 防抖函数
|
||||||
|
// ------------------------------------
|
||||||
|
const debounce = (fn: Function, delay: number = 500) => {
|
||||||
|
let timer: ReturnType<typeof setTimeout> | null = null
|
||||||
|
return (...args: any[]) => {
|
||||||
|
if (timer) clearTimeout(timer)
|
||||||
|
timer = setTimeout(() => fn(...args), delay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// 自定义指令:v-loadmore (适配 Teleport 到 Body 的下拉框)
|
// 自定义指令:v-loadmore (适配 Teleport 到 Body 的下拉框)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
@ -621,7 +646,7 @@ const dialogStatus = ref<'create' | 'update'>('create')
|
|||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const total = ref(0)
|
const total = ref(0)
|
||||||
const formRef = ref()
|
const formRef = ref()
|
||||||
const queryParams = reactive({ page: 1, pageSize: 100, keyword: '', category: '', material_type: '', statuses: ['在库', '借库'], company: '', orderByColumn: '', isAsc: '', advancedFilters: [] })
|
const queryParams = reactive({ page: 1, pageSize: 100, keyword: '', sku: '', category: '', material_type: '', statuses: ['在库', '借库'], company: '', orderByColumn: '', isAsc: '', advancedFilters: [] })
|
||||||
const categoryOptions = ref<string[]>([])
|
const categoryOptions = ref<string[]>([])
|
||||||
const typeOptions = ref<string[]>([])
|
const typeOptions = ref<string[]>([])
|
||||||
const companyOptions = ref<string[]>([]) // [新增]
|
const companyOptions = ref<string[]>([]) // [新增]
|
||||||
@ -1076,8 +1101,8 @@ const handleSortChange = ({ column, prop, order }: any) => {
|
|||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const params = {
|
const params = {
|
||||||
...queryParams,
|
...queryParams,
|
||||||
statuses: queryParams.statuses.join(','),
|
statuses: queryParams.statuses.join(','),
|
||||||
orderByColumn: queryParams.orderByColumn,
|
orderByColumn: queryParams.orderByColumn,
|
||||||
isAsc: queryParams.isAsc,
|
isAsc: queryParams.isAsc,
|
||||||
@ -1089,6 +1114,16 @@ const fetchData = async () => {
|
|||||||
} finally { loading.value = false }
|
} finally { loading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 防抖即时搜索
|
||||||
|
const debouncedSearch = debounce(() => {
|
||||||
|
queryParams.page = 1
|
||||||
|
fetchData()
|
||||||
|
}, 500)
|
||||||
|
|
||||||
|
const handleInputSearch = () => {
|
||||||
|
debouncedSearch()
|
||||||
|
}
|
||||||
|
|
||||||
const fetchOptions = async () => {
|
const fetchOptions = async () => {
|
||||||
try {
|
try {
|
||||||
const res: any = await getFilterOptions()
|
const res: any = await getFilterOptions()
|
||||||
@ -1116,6 +1151,7 @@ const loadWarehouseTree = async () => {
|
|||||||
|
|
||||||
const resetQuery = () => {
|
const resetQuery = () => {
|
||||||
queryParams.keyword = ''
|
queryParams.keyword = ''
|
||||||
|
queryParams.sku = ''
|
||||||
queryParams.category = ''
|
queryParams.category = ''
|
||||||
queryParams.material_type = ''
|
queryParams.material_type = ''
|
||||||
queryParams.company = ''
|
queryParams.company = ''
|
||||||
|
|||||||
Reference in New Issue
Block a user