feat(order):小程序第一次进入订单之后没有请求的问题

master
wangy 2026-01-21 18:14:04 +08:00
parent cfaf0dd598
commit 081581b100
2 changed files with 46 additions and 86 deletions

View File

@ -11,7 +11,7 @@ interface OrderState {
pageSize: number
total: number
keyword: string
// 已审批列表相关
completedList: CompletedApprovalItem[]
completedLoading: boolean
@ -20,7 +20,7 @@ interface OrderState {
completedPageSize: number
completedTotal: number
completedKeyword: string
// 详情相关
currentOrder: any | null // 临时改为any来避免类型问题
detailLoading: boolean
@ -36,7 +36,7 @@ export const useOrderStore = defineStore('order', {
pageSize: 20,
total: 0,
keyword: '',
// 已审批列表状态
completedList: [],
completedLoading: false,
@ -45,7 +45,7 @@ export const useOrderStore = defineStore('order', {
completedPageSize: 20,
completedTotal: 0,
completedKeyword: '',
currentOrder: null,
detailLoading: false
}),
@ -53,16 +53,16 @@ export const useOrderStore = defineStore('order', {
getters: {
// 获取当前订单基本信息
currentOrderInfo: (state) => state.currentOrder?.projectOrderInfo,
// 获取审批历史
approvalHistory: (state) => state.currentOrder?.approveLog || [],
// 获取当前用户信息
currentUser: (state) => state.currentOrder?.user,
// 检查待审批是否还有更多数据
hasMore: (state) => state.orderList.length < state.total,
// 检查已审批是否还有更多数据
completedHasMore: (state) => state.completedList.length < state.completedTotal
},
@ -72,7 +72,7 @@ export const useOrderStore = defineStore('order', {
*
*/
async loadOrderList(refresh = false) {
if (this.loading) return
// if (this.loading) return
if (refresh) {
this.currentPage = 1
@ -84,7 +84,7 @@ export const useOrderStore = defineStore('order', {
try {
const params: ListParams = {
approve:'approve',
approve: 'approve',
page: this.currentPage,
pageSize: this.pageSize,
keyword: this.keyword || undefined
@ -100,7 +100,7 @@ export const useOrderStore = defineStore('order', {
}
this.total = total
// 判断是否已加载完所有数据
if (this.orderList.length >= total || rows.length === 0) {
this.finished = true
@ -135,16 +135,16 @@ export const useOrderStore = defineStore('order', {
try {
const response = await getOrderDetail(id)
// 直接获取数据对象
const orderData = response.data.data
// 确保数据存在再赋值
if (orderData) {
this.currentOrder = orderData
}
return response
} catch (error) {
@ -183,7 +183,7 @@ export const useOrderStore = defineStore('order', {
const params: CompletedListParams = {
page: this.completedCurrentPage,
pageSize: this.completedPageSize,
processKeyList:['order_approve_online','order_approve_offline'],
processKeyList: ['order_approve_online', 'order_approve_offline'],
businessName: this.completedKeyword || undefined
}
@ -200,7 +200,7 @@ export const useOrderStore = defineStore('order', {
}
this.completedTotal = total
// 判断是否已加载完所有数据
if (this.completedList.length >= total || rows.length === 0) {
this.completedFinished = true

View File

@ -2,17 +2,12 @@
<div class="order-list-page">
<!-- 搜索栏 -->
<div class="search-container">
<van-search
v-model="searchKeyword"
:placeholder="currentTab === 'pending' ? '搜索订单编号、客户名称' : '搜索合同名称'"
@search="handleSearch"
@clear="handleClear"
class="custom-search"
>
<van-search v-model="searchKeyword" :placeholder="currentTab === 'pending' ? '搜索订单编号、客户名称' : '搜索合同名称'"
@search="handleSearch" @clear="handleClear" class="custom-search">
<template #left-icon>
<svg class="search-icon" viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="8" stroke="currentColor" stroke-width="2"/>
<path d="M21 21L16.65 16.65" stroke="currentColor" stroke-width="2"/>
<circle cx="11" cy="11" r="8" stroke="currentColor" stroke-width="2" />
<path d="M21 21L16.65 16.65" stroke="currentColor" stroke-width="2" />
</svg>
</template>
</van-search>
@ -23,12 +18,8 @@
<!-- 待审批Tab -->
<van-tab name="pending" title="待审批">
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<!-- <van-list v-model:loading="loading" :finished="finished" finished-text="" @load="onLoad"> -->
<van-list v-model:loading="loading" :finished="finished" finished-text="">
<div v-for="order in orderList" :key="order.id" class="order-item" @click="goToDetail(order.id)">
<div class="order-header">
<div class="order-code">{{ order.orderCode }}</div>
@ -68,13 +59,10 @@
<!-- 已审批Tab -->
<van-tab name="completed" title="已审批">
<van-pull-refresh v-model="completedRefreshing" @refresh="onCompletedRefresh">
<van-list
v-model:loading="completedLoading"
:finished="completedFinished"
finished-text="没有更多了"
@load="onCompletedLoad"
>
<div v-for="item in completedList" :key="item.todoId" class="order-item" @click="goToCompletedDetail(item.businessId)">
<van-list v-model:loading="completedLoading" :finished="completedFinished" finished-text=""
@load="onCompletedLoad">
<div v-for="item in completedList" :key="item.todoId" class="order-item"
@click="goToCompletedDetail(item.businessId)">
<div class="order-header">
<div class="order-code">{{ item.businessKey }}</div>
<div class="status-tag" :class="getCompletedStatusClass(item.approveStatus)">
@ -118,77 +106,45 @@
<!-- 一键审批操作悬浮框 -->
<div v-if="canBatchApprove && currentTab === 'pending' && orderList.length > 0" class="batch-actions-footer">
<div class="footer-content">
<van-button
type="primary"
size="large"
@click="showBatchApprovalDialog"
:loading="batchSubmitting"
class="batch-approve-btn"
>
<van-button type="primary" size="large" @click="showBatchApprovalDialog" :loading="batchSubmitting"
class="batch-approve-btn">
一键审批
</van-button>
</div>
</div>
<!-- 批量审批意见弹窗 -->
<van-popup
v-model:show="batchApprovalDialogVisible"
position="bottom"
round
:style="{ height: '50%' }"
>
<van-popup v-model:show="batchApprovalDialogVisible" position="bottom" round :style="{ height: '50%' }">
<div class="approval-dialog">
<div class="dialog-header">
<span>审批意见</span>
<van-icon name="cross" @click="batchApprovalDialogVisible = false"/>
<van-icon name="cross" @click="batchApprovalDialogVisible = false" />
</div>
<div class="dialog-body">
<!-- 默认意见标签 -->
<div class="opinion-tags">
<div class="tags-title">常用意见</div>
<div class="tags-container">
<van-tag
v-for="tag in getBatchOpinionTags()"
:key="tag"
:type="selectedBatchTag === tag ? 'primary' : 'default'"
size="medium"
@click="selectBatchTag(tag)"
class="opinion-tag"
>
<van-tag v-for="tag in getBatchOpinionTags()" :key="tag"
:type="selectedBatchTag === tag ? 'primary' : 'default'" size="medium" @click="selectBatchTag(tag)"
class="opinion-tag">
{{ tag }}
</van-tag>
</div>
</div>
<div class="opinion-input">
<van-field
v-model="batchApprovalOpinion"
type="textarea"
placeholder="请输入审批意见"
rows="4"
autosize
maxlength="500"
show-word-limit
/>
<van-field v-model="batchApprovalOpinion" type="textarea" placeholder="请输入审批意见" rows="4" autosize
maxlength="500" show-word-limit />
</div>
</div>
<div class="dialog-footer">
<div class="footer-buttons">
<van-button
type="default"
block
@click="submitBatchApproval(0)"
:loading="batchSubmitting"
class="action-btn reject-btn"
>
<van-button type="default" block @click="submitBatchApproval(0)" :loading="batchSubmitting"
class="action-btn reject-btn">
驳回
</van-button>
<van-button
type="primary"
block
@click="submitBatchApproval(1)"
:loading="batchSubmitting"
class="action-btn approve-btn"
>
<van-button type="primary" block @click="submitBatchApproval(1)" :loading="batchSubmitting"
class="action-btn approve-btn">
通过
</van-button>
</div>
@ -247,12 +203,13 @@ const canBatchApprove = computed(() => {
//
const onLoad = async () => {
try {
await orderStore.loadOrderList()
await orderStore.loadOrderList(false, "onLoad")
} catch (error) {
console.error('加载订单列表失败:', error)
}
}
//
const onRefresh = async () => {
try {
@ -268,7 +225,7 @@ const onRefresh = async () => {
const onTabChange = (name: string) => {
currentTab.value = name
searchKeyword.value = ''
if (name === 'completed' && completedList.value.length === 0) {
onCompletedLoad()
}
@ -401,6 +358,7 @@ const submitBatchApproval = async (approveStatus: ApproveBtn) => {
}
onMounted(async () => {
console.log("1231231231")
orderStore.resetListState()
orderStore.resetCompletedListState()
//
@ -415,7 +373,8 @@ onMounted(async () => {
.order-list-page {
min-height: 100vh;
background-color: var(--van-background-color);
padding-bottom: 80px; /* 为底部批量操作栏留出空间 */
padding-bottom: 80px;
/* 为底部批量操作栏留出空间 */
}
// Tab
@ -648,6 +607,7 @@ onMounted(async () => {
.dialog-footer {
padding: 16px;
border-top: 1px solid #ebedf0;
.footer-buttons {
display: flex;
gap: 10px;