scorpioyq 2 anni fa
parent
commit
3b4749f9a0

+ 39 - 39
src/api/login/index.js

@@ -1,49 +1,49 @@
 import fetch from '../fetch.js'
 
 export default {
-  /**
+    /**
      * 获取验证码
      * @returns {*}
      */
-  captcha () {
-    return fetch('/blade-auth/oauth/captcha')
-  },
-  login (param, hader) {
-    return fetch('/blade-auth/oauth/token', param, 'post', 'form', {
-      'Tenant-Id': '000000',
-      'Captcha-Key': hader.captchaKey,
-      'Captcha-Code': hader.captchaCode
-    })
-  },
-  sendSMS (params) {
-    return fetch('/blade-pc-applet/wechat/home/getHomeNewList', params)
-  },
-  /**
+    captcha() {
+        return fetch('/blade-auth/oauth/captcha')
+    },
+    login(param, hader) {
+        return fetch('/blade-auth/oauth/token', param, 'post', 'form', {
+            'Tenant-Id': '000000',
+            'Captcha-Key': hader.captchaKey,
+            'Captcha-Code': hader.captchaCode
+        })
+    },
+    sendSMS(params) {
+        return fetch('/blade-pc-applet/wechat/home/getHomeNewList', params)
+    },
+    /**
      * 退出登录
      * @returns {Promise<unknown>}
      */
-  logout () {
-    return fetch('/blade-auth/oauth/logout')
-  },
-  getUserInfo () {
-    return fetch('/blade-project-manage-v2/other/v2/getUserInfo')
-  },
-  /**
-   * 获取按钮权限
-   * @returns {Promise | Promise<unknown>}
-   */
-  getPermission () {
-    return fetch('/blade-system/menu/buttons?clientId=project_web')
-  },
-  qrCode () {
-    return fetch('/wutong-base/oauth/qrcodeLogin')
-  },
-  qrCodeLogin (params) {
-    return fetch('/wutong-base/oauth/getUserInfo', params)
-  },
-  loginByCode (param) {
-    return fetch('/blade-auth/oauth/token', param, 'post', 'form', {
-      'Tenant-Id': '000000'
-    })
-  }
+    logout() {
+        return fetch('/blade-auth/oauth/logout')
+    },
+    getUserInfo() {
+        return fetch('/blade-project-manage/other/v2/getUserInfo')
+    },
+    /**
+     * 获取按钮权限
+     * @returns {Promise | Promise<unknown>}
+     */
+    getPermission() {
+        return fetch('/blade-system/menu/buttons?clientId=project_web')
+    },
+    qrCode() {
+        return fetch('/wutong-base/oauth/qrcodeLogin')
+    },
+    qrCodeLogin(params) {
+        return fetch('/wutong-base/oauth/getUserInfo', params)
+    },
+    loginByCode(param) {
+        return fetch('/blade-auth/oauth/token', param, 'post', 'form', {
+            'Tenant-Id': '000000'
+        })
+    }
 }

+ 131 - 120
src/api/project/index.js

@@ -1,143 +1,154 @@
 import fetch from '../fetch.js'
 
 export default {
-  /**
+    /**
      * 项目相关借口
      * @returns {Promise<unknown>}
      */
-  projectList (current, size, params) { // 项目列表
-    return fetch('/blade-project-manage-v2/project/v2/page', {
-      ...params,
-      current,
-      size
-    })
-  },
-  projectAdd (params) { // 新增项目
-    return fetch('/blade-project-manage-v2/project/v2/save', params, 'post', 'json')
-  },
-  projectRemove (params) { // 删除项目
-    return fetch('/blade-project-manage-v2/project/v2/remove', params, 'post')
-  },
-  typeList (params) { // 项目分类列表
-    return fetch('//blade-project-manage-v2/typeAndStage/v2/page', params)
-  },
-  projectInfo (id) { // 项目详细信息
-    return fetch('/blade-project-manage-v2/project/v2/detail/?id=' + id)
-  },
-  proUpdate (params) { // 项目信息更新
-    return fetch('/blade-project-manage-v2/project/v2/update', params, 'post', 'json')
-  },
-  issuanceDetail (params) { // 项目发行明细
-    return fetch('/blade-project-manage-v2/projectdetail/v2/list', params)
-  },
-  issueAdd (params) { // 新增发行明细
-    return fetch('/blade-project-manage-v2/projectdetail/v2/save', params, 'post', 'json')
-  },
-  userStageList () { // 统计用户阶段项目数
-    return fetch('/blade-project-manage-v2/stage/v2/projectCount')
-  },
-  includeStage (params) { // 单个项目包含阶段
-    return fetch('/blade-project-manage-v2/stage/v2/projectStages', params)
-  },
-  folderList (params) { // 阶段包含文件夹列表
-    return fetch('/blade-project-manage-v2/folder/v2/listByStageId', params)
-  },
-  sqRecord (params) { // 文件夹授权记录
-    return fetch('/blade-project-manage-v2/qrcode/v2/grantLog', params)
-  },
-  findFiles (params) { // 文件搜索
-    return fetch('/blade-project-manage-v2/folder/v2/findFile', params)
-  },
-  folderListAll (params) { // 历史数据文件夹列表
-    return fetch('/blade-project-manage-v2/folder/v2/history', params)
-  },
-  folderRemove (params) { // 删除文件夹
-    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
-  },
-  folderAdd (params) { // 添加文件夹
-    return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
-  },
-  folderUpdate (params) { // 文件夹更新
-    return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
-  },
-  fileList (params) { // 文件夹里包含文件列表
-    return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
-  },
-  fileDetail (id) {
-    return fetch('/wutong-library/library/detail/' + id)
-  },
-  articleDetailByFile (id) {
-    return fetch('/wutong-library/library/detail/file/' + id)
-  },
-  fileAdd (params) { // 上传(新增)文件
-    return fetch('/blade-project-manage-v2/folder/v2/saveFile', params, 'post', 'json')
-  },
-  fileRemove (params) { // 删除文件
-    return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
-  },
-  /**
+    projectList(current, size, params) { // 项目列表
+        return fetch('/blade-project-manage/project/v2/page', {
+            ...params,
+            current,
+            size
+        })
+    },
+    projectAdd(params) { // 新增项目
+        return fetch('/blade-project-manage-v2/project/v2/save', params, 'post', 'json')
+    },
+    projectRemove(params) { // 删除项目
+        return fetch('/blade-project-manage-v2/project/v2/remove', params, 'post')
+    },
+    typeList(params) { // 项目分类列表
+        return fetch('/blade-project-manage-v2/typeAndStage/v2/page', params)
+    },
+    projectInfo(id) { // 项目详细信息
+        return fetch('/blade-project-manage/project/v2/detail/?id=' + id)
+    },
+    proUpdate(params) { // 项目信息更新
+        return fetch('/blade-project-manage-v2/project/v2/update', params, 'post', 'json')
+    },
+    issuanceDetail(params) { // 项目发行明细
+        return fetch('/blade-project-manage/projectdetail/v2/list', params)
+    },
+    issueAdd(params) { // 新增发行明细
+        return fetch('/blade-project-manage-v2/projectdetail/v2/save', params, 'post', 'json')
+    },
+    userStageList() { // 统计用户阶段项目数
+        return fetch('/blade-project-manage-v2/stage/v2/projectCount')
+    },
+    includeStage(params) { // 单个项目包含阶段
+        return fetch('/blade-project-manage/stage/v2/projectStages', params)
+    },
+    folderList(params) { // 阶段包含文件夹列表
+        return fetch('/blade-project-manage/folder/v2/listByStageId', params)
+    },
+    sqRecord(params) { // 文件夹授权记录
+        return fetch('/blade-project-manage-v2/qrcode/v2/grantLog', params)
+    },
+    findFiles(params) { // 文件搜索
+        return fetch('/blade-project-manage-v2/folder/v2/findFile', params)
+    },
+    folderListAll(params) { // 历史数据文件夹列表
+        return fetch('/blade-project-manage-v2/folder/v2/history', params)
+    },
+    folderRemove(params) { // 删除文件夹
+        return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
+    },
+    folderAdd(params) { // 添加文件夹
+        return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
+    },
+    folderUpdate(params) { // 文件夹更新
+        return fetch('/blade-project-manage-v2/folder/v2/submit', params, 'post', 'json')
+    },
+    fileList(params) { // 文件夹里包含文件列表
+        return fetch('/blade-project-manage-v2/folder/v2/getListByFolderId', params)
+    },
+    fileDetail(id) {
+        return fetch('/wutong-library/library/detail/' + id)
+    },
+    articleDetailByFile(id) {
+        return fetch('/wutong-library/library/detail/file/' + id)
+    },
+    fileAdd(params) { // 上传(新增)文件
+        return fetch('/blade-project-manage-v2/folder/v2/saveFile', params, 'post', 'json')
+    },
+    fileRemove(params) { // 删除文件
+        return fetch('/blade-project-manage-v2/folder/v2/remove', params, 'post')
+    },
+    /**
      * 业主主动授权
      * @param params
      * @returns {Promise | Promise<unknown>}
      */
-  initCode (params) {
-    return fetch('/blade-project-manage-v2/qrcode/v2/getGrantQrcode', params, 'post', 'json')
-  },
-  /**
+    initCode(params) {
+        return fetch('/blade-project-manage-v2/qrcode/v2/getGrantQrcode', params, 'post', 'json')
+    },
+    /**
      * 服务商触发消息发送
      * @param params
      * @returns {Promise | Promise<unknown>}
      */
-  send (params) {
-    return fetch('/blade-project-manage-v2/frontMessage/v2/sendMessage', params)
-  },
-  /**
+    send(params) {
+        return fetch('/blade-project-manage-v2/frontMessage/v2/sendMessage', params)
+    },
+    /**
      * 服务商主动申请文件授权
      * @param params
      * @returns {Promise<unknown>}
      */
-  apply (params) {
-    return fetch('/blade-project-manage-v2/grant/v2/applyGrant', params, 'post', 'json')
-  },
-  folderType (params) {
-    return fetch('/blade-project-manage-v2/dict/v2/getDictList', params)
-  },
-  /**
+    apply(params) {
+        return fetch('/blade-project-manage-v2/grant/v2/applyGrant', params, 'post', 'json')
+    },
+    folderType(params) {
+        return fetch('/blade-project-manage/dict/v2/getDictList', params)
+    },
+    /**
      * 全站搜索
      * @param params
      * @returns {Promise<unknown>}
      */
-  totalSearch (params) {
-    return fetch('/blade-project-manage-v2/searcher/v2/getListByKeyword', params, 'post', 'json')
-  },
-  /**
-   * 搜索详情
-   */
-  searchDetail (params) {
-    return fetch('/blade-project-manage-v2/searcher/v2/searchFileDetails', params, 'post', 'json')
-  },
-  total (params) {
-    return fetch('/blade-project-manage-v2/searcher/v2/getTotalByKeyword', params, 'post')
-  },
-  totalAmount (params) {
-    return fetch('/blade-project-manage-v2/project/v2/getTotalAmount', params)
-  },
-  /**
-   * 是否需要归档
-   */
-  isHistory (params) {
-    return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
-  },
-  /**
-   * 归档
-   */
-  doneHistory (params) {
-    return fetch('/blade-project-manage-v2/folder/v2/history', params)
-  },
-  /**
-   * 是否有权限创建文件夹
-   */
-  queryCreateFolder (params) {
-    return fetch('/blade-project-manage-v2/folder/v2/queryFolderGrant', params)
-  }
+    totalSearch(params) {
+        return fetch('/blade-project-manage-v2/searcher/v2/getListByKeyword', params, 'post', 'json')
+    },
+    /**
+     * 搜索详情
+     */
+    searchDetail(params) {
+        return fetch('/blade-project-manage-v2/searcher/v2/searchFileDetails', params, 'post', 'json')
+    },
+    total(params) {
+        return fetch('/blade-project-manage-v2/searcher/v2/getTotalByKeyword', params, 'post')
+    },
+    totalAmount(params) {
+        return fetch('/blade-project-manage-v2/project/v2/getTotalAmount', params)
+    },
+    /**
+     * 是否需要归档
+     */
+    isHistory(params) {
+        return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
+    },
+    /**
+     * 归档
+     */
+    doneHistory(params) {
+        return fetch('/blade-project-manage-v2/folder/v2/history', params)
+    },
+    /**
+     * 是否有权限创建文件夹
+     */
+    queryCreateFolder(params) {
+        return fetch('/blade-project-manage/folder/v2/queryFolderGrant', params)
+    }
+}
+
+export const getLazyList = (parentId, params) => {
+    return request({
+        url: '/blade-project-manage/project/v2/childrenList',
+        method: 'get',
+        params: {
+            ...params,
+            parentId
+        }
+    })
 }

BIN
src/assets/img/export.png


+ 1 - 0
src/assets/svg/box.svg

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="237.161" height="71" viewBox="0 0 237.161 71"><defs><style>.a{fill:#4390f9;}</style></defs><path class="a" d="M86.161-169.75H-127a4,4,0,0,0-4,4v17.644a4,4,0,0,1-2,3.464l-12,6.928a4,4,0,0,0,0,6.928l12,6.928a4,4,0,0,1,2,3.464v17.644a4,4,0,0,0,4,4H86.161a4,4,0,0,0,4-4v-63A4,4,0,0,0,86.161-169.75Z" transform="translate(90.161 -98.75) rotate(180)"/></svg>

+ 1 - 0
src/components/base-button.vue

@@ -8,6 +8,7 @@
 </template>
 
 <script>
+
 export default {
   name: 'base-button',
   props: {

+ 1 - 3
src/components/uploads.vue

@@ -132,6 +132,7 @@ export default {
     },
     handleChange(file, fileList) {
       this.tmpFileList = fileList
+      this.$emit('before',this.tmpFileList)
     },
     maxChange() {
       if (this.max === 1) { // 只有一张图的时候超出进行覆盖
@@ -169,9 +170,6 @@ export default {
     onError() {
       this.$message.error('服务器异常,请联系管理员!')
     },
-    beforeUp(tmpFileList) {
-      console.log(tmpFileList)
-    }
   }
 }
 </script>

+ 72 - 85
src/views/home/component/dash.vue

@@ -20,9 +20,9 @@
         <base-button class="ml-20 mt-20" icon="Plus" title="新增"
                      @click="showAdd = true"/>
         <base-button class="ml-20 mt-20" icon="el-icon-upload" title="数据导入"
-                     @click="showImport = true"/>
+                     @click="diaType = 0"/>
         <base-button class="ml-20 mt-20" icon="el-icon-download" title="数据导出"
-                     @click="showImport = true"/>
+                     @click="diaType = 1"/>
       </div>
     </div>
     <avue-crud ref="crud"
@@ -35,13 +35,14 @@
                :table-loading="loading"
                class="curd"
                @row-del="rowDel"
+               @tree-load="treeLoad"
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
                @on-load="onLoad">
-      <!--      <template #menu="{row}">-->
-      <!--        <el-button icon="Operation" text @click="track(row.id)">跟踪审计</el-button>-->
-      <!--      </template>-->
+      <template #menu="{row}">
+        <el-button icon="Upload" text @click="track(row.id)">项目上报</el-button>
+      </template>
     </avue-crud>
     <!--    新增-->
     <el-dialog v-model="showAdd"
@@ -115,36 +116,7 @@
         </el-form>
       </div>
     </el-dialog>
-    <!--    表格导入-->
-    <el-dialog v-model='showImport'
-               append-to-body
-               center
-               title="数据表格导入"
-               width="50%">
-      <div class='flex flex-center flex-col'>
-        <img src="../../../assets/img/import.png" style="width: 196px;height: 154px"/>
-        <div class="flex flex-center full-width flex-justify-start">
-          <span class="bold mr-20">文件上传</span>
-          <uploads ref='upload' max="9" btn-text="点击进行文件上传" @success="upload" accept=".xls,.xlsx"/>
-        </div>
-        <div class="flex flex-justify-start full-width">
-          <span class="font-12 mt-10"
-                style="color:#E24141">注意:文件格式需要为Excel表格,表格必须要有项目名称及责任单位名称两项内容,才能确保系统成功解析文件。</span>
-        </div>
-      </div>
-      <el-divider/>
-      <div class="hide-scrollbar full-width" style="height: 20vh;overflow-x: scroll">
-        <div v-if='attaches.length === 0' class='full-width flex flex-center '>
-          <el-empty image-size='100'/>
-        </div>
-        <div class="flex flex-justify-between flex-center mt-5" v-for="(item,index) in attaches" :key="item">
-          <span class="blue">{{ item.response.data.originalFileName }}</span>
-          <el-icon color="#DCAE64" size="16px" @click="removeFile(index)">
-            <CircleCloseFilled/>
-          </el-icon>
-        </div>
-      </div>
-    </el-dialog>
+    <form_dialog :dialogType="diaType"/>
   </div>
 </template>
 
@@ -152,21 +124,19 @@
 import BaseButton from '../../../components/base-button.vue'
 import permissionStore from '@/store/permission.js'
 import {vaildData} from '@/utils/tools.js'
-import uploads from "@/components/uploads.vue";
+import form_dialog from "@/views/home/component/form_dialog.vue";
 
 export default {
   name: 'dash',
-  components: {BaseButton, uploads},
+  components: {BaseButton, form_dialog},
   setup() {
     const permissions = permissionStore()
     return {permissions}
   },
   data() {
     return {
-      attaches: [],
       disable: false,
       showAdd: false,
-      showImport: false,
       active: 0,
       loading: false,
       addLoading: false,
@@ -175,17 +145,19 @@ export default {
       option: {
         refreshBtn: false,
         tip: false,
+        lazy: true,
         columnBtn: false,
         searchShow: true,
         editBtn: true,
-        editBtnText: '跟踪审计',
-        editBtnIcon: 'Operation',
+        editBtnText: '资料管理',
+        editBtnIcon: 'Document',
         addBtn: false,
         delBtn: true,
         border: true,
         index: true,
         align: 'center',
         viewBtn: true,
+        viewBtnText: '详情',
         menuWidth: 320,
         dialogClickModal: false,
         column: [
@@ -195,6 +167,17 @@ export default {
             addDisplay: false,
             editDisplay: false
           },
+          {
+            label: '项目情况',
+            prop: 'projectStage',
+            type: 'select',
+            width: 180,
+            dicUrl: '/api/blade-system/dict-biz/dictionary?code=project-situation',
+            props: {
+              label: 'dictValue',
+              value: 'dictKey'
+            }
+          },
           {
             label: '项目总投资(万元)',
             prop: 'totalAmount',
@@ -206,36 +189,36 @@ export default {
             }
           },
           {
-            label: '所属机构',
-            prop: 'implementingAgency'
+            label: '股(科)室',
+            prop: 'createDeptName'
           },
           {
-            label: '项目类型',
-            prop: 'projectTypeName',
-            type: 'select',
-            width: 180,
-            dicUrl: '/api/blade-system/dict-biz/dictionary?code=project-tags',
-            props: {
-              label: 'dictValue',
-              value: 'dictKey'
-            }
+            label: '子项目数量',
+            prop: 'lot',
           },
           {
-            label: '项目领域',
-            prop: 'dictName',
-            width: 200
+            label: '是否开工',
+            prop: 'isStart',
+            width: 120,
+            dicData: [
+              {
+                label: "否",
+                value: 0
+              },
+              {
+                label: "是",
+                value: 1
+              }
+            ],
           },
           {
-            label: '发债时间',
-            prop: 'issueDate',
-            type: 'month',
+            label: '项目类型',
+            prop: 'projectTypeName',
             width: 120
           },
           {
-            label: '更新时间',
-            prop: 'updateTime',
-            type: 'month',
-            width: 120
+            label: '创建时间',
+            prop: 'createTime',
           }]
       },
       page: {
@@ -294,11 +277,13 @@ export default {
             trigger: 'change'
           }
         ]
-      }
+      },
+      diaType: -1,
+      parentId: 0,
     }
   },
   created() {
-    this.getTypeList()
+    // this.getTypeList()
     this.$bus.on('serach', (res) => {
       this.onLoad(res)
     })
@@ -313,36 +298,38 @@ export default {
   methods: {
     switchTab(item, index) {
       this.active = index
-      this.onLoad({stageName: item.name === '全部阶段' ? '' : item.name})
+      this.onLoad()
     },
     onLoad(query = {}) {
       this.loading = true
-      const data = {...query}
+      const data = {...query, parentId: this.parentId,}
       this.$api.project.projectList(this.page.currentPage, this.page.pageSize, data).then(res => {
         this.loading = false
         if (res.code === 200) {
-          this.data = res.data.records
+          this.data = res.data.records.map(e => {
+            e.projectStage = e.projectStage + ''
+            return e
+          })
           this.page.total = res.data.total
-          this.loading = false
         }
-        this.getStageList()
-        this.getTotalAmount(data)
+      }).finally(() => {
+        this.loading = false
       })
     },
     beforeOpen(done, type) {
-      if (['view'].includes(type)) {
+      if (['edit'].includes(type)) {
         this.$router.push({
           path: '/home/details',
           query: {id: this.form.id, type: '0', ownerId: this.form.createUser}
         })
-      } else if (type === 'edit') {
-        this.$alert('功能建设中,尽情期待...', '消息提醒', {
-          confirmButtonText: 'OK'
-        })
-        // this.$router.push({
-        //   path: '/home/details',
-        //   query: { id: this.form.id, type: '1' }
+      } else if (type === 'view') {
+        // this.$alert('功能建设中,尽情期待...', '消息提醒', {
+        //   confirmButtonText: 'OK'
         // })
+        this.$router.push({
+          path: '/home/pro_detail',
+          query: {id: this.form.id}
+        })
       }
     },
     currentChange(currentPage) {
@@ -354,6 +341,12 @@ export default {
     refreshChange() {
       this.onLoad()
     },
+    treeLoad(tree, treeNode, resolve) {
+      this.loading = true
+      getLazyList(tree.id).then(res => {
+        resolve(res.data.data.records);
+      });
+    },
     rowDel(row) {
       this.$confirm('确定删除选择的项目?', {
         confirmButtonText: '确定',
@@ -420,14 +413,8 @@ export default {
           })
         }
       })
-    },
-    upload(res) {
-      console.log(res)
-      this.attaches = res.fileList
-    },
-    removeFile() {
-
     }
+
   }
 }
 </script>

+ 200 - 0
src/views/home/component/form_dialog.vue

@@ -0,0 +1,200 @@
+<template>
+  <div>
+    <!--    表格导入-->
+    <el-dialog v-model='showImport'
+               append-to-body
+               center
+               title="数据表格导入"
+               width="45%">
+      <div class='flex flex-center flex-col'>
+        <img src="../../../assets/img/import.png" class="pic"/>
+        <div class="flex flex-center full-width flex-justify-start">
+          <span class="bold mr-20">文件上传</span>
+          <uploads ref='upload' max="9" btn-text="点击进行文件上传" @before="before" @success="upload"
+                   accept=".xls,.xlsx"/>
+        </div>
+        <div class="flex flex-justify-start full-width">
+          <span class="font-12 mt-10"
+                style="color:#E24141">注意:文件格式需要为Excel表格,表格必须要有项目名称及责任单位名称两项内容,才能确保系统成功解析文件。</span>
+        </div>
+      </div>
+      <el-divider/>
+      <div class="hide-scrollbar full-width" style="height: 20vh;overflow-x: scroll">
+        <div v-if='attaches.length === 0' class='full-width flex flex-center '>
+          <el-empty image-size='100'/>
+        </div>
+        <div class="flex flex-justify-between flex-center mt-5" v-for="item in attaches" :key="item">
+          <span class="blue">{{ item.name }}</span>
+          <el-icon color="#DCAE64" size="16px" @click="removeFile(item)">
+            <CircleCloseFilled/>
+          </el-icon>
+        </div>
+      </div>
+      <div class="flex flex-center mt-20 mb-5">
+        <base-button title="重置" type="0" icon="Refresh"/>
+        <base-button class="ml-15" title="导入" icon="el-icon-upload"/>
+      </div>
+    </el-dialog>
+    <!--    表格导出-->
+    <el-dialog v-model='showExport'
+               append-to-body
+               center
+               title="数据表格导出"
+               width="45%">
+      <div class='flex flex-center'>
+        <img src="../../../assets/img/export.png" class="pic"/>
+      </div>
+      <div class="flex flex-col">
+        <el-input
+            v-model="keyWords"
+            clearable
+            placeholder="字段信息快速搜索"
+            prefix-icon="Search"
+        />
+        <div class="flex flex-wrap">
+          <div class="flex flex-center padding radius box-shadow mr-20 mt-20 pointer"
+               v-for="(item,index) in fieldType" :key='item.id' :class="item.isSelect ? 'box-s' : 'box'"
+               @click='switchTab(item,index)'>
+            <div class="flex flex-col flex-center">
+              <span class="bold font-16">{{ item.name }}</span>
+              <div v-if="item.isSelect" class="flex flex-center">
+                <el-icon color="#81D0B2">
+                  <SuccessFilled/>
+                </el-icon>
+                <span class="grey-9 font-12">已选12项</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+      <el-divider/>
+      <div class="hide-scrollbar full-width" style="height: 20vh;overflow-x: scroll">
+        <!--        <div v-if='attaches.length === 0' class='full-width flex flex-center '>-->
+        <!--          <el-empty image-size='100'/>-->
+        <!--        </div>-->
+        <div class="flex flex-justify-between flex-center">
+          <span class="bold font-15 grey ml-5 ">字段选择</span>
+        </div>
+        <div class="flex flex-wrap">
+          <div v-for="item in 10" class="flex flex-center padding pointer">
+            <el-checkbox v-model="checked" label="选项1" size="large"/>
+          </div>
+        </div>
+      </div>
+      <div class="flex flex-center mt-20 mb-5">
+        <base-button title="重置" type="0" icon="Refresh"/>
+        <base-button class="ml-15" title="导出表格" icon="el-icon-download"/>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import BaseButton from "@/components/base-button.vue";
+import uploads from "@/components/uploads.vue";
+
+export default {
+  name: "form_dialog",
+  components: {BaseButton, uploads},
+  props: {
+    dialogType: {
+      type: String,
+      default: -1
+    }
+  },
+  watch: {
+    dialogType: {
+      handler(val) {
+        if (val === 0) {
+          this.showImport = true
+        } else if (val === 1) {
+          this.showExport = true
+        }
+      },
+      immediate: true
+    },
+  },
+  data() {
+    return {
+      active: 0,
+      checked: true,
+      showImport: false,
+      showExport: false,
+      attaches: [],
+      keyWords: '',
+      fieldType: [
+        {
+          name: '项目基础信息',
+          index: 0,
+          isSelect: false,
+        },
+        {
+          name: '项目投资情况',
+          index: 1,
+          isSelect: false,
+        },
+        {
+          name: '年度投资情况',
+          index: 2,
+          isSelect: false,
+        },
+        {
+          name: '前期情况',
+          index: 3,
+          isSelect: false,
+        },
+        {
+          name: '竣工信息',
+          index: 4,
+          isSelect: false,
+        },
+        {
+          name: '其他信息',
+          index: 5,
+          isSelect: false,
+        }
+      ],
+    }
+  },
+
+  methods: {
+    upload(res) {
+      console.log(res)
+      this.attaches = res.fileList
+    },
+    before(files) {
+      console.log(files)
+      this.attaches = files
+    },
+    removeFile(item) {
+      this.attaches = this.attaches.filter(sub => sub.uid !== item.uid)
+    },
+    switchTab(item, index) {
+      this.fieldType[index].isSelect = !this.fieldType[index].isSelect
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.pic {
+  width: 196px;
+  height: 154px;
+  margin-top: -20px;
+}
+
+.box-s {
+  border: 1px solid #AC9A7C;
+  width: 120px;
+  height: 40px;
+  color: #D1A55F;
+}
+
+.box {
+  width: 120px;
+  height: 40px;
+  border: 1px solid transparent;
+  background: #F1F2F7;
+  color: #707070;
+}
+</style>

+ 9 - 10
src/views/home/component/left_bar.vue

@@ -2,9 +2,9 @@
   <div>
     <div class="white-bg top full-height flex flex-col hide-scrollbar" style='overflow-y: auto;'>
       <div class="flex flex-col flex-center mt-15 padding">
-        <span class='font-16 bold  mb-10'>{{ data.name }}</span>
-        <span class="font-16 bold mt-5" style="color:#787C90;">项目总投资额</span>
-        <span class="mt-5 font-16 bold main-color">{{
+        <span class='font-15 bold  mb-10'>{{ data.name }}</span>
+        <span class="font-15 bold mt-5" style="color:#787C90;">项目总投资额</span>
+        <span class="mt-5 font-15 bold main-color">{{
             data.totalAmount ? data.totalAmount.toLocaleString() : '-'
           }}万元</span>
         <main-button :width="200" type="0" @click="proInfo"/>
@@ -20,7 +20,6 @@
       </div>
     </div>
   </div>
-
 </template>
 
 <script>
@@ -29,7 +28,7 @@ import basicStep from '@/components/basic-step/index.vue'
 
 export default {
   name: 'left_bar',
-  components: { mainButton, basicStep },
+  components: {mainButton, basicStep},
   props: {
     data: Object,
     stage: Array,
@@ -40,24 +39,24 @@ export default {
   },
   watch: {
     active: {
-      handler (val) {
+      handler(val) {
         // this.change(0)
       },
       immediate: true
     }
   },
-  data () {
+  data() {
     return {
       height: 0
     }
   },
-  created () {
+  created() {
   },
   methods: {
-    proInfo () {
+    proInfo() {
       this.$emit('typeChange')
     },
-    record () {
+    record() {
       this.$emit('typeChange1')
     }
   }

+ 69 - 15
src/views/home/component/owner_serach.vue

@@ -72,19 +72,10 @@
                 />
               </el-select>
             </el-form-item>
-            <el-form-item class="full-width" label="股(科)室">
-              <el-select
-                  v-model="form.projectType"
-                  clearable
-                  placeholder="选择项目分类"
-                  style="width: 100%">
-                <el-option
-                    v-for="item in typeList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                />
-              </el-select>
+            <el-form-item class="full-width" label="机构选择">
+              <div class="grey-9 pointer chose-box" @click="showOrg = true">
+                选择机构
+              </div>
             </el-form-item>
           </div>
           <div class="flex flex-center flex-justify-end"
@@ -98,6 +89,39 @@
 
       </div>
     </el-form>
+    <!----机构选择----->
+    <el-dialog v-model='showOrg'
+               append-to-body
+               center
+               title="机构选择"
+               width="45%">
+      <div class="flex flex-col">
+        <el-input
+            v-model="keyWords"
+            clearable
+            placeholder="机构快速搜索"
+            prefix-icon="Search"
+        />
+      </div>
+      <el-divider/>
+      <div class="hide-scrollbar full-width" style="height: 20vh;overflow-x: scroll">
+        <!--        <div v-if='attaches.length === 0' class='full-width flex flex-center '>-->
+        <!--          <el-empty image-size='100'/>-->
+        <!--        </div>-->
+        <div class="flex flex-justify-between flex-center">
+          <span class="bold font-15 grey ml-5 ">部门</span>
+        </div>
+        <div class="flex flex-wrap radius mt-15 padding" style="border: 1px solid #DDDFE6">
+          <div v-for="item in 30" class="flex flex-center pointer" :class="checked ? 'org-s' : 'org'">
+            <el-checkbox v-model="checked" label="选项1" size="large"/>
+          </div>
+        </div>
+      </div>
+      <div class="flex flex-center mt-20 mb-5">
+        <base-button title="重置" type="0" icon="Refresh"/>
+        <base-button class="ml-15" title="确定" icon="Check"/>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -113,11 +137,14 @@ export default {
         projectName: '', // 项目名称
         projectType: ''// 项目分类
       },
-      typeList: []
+      typeList: [],
+      showOrg: false,
+      keyWords: '',
+      checked: false
     }
   },
   created() {
-    this.getTypeList()
+    // this.getTypeList()
   },
   methods: {
     getTypeList() {
@@ -145,4 +172,31 @@ export default {
     font-weight: 500;
   }
 }
+
+.chose-box {
+  width: 195px;
+  border: 1px solid #DDDFE6;
+  border-radius: 5px
+}
+
+.org {
+  border-radius: 8px;
+  width: 100px;
+  margin: 10px;
+}
+
+.org-s {
+  border-radius: 8px;
+  background: #4E637F;
+  width: 100px;
+  margin: 10px;
+
+  :deep(.el-checkbox) {
+    color: white;
+  }
+
+  :deep(.el-checkbox__label) {
+    color: white;
+  }
+}
 </style>

+ 151 - 0
src/views/home/component/pro_left.vue

@@ -0,0 +1,151 @@
+<template>
+  <div>
+    <div class="white-bg top full-height flex flex-col hide-scrollbar" style='overflow-y: auto;'>
+      <div class="flex flex-col flex-center mt-15 padding">
+        <span class='font-15 bold  mb-10'>{{ data.name }}</span>
+        <span class="font-15 bold mt-5" style="color:#787C90;">项目总投资额</span>
+        <span class="mt-5 font-15 bold main-color">{{
+            data.totalAmount ? data.totalAmount.toLocaleString() : '-'
+          }}万元</span>
+        <div class="flex flex-center mt-10">
+          <span class="bold mr-15" style="color:#787C90;">{{ currentSituation.dictValue }}</span>
+          <el-select
+              v-model="keyWords"
+              placeholder="修改"
+              size="small"
+              style="width: 60px"
+              @change="result"
+          >
+            <el-option
+                v-for="item in dicList"
+                :key="item.dictKey"
+                :label="item.dictValue"
+                :value="item.dictKey">
+            </el-option>
+          </el-select>
+        </div>
+        <el-divider></el-divider>
+      </div>
+      <div class="flex flex-center flex-col hide-scrollbar" style="height: 55vh;overflow-x: auto;margin-top: -20px">
+        <div class="flex flex-center grey-9 font-15 bold" :class="active === index ? 'box-s' : 'box'"
+             v-for="(item,index) in dicList1" :key="item.id" @click="active = index">{{
+            item.dictValue
+          }}
+        </div>
+        <div>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import mainButton from "@/components/main-button.vue";
+
+export default {
+  name: "pro_left",
+  components: {mainButton},
+  props: {
+    data: Object,
+  },
+  watch: {
+    data: {
+      handler(val) {
+        if (val) {
+          this.getDic('project-situation')
+        }
+      },
+      immediate: false
+    },
+  },
+  data() {
+    return {
+      height: 0,
+      dicList: [],
+      dicList1: [],
+      currentSituation: '',
+      active: 0
+    }
+  },
+  created() {
+    this.getDic('params_type')
+  },
+  methods: {
+    getDic(code) {
+      this.$api.common.dicList({code: code}).then(res => {
+        if (res.code === 200) {
+          if (code === 'project-situation') {
+            this.dicList = res.data
+            let local = this.dicList.filter(e => e.dictKey === this.data.projectStage + '')
+            if (local.length > 0) {
+              this.currentSituation = local[0]
+            }
+          } else if (code === 'params_type') {
+            this.dicList1 = res.data
+          }
+        }
+      })
+    },
+    proInfo() {
+      this.$emit('typeChange')
+    },
+    record() {
+      this.$emit('typeChange1')
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.top {
+  width: 300px;
+  position: fixed;
+  background-color: #FAF9FA
+}
+
+.down {
+  width: 300px;
+  position: fixed;
+  bottom: 0;
+  padding-bottom: 20px;
+  background-color: #FAF9FA
+}
+
+.tip {
+  border-radius: 10px;
+  background-color: #F4F4F1;
+  height: 75px;
+  width: 240px
+}
+
+.middle {
+  width: 270px;
+  position: fixed;
+  bottom: 175px;
+  top: 280px;
+  padding-left: 30px;
+  background-color: #FAF9FA
+}
+
+.title {
+  color: #ECAB56;
+  font-size: 16px;
+  font-weight: 500;
+}
+
+.box {
+  border-bottom: 1px dashed #AFAFAF;
+  width: 150px;
+  padding-top: 32px;
+  padding-bottom: 32px
+}
+
+.box-s {
+  background-image: url("../../../assets/svg/box.svg");
+  background-size: 100% 100%;
+  width: 150px;
+  color: white;
+  padding-top: 32px;
+  padding-bottom: 32px
+}
+</style>

+ 13 - 13
src/views/home/details.vue

@@ -14,7 +14,7 @@
 
 <route>
 {
-name: '项目详情',
+name: '资料管理',
 meta: { keepAlive: true }
 }
 </route>
@@ -27,10 +27,10 @@ import grantRecord from '@/views/home/component/grant_record.vue'
 
 export default {
   name: '项目详情',
-  components: { leftBar, proinfo, folderInfo, grantRecord },
+  components: {leftBar, proinfo, folderInfo, grantRecord},
   watch: {
     stage: {
-      handler (newValue) {
+      handler(newValue) {
         if (newValue) {
           this.change(0)
         }
@@ -38,7 +38,7 @@ export default {
       immediate: true
     }
   },
-  data () {
+  data() {
     return {
       type: '0',
       id: '',
@@ -49,7 +49,7 @@ export default {
       active: -1
     }
   },
-  created () {
+  created() {
     this.id = this.$route.query.id
     this.type = this.$route.query.type
     this.proInfo()
@@ -62,16 +62,16 @@ export default {
     })
   },
   methods: {
-    typeChange () {
+    typeChange() {
       this.type = '0'
     },
-    typeChange1 () {
+    typeChange1() {
       this.type = '2'
     },
     /**
      * 项目信息
      */
-    proInfo () {
+    proInfo() {
       this.$api.project.projectInfo(this.id).then(res => {
         if (res.code === 200) {
           this.data = res.data
@@ -81,8 +81,8 @@ export default {
     /**
      * 发行明细
      */
-    issueList () {
-      this.$api.project.issuanceDetail({ projectId: this.id }).then(res => {
+    issueList() {
+      this.$api.project.issuanceDetail({projectId: this.id}).then(res => {
         if (res.code === 200) {
           this.list = res.data.records
         }
@@ -91,8 +91,8 @@ export default {
     /**
      * 获取项目阶段
      */
-    getStage () {
-      this.$api.project.includeStage({ projectId: this.id }).then(res => {
+    getStage() {
+      this.$api.project.includeStage({projectId: this.id}).then(res => {
         if (res.code === 200) {
           this.stage = res.data.map(e => {
             const newItem = {}
@@ -109,7 +109,7 @@ export default {
      * 切换项目阶段
      * @param res
      */
-    change (res) {
+    change(res) {
       if (this.$route.query.type !== '0') {
         this.type = '1'
       }

+ 48 - 0
src/views/home/pro_detail.vue

@@ -0,0 +1,48 @@
+<template>
+  <div class='flex flex-justify-start full-height'>
+    <div class="full-height">
+      <pro_left :data="data"/>
+    </div>
+  </div>
+</template>
+<route>
+{
+name: '项目详情',
+meta: { keepAlive: true }
+}
+</route>
+
+<script>
+import pro_left from "@/views/home/component/pro_left.vue";
+
+export default {
+  name: "pro_detail",
+  components: {pro_left},
+  data() {
+    return {
+      id: '',
+      data: {}
+    }
+  },
+  created() {
+    this.id = this.$route.query.id
+    this.proInfo()
+  },
+  methods: {
+    /**
+     * 项目信息
+     */
+    proInfo() {
+      this.$api.project.projectInfo(this.id).then(res => {
+        if (res.code === 200) {
+          this.data = res.data
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style scoped>
+
+</style>