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/modules/SecurityModal.vue |  173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 173 insertions(+), 0 deletions(-)

diff --git a/src/views/system/modules/SecurityModal.vue b/src/views/system/modules/SecurityModal.vue
new file mode 100644
index 0000000..e49166b
--- /dev/null
+++ b/src/views/system/modules/SecurityModal.vue
@@ -0,0 +1,173 @@
+<template>
+  <div ref="container">
+    <a-modal
+      :title="title"
+      :width="800"
+      :visible="visible"
+      :confirmLoading="confirmLoading"
+      :getContainer="() => $refs.container"
+      :maskStyle="{'top':'93px','left':'154px'}"
+      :wrapClassName="wrapClassNameInfo()"
+      :mask="isDesktop()"
+      :maskClosable="false"
+      @ok="handleOk"
+      @cancel="handleCancel"
+      cancelText="取消"
+      okText="保存">
+      <a-spin :spinning="confirmLoading">
+        <a-form :form="form">
+          <a-row class="form-row" :gutter="24">
+            <a-col :span="24">
+              <a-form-item label="关键词" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-input placeholder="请输入关键词" v-decorator="['keyword', validatorRules.keyword]" />
+              </a-form-item>
+            </a-col>
+            <a-col :span="24">
+              <a-form-item label="防护类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <!-- <a-input placeholder="请输入防护类型" v-decorator="['type', validatorRules.type]" /> -->
+                <a-select
+                      optionFilterProp="children"
+                      :dropdownMatchSelectWidth="false"
+                      showSearch allow-clear style="width: 100%"
+                      placeholder="请选择防护类型"
+                      v-decorator="['type', validatorRules.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>
+            <a-col :span="24">
+              <a-form-item label="状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
+                <a-radio-group v-decorator="['status', {initialValue: 1}]">
+                  <a-radio :value="1">启用</a-radio>
+                  <a-radio :value="0">禁用</a-radio>
+                </a-radio-group>
+              </a-form-item>
+            </a-col>
+          </a-row>
+        </a-form>
+      </a-spin>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+  import { mixinDevice } from '@/utils/mixin'
+  import { postAction, putAction,getAction } from '@/api/manage'
+  import pick from 'lodash.pick'
+
+  export default {
+    name: "SysDictModal",
+    mixins: [mixinDevice],
+    data () {
+      return {
+        title:"操作",
+        visible: false,
+        model: {},
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        form: this.$form.createForm(this),
+        validatorRules:{
+          keyword: {
+            rules: [{
+              required: true,
+              message: '请输入关键词!'
+            },
+            {
+              max: 50,
+              message: '关键词长度不能超过50个字符!'
+            }
+          ]
+          },
+          type: {
+            rules: [{
+              required: true,
+              message: '请输入防护类型!'
+            }]
+          }
+        },
+        url: {
+          add: "/config-security",
+          edit: "/config-security"
+        },
+        typeList:[],
+      }
+    },
+    mounted(){
+      this.loadDictData();
+    },
+    methods: {
+      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);
+          }
+        })
+      },
+      add () {
+        this.edit({})
+      },
+      edit (record) {
+        debugger;
+        this.form.resetFields()
+        this.model = Object.assign({}, record)
+        this.visible = true
+        this.$nextTick(() => {
+          this.form.setFieldsValue(pick(this.model,'keyword','type','status'))
+        })
+      },
+      close () {
+        this.$emit('close')
+        this.visible = false
+      },
+      handleOk () {
+        const that = this
+        this.form.validateFields((err, values) => {
+          if (!err) {
+            that.confirmLoading = true
+            let formData = Object.assign(this.model, values)
+            let obj
+            if(!this.model.id){
+              obj = postAction(this.url.add, formData)
+            }else{
+              obj = putAction(this.url.edit, formData)
+            }
+            obj.then((res)=>{
+              if(res.code === 200){
+                that.$message.success(res.msg)
+                that.$emit('ok')
+              }else{
+                that.$message.warning(res.msg)
+              }
+            }).finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+          }
+        })
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+  .form-row {
+    padding: 0 24px;
+  }
+</style> 
\ No newline at end of file

--
Gitblit v1.9.3