Browse Source

修改企业成本监审填报任务为侧边窗,并拆分成组件

shiyanyu 1 tháng trước cách đây
mục cha
commit
1aeb61b894

+ 2 - 2
src/components/task/taskInfo.vue

@@ -2,8 +2,8 @@
   <el-dialog
     :visible.sync="dialogVisible"
     title="任务详情"
-    width="90%"
-    top="5vh"
+    width="100%"
+    height="100%"
     :close-on-click-modal="false"
     :before-close="handleClose"
     class="task-info-dialog"

+ 99 - 0
src/views/EntDeclaration/auditTaskManagement/components/AuditDocumentTab.vue

@@ -0,0 +1,99 @@
+<template>
+  <div>
+    <div style="font-size: 18px">
+      <strong>说明:</strong>
+      被监审单位接收《送达回证》后需签名并反馈监审主体。
+    </div>
+    <el-table style="width: 100%; margin-top: 20px" border :data="formData">
+      <el-table-column prop="id" label="序号" width="120" align="center">
+        <template slot-scope="scope">
+          {{ scope.$index + 1 }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="name"
+        label="文书类型"
+        min-width="150"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="province"
+        label="文书文号"
+        min-width="230"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="city"
+        label="推送时间"
+        min-width="230"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="address"
+        label="文书操作"
+        min-width="150"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <el-button
+            type="text"
+            size="small"
+            :disabled="isViewMode"
+            @click="$emit('handle-click', scope.row)"
+          >
+            查看
+          </el-button>
+          <el-button
+            type="text"
+            size="small"
+            :disabled="isViewMode"
+            @click="$emit('handle-download', scope.row)"
+          >
+            下载
+          </el-button>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="zip"
+        label="向监审主体反馈文件"
+        min-width="200"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <el-button
+            type="text"
+            size="small"
+            :disabled="isViewMode"
+            @click="$emit('handle-upload', scope.row)"
+          >
+            上传附件
+          </el-button>
+          <el-button
+            type="text"
+            size="small"
+            :disabled="isViewMode"
+            @click="$emit('handle-click', scope.row)"
+          >
+            查看附件
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'AuditDocumentTab',
+    props: {
+      formData: {
+        type: Array,
+        default: () => [],
+      },
+      isViewMode: {
+        type: Boolean,
+        default: false,
+      },
+    },
+  }
+</script>

+ 268 - 0
src/views/EntDeclaration/auditTaskManagement/components/AuditOpinionTab.vue

@@ -0,0 +1,268 @@
+<template>
+  <div class="cost-supervision-container">
+    <!-- 成本监审意见部分 -->
+    <div class="cost-opinion-section">
+      <h3>成本监审意见</h3>
+      <div class="opinion-item">
+        <label>被监审单位基本情况及主要财务状况</label>
+        <el-input
+          v-model="localFormData.basicFinancialInfo"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="opinion-item">
+        <label>监审项目现行执行的价格标准</label>
+        <el-input
+          v-model="localFormData.priceStandard"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="opinion-item">
+        <label>监审项目的成本构成、数据核增核减情况、依据及理由</label>
+        <el-input
+          v-model="localFormData.costComposition"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="opinion-item">
+        <label>成本审核初步意见</label>
+        <el-input
+          v-model="localFormData.preliminaryOpinion"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+    </div>
+
+    <!-- 被监审单位反馈意见部分 -->
+    <div class="feedback-section">
+      <h3>被监审单位反馈意见</h3>
+      <div class="feedback-item">
+        <label>被监审单位反馈意见</label>
+        <el-input
+          v-model="localFormData.enterpriseFeedback"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="feedback-item">
+        <label>被监审单位反馈资料</label>
+        <div v-if="isViewMode" class="file-list-display">
+          <div
+            v-for="(file, index) in localFormData.fileList"
+            :key="index"
+            class="file-item"
+          >
+            <i class="el-icon-document"></i>
+            <span>{{ file.name || file }}</span>
+          </div>
+          <div
+            v-if="
+              !localFormData.fileList || localFormData.fileList.length === 0
+            "
+            style="color: #909399"
+          >
+            暂无文件
+          </div>
+        </div>
+        <div v-else class="upload-box">
+          <el-upload
+            class="upload-demo"
+            action="https://jsonplaceholder.typicode.com/posts/"
+            :on-preview="$emit('handle-preview', $event)"
+            :on-remove="$emit('handle-remove', $event)"
+            :before-remove="$emit('before-remove', $event)"
+            multiple
+            :limit="1"
+            :on-exceed="$emit('handle-exceed', $event)"
+            :file-list="localFormData.fileList"
+          >
+            <el-button size="small" type="text" :disabled="isViewMode">
+              上传附件
+            </el-button>
+          </el-upload>
+        </div>
+      </div>
+    </div>
+
+    <!-- 成本审核结论意见 -->
+    <div class="feedback-section">
+      <h3>成本审核结论意见</h3>
+      <div class="feedback-item">
+        <label>成本审核结论意见</label>
+        <el-input
+          v-model="localFormData.conclusionOpinion"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="feedback-item">
+        <label>其他需要说明的事项</label>
+        <el-input
+          v-model="localFormData.otherInstructions"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+      <div class="feedback-item">
+        <label>备注</label>
+        <el-input
+          v-model="localFormData.remarks"
+          type="textarea"
+          rows="5"
+          :disabled="isViewMode"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'AuditOpinionTab',
+    props: {
+      formData: {
+        type: Object,
+        default: () => ({
+          basicFinancialInfo: '',
+          priceStandard: '',
+          costComposition: '',
+          preliminaryOpinion: '',
+          enterpriseFeedback: '',
+          fileList: [],
+          conclusionOpinion: '',
+          otherInstructions: '',
+          remarks: '',
+        }),
+      },
+      isViewMode: {
+        type: Boolean,
+        default: false,
+      },
+    },
+    data() {
+      return {
+        localFormData: {
+          basicFinancialInfo: '',
+          priceStandard: '',
+          costComposition: '',
+          preliminaryOpinion: '',
+          enterpriseFeedback: '',
+          fileList: [],
+          conclusionOpinion: '',
+          otherInstructions: '',
+          remarks: '',
+        },
+        isInternalUpdate: false, // 标记是否是内部更新(避免watch循环触发)
+      }
+    },
+    watch: {
+      formData: {
+        handler(newVal) {
+          // 标记为内部更新,避免触发 localFormData 的 watch
+          this.isInternalUpdate = true
+          this.localFormData = { ...newVal }
+          // 确保 fileList 也是深拷贝
+          if (newVal.fileList) {
+            this.localFormData.fileList = [...newVal.fileList]
+          }
+          this.$nextTick(() => {
+            this.isInternalUpdate = false
+          })
+        },
+        immediate: true,
+        deep: true,
+      },
+      localFormData: {
+        handler(newVal) {
+          // 只有在非内部更新时才触发事件
+          if (!this.isInternalUpdate) {
+            this.$emit('change', { ...newVal })
+          }
+        },
+        deep: true,
+      },
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .cost-supervision-container {
+    width: 100%;
+
+    h3 {
+      text-align: center;
+      margin-top: 0;
+      margin-bottom: 20px;
+      font-size: 16px;
+      font-weight: bold;
+    }
+  }
+
+  .cost-opinion-section,
+  .feedback-section {
+    border: 1px solid #dcdcdc;
+    border-radius: 4px;
+    padding: 20px;
+    margin-bottom: 20px;
+    background-color: #f9f9f9;
+  }
+
+  .opinion-item,
+  .feedback-item {
+    margin-bottom: 20px;
+    display: flex;
+    flex-direction: column;
+
+    label {
+      margin-bottom: 8px;
+      font-weight: bold;
+      color: #1549ad;
+    }
+  }
+
+  .file-list-display {
+    border: 1px solid #e9e9e9;
+    border-radius: 4px;
+    padding: 15px;
+    min-height: 60px;
+    background-color: #fff;
+  }
+
+  .file-item {
+    padding: 8px;
+    margin-bottom: 5px;
+    color: #606266;
+
+    i {
+      margin-right: 5px;
+      color: #409eff;
+    }
+  }
+
+  /* 上传区域 */
+  .upload-box {
+    border: 1px solid #e9e9e9;
+    border-radius: 4px;
+    padding: 15px;
+    background-color: #fff;
+  }
+
+  .upload-demo {
+    width: 100%;
+  }
+
+  .upload-demo .el-button {
+    float: right;
+  }
+</style>

+ 160 - 0
src/views/EntDeclaration/auditTaskManagement/components/CostSurveyTab.vue

@@ -0,0 +1,160 @@
+<template>
+  <div>
+    <el-table
+      style="width: 100%; margin-top: 20px"
+      :data="paginatedData"
+      border
+      size="medium"
+    >
+      <!-- 序号列 -->
+      <el-table-column
+        prop="index"
+        label="序号"
+        width="60"
+        align="center"
+      ></el-table-column>
+      <el-table-column label="成本调查表" min-width="220">
+        <template slot-scope="scope">
+          <span
+            :style="{
+              color: scope.row.isDisabled ? '#909399' : '#409EFF',
+              cursor: scope.row.isDisabled ? 'default' : 'pointer',
+            }"
+            @click="
+              !scope.row.isDisabled && $emit('handle-survey-click', scope.row)
+            "
+          >
+            {{ scope.row.name }}
+          </span>
+        </template>
+      </el-table-column>
+
+      <!-- 资料类型列 -->
+      <el-table-column
+        prop="dataType"
+        label="资料类型"
+        width="120"
+        align="center"
+      ></el-table-column>
+
+      <!-- 表格类型列 -->
+      <el-table-column
+        prop="tableType"
+        label="表格类型"
+        width="120"
+        align="center"
+      ></el-table-column>
+
+      <!-- 是否必填列 -->
+      <el-table-column
+        prop="isRequired"
+        label="是否必填"
+        width="100"
+        align="center"
+      ></el-table-column>
+
+      <!-- 是否上传列(红色“未上传”、绿色“已上传”) -->
+      <el-table-column label="是否上传" width="100" align="center">
+        <template slot-scope="scope">
+          <span
+            :style="{
+              color: scope.row.isUploaded === true ? '#67c23a' : '#f56c6c',
+            }"
+          >
+            {{ scope.row.isUploaded === true ? '已上传' : '未上传' }}
+          </span>
+        </template>
+      </el-table-column>
+
+      <!-- 操作列(根据“是否上传”“表格类型”显示不同按钮) -->
+      <el-table-column label="操作" width="280" align="center">
+        <template slot-scope="scope">
+          <template v-if="scope.row.isUploaded">
+            <el-button
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-modify', scope.row)"
+            >
+              修改
+            </el-button>
+            <el-button
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-data-download', scope.row)"
+            >
+              数据下载
+            </el-button>
+            <el-button
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-data-upload', scope.row)"
+            >
+              数据上传
+            </el-button>
+          </template>
+          <template v-else>
+            <el-button
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-online-fill', scope.row)"
+            >
+              在线填报
+            </el-button>
+            <el-button
+              v-if="scope.row.tableType === '动态表'"
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-template-download', scope.row)"
+            >
+              模版下载
+            </el-button>
+            <el-button
+              type="text"
+              size="small"
+              :disabled="isViewMode"
+              @click="$emit('handle-data-upload', scope.row)"
+            >
+              数据上传
+            </el-button>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+    <el-pagination
+      background
+      layout="total, sizes, prev, pager, next"
+      :current-page="pagination.currentPage"
+      :page-sizes="[10, 20, 30, 50]"
+      :page-size="pagination.pageSize"
+      :total="pagination.total"
+      style="margin-top: 20px; text-align: right"
+      @current-change="$emit('handle-page-change', $event)"
+      @size-change="$emit('handle-size-change', $event)"
+    />
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'CostSurveyTab',
+    props: {
+      paginatedData: {
+        type: Array,
+        default: () => [],
+      },
+      pagination: {
+        type: Object,
+        default: () => ({ currentPage: 1, pageSize: 10, total: 0 }),
+      },
+      isViewMode: {
+        type: Boolean,
+        default: false,
+      },
+    },
+  }
+</script>

+ 192 - 0
src/views/EntDeclaration/auditTaskManagement/components/DataRequirementsTab.vue

@@ -0,0 +1,192 @@
+<template>
+  <div>
+    <el-button
+      type="primary"
+      :disabled="isViewMode"
+      @click="$emit('handleAddMaterial')"
+    >
+      补充材料
+    </el-button>
+    <el-table
+      style="margin-top: 20px"
+      border
+      :data="dataRequirements"
+      size="mini"
+      :show-header="true"
+      :row-class-name="getRowClassName"
+    >
+      <el-table-column prop="seq" label="序号" width="80" align="center">
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategoryHeader">
+            {{ scope.row.seq || scope.row.index }}
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="informationName" label="报送资料" min-width="280">
+        <template slot-scope="scope">
+          <div v-if="scope.row.isCategoryHeader" class="category-header-cell">
+            {{ scope.row.categoryName }}
+          </div>
+          <span v-else>{{ scope.row.informationName || '-' }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="formatRequired"
+        label="资料类型"
+        width="130"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategoryHeader">
+            <span
+              v-if="
+                scope.row.formatRequired !== null &&
+                scope.row.formatRequired !== undefined
+              "
+            >
+              {{
+                getDictName('formatAsk', String(scope.row.formatRequired)) ||
+                scope.row.formatRequired
+              }}
+            </span>
+            <span v-else>-</span>
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="isRequired"
+        label="是否必填"
+        width="110"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategoryHeader">
+            {{ scope.row.isRequired === '1' ? '是' : '否' }}
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="isUploaded"
+        label="是否上传"
+        width="110"
+        align="center"
+      >
+        <template slot-scope="scope">
+          <span v-if="!scope.row.isCategoryHeader">
+            <span v-if="scope.row.isUploaded === true">已上传</span>
+            <span v-else class="text-danger">未上传</span>
+          </span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="operation" label="操作" width="220" align="center">
+        <template slot-scope="scope">
+          <template v-if="!scope.row.isCategoryHeader">
+            <template v-if="scope.row.formatRequired !== '3'">
+              <el-button
+                type="text"
+                size="small"
+                @click="$emit('handleFileView', scope.row)"
+              >
+                查看
+              </el-button>
+              <el-button
+                type="text"
+                size="small"
+                @click="$emit('handleFileDownload', scope.row)"
+              >
+                下载
+              </el-button>
+              <el-button
+                v-if="scope.row.isUploaded === false"
+                type="text"
+                size="small"
+                :disabled="isViewMode"
+                @click="$emit('handleFileUpload', scope.row)"
+              >
+                上传
+              </el-button>
+            </template>
+            <template v-if="scope.row.formatRequired == '3'">
+              <el-button
+                type="text"
+                size="small"
+                @click="$emit('handleTemplateDownload', scope.row)"
+              >
+                模版下载
+              </el-button>
+              <el-button
+                v-if="scope.row.isUploaded === false"
+                type="text"
+                size="small"
+                :disabled="isViewMode"
+                @click="$emit('handleDataUpload', scope.row)"
+              >
+                数据上传
+              </el-button>
+            </template>
+          </template>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'DataRequirementsTab',
+    props: {
+      dataRequirements: {
+        type: Array,
+        default: () => [],
+      },
+      isViewMode: {
+        type: Boolean,
+        default: false,
+      },
+      dictData: {
+        type: Object,
+        default: () => ({}),
+      },
+    },
+    methods: {
+      getRowClassName(data) {
+        if (data.row.isCategoryHeader) {
+          return 'category-header-row'
+        }
+        return ''
+      },
+      getDictName(dictType, dictKey) {
+        const list = (this.dictData && this.dictData[dictType]) || []
+        if (!Array.isArray(list) || dictKey === undefined || dictKey === null) {
+          return ''
+        }
+        const item = list.find(
+          (it) =>
+            String(it.key) === String(dictKey) ||
+            String(it.value) === String(dictKey)
+        )
+        return item ? item.name : ''
+      },
+    },
+  }
+</script>
+
+<style scoped>
+  .text-danger {
+    color: #d9001b;
+  }
+
+  /* 类别头行样式 */
+  .category-header-row {
+    background-color: #f5f7fa !important;
+  }
+  .category-header-row td {
+    background-color: #f5f7fa !important;
+    padding: 12px 16px !important;
+  }
+  .category-header-cell {
+    font-weight: 700;
+    color: #303133;
+    padding-left: 16px;
+  }
+</style>

+ 62 - 0
src/views/EntDeclaration/auditTaskManagement/components/MessageNoticeTab.vue

@@ -0,0 +1,62 @@
+<template>
+  <div>
+    <el-table style="width: 100%; margin-top: 20px" border :data="formData">
+      <el-table-column prop="id" label="序号" width="120" align="center">
+        <template slot-scope="scope">
+          {{ scope.$index + 1 }}
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="noticeTitle"
+        label="消息主题"
+        width="200"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="noticeSource"
+        label="消息来源"
+        width="150"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="noticeContent"
+        label="消息内容"
+        min-width="350"
+        align="center"
+      ></el-table-column>
+      <el-table-column
+        prop="createTime"
+        label="发送时间"
+        width="230"
+        align="center"
+      ></el-table-column>
+    </el-table>
+    <el-pagination
+      background
+      layout="total, sizes, prev, pager, next"
+      :current-page="pagination.currentPage"
+      :page-sizes="[10, 20, 30, 50]"
+      :page-size="pagination.pageSize"
+      :total="pagination.total"
+      style="margin-top: 20px; text-align: right"
+      @current-change="$emit('handle-page-change', $event)"
+      @size-change="$emit('handle-size-change', $event)"
+    />
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'MessageNoticeTab',
+    props: {
+      formData: {
+        type: Array,
+        default: () => [],
+      },
+      pagination: {
+        type: Object,
+        default: () => ({ currentPage: 1, pageSize: 10, total: 0 }),
+      },
+    },
+  }
+</script>

+ 312 - 0
src/views/EntDeclaration/auditTaskManagement/components/ProjectInfoTab.vue

@@ -0,0 +1,312 @@
+<template>
+  <el-form :model="localFormData" label-width="180px" :disabled="true">
+    <el-form-item label="成本监审项目名称:">
+      <el-input
+        v-model="localFormData.projectName"
+        placeholder="请输入成本监审项目名称"
+        style="width: 400px"
+        :disabled="isViewMode"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="关联成本监审目录:">
+      <CatalogCascader
+        ref="catalogCascader"
+        :form-item="{ placeholder: '请选择监审目录' }"
+        style="width: 100%"
+        :value="localFormData.catalogId"
+        :disabled="isViewMode"
+        @change="$emit('catalog-change', $event)"
+      />
+    </el-form-item>
+    <el-form-item label="监审地区:">
+      <RegionSelector
+        :initial-area-code="localFormData.areaCode"
+        :disabled="isViewMode"
+        @region-change="$emit('region-change', $event)"
+      ></RegionSelector>
+    </el-form-item>
+    <el-form-item label="被监审单位:">
+      <el-select
+        v-if="localFormData.auditUnitId"
+        v-model="localFormData.auditUnitId"
+        placeholder="请选择单位"
+        clearable
+        multiple
+        style="width: 100%"
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="unit in unitList"
+          :key="unit.unitId"
+          :label="unit.unitName"
+          :value="unit.unitId"
+        />
+      </el-select>
+      <el-input
+        v-else
+        v-model="localFormData.auditUnitName"
+        placeholder="请输入单位"
+        style="width: 100%"
+        :disabled="isViewMode"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="监审主体:">
+      <el-select
+        v-model="localFormData.orgId"
+        placeholder="请选择监审主体"
+        style="width: 100%"
+        clearable
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="Org in OrgList"
+          :key="Org.id"
+          :label="Org.name"
+          :value="Org.id"
+        />
+      </el-select>
+    </el-form-item>
+    <el-form-item label="归属年度:">
+      <el-date-picker
+        v-model="localFormData.projectYear"
+        style="width: 100%"
+        type="year"
+        placeholder="请选择归属年度"
+        format="yyyy"
+        value-format="yyyy"
+        clearable
+        :disabled="isViewMode"
+      ></el-date-picker>
+    </el-form-item>
+    <el-form-item label="立项来源:">
+      <el-select
+        v-model="localFormData.sourceType"
+        placeholder="请选择立项类型"
+        style="width: 100%"
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="item in dictData['projectProposal']"
+          :key="item.key"
+          :label="item.name"
+          :value="item.key"
+        ></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item label="监审形式:">
+      <el-select
+        v-model="localFormData.auditType"
+        placeholder="请选择监审形式"
+        style="width: 100%"
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="item in dictData['auditType']"
+          :key="item.key"
+          :label="item.name"
+          :value="item.key"
+        ></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item label="监审期间:">
+      <div class="cost-period-container">
+        <el-button
+          type="primary"
+          size="small"
+          class="add-cost-year-btn"
+          :disabled="isViewMode || true"
+          @click="$emit('add-cost-year')"
+        >
+          +
+        </el-button>
+        <div class="cost-years-wrapper">
+          <div
+            v-for="(year, index) in localFormData.auditPeriodArray"
+            :key="index"
+            class="cost-year-item"
+          >
+            <el-date-picker
+              v-model="year.value"
+              style="width: 82%"
+              type="year"
+              placeholder="请选择年份"
+              format="yyyy"
+              value-format="yyyy"
+              clearable
+              :disabled="isViewMode"
+            ></el-date-picker>
+            <el-button
+              type="danger"
+              size="small"
+              class="delete-cost-year-btn"
+              :disabled="isViewMode || true"
+              @click="$emit('delete-cost-year', index)"
+            >
+              删除
+            </el-button>
+          </div>
+        </div>
+      </div>
+    </el-form-item>
+    <el-form-item label="是否参加听证:">
+      <el-radio-group
+        v-model="localFormData.needHearing"
+        :disabled="isViewMode"
+      >
+        <el-radio :label="0">是</el-radio>
+        <el-radio :label="1">否</el-radio>
+      </el-radio-group>
+    </el-form-item>
+    <el-form-item label="是否应急项目:">
+      <el-radio-group
+        v-model="localFormData.isEmergency"
+        :disabled="isViewMode"
+      >
+        <el-radio :label="0">是</el-radio>
+        <el-radio :label="1">否</el-radio>
+      </el-radio-group>
+    </el-form-item>
+    <el-form-item label="立项理由:">
+      <el-input
+        v-model="localFormData.establishmentReason"
+        style="width: 100%"
+        type="textarea"
+        rows="4"
+        placeholder="请输入立项理由"
+        :disabled="isViewMode"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="监审任务负责人:">
+      <el-select
+        v-model="localFormData.auditGroup"
+        placeholder="请选择负责人"
+        style="width: 100%"
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="(item, index) in userList"
+          :key="index"
+          :label="item.fullname"
+          :value="item.userId"
+        ></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item label="监审任务组成员:">
+      <el-select
+        v-model="localFormData.auditTeamMembers"
+        placeholder="请选择成员"
+        multiple
+        style="width: 100%"
+        :disabled="isViewMode"
+      >
+        <el-option
+          v-for="(item, index) in userList"
+          :key="index"
+          :label="item.fullname"
+          :value="item.userId"
+        ></el-option>
+      </el-select>
+    </el-form-item>
+    <el-form-item label="其他专家:">
+      <el-input
+        v-model="localFormData.expertStr"
+        placeholder="请输入其他专家"
+        style="width: 100%"
+        :disabled="isViewMode"
+      ></el-input>
+    </el-form-item>
+    <el-form-item label="预定的监审工作起止时间:">
+      <el-date-picker
+        v-model="localFormData.plannedAuditStartDate"
+        type="date"
+        placeholder="开始日期"
+        format="yyyy-MM-dd"
+        value-format="yyyy-MM-dd"
+        style="width: 150px"
+        :disabled="isViewMode"
+      ></el-date-picker>
+      <span style="margin: 0 10px">—</span>
+      <el-date-picker
+        v-model="localFormData.plannedAuditEndDate"
+        type="date"
+        placeholder="结束日期"
+        format="yyyy-MM-dd"
+        value-format="yyyy-MM-dd"
+        style="width: 150px"
+        :disabled="isViewMode"
+      ></el-date-picker>
+    </el-form-item>
+  </el-form>
+</template>
+
+<script>
+  export default {
+    name: 'ProjectInfoTab',
+    components: {
+      CatalogCascader: () =>
+        import(
+          '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/CatalogCascader'
+        ),
+      RegionSelector: () =>
+        import(
+          '@/views/costAudit/projectInfo/auditProjectManage/annualReviewPlan/RegionSelector'
+        ),
+    },
+    props: {
+      formData: {
+        type: Object,
+        required: true,
+      },
+      isViewMode: {
+        type: Boolean,
+        default: false,
+      },
+      unitList: {
+        type: Array,
+        default: () => [],
+      },
+      OrgList: {
+        type: Array,
+        default: () => [],
+      },
+      userList: {
+        type: Array,
+        default: () => [],
+      },
+      dictData: {
+        type: Object,
+        default: () => ({}),
+      },
+    },
+    data() {
+      return {
+        localFormData: {},
+        isInternalUpdate: false, // 标记是否是内部更新(避免watch循环触发)
+      }
+    },
+    watch: {
+      formData: {
+        handler(newVal) {
+          // 标记为内部更新,避免触发 localFormData 的 watch
+          this.isInternalUpdate = true
+          // 深拷贝 formData
+          this.localFormData = JSON.parse(JSON.stringify(newVal))
+          this.$nextTick(() => {
+            this.isInternalUpdate = false
+          })
+        },
+        immediate: true,
+        deep: true,
+      },
+      localFormData: {
+        handler(newVal) {
+          // 只有在非内部更新时才触发事件
+          if (!this.isInternalUpdate) {
+            this.$emit('change', { ...newVal })
+          }
+        },
+        deep: true,
+      },
+    },
+  }
+</script>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 236 - 913
src/views/EntDeclaration/auditTaskManagement/taskFillIn.vue


+ 29 - 7
src/views/EntDeclaration/auditTaskProcessing/index.vue

@@ -179,7 +179,7 @@
           <!-- 文字按钮样式 -->
           <el-button
             v-if="
-              scope.row.currentNode === 'ccls' &&
+              scope.row.currentNode === 'clcs' &&
               (scope.row.status === '100' || scope.row.status === '500')
             "
             size="mini"
@@ -215,6 +215,15 @@
       ></el-pagination>
     </div>
     <taskInfo ref="taskInfo" />
+
+    <!-- 填报任务侧边弹窗 -->
+    <task-fill-in
+      ref="taskFillIn"
+      :visible.sync="taskFillInVisible"
+      :task-info="currentTaskInfo"
+      :view-mode="taskViewMode"
+      @close="handleTaskFillInClose"
+    />
   </div>
 </template>
 
@@ -223,10 +232,12 @@
   import { getTaskHandlingList } from '@/api/auditTaskProcessing'
   import { dictMixin } from '@/mixins/useDict'
   import taskInfo from '@/components/task/taskInfo.vue'
+  import TaskFillIn from '@/views/EntDeclaration/auditTaskManagement/taskFillIn.vue'
   export default {
     name: 'AuditTaskProcessingView',
     components: {
       taskInfo,
+      TaskFillIn,
     },
     mixins: [dictMixin],
     data() {
@@ -255,6 +266,10 @@
         currentPage: 1,
         pageSize: 10,
         total: 3,
+        // 填报任务弹窗相关
+        taskFillInVisible: false,
+        currentTaskInfo: {},
+        taskViewMode: false,
       }
     },
     mounted() {
@@ -296,14 +311,21 @@
       },
       // 填报任务
       handleEdit(row) {
-        console.log(row)
-        this.$router.push({
-          path: '/dataManagement/EntDeclaration/auditTaskManagementProjectInfo',
-          query: {
-            info: row,
-          },
+        console.log('填报任务', row)
+        this.currentTaskInfo = row || {}
+        this.taskViewMode = false
+        // 使用ref调用组件的open方法
+        this.$nextTick(() => {
+          if (this.$refs.taskFillIn) {
+            this.$refs.taskFillIn.open(row, false)
+          }
         })
       },
+      // 填报任务弹窗关闭
+      handleTaskFillInClose() {
+        this.taskFillInVisible = false
+        this.currentTaskInfo = {}
+      },
       // 查看
       handleMessage(row) {
         this.$refs.taskInfo.open(row)

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác