|
@@ -0,0 +1,315 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="gateway-circuit-break">
|
|
|
|
+ <div class="gateway-circuit-break-head">
|
|
|
|
+ <Search placeholder="请输入您要搜索的内容" :isSlot="true">
|
|
|
|
+ <button class="btnAdd" @click="dialogAddShow = true">新增</button>
|
|
|
|
+ </Search>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="gateway-circuit-break-content">
|
|
|
|
+ <template v-if="circuitBreakList.length">
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
+ <el-col
|
|
|
|
+ v-for="(
|
|
|
|
+ {
|
|
|
|
+ id,
|
|
|
|
+ name,
|
|
|
|
+ circuitBreakDuration,
|
|
|
|
+ timeoutPeriod,
|
|
|
|
+ circuitBreakStandard,
|
|
|
|
+ interfaceBinding,
|
|
|
|
+ },
|
|
|
|
+ index
|
|
|
|
+ ) in circuitBreakList"
|
|
|
|
+ :key="id"
|
|
|
|
+ :xs="24"
|
|
|
|
+ :md="12"
|
|
|
|
+ :lg="6"
|
|
|
|
+ :xl="6"
|
|
|
|
+ >
|
|
|
|
+ <NormalCard
|
|
|
|
+ :title="name"
|
|
|
|
+ :flag.sync="circuitBreakList[index].flag"
|
|
|
|
+ @close-click="removeCard(index)"
|
|
|
|
+ >
|
|
|
|
+ <template #default>
|
|
|
|
+ <el-row :gutter="16">
|
|
|
|
+ <el-col :span="7" class="card-content-left"
|
|
|
|
+ >熔断时间:</el-col
|
|
|
|
+ >
|
|
|
|
+ <el-col :span="5" class="card-content-right">{{
|
|
|
|
+ circuitBreakDuration
|
|
|
|
+ }}</el-col>
|
|
|
|
+ <el-col :span="7" class="card-content-left"
|
|
|
|
+ >接口关联:</el-col
|
|
|
|
+ >
|
|
|
|
+ <el-col :span="5" class="card-content-right">{{
|
|
|
|
+ interfaceBinding
|
|
|
|
+ }}</el-col>
|
|
|
|
+ <el-col :span="7" class="card-content-left"
|
|
|
|
+ >超时时间:</el-col
|
|
|
|
+ >
|
|
|
|
+ <el-col :span="17" class="card-content-right">{{
|
|
|
|
+ timeoutPeriod
|
|
|
|
+ }}</el-col>
|
|
|
|
+ <el-col :span="7" class="card-content-left"
|
|
|
|
+ >熔断标准:</el-col
|
|
|
|
+ >
|
|
|
|
+ <el-col :span="17" class="card-content-right">{{
|
|
|
|
+ circuitBreakStandard
|
|
|
|
+ }}</el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </template>
|
|
|
|
+ </NormalCard>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-else>
|
|
|
|
+ <el-empty description="暂无数据" />
|
|
|
|
+ </template>
|
|
|
|
+ </div>
|
|
|
|
+ <Dialog
|
|
|
|
+ :flag="dialogAddShow"
|
|
|
|
+ width="630px"
|
|
|
|
+ @close-dialog="dialogAddShow = false"
|
|
|
|
+ >
|
|
|
|
+ <div class="dialog-add-title">新增熔断配置</div>
|
|
|
|
+ <div class="dialog-add-content">
|
|
|
|
+ <el-form :model="circuitBreakAddForm" label-width="auto">
|
|
|
|
+ <el-row :gutter="24">
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="熔断时间">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="circuitBreakAddForm.circuitBreakDuration"
|
|
|
|
+ placeholder="请输入熔断时间"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="服务超时时间">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="circuitBreakAddForm.timeoutPeriod"
|
|
|
|
+ placeholder="请输入服务超时时间"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="达成熔断标准">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="circuitBreakAddForm.circuitBreakStandard"
|
|
|
|
+ placeholder="请输入次数(次)"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="认定错误状态码">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="circuitBreakAddForm.errorCode"
|
|
|
|
+ placeholder="请输入状态码"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ <el-col :span="12">
|
|
|
|
+ <el-form-item label="是否启用">
|
|
|
|
+ <el-radio-group v-model="circuitBreakAddForm.enable">
|
|
|
|
+ <el-radio :label="true">是</el-radio>
|
|
|
|
+ <el-radio :label="false">否</el-radio>
|
|
|
|
+ </el-radio-group>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-col>
|
|
|
|
+ </el-row>
|
|
|
|
+ <el-form-item label="熔断规则描述">
|
|
|
|
+ <el-input
|
|
|
|
+ v-model="circuitBreakAddForm.description"
|
|
|
|
+ placeholder="请输入描述"
|
|
|
|
+ />
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </el-form>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="dialog-add-bottom fc">
|
|
|
|
+ <el-button
|
|
|
|
+ size="medium"
|
|
|
|
+ type="primary"
|
|
|
|
+ @click="dialogAddShow = false"
|
|
|
|
+ class="r24 blubtn"
|
|
|
|
+ >提交</el-button
|
|
|
|
+ >
|
|
|
|
+ <el-button size="medium" class="wbtn" @click="dialogAddShow = false"
|
|
|
|
+ >取消</el-button
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
|
|
+ </Dialog>
|
|
|
|
+ <Dialog :flag="dialogVisible">
|
|
|
|
+ <div class="closeDialog">
|
|
|
|
+ <div class="title">删除熔断配置</div>
|
|
|
|
+ <div class="content">是否确定要删除{{ deleteUserName }}?</div>
|
|
|
|
+ <div class="foot right t30">
|
|
|
|
+ <el-button size="medium" type="danger" class="r24" @click="del()"
|
|
|
|
+ >删除</el-button
|
|
|
|
+ >
|
|
|
|
+
|
|
|
|
+ <el-button size="medium" @click="dialogVisible = false"
|
|
|
|
+ >取消</el-button
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </Dialog>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import Search from "@/layout/components/Search";
|
|
|
|
+import NormalCard from "../components/NormalCard";
|
|
|
|
+import Dialog from "@/layout/components/Dialog";
|
|
|
|
+import { getGatewayCircuitBreakList } from "@/api/gateway";
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ name: "GatewayLimit",
|
|
|
|
+ components: {
|
|
|
|
+ Search,
|
|
|
|
+ NormalCard,
|
|
|
|
+ Dialog,
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ circuitBreakList: [
|
|
|
|
+ {
|
|
|
|
+ id: 0,
|
|
|
|
+ name: "熔断规则名称",
|
|
|
|
+ circuitBreakDuration: 2,
|
|
|
|
+ timeoutPeriod: 2,
|
|
|
|
+ circuitBreakStandard: 3,
|
|
|
|
+ interfaceBinding: 2,
|
|
|
|
+ flag: true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ id: 1,
|
|
|
|
+ name: "熔断规则名称",
|
|
|
|
+ circuitBreakDuration: 2,
|
|
|
|
+ timeoutPeriod: 2,
|
|
|
|
+ circuitBreakStandard: 3,
|
|
|
|
+ interfaceBinding: 2,
|
|
|
|
+ flag: true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ id: 2,
|
|
|
|
+ name: "熔断规则名称",
|
|
|
|
+ circuitBreakDuration: 2,
|
|
|
|
+ timeoutPeriod: 2,
|
|
|
|
+ circuitBreakStandard: 3,
|
|
|
|
+ interfaceBinding: 2,
|
|
|
|
+ flag: true,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ id: 3,
|
|
|
|
+ name: "熔断规则名称",
|
|
|
|
+ circuitBreakDuration: 2,
|
|
|
|
+ timeoutPeriod: 2,
|
|
|
|
+ circuitBreakStandard: 3,
|
|
|
|
+ interfaceBinding: 2,
|
|
|
|
+ flag: true,
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ circuitBreakAddForm: {
|
|
|
|
+ circuitBreakDuration: "",
|
|
|
|
+ timeoutPeriod: "",
|
|
|
|
+ circuitBreakStandard: "",
|
|
|
|
+ errorCode: "",
|
|
|
|
+ enable: true,
|
|
|
|
+ description: "",
|
|
|
|
+ },
|
|
|
|
+ dialogAddShow: false,
|
|
|
|
+ deleteUserName: "",
|
|
|
|
+ dialogVisible: false,
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ created() {
|
|
|
|
+ this.fetchData();
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ fetchData() {
|
|
|
|
+ this.listLoading = true;
|
|
|
|
+ getGatewayCircuitBreakList().then((response) => {
|
|
|
|
+ this.circuitBreakList.push(...response.data.items);
|
|
|
|
+ this.listLoading = false;
|
|
|
|
+ });
|
|
|
|
+ },
|
|
|
|
+ //删除-弹窗
|
|
|
|
+ removeCard(index) {
|
|
|
|
+ this.dialogVisible = true;
|
|
|
|
+ // this.circuitBreakList.splice(index, 1);
|
|
|
|
+ },
|
|
|
|
+ //删除-接口
|
|
|
|
+ del() {},
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+.gateway-circuit-break-head {
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
+}
|
|
|
|
+::v-deep .el-radio__input.is-checked .el-radio__inner {
|
|
|
|
+ border-color: #6f80bc;
|
|
|
|
+ background: #6f80bc;
|
|
|
|
+}
|
|
|
|
+::v-deep .el-radio__input.is-checked + .el-radio__label {
|
|
|
|
+ color: #303133;
|
|
|
|
+}
|
|
|
|
+::v-deep .el-button--primary {
|
|
|
|
+ border-color: #6f80bc;
|
|
|
|
+}
|
|
|
|
+.gateway-circuit-break-content {
|
|
|
|
+ margin-top: 32px;
|
|
|
|
+ height: calc(100vh - 224px);
|
|
|
|
+ overflow-x: hidden;
|
|
|
|
+ overflow-y: auto;
|
|
|
|
+
|
|
|
|
+ & > .el-row > .el-col {
|
|
|
|
+ margin-bottom: 24px;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ::v-deep .normal-card .card-content {
|
|
|
|
+ & > .el-row > .el-col {
|
|
|
|
+ margin-bottom: 24px;
|
|
|
|
+
|
|
|
|
+ &:nth-last-child(1),
|
|
|
|
+ &:nth-last-child(2) {
|
|
|
|
+ margin-bottom: 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .card-content-left {
|
|
|
|
+ word-break: keep-all;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ .card-content-right {
|
|
|
|
+ color: #909399;
|
|
|
|
+ word-break: keep-all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dialog-add-title {
|
|
|
|
+ font-size: 24px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ color: #303133;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dialog-add-content {
|
|
|
|
+ margin-top: 48px;
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ font-weight: 400;
|
|
|
|
+ color: #303133;
|
|
|
|
+
|
|
|
|
+ ::v-deep .el-input .el-input__inner {
|
|
|
|
+ background-color: #f5f7fa;
|
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
|
+ border-radius: 8px;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+.dialog-add-bottom {
|
|
|
|
+ margin-top: 48px;
|
|
|
|
+}
|
|
|
|
+</style>
|