Pārlūkot izejas kodu

git config 大小写敏感引起

gemercheung 2 gadi atpakaļ
vecāks
revīzija
060117f45a
3 mainītis faili ar 156 papildinājumiem un 13 dzēšanām
  1. 1 1
      package.json
  2. 155 0
      packages/qjkankan-editor/src/components/NestedFolder.vue
  3. 0 12
      yarn.lock

+ 1 - 1
package.json

@@ -9,7 +9,7 @@
     "lint-staged": "^10.5.4"
   },
   "scripts": {
-    "edit:serve": "yarn workspace  @qjkankan/editor run serve",
+    "edit:serve": "yarn workspace  @qjkankan/editor run serve-testdev",
     "edit:serve-testprod": "yarn workspace  @qjkankan/editor run serve-testprod",
     "edit:build": "yarn workspace  @qjkankan/editor run build",
     "edit:build-testprod": "yarn workspace  @qjkankan/editor run build-testprod",

+ 155 - 0
packages/qjkankan-editor/src/components/NestedFolder.vue

@@ -0,0 +1,155 @@
+<template>
+  <div
+    class="scene-group"
+  >
+    <div
+      class="top-bar"
+      :class="{
+        highlight: targetId === folderInfo.id,
+        disabled: isDisabled,
+      }"
+      @click="onClickTopBar"
+      :style="{
+        paddingLeft: topBarPaddingLeft,
+      }"
+    >
+      <i class="iconfont icon-edit_input_arrow icon-expand" :class="isExpanded ? '' : 'collapsed'"></i>
+      <img v-show="!isExpanded" class="folder collapsed" src="@/assets/images/icons/folder-blue-small-close.png" alt="" draggable="false">
+      <img v-show="isExpanded" class="folder opened" src="@/assets/images/icons/folder-blue-small-open.png" alt="" draggable="false">
+      <span class="group-name">{{folderInfo.id === 1 ? $i18n.t('gather.root_dir') : folderInfo.name}}</span>
+    </div>
+
+    <div class="group-content" v-if="isExpanded">
+        <div
+          v-for="(item, index) of folderInfo.children"
+          :key=item.id
+        >
+          <component
+            :is="'NestedFolder'"
+            :folderInfo="item"
+            :level="level + 1"
+            :targetId="targetId"
+            :disabledFolderList=disabledFolderList
+            @targeted="onSonTargeted"
+          />
+        </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+
+export default {
+  name: 'NestedFolder',
+  components: {
+  },
+  props: {
+    folderInfo: {
+      type: Object,
+      required: true,
+    },
+    level: {
+      type: Number,
+      default: 1,
+    },
+    disabledFolderList: {
+      type: Array,
+      default: () => {
+        return []
+      },
+    },
+    targetId: {
+      required: true,
+    }
+  },
+  data() {
+    return {
+      isExpanded: this.level === 1 ? true : false,
+    }
+  },
+  computed: {
+    topBarPaddingLeft() {
+      return 12 + (this.level - 1) * 12 + 'px' 
+    },
+    sceneItemPaddingLeft() {
+      return 18 + this.level * 12 + 'px' 
+    },
+    isDisabled() {
+      return this.disabledFolderList.some((item) => {
+        return item.id === this.folderInfo.id
+      })
+    },
+  },
+  methods: {
+    onClickTopBar() {
+      if (!this.isDisabled) {
+        this.isExpanded = !this.isExpanded
+        this.$emit('targeted', this.folderInfo.id)
+      }
+    },
+    onSonTargeted(id) {
+      this.$emit('targeted', id)
+    }
+  },
+  mounted() {
+  },
+  destroyed() {
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.scene-group {
+  user-select: none;
+  .top-bar {
+    position: relative;
+    height: 40px;
+    border-radius: 4px;
+    display: flex;
+    align-items: center;
+    padding-right: 10px;
+    &:hover {
+    }
+    &.highlight {
+      background: #ebedf0;
+    }
+    &.disabled {
+      opacity: 0.5;
+    }
+    > .icon-expand {
+      display: inline-block;
+      font-size: 12px;
+      transform: scale(0.7);
+      color: rgba(130, 134, 142, 1);
+      flex: 0 0 auto;
+      &.collapsed {
+        display: inline-block;
+        transform: scale(0.7) rotate(-90deg);
+      }
+    }
+    > img.folder {
+      margin-left: 7px;
+      flex: 0 0 auto;
+      width: 16px;
+      &.collapsed {
+        height: 16px;
+        }
+      &.opened {
+        height: 14px;
+      }
+    }
+    > .group-name {
+      margin-left: 6px;
+      display: inline-block;
+      text-overflow: ellipsis;
+      overflow: hidden;
+      white-space: nowrap;
+      flex: 1 1 auto;
+      font-size: 14px;
+      color: #323233;
+      cursor: default;
+    }
+  }
+}
+</style>

+ 0 - 12
yarn.lock

@@ -15227,11 +15227,6 @@ sort-keys@^4.0.0:
   dependencies:
     is-plain-obj "^2.0.0"
 
-sortablejs@1.10.2:
-  version "1.10.2"
-  resolved "https://mirrors.cloud.tencent.com/npm/sortablejs/-/sortablejs-1.10.2.tgz#6e40364d913f98b85a14f6678f92b5c1221f5290"
-  integrity sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==
-
 source-list-map@^2.0.0:
   version "2.0.1"
   resolved "https://mirrors.cloud.tencent.com/npm/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
@@ -16829,13 +16824,6 @@ vue@^3.0.0, vue@^3.0.4, vue@^3.2.13, vue@^3.2.36:
     "@vue/server-renderer" "3.2.47"
     "@vue/shared" "3.2.47"
 
-vuedraggable@^2.24.3:
-  version "2.24.3"
-  resolved "https://mirrors.cloud.tencent.com/npm/vuedraggable/-/vuedraggable-2.24.3.tgz#43c93849b746a24ce503e123d5b259c701ba0d19"
-  integrity sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==
-  dependencies:
-    sortablejs "1.10.2"
-
 vuex@^3.6.0:
   version "3.6.2"
   resolved "https://mirrors.cloud.tencent.com/npm/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71"