From 00b5cbce9f587931c7dc5455df707b0acc753e69 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期五, 16 一月 2026 15:48:17 +0800
Subject: [PATCH] 会议设置,会议申请,会议列表

---
 src/pages/cooperativeOffice/collaborativeApproval/index.vue |  668 ++++++++++++++++++++++++++++---------------------------
 1 files changed, 342 insertions(+), 326 deletions(-)

diff --git a/src/pages/cooperativeOffice/collaborativeApproval/index.vue b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
index f72d200..9f42801 100644
--- a/src/pages/cooperativeOffice/collaborativeApproval/index.vue
+++ b/src/pages/cooperativeOffice/collaborativeApproval/index.vue
@@ -1,351 +1,367 @@
 // 瀹℃壒绠$悊涓婚〉闈�
 <template>
-	<view class="sales-account">
-		<!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
-		<PageHeader title="瀹℃壒绠$悊" @back="goBack" />
-
-		<!-- 鎼滅储鍜岀瓫閫夊尯鍩� -->
-		<view class="search-section">
-			<view class="search-bar">
-				<view class="search-input">
-					<up-input
-						class="search-text"
-						placeholder="璇疯緭鍏ユ祦绋嬬紪鍙�"
-						v-model="searchForm.approveId"
-						clearable
-					/>
-				</view>
-				<view class="search-button" @click="getList">
-					<up-icon name="search" size="24" color="#999"></up-icon>
-				</view>
-			</view>
-		</view>
-
-		<!-- 瀹℃壒鍒楄〃 -->
-		<view class="ledger-list" v-if="ledgerList.length > 0">
-			<view v-for="(item, index) in ledgerList" :key="index">
-				<view class="ledger-item">
-					<view class="item-header">
-						<view class="item-left">
-							<view class="document-icon">
-								<up-icon name="file-text" size="16" color="#ffffff"></up-icon>
-							</view>
-							<text class="item-id">{{ item.approveId }}</text>
-						</view>
-						<view class="item-tag">
-							<u-tag :type="getTagClass(item.approveStatus)">{{ formatReceiptType(item.approveStatus) }}</u-tag>
-						</view>
-					</view>
-					<up-divider></up-divider>
-
-					<view class="item-details">
-						<view class="detail-row">
-							<text class="detail-label">鐢宠浜�</text>
-							<text class="detail-value">{{ item.approveUserName }}</text>
-						</view>
-						<view class="detail-row">
-							<text class="detail-label">鐢宠閮ㄩ棬</text>
-							<text class="detail-value">{{ item.approveDeptName }}</text>
-						</view>
-						<view class="detail-row-approveReason">
-							<text class="detail-label">瀹℃壒浜嬬敱</text>
-							<text class="detail-value highlightBlue">{{ item.approveReason }}</text>
-						</view>
-						<view class="detail-row">
-							<text class="detail-label">鐢宠鏃ユ湡</text>
-							<text class="detail-value">{{ item.approveTime }}</text>
-						</view>
-						
-						<!-- approveType=2 璇峰亣鐩稿叧瀛楁 -->
-						<template v-if="item.approveType === 2">
-							<view class="detail-row">
-								<text class="detail-label">璇峰亣寮�濮嬫椂闂�</text>
-								<text class="detail-value">{{ item.startDate || '-' }}</text>
-							</view>
-							<view class="detail-row">
-								<text class="detail-label">璇峰亣缁撴潫鏃堕棿</text>
-								<text class="detail-value">{{ item.endDate || '-' }}</text>
-							</view>
-						</template>
-						
-						<!-- approveType=3 鍑哄樊鐩稿叧瀛楁 -->
-						<view v-if="item.approveType === 3" class="detail-row">
-							<text class="detail-label">鍑哄樊鍦扮偣</text>
-							<text class="detail-value">{{ item.location || '-' }}</text>
-						</view>
-						
-						<!-- approveType=4 鎶ラ攢鐩稿叧瀛楁 -->
-						<view v-if="item.approveType === 4" class="detail-row">
-							<text class="detail-label">鎶ラ攢閲戦</text>
-							<text class="detail-value highlightYellow">{{ item.price ? `楼${item.price}` : '-' }}</text>
-						</view>
-						
-						<view class="detail-row">
-							<text class="detail-label">缁撴潫鏃ユ湡</text>
-							<text class="detail-value">{{ item.approveOverTime }}</text>
-						</view>
-						<up-divider></up-divider>
-						<view class="detail-info">
-							<view class="detail-row-user">
-								<text class="detail-label">褰撳墠瀹℃壒浜�</text>
-								<view class="detail-value approver-value">
-									<view class="approver-chip">
-										<text class="approver-name">{{ item.approveUserCurrentName || '鏈垎閰�' }}</text>
-									</view>
-								</view>
-							</view>
-							<view class="detail-row">
-								<view class="actions">
-									<u-button
-										type="primary"
-										size="small"
-										class="action-btn edit"
-										:disabled="item.approveStatus == 2 || item.approveStatus == 1 || item.approveStatus == 4"
-										@click="handleItemClick(item)"
-									>
-											缂栬緫
-									</u-button>
-									<u-button
-										type="success"
-										size="small"
-										class="action-btn approve"
-										:disabled="item.approveUserCurrentId == null || item.approveStatus == 2 || item.approveStatus == 3 || item.approveStatus == 4 || item.approveUserCurrentId !== userStore.id"
-										@click="approve(item)"
-									>
-											瀹℃牳
-									</u-button>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-		</view>
-		<view v-else class="no-data">
-			<text>鏆傛棤瀹℃壒鏁版嵁</text>
-		</view>
-		<!-- 娴姩鎿嶄綔鎸夐挳 -->
-		<view class="fab-button" @click="handleAdd">
-			<up-icon name="plus" size="24" color="#ffffff"></up-icon>
-		</view>
-	</view>
+  <view class="sales-account">
+    <!-- 浣跨敤閫氱敤椤甸潰澶撮儴缁勪欢 -->
+    <PageHeader :title="pageTitle"
+                @back="goBack" />
+    <!-- 鎼滅储鍜岀瓫閫夊尯鍩� -->
+    <view class="search-section">
+      <view class="search-bar">
+        <view class="search-input">
+          <up-input class="search-text"
+                    placeholder="璇疯緭鍏ユ祦绋嬬紪鍙�"
+                    v-model="searchForm.approveId"
+                    clearable />
+        </view>
+        <view class="search-button"
+              @click="getList">
+          <up-icon name="search"
+                   size="24"
+                   color="#999"></up-icon>
+        </view>
+      </view>
+    </view>
+    <!-- 瀹℃壒鍒楄〃 -->
+    <view class="ledger-list"
+          v-if="ledgerList.length > 0">
+      <view v-for="(item, index) in ledgerList"
+            :key="index">
+        <view class="ledger-item">
+          <view class="item-header">
+            <view class="item-left">
+              <view class="document-icon">
+                <up-icon name="file-text"
+                         size="16"
+                         color="#ffffff"></up-icon>
+              </view>
+              <text class="item-id">{{ item.approveId }}</text>
+            </view>
+            <view class="item-tag">
+              <u-tag :type="getTagClass(item.approveStatus)">{{ formatReceiptType(item.approveStatus) }}</u-tag>
+            </view>
+          </view>
+          <up-divider></up-divider>
+          <view class="item-details">
+            <view class="detail-row">
+              <text class="detail-label">鐢宠浜�</text>
+              <text class="detail-value">{{ item.approveUserName }}</text>
+            </view>
+            <view class="detail-row">
+              <text class="detail-label">鐢宠閮ㄩ棬</text>
+              <text class="detail-value">{{ item.approveDeptName }}</text>
+            </view>
+            <view class="detail-row-approveReason">
+              <text class="detail-label">瀹℃壒浜嬬敱</text>
+              <text class="detail-value highlightBlue">{{ item.approveReason }}</text>
+            </view>
+            <view class="detail-row">
+              <text class="detail-label">鐢宠鏃ユ湡</text>
+              <text class="detail-value">{{ item.approveTime }}</text>
+            </view>
+            <!-- approveType=2 璇峰亣鐩稿叧瀛楁 -->
+            <template v-if="item.approveType === 2">
+              <view class="detail-row">
+                <text class="detail-label">璇峰亣寮�濮嬫椂闂�</text>
+                <text class="detail-value">{{ item.startDate || '-' }}</text>
+              </view>
+              <view class="detail-row">
+                <text class="detail-label">璇峰亣缁撴潫鏃堕棿</text>
+                <text class="detail-value">{{ item.endDate || '-' }}</text>
+              </view>
+            </template>
+            <!-- approveType=3 鍑哄樊鐩稿叧瀛楁 -->
+            <view v-if="item.approveType === 3"
+                  class="detail-row">
+              <text class="detail-label">鍑哄樊鍦扮偣</text>
+              <text class="detail-value">{{ item.location || '-' }}</text>
+            </view>
+            <!-- approveType=4 鎶ラ攢鐩稿叧瀛楁 -->
+            <view v-if="item.approveType === 4"
+                  class="detail-row">
+              <text class="detail-label">鎶ラ攢閲戦</text>
+              <text class="detail-value highlightYellow">{{ item.price ? `楼${item.price}` : '-' }}</text>
+            </view>
+            <view class="detail-row">
+              <text class="detail-label">缁撴潫鏃ユ湡</text>
+              <text class="detail-value">{{ item.approveOverTime }}</text>
+            </view>
+            <up-divider></up-divider>
+            <view class="detail-info">
+              <view class="detail-row-user">
+                <text class="detail-label">褰撳墠瀹℃壒浜�</text>
+                <view class="detail-value approver-value">
+                  <view class="approver-chip">
+                    <text class="approver-name">{{ item.approveUserCurrentName || '鏈垎閰�' }}</text>
+                  </view>
+                </view>
+              </view>
+              <view class="detail-row">
+                <view class="actions">
+                  <u-button type="primary"
+                            size="small"
+                            class="action-btn edit"
+                            :disabled="item.approveStatus == 2 || item.approveStatus == 1 || item.approveStatus == 4"
+                            @click="handleItemClick(item)">
+                    缂栬緫
+                  </u-button>
+                  <u-button type="success"
+                            size="small"
+                            class="action-btn approve"
+                            :disabled="item.approveUserCurrentId == null || item.approveStatus == 2 || item.approveStatus == 3 || item.approveStatus == 4 || item.approveUserCurrentId !== userStore.id"
+                            @click="approve(item)">
+                    瀹℃牳
+                  </u-button>
+                </view>
+              </view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view v-else
+          class="no-data">
+      <text>鏆傛棤瀹℃壒鏁版嵁</text>
+    </view>
+    <!-- 娴姩鎿嶄綔鎸夐挳 -->
+    <view class="fab-button"
+          @click="handleAdd">
+      <up-icon name="plus"
+               size="24"
+               color="#ffffff"></up-icon>
+    </view>
+  </view>
 </template>
 
 <script setup>
-	import {
-		ref,
-		toRefs,
-		reactive
-	} from "vue";
-	import PageHeader from "@/components/PageHeader.vue";
-	import {approveProcessListPage} from "@/api/collaborativeApproval/approvalProcess";
-	import {onShow} from "@dcloudio/uni-app";
-	import useUserStore from "@/store/modules/user";
-	
-	// 鎺ユ敹鐖剁粍浠朵紶閫掔殑 approveType 鍙傛暟
-	const props = defineProps({
-		approveType: {
-			type: Number,
-			default: 0
-		}
-	});
-	
-	const userStore = useUserStore()
-	// 鏁版嵁
-	const ledgerList = ref([]);
-	const data = reactive({
-		searchForm: {
-			approveId: "",
-		},
-	});
-	const { searchForm } = toRefs(data);
+  import { ref, toRefs, reactive } from "vue";
+  import PageHeader from "@/components/PageHeader.vue";
+  import { approveProcessListPage } from "@/api/collaborativeApproval/approvalProcess";
+  import { onShow } from "@dcloudio/uni-app";
+  import useUserStore from "@/store/modules/user";
 
-	// 杩斿洖涓婁竴椤�
-	const goBack = () => {
-		uni.navigateBack();
-	};
-	// 鏌ヨ鍒楄〃
-	const getList = () => {
-		showLoadingToast('鍔犺浇涓�...')
-		const page = {
-			current: -1,
-			size: -1,
-		};
-		approveProcessListPage({
-				...page,approveType: props.approveType,...searchForm.value
-			})
-			.then((res) => {
-				ledgerList.value = res.data.records;
-				closeToast()
-			})
-			.catch(() => {
-				closeToast()
-			});
-	};
-	// 鏄剧ず鍔犺浇鎻愮ず
-	const showLoadingToast = (message) => {
-		uni.showLoading({
-			title: message,
-			mask: true
-		});
-	};
+  // 鎺ユ敹鐖剁粍浠朵紶閫掔殑 approveType 鍙傛暟
+  const props = defineProps({
+    approveType: {
+      type: Number,
+      default: 0,
+    },
+  });
 
-	// 鍏抽棴鎻愮ず
-	const closeToast = () => {
-		uni.hideLoading();
-	};
+  // 鏄犲皠 approveType 鍒板搴旂殑椤甸潰鏍囬
+  const getPageTitle = type => {
+    const titleMap = {
+      1: "鍏嚭绠$悊",
+      2: "璇峰亣绠$悊",
+      3: "鍑哄樊绠$悊",
+      4: "鎶ラ攢绠$悊",
+      5: "閲囪喘绠$悊",
+      6: "鎶ヤ环绠$悊",
+      7: "鍑哄簱绠$悊",
+    };
+    return titleMap[type] || "瀹℃壒绠$悊";
+  };
 
-	// 鏄剧ず绛涢�夐�夐」
-	const showFilterOptions = () => {
-		uni.showActionSheet({
-			itemList: ["鎸夋棩鏈熺瓫閫�", "鎸夌姸鎬佺瓫閫�", "鎸夐噾棰濈瓫閫�"],
-			success: (res) => {
-				console.log("閫夋嫨浜嗙瓫閫夐�夐」:", res.tapIndex);
-			},
-		});
-	};
-	// 鏍煎紡鍖栧洖娆炬柟寮�
-	const formatReceiptType = (params) => {
-		if (params == 0) {
-			return "寰呭鏍�";
-		} else if (params == 1) {
-			return "瀹℃牳涓�";
-		} else if (params == 2) {
-			return "瀹℃牳瀹屾垚";
-		} else if (params == 4) {
-			return "宸查噸鏂版彁浜�";
-		} else {
-			return '涓嶉�氳繃';
-		}
-	};
-	// 鑾峰彇鏍囩鏍峰紡绫�
-	const getTagClass = (type) => {
-		if (type == 0) {
-			return "warning";
-		} else if (type == 1) {
-			return "primary";
-		} else if (type == 2) {
-			return "success";
-		} else if (type == 4) {
-			return "primary";
-		} else {
-			return "error";
-		}
-	};
+  const pageTitle = getPageTitle(props.approveType);
 
-	// 鐐瑰嚮鍒楄〃椤�
-	const handleItemClick = (item) => {
-		// 浣跨敤鏈湴瀛樺偍浼犻�掓暟鎹�
-		uni.setStorageSync('invoiceLedgerEditRow', JSON.stringify(item));
-		uni.setStorageSync('operationType', 'edit');
-		uni.setStorageSync('approveId', item.approveId);
-		uni.setStorageSync('approveType', props.approveType);
-		uni.navigateTo({
-			url: "/pages/cooperativeOffice/collaborativeApproval/detail",
-		});
-	};
+  const userStore = useUserStore();
+  // 鏁版嵁
+  const ledgerList = ref([]);
+  const data = reactive({
+    searchForm: {
+      approveId: "",
+    },
+  });
+  const { searchForm } = toRefs(data);
 
-	// 娣诲姞鏂拌褰�
-	const handleAdd = () => {
-		uni.setStorageSync('operationType', 'add');
-		uni.setStorageSync('approveType', props.approveType);
-		uni.navigateTo({
-			url: `/pages/cooperativeOffice/collaborativeApproval/detail?approveType=${props.approveType}`,
-		});
-	};
-	// 鐐瑰嚮瀹℃牳
-	const approve = (item) => {
-		uni.setStorageSync('approveId', item.approveId);
-		uni.setStorageSync('approveType', props.approveType);
-		uni.navigateTo({
-			url: "/pages/cooperativeOffice/collaborativeApproval/approve?approveType=" + props.approveType
-		})
-	}
+  // 杩斿洖涓婁竴椤�
+  const goBack = () => {
+    uni.navigateBack();
+  };
+  // 鏌ヨ鍒楄〃
+  const getList = () => {
+    showLoadingToast("鍔犺浇涓�...");
+    const page = {
+      current: -1,
+      size: -1,
+    };
+    approveProcessListPage({
+      ...page,
+      approveType: props.approveType,
+      ...searchForm.value,
+    })
+      .then(res => {
+        ledgerList.value = res.data.records;
+        closeToast();
+      })
+      .catch(() => {
+        closeToast();
+      });
+  };
+  // 鏄剧ず鍔犺浇鎻愮ず
+  const showLoadingToast = message => {
+    uni.showLoading({
+      title: message,
+      mask: true,
+    });
+  };
 
-	onShow(() => {
-		// 椤甸潰鍔犺浇瀹屾垚鍚庣殑鍒濆鍖栭�昏緫
-		getList();
-	});
+  // 鍏抽棴鎻愮ず
+  const closeToast = () => {
+    uni.hideLoading();
+  };
+
+  // 鏄剧ず绛涢�夐�夐」
+  const showFilterOptions = () => {
+    uni.showActionSheet({
+      itemList: ["鎸夋棩鏈熺瓫閫�", "鎸夌姸鎬佺瓫閫�", "鎸夐噾棰濈瓫閫�"],
+      success: res => {
+        console.log("閫夋嫨浜嗙瓫閫夐�夐」:", res.tapIndex);
+      },
+    });
+  };
+  // 鏍煎紡鍖栧洖娆炬柟寮�
+  const formatReceiptType = params => {
+    if (params == 0) {
+      return "寰呭鏍�";
+    } else if (params == 1) {
+      return "瀹℃牳涓�";
+    } else if (params == 2) {
+      return "瀹℃牳瀹屾垚";
+    } else if (params == 4) {
+      return "宸查噸鏂版彁浜�";
+    } else {
+      return "涓嶉�氳繃";
+    }
+  };
+  // 鑾峰彇鏍囩鏍峰紡绫�
+  const getTagClass = type => {
+    if (type == 0) {
+      return "warning";
+    } else if (type == 1) {
+      return "primary";
+    } else if (type == 2) {
+      return "success";
+    } else if (type == 4) {
+      return "primary";
+    } else {
+      return "error";
+    }
+  };
+
+  // 鐐瑰嚮鍒楄〃椤�
+  const handleItemClick = item => {
+    // 浣跨敤鏈湴瀛樺偍浼犻�掓暟鎹�
+    uni.setStorageSync("invoiceLedgerEditRow", JSON.stringify(item));
+    uni.setStorageSync("operationType", "edit");
+    uni.setStorageSync("approveId", item.approveId);
+    uni.setStorageSync("approveType", props.approveType);
+    uni.navigateTo({
+      url: "/pages/cooperativeOffice/collaborativeApproval/detail",
+    });
+  };
+
+  // 娣诲姞鏂拌褰�
+  const handleAdd = () => {
+    uni.setStorageSync("operationType", "add");
+    uni.setStorageSync("approveType", props.approveType);
+    uni.navigateTo({
+      url: `/pages/cooperativeOffice/collaborativeApproval/detail?approveType=${props.approveType}`,
+    });
+  };
+  // 鐐瑰嚮瀹℃牳
+  const approve = item => {
+    uni.setStorageSync("approveId", item.approveId);
+    uni.setStorageSync("approveType", props.approveType);
+    uni.navigateTo({
+      url:
+        "/pages/cooperativeOffice/collaborativeApproval/approve?approveType=" +
+        props.approveType,
+    });
+  };
+
+  onShow(() => {
+    // 椤甸潰鍔犺浇瀹屾垚鍚庣殑鍒濆鍖栭�昏緫
+    getList();
+  });
 </script>
 
 <style scoped lang="scss">
-	@import "../../../styles/sales-common.scss";
+  @import "../../../styles/sales-common.scss";
 
-	.u-divider {
-		margin: 0 !important;
-	}
+  .u-divider {
+    margin: 0 !important;
+  }
 
-	// 鏂囨。鍥炬爣鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
-	.document-icon {
-		background: #ed8d05;
-	}
+  // 鏂囨。鍥炬爣鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
+  .document-icon {
+    background: #ed8d05;
+  }
 
-	// 娴姩鎸夐挳鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
-	.fab-button {
-		background: #ed8d05;
-	}
+  // 娴姩鎸夐挳鏍峰紡 - 瑕嗙洊鍏叡鏍峰紡涓殑鑳屾櫙鑹�
+  .fab-button {
+    background: #ed8d05;
+  }
 
-	// 鐗规湁鏍峰紡
-	.detail-row-user {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-	}
-	
-	.detail-row-approveReason {
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		margin-bottom: 8px;
-	}
+  // 鐗规湁鏍峰紡
+  .detail-row-user {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+  }
 
-	.detail-value.highlightBlue {
-		color: #2979ff;
-		font-weight: 500;
-	}
+  .detail-row-approveReason {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-bottom: 8px;
+  }
 
-	.detail-value.highlightYellow {
-		color: #ed8d05;
-		font-weight: 500;
-	}
+  .detail-value.highlightBlue {
+    color: #2979ff;
+    font-weight: 500;
+  }
 
-	.approver-value {
-		display: flex;
-		justify-content: flex-end;
-	}
-	
-	.approver-chip {
-		display: inline-flex;
-		align-items: center;
-		gap: 6px;
-		background: #f0f6ff;
-		color: #2b7cff;
-		border: 1px solid #e0efff;
-		border-radius: 999px;
-		padding: 4px 10px;
-		max-width: 100%;
-	}
-	
-	.approver-name {
-		font-size: 12px;
-		color: #2b7cff;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-	}
+  .detail-value.highlightYellow {
+    color: #ed8d05;
+    font-weight: 500;
+  }
 
-	.actions {
-		display: flex;
-		gap: 10px;
-		align-items: center;
-		justify-content: flex-end;
-	}
+  .approver-value {
+    display: flex;
+    justify-content: flex-end;
+  }
 
-	.action-btn {
-		border-radius: 16px;
-		height: 28px;
-		line-height: 28px;
-		padding: 0 12px;
-	}
+  .approver-chip {
+    display: inline-flex;
+    align-items: center;
+    gap: 6px;
+    background: #f0f6ff;
+    color: #2b7cff;
+    border: 1px solid #e0efff;
+    border-radius: 999px;
+    padding: 4px 10px;
+    max-width: 100%;
+  }
 
+  .approver-name {
+    font-size: 12px;
+    color: #2b7cff;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+
+  .actions {
+    display: flex;
+    gap: 10px;
+    align-items: center;
+    justify-content: flex-end;
+  }
+
+  .action-btn {
+    border-radius: 16px;
+    height: 28px;
+    line-height: 28px;
+    padding: 0 12px;
+  }
 </style>
\ No newline at end of file

--
Gitblit v1.9.3