Browse Source

merge fix

scorpio 2 years ago
parent
commit
ea6f8be8b3

+ 2 - 1
src/api/fetch.js

@@ -22,7 +22,7 @@ axios.interceptors.request.use(config => {
 })
 
 // insurance 保险 502 503 504时兜底的
-function fetch (url = '', params = {}, method = 'get', contentType = 'form', header = {}, insurance, timeout = 15000) {
+function fetch (url = '', params = {}, method = 'get', contentType = 'form', header = {}, responseType = '', insurance, timeout = 15000) {
   contentType === 'form' && (contentType = 'application/x-www-form-urlencoded')
   contentType === 'json' && (contentType = 'application/json')
   contentType === 'file' && (contentType = 'multipart/form-data')
@@ -43,6 +43,7 @@ function fetch (url = '', params = {}, method = 'get', contentType = 'form', hea
       method,
       url: '/api' + url,
       data: qs,
+      responseType,
       headers: {
         'Content-Type': contentType,
         ...header

+ 3 - 1
src/api/index.js

@@ -7,6 +7,7 @@ import database from './database/index.js'
 import task from './task/index.js'
 import company from './company/index.js'
 import inspect from './inspect/index.js'
+import params from './params/index.js'
 
 export default {
   offices: ['pdf', 'doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx'],
@@ -19,5 +20,6 @@ export default {
   database,
   task,
   company,
-  inspect
+  inspect,
+  params
 }

+ 135 - 135
src/api/project/index.js

@@ -2,169 +2,169 @@ import fetch from '../fetch.js'
 import request from '@/api/axios'
 
 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')
-    },
-    proContact(params) { // 关联子项目
-        return fetch('/blade-project-manage-v2/project/v2/connect', params, 'post', 'json')
-    },
-    removeContact(params) {
-        return fetch('/blade-project-manage-v2/project/v2/removeConnect', params, 'post')
-    },
-    childrenList(params) { // 已关联子项目列表
-        return fetch('/blade-project-manage-v2/project/v2/childrenList', params)
-    },
-    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')
-    },
-    userNunList() { // 统计用户各类型项目数
-        return fetch('/blade-project-manage-v2/project/v2/projectStageNumber')
-    },
-    updateStage(params) { // 修改项目情况
-        return fetch('/blade-project-manage-v2/project/v2/updateProjectStage', params, 'post')
-    },
-    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-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')
+  },
+  proContact (params) { // 关联子项目
+    return fetch('/blade-project-manage-v2/project/v2/connect', params, 'post', 'json')
+  },
+  removeContact (params) {
+    return fetch('/blade-project-manage-v2/project/v2/removeConnect', params, 'post')
+  },
+  childrenList (params) { // 已关联子项目列表
+    return fetch('/blade-project-manage-v2/project/v2/childrenList', params)
+  },
+  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')
+  },
+  userNunList () { // 统计用户各类型项目数
+    return fetch('/blade-project-manage-v2/project/v2/projectStageNumber')
+  },
+  updateStage (params) { // 修改项目情况
+    return fetch('/blade-project-manage-v2/project/v2/updateProjectStage', params, 'post')
+  },
+  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')
+  },
+  /**
      * 业主主动授权
      * @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-v2/dict/v2/getDictList', params)
+  },
+  /**
      * 全站搜索
      * @param params
      * @returns {Promise<unknown>}
      */
-    totalSearch(params) {
-        return fetch('/blade-project-manage-v2/searcher/v2/getListByKeyword', params, 'post', 'json')
-    },
-    /**
+  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)
-    },
-    /**
+  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)
-    },
-    /**
+  isHistory (params) {
+    return fetch('/blade-project-manage-v2/folder/v2/isHistory', params)
+  },
+  /**
      * 归档
      */
-    doneHistory(params) {
-        return fetch('/blade-project-manage-v2/folder/v2/history', 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)
-    }
+  queryCreateFolder (params) {
+    return fetch('/blade-project-manage-v2/folder/v2/queryFolderGrant', params)
+  }
 }
 
 export const getLazyList = (parentId, params) => {
-    return request({
-        url: '/api/blade-project-manage-v2/project/v2/childrenList',
-        method: 'get',
-        params: {
-            ...params,
-            parentId
-        }
-    })
+  return request({
+    url: '/api/blade-project-manage-v2/project/v2/childrenList',
+    method: 'get',
+    params: {
+      ...params,
+      parentId
+    }
+  })
 }

+ 8 - 0
src/api/system/index.js

@@ -7,5 +7,13 @@ export default {
    */
   getMenus () {
     return fetch('/blade-system/menu/routes')
+  },
+  /**
+   * 机构懒加载
+   * @param params
+   * @returns {Promise | Promise<unknown>}
+   */
+  getDeptLazy (params) {
+    return fetch('/blade-system/dept/lazy-list', params)
   }
 }

+ 24 - 21
src/components/uploads.vue

@@ -34,8 +34,8 @@
 </template>
 
 <script>
-import {Base64} from 'js-base64'
-import {getToken} from '../utils/auth.js'
+import { Base64 } from 'js-base64'
+import { getToken } from '../utils/auth.js'
 import website from '@/config/website'
 import api from '@/api'
 
@@ -81,28 +81,28 @@ export default {
     },
     files: {
       type: Array,
-      default() {
+      default () {
         return null
       }
     }
   },
-  data() {
+  data () {
     return {
       tmpFileList: [],
       fileList: [],
       headers: {
-        'Authorization': `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`,
+        Authorization: `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`,
         'Blade-Auth': 'bearer ' + getToken()
       }
     }
   },
-  mounted() {
+  mounted () {
     this.setFiles(this.files, 'originalFileName')
   },
   methods: {
-    setFiles(fileList, name) { // 文件回填 (参数:文件列表,文件名的字段name)
+    setFiles (fileList, name) { // 文件回填 (参数:文件列表,文件名的字段name)
       if (!fileList || fileList.length === 0) return
-      let files = []
+      const files = []
       fileList.forEach((item, index) => {
         files.push({
           name: item[name] || '文件' + index + 1,
@@ -116,7 +116,7 @@ export default {
       })
       this.fileList = files
     },
-    progress(event, file, fileList) {
+    progress (event, file, fileList) {
       // this.$message.info('上传中')
       console.log(file.percentage)
       if (file.percentage === 100) {
@@ -130,23 +130,23 @@ export default {
 
       this.$emit('progress')
     },
-    handleChange(file, fileList) {
+    handleChange (file, fileList) {
       this.tmpFileList = fileList
-      this.$emit('before',this.tmpFileList)
+      this.$emit('before', this.tmpFileList)
     },
-    maxChange() {
+    maxChange () {
       if (this.max === 1) { // 只有一张图的时候超出进行覆盖
         this.fileList = []
       } else {
         this.$message.warning(`最多只能上传${this.max}个文件`)
       }
     },
-    beforeUpload(file) {
+    beforeUpload (file) {
       this.loading = true
       console.log(file)
       this.$emit('before', file)
     },
-    success() {
+    success () {
       const finishList = this.tmpFileList.filter(sub => sub.status === 'success')
       if (finishList.length === this.tmpFileList.length) {
         this.$emit('success', {
@@ -159,17 +159,20 @@ export default {
         }, 2000)
       }
     },
-    remove(file, fileList) {
-      let ids = fileList.map(e => e.response.data[0].id)
+    remove (file, fileList) {
+      const ids = fileList.map(e => e.response.data[0].id)
       this.$emit('remove', {
-        file: file,
-        fileList: fileList,
-        ids: ids
+        file,
+        fileList,
+        ids
       })
     },
-    onError() {
-      this.$message.error('服务器异常,请联系管理员!')
+    submit () {
+      this.$refs.upload.submit()
     },
+    onError () {
+      this.$message.error('服务器异常,请联系管理员!')
+    }
   }
 }
 </script>

+ 40 - 38
src/views/home/component/dash.vue

@@ -120,25 +120,25 @@
         </el-form>
       </div>
     </el-dialog>
-    <form_dialog :dialogType="diaType" @close="diaType = -1"/>
+    <form-dialog :dialogType="diaType" @close="diaType = -1" @export='exportExcel'/>
   </div>
 </template>
 
 <script>
 import BaseButton from '../../../components/base-button.vue'
 import permissionStore from '@/store/permission.js'
-import {vaildData} from '@/utils/tools.js'
-import form_dialog from '@/views/home/component/form_dialog.vue'
-import {getLazyList} from '@/api/project/index.js'
+import { vaildData } from '@/utils/tools.js'
+import formDialog from '@/views/home/component/form_dialog.vue'
+import { getLazyList } from '@/api/project/index.js'
 
 export default {
   name: 'dash',
-  components: {BaseButton, form_dialog},
-  setup() {
+  components: { BaseButton, formDialog },
+  setup () {
     const permissions = permissionStore()
-    return {permissions}
+    return { permissions }
   },
-  data() {
+  data () {
     return {
       disable: false,
       showAdd: false,
@@ -249,7 +249,7 @@ export default {
       },
       rules: {
         name: [
-          {required: true, message: '请输入项目名称', trigger: 'blur'}
+          { required: true, message: '请输入项目名称', trigger: 'blur' }
         ],
         projectType: [
           {
@@ -267,10 +267,11 @@ export default {
         ]
       },
       diaType: -1,
-      parentId: 0
+      parentId: 0,
+      queryData: null
     }
   },
-  created() {
+  created () {
     this.getTypeList()
     this.getNumList()
     this.$bus.on('serach', (res) => {
@@ -281,7 +282,7 @@ export default {
     })
   },
   computed: {
-    permissionList() {
+    permissionList () {
       return {
         delBtn: vaildData(this.permissions.permissions.home_del, false)
       }
@@ -292,9 +293,10 @@ export default {
       this.active = index
       this.onLoad({projectStage: item.dictKey})
     },
-    onLoad(query = {}) {
+    onLoad (query = {}) {
       this.loading = true
-      const data = {...query, parentId: this.parentId}
+      const data = { ...query, parentId: this.parentId }
+      this.queryData = data
       this.$api.project.projectList(this.page.currentPage, this.page.pageSize, data).then(res => {
         this.loading = false
         if (res.code === 200) {
@@ -308,11 +310,11 @@ export default {
         this.loading = false
       })
     },
-    beforeOpen(done, type) {
+    beforeOpen (done, type) {
       if (['edit'].includes(type)) {
         this.$router.push({
           path: '/home/details',
-          query: {id: this.form.id, type: '0', ownerId: this.form.createUser}
+          query: { id: this.form.id, type: '0', ownerId: this.form.createUser }
         })
       } else if (type === 'view') {
         // this.$alert('功能建设中,尽情期待...', '消息提醒', {
@@ -320,20 +322,20 @@ export default {
         // })
         this.$router.push({
           path: '/home/pro_detail',
-          query: {id: this.form.id}
+          query: { id: this.form.id }
         })
       }
     },
-    currentChange(currentPage) {
+    currentChange (currentPage) {
       this.page.current = currentPage
     },
-    sizeChange(pageSize) {
+    sizeChange (pageSize) {
       this.page.size = pageSize
     },
-    refreshChange() {
+    refreshChange () {
       this.onLoad()
     },
-    treeLoad(tree, treeNode, resolve) {
+    treeLoad (tree, treeNode, resolve) {
       this.loading = true
       getLazyList(tree.id).then(res => {
         this.loading = false
@@ -343,24 +345,24 @@ export default {
         }))
       })
     },
-    rowDel(row) {
+    rowDel (row) {
       this.$confirm('确定删除选择的项目?', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       })
-          .then(() => {
-            this.$api.project.projectRemove({ids: row.id}).then(res => {
-              if (res.code === 200) {
-                this.$message.success(res.msg)
-                this.onLoad()
-              } else {
-                this.$message.error(res.msg)
-              }
-            })
+        .then(() => {
+          this.$api.project.projectRemove({ ids: row.id }).then(res => {
+            if (res.code === 200) {
+              this.$message.success(res.msg)
+              this.onLoad()
+            } else {
+              this.$message.error(res.msg)
+            }
           })
+        })
     },
-    getNumList() {
+    getNumList () {
       this.$api.project.userNunList().then(res => {
         if (res.code === 200) {
           this.numList = res.data.projectStage
@@ -368,7 +370,7 @@ export default {
         }
       })
     },
-    getTotalAmount(data) {
+    getTotalAmount (data) {
       this.$api.project.totalAmount(Object.assign(data, this.query)).then(res => {
         if (res.code === 200) {
           this.num = res.data
@@ -377,17 +379,17 @@ export default {
         }
       })
     },
-    getTypeList() {
-      this.$api.project.typeList({type: 1, size: 999, current: 1}).then(res => {
+    getTypeList () {
+      this.$api.project.typeList({ type: 1, size: 999, current: 1 }).then(res => {
         this.typeList = res.data.records
       })
-      this.$api.common.dicList({code: 'project-tags'}).then(res => {
+      this.$api.common.dicList({ code: 'project-tags' }).then(res => {
         if (res.code === 200) {
           this.tagsList = res.data
         }
       })
     },
-    track(res) {
+    track (res) {
       if (res.isReport === 1) {
         this.$message.error('该项目已经上报')
         return
@@ -397,7 +399,7 @@ export default {
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        const data = {id: res.id, isReport: 1}
+        const data = { id: res.id, isReport: 1 }
         this.$api.project.proUpdate(data).then(res => {
           if (res.code === 200) {
             console.log(res)

+ 86 - 56
src/views/home/component/form_dialog.vue

@@ -12,6 +12,8 @@
         <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"
+                   :loading='loading'
+                   action='/api/wutong-parse-file/import-excel/v1/parse-excel'
                    accept=".xls,.xlsx"/>
         </div>
         <div class="flex flex-justify-start full-width">
@@ -33,7 +35,7 @@
       </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"/>
+        <base-button class="ml-15" title="导入" icon="el-icon-upload" @click='importExcel'/>
       </div>
     </el-dialog>
     <!--    表格导出-->
@@ -53,17 +55,18 @@
             placeholder="字段信息快速搜索"
             prefix-icon="Search"
         />
-        <div class="flex flex-wrap">
+        <div class="flex flex-wrap flex-align-center">
           <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'"
+               v-for="(item,index) in fieldType" :key='item.id'
+               :class="item.count > 0 ? '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">
+              <span class="bold font-16 text-center">{{ item.dictValue }}</span>
+              <div class="flex flex-center">
                 <el-icon color="#81D0B2">
                   <SuccessFilled/>
                 </el-icon>
-                <span class="grey-9 font-12">已选12项</span>
+                <span class="grey-9 font-12">已选{{ item.count }}项目</span>
               </div>
             </div>
           </div>
@@ -77,27 +80,30 @@
         <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 class="flex flex-wrap" v-if='selectIndex !== -1'>
+          <div v-for="(item,index) in fieldType[selectIndex].params" :key='item.id'
+               class="flex flex-center padding pointer">
+            <el-checkbox v-model=item.checked :label="item.code" size="large" @change='change(selectIndex,index)'>
+              {{ item.dictValue }}
+            </el-checkbox>
           </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"/>
+        <base-button class="ml-15" title="导出表格" icon="el-icon-download" @click='exportExcel'/>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import BaseButton from "@/components/base-button.vue";
-import uploads from "@/components/uploads.vue";
+import BaseButton from '@/components/base-button.vue'
+import uploads from '@/components/uploads.vue'
 
 export default {
-  name: "form_dialog",
-  components: {BaseButton, uploads},
+  name: 'form_dialog',
+  components: { BaseButton, uploads },
   props: {
     dialogType: {
       type: String,
@@ -106,77 +112,101 @@ export default {
   },
   watch: {
     dialogType: {
-      handler(val) {
+      handler (val) {
         if (val === 0) {
           this.showImport = true
         } else if (val === 1) {
+          this.getDict('params_type')
           this.showExport = true
         }
       },
       immediate: true
-    },
+    }
   },
-  data() {
+  data () {
     return {
+      loading: false,
       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,
-        }
-      ],
+      code: '',
+      fieldType: [],
+      paramsList: [],
+      checkList: [],
+      selectIndex: -1,
+      resultParams: []
     }
   },
 
   methods: {
-    close() {
+    getDict (code) {
+      this.$api.common.dicList({ code }).then(res => {
+        if (res.code === 200) {
+          this.fieldType = res.data.map(e => {
+            e.isSelect = false
+            e.count = 0
+            e.parmas = []
+            return e
+          })
+        }
+      })
+    },
+    close () {
       this.$emit('close')
     },
-    upload(res) {
+    upload (res) {
       console.log(res)
       this.attaches = res.fileList
+      this.$message.success('操作成功')
+      this.showImport = false
     },
-    before(files) {
+    before (files) {
       console.log(files)
       this.attaches = files
     },
-    removeFile(item) {
+    removeFile (item) {
       this.attaches = this.attaches.filter(sub => sub.uid !== item.uid)
     },
-    switchTab(item, index) {
+    switchTab (item, index) {
       this.fieldType[index].isSelect = !this.fieldType[index].isSelect
+      this.selectIndex = index
+      if (this.fieldType[index].params === undefined) {
+        this.$api.params.getListByKey({ type: this.fieldType[index].dictKey }).then(res => {
+          if (res.code === 200) {
+            this.fieldType[index].params = res.data.records.map(e => {
+              e.checked = true
+              return e
+            })
+            this.fieldType[index].count = res.data.total
+          }
+        })
+      }
+    },
+    importExcel () {
+      this.$refs.upload.submit()
     },
+    change (parentIndex, index) {
+      const tmp = this.fieldType[parentIndex].params.filter(e => e.checked)
+      this.fieldType[parentIndex].count = tmp.length
+      for (let i = 0; i < tmp.length; i++) {
+        console.log(tmp[i])
+        this.resultParams.push(tmp[i])
+      }
+    },
+    exportExcel () {
+      const params = this.fieldType.filter(sub => sub.params).map(sub => sub.params)
+      const tmps = [].concat.apply([], params)
+      const tmpsList = tmps.filter(sub => sub.checked)
+      if (tmpsList && tmpsList.length > 0) {
+        const result = tmpsList.map(sub => sub.code).join(',')
+        this.$emit('export', result)
+      } else {
+        this.$message.error('未选择任何字段进行导出')
+      }
+    }
   }
 }
 </script>
@@ -191,13 +221,13 @@ export default {
 .box-s {
   border: 1px solid #AC9A7C;
   width: 120px;
-  height: 40px;
+  height: 50px;
   color: #D1A55F;
 }
 
 .box {
   width: 120px;
-  height: 40px;
+  height: 50px;
   border: 1px solid transparent;
   background: #F1F2F7;
   color: #707070;

+ 100 - 45
src/views/home/component/owner_serach.vue

@@ -74,7 +74,7 @@
               </el-select>
             </el-form-item>
             <el-form-item class="full-width" label="机构选择">
-              <div class="grey-9 pointer chose-box" @click="showOrg = true">
+              <div class="grey-9 pointer chose-box" @click="getOrg">
                 选择机构
               </div>
             </el-form-item>
@@ -84,11 +84,7 @@
           </div>
         </div>
         <div class="flex flex-col">
-          <div class="flex  flex-align-center" style="margin-left: 65px">
-            <base-button class="pointer mr-20" icon="Delete" title="清空" type="0" width="130" @click="clear"/>
-            <base-button class="pointer" width="130" @click="sure"/>
-          </div>
-          <div class="flex flex-center mt-15">
+          <div class="flex flex-center ">
             <el-form-item class="full-width" label="省重点">
               <el-select
                   v-model="form.isImportant"
@@ -118,6 +114,10 @@
               </el-select>
             </el-form-item>
           </div>
+          <div class="flex  flex-align-center  flex-justify-end ">
+            <base-button class="pointer " icon="Delete" title="清空" type="0" width="130" @click="clear"/>
+            <base-button class="pointer ml-20" width="130" @click="sure"/>
+          </div>
         </div>
       </div>
     </el-form>
@@ -143,15 +143,17 @@
         <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 class="grid radius mt-15 padding" style="border: 1px solid #DDDFE6">
+          <div v-for="(item,index) in deptList" :key='item.id' class="flex flex-center  pointer padding"
+               :class="item.checked ? 'org-s' : 'org'" @click='changeChecked(index)'>
+            <div :class="item.checked ? 'dot-checked' : 'dot'"></div>
+            <div class='ml-5 full-width' :class="item.checked ? 'white' : ''">{{ item.deptName }}</div>
           </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"/>
+        <base-button class="ml-20" title="确定" icon="Check" @click='orgCheck'/>
       </div>
     </el-dialog>
   </div>
@@ -159,70 +161,77 @@
 
 <script>
 import baseButton from '../../../components/base-button.vue'
+import { useStore } from '@/store/user.js'
 
 export default {
   name: 'owner_serach',
-  components: {baseButton},
-  data() {
+  components: { baseButton },
+  setup () {
+    const user = useStore()
+    return { user }
+  },
+  data () {
     return {
+      deptList: [],
       form: {
         projectName: '', // 项目名称/关键字
         typeId: '', // 项目分类
-        isStart: '',//是否开工
-        isStorage: '',//是否入库
+        isStart: '', // 是否开工
+        isStorage: '', // 是否入库
         amount: '',
-        isImportant: '',//是否省重点
-        isFocusStart: '',//是否集中开工
-        dictKey: ''
+        isImportant: '', // 是否省重点
+        isFocusStart: '', // 是否集中开工
+        dictKey: '',
+        deptId: '' // 机构id,多选
       },
       totalAmount: [
         {
-          name: '500万以上',
-          value: '"",500',
+          name: '5000万以下',
+          value: '5000,0' // 0 max 1 min
         },
         {
-          name: '200-500 万',
-          value: '500,200',
+          name: '5000万以上',
+          value: '50001,""'
         }
       ],
       start: [
         {
-          label: "否",
-          value: 0,
+          label: '否',
+          value: 0
         },
         {
-          label: "是",
-          value: 1,
+          label: '是',
+          value: 1
         }
       ],
       storage: [
         {
-          label: "否",
-          value: 0,
+          label: '否',
+          value: 0
         },
         {
-          label: "是",
-          value: 1,
+          label: '是',
+          value: 1
         }
       ],
       isimport: [
         {
-          label: "否",
-          value: 0,
+          label: '否',
+          value: 0
         },
         {
-          label: "是",
-          value: 1,
+          label: '是',
+          value: 1
         }
       ],
       isfocus: [
         {
-          label: "否",
-          value: 0,
+          label: '否',
+          value: 0
         },
         {
-          label: "是",
-          value: 1,
+          label: '是',
+          value: 1
         }
       ],
       typeList: [],
@@ -231,19 +240,19 @@ export default {
       checked: false
     }
   },
-  created() {
+  created () {
     this.getTypeList()
   },
   methods: {
-    getTypeList() {
+    getTypeList () {
       this.$api.project.typeList().then(res => {
         this.typeList = res.data.records
       })
     },
-    sure() {
+    sure () {
       this.$bus.emit('serach', this.form)
     },
-    clear() {
+    clear () {
       this.form.projectName = ''
       this.form.typeId = ''
       this.form.isStorage = ''
@@ -252,12 +261,35 @@ export default {
       this.form.isFocusStart = ''
       this.form.isImportant = ''
       this.form.dictKey = ''
+      this.form.deptId = ''
       this.$bus.emit('serach', this.form)
     },
-    changeAmount() {
-      let tmps = this.form.amount.split(',')
+    changeAmount () {
+      const tmps = this.form.amount.split(',')
       this.form.totalAmountMax = tmps[0]
       this.form.totalAmountMin = tmps[1]
+    },
+    getOrg () {
+      const parentId = [1, 2].includes(this.user.info.viewStage) ? this.user.info.parentDeptId : this.user.info.deptId
+      this.$api.system.getDeptLazy({ parentId }).then(res => {
+        if (res.code === 200) {
+          this.showOrg = true
+          this.deptList = res.data.map(e => {
+            e.checked = false
+            return e
+          })
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    changeChecked (index) {
+      this.deptList[index].checked = !this.deptList[index].checked
+    },
+    orgCheck () {
+      const checked = this.deptList.filter(sub => sub.checked)
+      this.form.deptId = checked.map(sub => sub.id).join(',')
+      this.showOrg = false
     }
   }
 }
@@ -278,16 +310,39 @@ export default {
   border-radius: 5px
 }
 
+.grid {
+  display: grid;
+  grid-template-columns: auto auto auto auto;
+}
+
 .org {
   border-radius: 8px;
-  width: 100px;
+  width: 150px;
   margin: 10px;
 }
 
+.dot {
+  width: 10px;
+  height: 10px;
+  border-radius: 10px;
+  border: 4px solid #eeeeee;
+}
+
+.dot-checked {
+  width: 10px;
+  height: 10px;
+  border-radius: 10px;
+  border: 4px solid #ECAB56;
+
+  .title {
+    color: white;
+  }
+}
+
 .org-s {
   border-radius: 8px;
   background: #4E637F;
-  width: 100px;
+  width: 150px;
   margin: 10px;
 
   :deep(.el-checkbox) {