소스 검색

1.测算表进度条与数据库进度同步
2.新增导入机器设备信息

GouGengquan 8 달 전
부모
커밋
69d325dae4

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 4209 - 7
package-lock.json


+ 10 - 0
src/api/assetsCalculate.js

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

+ 9 - 0
src/router/index.js

@@ -21,6 +21,7 @@ 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'
 
 const routes = [
   {
@@ -215,6 +216,14 @@ const routes = [
                   title: '测算表基本信息'
                 },
               },
+              {
+                path: 'importInfo',
+                component: AssetsCalculateimportInfo,
+                name: 'assetsCalculateimportInfo',
+                meta: {
+                  title: '完善测算表信息'
+                },
+              },
             ]
           }
         ],

+ 29 - 0
src/stores/assetsProjectStore.js

@@ -0,0 +1,29 @@
+import { defineStore } from 'pinia'
+
+// 资产项目信息缓存
+export const assetsProjectInfo = defineStore('project', {
+    state: () => ({
+        // 项目信息
+        projectInfo: null,
+        // 未完成测算表信息
+        calculateProgress: null
+    }),
+    actions: {
+        setProjectInfo(data) {
+            this.projectInfo = data
+        },
+        removeProjectInfo(){
+            this.projectInfo = null;
+        },
+        setCalculateProgress(data) {
+            this.calculateProgress = data
+        },
+        removeCalculateProgress(){
+            this.calculateProgress = null;
+        }
+    },
+    persist: {
+        enabled: true,   //开启持久化
+        key: 'assetsProjectInfo', //设置存储的key,详情见https://prazdevs.github.io/pinia-plugin-persistedstate/zh/guide/config.html配置文档
+    },
+});

+ 30 - 19
src/views/assets/folder/child.vue

@@ -2,14 +2,14 @@
   <div class="contrl">
     <div style="width: 95%;">
       <div class="title-div">
-        <p>{{ projectInfo.folderName }}</p>
+        <p>{{ projectStore.projectInfo.projectName }}</p>
       </div>
       <div class="createNew-div">
         <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;" />
       </div>
-      <div class="createNew-div" @click="createNewCalculate()">
+      <div class="createNew-div" @click="getCalculateProgress()">
         <img src="../../../assets/icons/excel.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;" />
@@ -89,6 +89,10 @@
 </template>
 
 <script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
+import { getUnFinishedCalculateProgress } from '@/api/assetsCalculate';
+
 export default {
   name: 'assetsChild',
   data() {
@@ -98,32 +102,39 @@ export default {
       folderName: null
     }
   },
-  // watch: {
-  //   '$route': {
-  //     handler(newRoute) {
-  //       if (newRoute.name === 'assetsFolderChild') {
-  //         if (Object.keys(newRoute.query).length > 0) {
-  //           this.projectInfo = this.$route.query;
-  //         } else {
-  //           if (this.projectInfo) {
-  //             this.$router.push({ path: '/home/assets/folder', query: { 'projectId': this.projectInfo.projectId, 'folderName': this.projectInfo.folderName } })
-  //           }
-  //         }
-  //       }
-  //     },
-  //     immediate: true
-  //   }
-  // },
+  computed: {
+    ...mapStores(assetsProjectInfo),
+  },
   created() {
     this.projectInfo = this.$route.query;
   },
   methods: {
     createNewCalculate() {
-      // this.$router.push('/home/assets/workbench/calculate/baseInfo')
       this.$router.push({ path: '/home/assets/workbench/calculate/baseInfo', query: { 'projectId': this.projectInfo.projectId } })
     },
     nextFolder() {
 
+    },
+    // 获取未完成测算表的进度信息并保存到缓存
+    getCalculateProgress() {
+      getUnFinishedCalculateProgress(this.projectStore.projectInfo.id).then(res => {
+        if (res.data) {
+          // 根据不同进度跳转到不同步骤页面
+          if (res.data.progress === 'BASE') {
+            this.$router.push('/home/assets/workbench/calculate/importInfo')
+          } else if (res.data.progress === 'IMPORT') {
+
+          } else if (res.data.progress === 'GENERATE') {
+
+          } else {
+            
+          }
+          this.projectStore.setCalculateProgress(res.data);
+        } else {
+          // 为空说明没有未完成的测算,从头开始新建
+          this.createNewCalculate();
+        }
+      })
     }
   },
 }

+ 6 - 4
src/views/assets/folder/parent.vue

@@ -29,7 +29,7 @@
       <el-tab-pane label="全部项目" name="all">
         <div class="example-list project-list">
           <el-card class="report-item no-border" shadow="never" v-for="item in pageData">
-            <div @click="nextFolder(item.id,item.projectName)">
+            <div @click="nextFolder(item)">
               <div class="report-icon">
                 <img src="../../../assets/icons/folder.png" style="width: 52px; height: 52px;" />
               </div>
@@ -134,6 +134,7 @@
 
 import { mapStores } from 'pinia'
 import { useUserStore } from '@/stores/useUserStore';
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
 import { getDropDownBoxDataByCode } from '@/api/dictData';
 import { createAssetsProject, getAssetsProject, getAssetsProjectDetail, updateAssetsProject, deleteAssetsProject } from '@/api/assetsProject';
 
@@ -166,7 +167,7 @@ export default {
     }
   },
   computed: {
-    ...mapStores(useUserStore),
+    ...mapStores(useUserStore, assetsProjectInfo),
   },
   created() {
     this.getAssetsProject();
@@ -187,8 +188,9 @@ export default {
       this.$router.push('/home/assetsWorkbench/consignor')
     },
     // 跳转文件夹内页面
-    nextFolder(projectId,folderName) {
-      this.$router.push({ path: '/home/assets/folder', query: { 'projectId': projectId,'folderName': folderName } })
+    nextFolder(projectInfo) {
+      this.projectStore.setProjectInfo(projectInfo);
+      this.$router.push('/home/assets/folder')
     },
     // 打开创建项目dialog
     openProjectDialog() {

+ 14 - 12
src/views/assets/workbench/calculate/baseInfo.vue

@@ -28,15 +28,10 @@
 </template>
 
 <script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
 import { createAssetsCalculate } from '@/api/assetsCalculate';
 export default {
-
-    components: {
-
-    },
-    created() {
-
-    },
     data() {
         return {
             baseInfo: {
@@ -52,17 +47,24 @@ export default {
             }
         }
     },
+    computed: {
+        ...mapStores(assetsProjectInfo),
+    },
     methods: {
         // 创建测算表,填写测算表基础信息
         createCalculate() {
             this.$refs.baseInfo.validate((valid) => {
                 if (valid) {
+                    this.baseInfo.progress = 'BASE';
+                    this.baseInfo.projectId = this.projectStore.projectInfo.id;
                     createAssetsCalculate(this.baseInfo).then(res => {
-                        ElMessage({
-                            showClose: true,
-                            message: res.message,
-                            type: 'success'
-                        })
+                        if (res.code == 200) {
+                            ElMessage({
+                                showClose: true,
+                                message: res.message,
+                                type: 'success'
+                            })
+                        }
                     })
                 }
             })

+ 16 - 21
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="baseInfo ? '已完成' : '未完成'" placement="top" :color="baseInfo ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'BASE') ? '已完成' : '未完成'" placement="top" :color="(progress === 'BASE') ? '#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="dataImport ? '已完成' : '未完成'" placement="top" :color="dataImport ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'IMPORT') ? '已完成' : '未完成'" placement="top" :color="(progress === 'IMPORT') ? '#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="generate ? '已完成' : '未完成'" placement="top" :color="generate ? '#ff6154' : '#dae1eb'">
+      <el-timeline-item :timestamp="(progress === 'GENERATE') ? '已完成' : '未完成'" placement="top" :color="(progress === 'GENERATE') ? '#ff6154' : '#dae1eb'">
         <el-card shadow="never" class="timeline-card report-item">
           <h4>生成测算表</h4>
           <p>更新时间: 2018/4/12 20:46</p>
@@ -24,28 +24,23 @@
 </template>
 
 <script>
-export default {
-
-  props: {
-    baseInfo: {
-      type: Boolean,
-      required: false
-    },
-    dataImport: {
-      type: Boolean,
-      required: false
-    },
-    generate: {
-      type: Boolean,
-      required: false
-    },
-
-  },
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
 
+export default {
   data() {
     return {
-
+      progress: ''
+    }
+  },
+  computed: {
+    ...mapStores(assetsProjectInfo),
+  },
+  created() {
+    if (this.projectStore.calculateProgress) {
+      this.progress = this.projectStore.calculateProgress.progress;
     }
+    console.log(this.progress)
   },
   methods: {
 

+ 118 - 0
src/views/assets/workbench/calculate/importInfo.vue

@@ -0,0 +1,118 @@
+<template>
+    <div class="contrl">
+        <el-divider content-position="left"><span style="color:#ff6154;">完善测算表信息</span></el-divider>
+        <el-upload ref="importEqptExcel" drag action="#" multiple style="width:50%;margin-left:25%;" accept=".xls,.xlsx" :limit="1"
+            :file-list="fileList" :on-exceed="handleExceed" :before-remove="beforeRemove" :auto-upload="false" :http-request="importEqptExcelData">
+            <el-icon class="el-icon--upload"><upload-filled /></el-icon>
+            <div class="el-upload__text">
+                拖拽文件 <em>或点击上传</em>
+            </div>
+            <template #tip>
+                <div class="el-upload__tip">
+                    文件大小限制在100MB及以下
+                </div>
+            </template>
+        </el-upload>
+        <el-button type="danger" @click="uploadEqptExcel()">
+            确认上传
+        </el-button>
+    </div>
+</template>
+
+<script>
+import { mapStores } from 'pinia'
+import { assetsProjectInfo } from '@/stores/assetsProjectStore';
+import { importEqptExcelData } from '@/api/assetsCalculate'
+
+export default {
+    data() {
+        return {
+            fileList: [],
+        }
+    },
+    computed: {
+        ...mapStores(assetsProjectInfo),
+    },
+    methods: {
+        uploadEqptExcel(){
+            this.$refs.importEqptExcel.submit();
+        },
+        // 导入机器设备信息
+        importEqptExcelData(item) {
+            let eqptExcelData = new FormData();
+            eqptExcelData.append("multipartFile", item.file);
+            eqptExcelData.append("calculateId", this.projectStore.calculateProgress.id);
+            importEqptExcelData(eqptExcelData).then(res => {
+                if (res.code == 200) {
+                    ElMessage({
+                        showClose: true,
+                        message: res.message,
+                        type: 'success'
+                    })
+                    this.fileList = []
+                }
+            })
+        },
+        // 文件上传数量限制
+        handleExceed() {
+            ElMessage({
+                showClose: true,
+                message: "最多选择一个文件!",
+                type: 'error'
+            })
+        },
+        // 移除文件
+        beforeRemove(file, fileList) {
+            fileList = fileList.filter((o) => {
+                return o.name !== file.name
+            });
+            this.tmplAssetCalculate.fileName = null;
+            this.tmplAssetCalculate.fileUrl = null;
+        },
+    }
+}
+</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>