revive 4 yıl önce
ebeveyn
işleme
63c08f6afe
13 değiştirilmiş dosya ile 548 ekleme ve 1321 silme
  1. +94
    -973
      package-lock.json
  2. +17
    -7
      public/static/css/main.css
  3. +12
    -0
      public/static/img/了解工作负责人.svg
  4. +10
    -0
      public/static/img/了解负责人关闭.svg
  5. +14
    -10
      src/components/search-bar/search-bar.vue
  6. +0
    -10
      src/router.js
  7. +9
    -23
      src/views/components_web/projDetail/components/personnel-list.vue
  8. +4
    -4
      src/views/components_web/projDetail/components/plain-folder-list.vue
  9. +64
    -28
      src/views/components_web/projDetail/projDetail.vue
  10. +1
    -2
      src/views/main_web/index/components/search-proj.vue
  11. +50
    -18
      src/views/main_web/index/index.vue
  12. +1
    -1
      src/views/main_web/proj-item.vue
  13. +272
    -245
      src/views/main_web/workspace/workspace.new.vue

+ 94
- 973
package-lock.json
Dosya farkı çok büyük olduğundan ihmal edildi
Dosyayı Görüntüle


+ 17
- 7
public/static/css/main.css Dosyayı Görüntüle

@@ -7805,10 +7805,10 @@ li.secondMenu ul li:hover {
.worklinkBtngroup button{
margin: 0 8px;
}
.curbtn{
/* float: left; */
/* margin-top: 7px; */
}
/* .curbtn{
float: left;
margin-top: 7px;
} */
.currworkbutton{
border: 1.5px solid rgba(140, 0, 255, 1);
width: 106px;
@@ -9029,12 +9029,12 @@ h5.dulilabel{
/* 新建样本文件弹框显示的图片 */
.defultImage-small {
margin: 0 auto;
margin: 0 auto;
width: 70px;
height: 70px;
background: url(/static/img/defult-mid.png) center/100%;
}
.video-small {
.video-small {
height: 70px;
width: 70px;
background: url(/static/img/FileType/video.svg) center/100%;
@@ -9043,4 +9043,14 @@ h5.dulilabel{
.border-box {
box-sizing: border-box;
}
}
/* 搜索功能 搜索入口 */
.search-entry {
position: relative;
top: 12px;
width: 26px;
height: 26px;
background-color: gold;
cursor: pointer;
}

+ 12
- 0
public/static/img/了解工作负责人.svg Dosyayı Görüntüle

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>编组 2</title>
<g id="项目管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="符号/组件/提示备份" fill-rule="nonzero">
<g id="编组-2">
<circle id="合并形状" fill="#2869E6" cx="10" cy="10" r="10"></circle>
<path d="M10.1448235,12.354 L10.1448235,12.032 C10.1448235,11.654 10.2288235,11.318 10.4108235,11.01 C10.5508235,10.758 10.7608235,10.506 11.0688235,10.24 C11.6848235,9.694 12.0628235,9.33 12.2028235,9.162 C12.5528235,8.7 12.7348235,8.154 12.7348235,7.524 C12.7348235,6.684 12.4688235,6.026 11.9508235,5.55 C11.4048235,5.046 10.6908235,4.808 9.79482351,4.808 C8.78682351,4.808 8.00282351,5.116 7.44282351,5.732 C6.88282351,6.32 6.61682351,7.104 6.61682351,8.084 L7.72282351,8.084 C7.72282351,7.398 7.87682351,6.866 8.18482351,6.474 C8.52082351,6.012 9.03882351,5.788 9.73882351,5.788 C10.3268235,5.788 10.7888235,5.942 11.1108235,6.278 C11.4188235,6.586 11.5868235,7.02 11.5868235,7.58 C11.5868235,7.972 11.4468235,8.336 11.1668235,8.686 C11.0828235,8.798 10.9148235,8.966 10.6908235,9.19 C9.93482351,9.862 9.47282351,10.394 9.27682351,10.814 C9.10882351,11.164 9.02482351,11.57 9.02482351,12.032 L9.02482351,12.354 L10.1448235,12.354 Z M9.58482351,15 C9.82282351,15 10.0188235,14.916 10.1868235,14.762 C10.3548235,14.608 10.4388235,14.412 10.4388235,14.16 C10.4388235,13.922 10.3548235,13.726 10.2008235,13.572 C10.0328235,13.404 9.82282351,13.334 9.58482351,13.334 C9.34682351,13.334 9.15082351,13.404 8.98282351,13.572 C8.81482351,13.726 8.74482351,13.922 8.74482351,14.16 C8.74482351,14.398 8.81482351,14.594 8.98282351,14.762 C9.15082351,14.916 9.34682351,15 9.58482351,15 Z" id="?" fill="#FFFFFF"></path>
</g>
</g>
</g>
</svg>

+ 10
- 0
public/static/img/了解负责人关闭.svg Dosyayı Görüntüle

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>符号/小符号/删除-强调备份</title>
<g id="项目管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="符号/小符号/删除-强调备份" fill-rule="nonzero">
<circle id="椭圆形" fill="#2869E6" cx="10" cy="10" r="10"></circle>
<path d="M12.969099,6 L13.7434433,6.77434433 L10.646,9.872 L13.7434433,12.969099 L12.969099,13.7434433 L9.872,10.646 L6.77434433,13.7434433 L6,12.969099 L9.098,9.872 L6,6.77434433 L6.77434433,6 L9.872,9.098 L12.969099,6 Z" id="形状结合" fill="#FFFFFF"></path>
</g>
</g>
</svg>

+ 14
- 10
src/components/search-bar/search-bar.vue Dosyayı Görüntüle

@@ -1,10 +1,10 @@
<template>
<div class="search-bar">
<div class="wrap">
<i class="search-icon" @click.stop="searchContentClick"></i>
<i class="search-icon" @click.stop="goToSearch"></i>
<input type="text" v-model="searchContent" @keyup.stop="enterSearchContent"
class="search-input" placeholder="搜索的文本"/>
<i class="close-icon"></i>
class="search-input" :placeholder="placeholder"/>
<i class="close-icon" @click.stop="hideSearchBar"></i>
</div>
</div>
</template>
@@ -13,13 +13,17 @@
export default {
data() {
return {
isShowSearchBar: true,
searchContent: '',
}
},
props: {
placeholder: {
type: String,
default: '搜索的文本'
}
},
watch: {
searchContent(val) {
console.log(val);
this.changeSearchContent();
}
},
@@ -27,17 +31,17 @@
// 按下了enter键
enterSearchContent(e) {
if(this.searchContent && e.keyCode == 13) {
this.searchContentClick();
this.goToSearch();
}
},
changeSearchContent() {
this.$emit('changeSearchContent', this.searchContent)
},
searchContentClick() {
this.$emit('searchContentClick', this.searchContent);
goToSearch() {
this.$emit('goToSearch');
},
hideSearchBar() {
this.isShowSearchBar = false;
this.$emit('hideSearchBar');
},

}
@@ -53,7 +57,7 @@
border-radius: 8px;
background-color: rgba(233, 233, 235, 1);
border: 0.5px solid rgba(174, 174, 174, 1);
padding: 0 0 0 35px;
padding: 0 0 0 32px;
}
.search-icon, .close-icon {
position: absolute;


+ 0
- 10
src/router.js Dosyayı Görüntüle

@@ -54,11 +54,6 @@ const router = new Router({
name: 'index',
component: () => import('@/views/main_web/index'),
},
{
path: '/searchProj',
name: 'searchproj',
component: () => import('@/views/main_web/index/components/search-proj'),
},
{
path: '/projnotice',
name: 'projnotice',
@@ -74,11 +69,6 @@ const router = new Router({
name: 'workspace',
component: () => import('@/views/main_web/workspace'),
},
{
path: '/searchFile',
name: 'searchfile',
component: () => import('@/views/main_web/workspace/components/search-file'),
},
{
path: '/project',
name: 'project',


+ 9
- 23
src/views/components_web/projDetail/components/personnel-list.vue Dosyayı Görüntüle

@@ -64,15 +64,7 @@
return {
ischeckAll: false,
activeCompanyName: 'C0',
activeDeptNameInData: ''
}
},
watch: {
activeDeptName: {
immediate: true,
handler(val) {
this.activeDeptNameInData = val;
}
activeDeptNameInData: 'D0'
}
},
methods: {
@@ -85,10 +77,6 @@
return []
}
},
activeDeptName: {
type: String,
defualt: ''
},
handleCheckItemAll: Function,
handleCheckedOne: Function,
},
@@ -135,19 +123,10 @@
width:100%;
height: 30px;
padding: 0 0 0 30px;
color: #E9E9EB;
border-radius: 8px;
background-color: rgba(233, 233, 235, 1);
border: 0.5px solid rgba(174, 174, 174, 1);
&::-webkit-input-placeholder {
height: 20px;
line-height: 20px;
color: rgba(0, 0, 0, 0.56);
font-size: 14px;
font-family: PingFangSC-Regular;
}
}

}
.content-wrap {
padding: 0 8px;
@@ -173,7 +152,14 @@
}
}
.search-input::-webkit-input-placeholder {
color: rgba(0, 0, 0, 0.56);
font-size: 14px;
font-family:'Courier New', Courier, monospace;
color: rgba(0, 0, 0, 0.56);
height: 20px !important;
line-height: 20px !important;
}
.user-info-item:hover {
background-color: #f6f6f6;


+ 4
- 4
src/views/components_web/projDetail/components/plain-folder-list.vue Dosyayı Görüntüle

@@ -25,7 +25,7 @@
<div v-if="folder.manageUser && folder.manageUser.length == 0">
<div class="use-relative" v-if="isAllowedAssignedFolder(folder)">
<people-item v-if="!isEnterEdit" :class="{'mr-8': !isEnterEdit}"
@click.native.stop="aloneAddUserForFolder(folder),enterEditFolderClick(folder.id)"/>
@click.native.stop="aloneAddUserForFolder(folder),enterEditFolderClick(folder)"/>
<people-item v-else/>
</div>
<div class="notclick" v-else>
@@ -56,7 +56,7 @@

<div class="add-btn" v-if="folder.manageUser && folder.manageUser.length > 0 && isAllowedAssignedStaffFolder(folder)">
<people-item v-if="!isEnterEdit"
@click.native.stop="aloneAddUserOnlyStaff(folder),enterEditFolderClick(folder.id)"/>
@click.native.stop="aloneAddUserOnlyStaff(folder),enterEditFolderClick(folder)"/>
</div>
<!-- 嵌套模板入口 -->
<!-- <div class="add_nest" v-if="isNest(folder.nodeId)">
@@ -174,9 +174,9 @@ export default {
},
// 点击了添加职员的按钮 进入编辑状态
// 因为这里用的是递归组件 所以就不用父子组件通信 用事件总线
enterEditFolderClick(folderId) {
enterEditFolderClick(folder) {
if(!this.isEnterEdit) {
this.$bus.$emit('enterEditFolderClick', folderId);
this.$bus.$emit('enterEditFolderClick', folder);
}
},
showAllClick(){


+ 64
- 28
src/views/components_web/projDetail/projDetail.vue Dosyayı Görüntüle

@@ -186,7 +186,6 @@
:class="{'set-personnel-list-width': isEnterEdit}">
<personnel-list
:listDept="[...listDept]"
:activeDeptName="activeDeptName"
:handleCheckItemAll="handleCheckItemAll"
:handleCheckedOne="handleCheckedOne"/>
</div>
@@ -245,6 +244,8 @@ import NestTemp from '../project/nestTemp.vue';
isShowThreePage: false,
InitData: {},
listNewFolder: [],
oldFolderList: [],//未进行新的工作指派的嵌套的节点列表的深拷贝
oldPlainFolderList: [],//平级的节点列表
listDept: [],
curProjCreatePeop: [],
currWorkName: "",
@@ -284,6 +285,7 @@ import NestTemp from '../project/nestTemp.vue';

isEditProjManager: false,//是在编辑具有项目管理权限的负责人 还是在编辑节点的人员
activeFolderId: '',//点击进入编辑的节点id
activeFolder: null,
coverSrc:'/static/img/faceImg/face01.png',

isStartEditNestTemp: false,//是否显示编辑嵌套模板的页面
@@ -373,9 +375,6 @@ import NestTemp from '../project/nestTemp.vue';

this.$bus.$on('setFirstPeopleToManager', this.setFirstPeopleToManager);

this.$bus.$on('enterNestTemp', this.enterNestTemp);
// 监听编辑状态下 点击添加第一个工作负责人 -》 右侧人员列表自动打开
this.$bus.$on('openPersonnelListClick', this.openPersonnelListClick);

},
beforeDestroy() {
@@ -392,7 +391,6 @@ import NestTemp from '../project/nestTemp.vue';

this.$bus.$off('setFirstPeopleToManager', this.setFirstPeopleToManager);

this.$bus.$off('openPersonnelListClick', this.openPersonnelListClick);
},
methods: {
/**
@@ -417,13 +415,6 @@ import NestTemp from '../project/nestTemp.vue';
this.isTemNest = false;
await this.fetchProjectDetail();
},
/**
* 打开右侧的人员列表
*/
openPersonnelListClick() {
console.log('收到打开事件');
this.activeDeptName = 'D0';
},
/**
* 退出编辑回到项目列表页
*/
@@ -513,6 +504,7 @@ import NestTemp from '../project/nestTemp.vue';
this.isEditProjManager = true;
this.enterEditOperate();
this.activeFolderId = '';
this.activeFolder = null;
this.addProjManager();
}
},
@@ -520,15 +512,17 @@ import NestTemp from '../project/nestTemp.vue';
activeFolderClick(folder) {
this.isEditProjManager = false;
this.activeFolderId = folder.id;
if(folder.manageUser && folder.manageUser.length == 0) {
this.activeFolder = folder;
if(folder.listUser && folder.listUser.length == 0) {
this.aloneAddUserForFolder(folder);
} else {
this.aloneAddUserOnlyStaff(folder);
}
},
// 点击添加folder进入编辑状态 这里传递folderId是为了找到是用哪一个文件夹
enterEditFolderClick(folderId) {
this.activeFolderId = folderId;
enterEditFolderClick(folder) {
this.activeFolderId = folder.id;
this.activeFolder = folder;
this.enterEditOperate();
},
// 点击进入编辑 做的一些列操作
@@ -848,14 +842,32 @@ import NestTemp from '../project/nestTemp.vue';
return;
}
}
//点击人员列表删除
if(user.folderPerm == 2 && targetChecked == false)
{
this.removeManageUser(user);
this.getIsCheckSecondLevel(topIndex);
this.getIsCheckAll();
return;
// 删除的是工作负责人
if(this.activeFolder) {
const isExists = this.activeFolder.manageUser.find(t => t.id === user.id);
if(isExists && targetChecked == false) {
this.removeManageUser(user);
this.activeFolder.manageUser.splice(0);
this.getIsCheckSecondLevel(topIndex);
this.getIsCheckAll();
return;
}
} else if(this.isEditProjManager && targetChecked == false) {
// 删除的是具有项目管理权限的 且能运行到这里是可以删除的
const index = this.listManagerUser.findIndex(people => people.id === user.id);
if(index > -1) {
this.listManageUser.splice(index, 1);
}

}
// //点击人员列表删除
// if(user.folderPerm == 2 && targetChecked == false)
// {
// this.removeManageUser(user);
// this.getIsCheckSecondLevel(topIndex);
// this.getIsCheckAll();
// return;
// }
// 全选的时候 跳过节点负责人的不执行checkDeptUserName 防止对folderPerm重新赋值
if(user.folderPerm == 2 && user.selected == true && targetChecked == true) {
return;
@@ -1036,7 +1048,21 @@ import NestTemp from '../project/nestTemp.vue';
}
})
},

getPlainOldFolderList() {
const plainFolderList = [];
function circulate(folderList) {
if(folderList.length > 0) {
folderList.forEach(folder => {
plainFolderList.push(folder);
if(folder.listChildren && folder.listChildren.length > 0) {
circulate(folder.listChildren);
}
})
}
}
circulate(this.oldFolderList);
this.oldPlainFolderList = plainFolderList;
},
async fetchProjectDetail() {
const [userList, projectDataRes, deptList] = await Promise.all([
this.getUserList(),
@@ -1073,6 +1099,8 @@ import NestTemp from '../project/nestTemp.vue';
//
this.getfolderPerm(folderList)
this.listNewFolder = folderList;
this.oldFolderList = cloneDeep(this.listNewFolder);
this.getPlainOldFolderList();
// console.log('得到的listNewFolder', this.listNewFolder);
this.getAllChildrenLists(this.listNewFolder,this.userId,this.allChildrenLists);
@@ -1124,6 +1152,8 @@ import NestTemp from '../project/nestTemp.vue';
return projManager.id;
}
}).join(',') : '';
const { oldPlainFolderList } = this;
circleGetWorkData(this.listNewFolder);

function circleGetWorkData(folderList) {
@@ -1144,9 +1174,12 @@ import NestTemp from '../project/nestTemp.vue';
}).join(',') : '';
let tempListUser = folder.listUser.filter(item => !tempManagerIdList.includes(item.id));
workNode.GeneralId = folder.listUser.length > 0 ? tempListUser.map(user => { return user.id }).join(',') : '';
workNode.OldManager = folder.oldManager;
workNode.OldGeneralId = folder.oldGeneralId;
// console.log(workNode);

const originFolder = oldPlainFolderList.find(oldFolder => oldFolder.id == folder.id);
console.log(originFolder);
const oldManagerId = originFolder.manageUser.length > 0 ? originFolder.manageUser[0].id : '';
workNode.OldManager = oldManagerId;
workNode.OldGeneralId = originFolder.listUser.length > 0 ? originFolder.listUser.filter(oldUser => oldUser.id !== oldManagerId).map(user => { return user.id }).join(',') : '';
params.Work.push(workNode);

circleGetWorkData(folder.listChildren);
@@ -1164,6 +1197,8 @@ import NestTemp from '../project/nestTemp.vue';
// message: '工作指派完成。',
// type: ["success"],
// });
this.oldFolderList = cloneDeep(this.listNewFolder);
this.getPlainOldFolderList();
} else {
this.isDistworkSuccess = false;
thisApp.$notify({
@@ -1210,6 +1245,7 @@ import NestTemp from '../project/nestTemp.vue';
const rootFolderId = rootFolder.Id;
const headList = [];
const hash = {};
const temp = [];
restFolderList.forEach(upperFolder => {
const folder = firstCharToLowerCase(upperFolder);
hash[folder.id] = folder;
@@ -1290,7 +1326,7 @@ import NestTemp from '../project/nestTemp.vue';
display: inline-block;
width: 20px;
height: 20px;
background-color: #2869e6;
background: url('/static/img/了解工作负责人.svg');
cursor: pointer;
}
.ques-text {
@@ -1319,7 +1355,7 @@ import NestTemp from '../project/nestTemp.vue';
top: 5px;
width: 20px;
height: 20px;
background-color:#2869E6;
background: url('/static/img/了解负责人关闭.svg');
cursor: pointer;
}
.tips-text {


+ 1
- 2
src/views/main_web/index/components/search-proj.vue Dosyayı Görüntüle

@@ -24,7 +24,7 @@
<script>
import AppHeader from "@/components/app-header";
import SearchBar from "@/components/search-bar/search-bar";
import ChangeBtn from "@/components/change-btn/change-btn";
import ProjItem from "@/views/main_web/proj-item";
import * as projService from '@/services/project';
export default {
@@ -75,7 +75,6 @@

},
changeSearchContent(content) {
console.log('父级',content);
this.searchContent = content;
},
}


+ 50
- 18
src/views/main_web/index/index.vue Dosyayı Görüntüle

@@ -17,15 +17,17 @@
</style>
<template>
<div id="app" v-cloak>
<app-header title="我的项目" :showUserCenter="true" id="proj-list-page">
<app-header :title="showCenterTitle" :showUserCenter="true" id="proj-list-page">
<template #left>
{{currentPlatform.orgName}}
</template>
<template #right>
<!-- <search-bar class="proj-search-bar"
<search-bar v-if="isShowSearchBar" class="proj-search-bar"
placeholder="请输入要搜索的项目名称"
@changeSearchContent="changeSearchContent"
@searchContentClick="searchForProj"/> -->
<!-- <div class="search-proj-entry" @click.stop="goToSearchProj"></div> -->
@hideSearchBar="isShowSearchBar = false"
@goToSearch="searchForProj"/>
<!-- <div class="search-entry" @click.stop="isShowSearchBar = true"></div> -->
</template>
<!-- <template #right>
<span v-on:click="toRecycle">
@@ -73,7 +75,7 @@
</section>
<!-- 项目列表 -->
<ProjItem
:projPageList="projPageList"
:projPageList="showProjList"
:openPrjInfo="openPrjInfo"
:addNewFolders="addNewFolders"
:scrollLoad="scrollLoad"
@@ -165,12 +167,14 @@ import { haveAccess, AccessCode } from '@/utils/access';
import * as prjService from '@/services/project'
import Timer from '@/views/main_web/time'
import ProjItem from '@/views/main_web/proj-item'

import { debounce } from 'lodash';
const BMap = window.BMap;
const Velocity = window.Velocity;
export default {
elNew: "#new", //样式ID,用于动画
components: {
// SearchBar,
SearchBar,
DistWork,
NewProj,
ProjSetting,
@@ -249,9 +253,25 @@ export default {
isEditProjFolder: false,
fetchTickIns: null,

filterProjListRes: [],
searchContent: '',
searchProjList: [],//搜索出来的项目列表
isShowSearchBar: false,//控制搜索栏显隐
isSearching: false,//是否搜寻结果
};
},
computed: {
showProjList() {
return this.isShowSearchBar && this.searchContent && this.isSearching ? this.searchProjList : this.projPageList;
},
showCenterTitle() {
return this.isShowSearchBar && this.searchContent ? `“${this.searchContent}”搜索结果` : '我的项目';
}
},
watch: {
searchContent() {
this.searchForProj();
}
},
mounted: function () {
this.cnName = JSON.parse(sessionStorage.user).userName;
//this.setDateTime();
@@ -267,10 +287,29 @@ export default {
}
},
methods: {
searchForProj: debounce(async function searchForProj() {
// 判断输入内容是否有效
const rg = /^\s*$/;
if(rg.test(this.searchContent)) {
return;
} else {
this.isSearching = true;//正在搜索
const res = await prjService.searchProject(this.searchContent);
if(res.Code == 0) {
this.searchProjList = res.Data;
} else {
this.$notify({
type: ['error'],
message:'查询数据失败, 请稍后重试。'
})
}
}
},500),
changeSearchContent(content) {
this.searchContent = content;
},
goToSearchProj() {
this.$router.push({
name: 'searchproj',
}).catch(err => console.log(err));
},
// 新版创建项目入口
createNewProjectClick() {
@@ -690,12 +729,5 @@ export default {
display: flex;
}

.search-proj-entry {
position: relative;
top: 12px;
width: 26px;
height: 26px;
background-color: gold;
cursor: pointer;
}

</style>

+ 1
- 1
src/views/main_web/proj-item.vue Dosyayı Görüntüle

@@ -83,7 +83,7 @@ export default {
},
computed: {
projPageListLength() {
return this.projPageList.length;
return this.projPageList ? this.projPageList.length : 0;
}
},
methods:{


+ 272
- 245
src/views/main_web/workspace/workspace.new.vue Dosyayı Görüntüle

@@ -7,231 +7,259 @@
class="app-header-style"
v-if="!showWorkline"
>
<template #right>
<search-bar v-if="isShowSearchBar" class="proj-search-bar"
placeholder="请输入要搜索的文件名"
@changeSearchContent="changeSearchContent"
@hideSearchBar="isShowSearchBar = false"
@goToSearch="searchForProj"/>
<div class="search-entry" @click.stop="isShowSearchBar = true"></div>
</template>
</app-header>
<app-header
class="app-header-style"
:title="projectName"
:showUserCenter="true"
backBtnTitle="回到协作空间"
:onBackBtnClick="hideWorklinkPage"
v-if="showWorkline"
>
</app-header>
<div class="listfilewarp mt-0">
<!-- 工作链 -->
<WorkLine
:isShowlink="showWorkline"
:listUserFolders="nodeFolders"
:nowFolderIndex="nowFolderIndex"
:nowFolderName="nowFolderName"
@goFolderAndBack="goFolderAndBack"
@previousFolder="previousFolder"
@showWorklinkPage="showWorklinkPage"
@nowFolderClick="nowFolderClick"
@hideWorklinkPage="hideWorklinkPage"
@finishGetExchangeNodes="finishGetExchangeNodes"
/>
<div class="layout_content2" v-show="!showWorkline" v-loading="loading">
<section
id="workspace"
ref="workfilescrollbar"
:class="`${closepageH} layerout_H2`"
@contextmenu.prevent="rightShowMenu($event, '新建文件夹', 4)"
>
<section class="yiyun_section_warp">
<div class="yinyong_warpBox hidescollbar">
<div class="titlebar_head" id="bignav">
<!-- 面包屑导航 -->
<div
class="section_item section_item_aside_fl"
>
<span
class="yiyun_text-title-workspace mr-20 ml-8"
<div v-if="isShowSearchPage">
<change-btn :titleList="titleList" class="operate-bar"/>
</div>
<div v-else>
<app-header
class="app-header-style"
:title="projectName"
:showUserCenter="true"
backBtnTitle="回到协作空间"
:onBackBtnClick="hideWorklinkPage"
v-if="showWorkline"
>
</app-header>
<div class="listfilewarp mt-0">
<!-- 工作链 -->
<WorkLine
:isShowlink="showWorkline"
:listUserFolders="nodeFolders"
:nowFolderIndex="nowFolderIndex"
:nowFolderName="nowFolderName"
@goFolderAndBack="goFolderAndBack"
@previousFolder="previousFolder"
@showWorklinkPage="showWorklinkPage"
@nowFolderClick="nowFolderClick"
@hideWorklinkPage="hideWorklinkPage"
@finishGetExchangeNodes="finishGetExchangeNodes"
/>
<div class="layout_content2" v-show="!showWorkline" v-loading="loading">
<section
id="workspace"
ref="workfilescrollbar"
:class="`${closepageH} layerout_H2`"
@contextmenu.prevent="rightShowMenu($event, '新建文件夹', 4)"
>
<section class="yiyun_section_warp">
<div class="yinyong_warpBox hidescollbar">
<div class="titlebar_head" id="bignav">
<!-- 面包屑导航 -->
<div
class="section_item section_item_aside_fl"
>
<el-breadcrumb class="folder_breadcrumb" separator-class="el-icon-arrow-right">
<el-breadcrumb-item @click.native="clickBreadcrumb(-1, 0)">工作文件</el-breadcrumb-item>
<el-breadcrumb-item
v-for="(breadFolder, breadIdx) in breadcrumbFolderList"
:key="breadFolder.id"
@click.native="clickBreadcrumb(breadIdx, 0)"
>{{breadFolder.folderName}}</el-breadcrumb-item>
</el-breadcrumb>
</span>
</div>

<!-- 工作列表主体 -->
<div
class="yiyun_row scollbarBox nobianju py-x-22"
>
<AddFileButton
v-if="isClient"
@fileTempClick="fileTempClick"
:listTempFiles="listTempFiles"
:selectSystemFiles="selectSystemFiles"
:selectSystemFolders="selectSystemFolders"
/>
<!-- 文件上传队列 -->
<div class="list-group">
<FileItem
class="lisy-group-item"
v-for="file in filterFiles(uploadFileList)"
:key="file.id"
:file="file"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
/>
</div>
<div class="list-group">
<FileItem
class="lisy-group-item"
v-for="file in filterFiles(workFileList)"
:key="file.id"
:file="file"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
:commitFile="commitFile"
@dblclickFile="fileClick(file)"
@filePreview="filePreview"
@openFileWith="openFileWith(file)"
@openfileBtnClick="fileClick(file)"
@copyFileBtnClick="copyWorkFileBtnClick(file)"
@oneFileRightBtnClick="oneFileRightBtnClick"
@deleteFileClick="deleteFileClick"
:tempRightFileId="tempRightFileId"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
@dragstart.native="onfileDragStart(file, $event)"
draggable
/>
<span
class="yiyun_text-title-workspace mr-20 ml-8"
>
<el-breadcrumb class="folder_breadcrumb" separator-class="el-icon-arrow-right">
<el-breadcrumb-item @click.native="clickBreadcrumb(-1, 0)">工作文件</el-breadcrumb-item>
<el-breadcrumb-item
v-for="(breadFolder, breadIdx) in breadcrumbFolderList"
:key="breadFolder.id"
@click.native="clickBreadcrumb(breadIdx, 0)"
>{{breadFolder.folderName}}</el-breadcrumb-item>
</el-breadcrumb>
</span>
</div>
<!--显示文件夹组 -->
<div class="list-group">
<FolderItem
v-for="folder in filterFolders(subFolderList)"
:key="folder.id"
:folder="folder"
:isLoading="localFolderLoadStateMap[folder.folderPath]"
@onRightMenuActive="oneFileRightBtnClick"
@onDownloadAll="downloadFolder"
:activeRightMenuId="tempRightFileId"
@dblclick.native="intoSubFolder(folder, 0)"
@commitFolder="commitFolder"

<!-- 工作列表主体 -->
<div
class="yiyun_row scollbarBox nobianju py-x-22"
>
<AddFileButton
v-if="isClient"
@fileTempClick="fileTempClick"
:listTempFiles="listTempFiles"
:selectSystemFiles="selectSystemFiles"
:selectSystemFolders="selectSystemFolders"
/>
<!-- 文件上传队列 -->
<div class="list-group">
<FileItem
class="lisy-group-item"
v-for="file in filterFiles(uploadFileList)"
:key="file.id"
:file="file"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
/>
</div>
<div class="list-group">
<FileItem
class="lisy-group-item"
v-for="file in filterFiles(workFileList)"
:key="file.id"
:file="file"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
:commitFile="commitFile"
@dblclickFile="fileClick(file)"
@filePreview="filePreview"
@openFileWith="openFileWith(file)"
@openfileBtnClick="fileClick(file)"
@copyFileBtnClick="copyWorkFileBtnClick(file)"
@oneFileRightBtnClick="oneFileRightBtnClick"
@deleteFileClick="deleteFileClick"
:tempRightFileId="tempRightFileId"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
@dragstart.native="onfileDragStart(file, $event)"
draggable
/>
</div>
<!--显示文件夹组 -->
<div class="list-group">
<FolderItem
v-for="folder in filterFolders(subFolderList)"
:key="folder.id"
:folder="folder"
:isLoading="localFolderLoadStateMap[folder.folderPath]"
@onRightMenuActive="oneFileRightBtnClick"
@onDownloadAll="downloadFolder"
:activeRightMenuId="tempRightFileId"
@dblclick.native="intoSubFolder(folder, 0)"
@commitFolder="commitFolder"

/>
</div>
</div>
</div>
</div>
</div>
</section>
</section>
</section>

<div :class="neibianju" id="bottomBox">
<div class="titleBox">
<span class="yiyun_zhediebtn DevtopIcon">
<i
class="Cicon text_gray icon font_family icon-icon_zhankai"
title="展开面板"
v-show="isShowpageIcon"
@click="openCopage"
></i>
<i
class="Cicon text_gray icon font_family icon-icon_shouqi"
title="折叠面板"
v-show="!isShowpageIcon"
@click="closeCopage"
></i>
</span>
<div class="title_warp">
<div class="yiyun_section_top orginoverflow" id="bignav">
<div :class="neibianju" id="bottomBox">
<div class="titleBox">
<span class="yiyun_zhediebtn DevtopIcon">
<i
class="Cicon text_gray icon font_family icon-icon_zhankai"
title="展开面板"
v-show="isShowpageIcon"
@click="openCopage"
></i>
<i
class="Cicon text_gray icon font_family icon-icon_shouqi"
title="折叠面板"
v-show="!isShowpageIcon"
@click="closeCopage"
></i>
</span>
<div class="title_warp">
<div class="yiyun_section_top orginoverflow" id="bignav">

<div class="section_item fl section_item_aside_fl xiangdui">
<!-- <span class="yiyun_zhediebtn DevtopIcon">
<i
class="Cicon text_gray icon font_family icon-icon_zhankai"
title="展开面板"
v-show="isShowpageIcon"
@click="openCopage"
></i>
<i
class="Cicon text_gray icon font_family icon-icon_shouqi"
title="折叠面板"
v-show="!isShowpageIcon"
@click="closeCopage"
></i>
</span> -->
<div class="tabtltlebox">
<!-- <h3 class="defualth3" >
协作文件
</h3> -->
<div
class="section_item section_item_aside_fl"
>
<span
class="yiyun_text-title-workspace mr-20 ml-8"
<div class="section_item fl section_item_aside_fl xiangdui">
<!-- <span class="yiyun_zhediebtn DevtopIcon">
<i
class="Cicon text_gray icon font_family icon-icon_zhankai"
title="展开面板"
v-show="isShowpageIcon"
@click="openCopage"
></i>
<i
class="Cicon text_gray icon font_family icon-icon_shouqi"
title="折叠面板"
v-show="!isShowpageIcon"
@click="closeCopage"
></i>
</span> -->
<div class="tabtltlebox">
<!-- <h3 class="defualth3" >
协作文件
</h3> -->
<div
class="section_item section_item_aside_fl"
>
<el-breadcrumb class="folder_breadcrumb" separator-class="el-icon-arrow-right">
<el-breadcrumb-item @click.native="clickBreadcrumb(-1, 1)">协作文件</el-breadcrumb-item>
<el-breadcrumb-item
v-for="(breadFolder, breadIdx) in breadcrumbFolderListInCoop"
:key="breadFolder.id"
@click.native="clickBreadcrumb(breadIdx, 1)"
>{{breadFolder.folderName}}</el-breadcrumb-item>
</el-breadcrumb>
</span>
<span
class="yiyun_text-title-workspace mr-20 ml-8"
>
<el-breadcrumb class="folder_breadcrumb" separator-class="el-icon-arrow-right">
<el-breadcrumb-item @click.native="clickBreadcrumb(-1, 1)">协作文件</el-breadcrumb-item>
<el-breadcrumb-item
v-for="(breadFolder, breadIdx) in breadcrumbFolderListInCoop"
:key="breadFolder.id"
@click.native="clickBreadcrumb(breadIdx, 1)"
>{{breadFolder.folderName}}</el-breadcrumb-item>
</el-breadcrumb>
</span>
</div>
</div>
</div>
</div>
<div class="section_item fr section_item_aside_fr">
<div class="fr ml-10">
<span class="bj_label">协作文件均只读</span>
<div class="section_item fr section_item_aside_fr">
<div class="fr ml-10">
<span class="bj_label">协作文件均只读</span>
</div>
<div class="fifle_search fr"></div>
</div>
<div class="fifle_search fr"></div>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
</div>

<div class="fifleBox">
<div class="yiyun_section_warp layerout_H3">
<!-- 文件大box -->
<div class="yinyong_warpBox">
<!-- 协作文件 -->
<div v-if="!isShowStartNodeFolders">
<div
class="py-x-22 mt-12"
>
<FileItem
v-for="file in filterFilesInCoop(cooperationFileList)"
:key="file.id"
:file="file"
:tempRightFileId="tempRightFileId"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
@dblclickFile="fileClick(file)"
@filePreview="filePreview"
@openFileWith="openFileWith(file)"
@openfileBtnClick="fileClick(file)"
@oneFileRightBtnClick="oneFileRightBtnClick"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
@dragstart.native="onfileDragStart(file, $event)"
draggable
/>
<div class="fifleBox">
<div class="yiyun_section_warp layerout_H3">
<!-- 文件大box -->
<div class="yinyong_warpBox">
<!-- 协作文件 -->
<div v-if="!isShowStartNodeFolders">
<div
class="py-x-22 mt-12"
>
<FileItem
v-for="file in filterFilesInCoop(cooperationFileList)"
:key="file.id"
:file="file"
:tempRightFileId="tempRightFileId"
:clientDownLoad="clientDownLoad"
:showFileMilestone="showFileMilestone"
:nodeFolder="currentNodeFolder"
:currentFolder="currentFolder"
@dblclickFile="fileClick(file)"
@filePreview="filePreview"
@openFileWith="openFileWith(file)"
@openfileBtnClick="fileClick(file)"
@oneFileRightBtnClick="oneFileRightBtnClick"
:localFileHashMap="localFileHashMap"
:loadingState="localFileLoadStateMap[file.id]"
@dragstart.native="onfileDragStart(file, $event)"
draggable
/>
</div>
<!-- 协作文件以文件夹的形式展示 -->
<div class="list-group">
<FolderItem
v-for="folder in filterFoldersInCoop(coopSubFolderList)"
:key="folder.id"
:folder="folder"
:isWorkFolder=false
:isLoading="localFolderLoadStateMap[folder.folderPath]"
@onRightMenuActive="oneFileRightBtnClick"
@onDownloadAll="downloadFolder"
:activeRightMenuId="tempRightFileId"
@dblclick.native="intoSubFolder(folder, 1)"
@commitFolder="commitFolder"
/>
</div>
</div>
<!-- 协作文件以文件夹的形式展示 -->
<div class="list-group">
<FolderItem
v-for="folder in filterFoldersInCoop(coopSubFolderList)"
<div v-else>
<div class="list-group">
<FolderItem
v-for="folder in exchangeNodeListsInCoop"
:key="folder.id"
:folder="folder"
:isWorkFolder=false
@@ -239,56 +267,41 @@
@onRightMenuActive="oneFileRightBtnClick"
@onDownloadAll="downloadFolder"
:activeRightMenuId="tempRightFileId"
@dblclick.native="intoSubFolder(folder, 1)"
@dblclick.native="intoSubFolder(folder, 1), isShowStartNodeFolders = !isShowStartNodeFolders"
@commitFolder="commitFolder"
/>
</div>
</div>
<div v-else>
<div class="list-group">
<FolderItem
v-for="folder in exchangeNodeListsInCoop"
:key="folder.id"
:folder="folder"
:isWorkFolder=false
:isLoading="localFolderLoadStateMap[folder.folderPath]"
@onRightMenuActive="oneFileRightBtnClick"
@onDownloadAll="downloadFolder"
:activeRightMenuId="tempRightFileId"
@dblclick.native="intoSubFolder(folder, 1), isShowStartNodeFolders = !isShowStartNodeFolders"
@commitFolder="commitFolder"
/>
</div>
</div>
</div>
</div>
</div>
</div>

<div class="showdowfix" id="bottomoShodow" v-show="showadow"></div>
</div>
<div class="showdowfix" id="bottomoShodow" v-show="showadow"></div>
</div>

<!-- 右键菜单 -->
<div
v-show="rightMenuvisible"
:style="{ left: rightMenuleft + 'px', top: rightMenuTop + 'px' }"
class="contextmenu"
>
<!--新建文件分组-->
<ul
class="rightMenu"
<!-- 右键菜单 -->
<div
v-show="rightMenuvisible"
:style="{ left: rightMenuleft + 'px', top: rightMenuTop + 'px' }"
class="contextmenu"
>
<li
@click="newCreateFolderGroup"
<!--新建文件分组-->
<ul
class="rightMenu"
>
新建文件夹
</li>
<li
@click="openNativeCurrentFolder"
v-if="isClient && this.localWorkspacePrefix"
>
打开本地工作目录
</li>
</ul>
<li
@click="newCreateFolderGroup"
>
新建文件夹
</li>
<li
@click="openNativeCurrentFolder"
v-if="isClient && this.localWorkspacePrefix"
>
打开本地工作目录
</li>
</ul>
</div>
</div>
</div>
</div>
@@ -392,6 +405,8 @@
<script>
import Vue from "vue";
import AppHeader from "@/components/app-header";
import SearchBar from "@/components/search-bar/search-bar";
import ChangeBtn from "@/components/change-btn/change-btn";
import commonJs from "@/common/webCommon";
// import forgeview from "@/views/components/forgeview/forgeview.vue";
// import gismap from "@/views/components/gismap/gismap.vue";
@@ -460,6 +475,8 @@ const initialFolderData = () =>({
export default {
components: {
AppHeader,
SearchBar,
ChangeBtn,
WorkLine,
AddFileButton,
// draggable,
@@ -540,6 +557,9 @@ export default {
isfinishGetExchangeNodes: false,
exchangeNodeListsInCoop: [],//存储与当前节点具有交换关系的节点列表
reverseLocalFileHashMap: {},//键名是 ipfscid 键值是localFileHashMap的键名

isShowSearchBar: false,//控制搜索框显示隐藏
isShowSearchPage: false,//是否显示搜索文件页面
};
},
mounted: function () {
@@ -1665,6 +1685,9 @@ export default {
top: 2px;
}

.app-header-style .app-header-content-right {
display: flex;
}
</style>
<style lang="scss" scoped>
.titleBox {
@@ -1792,4 +1815,8 @@ export default {
}

</style>
<style scoped lang="scss">


</style>

Yükleniyor…
İptal
Kaydet