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