From 4a8e6048ba529a84f11ba74e4f90558bcd7b1075 Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期四, 03 四月 2025 16:31:58 +0800
Subject: [PATCH] Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory

---
 src/views/reportLibrary/feasibilityStudy/components/approval/index.vue |  426 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 354 insertions(+), 72 deletions(-)

diff --git a/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue b/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue
index 466cbe0..9af2b86 100644
--- a/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue
+++ b/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue
@@ -1,110 +1,392 @@
 <template>
-    <div>
-        <el-dialog top="40vh" :visible.sync="show" :show-close="false" :append-to-body="true"
-            :close-on-click-modal="false" width="60%">
-            <div class="top-con a-center" slot="title">
-                审批验证与发布报告
-            </div>
-            <div class="content">
-                <div class="left">
-                    <div class="label-tit">  </div>
+    <el-dialog :title="dialogTitle"  :visible.sync="visible" width="80%" po :close-on-click-modal="false"
+        @close="handleClose">
+        <div class="approval-dialog">
+            <!-- 左侧审批内容 -->
+            <div class="approval-content">
+                <Card class="approval-content-card">
+                    <template style="position: relative">
+                        <div class="header-title" style="width: 100%;">
+                            <div class="header-title-left">
+                                <img src="@/assets/public/headercard.png" />
+                                <div>所属项目组</div>
+                            </div>
+                        </div>
+                        <Table :queryForm="queryForm" :total="0" @currentChange="handleCurrentChange"
+                            @sizeChange="handleSizeChange">
+                            <template>
+                                <el-table-column prop="name" label="项目组名称" />
+                                <el-table-column prop="age" label="项目负责人" />
+                                <el-table-column prop="age" label="项目组成员" />
+                                <el-table-column prop="age" label="创建时间" />
+                            </template>
+                        </Table>
 
-                    <el-form ref="form" :model="form" label-width="100px"></el-form>
-                    <el-form-item label="报告编号" prop="name">
-                        <el-input v-model="form.name" placeholder="请输入报告编号" />
-                    </el-form-item>
-                    <el-form-item label="报告名称" prop="name">
-                        <el-input v-model="form.name" placeholder="请输入报告名称" />
-                    </el-form-item>
-                    <el-form-item label="报告状态" prop="name">
-                        <el-select v-model="form.name" placeholder="请选择报告状态">
-                            <el-option label="全部" value="1" />
-                            <el-option label="待审核" value="2" />
-                            <el-option label="已通过" value="3" />
-                            <el-option label="已驳回" value="4" />
-                        </el-select>
-                    </el-form-item>
-                </div>
-                <div class="right"></div>
+
+                        <el-form ref="form" :model="form" :rules="rules" inline label-position="top"
+                            style="margin-top: 38px">
+                            <div class="header-title" style="width: 100%;">
+                                <div class="header-title-left">
+                                    <img src="@/assets/public/headercard.png" />
+                                    <div>报告编号</div>
+                                </div>
+                            </div>
+                            <form-item prop="name" style="margin-top: 38px">
+                                <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                            </form-item>
+
+                            <div class="header-title" style="width: 100%;">
+                                <div class="header-title-left">
+                                    <img src="@/assets/public/headercard.png" />
+                                    <div>报告名称</div>
+                                </div>
+                            </div>
+                            <form-item prop="name" style="margin-top: 38px">
+                                <el-input v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                            </form-item>
+
+                            <div class="header-title" style="width: 100%;">
+                                <div class="header-title-left">
+                                    <img src="@/assets/public/headercard.png" />
+                                    <div>报告正文</div>
+                                </div>
+                            </div>
+                            <form-item prop="name" style="margin-top: 38px">
+                                <ai-editor v-model="form.name" style="width: 100%;" placeholder="请输入报告编号" />
+                            </form-item>
+
+                        </el-form>
+                    </template>
+                    <!-- <SelectMember ref="selectMember" /> -->
+                </Card>
             </div>
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="$emit('close')">取消</el-button>
-                <el-button type="primary" @click="$emit('confirm')">确定</el-button>
-            </span>
-        </el-dialog>
-    </div>
+            <!-- 右侧审批流程 -->
+            <div class="approval-flow">
+                <div class="flow-content">
+                    <approval-process :status="form.status" :submit-time="form.createTime" :approver="form.approver"
+                        :approve-time="form.approveTime" />
+                </div>
+            </div>
+        </div>
+        <div class="approval-dialog-approve">
+            <el-row :span="24">
+                <el-col :span="12">
+                    <div class="status">
+                        <div class="status-title">审批结果</div>
+                        <div class="status-content">
+                            <div class="resolve" :class="status == '1' && 'activeStatus'" @click.stop="status = 1">
+                                通过
+                            </div>
+                            <div class="reject" :class="status == '2' && 'activeStatus'" @click.stop="status = 2">
+                                驳回
+                            </div>
+                        </div>
+                    </div>
+                </el-col>
+                <el-col :span="12">
+                    <div class="remark">
+                        <div class="remark-title">审批意见</div>
+                        <el-input type="textarea" v-model="remark" placeholder="请输入审批意见" />
+                    </div>
+                </el-col>
+            </el-row>
+
+
+        </div>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="handleClose">取 消</el-button>
+            <el-button type="primary" @click="handleApprove" v-if="type === 'approve'">通过</el-button>
+        </div>
+    </el-dialog>
 </template>
 
 <script>
+import ApprovalProcess from '@/components/approvalProcess'
+import AiEditor from '@/components/AiEditor'
+
 export default {
-    components: {},
+    name: "ApprovalDialog",
+    components: {
+        ApprovalProcess,
+        AiEditor
+    },
     props: {
-        show: {
+        visible: {
             type: Boolean,
             default: false,
         },
-        title: {
+        type: {
             type: String,
-            default: '确认要删除这条信息吗?',
+            default: "approve", // approve-审批,view-查看
+        },
+        data: {
+            type: Object,
+            default: () => ({}),
         },
     },
     data() {
-        return {};
+        return {
+            form: {
+                planName: "",
+                planCode: "",
+                stage: "",
+                creator: "",
+                createTime: "",
+                approvalComment: "",
+                status: "pending",
+                approver: "",
+                approveTime: ""
+            },
+            radio1: 1,
+            rules: {},
+            status: "1",
+            remark: "",
+        };
     },
-    computed: {},
-    watch: {},
-    created() { },
-    mounted() { },
-    methods: {},
+    computed: {
+        dialogTitle() {
+            return this.type === "approve" ? "审批" : "审批详情";
+        },
+    },
+    watch: {
+        data: {
+            handler(val) {
+                if (val) {
+                    this.form = { ...val };
+                }
+            },
+            immediate: true,
+        },
+    },
+    methods: {
+        handleClose() {
+            this.$emit("update:visible", false);
+            this.form.approvalComment = "";
+        },
+        handleApprove() {
+            if (!this.form.approvalComment) {
+                this.$message.warning("请输入审批意见");
+                return;
+            }
+            this.$emit("approve", {
+                ...this.form,
+                status: "approved",
+            });
+        },
+        handleReject() {
+            if (!this.form.approvalComment) {
+                this.$message.warning("请输入审批意见");
+                return;
+            }
+            this.$emit("reject", {
+                ...this.form,
+                status: "rejected",
+            });
+        },
+    },
 };
 </script>
+
 <style scoped lang="less">
-.left {
+::v-deep .el-dialog__header {
+    border-bottom: 1px solid #e4e7ed;
+}
+
+.approval-dialog {
     display: flex;
-}
+    height: 40vh;
 
-::v-deep .el-dialog {
-    border-radius: 12px;
-
-    .el-dialog__header {
-        padding-top: 28px;
-        padding-right: 27px;
-        padding-left: 34px;
-        padding-bottom: 11px;
+    .approval-content {
+        flex: 3;
+        margin-right: 20px;
+        background: #ffffff;
+        box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08);
+        border-radius: 10px;
     }
 
-    .el-dialog__body {
-        padding: unset;
-        padding-left: 73px;
-        padding-right: 20px;
-    }
+    .approval-flow {
+        padding: 40px 20px;
+        // width: 405px;
+        flex: 2;
+        background: #ffffff;
+        box-shadow: 0px 4px 12px 4px rgba(0, 0, 0, 0.08);
+        border-radius: 10px;
+                          
+        .flow-title {
+            font-size: 16px;
+            font-weight: bold;
+            margin-bottom: 20px;
+            color: #303133;
+        }
 
-    .el-dialog__footer {
-        padding-top: 18px;
-        padding-right: 27px;
-        padding-bottom: 29px;
+        .flow-content {
+            height: calc(100% - 40px);
+            overflow-y: auto;
+
+            .el-form--inline .el-form-item {
+                margin-right: 83px;
+            }
+        }
     }
 }
 
-.bgcolor1 {
-    background: rgba(22, 119, 255, 1);
+.approval-content-card {
+    height: calc(100% - 100px) !important;
+    box-shadow: none !important;
 }
 
-.top-con {
-    display: flex;
-    justify-content: space-between;
+.header-title {
+    // display: flex;
+    align-items: center;
+    flex-wrap: wrap;
+    margin-bottom: 20px;
+    gap: 13px;
 
-    .title {
-        font-family: PingFangSC, PingFang SC;
-        font-weight: 600;
-        font-size: 16px;
-        color: rgba(0, 0, 0, 1);
-        margin-bottom: 13px;
+    .header-title-left {
+        display: flex;
+        align-items: center;
+        gap: 13px;
+        margin-top: 38px;
+
+        img {
+            width: 12px;
+            height: 19px;
+        }
+
+        div {
+            flex-shrink: 0;
+            font-weight: bold;
+            font-size: 18px;
+            color: #222222;
+            line-height: 27px;
+            font-family: "Source Han Sans CN Bold Bold";
+
+            &:before {
+                content: "*";
+                color: #f56c6c;
+                margin-right: 4px;
+            }
+        }
+
+        span {
+            flex-shrink: 0;
+            font-weight: bold;
+            font-size: 18px;
+            color: #222222;
+            line-height: 27px;
+            font-family: "Source Han Sans CN Bold Bold";
+        }
+    }
+
+    .header-title-left :first-child {
+        margin-top: 0;
+    }
+}
+
+.header-title:first-child {
+    .header-title-left {
+        margin-top: 0;
+    }
+}
+
+.item-title {
+    padding-left: 25px;
+
+    span {
+        flex-shrink: 0;
+        font-weight: bold;
+        font-size: 14px;
+        color: #222222;
+        line-height: 27px;
+        font-family: "Source Han Sans CN Bold Bold";
+        margin: 18px 0;
+
+        &:before {
+            content: "*";
+            color: #f56c6c;
+            margin-right: 4px;
+        }
+    }
+}
+
+.approval-dialog-approve {
+    padding: 38px 20px;
+    // display: flex;
+    align-content: center;
+
+    .status {
+        margin-right: 40px;
+        max-width: 60%;
+    }
+
+    //   align-items: center;
+    .status-title {
+        color: #222222;
+        font-family: "SourceHanSansCN-Medium";
+        line-height: 14px;
+        margin-bottom: 16px;
+    }
+
+    .status-content {
+        display: flex;
+        align-items: center;
+        width: 100%;
+        gap: 16px;
+        background: #ffffff;
+        border-radius: 10px;
+        border: 1px solid rgba(4, 156, 154, 0.5);
+
+        .resolve {
+            border-radius: 10px;
+            flex: 1;
+            font-size: 16px;
+            // padding: 5px 55px;
+            font-weight: 400;
+            color: #333333;
+            cursor: pointer;
+            line-height: 32px;
+            display: flex;
+            align-items: center;
+            justify-content: center
+        }
+
+        .reject {
+            flex: 1;
+            border-radius: 10px;
+            font-size: 16px;
+            line-height: 32px;
+            // padding: 5px 55px;
+            font-weight: 400;
+            color: #333333;
+            cursor: pointer;
+            display: flex;
+            align-items: center;
+            justify-content: center
+        }
+
+        .activeStatus {
+            background: #ebfefd;
+            color: #049c9a;
+            box-shadow: 0px 0px 6px 0px rgba(10, 109, 108, 0.25);
+            border-radius: 10px;
+        }
+    }
+
+    .remark-title {
+        color: #222222;
+        font-family: "SourceHanSansCN-Medium";
+        line-height: 14px;
+        margin-bottom: 16px;
     }
 }
 
 .dialog-footer {
+    align-items: center;
     display: flex;
     justify-content: center;
+
+    button {
+        width: 150px;
+    }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.7.1