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

View File

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