com-angel-authorization 1.0.18 → 1.0.20

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.
package/dist/vue/index.js CHANGED
@@ -3765,7 +3765,8 @@ var s4 = {
3765
3765
  flexDirection: "column",
3766
3766
  gap: "6px",
3767
3767
  maxHeight: "160px",
3768
- overflow: "auto"
3768
+ overflow: "auto",
3769
+ marginTop: "8px"
3769
3770
  },
3770
3771
  checkItem: {
3771
3772
  display: "flex",
@@ -3784,10 +3785,35 @@ var s4 = {
3784
3785
  backgroundColor: "#ffffff"
3785
3786
  },
3786
3787
  hint: { fontSize: "13px", color: "#98a2b3", padding: "4px 0" },
3787
- switchRow: {
3788
+ selectTrigger: {
3788
3789
  display: "flex",
3789
3790
  alignItems: "center",
3790
3791
  justifyContent: "space-between",
3792
+ gap: "8px",
3793
+ width: "100%",
3794
+ border: "1px solid #d0d5dd",
3795
+ borderRadius: "8px",
3796
+ padding: "8px 10px",
3797
+ background: "#fff",
3798
+ cursor: "pointer",
3799
+ fontSize: "14px",
3800
+ color: "#101828",
3801
+ boxSizing: "border-box",
3802
+ textAlign: "left"
3803
+ },
3804
+ selectTriggerText: {
3805
+ flex: "1",
3806
+ overflow: "hidden",
3807
+ textOverflow: "ellipsis",
3808
+ whiteSpace: "nowrap"
3809
+ },
3810
+ selectPlaceholder: { color: "#98a2b3" },
3811
+ selectChevron: { color: "#667085", fontSize: "10px", flexShrink: "0" },
3812
+ required: { color: "#d92d20", marginLeft: "2px" },
3813
+ switchRow: {
3814
+ display: "flex",
3815
+ alignItems: "center",
3816
+ justifyContent: "flex-start",
3791
3817
  gap: "12px"
3792
3818
  },
3793
3819
  switchTrack: {
@@ -3856,7 +3882,10 @@ var UserManager = defineComponent5({
3856
3882
  const deleting = ref4(false);
3857
3883
  const groups = ref4([]);
3858
3884
  const roles = ref4([]);
3859
- const optionsLoading = ref4(false);
3885
+ const rolesLoading = ref4(false);
3886
+ const groupsOpen = ref4(false);
3887
+ const groupsLoading = ref4(false);
3888
+ const groupsLoaded = ref4(false);
3860
3889
  function enabledParam() {
3861
3890
  if (enabledFilter.value === "all") return void 0;
3862
3891
  return enabledFilter.value === "true";
@@ -3884,19 +3913,26 @@ var UserManager = defineComponent5({
3884
3913
  loading.value = false;
3885
3914
  }
3886
3915
  }
3887
- async function loadOptions() {
3888
- optionsLoading.value = true;
3916
+ async function loadRoles() {
3917
+ rolesLoading.value = true;
3889
3918
  try {
3890
- const [groupList, roleList] = await Promise.all([
3891
- props.api.listGroups(),
3892
- props.api.listRoleOptions()
3893
- ]);
3894
- groups.value = groupList;
3895
- roles.value = roleList;
3919
+ roles.value = await props.api.listRoleOptions();
3920
+ } catch (err) {
3921
+ formError.value = err instanceof Error ? err.message : "\u52A0\u8F7D\u89D2\u8272\u5931\u8D25";
3922
+ } finally {
3923
+ rolesLoading.value = false;
3924
+ }
3925
+ }
3926
+ async function loadGroups() {
3927
+ if (groupsLoaded.value || groupsLoading.value) return;
3928
+ groupsLoading.value = true;
3929
+ try {
3930
+ groups.value = await props.api.listGroups();
3931
+ groupsLoaded.value = true;
3896
3932
  } catch (err) {
3897
- formError.value = err instanceof Error ? err.message : "\u52A0\u8F7D\u90E8\u95E8/\u89D2\u8272\u5931\u8D25";
3933
+ formError.value = err instanceof Error ? err.message : "\u52A0\u8F7D\u90E8\u95E8\u5931\u8D25";
3898
3934
  } finally {
3899
- optionsLoading.value = false;
3935
+ groupsLoading.value = false;
3900
3936
  }
3901
3937
  }
3902
3938
  function handleSearch() {
@@ -3909,12 +3945,18 @@ var UserManager = defineComponent5({
3909
3945
  enabledFilter.value = "all";
3910
3946
  pageToken.value = "";
3911
3947
  }
3948
+ function resetGroupPanel() {
3949
+ groupsOpen.value = false;
3950
+ groups.value = [];
3951
+ groupsLoaded.value = false;
3952
+ }
3912
3953
  function openCreate() {
3913
3954
  editing.value = null;
3914
3955
  Object.assign(form, emptyForm4());
3915
3956
  formError.value = "";
3957
+ resetGroupPanel();
3916
3958
  dialogOpen.value = true;
3917
- void loadOptions();
3959
+ void loadRoles();
3918
3960
  }
3919
3961
  function openEdit(row) {
3920
3962
  editing.value = row;
@@ -3927,12 +3969,17 @@ var UserManager = defineComponent5({
3927
3969
  enabled: row.enabled
3928
3970
  });
3929
3971
  formError.value = "";
3972
+ resetGroupPanel();
3930
3973
  dialogOpen.value = true;
3931
- void loadOptions();
3974
+ void loadRoles();
3932
3975
  }
3933
3976
  function closeDialog() {
3934
3977
  if (!saving.value) dialogOpen.value = false;
3935
3978
  }
3979
+ function toggleGroupsPanel() {
3980
+ groupsOpen.value = !groupsOpen.value;
3981
+ if (groupsOpen.value) void loadGroups();
3982
+ }
3936
3983
  function toggleId(field, id) {
3937
3984
  const exists = form[field].includes(id);
3938
3985
  form[field] = exists ? form[field].filter((x) => x !== id) : [...form[field], id];
@@ -3952,6 +3999,10 @@ var UserManager = defineComponent5({
3952
3999
  formError.value = "\u8BF7\u586B\u5199\u521D\u59CB\u5BC6\u7801";
3953
4000
  return;
3954
4001
  }
4002
+ if (!form.groupIds.length) {
4003
+ formError.value = "\u8BF7\u9009\u62E9\u5F52\u5C5E\u90E8\u95E8";
4004
+ return;
4005
+ }
3955
4006
  saving.value = true;
3956
4007
  formError.value = "";
3957
4008
  error.value = "";
@@ -3992,8 +4043,7 @@ var UserManager = defineComponent5({
3992
4043
  function groupLabel(row) {
3993
4044
  if (row.groupNames?.length) return row.groupNames.join("\u3001");
3994
4045
  if (!row.groupIds.length) return "\u2014";
3995
- const map = new Map(groups.value.map((g) => [g.groupId, g.name]));
3996
- return row.groupIds.map((id) => map.get(id) || id).join("\u3001");
4046
+ return row.groupIds.join("\u3001");
3997
4047
  }
3998
4048
  function roleLabel(row) {
3999
4049
  if (row.roleNames?.length) return row.roleNames.join("\u3001");
@@ -4001,16 +4051,28 @@ var UserManager = defineComponent5({
4001
4051
  const map = new Map(roles.value.map((r) => [r.roleId, r.name]));
4002
4052
  return row.roleIds.map((id) => map.get(id) || id).join("\u3001");
4003
4053
  }
4054
+ function selectedGroupSummary() {
4055
+ if (!form.groupIds.length) return "\u8BF7\u9009\u62E9\u5F52\u5C5E\u90E8\u95E8";
4056
+ if (groupsLoaded.value) {
4057
+ const map = new Map(groups.value.map((g) => [g.groupId, g.name]));
4058
+ return form.groupIds.map((id) => map.get(id) || id).join("\u3001");
4059
+ }
4060
+ if (editing.value?.groupNames?.length) {
4061
+ const map = new Map(
4062
+ editing.value.groupIds.map((id, i) => [
4063
+ id,
4064
+ editing.value?.groupNames?.[i] || id
4065
+ ])
4066
+ );
4067
+ return form.groupIds.map((id) => map.get(id) || id).join("\u3001");
4068
+ }
4069
+ return `\u5DF2\u9009 ${form.groupIds.length} \u4E2A\u90E8\u95E8`;
4070
+ }
4004
4071
  onMounted4(() => {
4005
4072
  void loadList("current", "");
4006
4073
  void (async () => {
4007
4074
  try {
4008
- const [groupList, roleList] = await Promise.all([
4009
- props.api.listGroups(),
4010
- props.api.listRoleOptions()
4011
- ]);
4012
- groups.value = groupList;
4013
- roles.value = roleList;
4075
+ roles.value = await props.api.listRoleOptions();
4014
4076
  } catch {
4015
4077
  }
4016
4078
  })();
@@ -4262,9 +4324,34 @@ var UserManager = defineComponent5({
4262
4324
  })
4263
4325
  ]),
4264
4326
  h4("fieldset", { style: s4.fieldset }, [
4265
- h4("legend", { style: s4.label }, "\u5F52\u5C5E\u90E8\u95E8"),
4266
- h4("div", { style: s4.multiSelect }, [
4267
- optionsLoading.value ? h4("div", { style: s4.hint }, "\u52A0\u8F7D\u4E2D\u2026") : groups.value.length === 0 ? h4("div", { style: s4.hint }, "\u6682\u65E0\u90E8\u95E8\u6570\u636E") : groups.value.map(
4327
+ h4("legend", { style: s4.label }, [
4328
+ "\u5F52\u5C5E\u90E8\u95E8 ",
4329
+ h4("span", { style: s4.required }, "*")
4330
+ ]),
4331
+ h4(
4332
+ "button",
4333
+ {
4334
+ type: "button",
4335
+ style: s4.selectTrigger,
4336
+ "aria-expanded": groupsOpen.value,
4337
+ onClick: toggleGroupsPanel
4338
+ },
4339
+ [
4340
+ h4("span", {
4341
+ style: {
4342
+ ...s4.selectTriggerText,
4343
+ ...form.groupIds.length ? {} : s4.selectPlaceholder
4344
+ }
4345
+ }, selectedGroupSummary()),
4346
+ h4(
4347
+ "span",
4348
+ { style: s4.selectChevron },
4349
+ groupsOpen.value ? "\u25B2" : "\u25BC"
4350
+ )
4351
+ ]
4352
+ ),
4353
+ groupsOpen.value ? h4("div", { style: s4.multiSelect }, [
4354
+ groupsLoading.value ? h4("div", { style: s4.hint }, "\u52A0\u8F7D\u4E2D\u2026") : groups.value.length === 0 ? h4("div", { style: s4.hint }, "\u6682\u65E0\u90E8\u95E8\u6570\u636E") : groups.value.map(
4268
4355
  (g) => h4(
4269
4356
  "label",
4270
4357
  {
@@ -4284,12 +4371,12 @@ var UserManager = defineComponent5({
4284
4371
  ]
4285
4372
  )
4286
4373
  )
4287
- ])
4374
+ ]) : null
4288
4375
  ]),
4289
4376
  h4("fieldset", { style: s4.fieldset }, [
4290
4377
  h4("legend", { style: s4.label }, "\u7528\u6237\u89D2\u8272"),
4291
4378
  h4("div", { style: s4.multiSelect }, [
4292
- optionsLoading.value ? h4("div", { style: s4.hint }, "\u52A0\u8F7D\u4E2D\u2026") : roles.value.length === 0 ? h4("div", { style: s4.hint }, "\u6682\u65E0\u89D2\u8272\u6570\u636E") : roles.value.map(
4379
+ rolesLoading.value ? h4("div", { style: s4.hint }, "\u52A0\u8F7D\u4E2D\u2026") : roles.value.length === 0 ? h4("div", { style: s4.hint }, "\u6682\u65E0\u89D2\u8272\u6570\u636E") : roles.value.map(
4293
4380
  (r) => h4(
4294
4381
  "label",
4295
4382
  {
@@ -4431,10 +4518,10 @@ var SYSTEM_ADMIN_MENU = {
4431
4518
  key: "system",
4432
4519
  label: "\u7CFB\u7EDF\u7BA1\u7406",
4433
4520
  children: [
4434
- { key: "menu", label: "\u83DC\u5355\u7BA1\u7406" },
4435
- { key: "resource", label: "\u6743\u9650\u70B9\u7BA1\u7406" },
4521
+ { key: "user", label: "\u7528\u6237\u7BA1\u7406" },
4436
4522
  { key: "role", label: "\u89D2\u8272\u7BA1\u7406" },
4437
- { key: "user", label: "\u7528\u6237\u7BA1\u7406" }
4523
+ { key: "menu", label: "\u83DC\u5355\u7BA1\u7406" },
4524
+ { key: "resource", label: "\u6743\u9650\u70B9\u7BA1\u7406" }
4438
4525
  ]
4439
4526
  };
4440
4527
  var SYSTEM_ADMIN_DEFAULT_KEY = "menu";