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

1.登陆时token获取从使用router改为解析url字符串
2.新增完善机器设备基础测算信息页面
2.timeline页面优化

GouGengquan 8 hónapja
szülő
commit
cbf820b984

+ 7 - 2
src/api/assetsCalculate.js

@@ -1,16 +1,21 @@
 import request from '@/utils/request'
 
 // 创建新的测算表
-export function createAssetsCalculate(params){
+export function createAssetsCalculate(params) {
     return request.post('/assetsCalculate/save', params)
 }
 
 // 获取未完成测算表进度信息
-export function getUnFinishedCalculateProgress(params){
+export function getUnFinishedCalculateProgress(params) {
     return request.get(`/assetsCalculate/getUnFinishedCalculateProgress/${params}`)
 }
 
 // 导入机器设备信息
 export function importEqptExcelData(params) {
     return request.post('/assetsCalculate/importEqptExcelData', params)
+}
+
+// 更新测算表基础测算信息
+export function updateCalculateBaseInfo(params) {
+    return request.put('/assetsCalculate/updateCalculateBaseInfo', params)
 }

+ 6 - 0
src/api/assetsCalculateEqptData.js

@@ -0,0 +1,6 @@
+import request from '@/utils/request'
+
+// 获取是否有进口设备
+export function hasImportedEquipment(params) {
+    return request.get(`/assetsCalculateEqptData/hasImportedEquipment/${params}`)
+}

+ 11 - 2
src/router/index.js

@@ -21,7 +21,8 @@ import AssetsTmplMange from '@/views/assets/template/mange.vue'
 import AssetsCreateCalculateTmpl from '@/views/assets/template/createCalculate.vue'
 import AssetsCalculateWorkbench from '@/views/assets/workbench/calculate/index.vue'
 import AssetsCalculateBaseInfo from '@/views/assets/workbench/calculate/baseInfo.vue'
-import AssetsCalculateimportInfo from '@/views/assets/workbench/calculate/importInfo.vue'
+import AssetsCalculateImportInfo from '@/views/assets/workbench/calculate/importInfo.vue'
+import AssetsCalculateGenrateInfo from '@/views/assets/workbench/calculate/generateInfo.vue'
 
 const routes = [
   {
@@ -218,12 +219,20 @@ const routes = [
               },
               {
                 path: 'importInfo',
-                component: AssetsCalculateimportInfo,
+                component: AssetsCalculateImportInfo,
                 name: 'assetsCalculateimportInfo',
                 meta: {
                   title: '完善测算表信息'
                 },
               },
+              {
+                path: 'genrateInfo',
+                component: AssetsCalculateGenrateInfo,
+                name: 'assetsCalculateGenrateInfo',
+                meta: {
+                  title: '生成测算表'
+                },
+              },
             ]
           }
         ],

+ 3 - 5
src/views/assets/folder/child.vue

@@ -120,14 +120,12 @@ export default {
       getUnFinishedCalculateProgress(this.projectStore.projectInfo.id).then(res => {
         if (res.data) {
           // 根据不同进度跳转到不同步骤页面
-          if (res.data.progress === 'BASE') {
+          if (res.data.progress === 'IMPORT') {
             this.$router.push('/home/assets/workbench/calculate/importInfo')
-          } else if (res.data.progress === 'IMPORT') {
-
           } else if (res.data.progress === 'GENERATE') {
+            this.$router.push('/home/assets/workbench/calculate/genrateInfo')
+          } else if (res.data.progress === 'FINISHED') {
 
-          } else {
-            
           }
           this.projectStore.setCalculateProgress(res.data);
         } else {

+ 1 - 1
src/views/assets/workbench/calculate/baseInfo.vue

@@ -55,7 +55,7 @@ export default {
         createCalculate() {
             this.$refs.baseInfo.validate((valid) => {
                 if (valid) {
-                    this.baseInfo.progress = 'BASE';
+                    this.baseInfo.progress = 'IMPORT';
                     this.baseInfo.projectId = this.projectStore.projectInfo.id;
                     createAssetsCalculate(this.baseInfo).then(res => {
                         if (res.code == 200) {

+ 4 - 4
src/views/assets/workbench/calculate/components/timeline.vue

@@ -1,19 +1,19 @@
 <template>
   <div class="contrl-bar">
     <el-timeline style="max-width: 600px">
-      <el-timeline-item :timestamp="(progress === 'BASE') ? '已完成' : '未完成'" placement="top" :color="(progress === 'BASE') ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'IMPORT' || progress === 'GENERATE' || progress === 'FINISHED') ? '已完成' : '未完成'" placement="top" :color="(progress === 'IMPORT' || progress === 'GENERATE' || progress === 'FINISHED') ? '#ff6154' : '#dae1eb'">
         <el-card shadow="never" class="timeline-card report-item">
           <h4>基本信息</h4>
           <p>更新时间: 2018/4/12 20:46</p>
         </el-card>
       </el-timeline-item>
-      <el-timeline-item :timestamp="(progress === 'IMPORT') ? '已完成' : '未完成'" placement="top" :color="(progress === 'IMPORT') ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'GENERATE' || progress === 'FINISHED') ? '已完成' : '未完成'" placement="top" :color="(progress === 'GENERATE' || progress === 'FINISHED') ? '#ff6154' : '#dae1eb'">
         <el-card shadow="never" class="timeline-card report-item">
-          <h4>测算表所需信息补全</h4>
+          <h4>添加测算数据</h4>
           <p>更新时间: 2018/4/12 20:46</p>
         </el-card>
       </el-timeline-item>
-      <el-timeline-item :timestamp="(progress === 'GENERATE') ? '已完成' : '未完成'" placement="top" :color="(progress === 'GENERATE') ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'FINISHED') ? '已完成' : '未完成'" placement="top" :color="(progress === 'FINISHED') ? '#ff6154' : '#dae1eb'">
         <el-card shadow="never" class="timeline-card report-item">
           <h4>生成测算表</h4>
           <p>更新时间: 2018/4/12 20:46</p>

+ 171 - 0
src/views/assets/workbench/calculate/generateInfo.vue

@@ -0,0 +1,171 @@
+<template>
+    <div class="contrl">
+        <el-divider content-position="left"><span style="color:#ff6154;">生成测算表</span></el-divider>
+        <el-form ref="generateInfo" :model="generateInfo" label-width="auto" style="margin-top: 10px;"
+            :rules="generateInfoRules">
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="工期:" class="form-item" prop="constructionPeriod">
+                        <el-input-number v-model="generateInfo.constructionPeriod" clearable style="width: 95%;" :precision="2" :step="0.1" />
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="利息:" class="form-item" prop="interest">
+                        <el-input-number v-model="generateInfo.interest" clearable style="width: 95%;" :precision="2" :step="0.1" />%
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="前期费用率:" class="form-item" prop="preConstructionCostRatio">
+                        <el-input-number v-model="generateInfo.preConstructionCostRatio" clearable style="width: 95%;" :precision="2" :step="0.1" />%
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="建设单位管理费率:" class="form-item" prop="managementExpenseRatio">
+                        <el-input-number v-model="generateInfo.managementExpenseRatio" clearable style="width: 95%;" :precision="2" :step="0.1" />%
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-divider v-if="hasImportedEquipment" content-position="left"><span
+                    style="color:#ff6154;">进口设备信息</span></el-divider>
+            <el-row v-if="hasImportedEquipment" :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="关税:" class="form-item" prop="tariff">
+                        <el-input-number v-model="generateInfo.tariff" clearable style="width: 95%;" :precision="2" :step="0.1" />%
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row v-if="hasImportedEquipment" :gutter="10">
+                <el-col :span="12">
+                    <el-form-item label="进口增值税:" class="form-item" prop="importVAT">
+                        <el-input-number v-model="generateInfo.importVAT" clearable style="width: 95%;" :precision="2" :step="0.1" />%
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-button plain type="danger" style="float: right;" @click="updateBaseInfo()">
+                下一步
+                <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 { hasImportedEquipment } from '@/api/assetsCalculateEqptData';
+import { updateCalculateBaseInfo } from '@/api/assetsCalculate';
+
+export default {
+    data() {
+        return {
+            hasImportedEquipment: false,
+            generateInfo: {},
+            generateInfoRules: {
+                constructionPeriod: [
+                    { required: true, message: '请输入工期', trigger: 'blur' }
+                ],
+                interest: [
+                    { required: true, message: '请输入利息', trigger: 'blur' }
+                ],
+                preConstructionCostRatio: [
+                    { required: true, message: '请输入前期费用率', trigger: 'blur' }
+                ],
+                managementExpenseRatio: [
+                    { required: true, message: '请输入建设单位管理费率', trigger: 'blur' }
+                ],
+                tariff: [
+                    { required: true, message: '请输入关税', trigger: 'blur' }
+                ],
+                importVAT: [
+                    { required: true, message: '请输入进口增值税', trigger: 'blur' }
+                ]
+            }
+        }
+    },
+    created() {
+        this.getHasImportedEquipment();
+    },
+    computed: {
+        ...mapStores(assetsProjectInfo),
+    },
+    methods: {
+        getHasImportedEquipment() {
+            // 获取是否有进口设备
+            hasImportedEquipment(this.projectStore.calculateProgress.id).then(res => {
+                this.hasImportedEquipment = res.data;
+            })
+        },
+        // 更新测算表基础测算信息
+        updateBaseInfo() {
+            this.$refs.generateInfo.validate((valid) => {
+                if (valid) {
+                    let params = {};
+                    params.calculateId = this.projectStore.calculateProgress.id;
+                    params.baseInfo = JSON.stringify(this.generateInfo);
+                    updateCalculateBaseInfo(params).then(res => {
+                        if (res.code == 200) {
+                            ElMessage({
+                                showClose: true,
+                                message: res.message,
+                                type: 'success'
+                            })
+                        }
+                    })
+                }
+            })
+        }
+    }
+}
+</script>
+
+<style scoped>
+.contrl {
+    font-size: 20px;
+    width: 70.9%;
+    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>

+ 127 - 130
src/views/home/index.vue

@@ -1,111 +1,90 @@
 <template>
   <div class="base">
-      <div class="content">
-          <div class="words">
-              <h1>渐进、交互式文档生成</h1>
-              <p>
-                 覆盖房地产、土地和各类资产评估报告自动生成。<br>
-                 支持测算表生成和下载,亦可以应用于文档。<br>
-                 用户仅需提交必要评估物数据和测算数据,由平台自动生成商业级评估报告。
-              </p>
-          </div>
-          <div class="option">
-              <div class="create-btn">
-                <button class="cssbuttons-io-button" @click="goto('house/parent')">
-                  房地产
-                  <div class="icon">
-                    <svg
-                      height="24"
-                      width="24"
-                      viewBox="0 0 24 24"
-                      xmlns="http://www.w3.org/2000/svg"
-                    >
-                      <path d="M0 0h24v24H0z" fill="none"></path>
-                      <path
-                        d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
-                        fill="currentColor"
-                      ></path>
-                    </svg>
-                  </div>
-                </button>
-                <button class="cssbuttons-io-button" @click="goto('assets/parent')">
-                  资产
-                  <div class="icon">
-                    <svg
-                      height="24"
-                      width="24"
-                      viewBox="0 0 24 24"
-                      xmlns="http://www.w3.org/2000/svg"
-                    >
-                      <path d="M0 0h24v24H0z" fill="none"></path>
-                      <path
-                        d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
-                        fill="currentColor"
-                      ></path>
-                    </svg>
-                  </div>
-                </button>
-                <button class="cssbuttons-io-button" @click="goto('planning')">
-                  土地
-                  <div class="icon">
-                    <svg
-                      height="24"
-                      width="24"
-                      viewBox="0 0 24 24"
-                      xmlns="http://www.w3.org/2000/svg"
-                    >
-                      <path d="M0 0h24v24H0z" fill="none"></path>
-                      <path
-                        d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
-                        fill="currentColor"
-                      ></path>
-                    </svg>
-                  </div>
-                </button>
+    <div class="content">
+      <div class="words">
+        <h1>渐进、交互式文档生成</h1>
+        <p>
+          覆盖房地产、土地和各类资产评估报告自动生成。<br>
+          支持测算表生成和下载,亦可以应用于文档。<br>
+          用户仅需提交必要评估物数据和测算数据,由平台自动生成商业级评估报告。
+        </p>
+      </div>
+      <div class="option">
+        <div class="create-btn">
+          <button class="cssbuttons-io-button" @click="goto('house/parent')">
+            房地产
+            <div class="icon">
+              <svg height="24" width="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+                <path d="M0 0h24v24H0z" fill="none"></path>
+                <path d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
+                  fill="currentColor"></path>
+              </svg>
+            </div>
+          </button>
+          <button class="cssbuttons-io-button" @click="goto('assets/parent')">
+            资产
+            <div class="icon">
+              <svg height="24" width="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+                <path d="M0 0h24v24H0z" fill="none"></path>
+                <path d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
+                  fill="currentColor"></path>
+              </svg>
+            </div>
+          </button>
+          <button class="cssbuttons-io-button" @click="goto('planning')">
+            土地
+            <div class="icon">
+              <svg height="24" width="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
+                <path d="M0 0h24v24H0z" fill="none"></path>
+                <path d="M16.172 11l-5.364-5.364 1.414-1.414L20 12l-7.778 7.778-1.414-1.414L16.172 13H4v-2z"
+                  fill="currentColor"></path>
+              </svg>
+            </div>
+          </button>
+        </div>
+        <div class="example-list">
+          <el-card class="report-item no-border" shadow="never" v-for="(doc, id) in page">
+            <div class="report-icon">
+              <img :src="docLog(doc.docType)" style="width: 52px; height: 52px;" />
+            </div>
+            <div class="report-text">
+              <div>
+                <span class="report-text-type">{{ doc.businessType + doc.businessCate + '【' + doc.docNo + '】' }}</span>
+                <span> 一 </span>
+                <span class="report-text-name">{{ doc.docName }}</span>
               </div>
-              <div class="example-list">
-              <el-card class="report-item no-border" shadow="never" v-for="(doc,id) in page">
-                <div class="report-icon">
-                  <img :src="docLog(doc.docType)" style="width: 52px; height: 52px;"/>
-                </div>
-                <div class="report-text">
-                  <div>
-                    <span class="report-text-type">{{doc.businessType+doc.businessCate+'【'+doc.docNo+'】'}}</span>
-                    <span> 一 </span>
-                    <span class="report-text-name">{{ doc.docName }}</span>
-                  </div>
-                  <div style="padding-top: 5px;">
-                    <span>
-                      <el-icon>
-                        <Avatar />
-                      </el-icon>
-                      {{ doc.consignor }}</span>
-                    <span>
-                      <el-tag style="margin-left: 5px;">
-                        {{ doc.businessType }}
-                      </el-tag>
-                      <el-tag style="margin-left: 5px;" type="success">
-                        {{ doc.businessCate }}
-                      </el-tag>
-                    </span>
-                    <span style="float: right; color:darkgrey">
-                      {{ doc.updateTime }}
-                    </span>
-                  </div>
-                </div>
-                <div class="report-button">
+              <div style="padding-top: 5px;">
+                <span>
                   <el-icon>
-                    <Download />
+                    <Avatar />
                   </el-icon>
-                </div>
-              </el-card>
+                  {{ doc.consignor }}</span>
+                <span>
+                  <el-tag style="margin-left: 5px;">
+                    {{ doc.businessType }}
+                  </el-tag>
+                  <el-tag style="margin-left: 5px;" type="success">
+                    {{ doc.businessCate }}
+                  </el-tag>
+                </span>
+                <span style="float: right; color:darkgrey">
+                  {{ doc.updateTime }}
+                </span>
+              </div>
             </div>
-          </div>
-          <div class="pagination">
-              <el-pagination background layout="prev, pager, next" style="--el-color-primary: #ff6154"
-              :page-count="listQuery.pages" v-model:current-page="listQuery.current" @current-change="getDocuments" />
+            <div class="report-button">
+              <el-icon>
+                <Download />
+              </el-icon>
             </div>
+          </el-card>
+        </div>
       </div>
+      <div class="pagination">
+        <el-pagination background layout="prev, pager, next" style="--el-color-primary: #ff6154"
+          :page-count="listQuery.pages" v-model:current-page="listQuery.current" @current-change="getDocuments" />
+      </div>
+    </div>
   </div>
 </template>
 
@@ -122,12 +101,12 @@ import folderLog from '../../assets/icons/folder.png'
 export default {
   data() {
     return {
-      page:[],
-      listQuery:{
-          current: 1,
-          size: 10,
-          pages:null,
-          total:null
+      page: [],
+      listQuery: {
+        current: 1,
+        size: 10,
+        pages: null,
+        total: null
       }
     }
   },
@@ -138,40 +117,57 @@ export default {
     ...mapStores(useUserStore),
   },
   created() {
-    // 如果路由上带了token,说明是从oa刚跳转过来,需要进行登录
-    if (this.$route.query.token) {
-      loginByOAInfo(this.$route.query.token).then(res => {
-        setToken(res.data.tokenValue);
-        this.userStore.setUserInfo(res.data);
-      })
-    }
-    // 登录成功,重新跳转到主页
-    this.$router.push(`/home/index`)
+    this.login();
     this.getDocuments();
   },
   methods: {
     goto(path) {
       this.$router.push(`/home/${path}`)
     },
+    login() {
+      // 如果路由上带了token,说明是从oa刚跳转过来,需要进行登录
+      // 解析url获取token
+      var url = window.location.href; //获取当前url
+      var dz_url = url.split('#')[0]; //获取#之前的字符串
+      var cs = url.split('?')[1]; //获取?之后的参数字符串
+      // 判断参数是否为空
+      if (cs) {
+        var cs_arr = cs.split('&'); //参数字符串分割为数组
+        var params = {};
+        for (var i = 0; i < cs_arr.length; i++) { //遍历数组,拿到json对象
+          params[cs_arr[i].split('=')[0]] = cs_arr[i].split('=')[1]
+        }
+        
+        let token = params.token;
+        if (token) {
+          loginByOAInfo(token).then(res => {
+            setToken(res.data.tokenValue);
+            this.userStore.setUserInfo(res.data);
+            // 登录成功,重新跳转到主页
+            this.$router.push(`/home/index`)
+          })
+        }
+      }
 
-    getDocuments(){
-      documentProduction.page(this.listQuery).then(res=>{
-        if (res.code === 200){
-            this.page = res.data.records;
-            this.listQuery.pages = res.data.pages;
+    },
+    getDocuments() {
+      documentProduction.page(this.listQuery).then(res => {
+        if (res.code === 200) {
+          this.page = res.data.records;
+          this.listQuery.pages = res.data.pages;
         }
       })
     },
-    docLog(docType){
-      switch(docType){
+    docLog(docType) {
+      switch (docType) {
         case 'CALCULATE_TABLE':
           return excelLog;
         case 'FOLDER':
-            return folderLog;
-        default :
-            return wordLog;
+          return folderLog;
+        default:
+          return wordLog;
       }
-      
+
     }
 
   }
@@ -185,9 +181,9 @@ export default {
 }
 
 /* .content { */
-  /* margin-left: 160px; */
-  /* margin-right: 160px; */
-  /* padding: 50px 20px 20px 20px; */
+/* margin-left: 160px; */
+/* margin-right: 160px; */
+/* padding: 50px 20px 20px 20px; */
 /* } */
 
 .words {
@@ -281,7 +277,8 @@ p {
   border: none;
   border-radius: 0.6em;
 }
-.pagination{
+
+.pagination {
   margin-top: 10px;
   margin-left: 160px;
   width: 58.5%;