修改页面设计
This commit is contained in:
1 parent
0dd4ec814b
commit
7f5bf3c68d
31 files changed
+3133
-2562
No files matched your search
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityActorEntity.ACTOR_NAME, SecurityActorEntity.ACTOR_LOCAL_NAME]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -35,13 +36,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityActorResultData } from "@/data/auto/securityActorResultData";
|
||||
|
||||
@@ -29,97 +29,128 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>角色名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit || data.SecurityActor.ActorName" v-model:value="data.SecurityActor.ActorName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit"
|
||||
v-model:value="data.SecurityActor.ActorLocalName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>英文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityActor.ActorEngName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<TeamOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.SecurityActor.ActorLocalName || "未填写角色名称" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">
|
||||
编号 {{ data.SecurityActor.ActorName || "-" }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 角色信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">角色信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">
|
||||
角色名称<span class="ft-required">*</span>
|
||||
</div>
|
||||
<a-input size="large" required placeholder="请输入角色名称"
|
||||
:readonly="!isEdit || !!data.SecurityActor.ActorName"
|
||||
v-model:value="data.SecurityActor.ActorName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">
|
||||
中文名称<span class="ft-required">*</span>
|
||||
</div>
|
||||
<a-input size="large" required placeholder="请输入中文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityActor.ActorLocalName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">英文名称</div>
|
||||
<a-input size="large" placeholder="请输入英文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityActor.ActorEngName" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a-divider orientation="left" orientation-margin="0px" dashed style="background-color: silver">
|
||||
|
||||
</a-divider>
|
||||
<a-collapse v-model:activeKey="activeKey">
|
||||
<a-collapse-panel key="1" header="组别明细">
|
||||
<a-table bordered :data-source="data.SecurityActorGroups" :columns="securityGroups"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityActorGroupViewEntity.GROUP_NAME && !isEdit">
|
||||
<span style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="onViewGroupOperation(datas.record.GroupName)"> {{ datas.record.GroupName
|
||||
}}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteGroup(datas.record.GroupName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addGroup" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="用户明细">
|
||||
<a-table bordered :data-source="data.SecurityUserActors" :columns="securityUsers"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityUserDisplayData.USER_NAME && !isEdit">
|
||||
<span style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="onViewUserOperation(datas.record.UserName)"> {{ datas.record.UserName
|
||||
}}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteUser(datas.record.UserName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addUser" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
<!-- 明细 -->
|
||||
<div class="ft-card">
|
||||
<a-collapse v-model:activeKey="activeKey" class="ft-collapse">
|
||||
<a-collapse-panel key="1" header="组别明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityActorGroups"
|
||||
:key="record.GroupName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span v-if="!isEdit" class="ft-item-name ft-item-link"
|
||||
@click="onViewGroupOperation(record.GroupName)">
|
||||
{{ record.GroupName || "未命名组别" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-name">
|
||||
{{ record.GroupName || "未命名组别" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteGroup(record.GroupName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">中文名称</span>
|
||||
<span class="ft-item-text">{{ record.GroupLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityActorGroups || !data.SecurityActorGroups.length"
|
||||
class="ft-empty">
|
||||
暂无组别明细
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block @click="addGroup">
|
||||
<PlusSquareTwoTone /> 新增组别
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="用户明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityUserActors"
|
||||
:key="record.UserName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span v-if="!isEdit" class="ft-item-name ft-item-link"
|
||||
@click="onViewUserOperation(record.UserName)">
|
||||
{{ record.UserName || "未命名用户" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-name">
|
||||
{{ record.UserName || "未命名用户" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteUser(record.UserName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">中文名称</span>
|
||||
<span class="ft-item-text">{{ record.UserLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityUserActors || !data.SecurityUserActors.length"
|
||||
class="ft-empty">
|
||||
暂无用户明细
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block @click="addUser">
|
||||
<PlusSquareTwoTone /> 新增用户
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -155,15 +186,15 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalActor" width="80%" title="角色查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalActor" title="角色查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelect">
|
||||
<ActorEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></ActorEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalUser" width="80%" title="用户查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalUser" title="用户查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelectUser">
|
||||
<UserEnquiry ref="userEnquiry" @on-row-dblclick="handleSelectUser"></UserEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalGroup" width="80%" title="组别查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalGroup" title="组别查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelectGroup">
|
||||
<GroupEnquiry ref="groupEnquiry" @on-row-dblclick="handleSelectGroup"></GroupEnquiry>
|
||||
</dragModal>
|
||||
@@ -173,7 +204,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, TeamOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import UserEnquiry from "./UserEnquiry.vue";
|
||||
@@ -560,6 +591,9 @@ const onViewUserOperation = ((userName: string) => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityFunctionDisplayData.FUNCTION_NAME, SecurityFunctionDisplayData.FUNCTION_LOCAL_NAME]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -34,13 +35,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityFunctionResultData } from "@/data/auto/securityFunctionResultData";
|
||||
|
||||
@@ -29,173 +29,154 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>功能名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit || data.SecurityFunction.FunctionName"
|
||||
v-model:value="data.SecurityFunction.FunctionName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.FunctionLocalName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>英文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityFunction.FunctionEngName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>图标:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<IconsSelect :disabled="!isEdit" v-model:value="data.SecurityFunction.Icon">
|
||||
</IconsSelect>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>菜单项?</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-select v-model:value="data.SecurityFunction.FunctionIndc" :disabled="!isEdit"
|
||||
@change="onFunctionIndcChange" style="width: 100%;min-width:124px;">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>权限名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input-search :disabled="!isEdit" v-model:value="data.SecurityFunction.PermissionName"
|
||||
@search="onModalPermission" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>页面路由:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityFunction.PageUrl"
|
||||
flex="auto" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>Api路由:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityFunction.ApiRoute"
|
||||
flex="auto" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>页面名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityFunction.PageName"
|
||||
flex="auto" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<AppstoreOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.SecurityFunction.FunctionLocalName || "未填写功能名称" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">编号 {{ data.SecurityFunction.FunctionName || "-" }}</span>
|
||||
<span v-if="data.SecurityFunction.FunctionIndc == 'Y'" class="ft-chip">菜单项</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<!-- 功能信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">功能信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">功能名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" required placeholder="请输入功能名称"
|
||||
:readonly="!isEdit || !!data.SecurityFunction.FunctionName"
|
||||
v-model:value="data.SecurityFunction.FunctionName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">中文名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" required placeholder="请输入中文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.FunctionLocalName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">英文名称</div>
|
||||
<a-input size="large" placeholder="请输入英文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.FunctionEngName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">图标</div>
|
||||
<IconsSelect :disabled="!isEdit" v-model:value="data.SecurityFunction.Icon" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">菜单项?</div>
|
||||
<a-select size="large" style="width: 100%" placeholder="请选择"
|
||||
v-model:value="data.SecurityFunction.FunctionIndc" :disabled="!isEdit"
|
||||
@change="onFunctionIndcChange">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">权限名称</div>
|
||||
<a-input-search size="large" placeholder="请输入权限名称" :disabled="!isEdit"
|
||||
v-model:value="data.SecurityFunction.PermissionName" @search="onModalPermission" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">页面路由</div>
|
||||
<a-input size="large" placeholder="请输入页面路由" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.PageUrl" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">Api路由</div>
|
||||
<a-input size="large" placeholder="请输入Api路由" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.ApiRoute" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">页面名称</div>
|
||||
<a-input size="large" placeholder="请输入页面名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityFunction.PageName" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider orientation="left" orientation-margin="0px" dashed style="background-color: silver">
|
||||
|
||||
</a-divider>
|
||||
<a-collapse v-model:activeKey="activeKey">
|
||||
<a-collapse-panel key="1" header="上级目录">
|
||||
<a-table bordered :data-source="data.SecurityFunctionMapParents" :columns="columnParents"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteParent(datas.record.ParentFunctionName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra
|
||||
v-if="isEdit && (!data.SecurityFunctionMapParents || data.SecurityFunctionMapParents.length == 0)">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addParent" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="下级菜单">
|
||||
<a-table bordered :data-source="data.SecurityFunctionMapSons" :columns="columnSons"
|
||||
:row-class-name="rowSonClassName" :pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<UpSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }"
|
||||
@click="upSon(datas.index)" />
|
||||
<DownSquareTwoTone
|
||||
:style="{ fontSize: '24px', color: '#08c', marginLeft: '20px', marginRight: '20px' }"
|
||||
@click="downSon(datas.index)" />
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteSon(datas.record.SonFunctionName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit && data.SecurityFunction.FunctionIndc == 'N'">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addSon" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
<!-- 明细 -->
|
||||
<div class="ft-card">
|
||||
<a-collapse v-model:activeKey="activeKey" class="ft-collapse">
|
||||
<a-collapse-panel key="1" header="上级目录">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityFunctionMapParents"
|
||||
:key="record.ParentFunctionName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span class="ft-item-name">
|
||||
{{ record.ParentFunctionName || "未命名目录" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteParent(record.ParentFunctionName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">中文名称</span>
|
||||
<span class="ft-item-text">{{ record.ParentFunctionLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityFunctionMapParents || !data.SecurityFunctionMapParents.length"
|
||||
class="ft-empty">
|
||||
暂无上级目录
|
||||
</div>
|
||||
<a-button class="ft-add-btn" type="dashed" block
|
||||
v-if="isEdit && (!data.SecurityFunctionMapParents || data.SecurityFunctionMapParents.length == 0)"
|
||||
@click="addParent">
|
||||
<PlusSquareTwoTone /> 新增上级目录
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="下级菜单">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityFunctionMapSons"
|
||||
:key="record.SonFunctionName || index" class="ft-item"
|
||||
:class="{ 'ft-item-selected': index === selectedSonIndex }">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span class="ft-item-name">
|
||||
{{ record.SonFunctionName || "未命名菜单" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<UpSquareTwoTone class="ft-action" @click="upSon(index)" />
|
||||
<DownSquareTwoTone class="ft-action" @click="downSon(index)" />
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteSon(record.SonFunctionName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">中文名称</span>
|
||||
<span class="ft-item-text">{{ record.SonFunctionLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityFunctionMapSons || !data.SecurityFunctionMapSons.length"
|
||||
class="ft-empty">
|
||||
暂无下级菜单
|
||||
</div>
|
||||
<a-button class="ft-add-btn" type="dashed" block
|
||||
v-if="isEdit && data.SecurityFunction.FunctionIndc == 'N'" @click="addSon">
|
||||
<PlusSquareTwoTone /> 新增下级菜单
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -231,11 +212,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalFunction" width="80%" title="功能查询" @cancel="handleCance"
|
||||
<dragModal v-model:open="modelOption.isModalFunction" title="功能查询" @cancel="handleCance"
|
||||
:fullscreen="width < 640" :mask-closable="false" @ok="handleSelect">
|
||||
<functionEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></functionEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalPermission" width="80%" title="权限查询" @cancel="handleCance"
|
||||
<dragModal v-model:open="modelOption.isModalPermission" title="权限查询" @cancel="handleCance"
|
||||
:fullscreen="width < 640" :mask-closable="false" @ok="handleSelectPermission">
|
||||
<PermissionEnquiry ref="permissionEnquiry" @on-row-dblclick="handleSelectPermission"></PermissionEnquiry>
|
||||
</dragModal>
|
||||
@@ -245,7 +226,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, AppstoreOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import functionEnquiry from "./FunctionEnquiry.vue";
|
||||
@@ -682,6 +663,9 @@ const handleSelectPermission = (async () => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:loading="loading" :pagination="result" :rowSelectionType="selectionType" @on-row-dblclick="onRowDblclick"
|
||||
:card-title-keys="[SecurityGeneratorNumberEntity.SYSTEM_ID, SecurityGeneratorNumberEntity.SUBSYSTEM_ID]"
|
||||
@on-select-change="onSelectChange">
|
||||
<template #bodyCell="{ column, record, index }">
|
||||
<template v-if="column.dataIndex === SecurityGeneratorNumberEntity.REFRESH_PERIOD">
|
||||
@@ -49,7 +50,7 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
<generatorNumber @on-submit="onReload" />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
@@ -65,7 +66,7 @@ import {
|
||||
} from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import {
|
||||
DeleteOutlined,
|
||||
EditOutlined,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityGroupEntity.GROUP_NAME, SecurityGroupEntity.GROUP_LOCAL_NAME]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -29,13 +30,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityGroupResultData } from "@/data/auto/securityGroupResultData";
|
||||
|
||||
@@ -29,156 +29,211 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>组别名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" required :readonly="!isEdit || data.SecurityGroup.GroupName"
|
||||
v-model:value="data.SecurityGroup.GroupName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="500" required :readonly="!isEdit"
|
||||
v-model:value="data.SecurityGroup.GroupLocalName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>英文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityGroup.GroupEngName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<TeamOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.SecurityGroup.GroupLocalName || "未填写组别名称" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">编号 {{ data.SecurityGroup.GroupName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- 组别信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">组别信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">组别名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="50" required placeholder="请输入组别名称"
|
||||
:readonly="!isEdit || !!data.SecurityGroup.GroupName"
|
||||
v-model:value="data.SecurityGroup.GroupName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">中文名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="500" required placeholder="请输入中文名称"
|
||||
:readonly="!isEdit" v-model:value="data.SecurityGroup.GroupLocalName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">英文名称</div>
|
||||
<a-input size="large" :maxlength="50" placeholder="请输入英文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityGroup.GroupEngName" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a-divider orientation="left" orientation-margin="0px" dashed style="background-color: silver">
|
||||
|
||||
</a-divider>
|
||||
<a-collapse v-model:activeKey="activeKey">
|
||||
<a-collapse-panel key="1" header="权限明细">
|
||||
<a-table bordered :data-source="data.SecurityGroupPermissionViews" :columns="columnPermissions"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template v-if="datas.column.dataIndex === SecurityGroupPermissionViewEntity.DEPENDENT">
|
||||
<span v-if="isEdit" style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="addPermissionDependent(datas.record.Dependent)">{{
|
||||
datas.record.Dependent
|
||||
}}</span>
|
||||
<span v-else style="color: #000;font-size:20px;">{{
|
||||
datas.record.Dependent
|
||||
}}</span>
|
||||
</template>
|
||||
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_VIEW">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsView" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_CREATE">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsCreate" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_AMEND">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsAmend" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_DELETE">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsDelete" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.PERMISSION_NAME && !isEdit">
|
||||
<span style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="onViewPermissionOperation(datas.record.PermissionName)"> {{
|
||||
datas.record.PermissionName
|
||||
}}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deletePermission(datas.record.PermissionName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addPermission" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="扩展权限明细">
|
||||
<a-table bordered :data-source="data.SecurityGroupPermissionDependentViews"
|
||||
:columns="columnPermissionDependents" :pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_VIEW">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsView" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_CREATE">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsCreate" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_AMEND">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsAmend" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityGroupPermissionViewDisplayData.IS_DELETE">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="datas.record.IsDelete" />
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deletePermissionDependent(datas.record.DependentDetailName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="3" header="组别内的角色群">
|
||||
<a-table bordered :data-source="data.SecurityActorGroups" :columns="columnActors"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityActorGroupViewEntity.ACTOR_NAME && !isEdit">
|
||||
<span style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="onViewActorOperation(datas.record.ActorName)"> {{ datas.record.ActorName
|
||||
}}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteActor(datas.record.ActorName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addActor" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
<!-- 明细 -->
|
||||
<div class="ft-card">
|
||||
<a-collapse v-model:activeKey="activeKey" class="ft-collapse">
|
||||
<a-collapse-panel key="1" header="权限明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityGroupPermissionViews"
|
||||
:key="record.PermissionName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span v-if="!isEdit" class="ft-item-name ft-item-link"
|
||||
@click="onViewPermissionOperation(record.PermissionName)">
|
||||
{{ record.PermissionName || "未命名权限" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-name">
|
||||
{{ record.PermissionName || "未命名权限" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deletePermission(record.PermissionName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">中文名称</span>
|
||||
<span class="ft-item-text">{{ record.PermissionDescription || "-" }}</span>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">扩展名称</span>
|
||||
<span v-if="isEdit" class="ft-item-text ft-item-link"
|
||||
@click="addPermissionDependent(record.Dependent)">
|
||||
{{ record.Dependent || "-" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-text">{{ record.Dependent || "-" }}</span>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">查看</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsView" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">新增</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsCreate" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">修改</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsAmend" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">删除</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsDelete" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityGroupPermissionViews || !data.SecurityGroupPermissionViews.length"
|
||||
class="ft-empty">
|
||||
暂无权限明细
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block @click="addPermission">
|
||||
<PlusSquareTwoTone /> 新增权限
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="2" header="扩展权限明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityGroupPermissionDependentViews"
|
||||
:key="record.DependentDetailName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span class="ft-item-name">
|
||||
{{ record.DependentDetailName || "未命名扩展权限" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deletePermissionDependent(record.DependentDetailName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">扩展名称</span>
|
||||
<span class="ft-item-text">{{ record.Dependent || "-" }}</span>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">扩展子项目中文</span>
|
||||
<span class="ft-item-text">{{ record.DependentDetailDescription || "-" }}</span>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">查看</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsView" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">新增</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsCreate" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">修改</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsAmend" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">删除</span>
|
||||
<div class="ft-check">
|
||||
<a-checkbox :disabled="!isEdit" v-model:checked="record.IsDelete" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityGroupPermissionDependentViews || !data.SecurityGroupPermissionDependentViews.length"
|
||||
class="ft-empty">
|
||||
暂无扩展权限明细
|
||||
</div>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
<a-collapse-panel key="3" header="组别内的角色群">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityActorGroups"
|
||||
:key="record.ActorName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span v-if="!isEdit" class="ft-item-name ft-item-link"
|
||||
@click="onViewActorOperation(record.ActorName)">
|
||||
{{ record.ActorName || "未命名角色" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-name">
|
||||
{{ record.ActorName || "未命名角色" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteActor(record.ActorName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">角色中文名称</span>
|
||||
<span class="ft-item-text">{{ record.ActorLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityActorGroups || !data.SecurityActorGroups.length"
|
||||
class="ft-empty">
|
||||
暂无角色群
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block @click="addActor">
|
||||
<PlusSquareTwoTone /> 新增角色
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -214,22 +269,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalGroup" width="80%" title="组别查询" @cancel="handleCance"
|
||||
<dragModal v-model:open="modelOption.isModalGroup" title="组别查询" @cancel="handleCance"
|
||||
:fullscreen="width < 640" :mask-closable="false" @ok="handleSelect">
|
||||
<GroupEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></GroupEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalPermission" width="80%" title="权限查询" @cancel="handleCance"
|
||||
<dragModal v-model:open="modelOption.isModalPermission" title="权限查询" @cancel="handleCance"
|
||||
:fullscreen="width < 640" :mask-closable="false" @ok="handleSelectPermission">
|
||||
<PermissionEnquiry ref="permissionEnquiry" @on-row-dblclick="handleSelectPermission"></PermissionEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalPermissionDependent" width="80%" title="扩展权限查询"
|
||||
<dragModal v-model:open="modelOption.isModalPermissionDependent" title="扩展权限查询"
|
||||
:fullscreen="width < 640" @cancel="handleCance" :mask-closable="false"
|
||||
@ok="handleSelectPermissionDependent">
|
||||
<PermissionDependentModal ref="permissionDependentEnquiry"
|
||||
@on-row-dblclick="handleSelectPermissionDependent">
|
||||
</PermissionDependentModal>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalActor" width="80%" title="角色查询" @cancel="handleCance"
|
||||
<dragModal v-model:open="modelOption.isModalActor" title="角色查询" @cancel="handleCance"
|
||||
:fullscreen="width < 640" :mask-closable="false" @ok="handleSelectActor">
|
||||
<ActorEnquiry ref="actorEnquiry" @on-row-dblclick="handleSelectActor"></ActorEnquiry>
|
||||
</dragModal>
|
||||
@@ -239,7 +294,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, TeamOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import GroupEnquiry from "./GroupEnquiry.vue";
|
||||
@@ -817,6 +872,9 @@ const onViewPermissionOperation = ((permissionName: string) => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityMasterEntity.MASTER_CATEGORY, SecurityMasterEntity.MASTER_CODE_ITEM]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -34,13 +35,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityMasterResultData } from "@/data/auto/securityMasterResultData";
|
||||
|
||||
@@ -53,121 +53,79 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>主类别:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" required :readonly="!isEdit || data.CreatedBy.length > 0"
|
||||
v-model:value="data.MasterCategory" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>辅类别:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="500" required :readonly="!isEdit || data.CreatedBy.length > 0"
|
||||
v-model:value="data.MasterSubcategory" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>项目名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" required :readonly="!isEdit || data.CreatedBy.length > 0"
|
||||
v-model:value="data.MasterCodeItem" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>有效?</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-select v-model:value="data.ValidIndc" :disabled="!isEdit"
|
||||
style="width: 100%;min-width:124px;">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="1000" :readonly="!isEdit" v-model:value="data.LocalDescription" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>英文描述:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="1000" :readonly="!isEdit" v-model:value="data.EngDescription" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>值:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="1000" :readonly="!isEdit" v-model:value="data.Value" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>排序:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="5" :readonly="!isEdit" v-model:value="data.OrderBy" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="3" :sm="6" style="min-width: 80px;">
|
||||
<span>备注:</span>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row style="margin-top: 8px;">
|
||||
<a-col :lg="24" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="24" :sm="18" style="min-width: 300px;">
|
||||
<a-textarea :auto-size="{ minRows: 10, maxRows: 15 }" :maxlength="1000"
|
||||
:readonly="!isEdit" v-model:value="data.Remark" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<DatabaseOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.LocalDescription || data.MasterCodeItem || "未填写主档信息" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">主类别 {{ data.MasterCategory || "-" }}</span>
|
||||
<span class="ft-chip">辅类别 {{ data.MasterSubcategory || "-" }}</span>
|
||||
<span class="ft-chip">项目 {{ data.MasterCodeItem || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 主档信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">主档信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">主类别<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="50" required placeholder="请输入主类别"
|
||||
:readonly="!isEdit || data.CreatedBy.length > 0" v-model:value="data.MasterCategory" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">辅类别<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="500" required placeholder="请输入辅类别"
|
||||
:readonly="!isEdit || data.CreatedBy.length > 0"
|
||||
v-model:value="data.MasterSubcategory" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">项目名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="50" required placeholder="请输入项目名称"
|
||||
:readonly="!isEdit || data.CreatedBy.length > 0" v-model:value="data.MasterCodeItem" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">有效?</div>
|
||||
<a-select size="large" style="width: 100%" placeholder="请选择"
|
||||
v-model:value="data.ValidIndc" :disabled="!isEdit">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">中文名称</div>
|
||||
<a-input size="large" :maxlength="1000" placeholder="请输入中文名称" :readonly="!isEdit"
|
||||
v-model:value="data.LocalDescription" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">英文描述</div>
|
||||
<a-input size="large" :maxlength="1000" placeholder="请输入英文描述" :readonly="!isEdit"
|
||||
v-model:value="data.EngDescription" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">值</div>
|
||||
<a-input size="large" :maxlength="1000" placeholder="请输入值" :readonly="!isEdit"
|
||||
v-model:value="data.Value" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">排序</div>
|
||||
<a-input size="large" :maxlength="5" placeholder="请输入排序" :readonly="!isEdit"
|
||||
v-model:value="data.OrderBy" />
|
||||
</div>
|
||||
<div class="ft-field ft-field-full">
|
||||
<div class="ft-label">备注</div>
|
||||
<a-textarea :auto-size="{ minRows: 6, maxRows: 15 }" :maxlength="1000"
|
||||
placeholder="请输入备注" :readonly="!isEdit" v-model:value="data.Remark" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -203,7 +161,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalMaster" width="80%" title="主档查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalMaster" title="主档查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelect">
|
||||
<MasterEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></MasterEnquiry>
|
||||
</dragModal>
|
||||
@@ -213,7 +171,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, watch, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, DatabaseOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import MasterEnquiry from "./MasterEnquiry.vue";
|
||||
@@ -442,6 +400,9 @@ const handleSelect = (async () => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityPermissionEntity.PERMISSION_NAME, SecurityPermissionEntity.DESCRIPTION]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -29,13 +30,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityPermissionResultData } from "@/data/auto/securityPermissionResultData";
|
||||
|
||||
@@ -29,99 +29,109 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>权限名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" required :readonly="!isEdit || data.SecurityPermission.PermissionName"
|
||||
v-model:value="data.SecurityPermission.PermissionName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="500" required :readonly="!isEdit"
|
||||
v-model:value="data.SecurityPermission.Description" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>扩展名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :maxlength="50" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityPermission.Dependent" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>允许代理?</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-select v-model:value="data.SecurityPermission.DelegateIndc" :disabled="!isEdit"
|
||||
style="width: 100%;min-width:124px;">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<SafetyCertificateOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.SecurityPermission.Description || "未填写权限名称" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">编号 {{ data.SecurityPermission.PermissionName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a-divider orientation="left" orientation-margin="0px" dashed style="background-color: silver">
|
||||
<!-- 权限信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">权限信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">权限名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="50" required placeholder="请输入权限名称"
|
||||
:readonly="!isEdit || !!data.SecurityPermission.PermissionName"
|
||||
v-model:value="data.SecurityPermission.PermissionName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">中文名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" :maxlength="500" required placeholder="请输入中文名称"
|
||||
:readonly="!isEdit" v-model:value="data.SecurityPermission.Description" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">扩展名称</div>
|
||||
<a-input size="large" :maxlength="50" placeholder="请输入扩展名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityPermission.Dependent" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">允许代理?</div>
|
||||
<a-select size="large" style="width: 100%" placeholder="请选择"
|
||||
v-model:value="data.SecurityPermission.DelegateIndc" :disabled="!isEdit">
|
||||
<a-select-option v-for="o in yesNoPolicy" :value="o.BindValue">{{
|
||||
o.DisplayName }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-divider>
|
||||
<a-collapse v-model:activeKey="activeKey">
|
||||
<a-collapse-panel key="1" header="扩展权限明细">
|
||||
<a-table bordered :data-source="data.SecurityPermissionDependents" :columns="columnDependents"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityPermissionDependentEntity.DEPENDENT_DETAIL_NAME && isEdit">
|
||||
<a-input :maxlength="50" required
|
||||
v-model:value="datas.record.DependentDetailName" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityPermissionDependentEntity.DEPENDENT_DETAIL_NAME && !isEdit">
|
||||
{{ datas.record.DependentDetailName }}
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityPermissionDependentEntity.DEPENDENT_DETAIL_DESCRIPTION && isEdit">
|
||||
<a-input :maxlength="500" required
|
||||
v-model:value="datas.record.DependentDetailDescription" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityPermissionDependentEntity.DEPENDENT_DETAIL_DESCRIPTION && !isEdit">
|
||||
{{ datas.record.DependentDetailDescription }}
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteDependent(datas.record.DependentDetailName)" />
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addDependent" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
<!-- 明细 -->
|
||||
<div class="ft-card">
|
||||
<a-collapse v-model:activeKey="activeKey" class="ft-collapse">
|
||||
<a-collapse-panel key="1" header="扩展权限明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityPermissionDependents"
|
||||
:key="record.DependentDetailName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span class="ft-item-name">
|
||||
{{ record.DependentDetailName || "未命名扩展权限" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteDependent(record.DependentDetailName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">
|
||||
扩展名称<span v-if="isEdit" class="ft-required">*</span>
|
||||
</span>
|
||||
<a-input v-if="isEdit" size="large" :maxlength="50" required
|
||||
placeholder="请输入扩展名称"
|
||||
v-model:value="record.DependentDetailName" />
|
||||
<span v-else class="ft-item-text">
|
||||
{{ record.DependentDetailName || "-" }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">
|
||||
中文名称<span v-if="isEdit" class="ft-required">*</span>
|
||||
</span>
|
||||
<a-input v-if="isEdit" size="large" :maxlength="500" required
|
||||
placeholder="请输入中文名称"
|
||||
v-model:value="record.DependentDetailDescription" />
|
||||
<span v-else class="ft-item-text">
|
||||
{{ record.DependentDetailDescription || "-" }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityPermissionDependents || !data.SecurityPermissionDependents.length"
|
||||
class="ft-empty">
|
||||
暂无扩展权限明细
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block
|
||||
@click="addDependent">
|
||||
<PlusSquareTwoTone /> 新增扩展权限
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -157,7 +167,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalPermission" width="80%" title="权限查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalPermission" title="权限查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelect">
|
||||
<PermissionEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></PermissionEnquiry>
|
||||
</dragModal>
|
||||
@@ -167,7 +177,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, SafetyCertificateOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import PermissionEnquiry from "./PermissionEnquiry.vue";
|
||||
@@ -436,6 +446,9 @@ const handleSelect = (async () => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<search @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
<search-card @on-submit="onSubmit" @on-print="onPrint" @on-reset="onReset" @use-pagination="onPagination"
|
||||
:is-modal="isModal" :loading="loading" :pagination="result" :rowSelectionType="selectionType"
|
||||
:card-title-keys="[SecurityUserEntity.USER_NAME, SecurityUserEntity.USER_LOCAL_NAME]"
|
||||
@on-row-dblclick="onRowDblclick" @on-select-change="onSelectChange">
|
||||
<template #control>
|
||||
<a-button type="primary" v-if="canCreate && !isModal" :icon="h(FileAddOutlined)"
|
||||
@@ -35,13 +36,13 @@
|
||||
</a-row>
|
||||
</div>
|
||||
</template>
|
||||
</search>
|
||||
</search-card>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, inject, defineComponent, onMounted, ref, unref, provide, h } from "vue";
|
||||
import { BindOption } from "@/data/custom/bindOption";
|
||||
import { SelectOption } from "@/data/auto/selectOption";
|
||||
import search from "@/components/basic/Search.vue";
|
||||
import searchCard from "@/components/basic/SearchCard.vue";
|
||||
import { DeleteOutlined, EditOutlined, FileAddOutlined, FileTextOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { SecurityUserResultData } from "@/data/auto/securityUserResultData";
|
||||
|
||||
@@ -29,93 +29,95 @@
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
<div class="page-main" :style="{ height: resultH }">
|
||||
<a-row :gutter="[16, 8]">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>用户名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit || data.SecurityUser.UserName" v-model:value="data.SecurityUser.UserName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>中文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input required :readonly="!isEdit" v-model:value="data.SecurityUser.UserLocalName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>英文名称:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityUser.UserEngName" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>手机:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityUser.UserMobile" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="[16, 8]" style="margin-top: 8px;">
|
||||
<a-col :lg="8" :sm="24">
|
||||
<a-row :wrap="false" align="middle">
|
||||
<a-col :lg="6" :sm="6" style="min-width: 80px;">
|
||||
<span>登录密码:</span>
|
||||
</a-col>
|
||||
<a-col :lg="18" :sm="18" style="min-width: 300px;">
|
||||
<a-input :readonly="!isEdit" v-model:value="data.SecurityUser.OrgUserPassword" />
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-col>
|
||||
<a-col :lg="{ span: 8, offset: 2 }" :sm="24">
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider orientation="left" orientation-margin="0px" dashed style="background-color: silver">
|
||||
<div class="page-main ft-page" :class="{ 'ft-readonly': !isEdit }" :style="{ height: resultH }">
|
||||
<!-- 顶部信息卡 -->
|
||||
<div class="ft-hero">
|
||||
<div class="ft-hero-icon">
|
||||
<UserOutlined />
|
||||
</div>
|
||||
<div class="ft-hero-main">
|
||||
<div class="ft-hero-name">
|
||||
{{ data.SecurityUser.UserLocalName || "未填写用户名称" }}
|
||||
</div>
|
||||
<div class="ft-hero-meta">
|
||||
<span class="ft-chip">账号 {{ data.SecurityUser.UserName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</a-divider>
|
||||
<a-collapse v-model:activeKey="activeKey">
|
||||
<a-collapse-panel key="1" header="角色明细">
|
||||
<a-table bordered :data-source="data.SecurityUserActors" :columns="columnActors"
|
||||
:pagination="false" :scroll="{ x: 520, y: 600 }">
|
||||
<template #bodyCell="datas">
|
||||
<template v-if="datas.column.dataIndex === 'index'">
|
||||
<span>{{ datas.index + 1 }}</span>
|
||||
</template>
|
||||
<template v-else-if="datas.column.dataIndex === 'operation' && isEdit">
|
||||
<DeleteOutlined :style="{ fontSize: '24px', color: 'red' }"
|
||||
@click="deleteActor(datas.record.ActorName)" />
|
||||
</template>
|
||||
<template
|
||||
v-else-if="datas.column.dataIndex === SecurityUserActorViewEntity.ACTOR_NAME && !isEdit">
|
||||
<span style="color: blue;font-size:18px;cursor: pointer;"
|
||||
@click="onViewActorOperation(datas.record.ActorName)"> {{ datas.record.ActorName
|
||||
}}</span>
|
||||
</template>
|
||||
</template>
|
||||
</a-table>
|
||||
<template #extra v-if="isEdit">
|
||||
<PlusSquareTwoTone :style="{ fontSize: '24px', color: '#08c' }" @click="addActor" />
|
||||
</template>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
<!-- 用户信息 -->
|
||||
<div class="ft-card">
|
||||
<div class="ft-card-title">用户信息</div>
|
||||
<div class="ft-grid">
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">用户名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" required placeholder="请输入用户名称"
|
||||
:readonly="!isEdit || !!data.SecurityUser.UserName"
|
||||
v-model:value="data.SecurityUser.UserName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">中文名称<span class="ft-required">*</span></div>
|
||||
<a-input size="large" required placeholder="请输入中文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityUser.UserLocalName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">英文名称</div>
|
||||
<a-input size="large" placeholder="请输入英文名称" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityUser.UserEngName" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">手机</div>
|
||||
<a-input size="large" placeholder="请输入手机号码" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityUser.UserMobile" />
|
||||
</div>
|
||||
<div class="ft-field">
|
||||
<div class="ft-label">登录密码</div>
|
||||
<a-input size="large" placeholder="请输入登录密码" :readonly="!isEdit"
|
||||
v-model:value="data.SecurityUser.OrgUserPassword" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 明细 -->
|
||||
<div class="ft-card">
|
||||
<a-collapse v-model:activeKey="activeKey" class="ft-collapse">
|
||||
<a-collapse-panel key="1" header="角色明细">
|
||||
<div class="ft-list">
|
||||
<div v-for="(record, index) in data.SecurityUserActors"
|
||||
:key="record.ActorName || index" class="ft-item">
|
||||
<div class="ft-item-head">
|
||||
<span class="ft-item-index">{{ index + 1 }}</span>
|
||||
<div class="ft-item-title">
|
||||
<span v-if="!isEdit" class="ft-item-name ft-item-link"
|
||||
@click="onViewActorOperation(record.ActorName)">
|
||||
{{ record.ActorName || "未命名角色" }}
|
||||
</span>
|
||||
<span v-else class="ft-item-name">
|
||||
{{ record.ActorName || "未命名角色" }}
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="isEdit" class="ft-item-actions">
|
||||
<DeleteOutlined class="ft-action ft-action-delete"
|
||||
@click="deleteActor(record.ActorName)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="ft-item-body">
|
||||
<div class="ft-item-field">
|
||||
<span class="ft-item-label">角色中文名称</span>
|
||||
<span class="ft-item-text">{{ record.ActorLocalName || "-" }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!data.SecurityUserActors || !data.SecurityUserActors.length" class="ft-empty">
|
||||
暂无角色明细
|
||||
</div>
|
||||
<a-button v-if="isEdit" class="ft-add-btn" type="dashed" block @click="addActor">
|
||||
<PlusSquareTwoTone /> 新增角色
|
||||
</a-button>
|
||||
</div>
|
||||
</a-collapse-panel>
|
||||
</a-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-footer">
|
||||
<div style="">
|
||||
@@ -151,11 +153,11 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<dragModal v-model:open="modelOption.isModalUser" width="80%" title="用户查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalUser" title="用户查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelect">
|
||||
<UserEnquiry ref="enquiry" @on-row-dblclick="handleSelect"></UserEnquiry>
|
||||
</dragModal>
|
||||
<dragModal v-model:open="modelOption.isModalActor" width="80%" title="角色查询" :mask-closable="false"
|
||||
<dragModal v-model:open="modelOption.isModalActor" title="角色查询" :mask-closable="false"
|
||||
:fullscreen="width < 640" @ok="handleSelectActor">
|
||||
<ActorEnquiry ref="actorEnquiry" @on-row-dblclick="handleSelectActor"></ActorEnquiry>
|
||||
</dragModal>
|
||||
@@ -165,7 +167,7 @@
|
||||
import { ref, unref, onBeforeMount, inject, provide, h, onMounted } from "vue";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone } from "@ant-design/icons-vue";
|
||||
import { DeleteOutlined, EditOutlined, ClearOutlined, FileSearchOutlined, FileAddOutlined, UndoOutlined, SaveOutlined, PlusSquareTwoTone, DownSquareTwoTone, UpSquareTwoTone, UserOutlined } from "@ant-design/icons-vue";
|
||||
import { PermissionContext, usePermissionContext } from "@/hooks/PermissionContext"
|
||||
import dragModal from "@/components/basic/DragModal.vue"
|
||||
import UserEnquiry from "./UserEnquiry.vue";
|
||||
@@ -460,6 +462,9 @@ const onViewActorOperation = ((actorName: string) => {
|
||||
|
||||
</script>
|
||||
<style lang="less">
|
||||
/* 移动端表单样式(与 FamilyTreeOperation 保持一致) */
|
||||
@import "../../styles/ft-mobile.less";
|
||||
|
||||
.page-container {
|
||||
margin-right: 0px;
|
||||
|
||||
|
||||
Reference in new issue
Block a user