@liujitcn/kratos-admin-system 0.0.87 → 0.0.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,6 +42,8 @@ export interface UserInfoForm {
42
42
  tenant_code: string;
43
43
  /** 租户名称 */
44
44
  tenant_name: string;
45
+ /** 当前用户所属租户ID */
46
+ tenant_id: number;
45
47
  }
46
48
  /** 获取个人中心用户信息请求参数 */
47
49
  export interface GetUserProfileRequest {
@@ -119,7 +119,7 @@ export async function loadTenantProjectOptions(isDefaultTenant: boolean, force =
119
119
  sharedCatalog.treeOptions = response.list ?? [];
120
120
  indexTree(sharedCatalog.treeOptions);
121
121
  } else {
122
- const response = await defBaseTenantProjectService.OptionBaseTenantProject({ tenant_id: 0 });
122
+ const response = await defBaseTenantProjectService.OptionBaseTenantProject({});
123
123
  sharedCatalog.projectOptions = response.list ?? [];
124
124
  for (const option of sharedCatalog.projectOptions) indexProject(0, Number(option.value), option.label, "");
125
125
  sharedCatalog.treeOptions = sharedCatalog.projectOptions.map(option => ({
@@ -862,7 +862,7 @@
862
862
  "system.base.message.field.title": "Title",
863
863
  "system.base.message.field.user_id": "User ID",
864
864
  "system.base.message.placeholder.action_target": "For example: system/base/user/index",
865
- "system.base.message.placeholder.category": "Select a tenant first, then choose a category",
865
+ "system.base.message.placeholder.category": "Select a category",
866
866
  "system.base.message.placeholder.content": "Enter the notification body using rich text",
867
867
  "system.base.message.placeholder.expires_at": "Optional; the message expires after this time",
868
868
  "system.base.message.placeholder.scheduled_at": "Leave empty to publish immediately",
@@ -862,7 +862,7 @@
862
862
  "system.base.message.field.title": "タイトル",
863
863
  "system.base.message.field.user_id": "ユーザーID",
864
864
  "system.base.message.placeholder.action_target": "例: system/base/user/index",
865
- "system.base.message.placeholder.category": "先にテナントを選択してからカテゴリを選択",
865
+ "system.base.message.placeholder.category": "カテゴリを選択",
866
866
  "system.base.message.placeholder.content": "リッチテキストで通知本文を入力",
867
867
  "system.base.message.placeholder.expires_at": "任意。指定時刻を過ぎると無効になります",
868
868
  "system.base.message.placeholder.scheduled_at": "空欄の場合はすぐに公開",
@@ -862,7 +862,7 @@
862
862
  "system.base.message.field.title": "消息标题",
863
863
  "system.base.message.field.user_id": "用户ID",
864
864
  "system.base.message.placeholder.action_target": "例如:system/base/user/index",
865
- "system.base.message.placeholder.category": "请先选择租户,再选择消息分类",
865
+ "system.base.message.placeholder.category": "请选择消息分类",
866
866
  "system.base.message.placeholder.content": "请输入通知正文,可使用富文本格式",
867
867
  "system.base.message.placeholder.expires_at": "可选,超过时间后消息失效",
868
868
  "system.base.message.placeholder.scheduled_at": "不填写则立即发布",
@@ -862,7 +862,7 @@
862
862
  "system.base.message.field.title": "消息標題",
863
863
  "system.base.message.field.user_id": "使用者ID",
864
864
  "system.base.message.placeholder.action_target": "例如:system/base/user/index",
865
- "system.base.message.placeholder.category": "請先選擇租戶,再選擇消息分類",
865
+ "system.base.message.placeholder.category": "請選擇消息分類",
866
866
  "system.base.message.placeholder.content": "請輸入通知正文,可使用富文字格式",
867
867
  "system.base.message.placeholder.expires_at": "可選,超過時間後消息失效",
868
868
  "system.base.message.placeholder.scheduled_at": "不填寫則立即發布",
@@ -54,6 +54,8 @@ export interface UserInfoForm {
54
54
  tenant_code: string;
55
55
  /** 租户名称 */
56
56
  tenant_name: string;
57
+ /** 当前用户所属租户ID */
58
+ tenant_id: number;
57
59
  }
58
60
 
59
61
  /** 获取个人中心用户信息请求参数 */
@@ -27,7 +27,7 @@ import type { BaseApiLog, PageBaseApiLogRequest } from "@liujitcn/kratos-admin-s
27
27
  defineOptions({ name: "BaseApiLog", inheritAttrs: false });
28
28
 
29
29
  const page = ref<InstanceType<typeof LogTable>>();
30
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
30
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
31
31
 
32
32
  onMounted(() => void loadTenantOptions(true));
33
33
  const resultOptions = computed(() =>
@@ -90,7 +90,9 @@ const config = computed<LogTableConfig>(() => ({
90
90
  }));
91
91
 
92
92
  async function requestTable(params: Record<string, unknown>) {
93
- const response = await defBaseApiLogService.PageBaseApiLog(buildPageRequest(params as unknown as PageBaseApiLogRequest));
93
+ const response = await defBaseApiLogService.PageBaseApiLog(
94
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBaseApiLogRequest)
95
+ );
94
96
  return { list: response.base_api_logs as unknown as Record<string, unknown>[], total: response.total };
95
97
  }
96
98
 
@@ -27,7 +27,7 @@ import type { BaseDataAccessLog, PageBaseDataAccessLogRequest } from "@liujitcn/
27
27
  defineOptions({ name: "BaseDataAccessLog", inheritAttrs: false });
28
28
 
29
29
  const page = ref<InstanceType<typeof LogTable>>();
30
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
30
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
31
31
 
32
32
  onMounted(() => void loadTenantOptions(true));
33
33
  const resultOptions = computed(() => createLogEnumOptions([
@@ -92,7 +92,9 @@ const config = computed<LogTableConfig>(() => ({
92
92
  }));
93
93
 
94
94
  async function requestTable(params: Record<string, unknown>) {
95
- const response = await defBaseDataAccessLogService.PageBaseDataAccessLog(buildPageRequest(params as unknown as PageBaseDataAccessLogRequest));
95
+ const response = await defBaseDataAccessLogService.PageBaseDataAccessLog(
96
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBaseDataAccessLogRequest)
97
+ );
96
98
  return { list: response.base_data_access_logs as unknown as Record<string, unknown>[], total: response.total };
97
99
  }
98
100
 
@@ -281,7 +281,7 @@ function filterDeptTree(deptList: BaseDept[], keywordMap: { name: string; remark
281
281
  * 请求部门树数据,并按搜索条件过滤树形结构。
282
282
  */
283
283
  async function requestBaseDeptTable(params: Record<string, string>) {
284
- currentTenantId.value = params.tenant_id ? Number(params.tenant_id) : undefined;
284
+ currentTenantId.value = toRequestTenantId(params.tenant_id);
285
285
  const data = await defBaseDeptService.TreeBaseDept({ tenant_id: currentTenantId.value });
286
286
  const keywordMap = {
287
287
  name: params.name ?? "",
@@ -19,7 +19,7 @@ import type { BaseLoginLog, PageBaseLoginLogRequest } from "@liujitcn/kratos-adm
19
19
  defineOptions({ name: "BaseLoginLog", inheritAttrs: false });
20
20
 
21
21
  const page = ref<InstanceType<typeof LogTable>>();
22
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
22
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
23
23
 
24
24
  onMounted(() => void loadTenantOptions(true));
25
25
  const resultOptions = computed(() =>
@@ -91,7 +91,9 @@ const config = computed<LogTableConfig>(() => ({
91
91
  }));
92
92
 
93
93
  async function requestTable(params: Record<string, unknown>) {
94
- const response = await defBaseLoginLogService.PageBaseLoginLog(buildPageRequest(params as unknown as PageBaseLoginLogRequest));
94
+ const response = await defBaseLoginLogService.PageBaseLoginLog(
95
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBaseLoginLogRequest)
96
+ );
95
97
  return { list: response.base_login_logs as unknown as Record<string, unknown>[], total: response.total };
96
98
  }
97
99
 
@@ -197,7 +197,7 @@ type MessageFormState = Omit<BaseMessageForm, "tenant_id" | "category_id"> & {
197
197
  };
198
198
 
199
199
  const { BUTTONS } = useAuthButtons();
200
- const { isDefaultTenant, tenantColumns, tenantFormField, loadTenantOptions } = useTenantScope();
200
+ const { isDefaultTenant, tenantColumns, tenantFormField, loadTenantOptions, toRequestTenantId } = useTenantScope();
201
201
  const proTable = ref<ProTableInstance>();
202
202
  const formDialogRef = ref<InstanceType<typeof FormDialog>>();
203
203
  const contentDialogRef = ref<InstanceType<typeof ProDialog>>();
@@ -564,7 +564,10 @@ function onAudienceTypeChange(audience: BaseMessageAudienceForm) {
564
564
  /** 请求消息表格数据。 */
565
565
  async function requestTable(params: Record<string, unknown>) {
566
566
  const data = await defBaseMessageService.PageBaseMessage(
567
- buildPageRequest<PageBaseMessageRequest>(params as unknown as PageBaseMessageRequest)
567
+ buildPageRequest<PageBaseMessageRequest>({
568
+ ...params,
569
+ tenant_id: toRequestTenantId(params.tenant_id)
570
+ } as unknown as PageBaseMessageRequest)
568
571
  );
569
572
  return { data: { list: data.base_messages ?? [], total: data.total } };
570
573
  }
@@ -19,7 +19,7 @@ import type { BaseOperationLog, PageBaseOperationLogRequest } from "@liujitcn/kr
19
19
  defineOptions({ name: "BaseOperationLog", inheritAttrs: false });
20
20
 
21
21
  const page = ref<InstanceType<typeof LogTable>>();
22
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
22
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
23
23
 
24
24
  onMounted(() => void loadTenantOptions(true));
25
25
  const resultOptions = computed(() => createLogEnumOptions([
@@ -82,7 +82,9 @@ const config = computed<LogTableConfig>(() => ({
82
82
  }));
83
83
 
84
84
  async function requestTable(params: Record<string, unknown>) {
85
- const response = await defBaseOperationLogService.PageBaseOperationLog(buildPageRequest(params as unknown as PageBaseOperationLogRequest));
85
+ const response = await defBaseOperationLogService.PageBaseOperationLog(
86
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBaseOperationLogRequest)
87
+ );
86
88
  return { list: response.base_operation_logs as unknown as Record<string, unknown>[], total: response.total };
87
89
  }
88
90
 
@@ -19,7 +19,7 @@ import type { BasePermissionLog, PageBasePermissionLogRequest } from "@liujitcn/
19
19
  defineOptions({ name: "BasePermissionLog", inheritAttrs: false });
20
20
 
21
21
  const page = ref<InstanceType<typeof LogTable>>();
22
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
22
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
23
23
 
24
24
  onMounted(() => void loadTenantOptions(true));
25
25
  const resultOptions = computed(() => createLogEnumOptions([
@@ -86,7 +86,9 @@ const config = computed<LogTableConfig>(() => ({
86
86
  }));
87
87
 
88
88
  async function requestTable(params: Record<string, unknown>) {
89
- const response = await defBasePermissionLogService.PageBasePermissionLog(buildPageRequest(params as unknown as PageBasePermissionLogRequest));
89
+ const response = await defBasePermissionLogService.PageBasePermissionLog(
90
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBasePermissionLogRequest)
91
+ );
90
92
  return { list: response.base_permission_logs as unknown as Record<string, unknown>[], total: response.total };
91
93
  }
92
94
 
@@ -26,7 +26,7 @@ import type { BasePolicyEvaluationLog, PageBasePolicyEvaluationLogRequest } from
26
26
  defineOptions({ name: "BasePolicyEvaluationLog", inheritAttrs: false });
27
27
 
28
28
  const page = ref<InstanceType<typeof LogTable>>();
29
- const { tenantColumns, loadTenantOptions, resolveTenantLabel } = useTenantScope();
29
+ const { tenantColumns, loadTenantOptions, resolveTenantLabel, toRequestTenantId } = useTenantScope();
30
30
 
31
31
  onMounted(() => void loadTenantOptions(true));
32
32
  const decisionOptions = computed(() => createLogEnumOptions([
@@ -89,7 +89,9 @@ const config = computed<LogTableConfig>(() => ({
89
89
  }));
90
90
 
91
91
  async function requestTable(params: Record<string, unknown>) {
92
- const response = await defBasePolicyEvaluationLogService.PageBasePolicyEvaluationLog(buildPageRequest(params as unknown as PageBasePolicyEvaluationLogRequest));
92
+ const response = await defBasePolicyEvaluationLogService.PageBasePolicyEvaluationLog(
93
+ buildPageRequest({ ...params, tenant_id: toRequestTenantId(params.tenant_id) } as unknown as PageBasePolicyEvaluationLogRequest)
94
+ );
93
95
  return { list: response.base_policy_evaluation_logs as unknown as Record<string, unknown>[], total: response.total };
94
96
  }
95
97
 
@@ -65,7 +65,7 @@ type ProjectGrantFormState = {
65
65
  const { BUTTONS } = useAuthButtons();
66
66
  const proTable = ref<ProTableInstance>();
67
67
  const formDialogRef = ref<InstanceType<typeof FormDialog>>();
68
- const { isDefaultTenant, tenantOptions, tenantColumns, tenantFormField, toRequestTenantId, loadTenantOptions } = useTenantScope();
68
+ const { isDefaultTenant, currentTenantId, tenantColumns, tenantFormField, toRequestTenantId, loadTenantOptions } = useTenantScope();
69
69
  const projectOptions = ref<SelectOptionResponse_Option[]>([]);
70
70
  const subjectOptions = ref<ProFormOption[]>([]);
71
71
  const loading = ref(false);
@@ -215,11 +215,11 @@ async function handleOpenDialog(row?: BaseTenantProjectGrant) {
215
215
  try {
216
216
  await formDialogRef.value?.open({
217
217
  load: async () => {
218
- await loadTenantOptions(true);
218
+ if (isDefaultTenant.value) await loadTenantOptions(true);
219
219
  // proto3 JSON 会省略空数组字段,行数据里的 project_id 可能为 undefined。
220
220
  const rowProjectIds = row?.project_id ?? [];
221
221
  const nextForm = {
222
- tenant_id: row?.tenant_id ?? (isDefaultTenant.value ? undefined : Number(tenantOptions.value[0]?.value) || undefined),
222
+ tenant_id: row?.tenant_id ?? (isDefaultTenant.value ? undefined : currentTenantId.value),
223
223
  subject_type: row?.subject_type ?? DEFAULT_SUBJECT_TYPE,
224
224
  subject_id: row?.subject_id,
225
225
  project_id: row && !(rowProjectIds.length === 1 && rowProjectIds[0] === 0) ? [...rowProjectIds] : [],
@@ -264,15 +264,16 @@ async function loadSubjectOptions() {
264
264
  /** 请求指定租户和主体类型的主体选项。 */
265
265
  async function requestSubjectOptions(tenantId: number | undefined, subjectType: BaseTenantProjectGrantSubjectType) {
266
266
  if (!tenantId || subjectType === BaseTenantProjectGrantSubjectType.BASE_TENANT_PROJECT_GRANT_SUBJECT_TYPE_UNSPECIFIED) return [];
267
+ const requestTenantId = toRequestTenantId(tenantId);
267
268
  switch (subjectType) {
268
269
  case BaseTenantProjectGrantSubjectType.BASE_TENANT_PROJECT_GRANT_SUBJECT_TYPE_POST:
269
- return (await defBasePostService.OptionBasePost({ tenant_id: tenantId })).list ?? [];
270
+ return (await defBasePostService.OptionBasePost({ tenant_id: requestTenantId })).list ?? [];
270
271
  case BaseTenantProjectGrantSubjectType.BASE_TENANT_PROJECT_GRANT_SUBJECT_TYPE_ROLE:
271
- return (await defBaseRoleService.OptionBaseRole({ tenant_id: tenantId })).list ?? [];
272
+ return (await defBaseRoleService.OptionBaseRole({ tenant_id: requestTenantId })).list ?? [];
272
273
  case BaseTenantProjectGrantSubjectType.BASE_TENANT_PROJECT_GRANT_SUBJECT_TYPE_DEPT:
273
- return ((await defBaseDeptService.OptionBaseDept({ tenant_id: tenantId })).list ?? []) as unknown as ProFormOption[];
274
+ return ((await defBaseDeptService.OptionBaseDept({ tenant_id: requestTenantId })).list ?? []) as unknown as ProFormOption[];
274
275
  case BaseTenantProjectGrantSubjectType.BASE_TENANT_PROJECT_GRANT_SUBJECT_TYPE_USER:
275
- return (await defBaseUserService.OptionBaseUser({ keyword: "", tenant_id: tenantId })).list ?? [];
276
+ return (await defBaseUserService.OptionBaseUser({ keyword: "", tenant_id: requestTenantId })).list ?? [];
276
277
  }
277
278
  return [];
278
279
  }
@@ -300,8 +301,8 @@ async function handleSubjectTypeChange(value: unknown) {
300
301
  function handleSubmit() {
301
302
  formDialogRef.value?.validate()?.then(valid => {
302
303
  if (!valid || !formData.tenant_id || !formData.subject_id || formData.subject_type === 0) return;
303
- const grant: BaseTenantProjectGrant = {
304
- tenant_id: formData.tenant_id,
304
+ const grant = {
305
+ ...(isDefaultTenant.value ? { tenant_id: formData.tenant_id } : {}),
305
306
  subject_type: formData.subject_type,
306
307
  subject_id: formData.subject_id,
307
308
  project_id: formData.all ? [0] : [...formData.project_id],
@@ -310,7 +311,7 @@ function handleSubmit() {
310
311
  subject_code: "",
311
312
  project_names: [],
312
313
  grant_key: ""
313
- };
314
+ } as BaseTenantProjectGrant;
314
315
  loading.value = true;
315
316
  const request = dialog.editing
316
317
  ? defBaseTenantProjectGrantService.UpdateBaseTenantProjectGrant({ base_tenant_project_grant: grant })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@liujitcn/kratos-admin-system",
3
3
  "private": false,
4
- "version": "0.0.87",
4
+ "version": "0.0.89",
5
5
  "type": "module",
6
6
  "description": "kratos-admin system management module",
7
7
  "license": "MIT",
@@ -16,7 +16,7 @@
16
16
  "sortablejs": "^1.15.2",
17
17
  "swagger-ui-dist": "^5.32.15",
18
18
  "vue-element-plus-x": "^2.0.3",
19
- "@liujitcn/kratos-admin-core": "0.0.87"
19
+ "@liujitcn/kratos-admin-core": "0.0.89"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "@element-plus/icons-vue": "^2.3.1",