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