修改半成品和成品新增时候搜索下拉框显示问题,新增负责人和生产人历史记录功能
This commit is contained in:
@ -92,12 +92,14 @@ def search_base():
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
keyword = request.args.get('keyword', '')
|
keyword = request.args.get('keyword', '')
|
||||||
|
page = request.args.get('page', 1, type=int)
|
||||||
# 调用 Service 层已修复的 search_base_material 方法
|
# 调用 Service 层已修复的 search_base_material 方法
|
||||||
data = ProductInboundService.search_base_material(keyword)
|
result = ProductInboundService.search_base_material(keyword, page)
|
||||||
# 字段级脱敏
|
# 字段级脱敏
|
||||||
user_permissions = get_current_user_permissions()
|
user_permissions = get_current_user_permissions()
|
||||||
filtered_data = [filter_item_by_permissions(item, user_permissions) for item in data]
|
if result.get('items'):
|
||||||
return jsonify({"code": 200, "msg": "success", "data": filtered_data})
|
result['items'] = [filter_item_by_permissions(item, user_permissions) for item in result['items']]
|
||||||
|
return jsonify({"code": 200, "msg": "success", "data": result})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# 捕获异常并打印堆栈,方便调试
|
# 捕获异常并打印堆栈,方便调试
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -337,3 +339,20 @@ def get_options():
|
|||||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||||
|
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# 8. 获取历史生产负责人建议 (新增)
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
@inbound_product_bp.route('/suggestions/managers', methods=['GET'])
|
||||||
|
@permission_required('inbound_product')
|
||||||
|
def get_manager_history():
|
||||||
|
base_id = request.args.get('base_id', type=int)
|
||||||
|
if not base_id:
|
||||||
|
return jsonify({"code": 400, "msg": "缺少 base_id"}), 400
|
||||||
|
try:
|
||||||
|
data = ProductInboundService.get_history_managers(base_id)
|
||||||
|
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||||
|
except Exception as e:
|
||||||
|
traceback.print_exc()
|
||||||
|
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||||
@ -92,15 +92,17 @@ def search_base():
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
keyword = request.args.get('keyword', '')
|
keyword = request.args.get('keyword', '')
|
||||||
# 这里复用 Service 中的搜索逻辑
|
page = request.args.get('page', 1, type=int)
|
||||||
data = SemiInboundService.search_base_material(keyword)
|
# 这里复用 Service 中的搜索逻辑 (已修改接收 page)
|
||||||
|
result = SemiInboundService.search_base_material(keyword, page)
|
||||||
# 字段级脱敏
|
# 字段级脱敏
|
||||||
user_permissions = get_current_user_permissions()
|
user_permissions = get_current_user_permissions()
|
||||||
filtered_data = [filter_item_by_permissions(item, user_permissions) for item in data]
|
if result.get('items'):
|
||||||
|
result['items'] = [filter_item_by_permissions(item, user_permissions) for item in result['items']]
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"code": 200,
|
"code": 200,
|
||||||
"msg": "success",
|
"msg": "success",
|
||||||
"data": filtered_data
|
"data": result
|
||||||
})
|
})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
@ -337,3 +339,19 @@ def get_options():
|
|||||||
return jsonify({"code": 200, "msg": "success", "data": data})
|
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return jsonify({"code": 500, "msg": str(e)}), 500
|
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# 8. 获取历史生产负责人建议 (新增)
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
@inbound_semi_bp.route('/suggestions/managers', methods=['GET'])
|
||||||
|
@permission_required('inbound_semi')
|
||||||
|
def get_manager_history():
|
||||||
|
base_id = request.args.get('base_id', type=int)
|
||||||
|
if not base_id:
|
||||||
|
return jsonify({"code": 400, "msg": "缺少 base_id"}), 400
|
||||||
|
try:
|
||||||
|
data = SemiInboundService.get_history_managers(base_id)
|
||||||
|
return jsonify({"code": 200, "msg": "success", "data": data})
|
||||||
|
except Exception as e:
|
||||||
|
traceback.print_exc()
|
||||||
|
return jsonify({"code": 500, "msg": str(e)}), 500
|
||||||
@ -7,7 +7,6 @@ from sqlalchemy import or_, func, text, and_
|
|||||||
import traceback
|
import traceback
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
class ProductInboundService:
|
class ProductInboundService:
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@ -26,10 +25,10 @@ class ProductInboundService:
|
|||||||
raise ValueError(f"序列号【{serial_number}】已存在!被成品 [{occupied_name}] 占用,请核查。")
|
raise ValueError(f"序列号【{serial_number}】已存在!被成品 [{occupied_name}] 占用,请核查。")
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 1. 基础物料搜索
|
# 1. 基础物料搜索 (已修改支持分页)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def search_base_material(keyword):
|
def search_base_material(keyword, page=1, limit=50):
|
||||||
try:
|
try:
|
||||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||||
if keyword:
|
if keyword:
|
||||||
@ -41,9 +40,10 @@ class ProductInboundService:
|
|||||||
MaterialBase.company_name.ilike(kw) # [新增]
|
MaterialBase.company_name.ilike(kw) # [新增]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
query = query.order_by(MaterialBase.id.desc()).limit(20)
|
query = query.order_by(MaterialBase.id.desc())
|
||||||
|
pagination = query.paginate(page=page, per_page=limit, error_out=False)
|
||||||
results = []
|
results = []
|
||||||
for item in query.all():
|
for item in pagination.items:
|
||||||
results.append({
|
results.append({
|
||||||
'id': item.id,
|
'id': item.id,
|
||||||
'company_name': item.company_name, # [新增]
|
'company_name': item.company_name, # [新增]
|
||||||
@ -54,10 +54,15 @@ class ProductInboundService:
|
|||||||
'type': item.material_type,
|
'type': item.material_type,
|
||||||
'status': '启用'
|
'status': '启用'
|
||||||
})
|
})
|
||||||
return results
|
return {
|
||||||
|
"items": results,
|
||||||
|
"total": pagination.total,
|
||||||
|
"page": page,
|
||||||
|
"has_next": pagination.has_next
|
||||||
|
}
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return []
|
return {"items": [], "total": 0, "page": 1, "has_next": False}
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 1.5 BOM 搜索逻辑
|
# 1.5 BOM 搜索逻辑
|
||||||
@ -392,3 +397,20 @@ class ProductInboundService:
|
|||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return {"categories": [], "types": [], "companies": []}
|
return {"categories": [], "types": [], "companies": []}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 8. 获取历史负责人建议 (新增)
|
||||||
|
# ============================================================
|
||||||
|
@staticmethod
|
||||||
|
def get_history_managers(base_id):
|
||||||
|
from app.models.inbound.product import StockProduct
|
||||||
|
try:
|
||||||
|
records = db.session.query(StockProduct.production_manager).filter(
|
||||||
|
StockProduct.base_id == base_id,
|
||||||
|
StockProduct.production_manager.isnot(None),
|
||||||
|
StockProduct.production_manager != ''
|
||||||
|
).distinct().all()
|
||||||
|
return [r[0] for r in records if r[0]]
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return []
|
||||||
@ -7,7 +7,6 @@ from sqlalchemy import or_, func, text, and_
|
|||||||
import traceback
|
import traceback
|
||||||
import json
|
import json
|
||||||
|
|
||||||
|
|
||||||
class SemiInboundService:
|
class SemiInboundService:
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@ -36,10 +35,10 @@ class SemiInboundService:
|
|||||||
raise ValueError(f"该物料已存在批号【{batch_number}】,请勿重复建单,建议在原批次上追加库存。")
|
raise ValueError(f"该物料已存在批号【{batch_number}】,请勿重复建单,建议在原批次上追加库存。")
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 1. 基础物料搜索
|
# 1. 基础物料搜索 (已修改支持分页)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def search_base_material(keyword):
|
def search_base_material(keyword, page=1, limit=50):
|
||||||
try:
|
try:
|
||||||
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
query = MaterialBase.query.filter(MaterialBase.is_enabled == True)
|
||||||
if keyword:
|
if keyword:
|
||||||
@ -51,9 +50,10 @@ class SemiInboundService:
|
|||||||
MaterialBase.company_name.ilike(kw) # [新增] 支持搜公司
|
MaterialBase.company_name.ilike(kw) # [新增] 支持搜公司
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
query = query.order_by(MaterialBase.id.desc()).limit(20)
|
query = query.order_by(MaterialBase.id.desc())
|
||||||
|
pagination = query.paginate(page=page, per_page=limit, error_out=False)
|
||||||
results = []
|
results = []
|
||||||
for item in query.all():
|
for item in pagination.items:
|
||||||
results.append({
|
results.append({
|
||||||
'id': item.id,
|
'id': item.id,
|
||||||
'company_name': item.company_name, # [新增]
|
'company_name': item.company_name, # [新增]
|
||||||
@ -64,10 +64,15 @@ class SemiInboundService:
|
|||||||
'type': item.material_type,
|
'type': item.material_type,
|
||||||
'status': '启用'
|
'status': '启用'
|
||||||
})
|
})
|
||||||
return results
|
return {
|
||||||
|
"items": results,
|
||||||
|
"total": pagination.total,
|
||||||
|
"page": page,
|
||||||
|
"has_next": pagination.has_next
|
||||||
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return []
|
return {"items": [], "total": 0, "page": 1, "has_next": False}
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# 1.5 BOM 搜索逻辑
|
# 1.5 BOM 搜索逻辑
|
||||||
@ -480,3 +485,20 @@ class SemiInboundService:
|
|||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return {"categories": [], "types": [], "companies": []}
|
return {"categories": [], "types": [], "companies": []}
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# 8. 获取历史生产负责人 (新增)
|
||||||
|
# ============================================================
|
||||||
|
@staticmethod
|
||||||
|
def get_history_managers(base_id):
|
||||||
|
from app.models.inbound.semi import StockSemi
|
||||||
|
try:
|
||||||
|
records = db.session.query(StockSemi.production_manager).filter(
|
||||||
|
StockSemi.base_id == base_id,
|
||||||
|
StockSemi.production_manager.isnot(None),
|
||||||
|
StockSemi.production_manager != ''
|
||||||
|
).distinct().all()
|
||||||
|
return [r[0] for r in records if r[0]]
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return []
|
||||||
@ -33,11 +33,12 @@ export function deleteProductInbound(id: number) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export function searchMaterialBase(keyword: string) {
|
// 搜索基础物料 (已增加 page 参数)
|
||||||
|
export function searchMaterialBase(keyword: string, page: number = 1) {
|
||||||
return request({
|
return request({
|
||||||
url: '/inbound/product/search-base',
|
url: '/inbound/product/search-base',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { keyword }
|
params: { keyword, page }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,3 +67,12 @@ export function getFilterOptions() {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [新增] 负责人历史记录
|
||||||
|
export function getManagerHistory(params: any) {
|
||||||
|
return request({
|
||||||
|
url: '/inbound/product/suggestions/managers',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -35,12 +35,12 @@ export function deleteSemiInbound(id: number) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. 搜索基础物料
|
// 5. 搜索基础物料 (已增加 page 参数)
|
||||||
export function searchMaterialBase(keyword: string) {
|
export function searchMaterialBase(keyword: string, page: number = 1) {
|
||||||
return request({
|
return request({
|
||||||
url: '/inbound/semi/search-base',
|
url: '/inbound/semi/search-base',
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params: { keyword }
|
params: { keyword, page }
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,3 +69,12 @@ export function getFilterOptions() {
|
|||||||
method: 'get'
|
method: 'get'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// [新增] 生产负责人历史记录
|
||||||
|
export function getManagerHistory(params: any) {
|
||||||
|
return request({
|
||||||
|
url: '/inbound/semi/suggestions/managers',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -469,7 +469,8 @@ import {
|
|||||||
deleteProductInbound,
|
deleteProductInbound,
|
||||||
searchMaterialBase,
|
searchMaterialBase,
|
||||||
searchBom,
|
searchBom,
|
||||||
getFilterOptions // [新增]
|
getFilterOptions, // [新增]
|
||||||
|
getManagerHistory // [新增]
|
||||||
} from '@/api/inbound/product'
|
} from '@/api/inbound/product'
|
||||||
import { uploadFile, deleteFile } from '@/api/inbound/buy'
|
import { uploadFile, deleteFile } from '@/api/inbound/buy'
|
||||||
import WebRtcCamera from '@/components/Camera/WebRtcCamera.vue'
|
import WebRtcCamera from '@/components/Camera/WebRtcCamera.vue'
|
||||||
@ -634,7 +635,7 @@ const defaultVisibleCols = ['company_name', 'material_name', 'sku', 'serial_numb
|
|||||||
const visibleColumnProps = ref(defaultVisibleCols)
|
const visibleColumnProps = ref(defaultVisibleCols)
|
||||||
|
|
||||||
const form = reactive({
|
const form = reactive({
|
||||||
id: undefined, base_id: undefined,
|
id: undefined, base_id: undefined as number | undefined,
|
||||||
company_name: '', // [新增]
|
company_name: '', // [新增]
|
||||||
material_name: '', spec_model: '', material_type: '', category: '', unit: '',
|
material_name: '', spec_model: '', material_type: '', category: '', unit: '',
|
||||||
sku: '', barcode: '', serial_number: '', in_date: '',
|
sku: '', barcode: '', serial_number: '', in_date: '',
|
||||||
@ -739,7 +740,7 @@ const rules = {
|
|||||||
|
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Material Search & Population Logic
|
// Material Search & Population Logic (已修改)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
const handleMaterialDropdownVisible = (visible: boolean) => { if (visible && materialOptions.value.length === 0) handleSearchMaterialDebounced('') }
|
const handleMaterialDropdownVisible = (visible: boolean) => { if (visible && materialOptions.value.length === 0) handleSearchMaterialDebounced('') }
|
||||||
|
|
||||||
@ -758,9 +759,9 @@ const handleSearchMaterial = async (query: string) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const res: any = await searchMaterialBase(query, 1)
|
const res: any = await searchMaterialBase(query, 1)
|
||||||
const apiResults = (res.data || []).map((i: any) => ({ ...i, isHistory: false }))
|
const apiResults = (res.data?.items || []).map((i: any) => ({ ...i, isHistory: false }))
|
||||||
materialOptions.value = apiResults
|
materialOptions.value = apiResults
|
||||||
hasNextPage.value = res.has_next
|
hasNextPage.value = res.data?.has_next ?? false
|
||||||
} finally { searchLoading.value = false }
|
} finally { searchLoading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -770,10 +771,10 @@ const loadMoreMaterials = async () => {
|
|||||||
searchPage.value += 1
|
searchPage.value += 1
|
||||||
try {
|
try {
|
||||||
const res: any = await searchMaterialBase(searchKeyword.value, searchPage.value)
|
const res: any = await searchMaterialBase(searchKeyword.value, searchPage.value)
|
||||||
if (res.data && res.data.length > 0) {
|
if (res.data && res.data.items && res.data.items.length > 0) {
|
||||||
const newItems = res.data.map((i: any) => ({...i, isHistory: false}))
|
const newItems = res.data.items.map((i: any) => ({...i, isHistory: false}))
|
||||||
materialOptions.value.push(...newItems)
|
materialOptions.value.push(...newItems)
|
||||||
hasNextPage.value = res.has_next
|
hasNextPage.value = res.data.has_next
|
||||||
} else {
|
} else {
|
||||||
hasNextPage.value = false
|
hasNextPage.value = false
|
||||||
}
|
}
|
||||||
@ -797,12 +798,21 @@ const onMaterialSelected = (val: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Autocomplete (Manager) - 后端驱动
|
// Autocomplete (Manager) - 后端历史记录驱动 (已修改)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
const querySearchManager = async (query: string, cb: any) => {
|
const querySearchManager = async (query: string, cb: any) => {
|
||||||
cb([])
|
if (!form.base_id) { cb([]); return }
|
||||||
|
try {
|
||||||
|
const res: any = await getManagerHistory({ base_id: form.base_id })
|
||||||
|
if (res.code === 200) {
|
||||||
|
const managers = (res.data || []).map((name: string) => ({ value: name }))
|
||||||
|
const filtered = query ? managers.filter((item: any) => item.value.toLowerCase().includes(query.toLowerCase())) : managers
|
||||||
|
cb(filtered)
|
||||||
|
} else { cb([]) }
|
||||||
|
} catch (e) { cb([]) }
|
||||||
}
|
}
|
||||||
const handleManagerSelect = (item: any) => {
|
const handleManagerSelect = (item: any) => {
|
||||||
|
form.production_manager = item.value
|
||||||
}
|
}
|
||||||
|
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
|
|||||||
@ -539,7 +539,8 @@ import {
|
|||||||
deleteSemiInbound,
|
deleteSemiInbound,
|
||||||
searchMaterialBase,
|
searchMaterialBase,
|
||||||
searchBom,
|
searchBom,
|
||||||
getFilterOptions
|
getFilterOptions,
|
||||||
|
getManagerHistory // [新增]
|
||||||
} from '@/api/inbound/semi'
|
} from '@/api/inbound/semi'
|
||||||
import { uploadFile, deleteFile } from '@/api/inbound/buy'
|
import { uploadFile, deleteFile } from '@/api/inbound/buy'
|
||||||
import WebRtcCamera from '@/components/Camera/WebRtcCamera.vue'
|
import WebRtcCamera from '@/components/Camera/WebRtcCamera.vue'
|
||||||
@ -754,16 +755,25 @@ const handleBomSelect = (val: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Autocomplete & Search Logic (后端 API 驱动)
|
// Autocomplete & Search Logic (后端 API 驱动) (已修改)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
const querySearchManager = async (query: string, cb: any) => {
|
const querySearchManager = async (query: string, cb: any) => {
|
||||||
cb([])
|
if (!form.base_id) { cb([]); return }
|
||||||
|
try {
|
||||||
|
const res: any = await getManagerHistory({ base_id: form.base_id })
|
||||||
|
if (res.code === 200) {
|
||||||
|
const managers = (res.data || []).map((name: string) => ({ value: name }))
|
||||||
|
const filtered = query ? managers.filter((item: any) => item.value.toLowerCase().includes(query.toLowerCase())) : managers
|
||||||
|
cb(filtered)
|
||||||
|
} else { cb([]) }
|
||||||
|
} catch (e) { cb([]) }
|
||||||
}
|
}
|
||||||
const handleManagerSelect = (item: any) => {
|
const handleManagerSelect = (item: any) => {
|
||||||
|
form.production_manager = item.value
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
// Material Search (Matches Buy.vue)
|
// Material Search (Matches Buy.vue) (已修改)
|
||||||
// ------------------------------------
|
// ------------------------------------
|
||||||
const handleMaterialDropdownVisible = (visible: boolean) => { if (visible && materialOptions.value.length === 0) handleSearchMaterialDebounced('') }
|
const handleMaterialDropdownVisible = (visible: boolean) => { if (visible && materialOptions.value.length === 0) handleSearchMaterialDebounced('') }
|
||||||
|
|
||||||
@ -782,9 +792,9 @@ const handleSearchMaterial = async (query: string) => {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const res: any = await searchMaterialBase(query, 1)
|
const res: any = await searchMaterialBase(query, 1)
|
||||||
const apiResults = (res.data || []).map((i: any) => ({...i, isHistory: false}))
|
const apiResults = (res.data?.items || []).map((i: any) => ({...i, isHistory: false}))
|
||||||
materialOptions.value = apiResults
|
materialOptions.value = apiResults
|
||||||
hasNextPage.value = res.has_next
|
hasNextPage.value = res.data?.has_next ?? false
|
||||||
} finally { searchLoading.value = false }
|
} finally { searchLoading.value = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -794,10 +804,10 @@ const loadMoreMaterials = async () => {
|
|||||||
searchPage.value += 1
|
searchPage.value += 1
|
||||||
try {
|
try {
|
||||||
const res: any = await searchMaterialBase(searchKeyword.value, searchPage.value)
|
const res: any = await searchMaterialBase(searchKeyword.value, searchPage.value)
|
||||||
if (res.data && res.data.length > 0) {
|
if (res.data && res.data.items && res.data.items.length > 0) {
|
||||||
const newItems = res.data.map((i: any) => ({...i, isHistory: false}))
|
const newItems = res.data.items.map((i: any) => ({...i, isHistory: false}))
|
||||||
materialOptions.value.push(...newItems)
|
materialOptions.value.push(...newItems)
|
||||||
hasNextPage.value = res.has_next
|
hasNextPage.value = res.data.has_next
|
||||||
} else {
|
} else {
|
||||||
hasNextPage.value = false
|
hasNextPage.value = false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user