scorpio 3 年之前
父节点
当前提交
c08e8654cc

+ 1 - 0
src/api/fetch.js

@@ -12,6 +12,7 @@ axios.interceptors.request.use(config => {
   config.headers.token = getToken()
   // 小程序里用m的页面
   config.headers.Platform = 'pc'
+  config.headers.type = 'web'
   if (getToken() === null || getToken() === undefined) {
     delete config.headers.token
   }

+ 11 - 11
src/api/index.js

@@ -1,16 +1,16 @@
 import login from './login/index.js'
 import system from './system/index.js'
-import project from "./project/index.js";
-import common from "./common.js";
-import recycle from "./recycle/index.js";
-import database from "./database/index.js";
+import project from './project/index.js'
+import common from './common.js'
+import recycle from './recycle/index.js'
+import database from './database/index.js'
 
 export default {
-    uploadPath: '/api/wutong-file/minio/file/upload', // 上传
-    login,
-    system,
-    project,
-    common,
-    recycle,
-    database
+  uploadPath: '/api/wutong-file/minio/file/upload', // 上传
+  login,
+  system,
+  project,
+  common,
+  recycle,
+  database
 }

+ 11 - 0
src/api/login/index.js

@@ -34,5 +34,16 @@ export default {
    */
   getPermission () {
     return fetch('/blade-system/menu/buttons')
+  },
+  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'
+    })
   }
 }

+ 73 - 3
src/page/login.vue

@@ -19,7 +19,10 @@
 
           <div v-if='qrCodeLogin' class='flex flex-center flex-col'>
             <span class='font-24 black bold '>欢迎来到梧桐树云平台👏</span>
-            <img class='mt-20' src='../assets/img/code.png' style='width: 300px'/>
+            <div class='flex flex-col flex-center' style='height: 400rpx;width: 400rpx'>
+              <vue-qr :currentLevel='3' :logoCornerRadius='4' :logoScale='0.25' :logoSrc='logoSrc' :text='qrCodeText'
+                      size='340'/>
+            </div>
             <span class='mt-20 grey-6 bold '>请使用微信扫一扫,进行登录</span>
           </div>
 
@@ -101,10 +104,23 @@
 <script>
 import md5 from 'js-md5'
 import { useStore } from '@/store/user.js'
-import { setToken } from '../utils/auth.js'
+import { removeToken, setToken } from '../utils/auth.js'
 import permissionStore from '@/store/permission.js'
+import VueQr from 'vue-qr/src/packages/vue-qr.vue'
 export default {
   name: 'login',
+  components: { VueQr },
+  watch: {
+    qrCodeLogin: {
+      handler (val) {
+        if (val) {
+          this.qrCode()
+          this.checkLogin()
+        }
+      },
+      immediate: true
+    }
+  },
   setup () {
     const user = useStore()
     const permission = permissionStore()
@@ -133,12 +149,20 @@ export default {
       },
       code: '',
       header: '',
-      qrCodeLogin: true
+      qrCodeLogin: true,
+      time: null,
+      qrCodeText: '',
+      sessionId: ''
     }
   },
   created () {
+    this.permission.cleanPermission()
+    removeToken()
     this.init()
   },
+  unmounted () {
+    clearInterval(this.time)
+  },
   methods: {
     init () {
       this.$api.login.captcha().then(res => {
@@ -190,6 +214,52 @@ export default {
           this.permission.addPermission(res.data)
         }
       })
+    },
+    checkLogin () {
+      let count = 0
+      this.time = setInterval(() => {
+        count = count + 1
+        if (this.qrCodeLogin === false) {
+          clearInterval(this.time)
+        }
+        if (count === 60) {
+          this.qrCode()
+          count = 0
+        }
+        if (this.sessionId) {
+          this.codeLogin()
+        } else {
+          this.codeLogin()
+        }
+      }, 1000)
+    },
+    qrCode () {
+      this.$api.login.qrCode().then(res => {
+        if (res.code === 200) {
+          this.sessionId = res.data
+          this.qrCodeText = 'https://dev.wutongresearch.club/login?id=' + this.sessionId
+        }
+      })
+    },
+    codeLogin () {
+      this.$api.login.qrCodeLogin({ sessionId: this.sessionId }).then(res => {
+        if (res.code === 200) {
+          const tmp = res.data
+          console.log(Object.prototype.hasOwnProperty.call(tmp, 'phone'))
+          if (Object.prototype.hasOwnProperty.call(tmp, 'phone')) {
+            const params = { tenantId: '000000', phone: res.data.phone, openId: res.data.openId, grant_type: 'qrcode', scope: 'all', type: 'account' }
+            this.$api.login.loginByCode(params).then(res => {
+              if (res.error_description) {
+                this.$message.error(res.error_description)
+              } else {
+                setToken(res.access_token)
+                this.getInfo()
+                this.$router.replace('/')
+              }
+            })
+          }
+        }
+      })
     }
   }
 }

+ 8 - 3
src/views/home/component/authorize.vue

@@ -65,6 +65,10 @@ export default {
     folderId: {
       type: String,
       default: ''
+    },
+    projectId: {
+      type: String,
+      default: ''
     }
   },
   watch: {
@@ -85,7 +89,8 @@ export default {
       authorizeDate: [],
       fileData: null,
       qrCodeShow: false,
-      fileList: []
+      fileList: [],
+      qrCodeText: ''
     }
   },
   methods: {
@@ -109,9 +114,9 @@ export default {
         endTime: this.endTime,
         status: this.check
       }]
-      this.$api.project.initCode({ files: tmps, folders: folder, type: 1 }).then(res => {
+      this.$api.project.initCode({ files: tmps, folders: folder, type: 1, projectId: this.projectId }).then(res => {
         if (res.code === 200) {
-          this.qrCodeText = 'https://dev.wutongresearch.club/apply?id=' + res.data.qrcode.qrcodeId
+          this.qrCodeText = 'https://dev.wutongresearch.club/apply?id=' + res.data.qrcode.qrcodeId + '&roleName=服务商'
           this.qrCodeShow = true
         } else {
           this.$message.error(res.msg)

+ 0 - 1
src/views/home/component/dash.vue

@@ -16,7 +16,6 @@
       </div>
       <base-button class="ml-20 mt-20" icon="Plus" title="新增" @click="showAdd = true"/>
     </div>
-    {{permissionList}}
     <avue-crud ref="crud"
                v-model="form"
                :before-open="beforeOpen"

+ 1 - 1
src/views/home/component/files_list.vue

@@ -11,7 +11,7 @@
         <span style="flex: 3">操作</span>
       </div>
       <el-empty v-if="files && files.length === 0"/>
-      <div v-for="item in files" v-else class="flex flex-center border-bottom padding content-sp">
+      <div v-for="item in files" :key='item.id' v-else class="flex flex-center border-bottom padding content-sp">
         <div class="flex-1">
           <img v-if="item.suffix === 'docx'" class="icon" src="../../../assets/svg/folder/doc.svg">
           <img v-else-if="item.suffix === 'pdf'" class="icon" src="../../../assets/svg/folder/pdf.svg">

+ 1 - 1
src/views/home/component/folder_info.vue

@@ -32,7 +32,7 @@
       </div>
     </div>
     <div class="mt-20">
-      <folder-list :folder="folderList" :total="total" :project-id='id' @delFolder="getFolderList"/>
+      <folder-list :folder="folderList" :total="total" :project-id='id' :owner-id='data.createUser'  @delFolder="getFolderList"/>
     </div>
     <el-dialog v-model='addShow' append-to-body width='40%'>
       <div class="flex flex-col">

+ 10 - 6
src/views/home/component/folder_list.vue

@@ -21,6 +21,7 @@
           <main-button icon="View" title="详情" width="85" @click="fileView(item)"/>
           <main-button v-if='permissions.permissions.home_folder_add' icon="Upload" title="上传文件" width="85" @click="uploadFiles(item)"/>
           <main-button v-if="permissions.permissions.home_folder_authorize" icon="Pointer" title="授权操作" width="85" @click='getFileList(item)'/>
+          <main-button v-if="permissions.permissions.home_folder_apply" icon="Delete" title="授权申请" width="85" @click="folderRemove(item)"/>
           <main-button v-if="permissions.permissions.home_folder_del" icon="Delete" title="删除" width="85" @click="folderRemove(item)"/>
         </div>
       </div>
@@ -51,14 +52,14 @@
           </el-button>
         </div>
       </template>
-      <authorize :list='fileData.records' :folder-id='currentRow.id' :project-id='projectId' @close='authorizeShow = false'/>
+      <authorize :list='fileData.records' :folder-id='currentRow.fileFolderId' :project-id='projectId' @close='authorizeShow = false'/>
     </el-dialog>
     <el-dialog v-model='sendMsg' top='20%' width='400px'>
       <div class="flex flex-col flex-center">
         <span class="font-15">是否给业主发送提醒消息?</span>
         <div class="flex flex-center mt-20">
-          <el-button class="mr-15" title="取消" @click="sendMsg = false"/>
-          <el-button type='primary' title="发送" @click="SendMsg"/>
+          <el-button class="mr-15" @click="sendMsg = false">取消</el-button>
+          <el-button type='primary' @click="SendMsg">发送</el-button>
         </div>
       </div>
     </el-dialog>
@@ -82,6 +83,7 @@ export default {
     folder: Array,
     total: String,
     projectId: String,
+    ownerId: String,
     type: {
       type: Number,
       default: 0
@@ -106,7 +108,8 @@ export default {
       endTime: '',
       sendParams: {
         ids: '',
-        ownerId: ''
+        ownerId: '',
+        projectId: ''
       }
     }
   },
@@ -115,7 +118,7 @@ export default {
       if (this.type === 0) {
         this.$router.push({
           path: '/home/files',
-          query: { id: item.fileFolderId }
+          query: { id: item.fileFolderId, projectId: this.projectId }
         })
       } else {
         this.$router.push({
@@ -193,8 +196,9 @@ export default {
       })
     },
     SendMsg () {
-      this.sendParams.ownerId = this.folder[0].createUser
+      this.sendParams.ownerId = this.ownerId
       this.sendParams.ids = this.fileList.map(e => e.fileId).join(',')
+      this.sendParams.projectId = this.projectId
       this.$api.project.send(this.sendParams).then(res => {
         if (res.code === 200) {
           this.$message.success('消息已经发送成功!')

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

@@ -5,7 +5,7 @@
     </div>
     <div class="full-height full-width white-bg padding-left padding-top" style="margin-left: 300px">
       <proinfo v-if="type === '0'" :data="data" :issue="list" @refInfo="proInfo" @refresh="issueList"/>
-      <folder_info v-else :id="id" :projectStageId="projectStageId"/>
+      <folder_info v-else :id="id"  :data='data' :projectStageId="projectStageId" />
     </div>
   </div>
 </template>
@@ -23,18 +23,18 @@ import folder_info from './component/folder_info.vue'
 
 export default {
   name: 'test',
-  components: {leftBar, proinfo, folder_info},
+  components: { leftBar, proinfo, folder_info },
   watch: {
     stage: {
-      handler(newValue) {
+      handler (newValue) {
         if (newValue) {
           this.change(0)
         }
       },
       immediate: true
-    },
+    }
   },
-  data() {
+  data () {
     return {
       type: '0',
       id: '',
@@ -44,7 +44,7 @@ export default {
       projectStageId: ''
     }
   },
-  created() {
+  created () {
     this.id = this.$route.query.id
     this.type = this.$route.query.type
     this.proInfo()
@@ -56,13 +56,13 @@ export default {
     })
   },
   methods: {
-    typeChange() {
+    typeChange () {
       this.type = '0'
     },
     /**
      * 项目信息
      */
-    proInfo() {
+    proInfo () {
       this.$api.project.projectInfo(this.id).then(res => {
         if (res.code === 200) {
           this.data = res.data
@@ -72,8 +72,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
         }
@@ -82,11 +82,11 @@ 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 => {
-            let newItem = {}
+            const newItem = {}
             newItem.title = e.stageName
             newItem.count = e.fileNumber
             newItem.id = e.id
@@ -99,12 +99,12 @@ export default {
      * 切换项目阶段
      * @param res
      */
-    change(res) {
+    change (res) {
       if (this.$route.query.type !== '0') {
         this.type = '1'
       }
       this.projectStageId = this.stage[res] === undefined ? '' : this.stage[res].id
-    },
+    }
   }
 }
 </script>