|
@@ -1,221 +1,289 @@
|
|
|
<template>
|
|
|
- <!-- 一维瓦斯爆炸弹出列表-->
|
|
|
- <div>
|
|
|
- <el-dialog v-model="expdialog"
|
|
|
- width="1100"
|
|
|
- align-center
|
|
|
- draggable
|
|
|
- :modal="false"
|
|
|
- :append-to-body="true"
|
|
|
- :close-on-click-modal="true"
|
|
|
- :fullscreen="false"
|
|
|
- :modal-append-to-body="false"
|
|
|
- modal-class="summary-dlg"
|
|
|
+ <div id="expleft1" style="width:750px;height:500px;position: absolute;z-index: 9999999;">
|
|
|
+ <h1>1212</h1>
|
|
|
+ </div>
|
|
|
+ <!-- 一维瓦斯爆炸弹出列表-->
|
|
|
+
|
|
|
+</template>
|
|
|
+ <script setup>
|
|
|
+import zhCn from "element-plus/es/locale/lang/zh-cn"
|
|
|
+import { ref, onMounted, reactive } from "vue"
|
|
|
+import { RouterView, RouterLink } from "vue-router"
|
|
|
+import { request, uploadFile } from "@/utils/request"
|
|
|
+import { ElMessage, ElButton, ElDialog, ElSelect } from "element-plus"
|
|
|
+import { createGassControl } from "@/control/gassControl.js"
|
|
|
+import t1 from "@/assets/img/t1.png"
|
|
|
+import t2 from "@/assets/img/t2.png"
|
|
|
+import t3 from "@/assets/img/t3.png"
|
|
|
+import t4 from "@/assets/img/t4.png"
|
|
|
|
|
|
- class="dialog_class4 bgcolor tianjia foter_l tianjia">
|
|
|
- <template #header="{ titleId, titleClass }">
|
|
|
- <div class="my-header ">
|
|
|
- <!-- <el-image :src="icon" fit="contain"></el-image> -->
|
|
|
- <h4 :id="titleId" :class="titleClass">一维瓦斯爆炸演化</h4>
|
|
|
+import * as d3 from "d3-scale";
|
|
|
+import { formatDefaultLocale } from "d3-format";
|
|
|
+import vtkGenericRenderWindow from '@kitware/vtk.js/Rendering/Misc/GenericRenderWindow';
|
|
|
+import vtkRenderWindowWithControlBar from "@kitware/vtk.js/Rendering/Misc/RenderWindowWithControlBar";
|
|
|
+import vtkActor from "@kitware/vtk.js/Rendering/Core/Actor";
|
|
|
+import vtkConeSource from "@kitware/vtk.js/Filters/Sources/ConeSource";
|
|
|
+import vtkMapper from "@kitware/vtk.js/Rendering/Core/Mapper";
|
|
|
+import { Representation } from "@kitware/vtk.js/Rendering/Core/Property/Constants";
|
|
|
+import vtkScalarBarActor from "@kitware/vtk.js/Rendering/Core/ScalarBarActor";
|
|
|
+import vtkColorTransferFunction from "@kitware/vtk.js/Rendering/Core/ColorTransferFunction";
|
|
|
+import vtkDataArray from "@kitware/vtk.js/Common/Core/DataArray.js";
|
|
|
+import vtkLight from "@kitware/vtk.js/Rendering/Core/Light";
|
|
|
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div class="exp">
|
|
|
- <div class="expleft"></div>
|
|
|
- <div class="expright">
|
|
|
- <!-- 物理量 -->
|
|
|
- <div class="heigjie imgneon">
|
|
|
- <div class="he_pading1 color1">
|
|
|
- <el-form-item label="物理量:" >
|
|
|
- <el-config-provider :locale="zhCn">
|
|
|
- <el-select v-model="formInline.region" @change="regionchange($event)" placeholder="请选择">
|
|
|
- <el-option v-for="item in strResultFormatlist" :key="item.id" :label="item.name"
|
|
|
- :value="item.value"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-config-provider>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 动画 -->
|
|
|
- <el-aside class="L_aside L_aside1 asideg asidegbg leftbgimg1" >
|
|
|
- <div class="demo-collapse jiance asideg1 jc_header collapseeion jianstyle">
|
|
|
- <el-collapse accordion v-model="activeNames1" class="bganimation">
|
|
|
- <el-collapse-item name="2" class="imgneon">
|
|
|
- <template #title>
|
|
|
- <el-icon class="iconimg Frame3" fit="contain"></el-icon>
|
|
|
- 动画展示
|
|
|
- </template>
|
|
|
- <div class="rg_content">
|
|
|
- <div class="rg-padding">
|
|
|
- <div class="animation_s">
|
|
|
- <el-slider
|
|
|
- :max="endtime"
|
|
|
- :min="1"
|
|
|
- v-model="count"
|
|
|
- @change="sliderchange"
|
|
|
- >
|
|
|
- </el-slider>
|
|
|
- <div class="tanniu">
|
|
|
- <div><el-image :src="t1" fit="contain" @click="Prev" ></el-image></div>
|
|
|
- <div v-show="suspendshow"><el-image :src="t2" fit="contain" @click="play(500)" ></el-image></div>
|
|
|
- <div v-show="playshow"><el-image :src="t3" fit="contain" @click="play(500)" ></el-image></div>
|
|
|
- <div><el-image :src="t4" fit="contain" @click="increment"></el-image></div>
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- <div class="mgsnoe" style="height: 200px"></div> -->
|
|
|
- </el-collapse-item>
|
|
|
- </el-collapse>
|
|
|
- </div>
|
|
|
- </el-aside>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div class="dialog-footer footer_div l_btn">
|
|
|
- <div class="footerbtn flex1">
|
|
|
- <div class="borderimg"><el-button @click="expdialog = false">取消</el-button></div>
|
|
|
- </div>
|
|
|
- <div class="footerbtn flex1">
|
|
|
- <div class="borderimg"><el-button >
|
|
|
- 确定
|
|
|
- </el-button></div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <script setup>
|
|
|
- import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
|
|
-import { ref, onMounted, reactive, } from "vue";
|
|
|
-import {RouterView,RouterLink } from "vue-router"
|
|
|
-import { request, uploadFile } from "@/utils/request";
|
|
|
-import { ElMessage, ElButton, ElDialog, ElSelect } from 'element-plus'
|
|
|
-import { createGassControl } from "@/control/gassControl.js";
|
|
|
-import t1 from "@/assets/img/t1.png";
|
|
|
-import t2 from "@/assets/img/t2.png";
|
|
|
-import t3 from "@/assets/img/t3.png";
|
|
|
-import t4 from "@/assets/img/t4.png";
|
|
|
const props = defineProps({
|
|
|
- aid: Number,
|
|
|
-});
|
|
|
-let expdialog=ref(false);
|
|
|
-const strResultFormatlist = ref([]);
|
|
|
+ aid: Number
|
|
|
+})
|
|
|
+let expdialog = ref(false)
|
|
|
+const strResultFormatlist = ref([])
|
|
|
const formInline = ref({
|
|
|
- user: '11',
|
|
|
- region: '',
|
|
|
- date: '',
|
|
|
-
|
|
|
+ user: "11",
|
|
|
+ region: "",
|
|
|
+ date: ""
|
|
|
})
|
|
|
-let currentrow1 = ref(false);
|
|
|
-let activeNames1=ref(["2"])
|
|
|
-let starttime = ref(1);
|
|
|
-let endtime = ref(60);
|
|
|
-let count=ref(1);
|
|
|
-let newcount = ref(0);
|
|
|
-let timenum = ref(2);
|
|
|
-let playshow=ref(true);
|
|
|
-const isstop = ref(false);
|
|
|
-let suspendshow=ref(false);
|
|
|
-let showfalse=ref(false);
|
|
|
-let aid=ref();
|
|
|
-const fcon = createGassControl();
|
|
|
+let currentrow1 = ref(false)
|
|
|
+let activeNames1 = ref(["2"])
|
|
|
+let starttime = ref(1)
|
|
|
+let endtime = ref(60)
|
|
|
+let count = ref(1)
|
|
|
+let newcount = ref(0)
|
|
|
+let timenum = ref(2)
|
|
|
+let playshow = ref(true)
|
|
|
+const isstop = ref(false)
|
|
|
+let suspendshow = ref(false)
|
|
|
+let showfalse = ref(false)
|
|
|
+let aid = ref()
|
|
|
+let vtkObj = {}
|
|
|
+let max, min;
|
|
|
onMounted(() => {
|
|
|
-fcon.step=count.value;
|
|
|
-});
|
|
|
+ const rootContainer = document.getElementById("expleft1")
|
|
|
+ // rootContainer.style.position = "relative"
|
|
|
+ // rootContainer.style.width = "100%"
|
|
|
+ // rootContainer.style.height = "100%"
|
|
|
+ vtkObj.renderWindow = vtkGenericRenderWindow.newInstance()
|
|
|
+ vtkObj.renderWindow.setContainer(rootContainer)
|
|
|
+ vtkObj.jgMapper = vtkMapper.newInstance()
|
|
|
+ vtkObj.jgActor = vtkActor.newInstance()
|
|
|
+ vtkObj.jgActor.getProperty().setRepresentation(Representation.SURFACE) //面
|
|
|
+ vtkObj.jgActor.setMapper(vtkObj.jgMapper)
|
|
|
+ // vtkObj.renderWindow.getRenderer().addActor(vtkObj.jgActor);
|
|
|
+ vtkObj.renderWindow.getRenderer().setBackground(0.0, 0.0, 0.0, 0.0)
|
|
|
+
|
|
|
+ vtkObj.scalarBarActor = vtkScalarBarActor.newInstance()
|
|
|
+ vtkObj.scalarBarActor.setGenerateTicks(generateTicks(5))
|
|
|
+ vtkObj.scalarBarActor.setDrawAboveRangeSwatch(true)
|
|
|
+ vtkObj.scalarBarActor.setDrawNanAnnotation(false)
|
|
|
+ vtkObj.scalarBarActor.setBoxPosition([1, 0])
|
|
|
+ // 修改设条颜色
|
|
|
+ const ctf = vtkColorTransferFunction.newInstance()
|
|
|
+ ctf.addRGBPoint(0.0, 0, 1, 154 / 255.0)
|
|
|
+ ctf.addRGBPoint(1.0, 1.0, 165.0 / 255.0, 0.0)
|
|
|
+ ctf.addRGBPoint(2.0, 230 / 255.0, 0.0, 92.0 / 225.0)
|
|
|
+ vtkObj.jgMapper.setLookupTable(ctf)
|
|
|
+ const lut = vtkObj.jgMapper.getLookupTable()
|
|
|
+ vtkObj.scalarBarActor.setScalarsToColors(lut)
|
|
|
+ vtkObj.renderWindow.resize()
|
|
|
+ // vtkObj.renderWindow.getRenderer().addActor(vtkObj.scalarBarActor);
|
|
|
+ // vtkGridRead(props.aid);
|
|
|
+ // vtkObj.renderWindow.getRenderer().resetCamera();
|
|
|
+ // vtkObj.renderWindow.getRenderWindow().render();
|
|
|
+ // 设置环境光和光照
|
|
|
+ const light = vtkLight.newInstance()
|
|
|
+ light.setColor(1.0, 1.0, 1.0) // 白色环境光
|
|
|
+ light.setIntensity(3.0) // 强度为1.0
|
|
|
+ vtkObj.renderWindow.getRenderer().addLight(light)
|
|
|
+})
|
|
|
+function initVtk(){
|
|
|
+
|
|
|
+}
|
|
|
+function generateTicks(numberOfTicks) {
|
|
|
+ return (helper) => {
|
|
|
+ const lastTickBounds = helper.getLastTickBounds()
|
|
|
+ // compute tick marks for axes
|
|
|
+ const scale = d3
|
|
|
+ .scaleLinear()
|
|
|
+ .domain([0.0, 1.0])
|
|
|
+ .range([lastTickBounds[0], lastTickBounds[1]])
|
|
|
+ const samples = scale.ticks(numberOfTicks)
|
|
|
+ const ticks = samples.map((tick) => scale(tick))
|
|
|
+ // Replace minus "\u2212" with hyphen-minus "\u002D" so that parseFloat() works
|
|
|
+ formatDefaultLocale({ minus: "\u002D" })
|
|
|
+ const format = scale.tickFormat(
|
|
|
+ ticks[0],
|
|
|
+ ticks[ticks.length - 1],
|
|
|
+ numberOfTicks
|
|
|
+ )
|
|
|
+ const tickStrings = ticks
|
|
|
+ .map(format)
|
|
|
+ .map((tick) => Number(parseFloat(tick).toPrecision(12)).toPrecision()) // d3 sometimes adds unwanted whitespace
|
|
|
+ helper.setTicks(ticks)
|
|
|
+ helper.setTickStrings(tickStrings)
|
|
|
+ }
|
|
|
+}
|
|
|
+function vtkShow() {
|
|
|
+ console.log("执行了")
|
|
|
+ const scalarBarActor = vtkObj.scalarBarActor
|
|
|
+ const mapper = vtkObj.jgMapper
|
|
|
+ const actor = vtkObj.jgActor
|
|
|
+ const fcon = vtkObj.fcon
|
|
|
+ // console.log(props.region)
|
|
|
+ const scalarArray = fcon.scalar.get("Pressure")
|
|
|
+ if (!scalarArray || !fcon.polydata) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // console.log("scalarArray:", scalarArray);
|
|
|
+ const dataArray = vtkDataArray.newInstance({
|
|
|
+ name: "Pressure",
|
|
|
+ size: fcon.polydata.getNumberOfPoints()
|
|
|
+ })
|
|
|
+ // console.log(dataArray);
|
|
|
+ dataArray.setData(scalarArray)
|
|
|
+ fcon.polydata.getPointData().setScalars(dataArray)
|
|
|
+ mapper.setInputData(fcon.polydata)
|
|
|
+ getMinMax(scalarArray)
|
|
|
+ mapper.setScalarRange(parseFloat(min.toFixed(3)), parseFloat(max.toFixed(3))) //设置范围
|
|
|
+ scalarBarActor.setAxisLabel("Pressure")
|
|
|
+
|
|
|
+ mapper.clearColorArrays() //强制重建颜色
|
|
|
+ actor.getProperty().setOpacity(props.count) //设置错误的透明度使得页面重新加载 不设置不刷新页面
|
|
|
+ // vtkmodel.renderer.resetCamera();
|
|
|
+
|
|
|
+ vtkObj.renderWindow.getRenderer().addActor(scalarBarActor)
|
|
|
+ vtkObj.renderWindow.getRenderer().addActor(actor)
|
|
|
+
|
|
|
+ vtkObj.renderWindow.getRenderer().resetCamera();
|
|
|
+ vtkObj.renderWindow.getRenderWindow().render();
|
|
|
+
|
|
|
+}
|
|
|
+function getMinMax(scalars) {
|
|
|
+ // console.log("getMinMax:",scalars);
|
|
|
+ min = scalars[0]
|
|
|
+ max = scalars[0]
|
|
|
+ for (let index = 0; index <= scalars.length; index++) {
|
|
|
+ let scalar = scalars[index]
|
|
|
+ if (min > scalar) {
|
|
|
+ min = scalar
|
|
|
+ }
|
|
|
+ if (max < scalar) {
|
|
|
+ max = scalar
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // console.log("max,min:", max.value, min.value);
|
|
|
+}
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ vtkObj.scalarBarActor.delete()
|
|
|
+ vtkObj.jgMapper.delete()
|
|
|
+ vtkObj.jgActor.delete()
|
|
|
+ vtkObj.renderWindow.delete()
|
|
|
+ vtkObj = null
|
|
|
+})
|
|
|
// 播放暂停
|
|
|
-const play =(time)=>{
|
|
|
- showfalse.value=!showfalse.value;
|
|
|
- currentrow1.value=false;
|
|
|
- if(showfalse.value){
|
|
|
- suspendshow.value=true;
|
|
|
- playshow.value=false;
|
|
|
- isstop.value = true;//播放
|
|
|
- const sleep = (timeout = time) =>
|
|
|
- new Promise((resolve, reject) => {
|
|
|
- setTimeout(resolve, timeout);
|
|
|
- });
|
|
|
- let timer = async (timeout) => {
|
|
|
- while (count.value < endtime.value && isstop.value) {
|
|
|
- if (isstop.value == true) {
|
|
|
- await sleep(time);
|
|
|
- count.value++;
|
|
|
- fcon.step = count.value;
|
|
|
- newcount.value = count.value;
|
|
|
- // newtime();
|
|
|
+const play = (time) => {
|
|
|
+ showfalse.value = !showfalse.value
|
|
|
+ currentrow1.value = false
|
|
|
+ if (showfalse.value) {
|
|
|
+ suspendshow.value = true
|
|
|
+ playshow.value = false
|
|
|
+ isstop.value = true //播放
|
|
|
+ const sleep = (timeout = time) =>
|
|
|
+ new Promise((resolve, reject) => {
|
|
|
+ setTimeout(resolve, timeout)
|
|
|
+ })
|
|
|
+ let timer = async (timeout) => {
|
|
|
+ while (count.value < endtime.value && isstop.value) {
|
|
|
+ if (isstop.value == true) {
|
|
|
+ await sleep(time)
|
|
|
+ count.value++
|
|
|
+ fcon.step = count.value
|
|
|
+ newcount.value = count.value
|
|
|
+ // newtime();
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- };
|
|
|
|
|
|
- timer(time);
|
|
|
- }else{
|
|
|
- isstop.value = false;//暂停
|
|
|
- playshow.value=true;
|
|
|
- suspendshow.value=false;
|
|
|
-}
|
|
|
+ timer(time)
|
|
|
+ } else {
|
|
|
+ isstop.value = false //暂停
|
|
|
+ playshow.value = true
|
|
|
+ suspendshow.value = false
|
|
|
+ }
|
|
|
}
|
|
|
// 下一页
|
|
|
function increment() {
|
|
|
- currentrow1.value=false;
|
|
|
- isstop.value = false;
|
|
|
+ currentrow1.value = false
|
|
|
+ isstop.value = false
|
|
|
if (count.value == endtime.value) {
|
|
|
- return;
|
|
|
+ return
|
|
|
}
|
|
|
- count.value++;
|
|
|
- newcount.value = count.value;
|
|
|
- fcon.step = count.value;
|
|
|
+ count.value++
|
|
|
+ newcount.value = count.value
|
|
|
+ fcon.step = count.value
|
|
|
//newtime();
|
|
|
}
|
|
|
//回到上一页
|
|
|
function Prev() {
|
|
|
- currentrow1.value=false;
|
|
|
- isstop.value = false;
|
|
|
- count.value--;
|
|
|
- fcon.step = count.value;
|
|
|
- newcount.value = count.value;
|
|
|
+ currentrow1.value = false
|
|
|
+ isstop.value = false
|
|
|
+ count.value--
|
|
|
+ fcon.step = count.value
|
|
|
+ newcount.value = count.value
|
|
|
//newtime();
|
|
|
}
|
|
|
// 时间计算
|
|
|
const newtime = () => {
|
|
|
- timeshow.value=true;
|
|
|
- time.value = null;
|
|
|
- oldtime.value= sessionStorage.getItem('acctime');
|
|
|
- console.log(oldtime.value);
|
|
|
- time.value = (new Date(oldtime.value).getTime()) / 1000;
|
|
|
- if ( count.value == 2) {
|
|
|
- let time2 = (count.value - 1) * 60 + time.value;
|
|
|
- timeline.value = timescount(time2);
|
|
|
+ timeshow.value = true
|
|
|
+ time.value = null
|
|
|
+ oldtime.value = sessionStorage.getItem("acctime")
|
|
|
+ console.log(oldtime.value)
|
|
|
+ time.value = new Date(oldtime.value).getTime() / 1000
|
|
|
+ if (count.value == 2) {
|
|
|
+ let time2 = (count.value - 1) * 60 + time.value
|
|
|
+ timeline.value = timescount(time2)
|
|
|
} else {
|
|
|
- let time2 = (count.value) * 60 + time.value;
|
|
|
- timeline.value = timescount(time2);
|
|
|
+ let time2 = count.value * 60 + time.value
|
|
|
+ timeline.value = timescount(time2)
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-};
|
|
|
+}
|
|
|
function sliderchange(val) {
|
|
|
- suspendshow.value=false;
|
|
|
- playshow.value=true;
|
|
|
- isstop.value = false;
|
|
|
- newcount.value = count.value;
|
|
|
- fcon.step = count.value;
|
|
|
-
|
|
|
+ suspendshow.value = false
|
|
|
+ playshow.value = true
|
|
|
+ isstop.value = false
|
|
|
+ newcount.value = count.value
|
|
|
+ fcon.step = count.value
|
|
|
}
|
|
|
function vtkGridRead() {
|
|
|
- aid.value=props.aid
|
|
|
- fcon.aid = aid.value;
|
|
|
- console.log(fcon.aid)
|
|
|
+ initVtk();
|
|
|
+ vtkObj.fcon = createGassControl()
|
|
|
+ const fcon = vtkObj.fcon
|
|
|
+ aid.value = props.aid
|
|
|
+ fcon.step = count.value
|
|
|
+ fcon.aid = aid.value
|
|
|
+ const params = {
|
|
|
+ transCode: "D40003",
|
|
|
+ aid: aid.value
|
|
|
+ }
|
|
|
+ request(params).then((res) => {
|
|
|
+ endtime.value = res.steps
|
|
|
+ fcon
|
|
|
+ .initGemetry(aid.value)
|
|
|
+ .then((result) => {
|
|
|
+ console.log(fcon.polydata)
|
|
|
+ vtkScalarRead(count.value) //步数
|
|
|
+ })
|
|
|
+ .catch((err) => {})
|
|
|
+ .catch((err) => {})
|
|
|
+ })
|
|
|
+}
|
|
|
+function vtkScalarRead(step) {
|
|
|
+ const fcon = vtkObj.fcon
|
|
|
fcon
|
|
|
- .initGemetry(aid.value)
|
|
|
+ .getScalrsByStep(step)
|
|
|
.then((result) => {
|
|
|
- console.log(result);
|
|
|
- fcon
|
|
|
- .getScalrsByStep(fcon.step)
|
|
|
- vtkmodel.renderWindowWith.resize();
|
|
|
+ console.log(fcon.scalar)
|
|
|
+ vtkShow()
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ console.log(err)
|
|
|
})
|
|
|
- .catch((err) => {});
|
|
|
}
|
|
|
|
|
|
// watch(
|
|
@@ -224,7 +292,7 @@ function vtkGridRead() {
|
|
|
// fcon.step = newVal;
|
|
|
// getMonitor();
|
|
|
// vtkScalarRead();
|
|
|
-
|
|
|
+
|
|
|
// // vtkScalarRead();
|
|
|
// if( newVal>=endtime.value){
|
|
|
// playshow.value=true;
|
|
@@ -232,39 +300,45 @@ function vtkGridRead() {
|
|
|
// isstop.value = false;
|
|
|
// }
|
|
|
// },
|
|
|
-
|
|
|
+
|
|
|
// { deep: true }
|
|
|
// ); //深度监视
|
|
|
|
|
|
-
|
|
|
- defineExpose({expdialog,vtkGridRead});
|
|
|
- </script>
|
|
|
+defineExpose({ expdialog, vtkGridRead })
|
|
|
+</script>
|
|
|
<style lang="scss" scoped>
|
|
|
-.exp{
|
|
|
-
|
|
|
- display: flex;
|
|
|
- .expleft{
|
|
|
- width: 68%;
|
|
|
- border-radius: 0px 0px 0px 0px;
|
|
|
+.exp {
|
|
|
+ display: flex;
|
|
|
+ .expleft {
|
|
|
+ width: 68%;
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
border: 1px solid;
|
|
|
- border-image: linear-gradient(180deg, rgba(31, 107, 255, 1), rgba(31, 107, 255, 0.48)) 1 1;
|
|
|
+ border-image: linear-gradient(
|
|
|
+ 180deg,
|
|
|
+ rgba(31, 107, 255, 1),
|
|
|
+ rgba(31, 107, 255, 0.48)
|
|
|
+ )
|
|
|
+ 1 1;
|
|
|
box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
|
|
|
- margin-right: 2%;
|
|
|
- }
|
|
|
- .expright{
|
|
|
- padding: 10px;
|
|
|
- width: 30%;
|
|
|
- border-radius: 0px 0px 0px 0px;
|
|
|
+ margin-right: 2%;
|
|
|
+ }
|
|
|
+ .expright {
|
|
|
+ padding: 10px;
|
|
|
+ width: 30%;
|
|
|
+ border-radius: 0px 0px 0px 0px;
|
|
|
border: 1px solid;
|
|
|
- border-image: linear-gradient(180deg, rgba(31, 107, 255, 1), rgba(31, 107, 255, 0.48)) 1 1;
|
|
|
+ border-image: linear-gradient(
|
|
|
+ 180deg,
|
|
|
+ rgba(31, 107, 255, 1),
|
|
|
+ rgba(31, 107, 255, 0.48)
|
|
|
+ )
|
|
|
+ 1 1;
|
|
|
box-shadow: inset 0px 0px 17px 5px rgba(12, 97, 197, 0.2);
|
|
|
-
|
|
|
- }
|
|
|
+ }
|
|
|
}
|
|
|
-.tanniu{
|
|
|
-display: flex;
|
|
|
-justify-content:space-between;
|
|
|
-align-items: center;
|
|
|
-
|
|
|
+.tanniu {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
}
|
|
|
- </style>
|
|
|
+</style>
|