Forráskód Böngészése

1.机器设备报告生成所需基本信息相关页面开发

GouGengquan 7 hónapja
szülő
commit
c844f8f41a

+ 5 - 0
src/api/assetsCalculate.js

@@ -38,4 +38,9 @@ export function getCalculateBaseInfo(params) {
 // 根据测算表id获取评估基准日
 export function getValuationBasisDate(params) {
     return request.get(`/assetsCalculate/getValuationBasisDate/${params}`)
+}
+
+// 根据项目id获取测算信息下拉框数据
+export function getDropDownBoxData(params) {
+    return request.get(`/assetsCalculate/getDropDownBoxData/${params}`)
 }

+ 21 - 0
src/api/assetsReport.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+
+// 资产项目报告信息表新增
+export function createAssetsReport(params) {
+    return request.post('/assetsReport/save', params)
+}
+
+// 根据项目id获取未完成报告的进度信息
+export function getUnFinishedReportProgress(params) {
+    return request.get(`/assetsReport/getUnFinishedReportProgress/${params}`)
+}
+
+// 更新报告基础信息
+export function updateReportBaseInfo(params) {
+    return request.put('/assetsReport/updateReportBaseInfo', params)
+}
+
+// 根据报告id获取报告基础信息
+export function getReportBaseInfo(params) {
+    return request.get(`/assetsReport/getReportBaseInfo/${params}`)
+}

+ 33 - 0
src/router/index.js

@@ -23,6 +23,9 @@ import AssetsCalculateWorkbench from '@/views/assets/workbench/calculate/index.v
 import AssetsCalculateBaseInfo from '@/views/assets/workbench/calculate/baseInfo.vue'
 import AssetsCalculateImportInfo from '@/views/assets/workbench/calculate/importInfo.vue'
 import AssetsCalculateEqptBaseInfo from '@/views/assets/workbench/calculate/eqptBaseInfo.vue'
+import AssetsReportWorkbench from '@/views/assets/workbench/report/index.vue'
+import AssetsReportBaseInfo from '@/views/assets/workbench/report/baseInfo.vue'
+import AssetsReportEqptBaseInfo from '@/views/assets/workbench/report/eqptBaseInfo.vue'
 
 const routes = [
   {
@@ -54,6 +57,10 @@ const routes = [
     redirect: '/home/assets/folder'
   },
   {
+    path: '/home/assets/workbench/report',
+    redirect: '/home/assets/folder'
+  },
+  {
     path: '/home',
     component: Layout,
     name: 'home',
@@ -242,6 +249,32 @@ const routes = [
                 },
               },
             ]
+          },
+          {
+            path: 'workbench/report',
+            component: AssetsReportWorkbench,
+            name: 'assetsReportWorkbench',
+            meta: {
+              title: '文件夹'
+            },
+            children: [
+              {
+                path: 'baseInfo',
+                component: AssetsReportBaseInfo,
+                name: 'assetsReportBaseInfo',
+                meta: {
+                  title: '报告基本信息'
+                },
+              },
+              {
+                path: 'eqptBaseInfo',
+                component: AssetsReportEqptBaseInfo,
+                name: 'assetsReportEqptBaseInfo',
+                meta: {
+                  title: '生成报告'
+                },
+              },
+            ]
           }
         ],
       }

+ 10 - 2
src/stores/assetsProjectStore.js

@@ -5,8 +5,10 @@ export const assetsProjectInfo = defineStore('project', {
     state: () => ({
         // 项目信息
         projectInfo: null,
-        // 未完成测算表信息
-        calculateProgress: null
+        // 测算表进度信息
+        calculateProgress: null,
+        // 报告进度信息
+        reportProgress: null
     }),
     actions: {
         setProjectInfo(data) {
@@ -20,6 +22,12 @@ export const assetsProjectInfo = defineStore('project', {
         },
         removeCalculateProgress(){
             this.calculateProgress = null;
+        },
+        setReportProgress(data) {
+            this.reportProgress = data
+        },
+        removeReportProgress(){
+            this.reportProgress = null;
         }
     },
     persist: {

+ 21 - 1
src/views/assets/folder/child.vue

@@ -4,7 +4,7 @@
       <div class="title-div">
         <p>{{ projectStore.projectInfo.projectName }}</p>
       </div>
-      <div class="createNew-div">
+      <div class="createNew-div" @click="getReportProgress()">
         <img src="../../../assets/icons/word.png" style="width: 32px; height: 32px; float: left;margin-top: 22px;" />
         <span style="margin-left: 10px;">新的报告</span>
         <img src="../../../assets/icons/plus.png" style="width: 32px; height: 32px;float: right;margin-top: 22px;" />
@@ -55,6 +55,7 @@
 import { mapStores } from 'pinia'
 import { assetsProjectInfo } from '@/stores/assetsProjectStore';
 import { getUnFinishedCalculateProgress, listAllByProjectId } from '@/api/assetsCalculate';
+import { getUnFinishedReportProgress } from '@/api/assetsReport';
 import fileUtil from '@/utils/file'
 
 export default {
@@ -78,6 +79,9 @@ export default {
     createNewCalculate() {
       this.$router.push({ path: '/home/assets/workbench/calculate/baseInfo', query: { 'projectId': this.projectInfo.projectId } })
     },
+    createNewReport() {
+      this.$router.push({ path: '/home/assets/workbench/report/baseInfo', query: { 'projectId': this.projectInfo.projectId } })
+    },
     nextFolder() {
 
     },
@@ -99,6 +103,22 @@ export default {
         }
       })
     },
+    // 获取未完成报告的进度信息并保存到缓存
+    getReportProgress() {
+      getUnFinishedReportProgress(this.projectStore.projectInfo.id).then(res => {
+        if (res.data) {
+          // 根据不同进度跳转到不同步骤页面
+          if (res.data.progress === 'BASE' || res.data.progress === 'GENERATE') {
+            this.$router.push('/home/assets/workbench/report/eqptBaseInfo')
+          }
+          this.projectStore.setReportProgress(res.data);
+        } else {
+          // 为空说明没有未完成的报告,从头开始新建
+          this.createNewReport();
+          this.projectStore.removeReportProgress();
+        }
+      })
+    },
     // 前往测算表详情
     doCalculateBench(item) {
       this.projectStore.setCalculateProgress(item);

+ 125 - 0
src/views/assets/workbench/report/baseInfo.vue

@@ -0,0 +1,125 @@
+<template>
+    <div class="contrl">
+        <el-form ref="baseInfo" :model="baseInfo" label-width="auto" style="margin-top: 10px;" :rules="baseInfoRules">
+            <el-divider content-position="left"><span style="color:#ff6154;">基本信息</span></el-divider>
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="报告名:" class="form-item" prop="reportName">
+                        <el-input v-model="baseInfo.reportName" clearable style="width: 100%;" />
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="关联的测算表:" class="form-item" prop="calculateId">
+                        <el-select v-model="baseInfo.calculateId" placeholder="选择关联的测算表">
+                            <el-option v-for="item in dropDownBoxData" :key="item.id" :label="item.name" :value="item.id" />
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-button plain type="danger" style="float: right;" @click="createReport()">
+                下一步
+                <el-icon style="vertical-align: -20%;">
+                    <ArrowRightBold />
+                </el-icon>
+            </el-button>
+        </el-form>
+    </div>
+</template>
+
+<script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
+import { getDropDownBoxData } from '@/api/assetsCalculate';
+import { createAssetsReport, getUnFinishedReportProgress } from '@/api/assetsReport';
+export default {
+    data() {
+        return {
+            baseInfo: {
+
+            },
+            dropDownBoxData: [],
+            baseInfoRules: {
+                reportName: [
+                    { required: true, message: '请输入报告名', trigger: 'blur' }
+                ],
+                calculateId: [
+                    { required: true, message: '请选择关联的测算表', trigger: 'blur' }
+                ]
+            }
+        }
+    },
+    computed: {
+        ...mapStores(assetsProjectInfo),
+    },
+    created() {
+        this.getDropDownBoxData();
+        if(this.projectStore.reportProgress) {
+            this.baseInfo.id = this.projectStore.reportProgress.id;
+            this.baseInfo.projectId = this.projectStore.projectInfo.id;
+            this.baseInfo.reportName = this.projectStore.reportProgress.reportName;
+            this.baseInfo.calculateId = this.projectStore.reportProgress.calculateId;
+        }
+    },
+    methods: {
+        // 获取测算表信息下拉框数据
+        getDropDownBoxData() {
+            getDropDownBoxData(this.projectStore.projectInfo.id).then(res => {
+                if (res.data) {
+                    this.dropDownBoxData = res.data
+                }
+            })
+        },
+        // 创建测算表,填写测算表基础信息
+        createReport() {
+            this.$refs.baseInfo.validate((valid) => {
+                if (valid) {
+                    this.baseInfo.progress = 'BASE';
+                    this.baseInfo.projectId = this.projectStore.projectInfo.id;
+                    createAssetsReport(this.baseInfo).then(res => {
+                        if (res.code == 200) {
+                            ElMessage({
+                                showClose: true,
+                                message: res.message,
+                                type: 'success'
+                            })
+                            this.getReportProgress();
+                        }
+                    })
+                }
+            })
+        },
+        // 获取未完成报告的进度信息并保存到缓存
+        getReportProgress() {
+            getUnFinishedReportProgress(this.projectStore.projectInfo.id).then(res => {
+                if (res.data) {
+                    this.projectStore.setReportProgress(res.data);
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+.contrl {
+    font-size: 20px;
+    width: 75%;
+    border-right: 1.5px #dae1eb solid;
+    padding: 20px 20px 20px 0px;
+    float: left;
+
+}
+
+:deep(*) {
+    color-scheme: light;
+    --el-color-primary: #ff6154;
+    --el-color-primary-light-3: #ff7154;
+    --el-color-primary-light-5: #ff8154;
+    --el-color-primary-light-7: #ff9154;
+    --el-color-primary-light-8: #ffa999;
+    --el-color-primary-light-9: #ffa854;
+    --el-color-primary-dark-2: #ff8154;
+}
+</style>

+ 48 - 0
src/views/assets/workbench/report/components/bench.vue

@@ -0,0 +1,48 @@
+<template>
+  <section class="bench-main">
+    <router-view v-slot="{ Component }">
+      <transition>
+        <component :is="Component" />
+      </transition>
+    </router-view>
+  </section>
+</template>
+  
+<script>
+export default {
+  name: 'Bench',
+
+  watch: {
+    $route: {
+      deep: true,
+      immediate: true,
+      handler() {
+      },
+    },
+  },
+
+  data() {
+    return {
+    }
+  },
+  created() {
+  },
+  computed: {
+
+  },
+
+
+  methods: {
+
+
+  }
+}
+</script>
+  
+<style  scoped>
+.bench-main {
+  width: 100%;
+}
+</style>
+  
+  

+ 2 - 0
src/views/assets/workbench/report/components/index.js

@@ -0,0 +1,2 @@
+export { default as Bench } from './bench.vue'
+export { default as Timeline } from './timeline.vue'

+ 74 - 0
src/views/assets/workbench/report/components/timeline.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="contrl-bar">
+    <el-timeline style="max-width: 600px">
+      <el-timeline-item
+        :timestamp="projectStore.reportProgress && (projectStore.reportProgress.progress === 'BASE' || projectStore.reportProgress.progress === 'GENERATE' || projectStore.reportProgress.progress === 'FINISHED') ? '已完成' : '未完成'"
+        placement="top"
+        :color="projectStore.reportProgress && (projectStore.reportProgress.progress === 'BASE' || projectStore.reportProgress.progress === 'GENERATE' || projectStore.reportProgress.progress === 'FINISHED') ? '#ff6154' : '#dae1eb'"
+        @click="goBench('/home/assets/workbench/report/baseInfo', ['BASE', 'GENERATE', 'FINISHED'])">
+        <el-card shadow="never" class="timeline-card report-item">
+          <h4>创建报告</h4>
+        </el-card>
+      </el-timeline-item>
+      <el-timeline-item
+        :timestamp="projectStore.reportProgress && (projectStore.reportProgress.progress === 'GENERATE' || projectStore.reportProgress.progress === 'FINISHED') ? '已完成' : '未完成'"
+        placement="top"
+        :color="projectStore.reportProgress && (projectStore.reportProgress.progress === 'GENERATE' || projectStore.reportProgress.progress === 'FINISHED') ? '#ff6154' : '#dae1eb'"
+        @click="goBench('/home/assets/workbench/report/eqptBaseInfo', ['BASE', 'GENERATE', 'FINISHED'])">
+        <el-card shadow="never" class="timeline-card report-item">
+          <h4>填写基本信息</h4>
+        </el-card>
+      </el-timeline-item>
+      <el-timeline-item
+        :timestamp="projectStore.reportProgress && (projectStore.reportProgress.progress === 'FINISHED') ? '已完成' : '未完成'"
+        placement="top"
+        :color="projectStore.reportProgress && (projectStore.reportProgress.progress === 'FINISHED') ? '#ff6154' : '#dae1eb'">
+        <el-card shadow="never" class="timeline-card report-item">
+          <h4>生成报告</h4>
+        </el-card>
+      </el-timeline-item>
+    </el-timeline>
+  </div>
+</template>
+
+<script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
+
+export default {
+  data() {
+    return {
+
+    }
+  },
+  computed: {
+    ...mapStores(assetsProjectInfo),
+  },
+  created() {
+
+  },
+  methods: {
+    goBench(route, progress) {
+      if(this.projectStore.reportProgress && this.projectStore.reportProgress.progress && progress.includes(this.projectStore.reportProgress.progress)) {
+        this.$router.push(route)
+      }
+    }
+  }
+}
+
+</script>
+
+<style scoped>
+.contrl-bar {
+  height: 600px;
+  width: 20%;
+  position: fixed;
+  top: 160px;
+  right: 150px;
+
+}
+
+.timeline-card:hover {
+  cursor: pointer;
+}
+</style>

+ 636 - 0
src/views/assets/workbench/report/eqptBaseInfo.vue

@@ -0,0 +1,636 @@
+<template>
+    <div class="contrl" style="overflow: auto;height: 85vh;">
+        <el-divider content-position="left"><span style="color:#ff6154;">生成报告</span></el-divider>
+        <el-form ref="eqptBaseInfo" :model="eqptBaseInfo" label-width="auto" style="margin-top: 10px;"
+            :rules="eqptBaseInfoRules">
+            <el-row :gutter="20">
+                <el-col :span="12">
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估报告名称:" label-width="180" class="form-item" prop="reportName">
+                                <el-input v-model="eqptBaseInfo.reportName" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估目的:" label-width="180" class="form-item" prop="purpose">
+                                <el-input v-model="eqptBaseInfo.purpose" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估范围:" label-width="180" class="form-item" prop="scope">
+                                <el-input v-model="eqptBaseInfo.scope" :rows="3" type="textarea" clearable
+                                    style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="价值类型:" label-width="180" class="form-item" prop="valueType">
+                                <el-input v-model="eqptBaseInfo.valueType" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="前期准备阶段:" label-width="180" class="form-item" prop="preparationPhase">
+                                <el-input v-model="eqptBaseInfo.preparationPhase" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估基准日:" label-width="180" class="form-item" prop="valuationBasisDate">
+                                <el-input v-model="eqptBaseInfo.valuationBasisDate" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="现场调查日:" label-width="180" class="form-item" prop="fieldInvestigationDay">
+                                <el-input v-model="eqptBaseInfo.fieldInvestigationDay" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估方法:" label-width="180" class="form-item" prop="method">
+                                <el-input v-model="eqptBaseInfo.method" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估结论:" label-width="180" class="form-item" prop="conclusion">
+                                <el-input v-model="eqptBaseInfo.conclusion" :rows="3" type="textarea" clearable
+                                    style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="是否包含增值税:" label-width="180" class="form-item" prop="hasVAT">
+                                <el-radio-group v-model="eqptBaseInfo.hasVAT">
+                                    <el-radio value="true">是</el-radio>
+                                    <el-radio value="false">否</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="评估报告日:" label-width="180" class="form-item" prop="reportDate">
+                                <el-input v-model="eqptBaseInfo.reportDate" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="报告有效期:" label-width="180" class="form-item" prop="reportValidity">
+                                <el-input v-model="eqptBaseInfo.reportValidity" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-divider content-position="left"><span style="color:#ff6154;">资产实物情况</span></el-divider>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="资产项数:" label-width="180" class="form-item" prop="assetCount">
+                                <el-input v-model="eqptBaseInfo.assetCount" type="number" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="资产位置:" label-width="180" class="form-item" prop="assetLocation">
+                                <el-input v-model="eqptBaseInfo.assetLocation" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="主要设备资产:" label-width="180" class="form-item" prop="majorEquipmentAssets">
+                                <el-input v-model="eqptBaseInfo.majorEquipmentAssets" :rows="1" type="textarea" clearable
+                                    style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="购置期间:" label-width="180" class="form-item" prop="purchasePeriod">
+                                <el-input v-model="eqptBaseInfo.purchasePeriod" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="资产现状:" label-width="180" class="form-item" prop="assetCondition">
+                                <el-input v-model="eqptBaseInfo.assetCondition" :rows="1" type="textarea" clearable
+                                    style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="是否设立抵押权:" label-width="180" class="form-item" prop="establishMortgage">
+                                <el-radio-group v-model="eqptBaseInfo.establishMortgage">
+                                    <el-radio value="true">是</el-radio>
+                                    <el-radio value="false">否</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="是否尚在质保期:" label-width="180" class="form-item" prop="underWarranty">
+                                <el-radio-group v-model="eqptBaseInfo.underWarranty">
+                                    <el-radio value="true">是</el-radio>
+                                    <el-radio value="false">否</el-radio>
+                                </el-radio-group>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10" v-if="eqptBaseInfo.underWarranty && eqptBaseInfo.underWarranty === 'true'">
+                        <el-col :span="24">
+                            <el-form-item label="基准日尚余未付设备款:" label-width="180" class="form-item" prop="eqptUnpaidAmount">
+                                <el-input v-model="eqptBaseInfo.eqptUnpaidAmount" type="number" clearable
+                                    style="width: 100%;">
+                                    <template #append>万元</template>
+                                </el-input>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="产权持有人权属等主要资料不完整或者存在瑕疵的情形:" label-width="180" class="form-item" prop="flaw">
+                                <el-input v-model="eqptBaseInfo.flaw" :rows="1" type="textarea" clearable
+                                    style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-col>
+                <el-col :span="12">
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-divider content-position="left"><span style="color:#ff6154;">委托人概况</span></el-divider>
+                            <el-descriptions border v-for="item in eqptBaseInfo.consignorInfos" style="margin-bottom: 10px">
+                                <el-descriptions-item label="公司名称">
+                                    {{ item.consignorCompanyName }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="统一社会信用代码">
+                                    {{ item.consignorUnifiedSocialCreditCode }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="注册地址">
+                                    {{ item.consignorRegisteredAddress }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="法定代表人/负责人">
+                                    {{ item.consignorLegalRepresentative }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="类型">
+                                    {{ item.consignorType }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="成立日期">
+                                    {{ item.consignorEstablishmentDate }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="经营范围">
+                                    {{ item.consignorBusinessScope }}
+                                    <el-button type="danger" size="small" style="float: right"
+                                        @click="eqptBaseInfo.consignorInfos.splice(index, 1)">
+                                        移除
+                                    </el-button>
+                                </el-descriptions-item>
+                            </el-descriptions>
+                            <el-button type="danger" style="float: right" @click="consignorInfosVisible = true">
+                                添加委托人
+                            </el-button>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-divider content-position="left"><span style="color:#ff6154;">产权持有人概况</span></el-divider>
+                            <el-descriptions border v-for="(item, index) in eqptBaseInfo.propertyOwnerInfos"
+                                style="margin-bottom: 10px">
+                                <el-descriptions-item label="公司名称">
+                                    {{ item.ownerCompanyName }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="统一社会信用代码">
+                                    {{ item.ownerUnifiedSocialCreditCode }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="注册地址">
+                                    {{ item.ownerRegisteredAddress }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="法定代表人/负责人">
+                                    {{ item.ownerLegalRepresentative }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="类型">
+                                    {{ item.ownerType }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="成立日期">
+                                    {{ item.ownerEstablishmentDate }}
+                                </el-descriptions-item>
+                                <el-descriptions-item label="经营范围">
+                                    {{ item.ownerBusinessScope }}
+                                    <el-button type="danger" size="small" style="float: right"
+                                        @click="eqptBaseInfo.propertyOwnerInfos.splice(index, 1)">
+                                        移除
+                                    </el-button>
+                                </el-descriptions-item>
+
+                            </el-descriptions>
+                            <el-button type="danger" style="float: right" @click="propertyOwnerInfosVisible = true">
+                                添加产权持有人
+                            </el-button>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="10">
+                        <el-col :span="24">
+                            <el-form-item label="委托人与产权持有人之间的关系:" label-width="180" class="form-item"
+                                style="margin-top:10px" prop="ownerClient">
+                                <el-input v-model="eqptBaseInfo.ownerClient" clearable style="width: 100%;" />
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                    <div>
+                        <el-button type="danger" style="float: right;">
+                            生成报告
+                        </el-button>
+                    </div>
+                    <div style="margin-right:120px">
+                        <el-button type="danger" @click="updateReportBaseInfo()" style="float: right;">
+                            保存报告信息
+                        </el-button>
+                    </div>
+                </el-col>
+            </el-row>
+        </el-form>
+        <el-dialog v-model="consignorInfosVisible" title="添加委托人" width="700">
+            <el-form ref="consignorInfo" :model="consignorInfo" :rules="consignorInfoRules" label-width="auto"
+                style="margin-top: 10px;">
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="公司名称:" class="form-item" prop="consignorCompanyName">
+                            <el-input v-model="consignorInfo.consignorCompanyName" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="统一社会信用代码:" class="form-item" prop="consignorUnifiedSocialCreditCode">
+                            <el-input v-model="consignorInfo.consignorUnifiedSocialCreditCode" clearable
+                                style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="注册地址:" class="form-item" prop="consignorRegisteredAddress">
+                            <el-input v-model="consignorInfo.consignorRegisteredAddress" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="法定代表人/负责人:" class="form-item" prop="consignorLegalRepresentative">
+                            <el-input v-model="consignorInfo.consignorLegalRepresentative" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="类型:" class="form-item" prop="consignorType">
+                            <el-input v-model="consignorInfo.consignorType" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="成立日期:" class="form-item" prop="consignorEstablishmentDate">
+                            <el-input v-model="consignorInfo.consignorEstablishmentDate" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="经营范围:" class="form-item" prop="consignorBusinessScope">
+                            <el-input v-model="consignorInfo.consignorBusinessScope" :rows="1" type="textarea" clearable
+                                style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-button type="danger" style="float: right" @click="addConsignorInfo()">添加</el-button>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </el-dialog>
+        <el-dialog v-model="propertyOwnerInfosVisible" title="添加产权持有人" width="700">
+            <el-form ref="propertyOwnerInfo" :model="propertyOwnerInfo" :rules="propertyOwnerInfoRules" label-width="auto"
+                style="margin-top: 10px;">
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="公司名称:" class="form-item" prop="ownerCompanyName">
+                            <el-input v-model="propertyOwnerInfo.ownerCompanyName" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="统一社会信用代码:" class="form-item" prop="ownerUnifiedSocialCreditCode">
+                            <el-input v-model="propertyOwnerInfo.ownerUnifiedSocialCreditCode" clearable
+                                style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="注册地址:" class="form-item" prop="ownerRegisteredAddress">
+                            <el-input v-model="propertyOwnerInfo.ownerRegisteredAddress" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="法定代表人/负责人:" class="form-item" prop="ownerLegalRepresentative">
+                            <el-input v-model="propertyOwnerInfo.ownerLegalRepresentative" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="类型:" class="form-item" prop="ownerType">
+                            <el-input v-model="propertyOwnerInfo.ownerType" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="成立日期:" class="form-item" prop="ownerEstablishmentDate">
+                            <el-input v-model="propertyOwnerInfo.ownerEstablishmentDate" clearable style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-form-item label="经营范围:" class="form-item" prop="ownerBusinessScope">
+                            <el-input v-model="propertyOwnerInfo.ownerBusinessScope" :rows="1" type="textarea" clearable
+                                style="width: 100%;" />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row :gutter="10">
+                    <el-col :span="24">
+                        <el-button type="danger" style="float: right" @click="addPropertyOwnerInfo()">添加</el-button>
+                    </el-col>
+                </el-row>
+            </el-form>
+        </el-dialog>
+    </div>
+</template>
+
+<script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
+import { updateReportBaseInfo, getReportBaseInfo } from '@/api/assetsReport'
+
+export default {
+    data() {
+        return {
+            eqptBaseInfo: {
+                consignorInfos: [],
+                propertyOwnerInfos: []
+            },
+            eqptBaseInfoRules: {
+                reportName: [
+                    { required: true, message: '请输入评估报告名称', trigger: 'blur' }
+                ],
+                purpose: [
+                    { required: true, message: '请输入评估目的', trigger: 'blur' }
+                ],
+                scope: [
+                    { required: true, message: '请输入评估范围', trigger: 'blur' }
+                ],
+                valueType: [
+                    { required: true, message: '请输入价值类型', trigger: 'blur' }
+                ],
+                preparationPhase: [
+                    { required: true, message: '请输入前期准备阶段', trigger: 'blur' }
+                ],
+                valuationBasisDate: [
+                    { required: true, message: '请输入评估基准日', trigger: 'blur' }
+                ],
+                fieldInvestigationDay: [
+                    { required: true, message: '请输入现场调查日', trigger: 'blur' }
+                ],
+                method: [
+                    { required: true, message: '请输入评估方法', trigger: 'blur' }
+                ],
+                conclusion: [
+                    { required: true, message: '请输入评估结论', trigger: 'blur' }
+                ],
+                hasVAT: [
+                    { required: true, message: '请选择是否包含增值税', trigger: 'blur' }
+                ],
+                reportDate: [
+                    { required: true, message: '请输入评估报告日', trigger: 'blur' }
+                ],
+                reportValidity: [
+                    { required: true, message: '请输入报告有效期', trigger: 'blur' }
+                ],
+                ownerClient: [
+                    { required: true, message: '请输入委托人与产权持有人之间的关系', trigger: 'blur' }
+                ],
+                assetCount: [
+                    { required: true, message: '请输入资产项数', trigger: 'blur' }
+                ],
+                assetLocation: [
+                    { required: true, message: '请输入资产位置', trigger: 'blur' }
+                ],
+                majorEquipmentAssets: [
+                    { required: true, message: '请输入主要设备资产', trigger: 'blur' }
+                ],
+                purchasePeriod: [
+                    { required: true, message: '请输入购置期间', trigger: 'blur' }
+                ],
+                assetCondition: [
+                    { required: true, message: '请输入资产现状', trigger: 'blur' }
+                ],
+                establishMortgage: [
+                    { required: true, message: '请选择是否设立抵押权', trigger: 'blur' }
+                ],
+                underWarranty: [
+                    { required: true, message: '请选择是否尚在质保期', trigger: 'blur' }
+                ],
+                eqptUnpaidAmount: [
+                    { required: true, message: '请输入基准日尚余未付设备款', trigger: 'blur' }
+                ],
+                flaw: [
+                    { required: true, message: '请输入产权持有人权属等主要资料不完整或者存在瑕疵的情形', trigger: 'blur' }
+                ]
+            },
+            consignorInfosVisible: false,
+            consignorInfo: {},
+            consignorInfoRules: {
+                consignorCompanyName: [
+                    { required: true, message: '请输入公司名称', trigger: 'blur' }
+                ],
+                consignorUnifiedSocialCreditCode: [
+                    { required: true, message: '请输入统一社会信用代码', trigger: 'blur' }
+                ],
+                consignorRegisteredAddress: [
+                    { required: true, message: '请输入注册地址', trigger: 'blur' }
+                ],
+                consignorLegalRepresentative: [
+                    { required: true, message: '请输入法定代表人/负责人', trigger: 'blur' }
+                ],
+                consignorType: [
+                    { required: true, message: '请输入类型', trigger: 'blur' }
+                ],
+                consignorEstablishmentDate: [
+                    { required: true, message: '请输入成立日期', trigger: 'blur' }
+                ],
+                consignorBusinessScope: [
+                    { required: true, message: '请输入经营范围', trigger: 'blur' }
+                ]
+            },
+            propertyOwnerInfosVisible: false,
+            propertyOwnerInfo: {},
+            propertyOwnerInfoRules: {
+                ownerCompanyName: [
+                    { required: true, message: '请输入公司名称', trigger: 'blur' }
+                ],
+                ownerUnifiedSocialCreditCode: [
+                    { required: true, message: '请输入统一社会信用代码', trigger: 'blur' }
+                ],
+                ownerRegisteredAddress: [
+                    { required: true, message: '请输入注册地址', trigger: 'blur' }
+                ],
+                ownerLegalRepresentative: [
+                    { required: true, message: '请输入法定代表人/负责人', trigger: 'blur' }
+                ],
+                ownerType: [
+                    { required: true, message: '请输入类型', trigger: 'blur' }
+                ],
+                ownerEstablishmentDate: [
+                    { required: true, message: '请输入成立日期', trigger: 'blur' }
+                ],
+                ownerBusinessScope: [
+                    { required: true, message: '请输入经营范围', trigger: 'blur' }
+                ]
+            },
+            needUpdateStore: true
+        }
+    },
+    created() {
+        if(this.projectStore.reportProgress) {
+            this.getReportBaseInfo();
+        }
+    },
+    computed: {
+        ...mapStores(assetsProjectInfo),
+    },
+    methods: {
+        // 添加委托人概况
+        addConsignorInfo() {
+            this.$refs.consignorInfo.validate((valid) => {
+                if (valid) {
+                    let data = Object.assign({}, this.consignorInfo);
+                    this.eqptBaseInfo.consignorInfos.push(data);
+                    this.$refs.consignorInfo.resetFields();
+                    this.consignorInfosVisible = false;
+                }
+            })
+        },
+        // 添加产权持有人概况
+        addPropertyOwnerInfo() {
+            this.$refs.propertyOwnerInfo.validate((valid) => {
+                if (valid) {
+                    let data = Object.assign({}, this.propertyOwnerInfo);
+                    this.eqptBaseInfo.propertyOwnerInfos.push(data);
+                    this.$refs.propertyOwnerInfo.resetFields();
+                    this.propertyOwnerInfosVisible = false;
+                }
+            })
+        },
+        // 更新报告基础信息
+        updateReportBaseInfo() {
+            this.$refs.eqptBaseInfo.validate((valid) => {
+                if (valid) {
+                    let params = {};
+                    params.reportId = this.projectStore.reportProgress.id;
+                    params.baseInfo = JSON.stringify(this.eqptBaseInfo);
+                    updateReportBaseInfo(params).then(res => {
+                        if (res.code == 200) {
+                            ElMessage({
+                                showClose: true,
+                                message: res.message,
+                                type: 'success'
+                            })
+                            // 更新本地缓存的测算表进度
+                            if (this.needUpdateStore) {
+                                this.projectStore.reportProgress.progress = 'GENERATE';
+                            }
+                        }
+                    })
+                }
+            })
+        },
+        // 根据报告id获取报告基础信息
+        getReportBaseInfo() {
+            getReportBaseInfo(this.projectStore.reportProgress.id).then(res => {
+                if (res.data) {
+                    this.eqptBaseInfo = JSON.parse(res.data);
+                    // 返回不为空说明该步骤以前已经完成了,不需要更新本地缓存
+                    this.needUpdateStore = false;
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+.contrl {
+    font-size: 20px;
+    width: 75%;
+    border-right: 1.5px #dae1eb solid;
+    padding: 0px 20px 20px 0px;
+    float: left;
+
+}
+
+:deep(.el-input__wrapper.is-focus) {
+    --el-input-focus-border: #ff6154;
+    --el-input-focus-border-color: #ff6154;
+}
+
+.target-windows {
+    margin-top: 80px;
+    overflow-y: scroll;
+    padding: 5px;
+    border: 1.5px #dae1eb solid;
+    border-radius: 0.3em;
+}
+
+.title-div {
+    height: 80px;
+    line-height: 80px;
+    width: 300px;
+    float: left;
+    font-size: 20px;
+    font-weight: 900;
+}
+
+:deep(*) {
+    color-scheme: light;
+    --el-color-primary: #ff6154;
+    --el-color-primary-light-3: #ff7154;
+    --el-color-primary-light-5: #ff8154;
+    --el-color-primary-light-7: #ff9154;
+    --el-color-primary-light-8: #ffa999;
+    --el-color-primary-light-9: #ffa854;
+    --el-color-primary-dark-2: #ff8154;
+}
+</style>

+ 39 - 0
src/views/assets/workbench/report/index.vue

@@ -0,0 +1,39 @@
+<template>
+  <div>
+      <Bench></Bench>
+      <Timeline :baseInfo="true"></Timeline>
+  </div>
+</template>
+  
+<script>
+import { Timeline, Bench } from "./components";
+
+export default {
+  name: 'assetsReportWorkBench',
+  components: {
+    Bench,
+    Timeline,
+  },
+  data() {
+    return {
+      
+    }
+  }
+}
+</script>
+  
+<style scoped>
+.base {
+  min-height: calc(100vh - 80px);
+  width: 100%;
+}
+
+.content {
+  margin-left: 160px;
+  margin-right: 160px;
+  padding: 50px 20px 20px 20px;
+
+}
+</style>
+  
+