scorpio 3 年之前
父节点
当前提交
27f6a8b092
共有 8 个文件被更改,包括 268 次插入35 次删除
  1. 1 0
      index.html
  2. 2 0
      package.json
  3. 8 0
      src/api/project/index.js
  4. 5 5
      src/config/website.js
  5. 3 3
      src/page/login.vue
  6. 140 26
      src/views/home/component/folder_list.vue
  7. 50 0
      src/views/home/component/item1.vue
  8. 59 1
      yarn.lock

+ 1 - 0
index.html

@@ -11,5 +11,6 @@
     <script type="module" src="/src/main.js">
       console.info('%c由%cFantastic-admin%c提供支持', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #707070;', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #e24329;', 'font-size: 14px; margin-bottom: 2px; padding: 6px 8px; color: #fff; background: #707070;', '\nhttps://gitee.com/hooray/fantastic-admin')
     </script>
+    <script type="text/javascript" src="date-zh-CN.js"></script>
   </body>
 </html>

+ 2 - 0
package.json

@@ -12,6 +12,7 @@
     "@element-plus/icons-vue": "^2.0.6",
     "@smallwei/avue": "^3.1.4",
     "animate.css": "^4.1.1",
+    "dateformat": "^5.0.3",
     "element-plus": "^2.2.9",
     "js-base64": "^3.7.2",
     "js-md5": "^0.7.3",
@@ -24,6 +25,7 @@
     "vite-plugin-vue-layouts": "^0.7.0",
     "vite-plugin-windicss": "^1.8.7",
     "vue": "^3.2.37",
+    "vue-qr": "^4.0.9",
     "vue-router": "^4.1.2",
     "vue3-eventbus": "^2.0.0",
     "windicss": "^3.5.6"

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

@@ -61,5 +61,13 @@ export default {
     },
     fileRemove(params) { //删除文件
         return fetch('/blade-project-manage/bladefile/v1/remove', params, 'post')
+    },
+    /**
+     * 业主主动授权
+     * @param params
+     * @returns {Promise | Promise<unknown>}
+     */
+    initCode (params) {
+        return fetch('/blade-project-manage/qrcode/v1/getGrantQrcode', params, 'post', 'json')
     }
 }

+ 5 - 5
src/config/website.js

@@ -2,9 +2,9 @@
  * 全局配置文件
  */
 export default {
-    title: '梧桐树云平台',
-    tenant: '000000',
-    clientId: 'pcapplet', // 客户端id
-    clientSecret: 'pcapplet_secret', // 客户端密钥
-    statusWhiteList: []
+  title: '梧桐树云平台',
+  tenant: '000000',
+  clientId: 'project_wx', // 客户端id
+  clientSecret: 'project_wx_key', // 客户端密钥
+  statusWhiteList: []
 }

+ 3 - 3
src/page/login.vue

@@ -17,7 +17,7 @@
                 <el-input
                   v-model='form.name'
                   size='large'
-                  placeholder="用户名"
+                  placeholder="手机号码"
                   prefix-icon="Avatar"
                 />
               </el-form-item>
@@ -104,8 +104,8 @@ export default {
       },
       rules: {
         name: [
-          { required: true, message: '请输入用户名', trigger: 'blur' },
-          { min: 3, max: 12, message: '长度在 3 到 12 个字符', trigger: 'blur' }
+          { required: true, message: '请输入手机号码', trigger: 'blur' },
+          { min: 11, max: 11, message: '请输入11位手机号', trigger: 'blur' }
         ],
         pass: [
           { required: true, message: '请输入密码', trigger: 'blur' },

+ 140 - 26
src/views/home/component/folder_list.vue

@@ -10,7 +10,7 @@
         <span style="flex: 3">操作</span>
       </div>
       <el-empty v-if="folder && folder.length === 0" description="暂无数据"/>
-      <div v-for="item in folder" v-else class="flex flex-center border-bottom padding content-sp">
+      <div v-for="item in folder" :key='item.id' v-else class="flex flex-center border-bottom padding content-sp">
         <img class="icon" src="../../../assets/svg/folder/see.svg">
         <span style="flex:2">{{ item.folderName }}</span>
         <span style="flex: 1">{{ item.updateTime }}</span>
@@ -18,7 +18,7 @@
         <div class="flex flex-center" style="flex: 3">
           <main-button icon="View" title="详情" width="85" @click="fileView(item)"/>
           <main-button icon="Upload" title="上传文件" width="85" @click="uploadFiles(item)"/>
-          <main-button v-if="type === 0" icon="Pointer" title="授权操作" width="85"/>
+          <main-button v-if="type === 0" icon="Pointer" title="授权操作" width="85" @click='getFileList(item)'/>
           <main-button icon="Delete" title="删除" width="85" @click="folderRemove(item)"/>
         </div>
       </div>
@@ -37,16 +37,77 @@
                   @close='show = false'
                   @success='success'/>
     </el-dialog>
+<!--    授权操作-->
+    <el-dialog v-model='authorizeShow' append-to-body center :show-close='false' class='custom-dialog'>
+      <template #header="{ close, titleId, titleClass }">
+        <div class="flex flex-justify-between">
+          <h4 :id="titleId" :class="titleClass">{{currentRow.folderName}}</h4>
+          <el-button type="danger" text @click="close">
+            <el-icon class="el-icon--left"><CircleCloseFilled /></el-icon>
+          </el-button>
+        </div>
+      </template>
+        <div class='flex flex-justify-between flex-col  full-width '>
+          <div class='flex full-width full-height border-bottom padding-bottom bold '>
+            <span class='flex-child-average text-center'>文件/文件夹名称</span>
+            <span class='flex-child-average text-center'>更新(上传)时间</span>
+            <span class='flex-child-average text-center'>权限设置</span>
+          </div>
+          <div class='border-bottom padding-right padding-left mt-10' style='height: 500px'>
+            <div class='flex flex-align-center mb-10 flex-justify-between border-bottom'>
+              <div class='bold'>相关操作</div>
+              <el-radio-group v-model="check">
+                <el-radio label="1" size="large">全部不可见</el-radio>
+                <el-radio label="2" size="large">全部可见</el-radio>
+                <el-radio label="3" size="large">全部可下载</el-radio>
+              </el-radio-group>
+            </div>
+            <div v-for='(item,index) in fileData.records' :key='item'>
+              <item1 :check='check' :data='item' :index='index' @change='change'/>
+            </div>
+          </div>
+          <div class='full-width flex flex-align-center mt-10'>
+            <span class='font-14 bold'>授权时长</span>
+            <el-date-picker
+                v-model="authorizeDate"
+                type="daterange"
+                class='ml-20'
+                range-separator="至"
+                start-placeholder="开始日期"
+                end-placeholder="截止日期"
+                value-format='YYYY-MM-DD'
+            />
+          </div>
+          <div class='full-width flex flex-align-center mt-10'>
+            <span class='font-14 bold'>生成授权连接</span>
+            <el-button class='ml-20' type="danger" icon="Picture" circle  @click='initCode'/>
+            <el-button type="danger" icon="Paperclip" circle />
+          </div>
+          <div class='full-width mt-20 border-top padding-top flex flex-justify-end'>
+            <el-button>取消</el-button>
+            <el-button type='primary'>关闭</el-button>
+          </div>
+        </div>
+    </el-dialog>
+    <el-dialog v-model='qrCodeShow' top='20%' width='400px'>
+      <div class='flex flex-col flex-center light-purple-bg' style='height: 400rpx;width: 400rpx'>
+        <vue-qr :text='qrCodeText' size='340' :logoSrc='logoSrc' :currentLevel='3' :logoScale='0.25'
+                :logoCornerRadius='4'/>
+        <span>复制二维码,通过微信进行分享</span>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import mainButton from '../../../components/main-button.vue'
 import uploadFile from '../../../components/upload-file.vue'
+import item1 from '@/views/home/component/item1.vue'
+import VueQr from 'vue-qr/src/packages/vue-qr.vue'
 
 export default {
   name: 'file_list',
-  components: {mainButton, uploadFile},
+  components: { mainButton, uploadFile, item1, VueQr },
   props: {
     folder: Array,
     total: String,
@@ -55,50 +116,58 @@ export default {
       default: 0
     }
   },
-  data() {
+  data () {
     return {
       show: false,
-      currentRow: null
+      authorizeShow: false,
+      currentRow: null,
+      check: '2',
+      fileData: null,
+      authorizeDate: [],
+      qrCodeShow: false,
+      logoSrc: new URL('../../../assets/img/logo.png', import.meta.url).href,
+      qrCodeText: '',
+      startTime: '',
+      endTime: ''
     }
   },
   methods: {
-    fileView(item) {
+    fileView (item) {
       if (this.type === 0) {
         this.$router.push({
           path: '/home/files',
-          query: {id: item.fileFolderId}
+          query: { id: item.fileFolderId }
         })
       } else {
         this.$router.push({
           path: '/home/his_files',
-          query: {id: item.id}
+          query: { id: item.id }
         })
       }
     },
-    uploadFiles(item) {
+    uploadFiles (item) {
       this.currentRow = item
       this.show = true
     },
-    folderRemove(item) {
-      this.$confirm("确认是否删除该文件夹及所包含的文件?", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+    folderRemove (item) {
+      this.$confirm('确认是否删除该文件夹及所包含的文件?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
       })
-          .then(() => {
-            this.$api.project.folderRemove({ids: item.fileFolderId}).then(res => {
-              if (res.code === 200) {
-                this.$message.success(res.msg)
-                this.$emit('delFolder')
-              } else {
-                this.$message.error(res.msg)
-              }
-            })
+        .then(() => {
+          this.$api.project.folderRemove({ ids: item.fileFolderId }).then(res => {
+            if (res.code === 200) {
+              this.$message.success(res.msg)
+              this.$emit('delFolder')
+            } else {
+              this.$message.error(res.msg)
+            }
           })
+        })
     },
-    success(res) {
+    success (res) {
       this.fileList = res.fileList.map(res => {
-        console.log('dddd' + res)
         const item = {}
         item.title = res.response.data.originalFileName
         item.suffix = res.response.data.suffix
@@ -113,7 +182,7 @@ export default {
       })
       this.addFile()
     },
-    addFile() {
+    addFile () {
       if (this.fileList.length === 0) {
         this.$message.error('请先上传相关文件')
         return
@@ -128,6 +197,46 @@ export default {
           this.$message.error(res.msg)
         }
       })
+    },
+    getFileList (item) {
+      this.currentRow = item
+      this.$api.project.fileList({ folderId: item.fileFolderId }).then(res => {
+        if (res.code === 200) {
+          this.authorizeShow = true
+          this.fileData = res.data
+          this.fileData.records = this.fileData.records.map(sub => {
+            const item = sub
+            sub.type = this.check
+            return item
+          })
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    initCode () {
+      if (this.authorizeDate.length === 0) {
+        this.$message.error('请设置授权时间')
+        return
+      }
+      this.startTime = this.authorizeDate[0]
+      this.endTime = this.authorizeDate[1]
+      const tmps = this.fileData.records.map(sub => {
+        const item = { fileId: sub.id, startTime: this.startTime, endTime: this.endTime, status: sub.type }
+        return item
+      })
+      const folder = [{ folderId: this.currentRow.fileFolderId, startTime: this.startTime, endTime: this.endTime, status: this.type }]
+      this.$api.project.initCode({ files: tmps, folders: folder }).then(res => {
+        if (res.code === 200) {
+          this.qrCodeText = 'https://dev.wutongresearch.club/apply?id=' + res.data.qrcode.qrcodeId
+          this.qrCodeShow = true
+        } else {
+          this.$message.error(res.msg)
+        }
+      })
+    },
+    change (res) {
+      this.fileData[res.index] = res
     }
   }
 }
@@ -151,4 +260,9 @@ export default {
   width: 50px;
   height: 46px;
 }
+.custom-dialog{
+  :deep(.el-dialog){
+    --el-dialog-padding-primary: 0;
+  }
+}
 </style>

+ 50 - 0
src/views/home/component/item1.vue

@@ -0,0 +1,50 @@
+<template>
+  <div class='full-width flex flex-center text-center border-bottom padding-top padding-bottom'>
+    <div class='flex-child-average text-left'>{{item.title}}</div>
+    <div class='flex-child-average'>{{item.updateTime}}</div>
+    <div class='flex-child-average'>
+      <el-radio-group v-model="check" @change='change'>
+        <el-radio label="3" size="large">不可见</el-radio>
+        <el-radio label="1" size="large">可见</el-radio>
+        <el-radio label="2" size="large">可下载</el-radio>
+      </el-radio-group>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'item1',
+  props: {
+    data: Object,
+    index: Number,
+    check: {
+      type: String,
+      default: ''
+    }
+  },
+  watch: {
+    data: {
+      handler (val) {
+        this.item = val
+      },
+      immediate: true
+    }
+  },
+  data () {
+    return {
+      item: null
+    }
+  },
+  methods: {
+    change (res) {
+      this.item.type = res
+      this.$emit('change', { ...this.item, index: this.index })
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 59 - 1
yarn.lock

@@ -856,6 +856,11 @@ csstype@^2.6.8:
   resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
   integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
 
+dateformat@^5.0.3:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-5.0.3.tgz#fe2223eff3cc70ce716931cb3038b59a9280696e"
+  integrity sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==
+
 dayjs@^1.10.4:
   version "1.11.5"
   resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.5.tgz#00e8cc627f231f9499c19b38af49f56dc0ac5e93"
@@ -892,6 +897,13 @@ debuglog@^1.0.1:
   resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
   integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==
 
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
 deep-equal@^2.0.5:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.0.5.tgz#55cd2fe326d83f9cbf7261ef0e060b3f724c5cb9"
@@ -2029,6 +2041,11 @@ js-base64@^3.7.2:
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.2.tgz#816d11d81a8aff241603d19ce5761e13e41d7745"
   integrity sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==
 
+js-binary-schema-parser@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz#3d7848748e8586e63b34e8911b643f59cfb6396e"
+  integrity sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==
+
 js-cookie@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-3.0.1.tgz#9e39b4c6c2f56563708d7d31f6f5f21873a92414"
@@ -2335,6 +2352,11 @@ mime-types@^2.1.12:
   dependencies:
     mime-db "1.52.0"
 
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
 minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
   version "3.1.2"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
@@ -2743,7 +2765,7 @@ object.values@^1.1.5:
     define-properties "^1.1.3"
     es-abstract "^1.19.1"
 
-once@^1.3.0:
+once@^1.3.0, once@^1.3.1:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
   integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
@@ -2827,6 +2849,11 @@ parent-module@^1.0.0:
   dependencies:
     callsites "^3.0.0"
 
+parenthesis@^3.1.5:
+  version "3.1.8"
+  resolved "https://registry.yarnpkg.com/parenthesis/-/parenthesis-3.1.8.tgz#3457fccb8f05db27572b841dad9d2630b912f125"
+  integrity sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==
+
 parse-code-context@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/parse-code-context/-/parse-code-context-1.0.0.tgz#718c295c593d0d19a37f898473268cc75e98de1e"
@@ -3149,6 +3176,20 @@ signal-exit@^3.0.7:
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
+simple-concat@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+  integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+  integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+  dependencies:
+    decompress-response "^6.0.0"
+    once "^1.3.1"
+    simple-concat "^1.0.0"
+
 smart-buffer@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
@@ -3219,6 +3260,13 @@ ssri@^9.0.0, ssri@^9.0.1:
   dependencies:
     minipass "^3.1.1"
 
+string-split-by@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812"
+  integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==
+  dependencies:
+    parenthesis "^3.1.5"
+
 "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.0, string-width@^4.2.3:
   version "4.2.3"
   resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
@@ -3465,6 +3513,16 @@ vue-eslint-parser@^9.0.1:
     lodash "^4.17.21"
     semver "^7.3.6"
 
+vue-qr@^4.0.9:
+  version "4.0.9"
+  resolved "https://registry.yarnpkg.com/vue-qr/-/vue-qr-4.0.9.tgz#6cb965dd0c5a0dff947e6ef582ef149b0780b986"
+  integrity sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==
+  dependencies:
+    glob "^8.0.1"
+    js-binary-schema-parser "^2.0.2"
+    simple-get "^4.0.1"
+    string-split-by "^1.0.0"
+
 vue-router@^4.1.2:
   version "4.1.2"
   resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.1.2.tgz#ae08f63c9610afa6bff6743e8f128b7054d4c9f5"