From 0c357e90050d9d461c6ab0d85e1b9c2bac2f6f55 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 19 一月 2026 17:50:36 +0800
Subject: [PATCH] Merge branch 'dev_new' of http://114.132.189.42:9002/r/product-inventory-APP-before into dev_new
---
src/pages/managementMeetings/meetExamine/approve.vue | 470 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 470 insertions(+), 0 deletions(-)
diff --git a/src/pages/managementMeetings/meetExamine/approve.vue b/src/pages/managementMeetings/meetExamine/approve.vue
new file mode 100644
index 0000000..3ef296d
--- /dev/null
+++ b/src/pages/managementMeetings/meetExamine/approve.vue
@@ -0,0 +1,470 @@
+<template>
+ <view class="approve-page">
+ <PageHeader title="瀹℃壒"
+ @back="goBack" />
+ <!-- 鐢宠淇℃伅 -->
+ <view class="application-info">
+ <view class="info-header">
+ <text class="info-title">浼氳淇℃伅</text>
+ </view>
+ <view class="info-content">
+ <view class="info-row">
+ <text class="info-label">浼氳涓婚</text>
+ <text class="info-value">{{ approvalData.title }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">鐢宠浜�</text>
+ <text class="info-value">{{ approvalData.applicant }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">涓荤悊浜�</text>
+ <text class="info-value">{{ approvalData.host }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">浼氳鏃堕棿</text>
+ <text class="info-value">{{ formatDateTime(approvalData.meetingTime) }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">浼氳鍦扮偣</text>
+ <text class="info-value">{{ approvalData.location }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">瀹℃壒鐘舵��</text>
+ <text class="info-value tag"
+ :class="getTagClass(approvalData.approveNodeStatus)">
+ {{ formatReceiptType(approvalData.approveNodeStatus) }}
+ </text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">鍙備細浜烘暟</text>
+ <text class="info-value">{{ approvalData.participants.length }}</text>
+ </view>
+ <view class="info-row">
+ <text class="info-label">鍙備細浜哄憳</text>
+ <text class="info-value">{{ approvalData.participants.map(it => it.name).join("銆�") }}</text>
+ </view>
+ </view>
+ </view>
+ <!-- 搴曢儴鎿嶄綔鎸夐挳 -->
+ <view v-if="isEdit"
+ class="footer-actions">
+ <u-button class="reject-btn"
+ @click="handleReject">涓嶉�氳繃</u-button>
+ <u-button class="approve-btn"
+ @click="handleApprove">閫氳繃</u-button>
+ </view>
+ </view>
+</template>
+
+<script setup>
+ import { ref, onMounted, computed } from "vue";
+ import { onLoad } from "@dcloudio/uni-app";
+ import { saveMeetingApplication } from "@/api/managementMeetings/meetExamine";
+ const showToast = message => {
+ uni.showToast({
+ title: message,
+ icon: "none",
+ });
+ };
+ import PageHeader from "@/components/PageHeader.vue";
+
+ const approvalData = ref({});
+ const approvalSteps = ref([]);
+ const isEdit = ref(false);
+
+ onLoad(options => {
+ console.log(options, "options");
+ if (options.item) {
+ approvalData.value = JSON.parse(options.item);
+ }
+ if (options.edit) {
+ isEdit.value = options.edit === "true" ? true : false;
+ }
+ });
+
+ const goBack = () => {
+ uni.removeStorageSync("approveId");
+ uni.navigateBack();
+ };
+ const formatDateTime = dateTime => {
+ if (!dateTime) return "";
+ return dateTime.replace(" ", "\n");
+ };
+
+ // 鏍煎紡鍖栧洖娆炬柟寮�
+ const formatReceiptType = params => {
+ if (params == 0) {
+ return "寰呭鏍�";
+ } else if (params == 1) {
+ return "宸查�氳繃";
+ } else if (params == 2) {
+ return "鏈�氳繃";
+ } else if (params == 3) {
+ return "宸插彇娑�";
+ } else {
+ return "鏈煡";
+ }
+ };
+ // 鑾峰彇鏍囩鏍峰紡绫�
+ const getTagClass = type => {
+ if (type == 0) {
+ return "info";
+ } else if (type == 1) {
+ return "success";
+ } else if (type == 2) {
+ return "warning";
+ } else if (type == 3) {
+ return "danger";
+ } else {
+ return "info";
+ }
+ };
+ const submitForm = status => {
+ // 璋冪敤鍚庣
+ saveMeetingApplication({ id: approvalData.value.id, status: status })
+ .then(res => {
+ if (res.code === 200) {
+ showToast("瀹℃壒鎻愪氦鎴愬姛");
+ // 鎻愮ず鍚庤繑鍥炰笂涓�涓〉闈�
+ setTimeout(() => {
+ goBack(); // 鍐呴儴鏄� uni.navigateBack()
+ }, 800);
+ } else {
+ showToast(res.message || "瀹℃壒鎿嶄綔澶辫触锛岃閲嶈瘯");
+ }
+ })
+ .catch(error => {
+ console.error("瀹℃壒鎿嶄綔澶辫触:", error);
+ showToast("瀹℃壒鎿嶄綔澶辫触锛岃閲嶈瘯");
+ });
+ };
+
+ const handleApprove = () => {
+ uni.showModal({
+ title: "纭鎿嶄綔",
+ content: "纭畾瑕侀�氳繃璇ヤ細璁敵璇峰悧锛�",
+ success: res => {
+ if (res.confirm) submitForm(1);
+ },
+ });
+ };
+
+ const handleReject = () => {
+ uni.showModal({
+ title: "纭鎿嶄綔",
+ content: "纭畾涓嶉�氳繃璇ヤ細璁敵璇峰悧锛�",
+ success: res => {
+ if (res.confirm) submitForm(2);
+ },
+ });
+ };
+ // 鍘熷鑺傜偣鏁版嵁锛堢敤浜庢彁浜ら�昏緫锛�
+ const activities = ref([]);
+</script>
+
+<style scoped lang="scss">
+ .approve-page {
+ min-height: 100vh;
+ background: #f8f9fa;
+ padding-bottom: 80px;
+ }
+
+ .header {
+ display: flex;
+ align-items: center;
+ background: #fff;
+ padding: 16px 20px;
+ border-bottom: 1px solid #f0f0f0;
+ position: sticky;
+ top: 0;
+ z-index: 100;
+ }
+
+ .title {
+ flex: 1;
+ text-align: center;
+ font-size: 18px;
+ font-weight: 600;
+ color: #333;
+ }
+
+ .application-info {
+ background: #fff;
+ margin: 16px;
+ border-radius: 12px;
+ overflow: hidden;
+ }
+
+ .info-header {
+ padding: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #f8f9fa;
+ }
+
+ .info-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+ }
+
+ .info-content {
+ padding: 16px;
+ }
+
+ .info-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 12px;
+
+ &:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .info-label {
+ font-size: 14px;
+ color: #666;
+ width: 80px;
+ flex-shrink: 0;
+ }
+
+ .info-value {
+ font-size: 14px;
+ color: #333;
+ flex: 1;
+ }
+
+ .approval-process {
+ background: #fff;
+ margin: 16px;
+ border-radius: 12px;
+ overflow: hidden;
+ }
+
+ .process-header {
+ padding: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #f8f9fa;
+ }
+
+ .process-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+ }
+
+ .process-steps {
+ padding: 20px;
+ }
+
+ .process-step {
+ display: flex;
+ position: relative;
+ margin-bottom: 24px;
+
+ &:last-child {
+ margin-bottom: 0;
+
+ .step-line {
+ display: none;
+ }
+ }
+ }
+
+ .step-indicator {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ margin-right: 16px;
+ }
+
+ .step-dot {
+ width: 32px;
+ height: 32px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 14px;
+ font-weight: 600;
+ position: relative;
+ z-index: 2;
+ }
+
+ .process-step.completed .step-dot {
+ background: #52c41a;
+ color: #fff;
+ }
+
+ .process-step.current .step-dot {
+ background: #1890ff;
+ color: #fff;
+ animation: pulse 2s infinite;
+ }
+
+ .process-step.pending .step-dot {
+ background: #d9d9d9;
+ color: #999;
+ }
+
+ .step-line {
+ width: 2px;
+ height: 40px;
+ background: #d9d9d9;
+ margin-top: 8px;
+ }
+
+ .process-step.completed .step-line {
+ background: #52c41a;
+ }
+
+ .process-step.rejected .step-dot {
+ background: #ff4d4f;
+ color: #fff;
+ }
+ .process-step.rejected .step-line {
+ background: #ff4d4f;
+ }
+
+ .step-content {
+ flex: 1;
+ padding-top: 4px;
+ }
+
+ .step-info {
+ margin-bottom: 8px;
+ }
+
+ .step-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+ display: block;
+ margin-bottom: 4px;
+ }
+
+ .step-approver {
+ font-size: 14px;
+ color: #666;
+ display: block;
+ margin-bottom: 4px;
+ }
+
+ .step-time {
+ font-size: 12px;
+ color: #999;
+ display: block;
+ }
+
+ .step-opinion {
+ background: #f8f9fa;
+ padding: 12px;
+ border-radius: 8px;
+ border-left: 4px solid #52c41a;
+ }
+
+ .opinion-label {
+ font-size: 12px;
+ color: #666;
+ display: block;
+ margin-bottom: 4px;
+ }
+
+ .opinion-content {
+ font-size: 14px;
+ color: #333;
+ line-height: 1.5;
+ }
+
+ .approval-input {
+ background: #fff;
+ margin: 16px;
+ border-radius: 12px;
+ overflow: hidden;
+ }
+
+ .input-header {
+ padding: 16px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #f8f9fa;
+ }
+
+ .input-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #333;
+ }
+
+ .input-content {
+ padding: 16px;
+ }
+
+ .footer-actions {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: #fff;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 16px;
+ box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1);
+ z-index: 1000;
+ }
+
+ .reject-btn {
+ width: 120px;
+ background: #ff4d4f;
+ color: #fff;
+ }
+
+ .approve-btn {
+ width: 120px;
+ background: #52c41a;
+ color: #fff;
+ }
+
+ /* 閫傞厤u-button鏍峰紡 */
+ :deep(.u-button) {
+ border-radius: 6px;
+ }
+
+ @keyframes pulse {
+ 0% {
+ box-shadow: 0 0 0 0 rgba(24, 144, 255, 0.7);
+ }
+ 70% {
+ box-shadow: 0 0 0 10px rgba(24, 144, 255, 0);
+ }
+ 100% {
+ box-shadow: 0 0 0 0 rgba(24, 144, 255, 0);
+ }
+ }
+ .signature-section {
+ background: #fff;
+ padding: 12px 16px 16px;
+ border-top: 1px solid #f0f0f0;
+ }
+ .signature-header {
+ margin-bottom: 8px;
+ }
+ .signature-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #333;
+ }
+ .signature-box {
+ width: 100%;
+ height: 180px;
+ background: #fff;
+ border: 1px dashed #d9d9d9;
+ border-radius: 8px;
+ overflow: hidden;
+ }
+ .signature-actions {
+ margin-top: 8px;
+ display: flex;
+ justify-content: flex-end;
+ }
+</style>
\ No newline at end of file
--
Gitblit v1.9.3