吉安感知网项目-前端
chenyao
2026-01-28 bcb34e720eb55bc1f9d03d4b4bca557a4b93d4e5
applications/task-work-order/src/views/orderView/orderDataManage/supplyAdd/ApplyViewDialog.vue
@@ -1,5 +1,5 @@
<template>
   <el-dialog class="gd-dialog" v-model="visible" :title="'查看申请'" @closed="visible = false" destroy-on-close>
   <el-dialog class="gd-dialog" :close-on-click-modal="false" v-model="visible" :title="'查看'" @closed="visible = false" destroy-on-close>
      <div class="detail-container">
         <!-- 左侧审批记录 -->
         <div class="detail-left">
@@ -9,81 +9,67 @@
         <div class="detail-right">
            <!--            拒绝申请-->
            <div class="reject-reason-container" v-if="detailDemandStatus === '3'">
               <div class="label">拒绝原因</div>
               <div class="detail-title">拒绝原因</div>
               <div class="reject-reason">
                  {{reasonForRejection}}
               </div>
            </div>
            <div>
               <div class="label">需求详情</div>
               <div class="requirementsDetailsBox">
                  <div class="detail-table">
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">需求名称</span>
                           <span class="cell-value">{{ formData.demandName }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">需求类型</span>
                           <span class="cell-value">{{ getDictLabel(formData.demandType, dictObj.requirementType) }}</span>
                        </div>
                     </div>
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">需求联系人</span>
                           <span class="cell-value">{{ formData.contactPerson }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">需求联系人电话</span>
                           <span class="cell-value">{{ formData.contactPhone }}</span>
                        </div>
                     </div>
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">需求邮箱</span>
                           <span class="cell-value">{{ formData.contactEmail }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">更新周期</span>
                           <span class="cell-value">{{ formData.updateCycle }}</span>
                        </div>
                     </div>
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">申请依据</span>
                           <span class="cell-value">{{ formData.applyBasis }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">共享类型</span>
                           <span class="cell-value">{{ getDictLabel(formData.shareType, dictObj.sharedType) }}</span>
                        </div>
                     </div>
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">应用场景类型</span>
                           <span class="cell-value">{{ getDictLabel(formData.applicationScene, dictObj.appSceneType) }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">责任部门</span>
                           <span class="cell-value">{{ formData.responsibleDeptName }}</span>
                        </div>
                     </div>
                     <div class="detail-row">
                        <div class="detail-cell">
                           <span class="cell-label">数据来源依据</span>
                           <span class="cell-value">{{ formData.dataSource }}</span>
                        </div>
                        <div class="detail-cell">
                           <span class="cell-label">需求信息项</span>
                           <span class="cell-value">{{ formData.demandInfo }}</span>
                        </div>
                     </div>
                  </div>
               </div>
               <div class="detail-title">需求详情</div>
            <el-row class="detail-row-view">
                     <el-col :span="12">
                        <div class="label">需求名称</div>
                        <div class="val">{{ formData.demandName }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">需求类型</div>
                        <div class="val">{{ getDictLabel(formData.demandType, dictObj.requirementType) }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">需求联系人</div>
                        <div class="val">{{ formData.contactPerson }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label" >需求联系人电话</div>
                        <div class="val">{{ formData.contactPhone }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">需求邮箱</div>
                        <div class="val">{{ formData.contactEmail }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">更新周期</div>
                        <div class="val">{{ formData.updateCycle }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">申请依据</div>
                        <div class="val">{{ formData.applyBasis }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">共享类型</div>
                        <div class="val">{{ getDictLabel(formData.shareType, dictObj.sharedType) }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">应用场景类型</div>
                        <div class="val">{{ getDictLabel(formData.applicationScene, dictObj.appSceneType) }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">责任部门</div>
                        <div class="val">{{ formData.responsibleDeptName }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">数据来源依据</div>
                        <div class="val">{{ formData.dataSource }}</div>
                     </el-col>
                     <el-col :span="12">
                        <div class="label">需求信息项</div>
                        <div class="val">{{ formData.demandInfo }}</div>
                     </el-col>
                  </el-row>
            </div>
            <!--            申请中-->
            <div v-if="detailDemandStatus === '1'">
               <div class="label">数据上传</div>
            <div v-if="detailDemandStatus === '1' && !requesterProvider">
               <div class="detail-title">数据上传</div>
               <div class="upload-container">
                  <el-upload
                  :http-request="handleHttpRequest"
@@ -106,8 +92,8 @@
               </div>
            </div>
            <div v-if="detailDemandStatus === '2'">
               <div class="label">数据详情</div>
               <el-table :data="tableData" border style="width: 100%">
               <div class="detail-title" :style="{ marginTop:pxToRem(20)}">数据详情</div>
               <el-table :data="tableData"  style="width: 100%">
                  <el-table-column prop="fileOriginalName" label="文件名称" />
                  <el-table-column prop="fileSize" label="文件大小" />
                  <el-table-column fixed="right" label="操作" min-width="100">
@@ -120,15 +106,15 @@
         </div>
      </div>
      <template #footer>
         <template v-if="detailDemandStatus === '1'">
            <el-button class="save-btn" color="#4C34FF" @click="rejectTheApplication">拒绝申请</el-button>
            <el-button color="#F2F3F5" @click="approvedByTheReview">审核通过</el-button>
         <template v-if="detailDemandStatus === '1' && !requesterProvider">
            <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="rejectTheApplication">拒绝申请</el-button>
            <el-button class="" color="#4C34FF" :loading="submitting" :disabled="submitting" @click="approvedByTheReview">审核通过</el-button>
         </template>
         <template v-if="detailDemandStatus === '2'">
            <el-button class="save-btn" color="#4C34FF" @click="downloadAllFiles">全部下载</el-button>
            <el-button class="" color="#4C34FF" @click="downloadAllFiles">全部下载</el-button>
         </template>
         <template v-if="detailDemandStatus === '3'">
            <el-button class="save-btn" color="#4C34FF" @click="visible =false">关闭</el-button>
            <el-button class="" color="#4C34FF" @click="visible =false">关闭</el-button>
         </template>
      </template>
   </el-dialog>
@@ -142,6 +128,7 @@
</template>
<script setup>
import { pxToRem } from '@/utils/rem'
import { getDictLabel } from '@ztzf/utils'
import {
   gdSupplyDemandDetailApi,
@@ -153,7 +140,9 @@
import { ElMessage } from 'element-plus'
import reasonForRejectionDialog from '@/views/orderView/orderDataManage/supplyAdd/reasonForRejectionDialog.vue'
import AuditRecord from '@/views/orderView/orderDataManage/supplyAdd/auditRecord.vue' // 导入新组件
import { useStore } from 'vuex'
const store = useStore()
const requesterProvider = computed(() => store.state.user.userInfo?.role_id === '2014158512610869250')
const emit = defineEmits(['success'])
const dictObj = inject('dictObj')
const deptTree = inject('deptTree')
@@ -165,6 +154,7 @@
const fileList = ref([]) // 上传文件列表
const uploadedFiles = ref([]) // 已上传文件列表
const responseData = ref(null)
const submitting = ref(false) // 提交中状态
// 自定义上传请求函数
const handleHttpRequest = async (options) => {
   try {
@@ -193,10 +183,7 @@
const tableData = ref([]) // 附件表格数据
// 文件移除
const handleFileRemove = (file, fileList) => {
   // 从已上传文件列表中移除对应文件
   if (file.response && file.response.attachId) {
      uploadedFiles.value = uploadedFiles.value.filter(item => item.attachId !== file.response.attachId)
   }
uploadedFiles.value = fileList
   // 清空响应数据
   if (responseData.value && responseData.value.attachId === file.response?.attachId) {
      responseData.value = null
@@ -388,9 +375,9 @@
// 拒绝申请
const rejectTheApplication = () => {
   if (uploadedFiles.value.length === 0) {
      return ElMessage.warning('请上传数据')
   }
   // if (uploadedFiles.value.length === 0) {
   //    return ElMessage.warning('请上传数据')
   // }
   // 打开拒绝申请弹框
   rejectionDialogVisible.value = true
}
@@ -400,6 +387,7 @@
   // 从 uploadedFiles.value 中提取所有 attachId
   const id = uploadedFiles.value.map(file => file.attachId)
   submitting.value = true
   gdSupplyDemandAuditRejectApi({ attachIds: id, auditOpinion: reason, demandId: demandId.value })
      .then(() => {
         ElMessage.success('拒绝申请成功')
@@ -411,42 +399,43 @@
         ElMessage.error('拒绝申请失败,请重试')
         emit('success')
      })
      .finally(() => {
         submitting.value = false
      })
}
// 审核通过
const approvedByTheReview = () => {
   if (uploadedFiles.value.length === 0) {
      return ElMessage.warning('请上传数据')
   }
   }
   // 从 uploadedFiles.value 中提取所有 attachId
   const id = uploadedFiles.value.map(file => file.attachId)
   gdSupplyDemandAuditPassApi({ attachIds: id, demandId: demandId.value }).then(() => {
      ElMessage.success('审核通过成功')
      visible.value = false
      emit('success')
   })
   submitting.value = true
   gdSupplyDemandAuditPassApi({ attachIds: id, demandId: demandId.value })
      .then(() => {
         ElMessage.success('审核通过成功')
         visible.value = false
         emit('success')
      })
      .finally(() => {
         submitting.value = false
      })
}
defineExpose({ open })
</script>
<style scoped lang="scss">
.detail-container {
   padding: 20px;
   display: flex;
   align-items: flex-start;
   gap: 30px;
}
/* 左侧步骤条 */
.detail-left {
   width: 25%;
   width: 35%;
   padding-right: 20px;
   border-right: 1px solid #e8e8e8;
}
/* 右侧表单 */
.detail-right {
   width: 75%;
   width: 65%;
   .reject-reason {
      margin-bottom: 20px;
      background: #f2f3f5;
@@ -454,48 +443,8 @@
      padding: 15px;
      height: 100px;
   }
   .requirementsDetailsBox {
      background: #f2f3f5;
      border-radius: 2px 2px 2px 2px;
   }
   /* 详情表格样式 */
   .detail-table {
      width: 100%;
   }
   .detail-row {
      display: flex;
      &:last-child {
         margin-bottom: 0;
      }
   }
   .detail-cell {
      flex: 1;
      display: flex;
      justify-content: space-between;
      padding: 5px 12px;
      margin-right: 8px;
      &:last-child {
         margin-right: 0;
      }
   }
   .cell-label {
      font-weight: 500;
      color: #333333;
      margin-right: 8px;
      text-align: right;
      min-width: 100px;
      flex-shrink: 0;
   }
   .cell-value {
      color: #666666;
      flex: 1;
      text-align: left;
   }
   .label {
   width: 130px !important;}
}
/* 上传容器样式 */
@@ -530,14 +479,7 @@
   }
}
.val {
   padding: 8px;
   background-color: #f5f7fa;
   border-radius: 4px;
   min-height: 32px;
   word-break: break-all;
   margin-bottom: 16px;
}
/* 上传按钮样式 */
:deep(.el-upload) {
@@ -547,4 +489,6 @@
:deep(.el-upload-list) {
   margin-top: 10px;
}
.el-upload-list__item.is-success:focus .el-upload-list__item-status-label, .el-upload-list__item.is-success:hover .el-upload-list__item-status-label{
display: none !important;}
</style>