caiaa 1 年之前
父節點
當前提交
98981065d3

+ 14 - 0
src/api/file.js

@@ -1,4 +1,5 @@
 import request from '@/utils/request'
+import { formatFileUrl } from '@/filters'
 
 export function uploadFile(type, data) {
   return request({
@@ -9,6 +10,19 @@ export function uploadFile(type, data) {
   })
 }
 
+export function downloadTemplate(type) {
+  window.open(formatFileUrl(`fileMge/temp/${type}`), '_blank')
+}
+export function uploadExcel(type, data) {
+  const module = type === 'SYSTEM' ? 'app' : 'business'
+  return request({
+    url: `${module}/batchAdd`,
+    method: 'post',
+    headers: { 'Content-Type': 'multipart/form-data' },
+    data: data
+  })
+}
+
 export function fetchFileList(data) {
   return request({
     url: 'fileMge/search',

+ 0 - 1
src/components/Select/TreeSelect.vue

@@ -101,7 +101,6 @@ export default {
     // 初始化滚动条
     initScroll() {
       this.$nextTick(() => {
-        debugger
         const scrollWrap = document.querySelectorAll('.tree-select .el-scrollbar .el-select-dropdown__wrap')[0]
         const scrollBar = document.querySelectorAll('.tree-select .el-scrollbar .el-scrollbar__bar')
         scrollWrap.style.cssText = 'margin: 0px; max-height: none; overflow: hidden;'

+ 93 - 0
src/components/Upload/UploadExcel.vue

@@ -0,0 +1,93 @@
+<template>
+  <div class="upload-single">
+    <el-upload
+      :ref="refName"
+      :name="aliasName"
+      :show-file-list="showFileList"
+      action=""
+      :http-request="httpRequest"
+      :on-change="onChange"
+      v-bind="$attrs"
+    >
+      <el-button icon="el-icon-upload2">{{ btnText }}</el-button>
+      <slot />
+    </el-upload>
+  </div>
+</template>
+
+<script>
+import { uploadExcel } from '@/api/file'
+
+let _uploadId_ = 0
+export default {
+  name: 'UploadExcel',
+  inheritAttrs: false,
+  props: {
+    btnText: {
+      type: String,
+      default: '上传'
+    },
+    type: {
+      type: String,
+      default: 'SYSTEM'
+    },
+    showFileList: {
+      type: Boolean,
+      default: false
+    },
+    uploadChange: {
+      type: Function,
+      default() {}
+    }
+  },
+  data() {
+    return {
+      uploadedFile: null,
+      refName: '_upload_ref_',
+      aliasName: '_upload_name_'
+    }
+  },
+  created() {
+    this.initConfig()
+  },
+  methods: {
+    initConfig() {
+      if (this.$attrs.name) {
+        this.aliasName = this.$attrs.name
+      }
+      this.refName += _uploadId_
+      this.aliasName += _uploadId_
+      _uploadId_++
+    },
+    onChange(file, fileList) {
+      if (file.status === 'ready') {
+        fileList.splice(0, fileList.length - 1)
+      }
+      this.uploadChange && this.uploadChange(file)
+    },
+    submit() {
+      this.$refs[this.refName].submit()
+    },
+    httpRequest(options) {
+      const formData = new FormData()
+      formData.append('file', options.file)
+      uploadExcel(this.type, formData).then(res => {
+        if (options.onSuccess && res.data) {
+          options.onSuccess(res.data)
+        } else {
+          options.onError(new Error(res.data))
+        }
+      }).catch(error => {
+        console.log(error)
+        options.onError(error)
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.upload-single {
+  display: inline-block;
+}
+</style>

+ 1 - 1
src/components/Upload/UploadFile.vue

@@ -33,7 +33,7 @@ export default {
     },
     showFileList: {
       type: Boolean,
-      debugger: false
+      default: false
     },
     uploadChange: {
       type: Function,

+ 3 - 2
src/layout/components/HeaderTop.vue

@@ -19,7 +19,7 @@
           <div slot="reference"><svg-icon icon-class="yingyong" />应用热榜推荐</div>
         </el-popover>
         <div class="right-top-item"><svg-icon icon-class="quanxian" />用户权限管理</div>
-        <div class="right-top-item"><el-badge :value="12" class="item"><svg-icon icon-class="xiaoxi" /></el-badge>消息提醒</div>
+        <div class="right-top-item"><el-badge :value="messageCount.todo" class="item"><svg-icon icon-class="xiaoxi" /></el-badge>消息提醒</div>
         <el-dropdown trigger="click" class="right-top-item">
           <div>
             <el-avatar src="/images/avatar.png" />
@@ -58,7 +58,8 @@ export default {
     ...mapGetters([
       'sidebar',
       'avatar',
-      'name'
+      'name',
+      'messageCount'
     ])
   },
   methods: {

+ 11 - 11
src/utils/request.js

@@ -48,12 +48,12 @@ service.interceptors.response.use(
 
     if (res.code !== undefined) {
       if (res.code !== 200) {
-        Message({
-          message: res.msg || res.message || '出错',
-          type: 'error',
-          duration: 5 * 1000
-        })
-        return Promise.reject(new Error(res.msg || res.message || '出错'))
+        // Message({
+        //   message: res.msg || res.message || '请联系系统管理员!',
+        //   type: 'error',
+        //   duration: 5 * 1000
+        // })
+        return Promise.reject(new Error(res.msg || res.message || '请联系系统管理员!'))
       }
     }
     return res
@@ -63,11 +63,11 @@ service.interceptors.response.use(
       location.href = error.response.data['casLoginUrl']
     } else {
       console.log('Response Error: ' + error) // for debug
-      Message({
-        message: error.message,
-        type: 'error',
-        duration: 5 * 1000
-      })
+      // Message({
+      //   message: error.message,
+      //   type: 'error',
+      //   duration: 5 * 1000
+      // })
       return Promise.reject(error)
     }
   }

+ 1 - 1
src/views/application/index.vue

@@ -216,7 +216,7 @@ export default {
           type: 'error',
           duration: 0,
           showClose: true,
-          message: ': ' + error.message
+          message: '获取软件列表出错: ' + error.message
         })
       })
     },

+ 0 - 4
src/views/business/components/DetailEdit.vue

@@ -127,10 +127,6 @@ export default {
     onSystemChange(appId) {
       this.formData.appName = this.systemObjs[appId]
     },
-    onSystemBlur(event) {
-      console.log(event)
-      debugger
-    },
     /**
      * 加载dialog
      */

+ 0 - 1
src/views/info/components/DeptUser.vue

@@ -187,7 +187,6 @@ export default {
       return data[this.treeProps.label].indexOf(value) !== -1
     },
     handleNodeChecked(data, list) {
-      debugger
       if (list.checkedKeys.length === 0) {
         this.formData.orgCode = ''
       } else {

+ 1 - 1
src/views/system/components/DetailEdit.vue

@@ -270,7 +270,7 @@ export default {
       })
     },
     getDeptData() {
-      const params = { fromRoot: 1 }
+      const params = { fromRoot: 0 }
       getDeptTreeData(params).then(res => {
         if (!isNull(res.data)) {
           this.deptData = res.data

+ 34 - 7
src/views/system/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="system-container">
+  <div v-loading="uploadLoading" class="system-container">
     <el-card class="type-box">
       <div slot="header" class="clearfix card-title">
         <span>应用类型</span>
@@ -25,9 +25,8 @@
       </div>
       <div class="list-button">
         <el-button type="primary" @click="showEdit('ADD')">新增</el-button>
-        <el-upload action="" class="upload-btn">
-          <el-button>导入</el-button>
-        </el-upload>
+        <upload-excel ref="uploadFile" class="upload-btn" type="SYSTEM" :before-upload="uploadBefore" :on-success="uploadSuccess" :on-error="uploadError" />
+        <el-button type="info" @click="downloadTemplate">模板下载</el-button>
       </div>
       <div v-loading="loading" class="list-box">
         <el-scrollbar class="list-scrollbar">
@@ -74,12 +73,14 @@ import { fetchDictData } from '@/api/dict'
 import { fetchAllSystemList, pushDeleteSystem } from '@/api/system'
 
 import { hasValidRecords, formatDictData, isNull } from '@/utils/convert'
+import { downloadTemplate } from '@/api/file'
 
 import DetailEdit from './components/DetailEdit'
+import UploadExcel from '@/components/Upload/UploadExcel'
 
 export default {
   name: 'System',
-  components: { DetailEdit },
+  components: { DetailEdit, UploadExcel },
   data() {
     return {
       // type
@@ -99,7 +100,9 @@ export default {
       },
       // others
       loading: false,
-      typeLoading: false
+      typeLoading: false,
+      templateType: 'appInfoDemo',
+      uploadLoading: false
     }
   },
   created() {
@@ -107,6 +110,30 @@ export default {
     this.searchTable()
   },
   methods: {
+    // Upload
+    uploadSuccess(data) {
+      this.uploadLoading = false
+      this.$message({
+        type: 'success',
+        message: '上传成功!'
+      })
+      this.searchTable()
+    },
+    uploadError(error) {
+      this.uploadLoading = false
+      this.$message({
+        type: 'error',
+        duration: 0,
+        showClose: true,
+        message: '上传出错:' + error.message
+      })
+    },
+    uploadBefore() {
+      this.uploadLoading = true
+    },
+    downloadTemplate() {
+      downloadTemplate(this.templateType)
+    },
     // 改变每页显示条数
     handleSizeChange(val) {
       this.current = 1
@@ -260,7 +287,7 @@ export default {
 
     .upload-btn {
       display: inline-block;
-      margin-left: 10px;
+      margin: 0 10px;
     }
 
     .page {