mirror of
				https://github.com/continew-org/continew-admin-ui.git
				synced 2025-10-31 10:57:10 +08:00 
			
		
		
		
	style: 调整字典的操作菜单弹出方式,由右键弹出调整为点击更多按钮弹出
This commit is contained in:
		| @@ -1,12 +1,9 @@ | ||||
| <template> | ||||
|   <a-menu class="right-menu"> | ||||
|     <a-menu-item v-permission="['system:dict:update']" @click="onClick('update')"> | ||||
|       <template #icon><icon-edit :size="16" :stroke-width="3" /></template> | ||||
|       <span>修改</span> | ||||
|     </a-menu-item> | ||||
|  | ||||
|     <a-menu-item v-permission="['system:dict:delete']" :title="data.isSystem ? '系统内置数据不能删除' : undefined" :disabled="data.isSystem" @click="onClick('delete')"> | ||||
|       <template #icon><icon-delete :size="16" :stroke-width="3" /></template> | ||||
|     <a-menu-item v-permission="['system:dict:delete']" class="danger" :title="data.isSystem ? '系统内置数据不能删除' : undefined" :disabled="data.isSystem" @click="onClick('delete')"> | ||||
|       <span>删除</span> | ||||
|     </a-menu-item> | ||||
|   </a-menu> | ||||
| @@ -38,14 +35,18 @@ const onClick = (mode: string) => { | ||||
|   .arco-menu-item { | ||||
|     height: 34px; | ||||
|  | ||||
|     &:not(.arco-menu-selected) { | ||||
|       color: $color-text-1; | ||||
|     } | ||||
|  | ||||
|     &:last-child { | ||||
|       margin-bottom: 0; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .danger { | ||||
|     color: rgb(var(--danger-6)); | ||||
|   } | ||||
|  | ||||
|   .danger.arco-menu-disabled { | ||||
|     color: var(--color-danger-light-3); | ||||
|   } | ||||
| } | ||||
|  | ||||
| .right-menu { | ||||
|   | ||||
| @@ -8,26 +8,36 @@ | ||||
|         <template #icon><icon-plus /></template> | ||||
|       </a-button> | ||||
|     </div> | ||||
|     <div class="dict-tree__container"> | ||||
|       <div class="dict-tree__tree"> | ||||
|     <a class="dict-tree__container"> | ||||
|       <a class="dict-tree__tree"> | ||||
|         <a-tree :data="(treeData as unknown as TreeNodeData[])" :field-names="{ key: 'id' }" block-node | ||||
|           @select="select"> | ||||
|           <template #title="node"> | ||||
|             <a-trigger v-model:popup-visible="node.popupVisible" trigger="contextMenu" align-point | ||||
|               animation-name="slide-dynamic-origin" auto-fit-transform-origin position="bl" scroll-to-close> | ||||
|               <a-tooltip v-if="node.description" :content="node.description" background-color="rgb(var(--primary-6))" position="right"> | ||||
|                 <div @contextmenu="onContextmenu(node)">{{ node.name }} ({{ node.code }})</div> | ||||
|               </a-tooltip> | ||||
|               <div v-else @contextmenu="onContextmenu(node)">{{ node.name }} ({{ node.code }})</div> | ||||
|             <a-typography-paragraph | ||||
|               :ellipsis="{ | ||||
|                 rows: 1, | ||||
|                 showTooltip: true, | ||||
|                 css: true, | ||||
|               }" | ||||
|             > | ||||
|               {{ node.name }} ({{ node.code }}) | ||||
|             </a-typography-paragraph> | ||||
|           </template> | ||||
|           <template #extra="node"> | ||||
|             <a-trigger trigger="click" align-point animation-name="slide-dynamic-origin" auto-fit-transform-origin position="bl" scroll-to-close> | ||||
|               <icon-more-vertical class="action" /> | ||||
|               <template #content> | ||||
|                 <RightMenu v-if="has.hasPermOr(['system:dict:update', 'system:dict:delete'])" :data="node" | ||||
|                   @on-menu-item-click="onMenuItemClick" /> | ||||
|                 <RightMenu | ||||
|                   v-if="has.hasPermOr(['system:dict:update', 'system:dict:delete'])" | ||||
|                   :data="node" | ||||
|                   @on-menu-item-click="onMenuItemClick" | ||||
|                 /> | ||||
|               </template> | ||||
|             </a-trigger> | ||||
|           </template> | ||||
|         </a-tree> | ||||
|       </div> | ||||
|     </div> | ||||
|       </a> | ||||
|     </a> | ||||
|   </div> | ||||
|  | ||||
|   <DictAddModal ref="DictAddModalRef" @save-success="getTreeData" /> | ||||
| @@ -51,8 +61,14 @@ const props = withDefaults(defineProps<Props>(), { | ||||
| const emit = defineEmits<{ | ||||
|   (e: 'node-click', keys: Array<any>): void | ||||
| }>() | ||||
|  | ||||
| const selectKey = ref() | ||||
| // 选中节点 | ||||
| const select = (keys: Array<any>) => { | ||||
|   if (selectKey.value === keys[0]) { | ||||
|     return | ||||
|   } | ||||
|   selectKey.value = keys[0] | ||||
|   emit('node-click', keys) | ||||
| } | ||||
|  | ||||
| @@ -89,28 +105,14 @@ watch(inputValue, (val) => { | ||||
|   getTreeData() | ||||
| }) | ||||
|  | ||||
| // 保存当前右键的节点 | ||||
| const contextmenuNode = ref<TreeItem | null>(null) | ||||
| const onContextmenu = (node: TreeItem) => { | ||||
|   contextmenuNode.value = node | ||||
| } | ||||
|  | ||||
| // 关闭右键菜单弹框 | ||||
| const closeRightMenuPopup = () => { | ||||
|   if (contextmenuNode.value?.popupVisible) { | ||||
|     contextmenuNode.value.popupVisible = false | ||||
|   } | ||||
| } | ||||
|  | ||||
| const DictAddModalRef = ref<InstanceType<typeof DictAddModal>>() | ||||
| // 新增 | ||||
| const onAdd = () => { | ||||
|   DictAddModalRef.value?.onAdd() | ||||
| } | ||||
|  | ||||
| // 右键菜单项点击 | ||||
| // 点击菜单项 | ||||
| const onMenuItemClick = (mode: string, node: DictResp) => { | ||||
|   closeRightMenuPopup() | ||||
|   if (mode === 'update') { | ||||
|     DictAddModalRef.value?.onUpdate(node.id) | ||||
|   } else if (mode === 'delete') { | ||||
| @@ -141,16 +143,18 @@ onMounted(() => { | ||||
| </script> | ||||
|  | ||||
| <style lang="scss" scoped> | ||||
| :deep(.arco-tree-node-title-text) { | ||||
|   width: 100%; | ||||
|   white-space: nowrap; | ||||
| } | ||||
|  | ||||
| :deep(.arco-tree-node) { | ||||
|   line-height: normal; | ||||
|   border-radius: var(--border-radius-medium); | ||||
|   margin: 5px 0; | ||||
|   .action { | ||||
|     opacity: 0; | ||||
|   } | ||||
|   &:hover { | ||||
|     background-color: var(--color-secondary-hover); | ||||
|     .action { | ||||
|       opacity: 1; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .arco-tree-node-switcher { | ||||
| @@ -163,13 +167,19 @@ onMounted(() => { | ||||
|       background-color: transparent; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   .arco-tree-node-title-text { | ||||
|     width: 100%; | ||||
|     white-space: normal; | ||||
|     overflow-wrap: anywhere; | ||||
|   } | ||||
| } | ||||
|  | ||||
| :deep(.arco-tree-node-selected) { | ||||
|   font-weight: bold; | ||||
|   background-color: rgba(var(--primary-6), 0.1); | ||||
|   &:hover { | ||||
|     background-color: rgba(var(--primary-6), 0.1); | ||||
|   .arco-typography { | ||||
|     color: rgb(var(--primary-6)); | ||||
|   } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user