Эх сурвалжийг харах

智慧党建管理系统:
1、后台管理系统-组织关系变更前端研发完成60%
2、后台管理系统-情况说明管理前端研发完成70%
3、后台管理系统-党员发展管理前端研发完成60%
4、后台管理系统-正式党员管理前端研发完成90%
5、【High】党员信息新增录入信息功能前端研发完成100%
6、【High】党员信息完善更新功能前端研发完成100%
7、党员信息展示功能前端研发完成30%

Rockery 3 жил өмнө
parent
commit
de9b357666

+ 243 - 0
src/components/PartyMemberDetails/JsonData/EleObjArr.js

@@ -0,0 +1,243 @@
+/**
+ * 所有禁用标志集合
+*/
+module.exports = [
+  /** 一、申请入党 */
+  {
+    tabPaneLabel: '一、申请入党',
+    tabPaneName: 'APPLY',
+    tabPaneHeadLeftTitle: '一',
+    tabPaneHeadRight: '申请入党',
+    tabpaneStepList: [
+      // 1 入党申请书
+      {
+        stepItemLeft: 1,
+        elcolKey: 'FIRST',
+        elcolStyle: '',
+        stepItemRightTitle: '入党申请书',
+        stepItemTailStyle: 'height: 64px; margin-top: -18px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '递交入党申请书时间:',
+            stepItemColProp: 'submitAddPartyPageTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '入党申请书:',
+            stepItemColProp: 'addPartyPageFile',
+            stepItemColPdfFileName: '党建管理-录入数据-1-入党申请书'
+          }
+        ]
+      },
+      // 2 党组织派人与入党申请人谈话的记录
+      {
+        stepItemLeft: 2,
+        elcolKey: 'SECOND',
+        elcolStyle: 'margin-top: 46px;',
+        stepItemRightTitle: '党组织派人与入党申请人谈话的记录',
+        stepItemTailStyle: 'height: 64px; margin-top: -18px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '组织派人谈话时间:',
+            stepItemColProp: 'partyArrangeTalkTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '谈话记录:',
+            stepItemColProp: 'talkPageFile',
+            stepItemColPdfFileName: '党建管理-录入数据-2-谈话记录'
+          }
+        ]
+      },
+      // 3 身份证或户口本复印件
+      {
+        stepItemLeft: 3,
+        elcolKey: 'THIRD',
+        elcolStyle: 'margin-top: 46px;',
+        stepItemRightTitle: '身份证或户口本复印件',
+        stepItemTailStyle: 'height: 184px; margin-top: -18px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 24,
+            stepItemColStyle: '',
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '身份证或户口本:',
+            stepItemColProp: 'cardOrRegisterBookFile',
+            stepItemColPdfFileName: '党建管理-录入数据-3-身份证或户口本'
+          }
+        ]
+      }
+    ]
+  },
+  /** 一、申请入党 */
+  {
+    tabPaneLabel: '二、入党积极分子的确定和考察',
+    tabPaneName: 'POSITIVE',
+    tabPaneHeadLeftTitle: '二',
+    tabPaneHeadRight: '入党积极分子的确定和培养',
+    tabpaneStepList: [
+      // 4 党员(群团组织)推荐入党积极分子登记表
+      {
+        stepItemLeft: 4,
+        elcolKey: 'fourth',
+        elcolStyle: '',
+        stepItemRightTitle: '党员(群团组织)推荐入党积极分子登记表',
+        stepItemTailStyle: 'height: 104px; margin-top: -56px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 24,
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '推荐人:',
+            stepItemColProp: 'referrer'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '推荐入党积极分子时间:',
+            stepItemColProp: 'referreTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '推荐入党积极分子登记表:',
+            stepItemColProp: 'referrePageFile',
+            stepItemColPdfFileName: '党建管理-详情-4-推荐入党积极分子登记表'
+          }
+        ]
+      },
+      // 5 确定为入党积极分子的支委会会议记录、备案请示和批复
+      {
+        stepItemLeft: 5,
+        elcolKey: 'fifth',
+        elcolStyle: 'margin-top: 46px;',
+        stepItemRightTitle: '确定为入党积极分子的支委会会议记录、备案请示和批复',
+        stepItemTailStyle: 'height: 218px; margin-top: -170px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 24,
+            stepItemColStyle: '',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '会议结果:',
+            stepItemColProp: 'meetingResult',
+            stepItemColPropType: 'RADIORESULT'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '支委会会议时间:',
+            stepItemColProp: 'branchPartyMeetingTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '确定为入党积极分子的支委会会议记录:',
+            stepItemColProp: 'branchPartyMeetingFile',
+            stepItemColPdfFileName: '党建管理-详情-5-确定为入党积极分子的支委会会议记录'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '递交备案请示时间:',
+            stepItemColProp: 'submitRecordRequestTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '确定为入党积极分子的备案请示:',
+            stepItemColProp: 'submitRecordRequestFile',
+            stepItemColPdfFileName: '党建管理-详情-5-确定为入党积极分子的备案请示'
+          },
+          {
+            stepItemColSpan: 24,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '批复结果:',
+            stepItemColProp: 'replyResult',
+            stepItemColPropType: 'RADIORESULT'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '获得批复的时间:',
+            stepItemColProp: 'replyTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColStyle: 'margin-top: 16px;',
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '确定为入党积极分子的批复:',
+            stepItemColProp: 'replyFile',
+            stepItemColPdfFileName: '党建管理-详情-5-确定为入党积极分子的批复'
+          }
+        ]
+      },
+      // 6 《入党积极分子、发展对象培养教育考察登记表》
+      {
+        stepItemLeft: 6,
+        elcolKey: 'SIXTH',
+        elcolStyle: 'margin-top: 46px;',
+        stepItemRightTitle: '《入党积极分子、发展对象培养教育考察登记表》',
+        stepItemTailStyle: 'height: 64px; margin-top: -18px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '确定为积极分子的时间:',
+            stepItemColProp: 'confirmActiveMemberTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '培养教育考察登记表:',
+            stepItemColProp: 'cultivateEducationRecordFile',
+            stepItemColPdfFileName: '党建管理-详情-6-培养教育考察登记表'
+          }
+        ]
+      },
+      // 7 入党积极分子思想汇报与参加短期集中培训的结业证书
+      {
+        stepItemLeft: 7,
+        elcolKey: 'SEVENTH',
+        elcolStyle: 'margin-top: 46px;',
+        stepItemRightTitle: '入党积极分子思想汇报与参加短期集中培训的结业证书',
+        stepItemTailStyle: 'height: 64px; margin-top: -18px;',
+        stepItemRightList: [
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'CONTENT',
+            stepItemColLable: '结业时间:',
+            stepItemColProp: 'courseCompletionTime',
+            stepItemColPropType: 'DATEPICKER'
+          },
+          {
+            stepItemColSpan: 12,
+            stepItemColType: 'VIEWPDFFILE',
+            stepItemColLable: '结业证书:',
+            stepItemColProp: 'courseCompletionFile',
+            stepItemColPdfFileName: '党建管理-详情-7-结业证书'
+          }
+        ]
+      }
+    ]
+  }
+];

+ 519 - 0
src/components/PartyMemberDetails/index.vue

@@ -0,0 +1,519 @@
+<!--
+ * @Description: 党员详细资料
+ * @Author: Rockery
+ * @Date: 2022-01-04 10:37:17
+ * @LastEditors: Rockery
+ * @LastEditTime: 2022-01-19 17:02:07
+ * @FilePath: \party_construct_web\src\components\PartyMemberDetails\index.vue
+ * @Copyright: Copyright (c) 2016~2021 Rockery(1113269755@qq.com)
+-->
+
+<template>
+  <div class="partymemberdetails">
+    <el-row>
+      <!-- 顶部信息 -->
+      <el-col :span="24">
+        <div class="partymemberdetails-head">
+          <el-row>
+            <!-- 党员详细资料 -->
+            <el-col :span="24">
+              <div class="partymemberdetails-head-title">
+                <div>
+                  <img
+                    :src="require('@/assets/logo/home-main-title-logo.png')"
+                    @error="imgViewerOnerror"
+                  />
+                </div>
+                <div>党员详细资料</div>
+              </div>
+            </el-col>
+
+            <!-- 个人基本情况 -->
+            <el-col :span="24">
+              <div class="partymemberdetails-head-subtitle">个人基本情况</div>
+            </el-col>
+
+            <el-col :span="24">
+              <div class="partymemberdetails-head-basic">
+                <div class="partymemberdetails-head-basic-personphoto">
+                  <img
+                    :src="viewFullPartyInfoObj.personPhoto ? viewFullPartyInfoObj.personPhoto : require('@/assets/images/home-main-list-card-img.png')"
+                    @error="imgViewerOnerror"
+                  />
+                </div>
+                <div class="partymemberdetails-head-basic-info">
+                  <div class="basic-info-first">{{ viewFullPartyInfoObj.name }}</div>
+
+                  <div class="basic-info-second">
+                    <span>性别:{{ viewFullPartyInfoObj.sex || '—' }}</span>
+                    <span class="basic-info-divider">|</span>
+                    <span>民族:{{ viewFullPartyInfoObj.nation || '—' }}</span>
+                    <span class="basic-info-divider">|</span>
+                    <span>出生年月:{{ parseTime(viewFullPartyInfoObj.birthday, '{y}年{m}月{d}日') || '—' }}</span>
+                    <!-- <span class="basic-info-divider">|</span>
+                    <span>手机号:{{ viewFullPartyInfoObj.mobile || '—' }}</span>-->
+                    <span class="basic-info-divider">|</span>
+                    <span>籍贯:{{ viewFullPartyInfoObj.placeStr || '—' }}</span>
+                    <span class="basic-info-divider">|</span>
+                    <span>学历:{{ educationFormat({ education: viewFullPartyInfoObj.education }) || '—' }}</span>
+                    <span class="basic-info-divider">|</span>
+                    <span>入团时间:{{ parseTime(viewFullPartyInfoObj.addTeamTime, '{y}年{m}月{d}日') || '—' }}</span>
+                    <span class="basic-info-divider">|</span>
+                    <span>单位、职务或职业:{{ viewFullPartyInfoObj.workJob || '—' }}</span>
+                    <!-- <span class="basic-info-divider">|</span>
+                    <span>参加工作时间:{{ parseTime(viewFullPartyInfoObj.workTime, '{y}年{m}月{d}日') || '—' }}</span>-->
+                  </div>
+
+                  <div class="basic-info-third">
+                    <span class="basic-info-cardno">居民身份证号码:{{ viewFullPartyInfoObj.cardNo || '—' }}</span>
+                    <span
+                      class="basic-info-address"
+                    >现居住地:{{ viewFullPartyInfoObj.addressStr || '—' }}</span>
+                  </div>
+
+                  <div class="basic-info-fourth">
+                    <!-- 本人简历(包括学历) -->
+                    <div class="basic-info-fourth-label">本人简历(包括学历)</div>
+                    <div
+                      class="basic-info-fourth-info"
+                      @click="handleViewPageCheckClick(viewFullPartyInfoObj.resume, 'pdf文件')"
+                    >查看</div>
+                    <div
+                      class="basic-info-fourth-info"
+                      @click="handleViewPageDownloadClick(viewFullPartyInfoObj.resume, 'pdf文件')"
+                    >下载</div>
+
+                    <!-- 其他情况 -->
+                    <div class="basic-info-fourth-label ml20">其他情况</div>
+                    <div
+                      class="basic-info-fourth-info"
+                      @click="handleViewPageCheckClick(viewFullPartyInfoObj.other, 'pdf文件')"
+                    >查看</div>
+                    <div
+                      class="basic-info-fourth-info"
+                      @click="handleViewPageDownloadClick(viewFullPartyInfoObj.other, 'pdf文件')"
+                    >下载</div>
+
+                    <!-- 情况说明 -->
+                    <div
+                      class="basic-info-fourth-label ml20"
+                    >{{ viewFullPartyInfoObj.name }}同志曾经进行过情况说明</div>
+                    <div
+                      class="basic-info-fourth-info"
+                      @click="handleViewPageCheckClick('', 'pdf文件')"
+                    >查看</div>
+                  </div>
+
+                  <div class="basic-info-fifth">备注:</div>
+
+                  <div class="basic-info-sixth">{{ viewFullPartyInfoObj.remark || '—' }}</div>
+                </div>
+              </div>
+            </el-col>
+
+            <el-col :span="24">
+              <div class="partymemberdetails-head-divider"></div>
+            </el-col>
+
+            <el-col :span="24">
+              <div class="partymemberdetails-head-desc">党员发展情况</div>
+            </el-col>
+
+            <el-col :span="24">
+              <div class="partymemberdetails-head-stage">
+                <el-row :gutter="20">
+                  <template v-if="viewFullPartyInfoObj.type === 4">
+                    <el-col :span="24">
+                      <div class="head-stage-current">
+                        <span>正式党员</span>
+                        <span
+                          v-if="viewFullPartyInfoObj.applyAddPartyTime"
+                          style="margin-left: 25px;"
+                        >提交入党申请的时间:{{ parseTime(viewFullPartyInfoObj.applyAddPartyTime, '{y}年{m}月{d}日') }}</span>
+                        <span
+                          v-if="viewFullPartyInfoObj.addPartyTime"
+                          style="margin-left: 25px;"
+                        >正式入党时间:{{ parseTime(viewFullPartyInfoObj.addPartyTime, '{y}年{m}月{d}日') }}</span>
+                      </div>
+                    </el-col>
+                  </template>
+                  <template v-else>
+                    <template v-if="viewFullPartyInfoObj.flowStatus === 27">
+                      <el-col :span="24">
+                        <div class="head-stage-current">
+                          <span>待转为正式党员</span>
+                          <span
+                            v-if="viewFullPartyInfoObj.applyAddPartyTime"
+                            style="margin-left: 30px;"
+                          >提交入党申请的时间:{{ parseTime(viewFullPartyInfoObj.applyAddPartyTime, '{y}年{m}月{d}日') }}</span>
+                        </div>
+                      </el-col>
+                    </template>
+                    <template v-else>
+                      <el-col :span="12">
+                        <div class="head-stage-current">
+                          <span>当前所处阶段:{{ atStageNodeDataObj[viewFullPartyInfoObj.atPoint] || '—' }}</span>
+                        </div>
+                      </el-col>
+                      <el-col :span="12">
+                        <div class="head-stage-future">
+                          <span>待更新节点:{{ nodeDataObj[viewFullPartyInfoObj.flowStatus] || '—' }}</span>
+                        </div>
+                      </el-col>
+                    </template>
+                  </template>
+                </el-row>
+              </div>
+            </el-col>
+          </el-row>
+        </div>
+      </el-col>
+
+      <!-- 主体信息 -->
+      <el-col :span="24">
+        <div class="partymemberdetails-main">
+          <el-tabs type="border-card" v-model="tabsModel" class="partymemberdetails-main-tabs">
+            <el-tab-pane
+              v-for="(tabPaneItem, tabPaneIndex) in tabsEleObjList"
+              :key="tabPaneItem.tabPaneName + '-' +tabPaneIndex"
+              :label="tabPaneItem.tabPaneLabel"
+              :name="tabPaneItem.tabPaneName"
+            >
+              <div class="roc-tabpane">
+                <el-row>
+                  <el-col :span="24">
+                    <div class="roc-tabpane-head">
+                      <div class="tabpane-head-left">
+                        <!-- 大类节点步骤 -->
+                        <div class="tabpane-head-left-title">{{ tabPaneItem.tabPaneHeadLeftTitle }}</div>
+                      </div>
+
+                      <!-- 大类节点名称 -->
+                      <div class="tabpane-head-right">{{ tabPaneItem.tabPaneHeadRight }}</div>
+                    </div>
+                  </el-col>
+                  <el-col :span="24">
+                    <div class="roc-tabpane-line"></div>
+                  </el-col>
+                  <el-col :span="24">
+                    <div class="roc-tabpane-step">
+                      <el-row>
+                        <el-col
+                          v-for="(tabpaneStepItem, tabpaneStepIndex) in tabPaneItem.tabpaneStepList"
+                          :key="tabpaneStepItem.elcolKey + '-' +tabpaneStepIndex"
+                          :span="24"
+                        >
+                          <el-row>
+                            <el-col
+                              :span="24"
+                              :style="tabpaneStepItem.elcolStyle ? tabpaneStepItem.elcolStyle : ''"
+                            >
+                              <div class="roc-tabpane-step-item">
+                                <!-- 小类节点步骤 -->
+                                <div class="step-item-left">{{ tabpaneStepItem.stepItemLeft }}</div>
+                                <div class="step-item-right">
+                                  <el-row>
+                                    <el-col :span="24">
+                                      <!-- 小类节点标题 -->
+                                      <div
+                                        class="step-item-right-title"
+                                      >{{ tabpaneStepItem.stepItemRightTitle }}</div>
+
+                                      <!-- 小节点内容 -->
+                                      <div class="step-item-right-container">
+                                        <el-row :gutter="20">
+                                          <el-col
+                                            v-for="(stepItemRightItem, stepItemRightIndex) in tabpaneStepItem.stepItemRightList"
+                                            :key="stepItemRightItem.stepItemColProp + '-' + stepItemRightIndex"
+                                            :span="stepItemRightItem.stepItemColSpan"
+                                            :style="stepItemRightItem.stepItemColStyle ? stepItemRightItem.stepItemColStyle : ''"
+                                          >
+                                            <!-- 纯内容展示模式 -->
+                                            <template
+                                              v-if="stepItemRightItem.stepItemColType === 'CONTENT'"
+                                            >
+                                              <template
+                                                v-if="stepItemRightItem.stepItemColPropType === 'DATEPICKER'"
+                                              >
+                                                <div
+                                                  class="step-item-right-container_content"
+                                                >{{ stepItemRightItem.stepItemColLable }}{{ parseTime(viewFullPartyInfoObj[stepItemRightItem.stepItemColProp], '{y}年{m}月{d}日') }}</div>
+                                              </template>
+                                              <template
+                                                v-else-if="stepItemRightItem.stepItemColPropType === 'RADIORESULT'"
+                                              >
+                                                <div
+                                                  class="step-item-right-container_content"
+                                                >{{ stepItemRightItem.stepItemColLable }}{{ (viewFullPartyInfoObj[stepItemRightItem.stepItemColProp] === 0 )? '未通过' : ((viewFullPartyInfoObj[stepItemRightItem.stepItemColProp] === 1) ? '通过' : '待更新')}}</div>
+                                              </template>
+                                              <template v-else>
+                                                <div
+                                                  class="step-item-right-container_content"
+                                                >{{ stepItemRightItem.stepItemColLable }}{{ viewFullPartyInfoObj[stepItemRightItem.stepItemColProp] }}</div>
+                                              </template>
+                                            </template>
+
+                                            <!-- PDF文件模式 -->
+                                            <template
+                                              v-else-if="stepItemRightItem.stepItemColType === 'VIEWPDFFILE'"
+                                            >
+                                              <div class="step-item-right-container_viewpdffile">
+                                                <div
+                                                  class="viewpdffile-label"
+                                                >{{ stepItemRightItem.stepItemColLable }}</div>
+                                                <div
+                                                  class="viewpdffile-view"
+                                                  @click="handleViewPageCheckClick(viewFullPartyInfoObj[stepItemRightItem.stepItemColProp], stepItemRightItem.stepItemColPdfFileName)"
+                                                >查看</div>
+                                                <div
+                                                  class="viewpdffile-download"
+                                                  @click="handleViewPageDownloadClick(viewFullPartyInfoObj[stepItemRightItem.stepItemColProp], stepItemRightItem.stepItemColPdfFileName)"
+                                                >下载</div>
+                                              </div>
+                                            </template>
+
+                                            <!-- 不存在模式 -->
+                                            <template v-else>
+                                              <div>&nbsp;</div>
+                                            </template>
+                                          </el-col>
+                                        </el-row>
+                                      </div>
+                                    </el-col>
+                                  </el-row>
+                                </div>
+                              </div>
+                            </el-col>
+
+                            <!-- 节点链接线 -->
+                            <el-col :span="24">
+                              <div
+                                class="roc-tabpane-step-tail"
+                                :style="tabpaneStepItem.stepItemTailStyle ? tabpaneStepItem.stepItemTailStyle : ''"
+                              ></div>
+                            </el-col>
+                          </el-row>
+                        </el-col>
+                      </el-row>
+                    </div>
+                  </el-col>
+                </el-row>
+              </div>
+            </el-tab-pane>
+          </el-tabs>
+        </div>
+      </el-col>
+    </el-row>
+    <div class="pagefooter-btngroup">
+      <el-button
+        type="rocpartyprimaryplainbtn"
+        icon="el-icon-circle-close"
+        class="mr20"
+        @click="handlePageCloseClick"
+      >关 闭</el-button>
+    </div>
+
+    <!-- PDF 文件预览对话框 -->
+    <roc-vue-pdf-dialog
+      v-if="pdfDialogVisible"
+      :visible.sync="pdfDialogVisible"
+      :dialog-title="viewPdfFileObj.fileName"
+      :pdfUrl="viewPdfFileObj.filePath"
+    ></roc-vue-pdf-dialog>
+  </div>
+</template>
+
+<script>
+import EleObjArr from './JsonData/EleObjArr';
+import NodeDataObj from '@/views/PartyBuildingMgr/PartyMemberDevelop/JsonData/NodeDataObj';
+import AtStageNodeDataObj from '@/views/PartyBuildingMgr/PartyMemberDevelop/JsonData/AtStageNodeDataObj';
+import {
+  viewDetailFullPartyMember,
+} from "@/api/PartyBuildingMgr/FullPartyMember";
+import { regularDownloadPdfFile } from "@/utils/rockeryutil";
+
+export default {
+  name: "Partymemberdetails",
+  components: {
+    'roc-vue-pdf-dialog': () => import('@/components/RocVuePdfDialog')
+  },
+  props: {
+    id: {
+      type: [String, Number],
+      default: null
+    }
+  },
+  data() {
+    return {
+      // 学历选项列表
+      educationOptions: [],
+      tabsModel: 'APPLY',
+      viewFullPartyInfoObj: {
+        thoughtReportRecordList: []
+      },
+      viewPdfFileObj: {},
+      pdfDialogVisible: false,
+      innerWidth: window.innerWidth,
+      tabsEleObjList: [...EleObjArr],
+      nodeDataObj: { ...NodeDataObj },
+      atStageNodeDataObj: { ...AtStageNodeDataObj },
+    };
+  },
+  watch: {
+    innerWidth: {
+      immediate: true,
+      handler(newValue) { }
+    }
+  },
+  computed: {
+    currentId() {
+      return this.id;
+    }
+  },
+  created() {
+    this.initData();
+  },
+  mounted() {
+    window.addEventListener(
+      "resize",
+      () => {
+        return (() => {
+          this.innerWidth = window.innerWidth;
+        })();
+      }
+    );
+  },
+  methods: {
+    /**
+    * 初始化数据
+    */
+    async initData() {
+      await this.getMainOptions();
+      this.getViewDetailData();
+    },
+    /**
+     * 获取主要选项列表
+     */
+    async getMainOptions() {
+      // 学历选项列表
+      await this.getDicts('party_full_education').then(response => {
+        this.educationOptions = response?.data || [];
+      });
+    },
+    /**
+     * 学历选项格式化
+     */
+    educationFormat(row) {
+      return this.selectDictLabel(this.educationOptions, row?.education);
+    },
+    /**
+     * 获取信息详情
+     */
+    getViewDetailData() {
+      viewDetailFullPartyMember({ memberId: this.currentId }).then((viewResp) => {
+        // 初始化数据
+        let tempFormModel = {};
+
+        // 分离数据
+        const { partyMember, flowPointPo } = viewResp.data || {};
+        const { place, address, ...otherPartyMember } = partyMember || {};
+        const { thoughtReportRecord, publicTime, readyDeadline, readyDeadline1, publicTime1, ...otherFlowPointPo } = flowPointPo || {};
+
+        // 籍贯数据
+        if (place) {
+          let placeArr = place.split(',') || [];
+          (placeArr.length === 2) && (tempFormModel.placeStr = `${placeArr[0] || ''}${placeArr[1] || ''}`);
+        }
+
+        // 现居地数据
+        if (address) {
+          let addressArr = address.split(',') || [];
+          if (addressArr.length >= 3) {
+            tempFormModel.addressStr = `${addressArr[0] || ''}${addressArr[1] || ''}${addressArr[2] || ''}${addressArr[3] || ''}`;
+          }
+        }
+
+        // 第7步 思想汇报数据
+        tempFormModel.thoughtReportRecordList = [];
+        if (thoughtReportRecord && thoughtReportRecord?.length > 0) {
+          tempFormModel.thoughtReportRecordList = [...thoughtReportRecord];
+        }
+
+        // 第10步 公示时间数据
+        if (publicTime) {
+          let publicTimeArr = publicTime.split('~') || [];
+          (publicTimeArr.length === 2) && (tempFormModel.publicTimeRange = [publicTimeArr[0], publicTimeArr[1]]);
+        }
+
+        // 第16步 预备期数据
+        if (readyDeadline) {
+          let readyDeadlineArr = readyDeadline.split('~') || [];
+          (readyDeadlineArr.length === 2) && (tempFormModel.readyDeadlineRange = [readyDeadlineArr[0], readyDeadlineArr[1]]);
+        }
+
+        // 第21步 预备期数据
+        if (readyDeadline1) {
+          let readyDeadline1Arr = readyDeadline1.split('~') || [];
+          (readyDeadline1Arr.length === 2) && (tempFormModel.readyDeadline1Range = [readyDeadline1Arr[0], readyDeadline1Arr[1]]);
+        }
+
+        // 第25步 公示时间数据
+        if (publicTime1) {
+          let publicTime1Arr = publicTime1.split('~') || [];
+          (publicTime1Arr.length === 2) && (tempFormModel.publicTime1Range = [publicTime1Arr[0], publicTime1Arr[1]]);
+        }
+
+        tempFormModel = {
+          ...tempFormModel,
+          ...otherPartyMember,
+          ...otherFlowPointPo
+        };
+
+        // 移除tempFormModel对象的属性没有值的元素
+        Object.keys(tempFormModel).forEach(item => {
+          ((tempFormModel[item] !== 0) && (!tempFormModel[item] || JSON.stringify(tempFormModel[item]) === '{}' || JSON.stringify(tempFormModel[item]) === '[]')) && (delete tempFormModel[item]);
+        });
+
+        this.viewFullPartyInfoObj = { ...tempFormModel };
+      });
+    },
+    /**
+     * 页面取消按钮事件
+     */
+    handlePageCloseClick() {
+      this.formObj = {
+        ...this.formObj,
+        formModel: {
+          checkList: [],
+          selected: []
+        }
+      };
+      this.$emit("page-close", 'LIST');
+    },
+    /**
+     * PDF文件查看按钮事件
+     */
+    handleViewPageCheckClick(pdfFilePath, pdfFileName = 'pdf-file') {
+      if (!pdfFilePath) return;
+      const filePath = `${window.origin}${process.env.VUE_APP_FILE_VIEW_API}${pdfFilePath}`;
+      const fileName = `${pdfFileName}-PDF文件预览`;
+      this.viewPdfFileObj = {
+        filePath,
+        fileName
+      };
+      this.pdfDialogVisible = true;
+    },
+    /**
+     * PDF文件下载按钮事件
+     */
+    handleViewPageDownloadClick(pdfFilePath, pdfFileName = 'pdf-file') {
+      if (!pdfFilePath) return;
+      regularDownloadPdfFile(`${window.origin}${process.env.VUE_APP_FILE_VIEW_API}${pdfFilePath}`, pdfFileName);
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import "./scss/PartyMemberDetails.scss";
+</style>

+ 393 - 0
src/components/PartyMemberDetails/scss/PartyMemberDetails.scss

@@ -0,0 +1,393 @@
+.partymemberdetails {
+  &-head {
+    padding: 20px 30px 65px;
+    margin-bottom: 20px;
+    background: url("../../assets/images/home-head-img.png"), #ffffff;
+    background-size: 67px 67px, cover;
+    background-position: right 5px bottom 5px, center;
+    background-repeat: no-repeat, no-repeat;
+    border-radius: 10px;
+
+    &-title {
+      display: flex;
+      align-items: center;
+
+      div {
+        &:first-child {
+          height: 37px;
+          line-height: 37px;
+        }
+
+        &:last-child {
+          margin-left: 15px;
+          height: 37px;
+          font-size: 26px;
+          font-weight: 400;
+          color: #4f4f4f;
+          line-height: 37px;
+          letter-spacing: 1px;
+        }
+
+        img {
+          width: 34px;
+          height: 34px;
+        }
+      }
+    }
+
+    &-subtitle {
+      margin-top: 20px;
+      width: 100%;
+      height: 25px;
+      font-size: 18px;
+      font-weight: 400;
+      color: #4f4f4f;
+      line-height: 25px;
+    }
+
+    &-basic {
+      display: flex;
+      margin-top: 15px;
+
+      &-personphoto {
+        img {
+          width: 101px;
+          height: 129px;
+        }
+      }
+
+      &-info {
+        margin-left: 16px;
+
+        .basic-info-first {
+          font-size: 20px;
+          font-weight: bold;
+          color: #111111;
+          line-height: 21px;
+          opacity: 0.8;
+        }
+
+        .basic-info-second {
+          margin-top: 5px;
+          font-size: 14px;
+          font-weight: 400;
+          color: #4f4f4f;
+          line-height: 20px;
+          opacity: 0.9;
+
+          .basic-info-divider {
+            margin: 0 5px;
+            width: 15px;
+            font-size: 14px;
+            font-weight: 400;
+            color: #d8d8d8;
+            line-height: 20px;
+          }
+        }
+
+        .basic-info-third {
+          margin-top: 5px;
+          font-size: 14px;
+          font-weight: 400;
+          color: #4f4f4f;
+          line-height: 20px;
+          opacity: 0.9;
+
+          .basic-info-address {
+            margin-left: 16px;
+          }
+        }
+
+        .basic-info-fourth {
+          display: flex;
+          align-items: center;
+          margin-top: 15px;
+          line-height: 40px;
+
+          .basic-info-fourth-label {
+            font-size: 14px;
+            font-weight: 400;
+            color: #4f4f4f;
+            line-height: 20px;
+          }
+
+          .basic-info-fourth-info {
+            margin-left: 15px;
+            width: 32px;
+            font-size: 14px;
+            font-weight: 400;
+            color: #0090f7;
+            line-height: 20px;
+            cursor: pointer;
+            
+            &:hover {
+              text-decoration: underline;
+            }
+          }
+        }
+
+        .basic-info-fifth {
+          margin-top: 10px;
+          font-size: 14px;
+          font-weight: 400;
+          color: #000000;
+          line-height: 20px;
+        }
+
+        .basic-info-sixth {
+          margin-top: 5px;
+          font-size: 14px;
+          font-weight: 400;
+          color: #4f4f4f;
+          line-height: 20px;
+        }
+      }
+    }
+
+    &-divider {
+      margin: 22px 0;
+      width: 100%;
+      height: 1px;
+      border: 1px solid #e1e1e1;
+    }
+
+    &-desc {
+      height: 25px;
+      font-size: 18px;
+      font-weight: 400;
+      color: #4f4f4f;
+      line-height: 25px;
+      opacity: 0.9;
+    }
+
+    &-stage {
+      margin-top: 12px;
+
+      .head-stage-current,
+      .head-stage-future {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        width: 100%;
+        min-height: 61px;
+        background: #fffaf1;
+        border-radius: 5px;
+
+        span {
+          font-size: 18px;
+          font-weight: 400;
+          color: #a48043;
+          line-height: 25px;
+        }
+      }
+    }
+  }
+
+  &-main {
+    padding: 20px 30px 65px;
+    margin-bottom: 20px;
+    background: url("../../assets/images/home-head-img.png"), #ffffff;
+    background-size: 67px 67px, cover;
+    background-position: right 5px bottom 5px, center;
+    background-repeat: no-repeat, no-repeat;
+    border-radius: 10px;
+
+    &-tabs.el-tabs {
+      margin-top: 20px;
+
+      ::v-deep {
+        .el-tabs__item {
+          font-size: 18px;
+          font-weight: 500;
+          color: #4f4f4f;
+          opacity: 0.9;
+        }
+
+        .el-tabs__active-bar {
+          background-color: #de0010;
+        }
+
+        .el-tabs__item {
+          &:hover {
+            color: #de0010;
+          }
+
+          &.is-active {
+            color: #de0010;
+            background: #f9e9ea;
+          }
+        }
+      }
+    }
+
+    .roc-tabpane {
+      display: block;
+      width: 100%;
+      min-height: 600px;
+
+      &-head {
+        display: flex;
+        align-items: center;
+        width: 100%;
+        height: 94px;
+
+        .tabpane-head-left {
+          display: flex;
+          align-items: center;
+          justify-content: center;
+          width: 94px;
+          height: 94px;
+          border: 4px solid #de0010;
+          border-radius: 50%;
+
+          &.is-active {
+            border: 4px solid #979797;
+          }
+
+          &-title {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            width: 78px;
+            height: 78px;
+            background: #de0010;
+            border-radius: 50%;
+            font-size: 30px;
+            font-weight: 800;
+            color: #ffffff;
+            line-height: 42px;
+            letter-spacing: 1px;
+
+            &.is-active {
+              background: #979797;
+            }
+          }
+        }
+        .tabpane-head-right {
+          margin-left: 15px;
+          height: 50px;
+          font-size: 36px;
+          font-weight: 400;
+          color: #111111;
+          line-height: 50px;
+          letter-spacing: 1px;
+        }
+      }
+
+      &-line {
+        margin-left: 46px;
+        width: 1px;
+        height: 46px;
+        border: 2px solid #de0010;
+
+        &.is-active {
+          border: 2px solid #979797;
+        }
+      }
+
+      &-step {
+        width: 100%;
+
+        &-item {
+          display: flex;
+          width: 100%;
+
+          .step-item-left {
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            margin-left: 16px;
+            width: 62px;
+            height: 62px;
+            color: #de0010;
+            border: 2px solid #de0010;
+            border-radius: 50%;
+            font-size: 36px;
+            font-weight: 400;
+            line-height: 50px;
+            letter-spacing: 1px;
+
+            &.is-active {
+              color: #979797;
+              border: 2px solid #979797;
+            }
+          }
+
+          .step-item-right {
+            flex: 1;
+            margin-left: 10px;
+            padding-bottom: 10px;
+
+            &-title {
+              margin-top: 10px;
+              margin-bottom: 8px;
+              height: 28px;
+              font-size: 20px;
+              font-weight: 400;
+              color: #111111;
+              line-height: 28px;
+            }
+
+            &-container {
+              &_content {
+                height: 22px;
+                font-size: 16px;
+                font-weight: 400;
+                color: #616161;
+                line-height: 22px;
+                opacity: 0.9;
+              }
+
+              &_viewpdffile {
+                display: flex;
+                align-items: center;
+                justify-content: right;
+                width: 100%;
+
+                .viewpdffile-label {
+                  margin-right: 20px;
+                  height: 22px;
+                  font-size: 16px;
+                  font-weight: 400;
+                  color: #111111;
+                  line-height: 22px;
+                  opacity: 0.8;
+                }
+
+                .viewpdffile-view,
+                .viewpdffile-download {
+                  height: 22px;
+                  font-size: 16px;
+                  font-weight: 400;
+                  color: #0090f7;
+                  line-height: 22px;
+                  opacity: 0.9;
+                  cursor: pointer;
+
+                  &:hover {
+                    text-decoration: underline;
+                  }
+                }
+
+                .viewpdffile-view {
+                  margin-right: 25px;
+                }
+              }
+            }
+          }
+        }
+
+        &-tail {
+          position: absolute;
+          margin-left: 46px;
+          width: 2px;
+          border: 2px solid #de0010;
+
+          &.is-active {
+            border: 2px solid #979797;
+          }
+        }
+      }
+    }
+  }
+}

+ 1 - 2
src/components/RocVuePdfDialog/index.vue

@@ -3,7 +3,7 @@
  * @Author: Rockery
  * @Date: 2021-12-13 17:40:22
  * @LastEditors: Rockery
- * @LastEditTime: 2022-01-18 14:28:01
+ * @LastEditTime: 2022-01-19 10:01:57
  * @FilePath: \party_construct_web\src\components\RocVuePdfDialog\index.vue
  * @Copyright: Copyright (c) 2016~2021 Rockery(1113269755@qq.com)
 -->
@@ -15,7 +15,6 @@
       :visible.sync="currentVisible"
       width="60%"
       append-to-body
-      :destroy-on-close="true"
       class="rocvuepdfdialog-dialog"
       @close="handleCloseDialogClick"
     >

+ 4 - 4
src/components/UpdatePartyDevelop/JsonData/IsDisabledDataObj.js

@@ -42,13 +42,13 @@ module.exports = {
   submitRecordRequestFile: ['meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 5 批复结果
-  replyResult: ['meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
+  replyResult: ['submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 5 获得批复的时间
-  replyTime: ['replyResult', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
+  replyTime: ['submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'replyResult', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 5 确定为入党积极分子的批复
-  replyFile: ['replyResult', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
+  replyFile: ['submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'replyResult', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 6 确定为积极分子的时间
   confirmActiveMemberTime: ['replyFile', 'replyTime', 'replyResult', 'submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
@@ -72,7 +72,7 @@ module.exports = {
   thoughtReportBtn: ['cultivateEducationRecordFile', 'confirmActiveMemberTime', 'replyFile', 'replyTime', 'replyResult', 'submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 8 听取意见时间
-  listenToTime: ['thoughtReportRecordList','courseCompletionFile', 'courseCompletionTime', 'cultivateEducationRecordFile', 'confirmActiveMemberTime', 'replyFile', 'replyTime', 'replyResult', 'submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
+  listenToTime: ['thoughtReportRecordList', 'courseCompletionFile', 'courseCompletionTime', 'cultivateEducationRecordFile', 'confirmActiveMemberTime', 'replyFile', 'replyTime', 'replyResult', 'submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],
 
   // 8 听取意见记录
   listenToFile: ['courseCompletionFile', 'courseCompletionTime', 'cultivateEducationRecordFile', 'confirmActiveMemberTime', 'replyFile', 'replyTime', 'replyResult', 'submitRecordRequestFile', 'submitRecordRequestTime', 'branchPartyMeetingFile', 'branchPartyMeetingTime', 'meetingResult', 'referrePageFile', 'referreTime', 'referrer', 'cardOrRegisterBookFile', 'talkPageFile', 'partyArrangeTalkTime', 'addPartyPageFile', 'submitAddPartyPageTime', 'name'],

+ 26 - 3
src/components/UpdatePartyDevelop/index.vue

@@ -3,7 +3,7 @@
  * @Author: Rockery
  * @Date: 2021-12-15 17:54:05
  * @LastEditors: Rockery
- * @LastEditTime: 2022-01-18 18:00:45
+ * @LastEditTime: 2022-01-19 17:12:39
  * @FilePath: \party_construct_web\src\components\UpdatePartyDevelop\index.vue
  * @Copyright: Copyright (c) 2016~2021 Rockery(1113269755@qq.com)
 -->
@@ -3353,6 +3353,9 @@ export default {
         this.getViewDetailDataByEdit();
       }
     },
+    /**
+     * 编辑模式获取信息详情
+     */
     getViewDetailDataByEdit() {
       this.currentMemberId = this.currentId;
       viewDetailFullPartyMember({ memberId: this.currentMemberId }).then((viewResp) => {
@@ -3479,7 +3482,7 @@ export default {
      * 获取主要选项列表
      */
     async getMainOptions() {
-      // 性别选项列表
+      // 学历选项列表
       await this.getDicts('party_full_education').then(response => {
         this.educationOptions = response?.data || [];
       });
@@ -3695,9 +3698,13 @@ export default {
                   });
 
                   // 保存流程步骤信息
-                  addFullPartyMemberProgressInfo(progressInfoReq).then((progressResp) => {
+                  addFullPartyMemberProgressInfo(progressInfoReq).then(async (progressResp) => {
                     if (progressResp.code === 200) {
 
+                      if (this.currentUpdateType === 'REACTIVATE' && this.getReactivateFlag({ ...this.viewFullPartyInfoObj })) {
+                        await this.getReactivateFullPartyMember(progressInfoReq.memberId);
+                      }
+
                       // 检查过程与资料完整性
                       if (eventFlag === 'CHECKPROCESS') {
                         checkProgressAndCompletion({ memberId: this.currentMemberId }).then((checkResp) => {
@@ -4415,6 +4422,22 @@ export default {
       // 非编辑模式
       return this.getEleIsDisabled(this.disabledDataObj['submitTime']);
     },
+    /**
+     * 重新激活操作
+     */
+    async getReactivateFullPartyMember(memberId) {
+      await reactivateFullPartyMember({ memberId: memberId });
+    },
+    /**
+     * 获取重新激活标志
+     */
+    getReactivateFlag(param) {
+      if ((param.step === 27 && param.replyResult3 === 0) || (param.step === 20 && param.replyResult2 === 0) || (param.step === 19 && param.replyResult1 === 0) || (param.step === 14 && param.readyCheckReplyResult === 0) || (param.step === 13 && param.checkResult === 0) || (param.step === 10 && param.recordsReplyResult === 0) || (param.step === 9 && param.branchPartyMeetingResult1 === 0) || (param.step === 5 && param.replyResult === 0) || (param.step === 5 && param.meetingResult === 0)) {
+        return true;
+      }
+
+      return false;
+    }
   }
 }
 </script>

+ 15 - 13
src/views/PartyBuildingMgr/PartyMemberDevelop/PartyMemberDevelopIndex.vue

@@ -3,7 +3,7 @@
  * @Author: Rockery
  * @Date: 2021-12-10 10:37:47
  * @LastEditors: Rockery
- * @LastEditTime: 2022-01-18 17:59:35
+ * @LastEditTime: 2022-01-19 16:12:10
  * @FilePath: \party_construct_web\src\views\PartyBuildingMgr\PartyMemberDevelop\PartyMemberDevelopIndex.vue
  * @Copyright: Copyright (c) 2016~2021 Rockery(1113269755@qq.com)
 -->
@@ -232,11 +232,7 @@
             <div>党员发展管理</div>
           </div>
         </div>
-        <party-member-details
-          :operate-type.sync="operateType"
-          @page-submit="handleAddPageSubmitClick"
-          @page-close="handleAddPageCloseClick"
-        />
+        <party-member-details :id="currentRow.id" @page-close="handleViewPageCloseClick" />
       </div>
     </template>
     <template v-else>
@@ -379,13 +375,10 @@ export default {
      */
     handleReactivateClick(row) {
       if (!row.id) return;
-      // this.pageType = 'ADD';
-      // this.operateType = 'EDIT';
-      // this.updateType = 'REACTIVATE';
-      // this.currentRow = row;
-
-      reactivateFullPartyMember({ memberId: row.id }).then(() => {
-      });
+      this.pageType = 'ADD';
+      this.operateType = 'EDIT';
+      this.updateType = 'REACTIVATE';
+      this.currentRow = row;
     },
     /**
      * 更新按钮事件
@@ -401,7 +394,9 @@ export default {
      * 详情按钮事件
      */
     handleViewClick(row) {
+      if (!row.id) return;
       this.pageType = 'VIEW';
+      this.currentRow = row;
     },
     /**
      * 删除按钮操作
@@ -435,6 +430,13 @@ export default {
     handleAddPageCloseClick(param) {
       this.pageType = param;
       this.initData();
+    },
+    /**
+     * 详情页面关闭按钮事件
+     */
+    handleViewPageCloseClick(param) {
+      this.pageType = param;
+      this.initData();
     }
   }
 };

+ 207 - 149
src/views/index.vue

@@ -1,173 +1,207 @@
 <template>
   <div class="app-container home">
-    <div class="home-head">
-      <el-row :gutter="20">
-        <el-col :xs="12" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
-          <div class="home-head-left">
-            <div class="head-left-top">
-              <div class="head-left-top-title">渔安街道党组织</div>
-              <div
-                class="head-left-top-subtitle"
-              >上次登录时间:{{ parseTime($store.getters.loginDate, '{y}年{m}月{d}日 {h}:{i}:{s}') || '—' }}</div>
-            </div>
-            <div class="head-left-middle">
-              <div class="head-left-middle-avatar">
-                <img :src="$store.getters.avatar" @error="imgViewerOnerror" />
+    <template v-if="pageType === 'LIST'">
+      <div class="home-head">
+        <el-row :gutter="20">
+          <el-col :xs="12" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+            <div class="home-head-left">
+              <div class="head-left-top">
+                <div class="head-left-top-title">渔安街道党组织</div>
+                <div
+                  class="head-left-top-subtitle"
+                >上次登录时间:{{ parseTime($store.getters.loginDate, '{y}年{m}月{d}日 {h}:{i}:{s}') || '—' }}</div>
+              </div>
+              <div class="head-left-middle">
+                <div class="head-left-middle-avatar">
+                  <img :src="$store.getters.avatar" @error="imgViewerOnerror" />
+                </div>
+                <div class="head-left-middle-name">{{ $store.getters.nickName || '—' }}</div>
+                <div class="head-left-middle-role">{{ $store.getters.roleName || '—' }}</div>
               </div>
-              <div class="head-left-middle-name">{{ $store.getters.nickName || '—' }}</div>
-              <div class="head-left-middle-role">{{ $store.getters.roleName || '—' }}</div>
             </div>
-          </div>
-        </el-col>
-        <el-col :xs="12" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
-          <div class="home-head-right">
-            <el-row :gutter="10" type="flex" class="row-bg" justify="center">
-              <el-col :span="6">
-                <div class="home-head-right_item">
-                  <div class="home-head-right_item-title">正式党员数</div>
-                  <div class="home-head-right_item-content">
-                    <div
-                      v-if="countsObj.formalCounts !== null && countsObj.formalCounts !== undefined"
-                    >
-                      <div class="formal">
-                        <countTo :startVal="0" :endVal="countsObj.formalCounts" :duration="3000"></countTo>
+          </el-col>
+          <el-col :xs="12" :sm="24" :md="24" :lg="12" :xl="12" class="mb20">
+            <div class="home-head-right">
+              <el-row :gutter="10" type="flex" class="row-bg" justify="center">
+                <el-col :span="6">
+                  <div class="home-head-right_item">
+                    <div class="home-head-right_item-title">正式党员数</div>
+                    <div class="home-head-right_item-content">
+                      <div
+                        v-if="countsObj.formalCounts !== null && countsObj.formalCounts !== undefined"
+                      >
+                        <div class="formal">
+                          <countTo :startVal="0" :endVal="countsObj.formalCounts" :duration="3000"></countTo>
+                        </div>
+                        <div>人</div>
                       </div>
-                      <div>人</div>
+                      <div v-else>—</div>
                     </div>
-                    <div v-else>—</div>
                   </div>
-                </div>
-              </el-col>
-              <el-col :span="6">
-                <div class="home-head-right_item">
-                  <div class="home-head-right_item-title">预备党员数</div>
-                  <div class="home-head-right_item-content">
-                    <div
-                      v-if="countsObj.readyCounts !== null && countsObj.readyCounts !== undefined"
-                    >
-                      <div class="prep">
-                        <countTo :startVal="0" :endVal="countsObj.readyCounts" :duration="3000"></countTo>
+                </el-col>
+                <el-col :span="6">
+                  <div class="home-head-right_item">
+                    <div class="home-head-right_item-title">预备党员数</div>
+                    <div class="home-head-right_item-content">
+                      <div
+                        v-if="countsObj.readyCounts !== null && countsObj.readyCounts !== undefined"
+                      >
+                        <div class="prep">
+                          <countTo :startVal="0" :endVal="countsObj.readyCounts" :duration="3000"></countTo>
+                        </div>
+                        <div>人</div>
                       </div>
-                      <div>人</div>
+                      <div v-else>—</div>
                     </div>
-                    <div v-else>—</div>
                   </div>
-                </div>
-              </el-col>
-              <el-col :span="6">
-                <div class="home-head-right_item">
-                  <div class="home-head-right_item-title">发展党员数</div>
-                  <div class="home-head-right_item-content">
-                    <div
-                      v-if="countsObj.progressCounts !== null && countsObj.progressCounts !== undefined"
-                    >
-                      <div class="develop">
-                        <countTo :startVal="0" :endVal="countsObj.progressCounts" :duration="3000"></countTo>
+                </el-col>
+                <el-col :span="6">
+                  <div class="home-head-right_item">
+                    <div class="home-head-right_item-title">发展党员数</div>
+                    <div class="home-head-right_item-content">
+                      <div
+                        v-if="countsObj.progressCounts !== null && countsObj.progressCounts !== undefined"
+                      >
+                        <div class="develop">
+                          <countTo
+                            :startVal="0"
+                            :endVal="countsObj.progressCounts"
+                            :duration="3000"
+                          ></countTo>
+                        </div>
+                        <div>人</div>
                       </div>
-                      <div>人</div>
+                      <div v-else>—</div>
                     </div>
-                    <div v-else>—</div>
                   </div>
-                </div>
-              </el-col>
-              <el-col :span="6">
-                <div class="home-head-right_item">
-                  <div class="home-head-right_item-title">积极分子数</div>
-                  <div class="home-head-right_item-content">
-                    <div
-                      v-if="countsObj.activeCounts !== null && countsObj.activeCounts !== undefined"
-                    >
-                      <div class="positive">
-                        <countTo :startVal="0" :endVal="countsObj.activeCounts" :duration="3000"></countTo>
+                </el-col>
+                <el-col :span="6">
+                  <div class="home-head-right_item">
+                    <div class="home-head-right_item-title">积极分子数</div>
+                    <div class="home-head-right_item-content">
+                      <div
+                        v-if="countsObj.activeCounts !== null && countsObj.activeCounts !== undefined"
+                      >
+                        <div class="positive">
+                          <countTo :startVal="0" :endVal="countsObj.activeCounts" :duration="3000"></countTo>
+                        </div>
+                        <div>人</div>
                       </div>
-                      <div>人</div>
+                      <div v-else>—</div>
                     </div>
-                    <div v-else>—</div>
                   </div>
-                </div>
-              </el-col>
-            </el-row>
-          </div>
-        </el-col>
-      </el-row>
-    </div>
-
-    <div class="home-main">
-      <el-row :gutter="10">
-        <el-col :span="24">
-          <div class="home-main-title">
+                </el-col>
+              </el-row>
+            </div>
+          </el-col>
+        </el-row>
+      </div>
+
+      <div class="home-main">
+        <el-row :gutter="10">
+          <el-col :span="24">
+            <div class="home-main-title">
+              <div>
+                <img
+                  :src="require('@/assets/logo/home-main-title-logo.png')"
+                  @error="imgViewerOnerror"
+                />
+              </div>
+              <div>急需处理</div>
+            </div>
+          </el-col>
+          <el-col :span="24">
+            <div class="home-main-list">
+              <el-row :gutter="5">
+                <template v-if="list.length > 0">
+                  <el-col
+                    v-for="(item, index) in list"
+                    :key="'HOMEURGENCYLIST_' + item.id + index"
+                    :xs="16"
+                    :sm="12"
+                    :md="8"
+                    :lg="6"
+                    :xl="4"
+                    class="mb10"
+                  >
+                    <div class="home-main-list_card">
+                      <div class="home-main-list_card-basic">
+                        <img
+                          :src="item.personPhoto ? (viewPdfFileUrlPrefix + item.personPhoto) : require('@/assets/images/empty_img.png')"
+                          @error="imgViewerOnerror"
+                        />
+
+                        <div class="list_card-basic-info">
+                          <div class="list_card-basic-info-name">{{ item.name || '—' }}</div>
+                          <div class="list_card-basic-info-idcard">{{ item.cardNo || '—' }}</div>
+                          <div class="list_card-basic-info-sex">{{ item.sex || '—' }}</div>
+                        </div>
+                      </div>
+                      <div style="clear: both;"></div>
+                      <div class="home-main-list_card-stage">
+                        <div>所处阶段:</div>
+                        <div>{{ atStageNodeDataObj[item.atPoint] || '—' }}</div>
+                      </div>
+                      <div class="home-main-list_card-node">
+                        <div>待更新节点:</div>
+                        <div>{{ nodeDataObj[item.nextPoint] || '—' }}</div>
+                      </div>
+                      <div class="home-main-list_card-status">{{ item.descrption || '—' }}</div>
+                      <div class="home-main-list_card-btn">
+                        <el-button
+                          type="rocpartyprimarybtn"
+                          @click="handleImmediateProcessingClick(item)"
+                        >立即处理</el-button>
+                      </div>
+                    </div>
+                  </el-col>
+                </template>
+                <template v-else>
+                  <el-col :span="24">
+                    <div class="home-main-list-nodata">暂无数据</div>
+                  </el-col>
+                </template>
+              </el-row>
+            </div>
+          </el-col>
+          <el-col :span="24">
+            <pagination
+              v-show="total>0"
+              :total="total"
+              :pageSizes="[12, 24, 36, 48, 60]"
+              layout="total, prev, pager, next, jumper"
+              :page.sync="queryParams.pageNum"
+              :limit.sync="queryParams.pageSize"
+              @pagination="initData"
+            />
+          </el-col>
+        </el-row>
+      </div>
+    </template>
+    <template v-else-if="pageType === 'IMMEDIATEPROCESSING'">
+      <div class="toptitlepage">
+        <div class="toptitlepage-head">
+          <div class="toptitlepage-head-title">
             <div>
               <img
                 :src="require('@/assets/logo/home-main-title-logo.png')"
                 @error="imgViewerOnerror"
               />
             </div>
-            <div>急需处理</div>
-          </div>
-        </el-col>
-        <el-col :span="24">
-          <div class="home-main-list">
-            <el-row :gutter="5">
-              <template v-if="list.length > 0">
-                <el-col
-                  v-for="(item, index) in list"
-                  :key="'HOMEURGENCYLIST_' + item.id + index"
-                  :xs="16"
-                  :sm="12"
-                  :md="8"
-                  :lg="6"
-                  :xl="4"
-                  class="mb10"
-                >
-                  <div class="home-main-list_card">
-                    <div class="home-main-list_card-basic">
-                      <img
-                        :src="viewPdfFileUrlPrefix + item.personPhoto ||  require('@/assets/images/empty_img.png')"
-                        @error="imgViewerOnerror"
-                      />
-
-                      <div class="list_card-basic-info">
-                        <div class="list_card-basic-info-name">{{ item.name || '—' }}</div>
-                        <div class="list_card-basic-info-idcard">{{ item.cardNo || '—' }}</div>
-                        <div class="list_card-basic-info-sex">{{ item.sex || '—' }}</div>
-                      </div>
-                    </div>
-                    <div style="clear: both;"></div>
-                    <div class="home-main-list_card-stage">
-                      <div>所处阶段:</div>
-                      <div>{{ atStageNodeDataObj[item.atPoint] || '—' }}</div>
-                    </div>
-                    <div class="home-main-list_card-node">
-                      <div>待更新节点:</div>
-                      <div>{{ nodeDataObj[item.nextPoint] || '—' }}</div>
-                    </div>
-                    <div class="home-main-list_card-status">{{ item.descrption || '—' }}</div>
-                    <div class="home-main-list_card-btn">
-                      <el-button type="rocpartyprimarybtn">立即处理</el-button>
-                    </div>
-                  </div>
-                </el-col>
-              </template>
-              <template v-else>
-                <el-col :span="24">
-                  <div class="home-main-list-nodata">暂无数据</div>
-                </el-col>
-              </template>
-            </el-row>
+            <div>首页(立即处理)</div>
           </div>
-        </el-col>
-        <el-col :span="24">
-          <pagination
-            v-show="total>0"
-            :total="total"
-            :pageSizes="[12, 24, 36, 48, 60]"
-            :page.sync="queryParams.pageNum"
-            :limit.sync="queryParams.pageSize"
-            @pagination="initData"
-          />
-        </el-col>
-      </el-row>
-    </div>
+        </div>
+        <update-party-develop
+          :id="currentRow.id"
+          operate-type="EDIT"
+          @page-submit="handleAddPageSubmitClick"
+          @page-close="handleAddPageCloseClick"
+        />
+      </div>
+    </template>
+    <template v-else>
+      <div>&nbsp;</div>
+    </template>
   </div>
 </template>
 
@@ -180,17 +214,20 @@ import { getCountsHome, getUrgencyListHome } from "@/api/home";
 export default {
   name: "index",
   components: {
-    countTo
+    countTo,
+    'update-party-develop': () => import('@/components/UpdatePartyDevelop')
   },
   data() {
     return {
+      pageType: 'LIST',
       total: 0,
       queryParams: {
         pageNum: 1,
-        pageSize: 12
+        pageSize: 6
       },
       list: [],
       countsObj: {},
+      currentRow: {},
       nodeDataObj: { ...NodeDataObj },
       atStageNodeDataObj: { ...AtStageNodeDataObj },
       viewPdfFileUrlPrefix: `${window.origin}${process.env.VUE_APP_FILE_VIEW_API}`
@@ -224,6 +261,27 @@ export default {
         this.total = response?.total ?? 0;
       });
     },
+    /**
+     * 立即处理按钮事件
+     */
+    handleImmediateProcessingClick(item) {
+      this.currentRow = item;
+      this.pageType = 'IMMEDIATEPROCESSING';
+    },
+    /**
+     * 信息录入页面保存按钮事件
+     */
+    handleAddPageSubmitClick(param) {
+      this.pageType = param;
+      this.initData();
+    },
+    /**
+     * 信息录入页面取消按钮事件
+     */
+    handleAddPageCloseClick(param) {
+      this.pageType = param;
+      this.initData();
+    }
   }
 };
 </script>