From b330e57051e54789eb83d10dc58c4d9d10c608e1 Mon Sep 17 00:00:00 2001 From: feiyu02 <risaku@163.com> Date: 星期三, 17 九月 2025 09:55:19 +0800 Subject: [PATCH] 2025.9.17 数据产品模块(待完成) --- src/components/SideList.vue | 259 +++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 219 insertions(+), 40 deletions(-) diff --git a/src/components/SideList.vue b/src/components/SideList.vue index 4b440fe..846be3d 100644 --- a/src/components/SideList.vue +++ b/src/components/SideList.vue @@ -1,34 +1,145 @@ <template> + <div v-if="legend" class="state-label"> + <el-input + v-model="filterText" + icon="Search" + style="width: 200px" + placeholder="鍏抽敭瀛楃瓫閫�" + clearable + /> + <el-tooltip placement="bottom-start" effect="dark"> + <template #content> + <el-space> + <el-space v-for="(item, index) in stateLabels" :key="index" :size="1"> + <el-icon :color="item.color"> + <component :is="item.icon"></component> + </el-icon> + {{ item.name }} + <!-- <el-text size="small">{{ item.name }}</el-text> --> + </el-space> + </el-space> + <br /> + <el-space> + <el-space :size="1"> + <el-icon :size="16" color="var(--el-color-success)"> + <Avatar /> + </el-icon> + 姝e湪鎵ц宸℃煡 + </el-space> + <el-space :size="1"> + <el-icon :size="16" color="var(--el-color-info)"> + <Avatar /> + </el-icon> + 鏈墽琛� + </el-space> + </el-space> + </template> + <el-space> + <el-icon class="cursor-p" :size="16" color="var(--el-color-primary)" + ><QuestionFilled + /></el-icon> + <el-text size="small" class="cursor-p">瀹℃牳鐘舵�佸浘渚�</el-text> + </el-space> + </el-tooltip> + </div> <el-tree + ref="treeRef" class="el-tree" v-loading="isLoading" :data="dataList" :props="defaultProps" @node-click="handleNodeClick" + :filter-node-method="filterNode" default-expand-all highlight-current check-on-click-node empty-text="鏆傛棤璁板綍" > <template #default="{ node, data }"> - <div - :class=" - data.selected - ? 'selected-tree-node custom-tree-node' - : 'custom-tree-node' - " - > - <el-icon v-if="data.type == 2" color="var(--el-color-success)" - ><SuccessFilled - /></el-icon> - <el-icon v-else-if="data.type == 1" color="var(--el-color-warning)" - ><WarningFilled - /></el-icon> - <el-icon v-else-if="data.type == 0" color="var(--el-color-danger)" - ><WarningFilled - /></el-icon> - <div>{{ node.label }}</div> - </div> + <slot :node="node" :data="data"> + <div + :class=" + data.selected + ? 'selected-tree-node custom-tree-node' + : 'custom-tree-node' + " + > + <el-icon + v-if="data.status == '姝e湪鎵ц'" + :size="16" + color="var(--el-color-success)" + style="margin-left: -16px" + > + <Avatar /> + </el-icon> + <el-icon + v-if="data.status == '鏈墽琛�'" + :size="16" + color="var(--el-color-info)" + style="margin-left: -16px" + > + <Avatar /> + </el-icon> + <!-- <el-icon :color="stateLabels[data.type].color"> + <component :is="stateLabels[data.type].icon"></component> + </el-icon> --> + <el-icon + v-if="data.type == 0" + :size="16" + color="var(--el-color-info)" + > + <SuccessFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 1" + :size="16" + color="var(--el-color-danger)" + > + <QuestionFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 2" + :size="16" + color="var(--el-color-warning)" + > + <QuestionFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 3" + :size="16" + color="var(--el-color-danger)" + > + <WarnTriangleFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 4" + :size="16" + color="var(--el-color-danger)" + > + <WarningFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 5" + :size="16" + color="var(--el-color-warning)" + > + <WarningFilled /> + </el-icon> + <el-icon + v-else-if="data.type == 6" + :size="16" + color="var(--el-color-success)" + > + <SuccessFilled /> + </el-icon> + <!-- <el-text>{{ node.label }}</el-text> --> + {{ node.label }} + <span v-if="data.count"> + {{ '_(' + data.count + ')' }} + <!-- <el-text size="small">鐐规</el-text>) --> + </span> + </div> + </slot> </template> </el-tree> </template> @@ -43,20 +154,63 @@ type: 0, title: 'title', categoly: '2022-10-10', - data: {}, - }, - ], + data: {} + } + ] }, loading: Boolean, + // 鏄惁灞曠ず鍥句緥 + legend: { + type: Boolean, + default: false + } }, emits: ['itemClick'], data() { return { + filterText: '', defaultProps: { children: 'children', - label: 'title', + label: 'title' }, isLoading: this.loading, + stateLabels: [ + { + color: 'var(--el-color-info)', + name: '鏃犻棶棰�', + icon: 'SuccessFilled' + }, + { + color: 'var(--el-color-danger)', + name: '闂鏈鏍�', + icon: 'QuestionFilled' + }, + { + color: 'var(--el-color-warning)', + name: '闂閮ㄥ垎瀹℃牳', + icon: 'QuestionFilled' + }, + { + color: 'var(--el-color-danger)', + name: '鏈暣鏀�', + icon: 'WarnTriangleFilled' + }, + { + color: 'var(--el-color-danger)', + name: '鏁存敼鏈鏍�', + icon: 'WarningFilled' + }, + { + color: 'var(--el-color-warning)', + name: '鏁存敼閮ㄥ垎瀹℃牳', + icon: 'WarningFilled' + }, + { + color: 'var(--el-color-success)', + name: '瀹℃牳瀹屾垚', + icon: 'SuccessFilled' + } + ] }; }, computed: { @@ -75,7 +229,8 @@ for (const [key, value] of itemMap) { const i = { title: key, - children: [], + count: value.length, + children: [] }; value.forEach((v) => { i.children.push(v); @@ -92,51 +247,64 @@ } }); return list; - }, + } }, watch: { + filterText(val) { + this.$refs.treeRef.filter(val); + }, loading(nValue) { - this.isLoading = nValue + this.isLoading = nValue; }, //褰撴暟鎹涓�娆℃洿鏂版椂 dataList(nValue) { if (this.isLoading) { if (nValue.length > 0) { - this.dataList.forEach((d) => { - d.children.forEach((c) => { - c.selected = false; - }); - }); + // this.dataList.forEach((d) => { + // d.children.forEach((c) => { + // c.selected = false; + // }); + // }); if (nValue[0].children.length > 0) { const c = nValue[0].children[0]; - c.selected = true; + // c.selected = true; this.$emit('itemClick', c); } else { - nValue[0].selected = true; + // nValue[0].selected = true; } } this.isLoading = false; } - }, + } }, methods: { handleNodeClick(data) { - this.dataList.forEach((d) => { - d.children.forEach((c) => { - c.selected = false; - }); - }); - data.selected = true; + // this.dataList.forEach((d) => { + // d.children.forEach((c) => { + // c.selected = false; + // }); + // }); + // data.selected = true; //鐖惰妭鐐圭殑鐐瑰嚮浜嬩欢涓嶅仛浼犻�� if (data.children == undefined) { this.$emit('itemClick', data); } }, - }, + + filterNode(value, data) { + if (!value) return true; + return data.title.includes(value); + } + } }; </script> <style lang="scss" scoped> +.el-tree { + // background-color: aliceblue; + // width: var(--el-aside-width, 200px) +} + .custom-tree-node { display: flex; align-items: center; @@ -144,4 +312,15 @@ .selected-tree-node { color: var(--el-color-primary); } + +.state-label { + position: sticky; + z-index: 1; + top: 0; + background-color: white; + // box-shadow: var(--el-box-shadow-light); + border-bottom: var(--el-border); + display: flex; + padding-bottom: 4px; +} </style> -- Gitblit v1.9.3