Skip to content

Commit 76ba9d0

Browse files
feat: Add tag management
1 parent ba5f86d commit 76ba9d0

File tree

9 files changed

+110
-55
lines changed

9 files changed

+110
-55
lines changed

ui/src/locales/lang/en-US/views/document.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,11 @@ export default {
102102
label: 'Tag Management',
103103
key: 'Tag',
104104
value: 'Value',
105-
add: 'Add Tag',
105+
addTag: 'Add Tag',
106106
setting: 'Tag Settings',
107107
create: 'Create Tag',
108108
edit: 'Edit Tag',
109+
editValue: 'Edit Tag Value',
109110
deleteConfirm: 'Confirm delete tag: ',
110111
deleteTip: 'After deletion, resources using this tag will have the tag removed. Please proceed with caution!',
111112
requiredMessage1: 'Please enter a tag',

ui/src/locales/lang/zh-CN/views/document.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,12 @@ export default {
9797
label: '标签管理',
9898
key: '标签',
9999
value: '标签值',
100-
add: '添加标签',
100+
addTag: '添加标签',
101+
addValue: '添加标签值',
101102
setting: '标签设置',
102103
create: '创建标签',
103104
edit: '编辑标签',
105+
editValue: '编辑标签值',
104106
deleteConfirm: '是否删除标签: ',
105107
deleteTip: '删除后使用该标签的资源将会删除该标签,请谨慎操作!',
106108
requiredMessage1: '请输入标签',

ui/src/locales/lang/zh-Hant/views/document.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,11 @@ export default {
100100
label: '標籤管理',
101101
key: '標籤',
102102
value: '標籤值',
103-
add: '添加標籤',
103+
addTag: '添加標籤',
104104
setting: '標籤設置',
105105
create: '創建標籤',
106106
edit: '編輯標籤',
107+
editValue: '編輯標籤值',
107108
deleteConfirm: '是否刪除標籤: ',
108109
deleteTip: '刪除後使用該標籤的資源將會刪除該標籤,請謹慎操作!',
109110
requiredMessage1: '請輸入標籤',

ui/src/views/document/index.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
:disabled="multipleSelection.length === 0"
6363
v-if="permissionPrecise.doc_edit(id)"
6464
>
65-
{{ $t('views.document.tag.add') }}
65+
{{ $t('views.document.tag.addTag') }}
6666
</el-button>
6767
<el-dropdown v-if="MoreFilledPermission0(id)">
6868
<el-button class="ml-12 mr-12">
@@ -687,7 +687,7 @@ import permissionMap from '@/permission'
687687
import { loadSharedApi } from '@/utils/dynamics-api/shared-api'
688688
import TagDrawer from "./tag/TagDrawer.vue";
689689
import TagSettingDrawer from "./tag/TagSettingDrawer.vue";
690-
import AddTagDialog from "@/views/document/component/AddTagDialog.vue";
690+
import AddTagDialog from "@/views/document/tag/MulAddTagDialog.vue";
691691
692692
const route = useRoute()
693693
const router = useRouter()

ui/src/views/document/tag/CreateTagDialog.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
<template>
2-
<el-dialog v-model="dialogVisible" :title="$t('views.document.tag.create')" :before-close="close">
2+
<el-dialog
3+
v-model="dialogVisible"
4+
:title="currentTagKey ? $t('views.document.tag.addValue') : $t('views.document.tag.create')"
5+
:before-close="close"
6+
>
37
<el-form
48
ref="FormRef"
59
:model="{ tags }"
@@ -76,7 +80,6 @@
7680
</template>
7781
<script setup lang="ts">
7882
import { computed, ref } from 'vue'
79-
import AppIcon from '@/components/app-icon/AppIcon.vue'
8083
import { useRoute } from 'vue-router'
8184
import { loadSharedApi } from '@/utils/dynamics-api/shared-api.ts'
8285
import { cloneDeep } from 'lodash'

ui/src/views/document/tag/EditTagDialog.vue

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<template>
22
<el-dialog
33
v-model="dialogVisible"
4-
:title="$t('views.document.tag.edit')"
4+
:title="isEditKey ? $t('views.document.tag.edit') : $t('views.document.tag.editValue')"
55
:before-close="close"
6+
:width="isEditKey ? '500px' : '50%'"
67
>
78
<el-form
89
ref="FormRef"
@@ -11,23 +12,46 @@
1112
require-asterisk-position="right"
1213
@submit.prevent
1314
>
14-
<el-form-item label="标签" v-if="isEditKey"
15-
:rules="{ required: true, message: $t('views.document.tag.requiredMessage1'), trigger: 'blur' }"
16-
prop="key">
15+
<el-form-item
16+
:label="$t('views.document.tag.key')"
17+
v-if="isEditKey"
18+
:rules="{
19+
required: true,
20+
message: $t('views.document.tag.requiredMessage1'),
21+
trigger: 'blur',
22+
}"
23+
prop="key"
24+
>
1725
<el-input v-model="form.key"></el-input>
1826
</el-form-item>
19-
<div v-else class="flex-between">
20-
<el-form-item label="标签" prop="key"
21-
style="width: 50%"
22-
:rules="{ required: true, message: $t('views.document.tag.requiredMessage1'), trigger: 'blur' }">
23-
<el-input v-model="form.key" :disabled="true"></el-input>
24-
</el-form-item>
25-
<el-form-item label="标签值" prop="value"
26-
style="width: 50%"
27-
:rules="{ required: true, message: $t('views.document.tag.requiredMessage2'), trigger: 'blur' }">
28-
<el-input v-model="form.value"></el-input>
29-
</el-form-item>
30-
</div>
27+
<el-row :gutter="8" align="bottom" v-else>
28+
<el-col :span="12">
29+
<el-form-item
30+
:label="$t('views.document.tag.key')"
31+
prop="key"
32+
:rules="{
33+
required: true,
34+
message: $t('views.document.tag.requiredMessage1'),
35+
trigger: 'blur',
36+
}"
37+
>
38+
<el-input v-model="form.key" :disabled="true"></el-input>
39+
</el-form-item>
40+
</el-col>
41+
<el-col :span="12">
42+
<el-form-item
43+
:label="$t('views.document.tag.value')"
44+
prop="value"
45+
:rules="{
46+
required: true,
47+
message: $t('views.document.tag.requiredMessage2'),
48+
trigger: 'blur',
49+
}"
50+
>
51+
<el-input v-model="form.value"></el-input>
52+
</el-form-item>
53+
</el-col>
54+
</el-row>
3155
</el-form>
3256
<template #footer>
3357
<div class="dialog-footer">
@@ -39,12 +63,12 @@
3963
</template>
4064
<script setup lang="ts">
4165
import { computed, ref } from 'vue'
42-
import { useRoute } from "vue-router";
43-
import { loadSharedApi } from "@/utils/dynamics-api/shared-api.ts";
66+
import { useRoute } from 'vue-router'
67+
import { loadSharedApi } from '@/utils/dynamics-api/shared-api.ts'
4468
4569
const route = useRoute()
4670
const {
47-
params: {id}, // id为knowledgeID
71+
params: { id }, // id为knowledgeID
4872
} = route as any
4973
const emit = defineEmits(['refresh'])
5074
@@ -62,7 +86,7 @@ const isEditKey = ref(false)
6286
const form = ref({
6387
id: '',
6488
key: '',
65-
value: ''
89+
value: '',
6690
})
6791
6892
const loading = ref(false)
@@ -71,7 +95,7 @@ const dialogVisible = ref<boolean>(false)
7195
const submit = () => {
7296
FormRef.value.validate((valid: boolean) => {
7397
if (valid) {
74-
loadSharedApi({type: 'knowledge', systemType: apiType.value})
98+
loadSharedApi({ type: 'knowledge', systemType: apiType.value })
7599
.putTag(id, form.value.id, form.value, loading)
76100
.then((res: any) => {
77101
close()
@@ -93,6 +117,6 @@ const close = () => {
93117
dialogVisible.value = false
94118
}
95119
96-
defineExpose({open, close})
120+
defineExpose({ open, close })
97121
</script>
98122
<style lang="scss" scoped></style>

ui/src/views/document/component/AddTagDialog.vue renamed to ui/src/views/document/tag/MulAddTagDialog.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
</template>
6565
<script setup lang="ts">
6666
import { ref } from 'vue'
67-
import AppIcon from '@/components/app-icon/AppIcon.vue'
6867
6968
const emit = defineEmits(['addTags'])
7069
const props = defineProps({

ui/src/views/document/tag/TagDrawer.vue

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -26,45 +26,61 @@
2626
:span-method="spanMethod"
2727
v-loading="loading"
2828
@selection-change="handleSelectionChange"
29+
@cell-mouse-enter="cellMouseEnter"
30+
@cell-mouse-leave="cellMouseLeave"
2931
>
3032
<el-table-column type="selection" width="55"/>
3133
<el-table-column :label="$t('views.document.tag.key')">
3234
<template #default="{ row }">
3335
<div class="flex-between">
3436
{{ row.key }}
35-
<div>
36-
<el-button link>
37-
<AppIcon
38-
iconName="app-add-outlined"
39-
class="mr-4"
40-
@click="openCreateTagDialog(row)"
41-
/>
42-
</el-button>
43-
<el-button link>
44-
<AppIcon iconName="app-edit" class="mr-4" @click="editTagKey(row)"/>
45-
</el-button>
46-
<el-button link>
47-
<AppIcon iconName="app-delete" class="mr-4" @click="delTag(row)"/>
48-
</el-button>
37+
<div v-if="currentMouseId === row.id">
38+
<span class="mr-4">
39+
<el-tooltip effect="dark" :content="$t('views.document.tag.addValue')">
40+
<el-button type="primary" text @click.stop="openCreateTagDialog(row)">
41+
<AppIcon iconName="app-add-outlined" />
42+
</el-button>
43+
</el-tooltip>
44+
</span>
45+
<span class="mr-4">
46+
<el-tooltip effect="dark" :content="$t('views.document.tag.edit')">
47+
<el-button type="primary" text @click.stop="editTagKey(row)">
48+
<AppIcon iconName="app-edit" />
49+
</el-button>
50+
</el-tooltip>
51+
</span>
52+
<el-tooltip effect="dark" :content="$t('common.delete')">
53+
<el-button type="primary" text @click.stop="delTag(row)">
54+
<AppIcon iconName="app-delete" />
55+
</el-button>
56+
</el-tooltip>
4957
</div>
5058
</div>
5159
</template>
5260
</el-table-column>
53-
<el-table-column :label="$t('views.document.tag.value')">
61+
<el-table-column :label="$t('views.document.tag.value')" class-name="border-l">
5462
<template #default="{ row }">
5563
<div class="flex-between">
5664
{{ row.value }}
57-
<div>
58-
<el-button link>
59-
<AppIcon iconName="app-edit" class="mr-4" @click="editTagValue(row)"/>
60-
</el-button>
61-
<el-button link>
62-
<AppIcon iconName="app-delete" class="mr-4" @click="delTagValue(row)"/>
63-
</el-button>
64-
</div>
6565
</div>
6666
</template>
6767
</el-table-column>
68+
<el-table-column :label="$t('common.operation')" align="left" width="100" fixed="right">
69+
<template #default="{ row }">
70+
<span class="mr-4">
71+
<el-tooltip effect="dark" :content="$t('views.document.tag.editValue')">
72+
<el-button type="primary" text @click.stop="editTagValue(row)">
73+
<AppIcon iconName="app-edit" />
74+
</el-button>
75+
</el-tooltip>
76+
</span>
77+
<el-tooltip effect="dark" :content="$t('common.delete')">
78+
<el-button type="primary" text @click.stop="delTagValue(row)">
79+
<AppIcon iconName="app-delete" />
80+
</el-button>
81+
</el-tooltip>
82+
</template>
83+
</el-table-column>
6884
</el-table>
6985
</el-drawer>
7086
<CreateTagDialog ref="createTagDialogRef" @refresh="getList"/>
@@ -105,6 +121,15 @@ const loading = ref(false)
105121
const debugVisible = ref(false)
106122
const filterText = ref('')
107123
const tags = ref<Array<any>>([])
124+
const currentMouseId = ref<number | null>(null)
125+
126+
function cellMouseEnter(row: any) {
127+
currentMouseId.value = row.id
128+
}
129+
130+
function cellMouseLeave() {
131+
currentMouseId.value = null
132+
}
108133
109134
// 将原始数据转换为表格数据
110135
const tableData = computed(() => {

ui/src/views/document/tag/TagSettingDrawer.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<div class="flex-between">
77
<div>
88
<el-button type="primary" @click="openAddTagDialog()">
9-
{{ $t('views.document.tag.add') }}
9+
{{ $t('views.document.tag.addTag') }}
1010
</el-button>
1111
<el-button :disabled="multipleSelection.length === 0" @click="batchDelete">
1212
{{ $t('common.delete') }}
@@ -57,7 +57,7 @@ import { useRoute } from 'vue-router'
5757
import { loadSharedApi } from "@/utils/dynamics-api/shared-api.ts"
5858
import { MsgConfirm } from "@/utils/message.ts";
5959
import { t } from "@/locales";
60-
import AddTagDialog from "@/views/document/component/AddTagDialog.vue";
60+
import AddTagDialog from "@/views/document/tag/MulAddTagDialog.vue";
6161
6262
const emit = defineEmits(['refresh'])
6363
const props = defineProps({

0 commit comments

Comments
 (0)