ow
This commit is contained in:
1 parent
23d14ba54c
commit
dcc112c076
17 files changed
+636
-31
No files matched your search
@@ -21,6 +21,7 @@ import { SecurityActorData } from "@/data/auto/securityActorData";
|
||||
import { SecurityActorGroupViewEntity } from "@/data/auto/securityActorGroupViewEntity";
|
||||
import { SecurityUserActorViewEntity } from "@/data/auto/securityUserActorViewEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityActorService from "@/service/security/securityActorService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -135,7 +136,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityActorService.Delete(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -151,7 +152,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -163,7 +164,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
// 组别选择:跳 group-enquiry(多选),回传后按 GroupName 去重合并
|
||||
|
||||
@@ -20,6 +20,7 @@ import { useAdminPick, useAuthGuard } from "@/composables";
|
||||
import { SecurityFunctionData } from "@/data/auto/securityFunctionData";
|
||||
import { SecurityFunctionMapViewEntity } from "@/data/auto/securityFunctionMapViewEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityFunctionService from "@/service/security/securityFunctionService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -148,7 +149,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityFunctionService.Delete(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -164,7 +165,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -176,7 +177,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
// 权限名称:单选 permission-enquiry,回传写进 FunctionName 之外不影响
|
||||
|
||||
@@ -16,6 +16,7 @@ import { computed, ref } from "vue";
|
||||
import { useAuthGuard } from "@/composables";
|
||||
import { SecurityGeneratorNumberEntity } from "@/data/auto/securityGeneratorNumberEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityGeneratorNumberService from "@/service/security/securityGeneratorNumberService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -120,7 +121,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
|
||||
@@ -22,6 +22,7 @@ import { SecurityGroupData } from "@/data/auto/securityGroupData";
|
||||
import { SecurityGroupPermissionDependentViewDisplayData } from "@/data/auto/securityGroupPermissionDependentViewDisplayData";
|
||||
import { SecurityGroupPermissionViewDisplayData } from "@/data/auto/securityGroupPermissionViewDisplayData";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityGroupService from "@/service/security/securityGroupService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -130,7 +131,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityGroupService.Delete(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -146,7 +147,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -158,7 +159,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
// 权限勾选:四个 boolean 直接落在 DisplayData 上(与旧 GroupPermissionActions 一致)
|
||||
|
||||
@@ -17,6 +17,7 @@ import { useAuthGuard } from "@/composables";
|
||||
import { SecurityHelpFeatureData } from "@/data/auto/securityHelpFeatureData";
|
||||
import { SecurityHelpFeatureEntity } from "@/data/auto/securityHelpFeatureEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityHelpFunctionService from "@/service/security/securityHelpFunctionService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -123,7 +124,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityHelpFunctionService.DeleteByGroupCode(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -139,7 +140,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -151,7 +152,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
function addFeature(): void {
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
* 删除走 DeleteByFunctionName;新建默认 EnabledIndc='Y'。
|
||||
*/
|
||||
import type { AdminFormAction, AdminFormField, AdminFormSection } from "@/admin/admin-types";
|
||||
import type { HelpFeatureVM, HelpStepVM } from "@/admin/help-preview-types";
|
||||
import type { SecurityHelpFeatureEntity } from "@/data/auto/securityHelpFeatureEntity";
|
||||
import type { SecurityHelpFeatureGroupEntity } from "@/data/auto/securityHelpFeatureGroupEntity";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { useLocale } from "uview-pro";
|
||||
@@ -22,6 +24,7 @@ import { SecurityHelpFunctionData } from "@/data/auto/securityHelpFunctionData";
|
||||
import { SecurityHelpFunctionFeatureEntity } from "@/data/auto/securityHelpFunctionFeatureEntity";
|
||||
import { SecurityHelpStepEntity } from "@/data/auto/securityHelpStepEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityHelpFunctionService from "@/service/security/securityHelpFunctionService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -37,6 +40,14 @@ const isNew = computed(() => !String(helpFunction.value.CreatedBy ?? "").trim())
|
||||
/** 组表:把功能点上的「组主键」翻译成「组编码」 */
|
||||
const groups = ref<SecurityHelpFeatureGroupEntity[]>([]);
|
||||
|
||||
/** 全部功能点明细(FindAll 带回),预览时按组主键展开成「功能点与图标说明」 */
|
||||
const allFeatures = ref<SecurityHelpFeatureEntity[]>([]);
|
||||
|
||||
/** 预览弹窗状态:openPreview 时按当前界面数据现拼,不额外发请求 */
|
||||
const previewVisible = ref(false);
|
||||
const previewSteps = ref<HelpStepVM[]>([]);
|
||||
const previewFeatures = ref<HelpFeatureVM[]>([]);
|
||||
|
||||
const heroTitle = computed(() => String(helpFunction.value.FunctionName || ""));
|
||||
const heroChips = computed(() => {
|
||||
const chips: string[] = [];
|
||||
@@ -69,7 +80,8 @@ const sections = computed<AdminFormSection[]>(() => {
|
||||
});
|
||||
|
||||
const actions = computed<AdminFormAction[]>(() => {
|
||||
const list: AdminFormAction[] = [];
|
||||
// 预览:不分查看/编辑态都可点,让管理员随时看这份帮助最终长什么样
|
||||
const list: AdminFormAction[] = [{ key: "preview", label: t("HelpFunctionPage.previewBut") }];
|
||||
if (perm.canAmend.value) {
|
||||
list.push({ key: "amend", label: t("AdminPage.amendBut"), when: "view" });
|
||||
}
|
||||
@@ -100,6 +112,7 @@ async function loadGroups(): Promise<void> {
|
||||
try {
|
||||
const all = await securityHelpFunctionService.FindAll();
|
||||
groups.value = all?.SecurityHelpFeatureGroups ?? [];
|
||||
allFeatures.value = all?.SecurityHelpFeatures ?? [];
|
||||
}
|
||||
catch (error) {
|
||||
console.warn(error);
|
||||
@@ -166,11 +179,14 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityHelpFunctionService.DeleteByFunctionName(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
switch (action.key) {
|
||||
case "preview":
|
||||
openPreview();
|
||||
break;
|
||||
case "amend":
|
||||
readonly.value = false;
|
||||
break;
|
||||
@@ -182,7 +198,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -194,7 +210,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
// 功能名称:新建时单选 function-enquiry 回填(旧页用 FindFunctionNameOptions 下拉,移动端退化成选择器)
|
||||
@@ -278,6 +294,37 @@ function downStep(index: number): void {
|
||||
swap(data.value.SecurityHelpSteps, index, 1);
|
||||
}
|
||||
|
||||
/** 预览:把当前界面的步骤与引用组功能点拼成最终用户看到的帮助文档,弹窗展示 */
|
||||
function openPreview(): void {
|
||||
ensureLists();
|
||||
// 步骤按界面顺序(数组序即显示序,StepNo 要到保存时才重排)
|
||||
previewSteps.value = data.value.SecurityHelpSteps.map(step => ({
|
||||
title: String(step.Title ?? ""),
|
||||
desc: String(step.Description ?? ""),
|
||||
tips: String(step.Tips ?? ""),
|
||||
icon: String(step.Icon ?? ""),
|
||||
}));
|
||||
// 功能点:每个引用组按组主键展开成组内明细,组内按 SortNo 升序
|
||||
const items: HelpFeatureVM[] = [];
|
||||
for (const link of data.value.SecurityHelpFunctionFeatures) {
|
||||
const groupId = groups.value.find(g => g.GroupCode === link.GroupCode)?.HelpFeatureGroupId;
|
||||
if (!groupId) {
|
||||
continue;
|
||||
}
|
||||
allFeatures.value
|
||||
.filter(feature => feature.HelpFeatureGroupId === groupId)
|
||||
.sort((a, b) => (a.SortNo ?? 0) - (b.SortNo ?? 0))
|
||||
.forEach(feature => items.push({
|
||||
name: String(feature.Name ?? ""),
|
||||
desc: String(feature.Description ?? ""),
|
||||
icon: String(feature.Icon ?? ""),
|
||||
color: String(feature.Color ?? ""),
|
||||
}));
|
||||
}
|
||||
previewFeatures.value = items;
|
||||
previewVisible.value = true;
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
routeId.value = String(options?.id ?? "");
|
||||
const mode = String(options?.mode ?? "view");
|
||||
@@ -436,6 +483,9 @@ useAuthGuard(() => {
|
||||
</view>
|
||||
</template>
|
||||
</admin-form>
|
||||
|
||||
<help-doc-preview :visible="previewVisible" :title="heroTitle" :intro="helpFunction.Intro" :steps="previewSteps"
|
||||
:features="previewFeatures" @close="previewVisible = false" />
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@@ -16,6 +16,7 @@ import { computed, ref } from "vue";
|
||||
import { useAuthGuard } from "@/composables";
|
||||
import { SecurityMasterEntity } from "@/data/auto/securityMasterEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityMasterService from "@/service/security/securityMasterService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -146,7 +147,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityMasterService.Delete(dataKey.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -162,7 +163,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !isValidKey()) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -174,7 +175,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
|
||||
@@ -17,6 +17,7 @@ import { useAuthGuard } from "@/composables";
|
||||
import { SecurityPermissionData } from "@/data/auto/securityPermissionData";
|
||||
import { SecurityPermissionDependentEntity } from "@/data/auto/securityPermissionDependentEntity";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityPermissionService from "@/service/security/securityPermissionService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -140,7 +141,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityPermissionService.Delete(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -156,7 +157,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -168,7 +169,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
function addDependent(): void {
|
||||
|
||||
@@ -179,7 +179,7 @@ useAuthGuard(() => {
|
||||
|
||||
<template>
|
||||
<view class="page">
|
||||
<admin-list ref="listRef" v-model:keyword="keyword" :nav-title="t('UserPage.title')" :show-nav-back="isPick"
|
||||
<admin-list ref="listRef" v-model:keyword="keyword" :nav-title="t('UserPage.title')" :show-nav-back="!isPick"
|
||||
:columns="columns" :loader="state.query" :row-key="SecurityUserEntity.USER_NAME" title-key="UserLocalName"
|
||||
:selectable="isPick ? pickTarget.multiple.value : Boolean(perm.canDelete.value)" :filter-count="filterCount"
|
||||
:filter-visible="filterVisible" :filter-items="draft" :search-token="searchToken"
|
||||
|
||||
@@ -24,6 +24,7 @@ import { useAdminPick, useAuthGuard } from "@/composables";
|
||||
import { SecurityUserActorViewEntity } from "@/data/auto/securityUserActorViewEntity";
|
||||
import { SecurityUserData } from "@/data/auto/securityUserData";
|
||||
import { usePagePermission } from "@/permission/permission-context";
|
||||
import { smartBack } from "@/router/routes";
|
||||
import securityUserService from "@/service/security/securityUserService";
|
||||
|
||||
const { t } = useLocale();
|
||||
@@ -142,7 +143,7 @@ async function onSave(): Promise<void> {
|
||||
async function onDelete(): Promise<void> {
|
||||
await securityUserService.Delete(routeId.value);
|
||||
uni.showToast({ title: t("AdminPage.deletedTip"), icon: "none" });
|
||||
setTimeout(() => uni.navigateBack(), 600);
|
||||
setTimeout(() => smartBack("mineTab"), 600);
|
||||
}
|
||||
|
||||
function onAction(action: AdminFormAction): void {
|
||||
@@ -158,7 +159,7 @@ function onAction(action: AdminFormAction): void {
|
||||
break;
|
||||
case "cancel":
|
||||
if (isNew.value || !routeId.value) {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
return;
|
||||
}
|
||||
readonly.value = true;
|
||||
@@ -170,7 +171,7 @@ function onAction(action: AdminFormAction): void {
|
||||
}
|
||||
|
||||
function onBack(): void {
|
||||
uni.navigateBack();
|
||||
smartBack("mineTab");
|
||||
}
|
||||
|
||||
// 角色选择:跳 actor-enquiry(可多选),回传后按 ActorName 去重合并
|
||||
|
||||
Reference in new issue
Block a user