From 76a08ac3688cc62f35eec38d07649944515bef99 Mon Sep 17 00:00:00 2001 From: puriphatt Date: Wed, 25 Sep 2024 17:47:01 +0700 Subject: [PATCH] fix(04): service tree view --- .../04_product-service/FormServiceWork.vue | 59 +++++++++++++++- src/components/shared/TreeView.vue | 69 ++++++++++++++++--- src/pages/04_product-service/MainPage.vue | 45 +++++++++++- 3 files changed, 159 insertions(+), 14 deletions(-) diff --git a/src/components/04_product-service/FormServiceWork.vue b/src/components/04_product-service/FormServiceWork.vue index 77b58c25..bbbba391 100644 --- a/src/components/04_product-service/FormServiceWork.vue +++ b/src/components/04_product-service/FormServiceWork.vue @@ -5,17 +5,21 @@ import { moveItemUp, moveItemDown, deleteItem, dialog } from 'stores/utils'; import NoData from 'components/NoData.vue'; import WorkManagementComponent from './WorkManagementComponent.vue'; import AddButton from '../button/AddButton.vue'; -import { WorkItems } from 'stores/product-service/types'; +import { ServiceCreate, WorkItems } from 'stores/product-service/types'; +import TreeView from '../shared/TreeView.vue'; +import { ref } from 'vue'; const { t } = useI18n(); const workItems = defineModel('workItems', { default: [] }); -defineProps<{ +const props = defineProps<{ + service?: ServiceCreate; dense?: boolean; outlined?: boolean; readonly?: boolean; separator?: boolean; + treeView?: boolean; priceDisplay?: { price: boolean; @@ -30,6 +34,22 @@ defineEmits<{ (e: 'workProperties', index: number): void; }>(); +const nodes = ref([ + { + title: props.service?.name, + subtitle: props.service?.code, + selected: false, + children: workItems.value.map((v) => ({ + title: v.name, + subtitle: ' ', + children: v.product.map((x) => ({ + title: x.name, + subtitle: x.code, + })), + })), + }, +]); + function addWork() { workItems.value.push({ id: '', @@ -75,7 +95,7 @@ function confirmDelete(items: unknown[], index: number) { /> -
+
+
+ +
+
import { Icon } from '@iconify/vue'; +import { computed } from 'vue'; type Node = { [key: string]: any; @@ -13,6 +14,8 @@ type Props = { keyTitle?: string; keySubtitle?: string; expandable?: boolean; + hideCheckBox?: boolean; + iconSize?: string; decoration?: { level?: number; bg?: string; @@ -27,6 +30,11 @@ const nodes = defineModel('nodes', { required: true }); const emits = defineEmits<{ (e: 'checked'): void }>(); const dec = props.decoration?.find((v) => v.level === (props.level || 0)); +const maxLevel = computed(() => + props.decoration?.reduce((max, v) => { + return v.level && v.level > max ? v.level : max; + }, 0), +); function recursiveDeselect(node: Node) { if (node.children) { @@ -48,8 +56,22 @@ function toggleExpand(node: Node) { - + -
+
+
+ + +
+