|
@@ -2,6 +2,7 @@
|
|
|
<div class="container">
|
|
|
<!-- 标签 -->
|
|
|
<div class="tags">
|
|
|
+ <!-- TODO 标签可以拖动位置 -->
|
|
|
<el-tabs
|
|
|
v-model="clickCollect"
|
|
|
class="demo-tabs"
|
|
@@ -14,6 +15,7 @@
|
|
|
:key="item.labelId"
|
|
|
:label="item.labelName"
|
|
|
:name="item.labelId"
|
|
|
+ @contextmenu.prevent="checkRight($event, item)"
|
|
|
></el-tab-pane>
|
|
|
</el-tabs>
|
|
|
<!-- 添加标签 -->
|
|
@@ -136,10 +138,25 @@
|
|
|
</div>
|
|
|
</el-collapse>
|
|
|
</div>
|
|
|
+ <!-- 右键唤出的菜单 -->
|
|
|
+ <div
|
|
|
+ class="right_menu"
|
|
|
+ v-show="visible"
|
|
|
+ :style="{ left: left + 'px', top: top + 'px' }"
|
|
|
+ >
|
|
|
+ <div class="menu_item">
|
|
|
+ <img src="@/assets/images/textbox.png" alt="" />
|
|
|
+ <span>重命名</span>
|
|
|
+ </div>
|
|
|
+ <div class="menu_item">
|
|
|
+ <img src="@/assets/images/trash.png" alt="" />
|
|
|
+ <span>删除</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { onMounted, ref } from "vue";
|
|
|
+import { onMounted, ref, watch } from "vue";
|
|
|
import { listLabel, addLabel, delLabel } from "@/api/biz/label.js";
|
|
|
import { listFavorite } from "@/api/biz/favorite.js";
|
|
|
const activeNames = ref(["folder", "file"]);
|
|
@@ -205,10 +222,25 @@ const tableData = [
|
|
|
zip: "CA 90036",
|
|
|
},
|
|
|
];
|
|
|
+const visible = ref(false); //显示右键菜单
|
|
|
+const top = ref(0);
|
|
|
+const left = ref(0);
|
|
|
onMounted(async () => {
|
|
|
await getList();
|
|
|
await getCollectList();
|
|
|
});
|
|
|
+// tab右键事件
|
|
|
+const checkRight = (e, item) => {
|
|
|
+ console.log('11');
|
|
|
+ // TODO 唤出右键菜单,思路:获取鼠标位置来定位菜单
|
|
|
+ this.visible = true;
|
|
|
+ top.value = e.pageY;
|
|
|
+ left.value = e.pageX;
|
|
|
+};
|
|
|
+// 关闭右键菜单
|
|
|
+const closeMenu = () => {
|
|
|
+ visible.value = false;
|
|
|
+};
|
|
|
//添加标签
|
|
|
const toAddCollectFn = async () => {
|
|
|
isAddCollect.value = true;
|
|
@@ -244,9 +276,9 @@ const getList = async () => {
|
|
|
};
|
|
|
// 删除标签
|
|
|
const delTabs = async () => {
|
|
|
- const res = await delLabel("7")//直接传id
|
|
|
- console.log('delres = ',res);
|
|
|
- getList();
|
|
|
+ const res = await delLabel("7"); //直接传id
|
|
|
+ console.log("delres = ", res);
|
|
|
+ getList();
|
|
|
};
|
|
|
//获取收藏数据
|
|
|
const getCollectList = async () => {
|
|
@@ -256,6 +288,18 @@ const getCollectList = async () => {
|
|
|
tableData.value = res.rows;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+watch(
|
|
|
+ () => visible.value,
|
|
|
+ (nv, ov) => {
|
|
|
+ if (nv) {
|
|
|
+ console.log('r',nv);
|
|
|
+ document.body.addEventListener("click", closeMenu());
|
|
|
+ } else {
|
|
|
+ document.body.removeEventListener("click",closeMenu());
|
|
|
+ }
|
|
|
+ }
|
|
|
+);
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
@@ -283,6 +327,26 @@ const getCollectList = async () => {
|
|
|
vertical-align: middle;
|
|
|
}
|
|
|
}
|
|
|
+.right_menu {
|
|
|
+ width: 100px;
|
|
|
+ padding: 8px;
|
|
|
+ box-shadow: 0px 2px 10px 1px rgba(199, 203, 216, 0.4);
|
|
|
+ border-radius: 4px 4px 4px 4px;
|
|
|
+ border: 1px solid #c1cce3;
|
|
|
+ .menu_item {
|
|
|
+ width: 100%;
|
|
|
+ height: 40px;
|
|
|
+ border-radius: 4px 4px 4px 4px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ &:hover {
|
|
|
+ background-color: #f5f7f9;
|
|
|
+ }
|
|
|
+ span {
|
|
|
+ margin-left: 4px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
|
|
|
// tag间距
|
|
|
::v-deep .el-tabs__item {
|