From a35f4b4d0c555493cc464bfd36d037230547f1aa Mon Sep 17 00:00:00 2001
From: tj <1378534974@qq.com>
Date: 星期四, 20 三月 2025 09:44:44 +0800
Subject: [PATCH] 1.高级安全防护
---
src/views/system/SecurityList.vue | 324 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 324 insertions(+), 0 deletions(-)
diff --git a/src/views/system/SecurityList.vue b/src/views/system/SecurityList.vue
new file mode 100644
index 0000000..912acb2
--- /dev/null
+++ b/src/views/system/SecurityList.vue
@@ -0,0 +1,324 @@
+<template>
+ <a-row :gutter="24">
+ <a-col :md="24">
+ <a-card :style="cardStyle" :bordered="false">
+ <!-- 查询区域 -->
+ <div class="table-page-search-wrapper">
+ <!-- 搜索区域 -->
+ <a-form layout="inline" @keyup.enter.native="searchQuery">
+ <a-row :gutter="24">
+ <a-col :md="6" :sm="24">
+ <a-form-item label="关键词" :labelCol="labelCol" :wrapperCol="wrapperCol">
+ <a-input placeholder="请输入关键词查询" v-model="queryParam.keyword"></a-input>
+ </a-form-item>
+ </a-col>
+ <a-col :md="6" :sm="24">
+ <a-form-item label="防护类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+ <a-select
+ optionFilterProp="children"
+ :dropdownMatchSelectWidth="false"
+ showSearch allow-clear style="width: 100%"
+ placeholder="请选择防护类型"
+ v-model="queryParam.type">
+ <a-select-option v-for="(type,index) in typeList" :value="type.itemValue" :key="index">
+ {{ type.itemText }}
+ </a-select-option>
+ </a-select>
+ </a-form-item>
+ </a-col>
+ <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
+ <a-col :md="6" :sm="24">
+ <a-button type="primary" @click="searchQuery">查询</a-button>
+ <a-button style="margin-left: 8px" @click="searchReset">重置</a-button>
+ </a-col>
+ </span>
+ </a-row>
+ </a-form>
+ </div>
+ <!-- 操作按钮区域 -->
+ <div class="table-operator" style="margin-top: 5px">
+ <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+ <a-button @click="batchDel" icon="delete">删除</a-button>
+ <a-button @click="batchSetStatus(true)" icon="check-square">启用</a-button>
+ <a-button @click="batchSetStatus(false)" icon="close-square">禁用</a-button>
+ </div>
+ <!-- table区域-begin -->
+ <div>
+ <a-table
+ ref="table"
+ size="middle"
+ bordered
+ rowKey="id"
+ :columns="columns"
+ :dataSource="dataSource"
+ :pagination="ipagination"
+ :scroll="scroll"
+ :loading="loading"
+ :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+ @change="handleTableChange">
+ <span slot="action" slot-scope="text, record">
+ <a @click="handleEdit(record)">编辑</a>
+ <a-divider type="vertical" />
+ <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+ <a>删除</a>
+ </a-popconfirm>
+
+ </span>
+ <!-- <span slot="typeTitle">
+ 防护类型
+ <a-tooltip title="">
+ <a-icon type="question-circle" />
+ </a-tooltip>
+ </span> -->
+ <!-- 状态渲染模板 -->
+
+
+ <template slot="type" slot-scope="type">
+ <a-tag color="green">{{ getDictItemLabel(typeList,type) }}</a-tag>
+ </template>
+
+ <template slot="customRenderFlag" slot-scope="enabled">
+ <a-tag v-if="enabled" color="green">启用</a-tag>
+ <a-tag v-if="!enabled" color="orange">禁用</a-tag>
+ </template>
+ </a-table>
+ </div>
+ <!-- table区域-end -->
+ <!-- 表单区域 -->
+ <security-modal ref="modalForm" @ok="roleModalFormOk"></security-modal>
+ <role-function-modal ref="roleFunctionModal" @ok="roleFunctionModalFormOk"></role-function-modal>
+ <role-push-btn-modal ref="rolePushBtnModal" @ok="modalFormOk"></role-push-btn-modal>
+
+ </a-card>
+ </a-col>
+ </a-row>
+</template>
+<!-- f r o m 7 5 2 7 1 8 9 2 0 -->
+<script>
+ import SecurityModal from './modules/SecurityModal'
+ import RoleFunctionModal from './modules/RoleFunctionModal'
+ import RolePushBtnModal from './modules/RolePushBtnModal'
+ import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+ import JDate from '@/components/jeecg/JDate'
+ import {getAction,deleteAction,postAction } from '@/api/manage'
+ export default {
+ name: "SecurityList",
+ mixins:[JeecgListMixin],
+ components: {
+ SecurityModal,
+ RoleFunctionModal,
+ RolePushBtnModal,
+ JDate
+ },
+ data () {
+ return {
+ description: '高级安全防护管理页面',
+ roleFunctionModalVisible: false,
+ currentRoleId: '',
+ labelCol: {
+ span: 5
+ },
+ wrapperCol: {
+ span: 18,
+ offset: 1
+ },
+ // 查询条件
+ queryParam: {
+ keyword: '',
+ type: '',
+ },
+ // 表头
+ columns: [
+ {
+ title: '#',
+ dataIndex: '',
+ key:'rowIndex',
+ width:40,
+ align:"center",
+ customRender:function (t,r,index) {
+ return parseInt(index)+1;
+ }
+ },
+ {
+ title: '操作',
+ dataIndex: 'action',
+ align:"center",
+ width: 180,
+ scopedSlots: { customRender: 'action' },
+ },
+ {
+ title: '关键词', align:"left", dataIndex: 'keyword', width: 120
+ },
+ {
+ title:' 防护类型',align:"left", dataIndex: 'type', width: 100,
+ slots: { title: 'typeTitle' },
+ scopedSlots: { customRender: 'type' }
+ },
+ { title: '状态',dataIndex: 'status',width:60,align:"center",
+ scopedSlots: { customRender: 'customRenderFlag' }
+ }
+ ],
+ url: {
+ list: "/config-security/list",
+ delete: "/config-security/delete",
+ deleteBatch: "/config-security/deleteBatch",
+ batchSetStatusUrl: "/config-security/batchSetStatus"
+ },
+ typeList:[],
+ }
+ },
+ computed: {
+ importExcelUrl: function(){
+ return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+ }
+ },
+
+ mounted(){
+ this.loadDictData();
+ },
+ methods: {
+
+ searchQuery() {
+ this.ipagination.current = 1;
+ this.loadData();
+ },
+
+ loadData(arg) {
+ //加载数据 若传入参数1则加载第一页的内容
+ // this.ipagination.current = 1;
+
+ let params = this.queryParam
+ params.currentPage = this.ipagination.current;
+ params.pageSize = this.ipagination.pageSize;
+
+ this.loading = true;
+ getAction(this.url.list, params).then((res) => {
+ if (res.code===200) {
+ this.dataSource = res.data.rows;
+ this.ipagination.total = res.data.total;
+ this.tableAddTotalRow(this.columns, this.dataSource)
+ this.realityPriceTotal = res.data.realityPriceTotal
+ } else if(res.code===510){
+ this.$message.warning(res.data)
+ } else {
+ this.$message.warning(res.data.message)
+ }
+ this.loading = false;
+ })
+ },
+
+ loadDictData() {
+ // 安全防护类型
+ var dictCode='securityType'
+ getAction(`/sysDict/items/dict-code/${dictCode}`).then((res)=>{
+ if(res.code === 200){
+ this.typeList = res.data;
+ }else{
+ this.$message.info(res.data);
+ }
+ })
+ },
+
+ getDictItemLabel(list, value) {
+ const item = list.find(item => item.itemValue === value);
+ return item ? item.itemText : null;
+ },
+ handleSetPushBtn(roleId, roleName) {
+ this.$refs.rolePushBtnModal.edit(roleId);
+ this.$refs.rolePushBtnModal.title = "分配按钮给:" + roleName
+ this.$refs.rolePushBtnModal.disableSubmit = false;
+ },
+ roleModalFormOk() {
+ //重载列表
+ this.loadData()
+ },
+ roleFunctionModalFormOk(id) {
+ //重载列表
+ this.loadData()
+ this.roleFunctionModalVisible = true
+ this.currentRoleId = id
+ },
+
+ handleAdd: function () {
+ this.$refs.modalForm.add();
+ this.$refs.modalForm.title = "新增";
+ this.$refs.modalForm.disableSubmit = false;
+ },
+ handleEdit: function (record) {
+ console.log("edit", record);
+ this.$refs.modalForm.edit(record);
+ this.$refs.modalForm.title = "编辑";
+ this.$refs.modalForm.disableSubmit = false;
+ if(this.btnEnableList.indexOf(1)===-1) {
+ this.$refs.modalForm.isReadOnly = true
+ }
+ },
+ handleDelete(id) {
+ deleteAction(this.url.delete+`/${id}`, {id: id}).then((res) => {
+ if (res.code === 200) {
+ this.loadData();
+ this.$message.success(res.message);
+ } else {
+ this.$message.warning(res.message);
+ }
+ });
+ },
+ batchDel() {
+ if (this.selectedRowKeys.length <= 0) {
+ this.$message.warning('请选择一条记录!');
+ return;
+ }
+ let ids = "";
+ this.selectedRowKeys.forEach(function(val) {
+ ids+=val+",";
+ });
+ ids = ids.substring(0,ids.length-1);
+ deleteAction(this.url.deleteBatch, {ids: ids}).then((res) => {
+ if(res.code === 200){
+ this.$message.success(res.msg);
+ this.loadData();
+ this.selectedRowKeys = [];
+ } else {
+ this.$message.warning(res.msg);
+ }
+ });
+ },
+ batchSetStatus: function (status) {
+ if(!this.url.batchSetStatusUrl){
+ this.$message.error("请设置url.batchSetStatusUrl属性!")
+ return
+ }
+ if (this.selectedRowKeys.length <= 0) {
+ this.$message.warning('请选择一条记录!');
+ return;
+ } else {
+ var ids = "";
+ for (var a = 0; a < this.selectedRowKeys.length; a++) {
+ ids += this.selectedRowKeys[a] + ",";
+ }
+ var that = this;
+ this.$confirm({
+ title: "确认操作",
+ content: "是否操作选中数据?",
+ onOk: function () {
+ that.loading = true;
+ postAction(that.url.batchSetStatusUrl, {status: status, ids: ids}).then((res) => {
+ if(res.code === 200){
+ that.loadData()
+ } else {
+ that.$message.warning(res.data.message);
+ }
+ }).finally(() => {
+ that.loading = false;
+ });
+ }
+ });
+ }
+ },
+
+ }
+ }
+</script>
+<style scoped>
+ @import '~@assets/less/common.less'
+</style>
\ No newline at end of file
--
Gitblit v1.9.3