Selaa lähdekoodia

原任务审批页面

duy 8 kuukautta sitten
vanhempi
commit
033a1ae25f
1 muutettua tiedostoa jossa 1552 lisäystä ja 0 poistoa
  1. 1552 0
      src/views/tasks/components/hc-data/task-review copy.vue

+ 1552 - 0
src/views/tasks/components/hc-data/task-review copy.vue

@@ -0,0 +1,1552 @@
+<template>
+    <hc-new-dialog
+        v-model="isShow"
+        is-table
+        widths="96%"
+        title="任务审核"
+        @close="cancelClick"
+    >
+        <template #header="{ titleId, titleClass }">
+            <div class="hc-card-header flex items-center">
+                <div :id="titleId" :class="titleClass">
+                    任务审核 【已开启电签】
+                </div>
+            </div>
+        </template>
+        <div v-loading="isLoading" class="relative h-full">
+            <div class="hc-task-name relative">
+                {{ rowInfo.taskName }} 审批信息
+            </div>
+            <div class="hc-task-body relative flex">
+                <div class="hc-task-time">
+                    <hc-body class="hc-task-body-card" padding="10px" scrollbar>
+                        <el-timeline
+                            v-if="rowInfo.fixedFlowId == null"
+                            class="hc-time-line"
+                        >
+                            <template
+                                v-for="(item, index) in flowList"
+                                :key="index"
+                            >
+                                <el-timeline-item
+                                    :class="
+                                        item.status === '2'
+                                            ? 'success'
+                                            : 'primary'
+                                    "
+                                    size="large"
+                                >   
+                                    <div class="timeline-item-icon">
+                                        <hc-icon
+                                            v-if="item.status === '2'"
+                                            class="check-icon"
+                                            name="check"
+                                        />
+                                    </div>
+                                    <div class="reply-name">
+                                        {{ item.name }}
+                                    </div>
+                                    <div class="reply-time">
+                                        {{ item.date }}
+                                    </div>
+                                    <div
+                                        class="reply-content"
+                                        v-html="item.flowValue"
+                                    />
+                                </el-timeline-item>
+                            </template>
+                        </el-timeline>
+                        <el-timeline v-else class="hc-time-line">
+                            <template
+                                v-for="(item, index) in flowListTask"
+                                :key="index"
+                            >
+                                <el-timeline-item
+                                    :class="
+                                        item.status == '2'
+                                            ? 'success'
+                                            : 'primary'
+                                    "
+                                    size="large"
+                                >
+                                    <div class="timeline-item-icon">
+                                        <hc-icon
+                                            v-if="item.status == '2'"
+                                            class="check-icon"
+                                            name="check"
+                                        />
+                                    </div>
+                                    <div v-if="!item.isTask" class="reply-name">
+                                        {{ item.name }}
+                                    </div>
+                                    <div v-if="item.isTask">
+                                        <div class="reply-name">
+                                            {{ item.name }}
+                                            <hc-icon
+                                                v-if="item.type == 2"
+                                                name="links"
+                                                class="ml-2"
+                                            />
+                                            <hc-icon
+                                                v-if="item.type == 1"
+                                                name="exchange-2"
+                                                class="ml-2"
+                                            />
+                                            <br>
+                                            <el-tooltip
+                                                placement="right"
+                                                effect="light"
+                                                :visible="
+                                                    item.taskDetailvisible
+                                                "
+                                            >
+                                                <template #content>
+                                                    <el-timeline
+                                                        class="hc-time-line"
+                                                    >
+                                                        <template
+                                                            v-for="(
+                                                                item1, index1
+                                                            ) in item.userList"
+                                                            :key="index1"
+                                                        >
+                                                            <el-timeline-item
+                                                                :class="
+                                                                    item1.status
+                                                                        === '2'
+                                                                        ? 'success'
+                                                                        : 'primary'
+                                                                "
+                                                                size="large"
+                                                            >
+                                                                <div
+                                                                    class="timeline-item-icon"
+                                                                >
+                                                                    <hc-icon
+                                                                        v-if="
+                                                                            item1.status
+                                                                                === '2'
+                                                                        "
+                                                                        class="check-icon"
+                                                                        name="check"
+                                                                    />
+                                                                </div>
+                                                                <div
+                                                                    class="reply-name"
+                                                                >
+                                                                    {{
+                                                                        item1.name
+                                                                    }}
+                                                                </div>
+                                                                <div
+                                                                    class="reply-time"
+                                                                >
+                                                                    {{
+                                                                        item1.date
+                                                                    }}
+                                                                </div>
+                                                                <div
+                                                                    class="reply-content"
+                                                                    v-html="
+                                                                        item1.flowValue
+                                                                    "
+                                                                />
+                                                            </el-timeline-item>
+                                                        </template>
+                                                    </el-timeline>
+                                                </template>
+                                                <el-link
+                                                    @mouseenter="
+                                                        item.taskDetailvisible = true
+                                                    "
+                                                    @mouseleave="
+                                                        item.taskDetailvisible = false
+                                                    "
+                                                >
+                                                    点击查看详情
+                                                </el-link>
+                                            </el-tooltip>
+                                        </div>
+                                    </div>
+                                    <div class="reply-time">
+                                        {{ item.date }}
+                                    </div>
+                                    <div
+                                        class="reply-content"
+                                        v-html="item.flowValue"
+                                    />
+                                </el-timeline-item>
+                            </template>
+                        </el-timeline>
+                    </hc-body>
+                </div>
+                <div :id="`hc_task_table_${uuid}`" class="hc-task-table">
+                    <hc-body class="hc-task-body-card" padding="10px">
+                        <div class="hc-task-body-table">
+                            <hc-tab-card
+                                :tabs="tabsData"
+                                :tab-key="tabKey"
+                                @change="tabsChange"
+                            >
+                                <hc-table
+                                    v-if="tabKey === '1'"
+                                    ref="tableRef"
+                                    :column="tableColumn"
+                                    :datas="tableData"
+                                    :is-stripe="false"
+                                    is-new
+                                    :index-style="{ width: 60 }"
+                                    is-current-row
+                                    @row-click="tableRowClick"
+                                >
+                                    <template #action="{ row }">
+                                        <div
+                                            class="hc-task-table-action"
+                                            :class="
+                                                row.isComment === 1
+                                                    ? 'is-cur'
+                                                    : ''
+                                            "
+                                            @click="rowRemarkClick(row)"
+                                        >
+                                            <i class="i-iconoir-star-solid" />
+                                        </div>
+                                    </template>
+                                    <template #state="{ row }">
+                                        <div class="hc-task-table-state">
+                                            <i
+                                                v-if="row.status === 1"
+                                                class="is-success i-iconoir-check-circle-solid"
+                                            />
+                                            <i
+                                                v-else-if="row.status === 2"
+                                                class="is-danger i-iconoir-xmark-circle-solid"
+                                            />
+                                            <span v-else-if="row.status === 3">审批结束</span>
+                                            <i
+                                                v-else
+                                                class="i-iconoir-help-circle-solid"
+                                            />
+                                        </div>
+                                    </template>
+                                </hc-table>
+                                <div
+                                    v-if="tabKey === '2'"
+                                    class="hc-task-body-table-form"
+                                >
+                                    <template
+                                        v-if="
+                                            rowInfo.meterType === 1
+                                                || rowInfo.meterType === 3
+                                        "
+                                    >
+                                        <div class="title-box">
+                                            <div
+                                                v-if="
+                                                    meterApproveOpinion1.projectName
+                                                "
+                                                class="title"
+                                            >
+                                                {{
+                                                    meterApproveOpinion1.projectName
+                                                }}
+                                            </div>
+                                            <div class="text">审批意见</div>
+                                        </div>
+                                        <!--
+                                        <div class="name">计量工程师意见:</div>
+                                        <div v-if="meterApproveOpinion1.meterEngineer" class="text-box hc-bt-0">
+                                            <div class="content">{{ meterApproveOpinion1.meterEngineer }}</div>
+                                            <div v-if="meterApproveOpinion1.meterEngineerUserName" class="sign-name">
+                                                <div class="user-name">工程部:{{ meterApproveOpinion1.meterEngineerUserName }}</div>
+                                                <div class="user-time">{{ meterApproveOpinion1.meterEngineerTime }}</div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input hc-bt-0">
+                                            <el-input v-model="meterApproveOpinion2.meterEngineer" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
+                                        </div>
+
+                                        <div class="name hc-bt-0">项目经理意见:</div>
+                                        <div v-if="meterApproveOpinion1.projectManager" class="text-box hc-bt-0">
+                                            <div class="content">{{ meterApproveOpinion1.projectManager }}</div>
+                                            <div v-if="meterApproveOpinion1.projectManagerUserName" class="sign-name">
+                                                <div class="user-name">工程部:{{ meterApproveOpinion1.projectManagerUserName }}</div>
+                                                <div class="user-time">{{ meterApproveOpinion1.projectManagerTime }}</div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input hc-bt-0">
+                                            <el-input v-model="meterApproveOpinion2.projectManager" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
+                                        </div>
+
+                                        <div class="name hc-bt-0">合同监理工程师意见:</div>
+                                        <div v-if="meterApproveOpinion1.contractSupervisorEngineer" class="text-box hc-bt-0">
+                                            <div class="content">{{ meterApproveOpinion1.contractSupervisorEngineer }}</div>
+                                            <div v-if="meterApproveOpinion1.contractSupervisorEngineerUserName" class="sign-name">
+                                                <div class="user-name">工程部:{{ meterApproveOpinion1.contractSupervisorEngineerUserName }}</div>
+                                                <div class="user-time">{{ meterApproveOpinion1.contractSupervisorEngineerTime }}</div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input hc-bt-0">
+                                            <el-input v-model="meterApproveOpinion2.contractSupervisorEngineer" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
+                                        </div>
+
+                                        <div class="name hc-bt-0">业主代表意见:</div>
+                                        <div v-if="meterApproveOpinion1.ownerDelegate" class="text-box hc-bt-0">
+                                            <div class="content">{{ meterApproveOpinion1.ownerDelegate }}</div>
+                                            <div v-if="meterApproveOpinion1.ownerDelegateUserName" class="sign-name">
+                                                <div class="user-name">工程部:{{ meterApproveOpinion1.ownerDelegateUserName }}</div>
+                                                <div class="user-time">{{ meterApproveOpinion1.ownerDelegateTime }}</div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input hc-bt-0">
+                                            <el-input v-model="meterApproveOpinion2.ownerDelegate" :autosize="{ minRows: 2, maxRows: 4 }" type="textarea" />
+                                        </div>
+                                        -->
+
+                                        <div class="name">
+                                            总监理工程师意见:
+                                        </div>
+                                        <div
+                                            v-if="
+                                                meterApproveOpinion1.chiefSupervisor
+                                                  
+                                            "
+                                            class="hc-bt-0 text-box"
+                                        >
+                                            <div class="content">
+                                                {{
+                                                    meterApproveOpinion1.chiefSupervisor
+                                                }}
+                                            </div>
+                                            <div
+                                                v-if="
+                                                    meterApproveOpinion1.chiefSupervisorUserName
+                                                "
+                                                class="sign-name"
+                                            >
+                                                <div class="user-name">
+                                                    {{
+                                                        meterApproveOpinion1.chiefSupervisorUserName
+                                                    }}
+                                                </div>
+                                                <div class="user-time">
+                                                    {{
+                                                        meterApproveOpinion1.chiefSupervisorTime
+                                                    }}
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="hc-bt-0 input">
+                                            <el-input
+                                                v-model="
+                                                    meterApproveOpinion2.chiefSupervisor
+                                                "
+                                                :autosize="{
+                                                    minRows: 2,
+                                                    maxRows: 4,
+                                                }"
+                                                type="textarea"
+                                            />
+                                        </div>
+
+                                        <template
+                                            v-if="rowInfo.meterType === 3"
+                                        >
+                                            <div class="name hc-bt-0">
+                                                监理审核意见:
+                                            </div>
+                                            <div
+                                                v-if="
+                                                    meterApproveOpinion1.supervisorAudit
+                                                        && !meterApproveOpinion1.supervisorAuditDefault
+                                                "
+                                                class="text-box hc-bt-0"
+                                            >
+                                                <div class="content">
+                                                    {{
+                                                        meterApproveOpinion1.supervisorAudit
+                                                    }}
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.supervisorAuditUserName
+                                                    "
+                                                    class="sign-name"
+                                                >
+                                                    <div class="user-name">
+                                                        {{
+                                                            meterApproveOpinion1.supervisorAuditUserName
+                                                        }}
+                                                    </div>
+                                                    <div class="user-time">
+                                                        {{
+                                                            meterApproveOpinion1.supervisorAuditTime
+                                                        }}
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div v-else class="input hc-bt-0 textarea-container">
+                                                <el-input
+                                                    v-model="
+                                                        meterApproveOpinion2.supervisorAudit
+                                                    "
+                                                    :autosize="{
+                                                        minRows: 2,
+                                                        maxRows: 4,
+                                                    }"
+                                                    type="textarea"
+                                                />
+                                                <div v-if="!meterApproveOpinion1.supervisorAuditDefault" class="suffix-icon">
+                                                    <span>(不填写默认为拟同意)</span>
+                                                </div>
+                                            </div>
+                                        </template>
+
+                                        <div class="input-box">
+                                            <div class="box">
+                                                <div class="name hc-bt-0">
+                                                    工程建设部意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.projectBuild
+                                                            && !meterApproveOpinion1.projectBuildDefault
+                                                    "
+                                                    class="text-box hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.projectBuild
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.projectBuildUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.projectBuildUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.projectBuildTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.projectBuild
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.projectBuildDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="box">
+                                                <div class="name hc-bt-0 no-b">
+                                                    分管领导意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.projectBuildLeader
+                                                            && !meterApproveOpinion1.projectBuildLeaderDefault
+                                                    "
+                                                    class="text-box no-b hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.projectBuildLeader
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.projectBuildLeaderUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.projectBuildLeaderUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.projectBuildLeaderTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input no-b hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.projectBuildLeader
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.projectBuildLeaderDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div
+                                            v-if="rowInfo.meterType === 1"
+                                            class="input-box"
+                                        >
+                                            <div class="box">
+                                                <div class="name hc-bt-0">
+                                                    安全管理部意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.safetyManager
+                                                            && !meterApproveOpinion1.safetyManagerDefault
+                                                    "
+                                                    class="text-box hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.safetyManager
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.safetyManagerUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.safetyManagerUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.safetyManagerTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.safetyManager
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.safetyManagerDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="box">
+                                                <div class="name no-b hc-bt-0">
+                                                    分管领导意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.safetyManagerLeader
+                                                            && !meterApproveOpinion1.safetyManagerLeaderDefault
+                                                    "
+                                                    class="text-box no-b hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.safetyManagerLeader
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.safetyManagerLeaderUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.safetyManagerLeaderUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.safetyManagerLeaderTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input no-b hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.safetyManagerLeader
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.safetyManagerLeaderDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="input-box">
+                                            <div class="box">
+                                                <div class="name hc-bt-0">
+                                                    合同部意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.contractDept
+                                                            && !meterApproveOpinion1.contractDeptDefault
+                                                    "
+                                                    class="text-box hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.contractDept
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.contractDeptUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.contractDeptUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.contractDeptTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.contractDept
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.contractDeptDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="box">
+                                                <div class="name no-b hc-bt-0">
+                                                    分管领导意见:
+                                                </div>
+                                                <div
+                                                    v-if="
+                                                        meterApproveOpinion1.contractDeptLeader
+                                                            && !meterApproveOpinion1.contractDeptLeaderDefault
+                                                    "
+                                                    class="text-box no-b hc-bt-0"
+                                                >
+                                                    <div class="content">
+                                                        {{
+                                                            meterApproveOpinion1.contractDeptLeader
+                                                        }}
+                                                    </div>
+                                                    <div
+                                                        v-if="
+                                                            meterApproveOpinion1.contractDeptLeaderUserName
+                                                        "
+                                                        class="sign-name"
+                                                    >
+                                                        <div class="user-name">
+                                                            {{
+                                                                meterApproveOpinion1.contractDeptLeaderUserName
+                                                            }}
+                                                        </div>
+                                                        <div class="user-time">
+                                                            {{
+                                                                meterApproveOpinion1.contractDeptLeaderTime
+                                                            }}
+                                                        </div>
+                                                    </div>
+                                                </div>
+                                                <div
+                                                    v-else
+                                                    class="input no-b hc-bt-0 textarea-container"
+                                                >
+                                                    <el-input
+                                                        v-model="
+                                                            meterApproveOpinion2.contractDeptLeader
+                                                        "
+                                                        :autosize="{
+                                                            minRows: 2,
+                                                            maxRows: 4,
+                                                        }"
+                                                        type="textarea"
+                                                    />
+                                                    <div v-if="!meterApproveOpinion1.contractDeptLeaderDefault" class="suffix-icon">
+                                                        <span>(不填写默认为拟同意)</span>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                        </div>
+
+                                        <div class="name hc-bt-0">
+                                            总经理意见:
+                                        </div>
+                                        <div
+                                            v-if="
+                                                meterApproveOpinion1.generalManager
+                                                    && !meterApproveOpinion1.generalManagerDefault
+                                            "
+                                            class="text-box no-b hc-bt-0"
+                                        >
+                                            <div class="content">
+                                                {{
+                                                    meterApproveOpinion1.generalManager
+                                                }}
+                                            </div>
+                                            <div
+                                                v-if="
+                                                    meterApproveOpinion1.generalManagerUserName
+                                                "
+                                                class="sign-name"
+                                            >
+                                                <div class="user-name">
+                                                    {{
+                                                        meterApproveOpinion1.generalManagerUserName
+                                                    }}
+                                                </div>
+                                                <div class="user-time">
+                                                    {{
+                                                        meterApproveOpinion1.generalManagerTime
+                                                    }}
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input hc-bt-0 textarea-container">
+                                            <el-input
+                                                v-model="
+                                                    meterApproveOpinion2.generalManager
+                                                "
+                                                :autosize="{
+                                                    minRows: 2,
+                                                    maxRows: 4,
+                                                }"
+                                                type="textarea"
+                                            />
+                                            <div v-if="!meterApproveOpinion1.generalManagerDefault" class="suffix-icon">
+                                                <span>(不填写默认为拟同意)</span>
+                                            </div>
+                                        </div>
+
+                                        <div class="name no-b hc-bt-0">
+                                            董事长意见:   
+                                        </div>
+                                        <div
+                                            v-if="
+                                                meterApproveOpinion1.chiefExecutive
+                                                    && !meterApproveOpinion1.chiefExecutiveDefault
+                                            "
+                                            class="text-box no-b hc-bt-0"
+                                        >
+                                            <div class="content">
+                                                {{
+                                                    meterApproveOpinion1.chiefExecutive
+                                                }}
+                                            </div>
+                                            <div
+                                                v-if="
+                                                    meterApproveOpinion1.chiefExecutiveUserName
+                                                "
+                                                class="sign-name"
+                                            >
+                                                <div class="user-name">
+                                                    {{
+                                                        meterApproveOpinion1.chiefExecutiveUserName
+                                                    }}
+                                                </div>
+                                                <div class="user-time">
+                                                    {{
+                                                        meterApproveOpinion1.chiefExecutiveTime
+                                                    }}
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div v-else class="input no-b hc-bt-0 textarea-container">
+                                            <el-input
+                                                v-model="
+                                                    meterApproveOpinion2.chiefExecutive
+                                                "
+                                                :autosize="{
+                                                    minRows: 2,
+                                                    maxRows: 4,
+                                                }"
+                                                type="textarea"
+                                            />
+                                            <div v-if="!meterApproveOpinion1.chiefExecutiveDefault" class="suffix-icon">
+                                                <span>(不填写默认为同意)</span>
+                                            </div>
+                                        </div>
+                                    </template>
+                                    <template v-else>
+                                        <hc-empty />
+                                    </template>
+                                </div>
+                            </hc-tab-card>
+                        </div>
+                        <div
+                            v-if="!isNullES(detailInfo.opinionType)"
+                            class="hc-task-body-tip hc-flex h-30px"
+                        >
+                            <span class="mr-14px">实际支付总金额:{{ reportAllMoney }}元</span>
+                            <span v-if="detailInfo.opinionType != 4">本期审计审核进度款:{{ progressMoney }}元</span>
+                        </div>
+                    </hc-body>
+                </div>
+                <div
+                    :id="`hc_task_form_${uuid}`"
+                    class="hc-task-form"
+                    :class="`is-tab-${taskTabsKey}`"
+                >
+                    <hc-body class="hc-task-body-card" padding="10px" scrollbar>
+                        <HcTaskForm
+                            ref="htmlFormRef"
+                            :table="tableInfo"
+                            :info="rowInfo"
+                            :detail="detailInfo"
+                            :is-edit="tabsKey === 1"
+                            @finish="taskFormFinish"
+                            @tab-tap="taskTabsClick"
+                        />
+                    </hc-body>
+                </div>
+            </div>
+        </div>
+        <template #footer>
+            <div class="hc-task-dialog-footer">
+                <el-button :disabled="tabsKey !== 1" @click="rejectionClick">
+                    驳回审批
+                </el-button>
+                <el-button
+                    v-if="rowInfo.meterType > 0 && rowInfo.meterType <= 3"
+                    type="warning"
+                    :loading="rowViewLoading"
+                    @click="rowViewPdf"
+                >
+                    查看报表
+                </el-button>
+                <el-button
+                    type="primary"
+                    :loading="confirmLoading"
+                    :disabled="tabsKey !== 1"
+                    @click="confirmClick"
+                >
+                    同意审批
+                </el-button>
+            </div>
+        </template>
+    </hc-new-dialog>
+    <!-- 批注 -->
+    <HcTaskNotes
+        v-model="isNotesShow"
+        :table="tableNoteInfo"
+        :info="rowInfo"
+        :is-edit="tabsKey === 1"
+        @finish="taskNotesFinish"
+    />
+    <!-- 驳回 -->
+    <HcRepealForm
+        v-model="isRepealShow"
+        :info="rowInfo"
+        @finish="taskRepealFinish"
+    />
+    <!-- 短信认证 -->
+    <HcSmsAuth
+        :loading="SMSAuthLoading"
+        :show="SMSAuthShow"
+        @cancel="SMSAuthCancel"
+        @confirm="SMSAuthConfirm"
+    />
+</template>
+
+<script setup>
+import { nextTick, ref, watch } from 'vue'
+import { useAppStore } from '~src/store'
+import { toPdfPage } from '~uti/btn-auth'
+import HcTaskForm from './task-form.vue'
+import HcTaskNotes from './task-notes.vue'
+import HcRepealForm from './repeal-form.vue'
+import {
+    arrUnion,
+    deepClone,
+    getArrValue,
+    getObjValue,
+    getRandom,
+    isNullES,
+} from 'js-fast-way'
+import mainApi from '~api/tasks/hc-data'
+import dayjs from 'dayjs'
+
+const props = defineProps({
+    tabs: {
+        type: [String, Number],
+        default: '',
+    },
+    row: {
+        type: Object,
+        default: () => ({}),
+    },
+})
+
+//事件
+const emit = defineEmits(['finish', 'close'])
+const uuid = getRandom(4)
+
+const useAppState = useAppStore()
+const projectId = ref(useAppState.getProjectId || '')
+const contractId = ref(useAppState.getContractId || '')
+
+//双向绑定
+// eslint-disable-next-line no-undef
+const isShow = defineModel('modelValue', {
+    default: false,
+})
+
+//监听
+const tableRef = ref(null)
+const tabsKey = ref(Number(props.tabs))
+const rowInfo = ref(props.row)
+
+const isOverTask = ref(false)//是否结束任务
+
+watch(
+    () => [props.tabs, props.row],
+    ([key, row]) => {
+        tabsKey.value = Number(key)
+        rowInfo.value = row
+        const { taskStatusName } = rowInfo.value
+        isOverTask.value = taskStatusName === '已审批'
+    
+   
+        
+
+   
+        
+    },
+    {
+        immediate: true,
+        deep: true,
+    },
+)
+
+//监听显示
+watch(isShow, (val) => {
+    if (val) {
+        checkSmsCode()
+        setTaskInfo()
+        setSplitRef()
+    }
+})
+
+//初始化设置拖动分割线
+const setSplitRef = () => {
+    //配置参考: https://split.js.org/#/?direction=vertical&snapOffset=0
+    nextTick(() => {
+        window.$split(['#hc_task_table_' + uuid, '#hc_task_form_' + uuid], {
+            sizes: [50, 50],
+            snapOffset: 0,
+            minSize: [50, 500],
+        })
+    })
+}
+
+//设置任务信息
+const setTaskInfo = () => {
+    //meterType:1中间,2材料,3开工,4变更令
+    const { meterType } = rowInfo.value
+    if (meterType === 1) {
+        tableColumn.value = middlepayTableColumn.value
+    } else if (meterType === 2) {
+        tableColumn.value = materialTableColumn.value
+    } else if (meterType === 3) {
+        tableColumn.value = startWorkTableColumn.value
+    } else if (meterType === 4) {
+        tableColumn.value = alterTableColumn.value
+    } else {
+        tableColumn.value = []
+    }
+    getTableDetail()
+}
+
+//获取数据详情
+const detailInfo = ref({})
+const reportAllMoney = ref('0')
+const progressMoney = ref('0')
+const meterApproveOpinion1 = ref({})
+const meterApproveOpinion2 = ref({})
+const isLoading = ref(false)
+
+const getTableDetail = async () => {
+    isLoading.value = true
+    confirmLoading.value = true
+    //获取数据
+    const { data } = await mainApi.getDetail(rowInfo.value.id)
+    const infoData = getObjValue(data)
+    const { taskProcessInfo, taskCenterDataInfo } = infoData
+    tableData.value = getArrValue(taskCenterDataInfo)
+    flowList.value = getArrValue(taskProcessInfo)
+    reportAllMoney.value = infoData.reportAllMoney
+    progressMoney.value = infoData.progressMoney
+    detailInfo.value = infoData
+    if (rowInfo.value?.fixedFlowId) {
+        const list = [...flowList.value]
+        let firstarr = list.slice(0, 1)
+        let taskList = list.slice(1, list.length)
+        taskList.forEach((ele) => {
+            ele.name = ele.taskBranchName
+            ele.status = ele.taskBranchStatus
+            ele.type = ele.taskBranchType
+            ele.isTask = true
+        })
+        flowListTask.value = arrUnion(firstarr, taskList)
+        
+    }
+    //意见信息
+    const meterRes = getObjValue(data.meterApproveOpinion)
+    meterApproveOpinion2.value = deepClone(meterRes)
+    meterApproveOpinion1.value = meterRes
+
+    if (isOverTask.value) {
+          //设置默认值
+        setDefaultOpinion()
+    }
+  
+
+    //默认选中第一行
+    let info = {}
+    if (tableData.value.length > 0) {
+        info = tableData.value[0]
+    }
+    await nextTick(() => {
+        tableInfo.value = info
+        tableRef.value?.tableRef?.setCurrentRow(info)
+    })
+    //关闭加载状态
+    isLoading.value = false
+    confirmLoading.value = false
+}
+const setDefaultValue = (field, defaultOpinion) => {
+    if (isNullES(meterApproveOpinion1.value[field])) {
+        meterApproveOpinion2.value[field] = defaultOpinion
+        meterApproveOpinion1.value[`${field}Default`] = true
+    } else if (meterApproveOpinion1.value[field] === defaultOpinion) {
+        meterApproveOpinion1.value[`${field}Default`] = true
+    } else {
+        meterApproveOpinion1.value[`${field}Default`] = false
+    }
+}
+
+const setDefaultOpinion = () => {
+    const defaultOpinion = '拟同意'
+    //setDefaultValue('chiefSupervisor', defaultOpinion)
+    setDefaultValue('supervisorAudit', defaultOpinion)
+    setDefaultValue('projectBuild', defaultOpinion)
+    setDefaultValue('projectBuildLeader', defaultOpinion)
+    setDefaultValue('safetyManager', defaultOpinion)
+    setDefaultValue('safetyManagerLeader', defaultOpinion)
+    setDefaultValue('contractDept', defaultOpinion)
+    setDefaultValue('contractDeptLeader', defaultOpinion)
+    setDefaultValue('generalManager', defaultOpinion)
+
+    // 注意:这里修改为了与其他默认意见一致
+    setDefaultValue('chiefExecutive', '同意')
+}
+
+//流程信息,1待审批,2已审批
+const flowList = ref([])
+//type为1流程审批,type为2是平行审批
+const flowListTask = ref([
+    {
+        name: 'PCT',
+        date: '2024-03-01 09:27:17',
+        status: '2',
+        flowValue: '上报',
+        isTask: false,
+    },
+    {
+        name: '"222"',
+        date: '',
+        status: '2',
+        flowValue: '',
+        type: 1,
+        isTask: true,
+    },
+    {
+        name: '"111"',
+        date: '',
+        status: '1',
+        flowValue: '',
+        type: 2,
+        isTask: true,
+    },
+])
+const taskDetailList = ref([])
+
+//中间计量单的表格数据
+const middlepayTableColumn = ref([
+    { key: 'action', name: '批注', width: 45, align: 'center' },
+    { key: 'meterNumber', name: '计量单编号' },
+    { key: 'meterMoney', name: '计量金额', width: 100 },
+    { key: 'engineerDivide', name: '工程划分' },
+    {
+        key: 'state',
+        name: '审批状态',
+        fixed: 'right',
+        width: 70,
+        align: 'center',
+    },
+])
+//开工预付款计量单的表格数据
+const startWorkTableColumn = ref([
+    { key: 'action', name: '批注', width: 45, align: 'center' },
+    { key: 'periodName', name: '计量期', minWidth: 100, align: 'center' },
+    { key: 'businessDate', name: '业务日期', width: 160, align: 'center' },
+    { key: 'meterMoney', name: '计量金额', width: 100, align: 'center' },
+    {
+        key: 'state',
+        name: '审批状态',
+        fixed: 'right',
+        width: 70,
+        align: 'center',
+    },
+])
+//变更令的表格数据
+const alterTableColumn = ref([
+    { key: 'action', name: '批注', width: 45, align: 'center' },
+    { key: 'changeNumber', name: '变更编号', minWidth: 120, align: 'center' },
+    { key: 'changeName', name: '变更名称', minWidth: 120, align: 'center' },
+    { key: 'changeMoney', name: '变更金额', width: 100, align: 'center' },
+    {
+        key: 'changeApprovalDate',
+        name: '变更批复日期',
+        width: 160,
+        align: 'center',
+    },
+    {
+        key: 'state',
+        name: '审批状态',
+        fixed: 'right',
+        width: 70,
+        align: 'center',
+    },
+])
+//材料计量单的表格数据
+const materialTableColumn = ref([
+    { key: 'action', name: '批注', width: 45, align: 'center' },
+    { key: 'periodName', name: '计量期', minWidth: 100, align: 'center' },
+    {
+        key: 'contractMaterialName',
+        name: '合同材料',
+        minWidth: 120,
+        align: 'center',
+    },
+    {
+        key: 'materialArriveNumber',
+        name: '材料到场编号',
+        width: 120,
+        align: 'center',
+    },
+    { key: 'meterMoney', name: '计量金额', width: 100, align: 'center' },
+    {
+        key: 'state',
+        name: '审批状态',
+        fixed: 'right',
+        width: 70,
+        align: 'center',
+    },
+])
+
+//表格数据
+const tableColumn = ref([])
+const tableData = ref([])
+
+//表格行被点击
+const tableInfo = ref({})
+const tableRowClick = ({ row }) => {
+    tableInfo.value = row
+}
+
+//批注, isComment 是否已批注,1=是,0=否
+const isNotesShow = ref(false)
+const tableNoteInfo = ref({})
+const rowRemarkClick = (row) => {
+    tableNoteInfo.value = row
+    nextTick(() => {
+        isNotesShow.value = true
+    })
+}
+
+//批注完成
+const taskNotesFinish = () => {
+    getTableDetail()
+}
+
+//单条审批
+const taskFormFinish = () => {
+    getTableDetail()
+}
+
+//确认审批
+const confirmLoading = ref(false)
+const confirmClick = () => {
+    const ShowAuth = isCheckSmsCodeTime()
+    SMSAuthShow.value = ShowAuth
+    //免短信验证
+    if (!ShowAuth) SMSAuthConfirm()
+}
+
+//驳回审批
+const isRepealShow = ref(false)
+const rejectionClick = async () => {
+    isRepealShow.value = true
+}
+
+//驳回完成
+const taskRepealFinish = () => {
+    emit('finish')
+    cancelClick()
+}
+
+//取消审批
+const cancelClick = () => {
+    isShow.value = false
+    isLoading.value = false
+    confirmLoading.value = false
+    tableColumn.value = []
+    tableData.value = []
+    tableInfo.value = {}
+    emit('close')
+}
+
+//短信验证有效期
+const smsCodeTime = ref('')
+const checkSmsCode = async () => {
+    const { data } = await mainApi.checkSmsCode()
+    smsCodeTime.value = data ? data : ''
+}
+
+//验证短信有效期
+const isCheckSmsCodeTime = () => {
+    const smsTime = smsCodeTime.value
+    if (isNullES(smsTime)) {
+        return true
+    } else {
+        const toDayTime = dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')
+        return dayjs(smsTime).isBefore(toDayTime)
+    }
+}
+
+//短信验证
+const SMSAuthLoading = ref(false)
+const SMSAuthShow = ref(false)
+const htmlFormRef = ref(null)
+const SMSAuthConfirm = async () => {
+    confirmLoading.value = true
+    const tableData = htmlFormRef.value?.getTableForm()
+    const { error, code, msg } = await mainApi.taskApprove({
+        tableData: tableData,
+        taskId: rowInfo.value.id,
+        projectId: projectId.value,
+        contractId: contractId.value,
+        meterApproveOpinion: meterApproveOpinion2.value,
+    })
+    if (!error && code === 200) {
+        window.$message.success('审批成功')
+        await checkSmsCode()
+        confirmLoading.value = false
+        emit('finish')
+        SMSAuthCancel()
+        cancelClick()
+    } else {
+        confirmLoading.value = false
+        window.$message.error(msg ?? '审批失败')
+    }
+}
+const SMSAuthCancel = () => {
+    SMSAuthShow.value = false
+}
+
+//选项卡被切换
+const taskTabsKey = ref('key1')
+const taskTabsClick = (key) => {
+    taskTabsKey.value = key
+}
+
+//查看报表
+const rowViewLoading = ref(false)
+const rowViewPdf = async () => {
+    const { type, reportId } = detailInfo.value
+    if (isNullES(reportId)) {
+        window.$message.warning('参数异常')
+        return
+    }
+    rowViewLoading.value = true
+    const { code, msg, data } = await mainApi.taskMeterPdfInfo({
+        reportId: reportId,
+        type: type,
+        taskType: 10,
+        taskId: rowInfo.value.id,
+    })
+    rowViewLoading.value = false
+    if (code === 200 && !isNullES(data)) {
+        window.$message.success('操作成功')
+        toPdfPage(data)
+    } else {
+        window.$message.error(msg ?? '操作失败')
+    }
+}
+
+//选项卡
+const tabKey = ref('1')
+const tabsData = [
+    { key: '2', name: '意见信息' },
+    { key: '1', name: '计量单信息' },
+]
+const tabsChange = ({ key }) => {
+    tabKey.value = key
+}
+</script>
+
+<style lang="scss" scoped>
+.textarea-container {
+  position: relative;
+}
+
+.suffix-icon {
+  position: absolute;
+  bottom: 8px;
+  right: 10px;
+  font-size: 14px;
+  color: #888;
+}
+.hc-task-name {
+    font-weight: bold;
+    color: #1a1a1a;
+    padding-bottom: 10px;
+    border-bottom: 1px solid #f5f5f5;
+}
+.hc-task-body {
+    height: calc(100% - 27px);
+    .hc-task-time {
+        position: relative;
+        height: 100%;
+        flex-shrink: 0;
+        width: 170px;
+    }
+    .hc-task-table,
+    .hc-task-form {
+        position: relative;
+        height: 100%;
+        flex: 1;
+        flex-basis: auto;
+    }
+    .hc-task-table {
+        border-left: 1px solid #e5e5e5;
+    }
+}
+
+//表格图标
+.hc-task-table-action,
+.hc-task-table-state {
+    position: relative;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    font-size: 20px;
+    color: #929293;
+    i {
+        display: inline-flex;
+    }
+}
+
+//表格批注
+.hc-task-table-action.is-cur {
+    color: #f2b90b;
+}
+
+//表格状态
+.hc-task-table-state {
+    .is-success {
+        color: #25a62d;
+    }
+    .is-danger {
+        color: #f5221d;
+    }
+    span {
+        color: #1a1a1a;
+    }
+}
+
+//弹窗底部
+.hc-task-dialog-footer {
+    position: relative;
+    text-align: center;
+}
+</style>
+
+<style lang="scss">
+.hc-task-body-card {
+    background: #f7f7f7;
+    .el-scrollbar__bar.is-vertical {
+        right: -8px;
+    }
+    .hc-task-body-table {
+        position: relative;
+        height: calc(100% - 30px);
+        .hc-task-body-table-form {
+            position: relative;
+            height: 100%;
+            overflow: auto;
+            .title-box {
+                position: relative;
+                text-align: center;
+                margin-bottom: 10px;
+                .title {
+                    font-size: 18px;
+                    margin-bottom: 20px;
+                }
+                .text {
+                    font-size: 15px;
+                }
+            }
+            .text-box {
+                position: relative;
+                border: 1px solid #4b4b4b;
+                padding: 8px 3px;
+                display: flex;
+                align-items: center;
+                font-size: 12px;
+                .content {
+                    position: relative;
+                    flex: 1;
+                    padding-right: 20px;
+                }
+                .sign-name {
+                    position: relative;
+                    .user-time {
+                        margin-top: 10px;
+                    }
+                }
+            }
+            .name {
+                position: relative;
+                display: flex;
+                align-items: center;
+                font-size: 13px;
+                border: 1px solid #4b4b4b;
+                background: #eef3f7;
+                padding: 8px 3px;
+            }
+            .input {
+                position: relative;
+                border: 1px solid #4b4b4b;
+                padding: 2px;
+            }
+            .input-box {
+                position: relative;
+                display: flex;
+                .box {
+                    position: relative;
+                    flex: 1;
+                    display: flex;
+                    flex-direction: column;
+                    .name {
+                        flex-shrink: 0;
+                    }
+                    .text-box {
+                        flex: 1;
+                        flex-basis: auto;
+                    }
+                }
+                .no-b {
+                    border-left: 0;
+                }
+            }
+            .hc-bt-0 {
+                border-top: 0;
+            }
+            .hc-bb-0 {
+                border-bottom: 0;
+            }
+        }
+    }
+    .hc-task-body-tip {
+        color: red;
+    }
+}
+//html表单模式
+.hc-task-body .hc-task-form.is-tab-key3 .hc-task-body-card {
+    .el-scrollbar__view {
+        height: 100%;
+    }
+    .hc-task-form-body {
+        height: 100%;
+        .el-tabs {
+            height: 100%;
+            .el-tabs__content {
+                height: calc(100% - 39px);
+                #pane-key3 {
+                    height: 100%;
+                }
+            }
+        }
+    }
+    .hc-task-html-form-body {
+        height: 100%;
+        .hc-table-form-data-item .el-scrollbar__view {
+            height: auto;
+        }
+    }
+}
+</style>