Browse Source

<feat>鉴权风险检测

panyca 4 years ago
parent
commit
0b10f8220e

+ 12 - 0
src/api/log-manage.js

@@ -26,3 +26,15 @@ export function riskProgramme(data) {
     return axios.put(`${base}/warningProgramme/${data.id}`, data);
 }
 
+// 鉴权风险检测
+export const authRiskDetectionUrl = '/auditsvr/v2/riskProgramme/_search';
+
+// 鉴权风险方案详情
+export function getAuthRiskDetail(id) {
+  return axios.get(`/auditsvr/v2/riskProgramme/${id}`);
+}
+
+// 保存鉴权风险方案
+export function saveAuthRisk(id, data) {
+  return axios.put(`/auditsvr/v2/riskProgramme/${id}`, data);
+}

+ 138 - 0
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/add-func-form.vue

@@ -0,0 +1,138 @@
+<!--
+新增功能
+@Author: linqian
+@Date: 2021-05-17 16:47
+-->
+<template>
+    <dg-row>
+        <el-form ref="form" :model="form" :rules="rules" label-width="150px">
+            <dg-col :span="12">
+                <el-form-item label="功能编号:" prop="code">
+                    <el-input v-model="form.code" placeholder="" v-if="!isDetail"></el-input>
+                    <span v-else>{{ form.code }}</span>
+                </el-form-item>
+                <el-form-item label="上级功能编号:" prop="parentId">
+                    <el-input v-model="form.parentId" placeholder="" v-if="!isDetail"></el-input>
+                    <span v-else>{{ form.parentId }}</span>
+                </el-form-item>
+                <el-form-item label="所属应用:" prop="appName">
+                    <el-input v-model="form.appName" placeholder="" v-if="!isDetail" disabled></el-input>
+                    <span v-else>{{ form.appName }}</span>
+                </el-form-item>
+                <el-form-item label="设计安全隐私类别:" prop="designSecureType">
+                    <dg-select v-model="form.designSecureType" placeholder="" enum="SecurityPrivacyEnum" v-if="!isDetail"></dg-select>
+                    <span v-else>{{ form.designSecureType }}</span>
+                </el-form-item>
+            </dg-col>
+            <dg-col :span="12">
+                <el-form-item label="功能名称:" prop="name">
+                    <el-input v-model="form.name" placeholder="" v-if="!isDetail"></el-input>
+                    <span v-else>{{ form.name }}</span>
+                </el-form-item>
+                <el-form-item label="在用状态:" prop="isActive">
+                    <dg-select code="DM_APPLY_STATUS" v-model="form.isActive" v-if="!isDetail"></dg-select>
+                    <span v-else>{{ form.isActive == "0" ? "禁用" : "启用" }}</span>
+                </el-form-item>
+                <el-form-item label="功能使用场景代码:" prop="functionUsageScenarios">
+                    <el-input v-model="form.functionUsageScenarios" placeholder="" v-if="!isDetail"></el-input>
+                    <span v-else>{{ form.functionUsageScenarios }}</span>
+                </el-form-item>
+            </dg-col>
+            <dg-col :span="24">
+                <el-form-item label="功能说明:" prop="remark">
+                    <el-input
+                        v-model="form.remark"
+                        placeholder=""
+                        type="textarea"
+                        :rows="3"
+                        v-if="!isDetail"
+                    ></el-input>
+                    <span v-else>{{ form.remark }}</span>
+                </el-form-item>
+            </dg-col>
+        </el-form>
+    </dg-row>
+</template>
+S
+<script>
+// import { funcRestApi } from "@/api/application";
+export default {
+    props: {
+        id: String,
+        isDetail: {
+            type: Boolean,
+            default: false
+        },
+        app: Object
+    },
+    components: {},
+    data() {
+        return {
+            form: {
+                appId: "",
+                appName: "",
+                code: "",
+                designSecureType: "",
+                functionUsageScenarios: "",
+                isActive: "",
+                name: "",
+                parentId: "",
+                remark: ""
+            },
+            rules: {
+                code: [{ required: true, message: "请输入功能编号", trigger: "change" }],
+                name: [{ required: true, message: "请输入功能名称", trigger: "change" }],
+                parentId: [{ required: true, message: "请输入上级功能编号", trigger: "change" }],
+                isActive: [{ required: true, message: "请选择在用状态", trigger: "change" }],
+                appName: [{ required: true, message: "请选择应用", trigger: "change" }]
+            }
+        };
+    },
+    computed: {},
+    methods: {
+        /**
+         * 保存
+         */
+        saveForm() {
+            return new Promise((resolve) => {
+                this.$refs.form.validate((valid) => {
+                    if (valid) {
+                        const api = this.id ? "update" : "save";
+                        // funcRestApi[api](this.form)
+                        //     .then((res) => {
+                        //         this.$message.success("保存成功!");
+                        //         resolve("成功");
+                        //     })
+                        //     .catch((error) => {
+                        //         this.$message.error(error);
+                        //     });
+                    }
+                });
+            });
+        },
+        /**
+         * 获取详情
+         */
+        getDetail() {
+            // funcRestApi.detail(this.id).then((res) => {
+            //     this.form = res;
+            // });
+        }
+    },
+    created() {
+        if (this.id) {
+            if (this.isDetail) {
+                this.rules = {};
+            }
+            this.getDetail();
+        } else {
+            this.form.appName = this.app.applyName;
+            this.form.appId = this.app.id;
+        }
+    },
+    mounted() {}
+};
+</script>
+
+<style lang='scss'>
+</style>

+ 173 - 0
src/pages/data-auth-module/auth-object-manage/appfun-resource-manage/func-list.vue

@@ -0,0 +1,173 @@
+<!--
+功能列表
+@Author: linqian
+@Date: 2021-05-17 16:10
+-->
+<template>
+    <dg-card header="功能列表">
+        <!-- 搜索项 -->
+        <el-form :inline="true" class="search-form">
+            <el-form-item label="功能名称">
+                <el-input v-model="form.name.value" clearable></el-input>
+            </el-form-item>
+            <el-form-item label="在用状态">
+                <dg-select v-model="form.isActive.value" clearable code="DM_APPLY_STATUS"></dg-select>
+            </el-form-item>
+            <el-form-item>
+                <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
+                <!-- <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button> -->
+            </el-form-item>
+        </el-form>
+
+        <!-- 操作 -->
+        <dg-row zebra="10px">
+            <dg-button type="primary" icon="el-icon-circle-plus-outline" @click="handleAdd" v-if="appRow.id"
+                >新增</dg-button
+            >
+        </dg-row>
+        <!-- 表格 -->
+        <dg-table ref="table" :url="tableUrl" :condition="form" border row-key="id" :before-quest="beforeQuest">
+            <dg-table-column type="index" width="75" label="序号" align="center"></dg-table-column>
+            <dg-table-column prop="code" label="功能编号" align="center"></dg-table-column>
+            <dg-table-column prop="name" label="功能名称" align="center"></dg-table-column>
+            <dg-table-column prop="parentId" label="上级功能编号" align="center"></dg-table-column>
+            <dg-table-column prop="isActive" label="在用状态" align="center" code="DM_APPLY_STATUS"></dg-table-column>
+            <dg-table-column label="操作" align="center">
+                <template slot-scope="scope">
+                    <div class="u-table__operation">
+                        <el-tooltip
+                            v-for="(item, index) in optList"
+                            :key="index"
+                            :content="item.tooltip"
+                            effect="dark"
+                            placement="top-end"
+                        >
+                            <i :class="item.icon" @click="item.on(scope.row)"></i>
+                        </el-tooltip>
+                    </div>
+                </template>
+            </dg-table-column>
+        </dg-table>
+    </dg-card>
+</template>
+
+<script>
+import addFuncForm from "./add-func-form";
+// import { funcRestApi } from "@/api/application";
+export default {
+    components: {},
+    props: {
+        appRow: Object
+    },
+    data() {
+        return {
+            form: {
+                name: {
+                    value: "",
+                    op: "like"
+                },
+                appId: {
+                    value: "",
+                    op: "="
+                },
+                isActive: {
+                    value: "",
+                    op: "="
+                }
+            },
+            optList: [
+                { icon: "el-icon-edit", tooltip: "修改", on: this.handleEdit },
+                { icon: "el-icon-document", tooltip: "详情", on: this.handleViewDetail },
+                { icon: "el-icon-delete", tooltip: "删除", on: this.handleDelete }
+            ],
+            // tableUrl: funcRestApi.base + "/search"
+        };
+    },
+    computed: {},
+    methods: {
+        /**
+         * 编辑
+         */
+        handleEdit(row) {
+            this.handleOpenForm(row.id, "编辑");
+        },
+        /**
+         * 查看详情
+         */
+        handleViewDetail(row) {
+            this.handleOpenForm(row.id, "详情", true);
+        },
+        /**
+         * 删除
+         */
+        handleDelete(row) {
+            this.$dgConfirm(`是否确认删除该条功能!`, "提示", {}).then(() => {
+                 funcRestApi.del(row.id).then((res) => {
+                    this.$message.success(res);
+                    this.handleSearch();
+                });
+            });
+        },
+        /**
+         * 查询
+         */
+        handleSearch() {
+            this.$refs.table.searchForm();
+        },
+        /**
+         * 重置
+         */
+        handleReset() {
+            for (const key in this.form) {
+                this.form[key].value = "";
+            }
+        },
+        /**
+         * 新增
+         */
+        handleAdd() {
+            this.handleOpenForm(void 0, "新增");
+        },
+        handleOpenForm(id, title, isDetail = false) {
+            const vm = this;
+            const layer = this.$dgLayer({
+                title,
+                content: addFuncForm,
+                props: {
+                    id,
+                    isDetail,
+                    app: vm.appRow
+                },
+                btn: ["确定", "取消"],
+                btnAlign: "r",
+                yes: (index) => {
+                    let _layer = layer.$children[0];
+                     _layer.saveForm().then((res) => {
+                        layer.close(index);
+                        vm.handleSearch();
+                    });
+                },
+
+                area: ["750px", "500px"]
+            });
+        },
+        beforeQuest(res) {
+            const { content, totalElements } = res.data;
+            const result = {
+                data: {
+                    content: this.appRow.id ? content : [],
+                    totalElements
+                }
+            };
+            return result;
+        }
+    },
+    created() {
+        this.form.appId.value = this.appRow.id;
+    },
+    mounted() {}
+};
+</script>
+
+<style lang='scss'>
+</style>

+ 29 - 1
src/pages/log-manage/DataConfig.js

@@ -41,4 +41,32 @@ const earlyWarningPlanTableInfo = [
     { label: "规则说明", value: "ruleExplain", span: 24 },
     { label: "预警信息", value: "warningMsg", span: 24 }
 ];
-export { earlyWarningPlanTable, earlyWarningPlanTableInfo };
+// 风险检测方案
+const RiskDetectionPlan = [{
+    label: "风险检测方案名称",
+    prop: "name"
+  },
+  {
+    label: "创建时间",
+    prop: "createTime"
+  },
+  {
+    label: "修改时间",
+    prop: "updateTime"
+  },
+  {
+    label: "风险数量",
+    prop: "number"
+  },
+  {
+    label: "方案状态",
+    // custom: true, // 如果需要自定义请加上这个属性,插槽名称为prop
+    prop: "state",
+    enum: "UserTypeEnum"
+  }
+];
+export {
+  earlyWarningPlanTable,
+  earlyWarningPlanTableInfo,
+  RiskDetectionPlan
+};

+ 131 - 0
src/pages/log-manage/auth-risk-detection/detail.vue

@@ -0,0 +1,131 @@
+<template>
+    <div class="u-detail">
+        <el-form ref="ruleForm" label-width="120px" label-suffix=":">
+            <dg-row :gutter="20">
+                <dg-col :span="12">
+                    <el-form-item label="方案名称">
+                        <div class="u-detail__text">{{ sizeForm.name }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="12">
+                    <el-form-item label="方案状态">
+                        <div class="u-detail__text" v-translate="{ code: 'DM_APPLY_STATUS' }">{{ sizeForm.state }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="12">
+                    <el-form-item label="创建时间">
+                        <div class="u-detail__text">{{ sizeForm.createTime }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="12">
+                    <el-form-item label="检测规则">
+                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+                            <p>
+                                鉴权时,必要条件不完整。
+                            </p>
+                            <div>
+                                鉴权类型:
+                                <dg-radio-group
+                                    v-model="sizeForm.authType"
+                                    enum="AuthenticationNecessaryParamEnum"
+                                    @change="setNecessaryParams"
+                                    call-off
+                                ></dg-radio-group>
+                            </div>
+                            <div class="form-inline">
+                                <label>必要参数:</label>
+                                <dg-checkbox-group
+                                    v-model="sizeForm.necessaryParams"
+                                    enum="AuthenticationTypeEnum"
+                                    disabled
+                                ></dg-checkbox-group>
+                            </div>
+                        </div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="24">
+                    <el-form-item label="风险内容">
+                        <div class="u-detail__text">{{ sizeForm.contentFormat }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="24">
+                    <el-form-item label="规则说明">
+                        <div class="u-detail__text">{{ sizeForm.ruleExplain }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row :gutter="20">
+                <dg-col :span="24">
+                    <el-form-item label="处理意见">
+                        <div class="u-detail__text">{{ sizeForm.handleOpinion }}</div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <div class="dg-layer-demo" v-footer>
+                <dg-button @click="handleClose">取消</dg-button>
+            </div>
+        </el-form>
+    </div>
+</template>
+
+<script>
+export default {
+    name: "auth-risk-detail",
+    props: {
+        sizeForm: {
+            type: Object,
+            required: true
+        }
+    },
+    data() {
+        return {};
+    },
+    methods: {
+        handleClose() {
+            this.$emit("close");
+        }
+    },
+    created() {
+        const that = this;
+        const { sizeForm } = that;
+        // let str = "";
+        // policeMsgApi
+        //     .businessDetail({
+        //         codeDicId: "DM_POLICE_BUSINESS",
+        //         columnName: "police_type_id",
+        //         columnValue: sizeForm.policeCategory ? sizeForm.policeCategory : "01"
+        //     })
+        //     .then(res => {
+        //         if (sizeForm.policeBusiness) {
+        //             if (res && res.length > 0) {
+        //                 res.forEach(item => {
+        //                     if (sizeForm.policeBusiness.indexOf(item.value) !== -1) {
+        //                         str += item.label + ",";
+        //                     }
+        //                 });
+        //                 str = str.slice(0, str.length - 1);
+        //             }
+        //             that.policeBusinessLabel = str;
+        //         }
+        //     });
+    }
+};
+</script>
+
+<style lang="scss">
+.u-detail {
+    .el-form-item {
+        margin-bottom: 10px;
+    }
+}
+</style>

+ 233 - 0
src/pages/log-manage/auth-risk-detection/edit.vue

@@ -0,0 +1,233 @@
+<template>
+    <div>
+        <el-form
+            ref="ruleForm"
+            :rules="rules"
+            :model="sizeForm"
+            label-suffix=":"
+            label-position="right"
+            label-width="140px"
+        >
+            <dg-row>
+                <dg-col :span="12">
+                    <el-form-item label="方案名称" prop="name">
+                        {{ sizeForm.name }}
+                        <!-- <el-input
+                            v-model.trim="sizeForm.name"
+                            show-word-limit
+                            placeholder="请输入方案名称"
+                            clearable
+                            disabled
+                        /> -->
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row>
+                <dg-col :span="12">
+                    <el-form-item label="方案状态" prop="state">
+                        <dg-select
+                            style="width: 100%;"
+                            v-model="sizeForm.state"
+                            placeholder="请选择方案状态"
+                            code="DM_APPLY_STATUS"
+                        >
+                        </dg-select>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row>
+                <dg-col :span="24">
+                    <el-form-item label="检测规则" prop="ruleContent">
+                        <!-- DSJPFJQFX    DSJPFHBMDMZFX JQBYTJBWZFX -->
+                        <div v-if="sizeForm.type === 'DSJPFJQFX'">
+                            <div class="form-inline">
+                                <el-form-item label="" prop="interval">
+                                    <el-input style="width: 80px;" v-model.trim="sizeForm.interval"></el-input>
+                                </el-form-item>
+                                &nbsp;分钟内,鉴权次数超过&nbsp;
+                                <el-form-item label="" prop="frequency"
+                                    ><el-input style="width: 80px;" v-model.trim="sizeForm.frequency"></el-input>
+                                </el-form-item>
+                                &nbsp;次
+                            </div>
+                            <!-- <p>
+                                规则说明:用户在短时间内,频繁发起请求,鉴定是否有应用或服务的访问权限。鉴权次数说明:a用户访问A应用(或者服务),A应用到鉴权服务鉴定a用户,是否可以访问A应用(或者服务),为一次鉴权。
+                            </p> -->
+                        </div>
+                        <div v-if="sizeForm.type === 'DSJPFHBMDMZFX'">
+                            <div class="form-inline">
+                                <el-form-item label="" prop="interval">
+                                    <el-input style="width: 80px;" v-model.trim="sizeForm.interval"></el-input>
+                                </el-form-item>
+                                &nbsp; 分钟内,命中红/白名单超过&nbsp;
+                                <el-form-item label="" prop="frequency"
+                                    ><el-input style="width: 80px;" v-model.trim="sizeForm.frequency"></el-input>
+                                </el-form-item>
+                                &nbsp;次
+                            </div>
+                            <!-- <p>
+                                规则说明:在短时间内,鉴权的内容在红/白名单的次数超量。
+                                命中红/白名单说明:a用户访问A应用(或者服务),A应用到鉴权服务鉴定a用户是否可以访问A应用(或者服务),若A应用在红/白名单中,为命中一次红白名单。
+                            </p> -->
+                        </div>
+                        <div v-if="sizeForm.type === 'JQBYTJBWZFX'">
+                            <p>
+                                鉴权时,必要条件不完整。
+                            </p>
+                            <div>
+                                鉴权类型:
+                                <dg-radio-group
+                                    v-model="sizeForm.authType"
+                                    enum="AuthenticationNecessaryParamEnum"
+                                    @change="setNecessaryParams"
+                                    call-off
+                                ></dg-radio-group>
+                            </div>
+                            <div class="form-inline">
+                                <label>必要参数:</label>
+                                <dg-checkbox-group
+                                    v-model="sizeForm.necessaryParams"
+                                    enum="AuthenticationTypeEnum"
+                                    disabled
+                                ></dg-checkbox-group>
+                            </div>
+                            <!-- <p>
+                                规则说明:用户在短时间内,频繁发起请求,鉴定是否有应用或服务的访问权限。鉴权次数说明:a用户访问A应用(或者服务),A应用到鉴权服务鉴定a用户,是否可以访问A应用(或者服务),为一次鉴权。
+                            </p> -->
+                        </div>
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row>
+                <dg-col :span="24">
+                    <el-form-item label="风险内容" prop="contentFormat">
+                        {{ sizeForm.contentFormat }}
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row>
+                <dg-col :span="24">
+                    <el-form-item label="规则说明" prop="ruleExplain">
+                        {{ sizeForm.ruleExplain }}
+                        <!-- <el-input
+                            type="textarea"
+                            rows="4"
+                            v-model.trim="sizeForm.ruleExplain"
+                            placeholder="请输入规则说明"
+                            clearable
+                            show-word-limit
+                            disabled
+                            maxlength="500"
+                        /> -->
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+            <dg-row>
+                <dg-col :span="24">
+                    <el-form-item label="处理意见" prop="handleOpinion">
+                        <el-input
+                            type="textarea"
+                            rows="4"
+                            v-model.trim="sizeForm.handleOpinion"
+                            placeholder="请输入处理意见"
+                            clearable
+                            show-word-limit
+                            maxlength="500"
+                        />
+                    </el-form-item>
+                </dg-col>
+            </dg-row>
+        </el-form>
+        <div class="dg-layer-demo" v-footer>
+            <dg-button @click="handleClose">取消</dg-button>
+            <dg-button type="primary" @click="handlSave">确定</dg-button>
+        </div>
+    </div>
+</template>
+
+<script>
+import { saveAuthRisk } from "@/api/log-manage";
+
+export default {
+    name: "auth-risk-edit",
+    props: {
+        formData: Object
+    },
+    data() {
+        return {
+            necessaryParams: [],
+            sizeForm: {
+                interval: "",
+                frequency: "",
+                authType: "",
+                necessaryParams: ""
+            },
+            rules: {
+                handleOpinion: [{ required: true, message: "请输入处理意见", trigger: "blur" }],
+                name: [{ required: true, message: "请输入方案名称", trigger: "blur" }],
+                interval: [{ required: true, message: "请输入分钟数", trigger: "blur" }],
+                frequency: [{ required: true, message: "请输入次数", trigger: "blur" }],
+                state: [{ required: true, message: "请选择方案状态", trigger: "blur" }],
+                ruleContent: [{ required: true }]
+            }
+        };
+    },
+    methods: {
+        init() {
+            this.sizeForm = Object.assign({}, this.formData, this.sizeForm);
+            if (this.sizeForm.type === "JQBYTJBWZFX") {
+                this.necessaryParams = JSON.parse(this.sizeForm.ruleContent);
+                if (Array.isArray(this.necessaryParams) && this.necessaryParams.length) {
+                    this.sizeForm.authType = this.necessaryParams[0].type;
+                    this.setNecessaryParams(this.sizeForm.authType);
+                }
+                return;
+            }
+            const { interval, frequency } = JSON.parse(this.sizeForm.ruleContent);
+            this.sizeForm.interval = interval;
+            this.sizeForm.frequency = frequency;
+        },
+        setNecessaryParams(key) {
+            const seleted = this.necessaryParams.find(item => item.type === key);
+            if (seleted) {
+                this.sizeForm.necessaryParams = seleted.params
+                    .map(item => {
+                        return item.name;
+                    })
+                    .join(",");
+            }
+        },
+        handleClose() {
+            this.$emit("success", true);
+        },
+        async handlSave() {
+            const that = this;
+            const valid = await new Promise(resolve => this.$refs.ruleForm.validate(resolve));
+            if (!valid) return;
+
+            const sizeForm = { ...this.sizeForm };
+            if (["DSJPFHBMDMZFX", "DSJPFJQFX"].includes(this.sizeForm.type)) {
+                sizeForm.ruleContent = JSON.stringify({ frequency: sizeForm.frequency, interval: sizeForm.interval });
+            }
+            saveAuthRisk(sizeForm.id, sizeForm)
+                .then(() => {
+                    that.handleClose(true);
+                    that.$message.success("保存成功");
+                })
+                .catch(error => that.$notify.error({ title: "错误", message: error }));
+        }
+    },
+    created() {
+        this.init();
+    }
+};
+</script>
+
+<style lang="scss" scoped>
+.form-inline {
+    display: flex;
+    label {
+        min-width: 75px;
+    }
+}
+</style>

+ 161 - 0
src/pages/log-manage/auth-risk-detection/index.vue

@@ -0,0 +1,161 @@
+<!--
+ * @Author: Liugh
+ * @Date: 2021-05-25 13:49:40
+ * @LastEditTime: 2021-05-25 14:36:52
+ * @LastEditors: Do not edit
+ * @FilePath: \auth-web\src\pages\log-manage\err-auth-earlywarning-manage\auth-earlywarning-plan.vue
+ * @Description: 鉴权风险检测
+-->
+<template>
+    <main>
+        <el-form ref="ruleForm" inline :rules="rules" :model="form">
+            <!-- <el-form-item label="鉴权风险检测名称">
+                <el-input v-model="form.name.value" placeholder="请输入鉴权风险检测名称" clearable></el-input>
+            </el-form-item> -->
+            <el-form-item label="方案状态">
+                <dg-select
+                    v-model="form.state.value"
+                    placeholder="请选择方案状态"
+                    code="DM_APPLY_STATUS"
+                    style="width: 13rem"
+                    clearable
+                >
+                </dg-select>
+            </el-form-item>
+            <el-form-item>
+                <dg-button type="primary" @click="handleSearch" icon="el-icon-search">查询</dg-button>
+                <dg-button type="primary" @click="handleReset" icon="el-icon-refresh-right">重置</dg-button>
+            </el-form-item>
+        </el-form>
+        <Table ref="myTable" :url="tableUrl" :headerData="RiskDetectionPlan" :condition="form">
+            <dg-table-column fixed="right" label="操作" width="120" align="center">
+                <template slot-scope="scope">
+                    <div class="u-table__operation">
+                        <el-tooltip
+                            v-for="(item, i) in optList"
+                            :key="i"
+                            :content="item.tooltip"
+                            effect="dark"
+                            placement="top-end"
+                        >
+                            <i :class="item.icon" @click="item.on(scope.row)" />
+                        </el-tooltip>
+                    </div>
+                </template>
+            </dg-table-column>
+        </Table>
+    </main>
+</template>
+
+<script>
+import Table from "@/pages/common/table";
+import { RiskDetectionPlan } from "../DataConfig";
+import { authRiskDetectionUrl, getAuthRiskDetail } from "@/api/log-manage";
+import Detail from "@/pages/log-manage/auth-risk-detection/detail";
+import Editor from "@/pages/log-manage/auth-risk-detection/edit";
+
+export default {
+    name: "auth-risk-detection", // 组件名称
+    props: {
+        // 接收父组件的数据
+    },
+    data() {
+        const that = this;
+        // 组件内部参数
+        return {
+            // 参数名称及默认值
+            RiskDetectionPlan,
+            form: {
+                // name: {
+                //     value: "",
+                //     op: "like"
+                // },
+                state: {
+                    value: "",
+                    op: "="
+                }
+            },
+            rules: {},
+            tableUrl: authRiskDetectionUrl,
+            optList: [
+                { icon: "el-icon-edit", tooltip: "修改", on: that.handleEditor },
+                { icon: "el-icon-document", tooltip: "详情", on: that.handleDetail }
+            ]
+        };
+    },
+    computed: {}, // 计算属性
+    watch: {}, // 侦听器(扩展的计算属性)
+    components: { Table, Detail, Editor }, // 注册局部组件
+    methods: {
+        reloadTable() {
+            const that = this;
+            that.$refs.myTable.$refs.grid.reload();
+        },
+        handleEditor({ id }) {
+            const that = this;
+            getAuthRiskDetail(id)
+                .then(res => {
+                    const formData = res;
+                    const layer = that.$dgLayer({
+                        title: "修改",
+                        shade: [0.4, "#FFF"],
+                        area: ["830px", "660px"],
+                        content: Editor,
+                        props: {
+                            formData
+                        },
+                        on: {
+                            success(bool = false) {
+                                layer.close(layer.dialogIndex);
+                                if (bool) {
+                                    that.reloadTable();
+                                }
+                            }
+                        }
+                    });
+                })
+                .catch(error => {
+                    that.$message.error("详情获取失败");
+                });
+        },
+        handleDetail({ id }) {
+            const that = this;
+            getAuthRiskDetail(id)
+                .then(res => {
+                    const layer = that.$dgLayer({
+                        title: "详情",
+                        shade: [0.4, "#FFF"],
+                        content: Detail,
+                        area: ["830px", "660px"],
+                        props: { sizeForm: res },
+                        on: {
+                            success() {
+                                layer.close(layer.dialogIndex);
+                            }
+                        }
+                    });
+                })
+                .catch(error => {
+                    that.$message.error("详情获取失败");
+                });
+        },
+        /**
+         * @description:表单查询
+         */
+        handleSearch() {},
+        /**
+         * @description:表单重置
+         */
+        handleReset() {}
+    }, // 内部方法
+    beforeCreate() {}, // 组件创建前
+    created() {}, // 组件创建完成后
+    beforeMount() {}, // 组件挂载前
+    mounted() {}, // 组件挂载完成后
+    beforeUpdate() {}, // 组件更新前
+    updated() {}, // 组件挂载完成后
+    beforeDestroy() {}, // 组件销毁前
+    destroyed() {} // 组件销毁完成后
+};
+</script>
+<style lang="scss" scoped></style>

+ 10 - 0
src/router/modules/log-manage.js

@@ -38,6 +38,16 @@ const componentsRouter = {
                 }
             ]
         },
+        {
+          path: "auth-risk-detection",
+          component: () => import("@/pages/log-manage/auth-risk-detection/index"),
+          name: "auth-risk-detection",
+          meta: {
+            title: "鉴权风险检测",
+            noCache: false,
+            permission: ['YHGLPT_TJBB_JSSQQK']
+          }
+        },
         {
             path: "/permiss-log-manage",
             component: common,