Skip to content

Commit 6d6e7a7

Browse files
authored
Merge branch 'v2' into pr@v2@fix_bugs
2 parents 68ed209 + 232e90f commit 6d6e7a7

File tree

22 files changed

+215
-95
lines changed

22 files changed

+215
-95
lines changed

apps/common/constants/permission_constants.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,9 @@ class WorkspaceGroup(Enum):
111111
KNOWLEDGE = "KNOWLEDGE"
112112
MODEL = "MODEL"
113113
TOOL = "TOOL"
114-
OTHER = "OTHER"
115114
RESOURCE_PERMISSION = "RESOURCE_PERMISSION"
115+
OTHER = "OTHER"
116+
116117

117118

118119
class UserGroup(Enum):

apps/common/management/commands/services/hands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,4 @@
2222
APPS_DIR = os.path.join(PROJECT_DIR, 'apps')
2323
TMP_DIR = os.path.join(PROJECT_DIR, 'tmp')
2424
if not os.path.exists(TMP_DIR):
25-
os.makedirs(TMP_DIR)
25+
os.makedirs(TMP_DIR, 0o700, exist_ok=True)

apps/knowledge/models/knowledge.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ class Knowledge(AppModelMixin):
119119
workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)
120120
desc = models.CharField(max_length=256, verbose_name="描述")
121121
user = models.ForeignKey(User, on_delete=models.SET_NULL, db_constraint=False, blank=True, null=True)
122-
type = models.IntegerField(verbose_name='类型', choices=KnowledgeType.choices, default=KnowledgeType.BASE, db_index=True)
122+
type = models.IntegerField(verbose_name='类型', choices=KnowledgeType.choices, default=KnowledgeType.BASE,
123+
db_index=True)
123124
scope = models.CharField(max_length=20, verbose_name='可用范围', choices=KnowledgeScope.choices,
124125
default=KnowledgeScope.WORKSPACE, db_index=True)
125126
folder = models.ForeignKey(KnowledgeFolder, on_delete=models.DO_NOTHING, verbose_name="文件夹id", default='default')
@@ -147,7 +148,8 @@ class Document(AppModelMixin):
147148
status = models.CharField(verbose_name='状态', max_length=20, default=get_default_status, db_index=True)
148149
status_meta = models.JSONField(verbose_name="状态统计数据", default=default_status_meta)
149150
is_active = models.BooleanField(default=True, db_index=True)
150-
type = models.IntegerField(verbose_name='类型', choices=KnowledgeType.choices, default=KnowledgeType.BASE, db_index=True)
151+
type = models.IntegerField(verbose_name='类型', choices=KnowledgeType.choices, default=KnowledgeType.BASE,
152+
db_index=True)
151153
hit_handling_method = models.CharField(verbose_name='命中处理方式', max_length=20,
152154
choices=HitHandlingMethod.choices,
153155
default=HitHandlingMethod.optimization)
@@ -226,6 +228,7 @@ class FileSourceType(models.TextChoices):
226228
DOCUMENT = "DOCUMENT"
227229
# 对话
228230
CHAT = "CHAT"
231+
SYSTEM = "SYSTEM"
229232
# 临时30分钟 数据30分钟后被清理 source_id 为TEMPORARY_30_MINUTE
230233
TEMPORARY_30_MINUTE = "TEMPORARY_30_MINUTE"
231234
# 临时120分钟 数据120分钟后被清理 source_id为TEMPORARY_100_MINUTE
@@ -263,7 +266,8 @@ class File(AppModelMixin):
263266
sha256_hash = models.CharField(verbose_name="文件sha256_hash标识", default="")
264267
source_type = models.CharField(verbose_name="资源类型", choices=FileSourceType,
265268
default=FileSourceType.TEMPORARY_120_MINUTE.value, db_index=True)
266-
source_id = models.CharField(verbose_name="资源id", default=FileSourceType.TEMPORARY_120_MINUTE.value, db_index=True)
269+
source_id = models.CharField(verbose_name="资源id", default=FileSourceType.TEMPORARY_120_MINUTE.value,
270+
db_index=True)
267271
loid = models.IntegerField(verbose_name="loid")
268272
meta = models.JSONField(verbose_name="文件关联数据", default=dict)
269273

installer/start-all.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ set -e
44

55
if [ -f "/opt/maxkb/PG_VERSION" ]; then
66
# 如果是v1版本一键安装的的目录则退出
7-
echo "The existing data is from v1 and is not compatible with v2, installing v2 over v1 is not supported."
8-
echo "The process will now exit."
7+
echo "FATAL ERROR: Upgrade from v1 to v2 is not supported."
8+
echo "The process will exit."
99
exit 1
1010
fi
1111

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ langchain-google-genai = "2.1.7"
3636
langchain-mcp-adapters = "0.1.9"
3737
langchain-huggingface = "0.3.0"
3838
langchain-ollama = "0.3.4"
39-
langgraph = "0.5.2"
39+
langgraph = "0.5.3"
4040
torch = "2.7.1"
4141
sentence-transformers = "5.0.0"
4242

ui/src/api/shared-workspace.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const getUserGroupUserList: (
119119
}
120120

121121
/**
122-
* 获取工作空间下共享知识库的用户组
122+
* 获取工作空间下共享知识库的用户组
123123
*/
124124
const getUserGroupList: (resource: any, loading?: Ref<boolean>) => Promise<Result<ChatUserGroupItem[]>> = (resource, loading) => {
125125
return get (`${prefix}/${prefix_workspace.value}/KNOWLEDGE/${resource.resource_id}/user_group`, undefined, loading)
@@ -170,6 +170,16 @@ const getToolListPage: (
170170
)
171171
}
172172

173+
/**
174+
* 获取全部用户
175+
*/
176+
const getAllMemberList: (arg: string, loading?: Ref<boolean>) => Promise<Result<Record<string, any>[]>> = (
177+
arg,
178+
loading,
179+
) => {
180+
return get('/user/list', undefined, loading)
181+
}
182+
173183
export default {
174184
getKnowledgeList,
175185
getKnowledgeListPage,
@@ -182,5 +192,6 @@ export default {
182192
getToolList,
183193
getToolListPage,
184194
getUserGroupList,
185-
getUserGroupUserList
195+
getUserGroupUserList,
196+
getAllMemberList
186197
}

ui/src/components/ai-chat/component/knowledge-source-component/ExecutionDetailContent.vue

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,6 @@ const props = defineProps<{
636636
appType?: string
637637
}>()
638638
639-
console.log(props)
640639
641640
const messageList = computed(() => {
642641
const chat_step = props.detail?.find(item => item.step_type == "chat_step")
@@ -689,7 +688,6 @@ const historyRecord = computed<any>(() => {
689688
}
690689
})
691690
const messages = messageList.value.filter((item: any) => item.role != "system")
692-
console.log(messages)
693691
694692
const currentChat = computed(() => {
695693
if (messageList.value) {

ui/src/components/app-icon/icons/application.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -688,4 +688,29 @@ export default {
688688
])
689689
},
690690
},
691+
'app-pdf-export': {
692+
iconReader: () => {
693+
return h('i', [
694+
h(
695+
'svg',
696+
{
697+
style: { height: '100%', width: '100%' },
698+
viewBox: '0 0 20 20',
699+
version: '1.1',
700+
xmlns: 'http://www.w3.org/2000/svg',
701+
},
702+
[
703+
h('path', {
704+
d: 'M3.33366 5.83342V16.6667H16.667V10.8334H18.3337V17.5001C18.3337 17.9603 17.9606 18.3334 17.5003 18.3334H2.50033C2.04009 18.3334 1.66699 17.9603 1.66699 17.5001V5.00008C1.66699 4.53984 2.04009 4.16675 2.50033 4.16675H9.16699V5.83342H3.33366Z',
705+
fill: 'currentColor',
706+
}),
707+
h('path', {
708+
d: 'M18.3335 2.50008V8.33342H16.6668V4.51175L11.6876 9.49091C11.6095 9.56903 11.5035 9.61291 11.393 9.61291C11.2825 9.61291 11.1766 9.56903 11.0984 9.49091L10.5093 8.90175C10.4312 8.82361 10.3873 8.71765 10.3873 8.60716C10.3873 8.49668 10.4312 8.39072 10.5093 8.31258L15.4884 3.33341H11.6668V1.66675H17.5001C17.7211 1.66675 17.9331 1.75455 18.0894 1.91083C18.2457 2.06711 18.3335 2.27907 18.3335 2.50008Z',
709+
fill: 'currentColor',
710+
}),
711+
],
712+
),
713+
])
714+
},
715+
},
691716
}

ui/src/components/layout-container/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ const showBack = computed(() => {
5555
.collapse {
5656
position: absolute;
5757
top: 36px;
58-
right: -15px;
58+
right: -12px;
5959
box-shadow: 0px 5px 10px 0px rgba(31, 35, 41, 0.1);
6060
z-index: 1;
6161
}

ui/src/layout/layout-header/avatar/index.vue

Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,83 @@
2121
<div style="width: 90%">
2222
<p class="bold mb-4" style="font-size: 14px">{{ user.userInfo?.username }}</p>
2323
<template v-if="user.userInfo?.role_name && user.userInfo.role_name.length > 0">
24-
<TagGroup size="small" :tags="user.userInfo?.role_name"
25-
v-if="hasPermission([EditionConst.IS_EE, EditionConst.IS_PE],'OR')"
24+
<TagGroup
25+
size="small"
26+
:tags="user.userInfo?.role_name"
27+
v-if="hasPermission([EditionConst.IS_EE, EditionConst.IS_PE], 'OR')"
2628
/>
2729
</template>
2830
</div>
2931
</div>
30-
<el-dropdown-item class="border-t p-8" @click="openResetPassword"
31-
v-if="hasPermission(new ComplexPermission([RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE, RoleConst.USER],
32+
<el-dropdown-item class="border-t"
33+
@click="router.push({ path: `/system/user` })"
34+
v-if="
35+
hasPermission(
36+
[
37+
RoleConst.EXTENDS_ADMIN,
38+
RoleConst.EXTENDS_WORKSPACE_MANAGE,
39+
RoleConst.ADMIN,
40+
RoleConst.WORKSPACE_MANAGE,
41+
],
42+
'OR',
43+
)
44+
"
45+
>
46+
<div class="flex-between w-full">
47+
{{ $t('views.system.title') }}
48+
<AppIcon iconName="app-go"></AppIcon>
49+
</div>
50+
</el-dropdown-item>
51+
<el-dropdown-item
52+
53+
@click="openResetPassword"
54+
v-if="
55+
hasPermission(
56+
new ComplexPermission(
57+
[RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE, RoleConst.USER],
3258
[PermissionConst.CHANGE_PASSWORD],
33-
[],'OR'),'OR')"
59+
[],
60+
'OR',
61+
),
62+
'OR',
63+
)
64+
"
3465
>
3566
{{ $t('views.login.resetPassword') }}
3667
</el-dropdown-item>
3768
<div>
38-
<el-dropdown-item class="p-8" @click="openAPIKeyDialog"
39-
v-if="hasPermission(new ComplexPermission([RoleConst.ADMIN],[PermissionConst.SYSTEM_API_KEY_EDIT],
40-
[EditionConst.IS_EE,EditionConst.IS_PE],'OR'),'OR')"
69+
<el-dropdown-item
70+
class="p-8"
71+
@click="openAPIKeyDialog"
72+
v-if="
73+
hasPermission(
74+
new ComplexPermission(
75+
[RoleConst.ADMIN],
76+
[PermissionConst.SYSTEM_API_KEY_EDIT],
77+
[EditionConst.IS_EE, EditionConst.IS_PE],
78+
'OR',
79+
),
80+
'OR',
81+
)
82+
"
4183
>
4284
{{ $t('layout.apiKey') }}
4385
</el-dropdown-item>
4486
</div>
45-
<el-dropdown-item style="padding: 0" @click.stop
46-
v-if="hasPermission(new ComplexPermission([RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE, RoleConst.USER],
47-
[PermissionConst.SWITCH_LANGUAGE],[],'OR'),'OR')"
87+
<el-dropdown-item
88+
style="padding: 0"
89+
@click.stop
90+
v-if="
91+
hasPermission(
92+
new ComplexPermission(
93+
[RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE, RoleConst.USER],
94+
[PermissionConst.SWITCH_LANGUAGE],
95+
[],
96+
'OR',
97+
),
98+
'OR',
99+
)
100+
"
48101
>
49102
<el-dropdown class="w-full" trigger="hover" placement="left-start">
50103
<div class="flex-between w-full" style="line-height: 22px; padding: 12px 11px">
@@ -78,22 +131,13 @@
78131
</template>
79132
</el-dropdown>
80133
</el-dropdown-item>
81-
<el-dropdown-item @click="openAbout"
82-
v-if="hasPermission([RoleConst.ADMIN,PermissionConst.ABOUT_READ],'OR')"
134+
<el-dropdown-item
135+
@click="openAbout"
136+
v-if="hasPermission([RoleConst.ADMIN, PermissionConst.ABOUT_READ], 'OR')"
83137
>
84138
{{ $t('layout.about.title') }}
85139
</el-dropdown-item>
86140

87-
<el-dropdown-item @click="router.push({ path: `/system/user` })"
88-
v-if="hasPermission([RoleConst.EXTENDS_ADMIN, RoleConst.EXTENDS_WORKSPACE_MANAGE,
89-
RoleConst.ADMIN, RoleConst.WORKSPACE_MANAGE],'OR')"
90-
>
91-
<div class="flex-between w-full">
92-
{{ $t('views.system.title') }}
93-
<AppIcon iconName="app-go"></AppIcon>
94-
</div>
95-
</el-dropdown-item>
96-
97141
<el-dropdown-item class="border-t" @click="logout">
98142
{{ $t('layout.logout') }}
99143
</el-dropdown-item>
@@ -114,10 +158,10 @@ import ResetPassword from './ResetPassword.vue'
114158
import AboutDialog from './AboutDialog.vue'
115159
// import UserPwdDialog from '@/views/user-manage/component/UserPwdDialog.vue'
116160
import APIKeyDialog from './APIKeyDialog.vue'
117-
import {ComplexPermission} from '@/utils/permission/type'
118-
import {langList} from '@/locales/index'
161+
import { ComplexPermission } from '@/utils/permission/type'
162+
import { langList } from '@/locales/index'
119163
import { hasPermission } from '@/utils/permission'
120-
import { PermissionConst, RoleConst,EditionConst } from '@/utils/permission/data'
164+
import { PermissionConst, RoleConst, EditionConst } from '@/utils/permission/data'
121165
122166
const { user, login } = useStore()
123167
const router = useRouter()

0 commit comments

Comments
 (0)