|
|
@@ -0,0 +1,52 @@
|
|
|
+<template>
|
|
|
+ <n-space>
|
|
|
+ <n-icon size="20" :depth="3">
|
|
|
+ <FishIcon />
|
|
|
+ </n-icon>
|
|
|
+ <n-text @click="handleFocus">
|
|
|
+ 工作空间 -
|
|
|
+ <n-button v-show="!focus" secondary round size="tiny">
|
|
|
+ {{ comTitle }}
|
|
|
+ </n-button>
|
|
|
+ </n-text>
|
|
|
+
|
|
|
+ <n-input
|
|
|
+ v-show="focus"
|
|
|
+ ref="inputInstRef"
|
|
|
+ size="small"
|
|
|
+ type="text"
|
|
|
+ maxlength="16"
|
|
|
+ show-count
|
|
|
+ round
|
|
|
+ placeholder="请输入项目名称"
|
|
|
+ v-model:value.trim="title"
|
|
|
+ @blur="handleBlur"
|
|
|
+ />
|
|
|
+ </n-space>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+import { ref, nextTick, computed } from 'vue'
|
|
|
+import { icon } from '@/plugins'
|
|
|
+const { FishIcon } = icon.ionicons5
|
|
|
+
|
|
|
+const focus = ref<boolean>(false)
|
|
|
+const title = ref<string>('')
|
|
|
+const inputInstRef = ref(null)
|
|
|
+
|
|
|
+const comTitle = computed(() => {
|
|
|
+ title.value = title.value.replace(/\s/g,"");
|
|
|
+ return title.value.length ? title.value : '新项目'
|
|
|
+})
|
|
|
+
|
|
|
+const handleFocus = () => {
|
|
|
+ focus.value = true
|
|
|
+ nextTick(() => {
|
|
|
+ ;(<any>inputInstRef).value.focus()
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const handleBlur = () => {
|
|
|
+ focus.value = false
|
|
|
+}
|
|
|
+</script>
|