Просмотр исходного кода

Merge remote-tracking branch 'origin/v3' into v3

wukai 2 лет назад
Родитель
Сommit
77d4b8cd18
30 измененных файлов с 449 добавлено и 111 удалено
  1. 2 2
      src/api/biz/favorite.js
  2. BIN
      src/assets/images/scanImg.png
  3. 2 0
      src/components/MoveTo/MoveTo.vue
  4. 8 8
      src/layout/indexCommon.vue
  5. 3 0
      src/utils/index.js
  6. 23 7
      src/views/collect/index.vue
  7. 60 7
      src/views/department/MyFile.vue
  8. 2 2
      src/views/department/components/PalaceGridFile.vue
  9. 3 2
      src/views/department/components/PlaceGridFolder.vue
  10. 1 1
      src/views/department/components/createTasnsfer.vue
  11. 1 1
      src/views/department/components/inputPassword.vue
  12. 19 4
      src/views/department/modalComponebts/Transfer.vue
  13. 5 4
      src/views/highSearch/HighSearch.vue
  14. 9 4
      src/views/login.vue
  15. 67 13
      src/views/myfile/MyFile.vue
  16. 2 2
      src/views/myfile/components/PalaceGridFile.vue
  17. 3 2
      src/views/myfile/components/PlaceGridFolder.vue
  18. 1 1
      src/views/myfile/components/inputPassword.vue
  19. 2 2
      src/views/myfile/modalComponebts/FileCollect.vue
  20. 19 4
      src/views/myfile/modalComponebts/Transfer.vue
  21. 60 7
      src/views/publicment/MyFile.vue
  22. 2 2
      src/views/publicment/components/PalaceGridFile.vue
  23. 3 2
      src/views/publicment/components/PlaceGridFolder.vue
  24. 2 2
      src/views/publicment/components/createTasnsfer.vue
  25. 1 1
      src/views/publicment/components/inputPassword.vue
  26. 19 4
      src/views/publicment/modalComponebts/Transfer.vue
  27. 9 1
      src/views/scanner/info/index.vue
  28. 102 22
      src/views/search/index.vue
  29. 17 2
      src/views/system/user/index.vue
  30. 2 2
      src/views/system/user/profile/resetPwd.vue

+ 2 - 2
src/api/biz/favorite.js

@@ -9,11 +9,11 @@ export function listFavorite(query) {
   })
 }
 // 根据标签收藏列表
-export function listFavoriteById(query) {
+export function listFavoriteById(query,par) {
   return request({
     url: '/biz/favorite/list/'+query,
     method: 'get',
-    params: query
+    params: par
   })
 }
 

BIN
src/assets/images/scanImg.png


+ 2 - 0
src/components/MoveTo/MoveTo.vue

@@ -131,6 +131,7 @@ const onSubmit = async () => {
 const checkoutNode = (node, data) => {
   // console.log('node',node);
   // console.log("data", data);
+  if(data.disabled) return
   thisNode.value = {
     label: data.label,
     value: data.id,
@@ -140,6 +141,7 @@ const checkoutNode = (node, data) => {
 //获取文件树
 function getFileTree() {
   documents.fileTree(props.spaceType).then((res) => {
+    res.disabled = true
     treeData.value = [res];
     console.log("treedata", res);
   });

+ 8 - 8
src/layout/indexCommon.vue

@@ -706,10 +706,7 @@ const addFileTab = (data, bool,copy,history,fileId) => {
             par.show = true
             thisData.docId = "";
             editableTabsValue.value = par.id// 新建时标签跳转
-            setTimeout(() => {
-
               iframeSize(par.id,history)
-            }, 1000);
           }
         } else {
           par.show = false
@@ -877,13 +874,16 @@ const closeFileTab = (item, index, e) => {
 };
 // 控制iframe大小
 const iframeSize = (par,history) => {
+  // console.log('执行ifSize',par);
   const outIframe = document.getElementById("iframe" + par.id);
   const inIframe =
     outIframe.contentDocument.getElementsByTagName("iframe")[0];
   if(inIframe==null){
+    // console.log('没有inF');
     setTimeout(() => {
-      iframeSize(id)
-    }, 500);
+      // console.log('==============');
+      iframeSize(par)
+    }, 200);
     return
   }
   console.log('outIframe', outIframe.parentElement);
@@ -893,11 +893,11 @@ const iframeSize = (par,history) => {
   inIframe.style.width = outIframe.style.width =
     outIframe.parentElement.offsetWidth + "px";
       // if(history){
-      //     var widgetIFrameParent = inIframe.parentNode;
+      //     // var widgetIFrameParent = inIframe.parentNode;
       //     outIframe.remove();
       //     // widgetIFrameParent.append("<iframe id=\"widgetIFrame\" style=\"width: 100%;height: 600px\" src=\"\"></iframe>");
-      //     widgetIFrameParent.append("<iframe :src=\"item.src\" frameborder=\"0\" :id=\"`iframe${item.id}`\" :name=\"`iframe${item.id}`\" width=\"100%\" height=\"800px\" class=\"iframeBox\" ></iframe>");
-      //     var widgetIFrameNew = document.getElementById("iframe" + par.id);
+      //     // widgetIFrameParent.append("<iframe :src=\"item.src\" frameborder=\"0\" :id=\"`iframe${item.id}`\" :name=\"`iframe${item.id}`\" width=\"100%\" height=\"800px\" class=\"iframeBox\" ></iframe>");
+      //     // var widgetIFrameNew = document.getElementById("iframe" + par.id);
       //     // widgetIFrameNew.attr('src',encodeURI(par.src));
       //     // widgetIFrameNew.css('width',"100%")
       // }

+ 3 - 0
src/utils/index.js

@@ -104,6 +104,9 @@ export const rightMenuRole = (role,arr)=>{
   if(!roles.l1000){
     arr = arr.filter(item => item.name !== "删除")
   }
+  if(!roles.l0350){
+    arr = arr.filter(item => item.name !== "分享")
+  }
   if(!roles.l1200){
     arr = arr.filter(item => item.name !== "移动到..." && item.name !== "复制到...")
   }

+ 23 - 7
src/views/collect/index.vue

@@ -2,12 +2,12 @@
   <div class="container">
     <div class="topPath">
       <!-- <el-icon><ArrowDown /></el-icon> -->
-      <span @click="backTopPath">{{ topPath }}</span>
+      <!-- <span @click="backTopPath">{{ topPath }}</span>
       <PathLabel
         v-if="!loadingPreview"
         @folderClick="folderClick"
         :pathLabelData="pathLabelData"
-      ></PathLabel>
+      ></PathLabel> -->
       <!-- <BreadMenu></BreadMenu> -->
     </div>
     <!-- 标签 -->
@@ -161,7 +161,9 @@
             <el-table-column prop="docInfo.fileType" label="类型" width="180" />
             <el-table-column prop="docInfo.fileSize" label="大小" width="160">
               <template #default="scope">
-                <div>{{ scope.row.docInfo.fileSize }} KB</div>
+                 <span>
+                    {{ formatFileSize(scope.row.docInfo.fileSize) }}
+                </span>
               </template>
             </el-table-column>
           </el-table>
@@ -234,7 +236,6 @@
     </el-collapse>
   </div>
   <!-- 右键唤出的菜单 -->
-  <!-- TODO 默认就是不搜索标签 -->
   <div
     class="right_menu shouzhi"
     v-if="visible"
@@ -490,12 +491,12 @@ const tabchange = async (labelId) => {
   };
   let res;
   if (labelId === "second") {
-    res = await listFavoriteById(-1);
+    res = await listFavoriteById(-1,query);
     console.log("res", res);
     // return;
   } else {
     // 获取当前标签下的数据
-    res = await listFavoriteById(labelId);
+    res = await listFavoriteById(labelId,query);
   }
 
   // console.log("----res", res);
@@ -537,7 +538,22 @@ const sortArr = (field) => {
     return a[field] - b[field];
   };
 };
-
+// 文件大小格式化
+function formatFileSize(fileSize) {
+    if (fileSize >= 1024 * 1024 * 1024) {
+        // 大于等于1GB,显示GB
+        return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + 'GB';
+    } else if (fileSize >= 1024 * 1024) {
+        // 大于等于1MB,显示MB
+        return (fileSize / (1024 * 1024)).toFixed(2) + 'MB';
+    } else if (fileSize >= 1024) {
+        // 大于等于1KB,显示KB
+        return (fileSize / 1024).toFixed(2) + 'KB';
+    } else {
+        // 小于1KB,显示字节
+        return fileSize + 'B';
+    }
+}
 const setIcon = (fileType) => {
   switch (fileType) {
     case ".docx":

+ 60 - 7
src/views/department/MyFile.vue

@@ -277,7 +277,7 @@
                                 <template #title>
                                    <span class="file-title">文件</span>
                                 </template>
-                                <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="30" :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" height="38vh" :data="fileList" :scrollbar-always-on="true" style="width: 100%"
+                                <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="30" :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" :height="fileHeight" :data="fileList" :scrollbar-always-on="true" style="width: 100%"
                                     @row-contextmenu="handleRowClick" @selection-change="handleSelectionChange"
                                     @row-click="mouseClick" :default-sort="{ prop: 'createTime', order: 'descending' }">
                                     <el-table-column type="selection" width="55" />
@@ -441,8 +441,9 @@
     <!-- 可用扫描仪信息 -->
      <div>
         <el-dialog v-model="checkScanner" title="扫描仪" width="30%">
-            <div v-for="item in scannerList" :key="item.scannerId" @click="checkScanFn(item)" :class="{'checkScan':item.scannerId ==checkScanId }">
-                {{item.scannerName}}
+            <div v-for="item in scannerList" :key="item.scannerId" @click="checkScanFn(item)" id="Onescan" :class="{'checkScan':item.scannerId ==checkScanId }">
+               <img src="@/assets/images/scanImg.png" alt="">
+                {{item.deptName?item.deptName:''}}&nbsp;&nbsp;{{item.scannerName}}
             </div>
             <template #footer>
                 <span class="dialog-footer">
@@ -457,7 +458,7 @@
 </template>
 
 <script>
-import { ref, toRaw, onMounted,onActivated ,inject} from 'vue'
+import { ref, toRaw, onMounted,onActivated ,inject,watch} from 'vue'
 import myfile from '../../api/myfile/myfile'
 import { delFavorite } from '@/api/biz/favorite.js'
 import documents from '../../api/document/document'
@@ -577,6 +578,8 @@ export default {
                 choose: "我的空间"
             }
         ])
+        const fileHeight=ref('38vh')
+        const pageSize = ref(10)
         let useMenu = ref([
             // {
             //     img: ImgFile.copy,
@@ -1793,7 +1796,7 @@ export default {
 
             // console.log('tableBeEnd.value',tableBeEnd.value);
             filePageNum.value = filePageNum.value+1
-            const query = `${thisFolder.value.dirId}?pageSize=10&pageNum=${filePageNum.value}`
+            const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
             // -------------先禁止掉事件 定时器1秒钟后才能再次触发
             tableBeEnd.value = true
             
@@ -1883,6 +1886,48 @@ export default {
             openScanMove.value = false
             refreshFile()
         }
+        watch(() => folder.value, async(newValue, oldValue) => {
+            // console.log('iFrameData 发生改变了', newValue, oldValue);
+            console.log('files',newValue);
+            filePageNum.value = 1
+            if(!newValue.length){
+                fileHeight.value = '75vh'
+                pageSize.value = 20
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }else{
+                pageSize.value = 10
+                fileHeight.value = '38vh'
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }
+        });
         onMounted(() => {
             getAllTop()
             getSpaceList()
@@ -2153,8 +2198,9 @@ export default {
             openScanMove,
             closeOpenScanMove,
             scanFileArr,
-            setImg
-
+            setImg,
+            fileHeight,
+            pageSize
         }
     },
     watch: {
@@ -2520,6 +2566,13 @@ p {
         justify-content: space-between;
     }
 }
+#Onescan{
+    height: 48px;
+    line-height: 48px;
+    font-size: 14px;
+    display: flex;
+    align-items: center;
+}
 
 .isCheck {
     opacity: 1 !important;

+ 2 - 2
src/views/department/components/PalaceGridFile.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <!-- flex盒子 -->
-        <div class="bigBox" style="height: 250px; overflow: auto;" v-if="fileList?.length">
+        <div class="bigBox" style="height: 38vh; overflow: auto;" v-if="fileList?.length">
             <template v-for="(item, index) in fileList" :key="index">
                 <!-- 循环盒子 -->
                 <div class="flexBox" @contextmenu="rightClick(item, $event)">
@@ -514,7 +514,7 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
 }
 

+ 3 - 2
src/views/department/components/PlaceGridFolder.vue

@@ -2,7 +2,7 @@
     <div>
         <div>
             <!-- flex盒子 -->
-            <div class="bigBox" style="height: 250px; overflow: auto;" v-if="folderList?.length">
+            <div class="bigBox" style="height: 37vh; overflow: auto;" v-if="folderList?.length">
                 <template v-for="(item, index) in folderList" :key="index">
                     <!-- 循环盒子 -->
                     <div class="flexBox" @contextmenu="rightClick(item, $event)" @click="folderClickGrid(item)">
@@ -248,8 +248,9 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
+    padding-top: 16px;
 }
 
 .imgBox {

+ 1 - 1
src/views/department/components/createTasnsfer.vue

@@ -250,7 +250,7 @@ onMounted(async () => {
 }
 
 .needLog {
-  height: 100%;
+  height: calc(100% - 30px);
 }
 
 :deep(.el-tag__content) {

+ 1 - 1
src/views/department/components/inputPassword.vue

@@ -2,7 +2,7 @@
   <div>
     <div>
       <el-dialog v-model="isOpen" title="请输入登录密码" width="30%">
-        <el-input v-model="password" type="password"></el-input>
+        <el-input v-model="password" @keyup.enter="sure" type="password"></el-input>
         <template #footer>
           <span class="dialog-footer">
             <el-button @click="close">取消</el-button>

+ 19 - 4
src/views/department/modalComponebts/Transfer.vue

@@ -12,7 +12,15 @@
                         <div class="allLog">
                             <el-tree :filter-node-method="filterNode" v-if="have" ref="treeRef" :data="allTreeData"
                                 :props="allTreeProps" show-checkbox node-key="id" :default-expanded-keys="openTree"
-                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false" />
+                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false">
+                                <template #default="{ node, data }">
+                                    <span class="custom-tree-node">
+                                        <img v-if="data.disabled" src="@/assets/images/Users.png" alt="" />
+                                        <img v-else src="@/assets/images/oneUser.png" alt="" />
+                                        <span>{{ node.label }}</span>
+                                    </span>
+                                </template>
+                                </el-tree>
                             <span v-else>暂无数据</span>
                         </div>
                     </div>
@@ -301,7 +309,7 @@ export default {
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
 .transBox {
     width: 550px;
     height: 400px;
@@ -343,7 +351,14 @@ export default {
     overflow-y: auto;
     text-align: center;
 }
-
+.custom-tree-node{
+  display: flex;
+  align-items: center;
+  img{
+    width: 22px;
+    height: 22px;
+  }
+}
 .needBag_top {
     padding: 0 10px;
     height: 30px;
@@ -353,7 +368,7 @@ export default {
 }
 
 .needLog {
-    height: 100%;
+  height: calc(100% - 30px);
     overflow-y: auto;
 }
 

+ 5 - 4
src/views/highSearch/HighSearch.vue

@@ -1,7 +1,7 @@
 <template>
 <div class="container">
     <div class="logo">
-      <img src="@/assets/images/Frame_427319127.png" alt="" />
+      <img src="@/assets/images/logos.png" alt="" />
       <div class="font">聚合智慧文档管理系统</div>
     </div>
     <div class="search_box">
@@ -98,7 +98,7 @@ import ImgPreview from "@/components/ImgPreview/ImgPreview.vue";
 import { preview } from "@/api/common/common.js";
 // import IdentifyFont from "@/components/IdentifyFont/IdentifyFont.vue";
 const searchText = ref(""); //搜索ipt的值
-const selectValue = ref(1); //文档空间类型
+const selectValue = ref(3); //文档空间类型
 const page = ref(1); //页数
 const size = ref(10); //每页大小
 const total = ref(0); //数据总条数
@@ -238,8 +238,9 @@ const closeImgPreview = () => {
   align-items: center;
 
   img {
-    width: 80px;
-    height: 80px;
+    width: 100px;
+    height: 40px;
+    margin-right: 10px;
   }
 
   .font {

+ 9 - 4
src/views/login.vue

@@ -62,8 +62,11 @@
       </el-form>
     </div>
     <el-dialog
+      v-if="showEdit"
       v-model="showEdit"
       title="修改密码"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
       width="30%"
       @close="closeRepass"
     >
@@ -78,7 +81,7 @@
           :rules="rePassRules"
         >
           <el-form-item label="旧密码" prop="oldpss">
-            <el-input type="password" v-model="formData.oldpss" />
+            <el-input type="password" placeholder="请输入旧密码" v-model="formData.oldpss" />
           </el-form-item>
           <el-form-item label="新密码" prop="newpass">
             <el-input type="password" placeholder="密码长度最少为8位,包含大小写字母、数字、特殊字符" v-model="formData.newpass" />
@@ -153,8 +156,8 @@ const loginRules = {
 
 const rePassRules = {
   oldpss: [{ required: true, trigger: "blur", message: "请输入旧密码" }],
-  newpass: [{ required: true, validator: newPassRule, trigger: "blur" }],
-  rePass: [{ required: true, validator: repassRule, trigger: "blur" }],
+  newpass: [{ required: true, validator: newPassRule, trigger: "change" }],
+  rePass: [{ required: true, validator: repassRule, trigger: "change" }],
 };
 
 const codeUrl = ref("");
@@ -264,7 +267,8 @@ function getCookie() {
   };
 }
 const closeRepass = () => {
-  userStore.logOut();
+  // userStore.logOut();
+  formData.value = { oldpss: "", newpass: "", rePass: "" };
   showEdit.value = false;
 };
 
@@ -285,6 +289,7 @@ const submitForm = async (formEl) => {
       ).then((response) => {
         console.log("response", response);
         ElMessage({ message: "修改成功,请重新登录", type: "success" });
+        formData.value = { oldpss: "", newpass: "", rePass: "" };
         showEdit.value = false;
       });
     } else {

+ 67 - 13
src/views/myfile/MyFile.vue

@@ -293,7 +293,7 @@
                                        <span class="file-title">文件</span>
                                     </template>
                                     <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="30"
-                                        :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" height="38vh"
+                                        :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" :height="fileHeight"
                                         :data="fileList" :scrollbar-always-on="true" style="width: 100%;"
                                         @row-contextmenu="handleRowClick" @selection-change="handleSelectionChange"
                                         @row-click="mouseClick" :default-sort="{ prop: 'createTime', order: 'descending' }">
@@ -461,8 +461,9 @@
     <!-- 可用扫描仪信息 -->
      <div>
         <el-dialog v-model="checkScanner" title="扫描仪" width="30%">
-            <div v-for="item in scannerList" :key="item.scannerId" @click="checkScanFn(item)" :class="{'checkScan':item.scannerId ==checkScanId }">
-                {{item.scannerName}}
+            <div v-for="item in scannerList" :key="item.scannerId" @click="checkScanFn(item)" id="Onescan" :class="{'checkScan':item.scannerId ==checkScanId }">
+               <img src="@/assets/images/scanImg.png" alt="">
+                {{item.deptName?item.deptName:''}}&nbsp;&nbsp;{{item.scannerName}}
             </div>
             <template #footer>
                 <span class="dialog-footer">
@@ -477,7 +478,7 @@
 </template>
 
 <script>
-import { ref, toRaw, onMounted, inject, onActivated } from 'vue'
+import { ref, toRaw, onMounted, inject, onActivated ,watch} from 'vue'
 import myfile from '../../api/myfile/myfile'
 import {documentation}from "@/api/biz/actor.js"
 import {getInfo}from "@/api/biz/info.js"
@@ -734,6 +735,8 @@ export default {
         const openScanMove = ref(false)
         const pathLabelData = ref([
         ])
+        const fileHeight=ref('38vh')
+        const pageSize = ref(10)
          //控制宫格展示
         const isList = ref(false); //控制显示方式
         const openScan = ref(false)//控制扫描文档显示
@@ -1327,12 +1330,12 @@ export default {
                         datas.push(i.docId)
                     }
                 })
-                if(folderId.value.isEncrypt === 'Y'){
-                    return  ElMessage({
-                                message: "删除失败,加密目录不可删除",
-                                type: "error"
-                            })
-                }
+                // if(folderId.value.isEncrypt === 'Y'){
+                //     return  ElMessage({
+                //                 message: "删除失败,加密目录不可删除",
+                //                 type: "error"
+                //             })
+                // }
                 // 文件夹删除
                 if (isFile.value) {//文件
                     documents.delDocument(folderId.value.dirId).then(res => {
@@ -1899,7 +1902,7 @@ export default {
 
             // console.log('tableBeEnd.value',tableBeEnd.value);
             filePageNum.value = filePageNum.value + 1
-            const query = `${thisFolder.value.dirId}?pageSize=10&pageNum=${filePageNum.value}`
+            const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
             // -------------先禁止掉事件 定时器1秒钟后才能再次触发
             tableBeEnd.value = true
 
@@ -1975,6 +1978,48 @@ export default {
         const setImg = (type)=>{
            return setIcon(type)
         }
+        watch(() => folder.value, async(newValue, oldValue) => {
+            // console.log('iFrameData 发生改变了', newValue, oldValue);
+            console.log('files',newValue);
+            filePageNum.value = 1
+            if(!newValue.length){
+                fileHeight.value = '75vh'
+                pageSize.value = 20
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }else{
+                pageSize.value = 10
+                fileHeight.value = '38vh'
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }
+        });
         onMounted(() => {
             // if(!thisFolder.value){
             getAllTop()
@@ -2257,7 +2302,9 @@ export default {
             closeOpenScanMove,
             scanFileArr,
             setImg,
-            closeAddFile
+            closeAddFile,
+            fileHeight,
+            pageSize
         }
     },
     watch: {
@@ -2487,7 +2534,14 @@ p {
     }
 }
 .checkScan{
-    background-color: #eee;
+    background-color: #F5F7F9;
+}
+#Onescan{
+    height: 48px;
+    line-height: 48px;
+    font-size: 14px;
+    display: flex;
+    align-items: center;
 }
 
 :deep(.el-collapse-item__header) {

+ 2 - 2
src/views/myfile/components/PalaceGridFile.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <!-- flex盒子 -->
-        <div class="bigBox" style="height: 250px; overflow: auto;" v-if="fileList?.length">
+        <div class="bigBox" style="height: 38vh; overflow: auto;" v-if="fileList?.length">
             <template v-for="(item, index) in fileList" :key="index">
                 <!-- 循环盒子 -->
                 <div class="flexBox" @contextmenu="rightClick(item, $event)">
@@ -518,7 +518,7 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
 }
 

+ 3 - 2
src/views/myfile/components/PlaceGridFolder.vue

@@ -2,7 +2,7 @@
     <div>
         <div>
             <!-- flex盒子 -->
-            <div class="bigBox" style="height: 250px; overflow: auto;" v-if="folderList?.length">
+            <div class="bigBox" style="height: 37vh; overflow: auto;" v-if="folderList?.length">
                 <template v-for="(item, index) in folderList" :key="index">
                     <!-- 循环盒子 -->
                     <div class="flexBox" @contextmenu="rightClick(item, $event)" @click="folderClickGrid(item)">
@@ -224,8 +224,9 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
+    padding-top: 16px;
 }
 
 .imgBox {

+ 1 - 1
src/views/myfile/components/inputPassword.vue

@@ -2,7 +2,7 @@
   <div>
     <div>
       <el-dialog v-model="isOpen" title="请输入登录密码" width="30%">
-        <el-input v-model="password" type="password"></el-input>
+        <el-input v-model="password" @keyup.enter="sure" type="password"></el-input>
         <template #footer>
           <span class="dialog-footer">
             <el-button @click="close">取消</el-button>

+ 2 - 2
src/views/myfile/modalComponebts/FileCollect.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <div>
-            <el-dialog v-model="fileCollect" title="收藏" width="30%">
+            <el-dialog :close-on-click-modal="false" @close="backColl" :close-on-press-escape="false" v-model="fileCollect" title="收藏" width="30%">
                 <el-form :model="collectForm" label-width="120px">
                     <el-form-item label="名称">
                         <el-input v-model="collectForm.name" />
@@ -80,7 +80,7 @@ export default {
         }
         function tagBlur() {
             if(!newTag.value){
-                ElMessage({ message: '标签名不能为空', type: 'error' })
+                // ElMessage({ message: '标签名不能为空', type: 'error' })
                 return
             }
             collect.addNewTag({ labelName: newTag.value, orderNum: sortNum.value + 1 }).then(res => {

+ 19 - 4
src/views/myfile/modalComponebts/Transfer.vue

@@ -12,7 +12,15 @@
                         <div class="allLog">
                             <el-tree :filter-node-method="filterNode" v-if="have" ref="treeRef" :data="allTreeData"
                                 :props="allTreeProps" show-checkbox node-key="id" :default-expanded-keys="openTree"
-                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false" />
+                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false">
+                                <template #default="{ node, data }">
+                                    <span class="custom-tree-node">
+                                        <img v-if="data.disabled" src="@/assets/images/Users.png" alt="" />
+                                        <img v-else src="@/assets/images/oneUser.png" alt="" />
+                                        <span>{{ node.label }}</span>
+                                    </span>
+                                </template>
+                                </el-tree>
                             <span v-else>暂无数据</span>
                         </div>
                     </div>
@@ -299,7 +307,7 @@ export default {
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
 .transBox {
     width: 550px;
     height: 400px;
@@ -349,9 +357,16 @@ export default {
     align-items: center;
     justify-content: space-between;
 }
-
+.custom-tree-node{
+  display: flex;
+  align-items: center;
+  img{
+    width: 22px;
+    height: 22px;
+  }
+}
 .needLog {
-    height: 100%;
+  height: calc(100% - 30px);
     overflow-y: auto;
 }
 

+ 60 - 7
src/views/publicment/MyFile.vue

@@ -275,7 +275,7 @@
                                 <template #title>
                                    <span class="file-title">文件</span>
                                 </template>
-                                <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="10" :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" :data="fileList" height="38vh" :scrollbar-always-on="true" style="width: 100%"
+                                <el-table v-el-table-infinite-scroll="setScroll" :infinite-scroll-distance="10" :infinite-scroll-disabled="tableBeEnd" v-if="fileGrid == 1" :data="fileList" :height="fileHeight" :scrollbar-always-on="true" style="width: 100%"
                                     @row-contextmenu="handleRowClick" @selection-change="handleSelectionChange"
                                     @row-click="mouseClick" :default-sort="{ prop: 'createTime', order: 'descending' }">
                                     <el-table-column type="selection" width="55" />
@@ -437,8 +437,9 @@
     <!-- 可用扫描仪信息 -->
      <div>
         <el-dialog v-model="checkScanner" title="扫描仪" width="30%">
-            <div v-for="item in scannerList" :key="item.scannerId" @click="checkScanFn(item)" :class="{'checkScan':item.scannerId ==checkScanId }">
-                {{item.scannerName}}
+            <div v-for="item in scannerList" :key="item.scannerId" id="Onescan" @click="checkScanFn(item)" :class="{'checkScan':item.scannerId ==checkScanId }">
+               <img src="@/assets/images/scanImg.png" alt="">
+                {{item.deptName?item.deptName:''}}&nbsp;&nbsp;{{item.scannerName}}
             </div>
             <template #footer>
                 <span class="dialog-footer">
@@ -453,7 +454,7 @@
 </template>
 
 <script>
-import { ref, toRaw, onMounted ,onActivated} from 'vue'
+import { ref, toRaw, onMounted ,onActivated,watch} from 'vue'
 import myfile from '../../api/myfile/myfile'
 import {documentation}from "@/api/biz/actor.js"
 import { delFavorite } from '@/api/biz/favorite.js'
@@ -577,6 +578,8 @@ export default {
                 choose: "我的空间"
             }
         ])
+        const fileHeight=ref('38vh')
+        const pageSize = ref(10)
         let useMenu = ref([
             // {
             //     img: ImgFile.copy,
@@ -1802,7 +1805,7 @@ export default {
 
             // console.log('tableBeEnd.value',tableBeEnd.value);
             filePageNum.value = filePageNum.value+1
-            const query = `${thisFolder.value.dirId}?pageSize=10&pageNum=${filePageNum.value}`
+            const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
             // -------------先禁止掉事件 定时器1秒钟后才能再次触发
             tableBeEnd.value = true
             
@@ -1896,6 +1899,48 @@ export default {
             openScanMove.value = false
             refreshFile()
         }
+        watch(() => folder.value, async(newValue, oldValue) => {
+            // console.log('iFrameData 发生改变了', newValue, oldValue);
+            console.log('files',newValue);
+            filePageNum.value = 1
+            if(!newValue.length){
+                fileHeight.value = '75vh'
+                pageSize.value = 20
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }else{
+                pageSize.value = 10
+                fileHeight.value = '38vh'
+                 const query = `${thisFolder.value.dirId}?pageSize=${pageSize.value}&pageNum=${filePageNum.value}`
+                 const res = await myfile.getById(query)
+                 console.log('filessetScrollres',res);
+                 if (res.code === 200) {
+                    // const newarr = res.rows.concat(toRaw(fileList.value))
+                    const newarr = res.rows
+                    console.log('newarr',newarr);
+                    fileList.value = JSON.parse(JSON.stringify(newarr))
+                    if(newarr.length < tableTotal.value){
+                        //获取后的数量<total就可以再次获取
+                        setTimeout(()=>{
+                            tableBeEnd.value = false 
+                        },1000)
+                    }
+                }
+            }
+        });
         onMounted(() => {
             getAllTop()
             getSpaceList()
@@ -2167,7 +2212,9 @@ export default {
             openScanMove,
             closeOpenScanMove,
             scanFileArr,
-            setImg
+            setImg,
+            fileHeight,
+            pageSize
         }
     },
     watch: {
@@ -2307,7 +2354,13 @@ p {
     border-radius: 4px;
     background-color: white;
 }
-
+#Onescan{
+    height: 48px;
+    line-height: 48px;
+    font-size: 14px;
+    display: flex;
+    align-items: center;
+}
 .useBox {
     width: 100%;
     height: 24px;

+ 2 - 2
src/views/publicment/components/PalaceGridFile.vue

@@ -1,7 +1,7 @@
 <template>
     <div>
         <!-- flex盒子 -->
-        <div class="bigBox" style="height: 250px; overflow: auto;"  v-if="fileList?.length">
+        <div class="bigBox" style="height: 38vh; overflow: auto;"  v-if="fileList?.length">
             <template v-for="(item, index) in fileList">
                 <!-- 循环盒子 -->
                 <div class="flexBox" @contextmenu="rightClick(item, $event)">
@@ -514,7 +514,7 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
 }
 

+ 3 - 2
src/views/publicment/components/PlaceGridFolder.vue

@@ -2,7 +2,7 @@
     <div>
         <div>
             <!-- flex盒子 -->
-            <div class="bigBox" style="height: 250px; overflow: auto;" v-if="folderList?.length">
+            <div class="bigBox" style="height: 37vh; overflow: auto;" v-if="folderList?.length">
                 <template v-for="(item, index) in folderList" :key="index">
                     <!-- 循环盒子 -->
                     <div class="flexBox" @contextmenu="rightClick(item,$event)" @click="folderClickGrid(item)">
@@ -246,8 +246,9 @@ export default {
     height: 100%;
     display: flex;
     justify-content: flex-start;
-    align-items: center;
+    // align-items: center;
     flex-wrap: wrap;
+    padding-top: 16px;
 }
 
 .imgBox {

+ 2 - 2
src/views/publicment/components/createTasnsfer.vue

@@ -219,7 +219,7 @@ onMounted(async () => {
   width: 50%;
   height: 380px;
   border: 1px solid green;
-  overflow-y: auto;
+  // overflow-y: auto;
 }
 .custom-tree-node{
   display: flex;
@@ -246,7 +246,7 @@ onMounted(async () => {
 }
 
 .needLog {
-  height: 100%;
+  height: calc(100% - 30px);
 }
 
 :deep(.el-tag__content) {

+ 1 - 1
src/views/publicment/components/inputPassword.vue

@@ -2,7 +2,7 @@
   <div>
     <div>
       <el-dialog v-model="isOpen" title="请输入登录密码" width="30%">
-        <el-input v-model="password" type="password"></el-input>
+        <el-input v-model="password" @keyup.enter="sure" type="password"></el-input>
         <template #footer>
           <span class="dialog-footer">
             <el-button @click="close">取消</el-button>

+ 19 - 4
src/views/publicment/modalComponebts/Transfer.vue

@@ -12,7 +12,15 @@
                         <div class="allLog">
                             <el-tree :filter-node-method="filterNode" v-if="have" ref="treeRef" :data="allTreeData"
                                 :props="allTreeProps" show-checkbox node-key="id" :default-expanded-keys="openTree"
-                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false" />
+                                @check-change="allTreeChange" :default-checked-keys="backScreen" :check-strictly="false">
+                                <template #default="{ node, data }">
+                                    <span class="custom-tree-node">
+                                        <img v-if="data.disabled" src="@/assets/images/Users.png" alt="" />
+                                        <img v-else src="@/assets/images/oneUser.png" alt="" />
+                                        <span>{{ node.label }}</span>
+                                    </span>
+                                </template>
+                                </el-tree>
                             <span v-else>暂无数据</span>
                         </div>
                     </div>
@@ -299,7 +307,7 @@ export default {
 }
 </script>
 
-<style scoped>
+<style scoped lang="scss">
 .transBox {
     width: 550px;
     height: 400px;
@@ -349,9 +357,16 @@ export default {
     align-items: center;
     justify-content: space-between;
 }
-
+.custom-tree-node{
+  display: flex;
+  align-items: center;
+  img{
+    width: 22px;
+    height: 22px;
+  }
+}
 .needLog {
-    height: 100%;
+  height: calc(100% - 30px);
     overflow-y: auto;
 }
 

+ 9 - 1
src/views/scanner/info/index.vue

@@ -169,6 +169,7 @@
 
 <script setup name="Info">
 import { addInfo, updateInfo, delInfo, getInfo, listInfo } from '@/api/scanner/info'
+import { getInfo as getUserInfoApi} from "@/api/login";
 import { encode, decode } from '@/utils/sm2util'
 import {
   deptTreeSelect,
@@ -187,6 +188,7 @@ const multiple = ref(true)
 const total = ref(0)
 const title = ref('')
 const deptOptions = ref(undefined);
+const userDeptId = ref()
 //ip验证
 const scannerIpRule = (rule, value, callback) => {
   var pPattern = new RegExp(
@@ -248,7 +250,7 @@ function reset() {
     scannerIp: null,
     isPublic: "N",
     userId: null,
-    deptId: null,
+    deptId: userDeptId.value,
     createBy: null,
     createTime: null,
     updateBy: null,
@@ -373,6 +375,12 @@ console.log('arr',arr);
     )     
   console.log('row',row);
 }
+const getUserInfo =async ()=>{
+const infoRes = await getUserInfoApi();
+userDeptId.value = infoRes.user.deptId
+console.log('infoRes',infoRes);
+}
+getUserInfo()
 getDeptTree();
 getList()
 </script>

+ 102 - 22
src/views/search/index.vue

@@ -81,7 +81,7 @@
         </div>
         <div v-else>
           <!-- 平铺 -->
-          <div class="tile_box">
+          <div class="tile_box" @scroll="handleScrollG">
             <div class="file_box" v-for="item in tableData" :key="item">
               <img class="big_file_img" :src="setIcon(item.fileType)" alt="" />
               <span class="missing">{{ item.fileName }}</span>
@@ -120,6 +120,7 @@ import file_zip from "@/assets/images/fileType/file_zip.png";
 //----------------------------------------
 const searchFor = ref(""); //搜索范围
 const searchType = ref("all"); //搜索对象
+const fileTypes = ref()
 const checkState = ref(false); //勾选框状态
 const activeNames = ref(["folder", "file"]);
 const isList = ref(true); //控制显示方式
@@ -150,29 +151,46 @@ const tableData = ref([]);
 // 切换搜索范围
 const changeSearchFor = async(name) => {
   numnum = 1
+  numG = 1
   const typeArr = setType(searchType.value);
   let baseDataObj = toRaw(baseData.value);
-  var fileTypes = ''
+   fileTypes.value = ''
   if (name == 'all') {
-    fileTypes = ''
+    fileTypes.value = ''
   } else if(name == '1') {
-    fileTypes = 1
+    fileTypes.value = 1
     // tableData.value = toRaw(baseDataObj).filter(
     //   (item) => item.space.spaceType == name && typeArr.includes(item.fileType)
     // );
   }else if(name == '2'){
-    fileTypes = 2
+    fileTypes.value = 2
   }else if(name == '3'){
-    fileTypes = 3
+    fileTypes.value = 3
   }
-  let res = await flieSearch({
-    keyword:searchText.value,
-    type:fileTypes,
-    pageSize: 20,
-    pageNum: 1,
-  })
-  console.log(res.rows,'filter');
+  
+  if(isList.value){
+    let res = await flieSearch({
+      keyword:searchText.value,
+      type:fileTypes.value,
+      isAsc: isAsc.value,
+      pageSize: 20,
+      pageNum: 1,
+    })
+    total.value = res.total;
+  tableData.value = res.rows
+  console.log(res,'filter',fileTypes.value);
+  }else{
+    let res = await flieSearch({
+      keyword:searchText.value,
+      type:fileTypes.value,
+      isAsc: isAsc.value,
+      pageSize: 80,
+      pageNum: numG,
+    })
+    total.value = res.total;
   tableData.value = res.rows
+  console.log(res,'filter',fileTypes.value);
+  }
 };
 // 切换搜索分类
 const changeSearchType = (name) => {
@@ -195,16 +213,33 @@ const changeShow = () => {
   isList.value = !isList.value;
 };
 const changeSort = async () => {
+  numnum = 1
+  numG = 1
   isAsc.value == "asc" ? (isAsc.value = "desc") : (isAsc.value = "asc");
-  const query = {
-    keyword: searchText.value,
-    isAsc: isAsc.value,
-    orderByColumn: "createTime",
-  };
+  let query ={}
+   if(isList.value){
+      query = {
+        keyword: searchText.value,
+        isAsc: isAsc.value,
+        type:fileTypes.value,
+        orderByColumn: "createTime",
+        pageSize: 20,
+        pageNum: 1,
+      };
+   }else{
+    query = {
+        keyword: searchText.value,
+        isAsc: isAsc.value,
+        type:fileTypes.value,
+        orderByColumn: "createTime",
+        pageSize: 80,
+        pageNum: 1,
+      };
+   }
   const res = await flieSearch(query);
   baseData.value = res.rows;
   tableData.value = res.rows;
-  changeSearchFor('');
+  // changeSearchFor('');
   // console.log("res", res);
   console.log(searchFor.value,'search');
 };
@@ -341,17 +376,20 @@ function formatFileSize(fileSize) {
   }
 }
 let numnum = 1
+let numG = 1
 async function handleScroll(e) {
-  // console.log(e, '出发了');
+  console.log(e, '出发了');
   const tableContainer = e.target;
   const scrollPosition = tableContainer.scrollTop + tableContainer.clientHeight;
   const contentHeight = tableContainer.scrollHeight;
   // console.log(scrollPosition, contentHeight, '对比');
   if (scrollPosition + 0.40005 >= contentHeight) {
+    console.log('到底了');
     numnum++
     const query = {
       keyword: searchText.value,
-      isAsc: "asc",
+      type:fileTypes.value,
+      isAsc: isAsc.value,
       orderByColumn: "createTime",
       pageSize: 20,
       pageNum: numnum,
@@ -360,6 +398,45 @@ async function handleScroll(e) {
     tableData.value = [...tableData.value, ...res.rows]
   }
 }
+async function handleScrollG(e) {
+    if(tableData.value.length >= total.value) return
+  console.log(e, '出发了');
+  const tableContainer = e.target;
+  const scrollPosition = tableContainer.scrollTop + tableContainer.clientHeight;
+  const contentHeight = tableContainer.scrollHeight;
+  // console.log(scrollPosition, contentHeight, '对比');
+  if (scrollPosition + 0.40005 >= contentHeight) {
+    numG++
+    const query = {
+      keyword: searchText.value,
+      type:fileTypes.value,
+      isAsc: isAsc.value,
+      orderByColumn: "createTime",
+      pageSize: 90,
+      pageNum: numG,
+    };
+    const res = await flieSearch(query);
+    tableData.value = [...tableData.value, ...res.rows]
+  }
+}
+watch(() => isList.value, (newValue, oldValue) => {
+  // console.log('editableTabs 发生改变了', newValue, oldValue);
+  numG = 1
+  if(!newValue){
+    console.log('切换到宫格了');
+    const query = {
+      keyword: searchText.value,
+      isAsc: isAsc.value,
+      orderByColumn: "createTime",
+      pageSize: 90,
+      pageNum: numG,
+    };
+     flieSearch(query).then(res=>{
+
+      tableData.value = [ ...res.rows]
+    });
+  }
+});
 onMounted(() => {
   let antherContainer = container.value.$el.querySelector('.el-scrollbar__wrap')
   antherContainer.addEventListener('scroll', handleScroll);
@@ -632,9 +709,12 @@ onMounted(() => {
 //平铺
 .tile_box {
   width: 100%;
-  height: 300px;
+  height: calc(98vh - 220px);
   display: flex;
   flex-wrap: wrap;
+  overflow-y:auto ;
+  align-items: flex-start;
+  align-content: flex-start;
 
   .file_box {
     width: 116px;

+ 17 - 2
src/views/system/user/index.vue

@@ -75,7 +75,11 @@
 					<el-table-column label="部门" align="center" key="deptName" prop="dept.deptName"
 						v-if="columns[3].visible" :show-overflow-tooltip="true" />
 					<el-table-column label="手机号码" align="center" key="phonenumber" prop="phonenumber"
-						v-if="columns[4].visible" width="120" />
+						v-if="columns[4].visible" width="120" >
+						<template #default="scope">
+							{{smPhone(scope.row.phonenumber)}}
+						</template>
+						</el-table-column>
 					<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
 						<template #default="scope">
 							<el-switch  v-if="scope.row.userId !== 1 && scope.row.userId !== -1" v-model="scope.row.status" active-value="0" inactive-value="1"
@@ -279,7 +283,7 @@
 		updateUserExpand 
 	} from "@/api/system/user";
 	import { sm3 } from "sm-crypto";
-
+	import { encode, decode } from '@/utils/sm2util'
 	const router = useRouter();
 	const {
 		proxy
@@ -577,6 +581,17 @@
 	function submitFileForm() {
 		proxy.$refs["uploadRef"].submit();
 	};
+	/** 解密手机号码 */
+	const smPhone = (num)=>{
+		console.log('num',num);
+		const tonum = num - 0
+		if(typeof tonum === 'number' && !isNaN(tonum)){
+			return num
+		}
+		if(num){
+			return decode(num)
+		}
+	}
 	/** 重置操作表单 */
 	function reset() {
 		form.value = {

+ 2 - 2
src/views/system/user/profile/resetPwd.vue

@@ -4,10 +4,10 @@
          <el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password />
       </el-form-item>
       <el-form-item label="新密码" prop="newPassword">
-         <el-input v-model="user.newPassword" placeholder="请输入新密码" type="password" show-password />
+         <el-input v-model="user.newPassword" placeholder="密码长度最少为8位,包含大小写字母、数字、特殊字符" type="password" show-password />
       </el-form-item>
       <el-form-item label="确认密码" prop="confirmPassword">
-         <el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/>
+         <el-input v-model="user.confirmPassword" placeholder="密码长度最少为8位,包含大小写字母、数字、特殊字符" type="password" show-password/>
       </el-form-item>
       <el-form-item>
       <el-button type="primary" @click="submit" class="sure">保存</el-button>