From 0417817fd8c7b5b79efd721da77f70217cda0201 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期四, 28 十一月 2024 01:33:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/projectManage/progress/progressRecord.vue |  277 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 277 insertions(+), 0 deletions(-)

diff --git a/src/views/projectManage/progress/progressRecord.vue b/src/views/projectManage/progress/progressRecord.vue
new file mode 100644
index 0000000..3c2eafe
--- /dev/null
+++ b/src/views/projectManage/progress/progressRecord.vue
@@ -0,0 +1,277 @@
+<template>
+  <div class="app-container">
+    <el-container>
+      <el-header v-show="planRecordData && planRecordData.projectName" class="header-title">椤圭洰鍚嶇О锛歿{ planRecordData.projectName }}</el-header>
+      <h4 v-show="planRecordData && planRecordData.projectCode" style="text-align: center">椤圭洰浠g爜锛歿{ planRecordData.projectCode }}</h4>
+      <el-main>
+        <el-card shadow="hover">
+          <el-row :gutter="20">
+            <div style="margin-bottom: 10px">
+              <el-link style="font-size: 20px; font-weight: bold;" @click="activeTab = 'month'">鏈堝害璁″垝/</el-link>
+              <el-link style="font-size: 20px; font-weight: bold;" @click="activeTab ='season'">瀛e害璁″垝/</el-link>
+              <el-link style="font-size: 20px; font-weight: bold;" @click="activeTab = 'year'">骞村害璁″垝</el-link>
+            </div>
+            <el-col :span="24" class="mb-4" style="margin-top: 20px" v-if="activeTab === 'month'">
+              <div v-for="(item, index) in monthProgress">
+                <div style="margin-bottom: 10px">
+                  <span style="font-size: 18px;">{{ item.planTime }}{{ item.planTimeFlag === 0 ? '鏈堝害' : item.planTimeFlag === 1 ? '瀛e害' : '骞村害' }}</span>
+                  <el-table :data="item.planInfoList" border stripe style="width: 100%; margin-bottom: 20px">
+                    <el-table-column prop="index" label="搴忓彿" width="50" align="center">
+                      <template #default="scope">
+                        {{ scope.$index + 1 }}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" />
+                    <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center">
+                      <template slot-scope="scope">
+                        {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" />
+                    <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" />
+                    <el-table-column fixed="right" label="鎿嶄綔" align="center">
+                      <template slot-scope="scope">
+                        <el-button type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button>
+                        <el-button type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="24" class="mb-4" style="margin-top: 20px" v-if="activeTab === 'season'" >
+              <div v-for="(item, index) in seasonProgress">
+                <div style="margin-bottom: 10px">
+                  <span style="font-size: 18px;">{{ item.planTime }}{{ item.planTimeFlag === 0 ? '鏈堝害' : item.planTimeFlag === 1 ? '瀛e害' : '骞村害' }}</span>
+                  <el-table :data="item.planInfoList" border stripe style="width: 100%; margin-bottom: 20px">
+                    <el-table-column prop="index" label="搴忓彿" width="50" align="center">
+                      <template #default="scope">
+                        {{ scope.$index + 1 }}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" />
+                    <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center">
+                      <template slot-scope="scope">
+                        {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" />
+                    <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" />
+                    <el-table-column fixed="right" label="鎿嶄綔" align="center">
+                      <template slot-scope="scope">
+                        <el-button type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button>
+                        <el-button type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </div>
+              </div>
+            </el-col>
+            <el-col :span="24" class="mb-4" style="margin-top: 20px" v-if="activeTab === 'year'">
+              <div v-for="(item, index) in yearProgress">
+                <div style="margin-bottom: 10px">
+                  <span style="font-size: 18px;">{{ item.planTime }}{{ item.planTimeFlag === 0 ? '鏈堝害' : item.planTimeFlag === 1 ? '瀛e害' : '骞村害' }}</span>
+                  <el-table :data="item.planInfoList" border stripe style="width: 100%; margin-bottom: 20px">
+                    <el-table-column prop="index" label="搴忓彿" width="50" align="center">
+                      <template #default="scope">
+                        {{ scope.$index + 1 }}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="title" label="浜嬮」鍚嶇О" align="center" />
+                    <el-table-column prop="progressStatus" label="杩涘害鎯呭喌" align="center">
+                      <template slot-scope="scope">
+                        {{ scope.row.progressStatus === 0 ? '鏈畬鎴�' : scope.row.progressStatus === 1 ? '寰呭鏍�' : scope.row.progressStatus === 2 ? '宸查┏鍥�' : '宸插畬鎴�'}}
+                      </template>
+                    </el-table-column>
+                    <el-table-column prop="startTime" label="璁″垝寮�濮嬫椂闂�" align="center" />
+                    <el-table-column prop="endTime" label="璁″垝瀹屾垚鏃堕棿" align="center" />
+                    <el-table-column fixed="right" label="鎿嶄綔" align="center">
+                      <template slot-scope="scope">
+                        <el-button type="primary" size="small" :disabled="scope.row.progressStatus === 1 || scope.row.progressStatus === 3" @click="handleProgressReport(scope.row)">杩涘害涓婃姤</el-button>
+                        <el-button type="primary" size="small" @click="handleCheckProgress(scope.row)">鏌ョ湅</el-button>
+                      </template>
+                    </el-table-column>
+                  </el-table>
+                </div>
+              </div>
+            </el-col>
+            <div style="margin-bottom: 10px">
+              <h1 style="font-size: 20px; font-weight: bold;">绔e伐鎶ュ憡</h1>
+              <div style="display: flex; justify-content: center; align-items: center;">
+                <el-upload
+                    class="upload-demo"
+                    drag
+                    action="https://jsonplaceholder.typicode.com/posts/"
+                    multiple>
+                  <i class="el-icon-upload"></i>
+                  <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+                  <div class="el-upload__tip" slot="tip">鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb</div>
+                </el-upload>
+              </div>
+            </div>
+            <div style="margin-bottom: 10px">
+              <h1 style="font-size: 20px; font-weight: bold;">鎯呭喌璇存槑</h1>
+              <div style="display: flex; justify-content: center; align-items: center;">
+                <el-upload
+                    class="upload-demo"
+                    drag
+                    action="https://jsonplaceholder.typicode.com/posts/"
+                    multiple>
+                  <i class="el-icon-upload"></i>
+                  <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+                  <div class="el-upload__tip" slot="tip">鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb</div>
+                </el-upload>
+              </div>
+            </div>
+          </el-row>
+
+          <el-dialog :title=" checkFlag ? '杩涘害鏌ョ湅' : '杩涘害涓婃姤' " :visible.sync="dialogFormVisible" custom-class="custom-dialog">
+            <el-form :model="progressReportData">
+              <el-form-item label="鎶ュ憡鏈燂細" :label-width="formLabelWidth">
+                <el-input :value="progressReportData.planTime + (progressReportData.planTimeFlag === 0 ? '鏈堝害' : progressReportData.planTimeFlag === 1 ? '瀛e害' : '骞村害')" readonly />
+              </el-form-item>
+              <el-form-item label="璁″垝浜嬮」锛�" :label-width="formLabelWidth">
+                <el-input v-model="progressReportData.title" readonly />
+              </el-form-item>
+              <el-form-item label="璁″垝鏃堕棿锛�" :label-width="formLabelWidth">
+                <el-date-picker v-model="progressReportData.startTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" readonly/>
+                鑷�
+                <el-date-picker v-model="progressReportData.endTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" readonly/>
+              </el-form-item>
+              <el-form-item label="瀹為檯瀹屾垚鏃堕棿锛�" :label-width="formLabelWidth">
+                <el-date-picker v-model="progressReportData.actualStartTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" :readonly="checkFlag"/>
+                鑷�
+                <el-date-picker v-model="progressReportData.actualEndTime" type="date" placeholder="閫夋嫨鏃ユ湡" size="small" style="width: 130px" :readonly="checkFlag"/>
+              </el-form-item>
+              <el-form-item label="杩涘害鎯呭喌锛�" :label-width="formLabelWidth">
+                <el-input type="textarea" v-model="progressReportData.progressStatus" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag" />
+              </el-form-item>
+              <el-form-item label="宸ョ▼杩涘害闄勪欢锛�" :label-width="formLabelWidth">
+                <el-upload
+                    class="upload-demo"
+                    drag
+                    action="https://jsonplaceholder.typicode.com/posts/"
+                    multiple
+                    :disabled="checkFlag" >
+                  <i class="el-icon-upload"></i>
+                  <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
+                  <div class="el-upload__tip" slot="tip">鍙兘涓婁紶jpg/png鏂囦欢锛屼笖涓嶈秴杩�500kb</div>
+                </el-upload>
+              </el-form-item>
+              <el-form-item label="鎴鏈姤鍛婂畬鎴愭姇璧勶細" :label-width="formLabelWidth">
+                <el-input v-model="progressReportData.actualInvest" type="number" :readonly="checkFlag" />
+              </el-form-item>
+              <el-form-item label="涓婄骇瀹℃牳锛�" :label-width="formLabelWidth">
+                <el-input :value="progressReportData.departmentExamine === 0 ? '鍚屾剰' : progressReportData.departmentExamine === 1 ? '椹冲洖' : '鏈鏍�'" readonly />
+              </el-form-item>
+              <el-form-item label="涓婄骇鎵瑰锛�" :label-width="formLabelWidth">
+                <el-input v-model="progressReportData.departmentApproval" readonly />
+              </el-form-item>
+              <el-form-item label="涓婄骇鎵瑰鍥炲锛�" :label-width="formLabelWidth">
+                <el-input type="textarea" v-model="progressReportData.departmentApprovalReply" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag" />
+              </el-form-item>
+              <el-form-item label="涓荤閮ㄩ棬瀹℃牳锛�" :label-width="formLabelWidth">
+                <el-input :value="progressReportData.manageExamine === 0 ? '鍚屾剰' : progressReportData.manageExamine === 1 ? '椹冲洖' : '鏈鏍�'" readonly />
+              </el-form-item>
+              <el-form-item label="涓荤閮ㄩ棬瀹℃牳鎵瑰锛�" :label-width="formLabelWidth">
+                <el-input v-model="progressReportData.manageApproval" readonly />
+              </el-form-item>
+              <el-form-item label="涓荤閮ㄩ棬鎵瑰鍥炲锛�" :label-width="formLabelWidth">
+                <el-input type="textarea" v-model="progressReportData.manageApprovalReply" placeholder="璇疯緭鍏�" rows="3" :readonly="checkFlag" />
+              </el-form-item>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+              <el-button type="primary" @click="handleRecordSubmit" v-if="!checkFlag">涓� 鎶�</el-button>
+              <el-button @click="dialogFormVisible = false">鍙� 娑�</el-button>
+            </div>
+          </el-dialog>
+        </el-card>
+      </el-main>
+    </el-container>
+  </div>
+</template>
+
+<script>
+import { getProgressInfoList, getProgressReport, recordSubmit } from "@/api/projectManage/progress/index";
+
+export default {
+  name: "progressRecord",
+  data() {
+    return {
+      // 鎺ユ敹浼犻�掕繃鏉ョ殑椤圭洰璁″垝鏁版嵁
+      planRecordData: {},
+      monthProgress: [],
+      seasonProgress: [],
+      yearProgress: [],
+      activeTab: "month", // 榛樿鏄剧ず鏈堝害璁″垝
+
+      dialogFormVisible: false,
+      // 鏌ョ湅鏄剧ず
+      checkFlag: false,
+      progressReportData: {},
+      formLabelWidth: '150px'
+    }
+  },
+  methods: {
+    search() {
+      this.getPlanRecordData()
+    },
+    // 鑾峰彇浼犻�掕繃鏉ョ殑椤圭洰璁″垝璇︽儏
+    getPlanRecordData() {
+      // 浠庢煡璇㈠弬鏁颁腑鑾峰彇鏁版嵁
+      if (this.$route.query.data) {
+        this.planRecordData = JSON.parse(this.$route.query.data);
+        this.getProgressInfoList(this.planRecordData.id);
+      }
+    },
+    // 鑾峰彇椤圭洰杩涘害璁″垝椤�
+    getProgressInfoList(id) {
+      getProgressInfoList(id).then(res => {
+        this.monthProgress = res.data.monthProgress;
+        this.seasonProgress = res.data.seasonProgress;
+        this.yearProgress = res.data.yearProgress;
+      })
+    },
+    // 杩涘害涓婃姤
+    handleProgressReport(row) {
+      this.dialogFormVisible = true;
+      getProgressReport(row.id).then(res => {
+        this.progressReportData = res.data;
+      })
+    },
+    // 涓婃姤鎻愪氦
+    handleRecordSubmit() {
+      recordSubmit(this.progressReportData).then(res => {
+        this.dialogFormVisible = false;
+        this.$message.success('涓婃姤鎴愬姛');
+        this.search();
+      })
+    },
+    // 鏌ョ湅杩涘害
+    handleCheckProgress(row) {
+      this.dialogFormVisible = true;
+      this.checkFlag = true;
+      getProgressReport(row.id).then(res => {
+        this.progressReportData = res.data;
+      })
+    }
+  },
+  created() {
+    this.search();
+  },
+};
+</script>
+
+<style scoped>
+.header-title {
+  font-size: 24px; /* 鏍规嵁闇�瑕佽皟鏁村瓧浣撳ぇ灏� */
+  text-align: center; /* 灞呬腑瀵归綈 */
+  line-height: 64px; /* 濡傛灉闇�瑕佷笌 header 楂樺害瀵归綈 */
+}
+
+.custom-dialog {
+  max-height: 70vh; /* 璁剧疆鏈�澶ч珮搴� */
+  overflow-y: auto; /* 鍏佽鍨傜洿婊氬姩 */
+}
+</style>
+

--
Gitblit v1.8.0