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