|
|
@@ -7,29 +7,9 @@
|
|
|
<basicBorder title="触发条件设置">
|
|
|
<div class="edit-wrap">
|
|
|
<div class="edit-left">
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">规则名称 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.gzmc" placeholder="请输入" size="small" />
|
|
|
- </div>
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">报警级别 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.bjjb" placeholder="请输入" size="small" />
|
|
|
- </div>
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">温度阈值 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.wdyz" placeholder="请输入" size="small" />
|
|
|
- </div>
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">触发设备 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.cfsb" placeholder="请输入" size="small" />
|
|
|
- </div>
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">持续时间 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.time" placeholder="请输入" size="small" />
|
|
|
- </div>
|
|
|
- <div class="edit-item">
|
|
|
- <div class="item-label">时间范围 : </div>
|
|
|
- <a-input class="item-input" v-model:value="formData.sjfw" placeholder="请输入" size="small" />
|
|
|
+ <div class="edit-item" v-for="(field, index) in formFields" :key="index">
|
|
|
+ <div class="item-label">{{ field.label }} :</div>
|
|
|
+ <a-input class="item-input" v-model:value="formData[field.key]" placeholder="请输入" size="small" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="edit-right">
|
|
|
@@ -37,7 +17,7 @@
|
|
|
<div class="right-content">
|
|
|
<div class="right-item">IF 温度≥{{ formData.wdyz || 60 }}℃</div>
|
|
|
<div class="right-item">AND 持续时间≥{{ formData.time || 30 }}s</div>
|
|
|
- <div class="right-item">AND 设备状态-在线</div>
|
|
|
+ <div class="right-item">AND 设备状态=在线</div>
|
|
|
<div class="right-item">AND 时间在生效范围内</div>
|
|
|
<div class="right-item">THEN 执行联动动作</div>
|
|
|
<div class="right-item">【优先级:高】</div>
|
|
|
@@ -55,22 +35,22 @@
|
|
|
</div>
|
|
|
<div class="table-content">
|
|
|
<div class="content-item" v-for="(item, index) in tableData" :key="index">
|
|
|
- <div class="item-text">{{ item.indnex }}</div>
|
|
|
+ <div class="item-text">{{ item.index }}</div>
|
|
|
<div class="item-text item-text1">
|
|
|
<span>{{ item.actionType }}</span>
|
|
|
</div>
|
|
|
<div class="item-text">
|
|
|
- <span> {{ item.action }}</span>
|
|
|
+ <span>{{ item.action }}</span>
|
|
|
</div>
|
|
|
<div class="item-text">
|
|
|
- <div class="switch" :class="{ active: item.qy === 1 }">
|
|
|
+ <div class="switch" :class="{ active: item.qy === 1 }" @click="toggleSwitch(item)">
|
|
|
<div class="switch-dot"></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="item-text">{{ item.delayTime }}</div>
|
|
|
<div class="item-text">{{ item.duration }}</div>
|
|
|
<div class="item-text">
|
|
|
- <span class="text-look">查看</span>
|
|
|
+ <span class="text-look">配置</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -82,11 +62,12 @@
|
|
|
<div class="workflow-container">
|
|
|
<div class="steps-wrapper">
|
|
|
<div v-for="(step, index) in steps" :key="index" class="step-item">
|
|
|
- <div class="step-icon" :class="`icon-${step.id}`"></div>
|
|
|
- <div class="step-frame" :class="`frame-${step.id}`">
|
|
|
+ <div class="step-icon" :class="`icon-${step.id}`">
|
|
|
+ <span class="icon-inner"></span>
|
|
|
+ </div>
|
|
|
+ <div class="step-frame">
|
|
|
<span class="step-text">{{ step.name }}</span>
|
|
|
</div>
|
|
|
- <!-- 底部小圆点 -->
|
|
|
<div class="step-dot">
|
|
|
<div class="dot" :class="{ active: step.status === 1 }"></div>
|
|
|
</div>
|
|
|
@@ -101,69 +82,80 @@
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
import { reactive, ref, onMounted } from 'vue';
|
|
|
-import basicBorder from '../BasicBorder.vue';
|
|
|
-
|
|
|
-let titleList = ref<any[]>([
|
|
|
- { label: '序号', value: '1' },
|
|
|
- { label: '动作类型', value: '2' },
|
|
|
- { label: '动作说明', value: '3' },
|
|
|
- { label: '启用', value: '4' },
|
|
|
- { label: '延迟', value: '5' },
|
|
|
- { label: '持续', value: '6' },
|
|
|
- { label: '操作', value: '7' },
|
|
|
+import basicBorder from './basicBorder.vue';
|
|
|
+
|
|
|
+interface ITitleItem {
|
|
|
+ label: string;
|
|
|
+}
|
|
|
+
|
|
|
+interface IActionItem {
|
|
|
+ index: string;
|
|
|
+ actionType: string;
|
|
|
+ action: string;
|
|
|
+ qy: number;
|
|
|
+ delayTime: string;
|
|
|
+ duration: string;
|
|
|
+}
|
|
|
+
|
|
|
+interface IStepItem {
|
|
|
+ id: string;
|
|
|
+ name: string;
|
|
|
+ status: number;
|
|
|
+}
|
|
|
+
|
|
|
+interface IFormField {
|
|
|
+ label: string;
|
|
|
+ key: keyof typeof formData;
|
|
|
+}
|
|
|
+
|
|
|
+const titleList = ref<ITitleItem[]>([
|
|
|
+ { label: '序号' },
|
|
|
+ { label: '动作类型' },
|
|
|
+ { label: '动作说明' },
|
|
|
+ { label: '启用' },
|
|
|
+ { label: '延迟' },
|
|
|
+ { label: '持续' },
|
|
|
+ { label: '操作' },
|
|
|
]);
|
|
|
|
|
|
-let tableData = ref<any[]>([
|
|
|
- { indnex: '1', actionType: '声光报警器', action: '触发报警声+红色闪烁', qy: 1, delayTime: '0s', duration: '300s' },
|
|
|
- { indnex: '2', actionType: '声光报警器', action: '触发报警声', qy: 1, delayTime: '1s', duration: '200s' },
|
|
|
- { indnex: '3', actionType: '声光报警器', action: '红色闪烁', qy: 0, delayTime: '2s', duration: '180s' },
|
|
|
+const tableData = ref<IActionItem[]>([
|
|
|
+ { index: '1', actionType: '声光报警器', action: '触发报警声+红色闪烁', qy: 1, delayTime: '0s', duration: '300s' },
|
|
|
+ { index: '2', actionType: '声光报警器', action: '触发报警声', qy: 1, delayTime: '1s', duration: '200s' },
|
|
|
+ { index: '3', actionType: '声光报警器', action: '红色闪烁', qy: 0, delayTime: '2s', duration: '180s' },
|
|
|
]);
|
|
|
|
|
|
-// 流程图,添加 status 字段
|
|
|
-const steps = ref([
|
|
|
- { id: 'alarm', name: '报警触发', status: 0 },
|
|
|
+const steps = ref<IStepItem[]>([
|
|
|
+ { id: 'alarm', name: '报警触发', status: 1 },
|
|
|
{ id: 'condition', name: '条件判断', status: 0 },
|
|
|
{ id: 'search', name: '查找规则', status: 0 },
|
|
|
{ id: 'action', name: '执行动作', status: 0 },
|
|
|
{ id: 'log', name: '记录日志', status: 0 },
|
|
|
]);
|
|
|
|
|
|
-// 模拟接口请求获取步骤状态
|
|
|
-const fetchStepStatus = async () => {
|
|
|
- // 模拟 API 返回的数据,实际使用时替换为真实接口
|
|
|
- const apiResponse = {
|
|
|
- alarmTrigger: 1, // 报警触发为 1
|
|
|
- conditionJudge: 0, // 条件判断为 1
|
|
|
- searchRule: 0, // 查找规则为 0
|
|
|
- executeAction: 0, // 执行动作为 0
|
|
|
- recordLog: 0, // 记录日志为 0
|
|
|
- };
|
|
|
-
|
|
|
- // 根据接口返回数据更新状态
|
|
|
- steps.value[0].status = apiResponse.alarmTrigger;
|
|
|
- steps.value[1].status = apiResponse.conditionJudge;
|
|
|
- steps.value[2].status = apiResponse.searchRule;
|
|
|
- steps.value[3].status = apiResponse.executeAction;
|
|
|
- steps.value[4].status = apiResponse.recordLog;
|
|
|
-};
|
|
|
-let formData = reactive({
|
|
|
+const formFields: IFormField[] = [
|
|
|
+ { label: '规则名称', key: 'gzmc' },
|
|
|
+ { label: '报警级别', key: 'bjjb' },
|
|
|
+ { label: '温度阈值', key: 'wdyz' },
|
|
|
+ { label: '触发设备', key: 'cfsb' },
|
|
|
+ { label: '持续时间', key: 'time' },
|
|
|
+ { label: '时间范围', key: 'sjfw' },
|
|
|
+];
|
|
|
+
|
|
|
+const formData = reactive({
|
|
|
gzmc: '一级温度报警',
|
|
|
bjjb: '一级(严重)',
|
|
|
- wdyz: '50',
|
|
|
+ wdyz: '60',
|
|
|
cfsb: '声光报警',
|
|
|
- time: '≥35',
|
|
|
+ time: '≥30',
|
|
|
sjfw: '值班人员',
|
|
|
});
|
|
|
-// const formData = ref({
|
|
|
-// gzmc: '',
|
|
|
-// bjjb: '',
|
|
|
-// wdyz: '',
|
|
|
-// cfsb: '',
|
|
|
-// time: '',
|
|
|
-// sjfw: '',
|
|
|
-// });
|
|
|
+
|
|
|
+function toggleSwitch(item: IActionItem) {
|
|
|
+ item.qy = item.qy === 1 ? 0 : 1;
|
|
|
+}
|
|
|
+
|
|
|
onMounted(() => {
|
|
|
- fetchStepStatus();
|
|
|
+ // 模拟流程状态
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
@@ -172,11 +164,6 @@ onMounted(() => {
|
|
|
|
|
|
.long-list1 {
|
|
|
--image-box-bg: url('@/assets/images/home-container/configurable/hsq/2-5.png');
|
|
|
- --image-box-bg1: url('@/assets/images/home-container/configurable/hsq/2-13.png');
|
|
|
- --image-box-bg2: url('@/assets/images/home-container/configurable/hsq/2-14.png');
|
|
|
- --image-box-bg3: url('@/assets/images/home-container/configurable/hsq/2-15.png');
|
|
|
- --image-box-bg4: url('@/assets/images/home-container/configurable/hsq/2-16.png');
|
|
|
- --image-box-bg5: url('@/assets/images/home-container/configurable/hsq/2-17.png');
|
|
|
--image-box-bg6: url('@/assets/images/home-container/configurable/hsq/2-24.png');
|
|
|
|
|
|
position: relative;
|
|
|
@@ -186,22 +173,50 @@ onMounted(() => {
|
|
|
box-sizing: border-box;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
+
|
|
|
.item-input {
|
|
|
background: transparent !important;
|
|
|
background: linear-gradient(to right, #114469, #0b2542) !important;
|
|
|
color: #fff;
|
|
|
border: 1px solid #2690c1 !important;
|
|
|
border-radius: 5px;
|
|
|
+ box-shadow: none !important;
|
|
|
+
|
|
|
&:hover,
|
|
|
&:focus {
|
|
|
background: transparent !important;
|
|
|
}
|
|
|
- box-shadow: none !important;
|
|
|
}
|
|
|
- .basic-box1,
|
|
|
+
|
|
|
+ .basic-box {
|
|
|
+ flex: 1.2;
|
|
|
+ min-height: 0;
|
|
|
+
|
|
|
+ :deep(.basic-border) {
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .basic-box1 {
|
|
|
+ flex: 0.85;
|
|
|
+ min-height: 0;
|
|
|
+ margin-top: 10px;
|
|
|
+
|
|
|
+ :deep(.basic-border) {
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
.basic-box2 {
|
|
|
+ flex: 0.85;
|
|
|
+ min-height: 0;
|
|
|
margin-top: 10px;
|
|
|
+
|
|
|
+ :deep(.basic-border) {
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
.edit-wrap {
|
|
|
display: flex;
|
|
|
width: 100%;
|
|
|
@@ -209,6 +224,7 @@ onMounted(() => {
|
|
|
gap: 10px;
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
+
|
|
|
.edit-left {
|
|
|
flex: 1;
|
|
|
display: flex;
|
|
|
@@ -225,16 +241,15 @@ onMounted(() => {
|
|
|
margin-bottom: 10px;
|
|
|
padding: 0 10px;
|
|
|
box-sizing: border-box;
|
|
|
- &:last-child {
|
|
|
- margin-bottom: 10px;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
.item-label {
|
|
|
width: 80px;
|
|
|
text-align: right;
|
|
|
margin-right: 5px;
|
|
|
+ flex-shrink: 0;
|
|
|
}
|
|
|
+
|
|
|
.edit-right {
|
|
|
background: #0e395d;
|
|
|
width: 50%;
|
|
|
@@ -272,21 +287,26 @@ onMounted(() => {
|
|
|
line-height: 25px;
|
|
|
font-weight: bold;
|
|
|
padding: 0 5px;
|
|
|
+
|
|
|
+ &:nth-child(1) {
|
|
|
+ color: #fc002a;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(2),
|
|
|
+ &:nth-child(3),
|
|
|
+ &:nth-child(4) {
|
|
|
+ color: #29a1d4;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(5) {
|
|
|
+ color: #46e8a3;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:nth-child(6) {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
}
|
|
|
- .right-item:nth-child(1) {
|
|
|
- color: #fc002a;
|
|
|
- }
|
|
|
- .right-item:nth-child(2),
|
|
|
- .right-item:nth-child(3),
|
|
|
- .right-item:nth-child(4) {
|
|
|
- color: #29a1d4;
|
|
|
- }
|
|
|
- .right-item:nth-child(5) {
|
|
|
- color: #46e8a3;
|
|
|
- }
|
|
|
- .right-item:nth-child(6) {
|
|
|
- margin-top: 10px;
|
|
|
- }
|
|
|
+
|
|
|
.list-title {
|
|
|
width: 177px;
|
|
|
height: 30px;
|
|
|
@@ -298,17 +318,13 @@ onMounted(() => {
|
|
|
background: var(--image-box-bg) no-repeat;
|
|
|
background-size: 80% 100%;
|
|
|
margin-bottom: 5px;
|
|
|
+ flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
.basic-table {
|
|
|
height: 100%;
|
|
|
}
|
|
|
|
|
|
- .item-label1 {
|
|
|
- width: 105px;
|
|
|
- text-align: right;
|
|
|
- margin-right: 5px;
|
|
|
- }
|
|
|
.table-title {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
@@ -332,15 +348,21 @@ onMounted(() => {
|
|
|
.table-content {
|
|
|
height: calc(100% - 40px);
|
|
|
overflow-y: auto;
|
|
|
+
|
|
|
+ &::-webkit-scrollbar {
|
|
|
+ display: none;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.content-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
height: 36px;
|
|
|
+
|
|
|
&:nth-child(odd) {
|
|
|
background-color: #0e3455;
|
|
|
}
|
|
|
+
|
|
|
&:nth-child(even) {
|
|
|
background-color: #114268;
|
|
|
}
|
|
|
@@ -360,9 +382,6 @@ onMounted(() => {
|
|
|
.item-text1 {
|
|
|
color: #fc002a;
|
|
|
}
|
|
|
- .item-text2 {
|
|
|
- color: orange;
|
|
|
- }
|
|
|
|
|
|
.switch {
|
|
|
width: 36px;
|
|
|
@@ -373,6 +392,7 @@ onMounted(() => {
|
|
|
transition: all 0.2s ease;
|
|
|
cursor: pointer;
|
|
|
border: 1px solid #35d9e5;
|
|
|
+
|
|
|
.switch-dot {
|
|
|
width: 14px;
|
|
|
height: 14px;
|
|
|
@@ -383,9 +403,10 @@ onMounted(() => {
|
|
|
left: 1px;
|
|
|
transition: all 0.2s ease;
|
|
|
}
|
|
|
- }
|
|
|
- .switch.active .switch-dot {
|
|
|
- left: 20px;
|
|
|
+
|
|
|
+ &.active .switch-dot {
|
|
|
+ left: 20px;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.text-look {
|
|
|
@@ -394,20 +415,24 @@ onMounted(() => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-/*流程图*/
|
|
|
.workflow-container {
|
|
|
width: 100%;
|
|
|
- padding: 20px 0;
|
|
|
+ height: 100%;
|
|
|
+ padding: 10px 0;
|
|
|
position: relative;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
}
|
|
|
|
|
|
.steps-wrapper {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: flex-end;
|
|
|
+ width: 100%;
|
|
|
padding: 0 20px;
|
|
|
position: relative;
|
|
|
z-index: 2;
|
|
|
+
|
|
|
&::before {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
@@ -419,6 +444,7 @@ onMounted(() => {
|
|
|
background: #4a9eff;
|
|
|
z-index: 1;
|
|
|
}
|
|
|
+
|
|
|
&::after {
|
|
|
content: '';
|
|
|
position: absolute;
|
|
|
@@ -430,6 +456,7 @@ onMounted(() => {
|
|
|
background: #4a9eff;
|
|
|
z-index: 1;
|
|
|
}
|
|
|
+
|
|
|
.steps-arrow {
|
|
|
position: absolute;
|
|
|
left: 5%;
|
|
|
@@ -440,10 +467,12 @@ onMounted(() => {
|
|
|
background: url('@/assets/images/home-container/configurable/hsq/arrow.svg') center / contain no-repeat;
|
|
|
z-index: 2;
|
|
|
}
|
|
|
+
|
|
|
.step-item:first-child .steps-arrow {
|
|
|
display: none;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
.step-item {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
@@ -455,26 +484,62 @@ onMounted(() => {
|
|
|
.step-icon {
|
|
|
width: 56px;
|
|
|
height: 56px;
|
|
|
- background-size: contain;
|
|
|
- background-repeat: no-repeat;
|
|
|
- background-position: center;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
margin-bottom: -6px;
|
|
|
-}
|
|
|
+ position: relative;
|
|
|
|
|
|
-.icon-alarm {
|
|
|
- background-image: url('@/assets/images/home-container/configurable/hsq/bjcf.png');
|
|
|
-}
|
|
|
-.icon-condition {
|
|
|
- background-image: url('@/assets/images/home-container/configurable/hsq/tjpd.png');
|
|
|
-}
|
|
|
-.icon-search {
|
|
|
- background-image: url('@/assets/images/home-container/configurable/hsq/czgz.png');
|
|
|
-}
|
|
|
-.icon-action {
|
|
|
- background-image: url('@/assets/images/home-container/configurable/hsq/zxdz.png');
|
|
|
+ .icon-inner {
|
|
|
+ width: 36px;
|
|
|
+ height: 36px;
|
|
|
+ border: 2px solid #4facfe;
|
|
|
+ transform: rotate(45deg);
|
|
|
+ background: linear-gradient(135deg, rgba(20, 80, 140, 0.9), rgba(10, 40, 80, 0.9));
|
|
|
+ box-shadow: 0 0 12px rgba(79, 172, 254, 0.5);
|
|
|
+ position: relative;
|
|
|
+
|
|
|
+ &::after {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ inset: 6px;
|
|
|
+ border: 1px solid rgba(79, 172, 254, 0.6);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &.icon-alarm .icon-inner {
|
|
|
+ background: linear-gradient(135deg, rgba(180, 40, 40, 0.8), rgba(80, 20, 20, 0.9));
|
|
|
+ border-color: #ff6b6b;
|
|
|
+ box-shadow: 0 0 12px rgba(255, 77, 77, 0.5);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.icon-condition .icon-inner {
|
|
|
+ background: linear-gradient(135deg, rgba(30, 100, 160, 0.9), rgba(15, 50, 90, 0.9));
|
|
|
+ }
|
|
|
+
|
|
|
+ &.icon-search .icon-inner {
|
|
|
+ background: linear-gradient(135deg, rgba(40, 120, 100, 0.9), rgba(20, 60, 50, 0.9));
|
|
|
+ border-color: #46e8a3;
|
|
|
+ box-shadow: 0 0 12px rgba(70, 232, 163, 0.4);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.icon-action .icon-inner {
|
|
|
+ background: linear-gradient(135deg, rgba(160, 100, 30, 0.9), rgba(80, 50, 15, 0.9));
|
|
|
+ border-color: #ffa500;
|
|
|
+ box-shadow: 0 0 12px rgba(255, 165, 0, 0.4);
|
|
|
+ }
|
|
|
+
|
|
|
+ &.icon-log .icon-inner {
|
|
|
+ background: linear-gradient(135deg, rgba(60, 80, 160, 0.9), rgba(30, 40, 80, 0.9));
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+.icon-alarm,
|
|
|
+.icon-condition,
|
|
|
+.icon-search,
|
|
|
+.icon-action,
|
|
|
.icon-log {
|
|
|
- background-image: url('@/assets/images/home-container/configurable/hsq/jlrz.png');
|
|
|
+ background-image: none;
|
|
|
}
|
|
|
|
|
|
.step-frame {
|
|
|
@@ -519,10 +584,11 @@ onMounted(() => {
|
|
|
background: #2c5a8c;
|
|
|
border: 1px solid #4a9eff;
|
|
|
transition: all 0.3s ease;
|
|
|
+
|
|
|
+ &.active {
|
|
|
+ background: #4facfe;
|
|
|
+ border-color: #4facfe;
|
|
|
+ box-shadow: 0 0 6px rgba(79, 172, 254, 0.6);
|
|
|
+ }
|
|
|
}
|
|
|
-.dot.active {
|
|
|
- background: #4facfe;
|
|
|
- border-color: #4facfe;
|
|
|
- box-shadow: 0 0 6px rgba(79, 172, 254, 0.6);
|
|
|
-}
|
|
|
-</style>
|
|
|
+</style>
|