zq-popup #27

Merged
zhangqi merged 5 commits from zq-popup into master 2 months ago
  1. 9281
      package-lock.json
  2. 1
      package.json
  3. 44
      src/App.vue
  4. 2
      src/assets/header-drop.svg
  5. BIN
      src/assets/header-logo.png
  6. BIN
      src/assets/headerBg.mp4
  7. BIN
      src/assets/headerBg1.mp4
  8. 1
      src/assets/loadingAni.json
  9. 1
      src/assets/loadingPrimary.svg
  10. BIN
      src/assets/table_empty.png
  11. 1
      src/assets/upLoad_active.svg
  12. 1
      src/assets/upLoad_grey.svg
  13. 115
      src/components/GlobalLoading.vue
  14. 98
      src/components/GlobalLoading1.vue
  15. 14
      src/components/GuipButton.vue
  16. 3
      src/components/GuipDialog.vue
  17. 127
      src/components/GuipTable.vue
  18. 104
      src/components/GuipToolTip.vue
  19. 47
      src/components/Header.vue
  20. 161
      src/components/HoverButton.vue
  21. 126
      src/components/SvgIcon.vue
  22. 3
      src/main.js
  23. 29
      src/services/loading.js
  24. 19
      src/store/index.js
  25. 197
      src/style/theme/common.scss
  26. 747
      src/style/theme/commonOld.scss
  27. 363
      src/views/elementGroups.vue

9281
package-lock.json

File diff suppressed because it is too large

1
package.json

@ -11,6 +11,7 @@
"axios": "^1.8.3",
"core-js": "^3.40.0",
"element-ui": "^2.15.14",
"lottie-web": "^5.12.2",
"regenerator-runtime": "^0.14.1",
"vue": "^2.6.14",
"vue-clickaway": "^2.2.2",

44
src/App.vue

@ -9,15 +9,20 @@
<el-container>
<el-header style="height: 62px;" v-if="showHeader">
<Header></Header>
<video class="top_viedo" width="100%" src="./assets/headerBg1.mp4" autoplay loop muted
poster="review.jpg"></video>
<div class="bg"></div>
</el-header>
<el-container :class="(showHeader ? 'short-container' : '')">
<SliderMenu v-if="showSidebar"></SliderMenu>
<el-container>
<!-- 面包屑导航 -->
<Breadcrumb />
<el-main>
<router-view />
</el-main>
<el-main class="app-content">
<global-loading>
<router-view />
</global-loading>
</el-main>
<!-- <el-footer v-if="showFooter">
<Footer></Footer>
</el-footer> -->
@ -33,6 +38,9 @@ import SliderMenu from '@/components/SliderMenu.vue';
import { mapState } from 'vuex';
import Header from './components/Header.vue';
import Breadcrumb from './components/Breadcrumb.vue';
// import loadingAnimation from '@/assets/loadingAni.json' // JSON
import GlobalLoading from '@/components/GlobalLoading1.vue'
// import ContentWithLoading from '@/components/ContentWithLoading'
export default {
data() {
return {
@ -60,6 +68,8 @@ export default {
};
},
components: {
GlobalLoading,
// ContentWithLoading,
SliderMenu,
// Footer,
Header,
@ -99,7 +109,10 @@ export default {
height: 100%;
background: #F5F7FA;
}
.app-content {
position: relative;
isolation: isolate;
}
.short-container {
height: calc(100vh - 62px);
}
@ -108,12 +121,33 @@ export default {
// padding: 12px;
}
.bg {
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
background: rgba(255, 255, 255, 0.61);
z-index: 2;
}
::v-deep .el-header {
height: 62px;
padding: 8px 32px;
overflow: hidden;
position: relative;
box-sizing: border-box;
background: linear-gradient(270deg, #4EA4F3 0%, #3D85EA 100%);
}
.top_viedo {
width: 100%;
height: 100%;
position: absolute;
object-fit: cover;
left: 0;
top: 0;
}
nav {
padding: 30px;

2
src/assets/header-drop.svg

@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><g><g><path d="M2.41612,5.500656L8,10.15389L13.5838,5.500686L13.5839,5.500656Q13.6715,5.427647,13.7787,5.388823Q13.886,5.35,14,5.35Q14.064,5.35,14.1268,5.36249Q14.1896,5.374979,14.2487,5.399478Q14.3079,5.423978,14.3611,5.459545Q14.4143,5.495112,14.4596,5.540381Q14.5049,5.585649,14.5405,5.638879Q14.576,5.69211,14.6005,5.751256Q14.625,5.810402,14.6375,5.873191Q14.65,5.9359806,14.65,6Q14.65,6.14468,14.5886,6.275701Q14.5273,6.406721,14.4161,6.499343L8.41612,11.49934Q8.37265,11.53557,8.32357,11.56374Q8.27449,11.59191,8.22128,11.611180000000001Q8.16807,11.63044,8.11233,11.64022Q8.05659,11.65,8,11.65Q7.94341,11.65,7.88767,11.64022Q7.83193,11.63044,7.77872,11.611180000000001Q7.72551,11.59191,7.67643,11.56374Q7.62735,11.53557,7.58388,11.49934L1.58388,6.499344Q1.472734,6.406722,1.411367,6.275701Q1.35,6.14468,1.35,6Q1.35,5.9359806,1.36249,5.873191Q1.374979,5.810402,1.399478,5.751256Q1.423978,5.69211,1.4595449999999999,5.638879Q1.495112,5.585649,1.540381,5.540381Q1.585649,5.495112,1.638879,5.459545Q1.69211,5.423978,1.751256,5.399478Q1.810402,5.374979,1.873191,5.36249Q1.9359806,5.35,2,5.35Q2.114044,5.35,2.221276,5.388824Q2.328509,5.427647,2.41612,5.500656Z" fill-rule="evenodd" fill="#FFFFFF" fill-opacity="1"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="16" height="16" viewBox="0 0 16 16"><g><g><path d="M2.41612,5.500656L8,10.15389L13.5838,5.500686L13.5839,5.500656Q13.6715,5.427647,13.7787,5.388823Q13.886,5.35,14,5.35Q14.064,5.35,14.1268,5.36249Q14.1896,5.374979,14.2487,5.399478Q14.3079,5.423978,14.3611,5.459545Q14.4143,5.495112,14.4596,5.540381Q14.5049,5.585649,14.5405,5.638879Q14.576,5.69211,14.6005,5.751256Q14.625,5.810402,14.6375,5.873191Q14.65,5.9359806,14.65,6Q14.65,6.14468,14.5886,6.275701Q14.5273,6.406721,14.4161,6.499343L8.41612,11.49934Q8.37265,11.53557,8.32357,11.56374Q8.27449,11.59191,8.22128,11.611180000000001Q8.16807,11.63044,8.11233,11.64022Q8.05659,11.65,8,11.65Q7.94341,11.65,7.88767,11.64022Q7.83193,11.63044,7.77872,11.611180000000001Q7.72551,11.59191,7.67643,11.56374Q7.62735,11.53557,7.58388,11.49934L1.58388,6.499344Q1.472734,6.406722,1.411367,6.275701Q1.35,6.14468,1.35,6Q1.35,5.9359806,1.36249,5.873191Q1.374979,5.810402,1.399478,5.751256Q1.423978,5.69211,1.4595449999999999,5.638879Q1.495112,5.585649,1.540381,5.540381Q1.585649,5.495112,1.638879,5.459545Q1.69211,5.423978,1.751256,5.399478Q1.810402,5.374979,1.873191,5.36249Q1.9359806,5.35,2,5.35Q2.114044,5.35,2.221276,5.388824Q2.328509,5.427647,2.41612,5.500656Z" fill-rule="evenodd" fill="#1E2226" fill-opacity="1"/></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/assets/header-logo.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 56 KiB

BIN
src/assets/headerBg.mp4

Binary file not shown.

BIN
src/assets/headerBg1.mp4

Binary file not shown.

1
src/assets/loadingAni.json

@ -0,0 +1 @@
{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.3","a":"","k":"","d":"","tc":""},"fr":29.9700012207031,"ip":0,"op":36.0000014663101,"w":500,"h":500,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.886],"y":[1.074]},"o":{"x":[0.098],"y":[0.184]},"t":0,"s":[0]},{"t":28.0000011404634,"s":[361]}],"ix":10},"p":{"a":0,"k":[250,272,0],"ix":2},"a":{"a":0,"k":[3,9,0],"ix":1},"s":{"a":0,"k":[114,114,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[130,130],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.480536935844,0.805985813515,0.932549091414,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[3,11],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36.0000014663101,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 2","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.75,-53.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[80,80,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-6.213],[6.213,0],[0,6.213],[-6.213,0]],"o":[[0,6.213],[-6.213,0],[0,-6.213],[6.213,0]],"v":[[11.25,0],[0,11.25],[-11.25,0],[0,-11.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.06274510175,0.823529422283,0.972549021244,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36.0000014663101,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.934],"y":[1.075]},"o":{"x":[0.082],"y":[0.144]},"t":0,"s":[0]},{"t":28.0000011404634,"s":[-359]}],"ix":10},"p":{"a":0,"k":[249.75,270,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.456,0],[0,0],[0,7.456],[0,0],[-7.456,0],[0,0],[0,-7.456],[0,0]],"o":[[0,0],[-7.456,0],[0,0],[0,-7.456],[0,0],[7.456,0],[0,0],[0,7.456]],"v":[[0,39.75],[0,39.75],[-13.5,26.25],[-13.5,-26.25],[0,-39.75],[0,-39.75],[13.5,-26.25],[13.5,26.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":3,"k":{"a":0,"k":[0.318,0.78,0.294,0.98,0.605,0.502,0.551,0.943,0.892,0.224,0.808,0.906],"ix":9}},"s":{"a":0,"k":[1.25,51],"ix":5},"e":{"a":0,"k":[-1.99,-35.4],"ix":6},"t":1,"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":36.0000014663101,"st":0,"bm":0}],"markers":[]}

1
src/assets/loadingPrimary.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

BIN
src/assets/table_empty.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

1
src/assets/upLoad_active.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="16" viewBox="0 0 20 16"><defs><clipPath id="master_svg0_417_005206"><rect x="0" y="0" width="20" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_417_005206)"><g transform="matrix(1,0,0,-1,0,30.6875)"><g><path d="M4.5,15.34375Q2.59375,15.40625,1.3125,16.65625Q0.0625,17.9375,0,19.84375Q0.03125,21.34375,0.84375,22.46875Q1.65625,23.59375,3,24.09375Q3,24.21875,3,24.34375Q3.0625,26.46875,4.46875,27.87495Q5.875,29.28125,8,29.34375Q9.40625,29.31255,10.5312,28.65625Q11.6562,27.96875,12.3438,26.84375Q13.0625,27.34375,14,27.34375Q15.2812,27.31255,16.125,26.46875Q16.9688,25.62495,17,24.34375Q17,23.78125,16.8125,23.25Q18.1875,22.96875,19.0938,21.875Q19.9688,20.8125,20,19.34375Q19.9688,17.65625,18.8438,16.5Q17.6875,15.375,16,15.34375L4.5,15.34375ZM6.96875,22.125Q6.53125,21.59375,6.96875,21.0625Q7.5,20.625,8.03125,21.0625L9.25,22.28125L9.25,18.09375Q9.3125,17.40625,10,17.34375Q10.6875,17.40625,10.75,18.09375L10.75,22.28125L11.9688,21.0625Q12.5,20.625,13.0312,21.0625Q13.4688,21.59375,13.0312,22.125L10.5312,24.625Q10,25.0625,9.46875,24.625L6.96875,22.125Z" fill="#006AFF" fill-opacity="1"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

1
src/assets/upLoad_grey.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="20" height="16" viewBox="0 0 20 16"><defs><clipPath id="master_svg0_417_003390"><rect x="0" y="0" width="20" height="16" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_417_003390)"><g transform="matrix(1,0,0,-1,0,30.6875)"><g><path d="M4.5,15.34375Q2.59375,15.40625,1.3125,16.65625Q0.0625,17.9375,0,19.84375Q0.03125,21.34375,0.84375,22.46875Q1.65625,23.59375,3,24.09375Q3,24.21875,3,24.34375Q3.0625,26.46875,4.46875,27.87495Q5.875,29.28125,8,29.34375Q9.40625,29.31255,10.5312,28.65625Q11.6562,27.96875,12.3438,26.84375Q13.0625,27.34375,14,27.34375Q15.2812,27.31255,16.125,26.46875Q16.9688,25.62495,17,24.34375Q17,23.78125,16.8125,23.25Q18.1875,22.96875,19.0938,21.875Q19.9688,20.8125,20,19.34375Q19.9688,17.65625,18.8438,16.5Q17.6875,15.375,16,15.34375L4.5,15.34375ZM6.96875,22.125Q6.53125,21.59375,6.96875,21.0625Q7.5,20.625,8.03125,21.0625L9.25,22.28125L9.25,18.09375Q9.3125,17.40625,10,17.34375Q10.6875,17.40625,10.75,18.09375L10.75,22.28125L11.9688,21.0625Q12.5,20.625,13.0312,21.0625Q13.4688,21.59375,13.0312,22.125L10.5312,24.625Q10,25.0625,9.46875,24.625L6.96875,22.125Z" fill="#626573" fill-opacity="1"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

115
src/components/GlobalLoading.vue

@ -0,0 +1,115 @@
<!-- src/components/GlobalLoading.vue -->
<template>
<div class="content-loading-overlay" v-if="isLoading">
<div class="loading-content">
<div ref="lottieContainer" class="animation-container"></div>
<!-- <div class="loading-text">{{ text }}</div> -->
</div>
</div>
<div v-else>
<slot></slot>
</div>
</template>
<script>
import lottie from 'lottie-web'
import { mapState } from 'vuex'
import defaultAnimation from '@/assets/loadingAni.json' // JSON
export default {
name: 'GlobalLoading',
data() {
return {
text: '加载中',
autoplay: true,
animationData: defaultAnimation,
animInstance: null
}
},
computed: {
...mapState(['isLoading', 'loadingText'])
},
mounted() {
this.$nextTick(()=>{
this.initAnimation()
})
},
methods: {
initAnimation() {
console.log('1====000000');
this.animInstance = lottie.loadAnimation({
container: this.$refs.lottieContainer,
renderer: 'svg',
loop: true,
// autoplay: true,
animationData: this.animationData
})
console.log(this.animInstance,'this.animInstance---');
if (this.animInstance) {
this.animInstance.play()
}
},
show(text = '加载中...') {
this.text = text
this.isLoading = true
if (this.animInstance) {
this.animInstance.play()
}
},
hide() {
this.isLoading = false
if (this.animInstance) {
this.animInstance.stop()
}
},
setAnimationData(data) {
this.animationData = data
this.initAnimation()
}
},
beforeDestroy() {
if (this.animInstance) {
this.animInstance.destroy()
}
}
}
</script>
<style scoped>
.global-loading {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 9999;
}
/* 关键样式 */
.content-loading-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.8);
z-index: 1000; /* 确保高于内容 */
display: flex;
justify-content: center;
align-items: center;
}
.loading-content {
text-align: center;
}
.animation-container {
width: 160px;
height: 160px;
margin: 0 auto;
}
</style>

98
src/components/GlobalLoading1.vue

@ -0,0 +1,98 @@
<template>
<div class="content-loading-overlay" v-if="isLoading">
<div class="loading-content">
<div ref="animationContainer" class="animation-container"></div>
</div>
</div>
<div v-else>
<slot></slot>
</div>
</template>
<script>
import lottie from 'lottie-web'
import { mapState } from 'vuex'
import defaultAnimation from '@/assets/loadingAni.json' // JSON
export default {
name: 'Loading',
data() {
return {
anim: null
}
},
computed: {
...mapState(['isLoading', 'loadingText'])
},
watch: {
isLoading(newVal) {
if (newVal) {
this.$nextTick(()=>{
this.playAnimation()
})
} else {
this.stopAnimation()
}
}
},
mounted() {
if (this.isLoading) {
this.playAnimation()
}
},
beforeDestroy() {
this.stopAnimation()
},
methods: {
playAnimation() {
this.anim = lottie.loadAnimation({
container: this.$refs.animationContainer,
renderer: 'svg',
loop: true,
autoplay: true,
animationData: defaultAnimation // JSON
})
if (this.anim) {
this.anim.play()
}
},
stopAnimation() {
if (this.anim) {
this.anim.stop()
}
}
}
}
</script>
<style scoped>
.content-loading-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(255, 255, 255, 0.8);
z-index: 1000;
/* 确保高于内容 */
display: flex;
justify-content: center;
align-items: center;
}
.loading-content {
text-align: center;
}
.animation-container {
width: 180px;
height: 180px;
margin: 0 auto;
}
.loading-text {
margin-top: 20px;
font-size: 16px;
color: #333;
}
</style>

14
src/components/GuipButton.vue

@ -18,7 +18,7 @@ export default {
props:{
type:{
type:String,
default:''
default:'primary'
},
size:{
type:String,
@ -54,5 +54,17 @@ button span{
display: flex;
align-items: center;
}
.rotating-svg {
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
</style>

3
src/components/GuipDialog.vue

@ -2,6 +2,7 @@
<el-dialog
:visible.sync="dialogShow"
:title="title"
append-to-body
:width="width"
:show-close="showCloseButton"
:before-close="handleClose"
@ -11,7 +12,7 @@
<slot></slot>
<!-- 底部按钮 -->
<span slot="footer" :class="[type == 'center' ? 'dialog-footer-center' : 'dialog-footer-normal', 'flex']" style="justify-content: space-between;">
<GuipButton v-if="showCancelButton" @click="handleCancel" type="mild" >{{ cancelText }}</GuipButton>
<GuipButton v-if="showCancelButton" @click="handleCancel" type="ignore" >{{ cancelText }}</GuipButton>
<GuipButton type="primary" @click="handleConfirm">{{ confirmText }}</GuipButton>
</span>
</el-dialog>

127
src/components/GuipTable.vue

@ -1,63 +1,79 @@
<template>
<el-table ref="guiptable" :data="tableData" height="250" :border="border" @selection-change="handleSelectionChange"
:style="{ width: width ? width : '100%' }">
<!-- 多选 -->
<template v-if="multiple">
<el-table-column type="selection" width="55">
</el-table-column>
</template>
<!-- 自定义header -->
<template v-if="autoColumn">
<slot name="header"></slot>
</template>
<!-- 通过json数据遍历渲染 -->
<template v-if="columns">
<el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"
:width="column.width">
<template #default="{ row }" v-if="column.popover">
<el-popover :visible="row[`popoverVisible_${column.prop}`]" class="tablePopover" placement="top" trigger="click">
<!-- 自定义内容插槽 -->
<slot :name="`popover-content-${column.prop}`" :row="row" :column="column">
<div>
<p>默认内容{{ `popoverVisible_${column.prop}` }}</p>
<el-input v-model="row[`edit_${column.prop}`]" :placeholder="`请输入${column.label}`" />
<global-loading>
<el-table ref="guiptable" :data="tableData" :border="border" @selection-change="handleSelectionChange"
:style="{ width: width ? width : '100%', height: height ? height : '100%' }" v-loading="loading">
<!-- 多选 -->
<template v-if="multiple">
<el-table-column type="selection" width="55">
</el-table-column>
</template>
<!-- 自定义header -->
<slot></slot>
<!-- <template v-if="autoColumn">
<slot name="headerTop"></slot>
</template> -->
<!-- 通过json数据遍历渲染 -->
<template v-if="columns">
<el-table-column v-for="column in columns" :key="column.prop" :prop="column.prop" :label="column.label"
:width="column.width">
<template #default="{ row }" v-if="column.popover">
<el-popover :visible="row[`popoverVisible_${column.prop}`]" class="tablePopover" placement="top"
trigger="click">
<!-- 自定义内容插槽 -->
<slot :name="`popover-content-${column.prop}`" :row="row" :column="column">
<div>
<p>默认内容{{ `popoverVisible_${column.prop}` }}</p>
<el-input v-model="row[`edit_${column.prop}`]" :placeholder="`请输入${column.label}`" />
</div>
</slot>
<!-- 确定和取消按钮 -->
<div class="flex" style="text-align: right; margin-top: 32px;justify-content: flex-end;">
<GuipButton size="medium" @click="handleCancel(row, column.prop)">取消</GuipButton>
<GuipButton type="primary" @click="handleConfirm(row, column.prop)" size="medium">确定</GuipButton>
</div>
</slot>
<!-- 确定和取消按钮 -->
<div class="flex" style="text-align: right; margin-top: 32px;justify-content: flex-end;">
<GuipButton size="medium" @click="handleCancel(row, column.prop)">取消</GuipButton>
<GuipButton type="primary" @click="handleConfirm(row, column.prop)" size="medium">确定</GuipButton>
</div>
<!-- 单元格内容 -->
<template #reference>
<span style="cursor: pointer">{{ row[column.prop] }}</span>
</template>
</el-popover>
</template>
<!-- 单元格内容 -->
<template #reference>
<span style="cursor: pointer">{{ row[column.prop] }}</span>
</template>
</el-popover>
</template>
</el-table-column>
</template>
</el-table-column>
</template>
<template #empty>
<!-- <div v-if="loading">
<i class="el-icon-loading"></i>
<span>数据加载中...</span>
</div> -->
<!-- <div class="custom-empty">
<img src="@/assets/table_empty.png" alt="无数据" class="empty-image">
<p class="empty-text">暂无数据</p>
</div> -->
<el-empty :image="emptyImg"></el-empty>
</template>
</el-table>
</global-loading>
</el-table>
</template>
<script>
import GuipButton from '@/components/GuipButton.vue';
import GlobalLoading from '@/components/GlobalLoading1.vue'
export default {
name: 'GuipTextarea',
props: ['tableData', 'width', 'autoColumn', 'columns', 'border', 'multiple'],
props: ['tableData', 'loading', 'width', 'height', 'autoColumn', 'columns', 'border', 'multiple'],
data() {
return {
emptyImg:require('@/assets/table_empty.png')
// loading:false
}
},
components: {
GuipButton
GuipButton,
GlobalLoading
},
mounted(){
mounted() {
},
methods: {
handleSelectionChange(row) {
@ -83,4 +99,29 @@ export default {
}
</script>
<style scoped>
.custom-empty {
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
}
.empty-image {
width: 160px;
height: 160px;
}
.empty-text {
color: #626573;
letter-spacing: 0.08em;
height: 18px;
line-height: 18px;
}
.el-empty{
padding: 0;
}
::v-deep .el-empty__description{
line-height: 20px;
margin-top: 0;
}
</style>

104
src/components/GuipToolTip.vue

@ -0,0 +1,104 @@
<template>
<el-tooltip
v-bind="mergedProps"
:disabled="disabled"
:visible="controlledVisible"
@show="handleShow"
@hide="handleHide"
>
<slot></slot>
<!-- 用于自定义提示内容 -->
<template v-if="$slots.content" #content>
<slot name="content"></slot>
</template>
</el-tooltip>
</template>
<script>
export default {
name: 'EnhancedTooltip',
props: {
content: String,
placement: {//
type: String,
default: 'top'
},
effect: {//
type: String,
default: 'dark'
},
disabled: Boolean,
// true/
manual: Boolean,
// /
openDelay: {
type: Number,
default: 0
},
closeDelay: {
type: Number,
default: 0
},
//
hideAfterClick: {
type: Boolean,
default: false
}
},
data() {
return {
controlledVisible: false
}
},
computed: {
mergedProps() {
return {
effect: this.effect,
placement: this.placement,
content: this.content,
openDelay: this.openDelay,
closeDelay: this.closeDelay,
hideAfterClick: this.hideAfterClick,
...this.$attrs
}
}
},
methods: {
handleShow() {
if (this.manual) {
this.controlledVisible = true
}
this.$emit('show')
},
handleHide() {
if (this.manual) {
this.controlledVisible = false
}
this.$emit('hide')
},
//
show() {
if (this.manual && !this.disabled) {
this.controlledVisible = true
}
},
//
hide() {
if (this.manual) {
this.controlledVisible = false
}
},
// /
toggle() {
if (this.manual && !this.disabled) {
this.controlledVisible = !this.controlledVisible
}
}
}
}
</script>
<style scoped>
/* 可以添加一些自定义样式 */
</style>

47
src/components/Header.vue

@ -6,39 +6,56 @@
<div class="header-right flex">
<div class="right-item">权限设置</div>
<div class="right-item">岗位设置</div>
<div class="right-item flex">
<img class="right-item-icon" src="../assets/header-icon.png" alt="">
<span>学术论文出版</span>
<img src="../assets/header-drop.svg" alt="">
</div>
<el-dropdown trigger="click">
<div class="right-item flex el-dropdown-link">
<img class="right-item-icon" src="../assets/header-icon.png" alt="">
<span>学术论文出版</span>
<img src="../assets/header-drop.svg" alt="">
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item icon="el-icon-plus">黄金糕</el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-plus">狮子头</el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-plus-outline">螺蛳粉</el-dropdown-item>
<el-dropdown-item icon="el-icon-check">双皮奶</el-dropdown-item>
<el-dropdown-item icon="el-icon-circle-check">蚵仔煎</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</template>
<style lang="scss" scoped>
.flex{
.flex {
display: flex;
}
.header-wrap{
color: #FFFFFF;
.header-wrap {
color: #1E2226;
display: flex;
justify-content: space-between;
width: 100%;
width: calc(100% - 64px);
height: 100%;
.header-logo{
img{
align-items: center;
position: absolute;
z-index: 9;
.header-logo {
img {
height: 46px;
}
}
.header-right{
.header-right {
width: 362px;
justify-content: space-between;
.el-dropdown-link {
cursor: pointer;
}
.right-item-icon{
.right-item-icon {
width: 36px;
height: 36px;
}
.right-item-icon +span{
.right-item-icon+span {
display: inline-block;
margin: 0 6px 0 12px;
}

161
src/components/HoverButton.vue

@ -0,0 +1,161 @@
<template>
<button
class="hover-button"
:class="{ 'hover-effect': hoverEffect }"
@mouseenter="isHovered = true"
@mouseleave="isHovered = false"
@click="$emit('click')"
>
<!-- 图片/图标部分 -->
<div class="button-icon">
<slot name="icon">
<img
v-if="defaultIcon || hoverIcon"
:src="isHovered && hoverIcon ? hoverIcon : defaultIcon"
:alt="iconAlt"
/>
<span v-else class="default-icon-placeholder"></span>
</slot>
</div>
<!-- 文字部分 -->
<span
class="button-text"
:style="{
color: isHovered && hoverTextColor ? hoverTextColor : defaultTextColor
}"
>
<slot>{{ buttonText }}</slot>
</span>
</button>
</template>
<script>
export default {
name: 'HoverButton',
props: {
//
buttonText: {
type: String,
default: '按钮'
},
//
defaultIcon: {
type: String,
default: ''
},
//
hoverIcon: {
type: String,
default: ''
},
// alt
iconAlt: {
type: String,
default: '按钮图标'
},
//
defaultTextColor: {
type: String,
default: '#333333'
},
//
hoverTextColor: {
type: String,
default: '#007bff'
},
//
hoverEffect: {
type: Boolean,
default: true
},
// (primary, danger, success)
type: {
type: String,
default: 'default',
validator: value => ['default', 'primary', 'danger', 'success', 'warning'].includes(value)
}
},
data() {
return {
isHovered: false
}
}
}
</script>
<style scoped>
.hover-button {
font-family: Microsoft YaHei UI;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 8px 16px;
border: 1px solid #ddd;
border-radius: 4px;
background-color: white;
cursor: pointer;
transition: all 0.3s ease;
font-size: 14px;
outline: none;
background: #F2F3F5;
border: 1px solid #BABDC2;
}
.hover-button.hover-effect:hover {
background: #F2F7FF;
border-color: #006AFF;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
/* 按钮类型样式 */
.hover-button.primary {
background-color: #007bff;
border-color: #007bff;
color: white;
}
.hover-button.danger {
background-color: #dc3545;
border-color: #dc3545;
color: white;
}
.hover-button.success {
background-color: #28a745;
border-color: #28a745;
color: white;
}
.hover-button.warning {
background-color: #ffc107;
border-color: #ffc107;
color: #212529;
}
/* 图标样式 */
.button-icon {
display: inline-flex;
align-items: center;
margin-right: 8px;
}
.button-icon img {
width: 20px;
height: 20px;
transition: opacity 0.3s ease;
}
.default-icon-placeholder {
display: inline-block;
width: 20px;
height: 20px;
background-color: #ddd;
border-radius: 50%;
}
/* 文字样式 */
.button-text {
transition: color 0.3s ease;
}
</style>

126
src/components/SvgIcon.vue

@ -0,0 +1,126 @@
<template>
<div
class="svg-icon-wrapper"
:style="{ width: size + 'px', height: size + 'px' }"
@click="handleClick"
@mouseenter="isHovered = true"
@mouseleave="isHovered = false"
>
<div
class="svg-icon"
v-html="svgContent"
:style="{
'--icon-color': isHovered ? hoverColor : color,
'--icon-hover-color': hoverColor
}"
></div>
</div>
</template>
<script>
export default {
name: 'SvgIcon',
props: {
// SVG
path: {
type: String,
required: true,
validator: value => value.endsWith('.svg')
},
//
size: {
type: Number,
default: 24
},
//
color: {
type: String,
default: '#333333'
},
//
hoverColor: {
type: String,
default: '#409EFF'
},
//
disabled: {
type: Boolean,
default: false
}
},
data() {
return {
svgContent: '',
isHovered: false
}
},
watch: {
path: {
immediate: true,
handler: 'loadSvg'
}
},
methods: {
async loadSvg() {
try {
// 使importSVG
const response = await fetch(this.path)
if (!response.ok) throw new Error('SVG加载失败')
this.svgContent = await response.text()
// SVGfillcurrentColor便CSS
this.svgContent = this.svgContent.replace(/fill="[^"]*"/g, 'fill="currentColor"')
} catch (error) {
console.error('加载SVG图标失败:', error)
this.svgContent = ''
}
},
handleClick(event) {
if (!this.disabled) {
this.$emit('click', event)
}
}
}
}
</script>
<style scoped>
.svg-icon-wrapper {
display: inline-flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.3s;
}
.svg-icon-wrapper:hover {
opacity: 0.8;
}
.svg-icon {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
color: var(--icon-color);
transition: color 0.3s;
}
.svg-icon:hover {
color: var(--icon-hover-color);
}
.svg-icon-wrapper[disabled] {
cursor: not-allowed;
opacity: 0.5;
}
.svg-icon >>> path {
fill: currentColor;
}
.svg-icon >>> circle {
fill: currentColor;
}
</style>

3
src/main.js

@ -9,8 +9,9 @@ import './style/theme/index.css'
import './style/theme/common.scss'
import 'core-js/stable';
import 'regenerator-runtime/runtime';
// main.js
import LoadingService from './services/loading'
import { directive as clickaway } from 'vue-clickaway';
Vue.prototype.$loadingFn = LoadingService
Vue.config.productionTip = false
Vue.prototype.$http = request;
Vue.use(ElementUI);

29
src/services/loading.js

@ -0,0 +1,29 @@
import Vue from 'vue'
import GlobalLoading from '@/components/GlobalLoading.vue'
const LoadingConstructor = Vue.extend(GlobalLoading)
let loadingInstance = null
export default {
show(text) {
if (!loadingInstance) {
loadingInstance = new LoadingConstructor({
el: document.createElement('div')
})
document.body.appendChild(loadingInstance.$el)
}
loadingInstance.show(text)
},
hide() {
if (loadingInstance) {
loadingInstance.hide()
}
},
setAnimation(animationData) {
if (loadingInstance) {
loadingInstance.setAnimationData(animationData)
}
}
}

19
src/store/index.js

@ -11,7 +11,8 @@ export default new Vuex.Store({
menuList:[],//目录菜单
showBreadcrumb:false,//是否展示面包屑
pageTitle:'一般新文献',//页面标题
addServiceList:[]//选中的服务
addServiceList:[],//选中的服务
isLoading: false,//页面loading
},
actions: {
SET_HEADER({ commit }) {
@ -32,8 +33,24 @@ export default new Vuex.Store({
SET_ADDSERVICELIST({ commit }) {
commit('SET_ADDSERVICELIST');
},
showLoading({ commit }) {
console.log('zhixingle111');
commit('SHOW_LOADING')
},
hideLoading({ commit }) {
console.log('zhixingle222');
commit('HIDE_LOADING')
}
},
mutations: {
SHOW_LOADING(state) {
state.isLoading = true
// state.loadingText = text || '加载中...'
},
HIDE_LOADING(state) {
state.isLoading = false
},
SET_SIDEBAR(state, show) {
state.showSidebar = show;
},

197
src/style/theme/common.scss

@ -224,8 +224,9 @@ body {
/* button==== start */
.el-button {
width: 144px;
height: 46px;
border-radius: 2px;
width: 96px;
height: 38px;
font-family: Microsoft YaHei UI;
font-size: 14px;
letter-spacing: 0.08em;
@ -233,6 +234,8 @@ body {
align-items: center;
justify-content: center;
transition: all .3s;
background: #006AFF;
color: #fff;
span{
display: flex;
align-items: center;
@ -241,77 +244,127 @@ body {
margin-right: 6px;
}
}
.el-button--normal {
color: #626573;
.el-button--superBig{
width: 388px;
height: 46px;
border-radius: 4px;
}
.el-button--mild {
background: #FFFFFF;
.el-button--big{
width: 247px;
height: 46px;
border-radius: 4px;
}
.el-button--page{
width: 144px;
height: 46px;
border-radius: 2px;
}
.el-button--table{
width: 90px;
height: 32px;
border-radius: 2px;
}
.el-button--form{
width: 88px;
height: 33px;
border-radius: 2px;
}
.el-button--primary,.el-button--normal{
background: #006AFF;
border: 1px solid #006AFF;
color: #006AFF;
}
.el-button--primary,
.el-button--success,
.el-button--info,
.el-button--warning,
.el-button--danger {
color: #fff !important;
.el-button--system {
color: #006AFF;
background: #FFFFFF;
border: 1px solid #DFE2E6;
&:hover{
background: #F2F7FF;
border: 1px solid #006AFF;
}
}
.el-button--ignore{
color: #626573;
background: #FFFFFF;
border: 1px solid #DFE2E6;
&:hover{
background: #FFFFFF;
border: 1px solid #006AFF;
}
}
.el-button--medium.is-disabled .el-button--ignore.is-disabled{
background: #F2F3F5;
border: 1px solid #F2F3F5;
color: #626573;
}
.el-button--medium {
//中等按钮
width: 97px;
height: 33px;
font-size: 14px;
line-height: 14px;
span {
height: 14px;
}
// .el-button--mild {
// background: #FFFFFF;
// border: 1px solid #006AFF;
// color: #006AFF;
// }
}
// .el-button--primary,
// .el-button--success,
// .el-button--info,
// .el-button--warning,
// .el-button--danger {
// color: #fff !important;
// }
.el-button--small {
//小的按钮
width: 80px;
height: 32px;
font-size: 12px;
}
// .el-button--medium {
// //中等按钮
// width: 97px;
// height: 33px;
// font-size: 14px;
// line-height: 14px;
.el-button--mini {
//迷你按钮
width: 80px;
height: 28px;
font-size: 12px;
}
// span {
// height: 14px;
// }
.el-button--reverseMild {
background: #E8F0FE;
color: #006AFF;
border: none;
}
// }
.el-button--reverseMild:hover {
border-color: #F2F7FF !important;
background-color: #F2F7FF !important;
}
// .el-button--small {
// //小的按钮
// width: 80px;
// height: 32px;
// font-size: 12px;
// }
.el-button--reverseMild.is-disabled,
.el-button--reverseMild.is-disabled:hover {
color: #006AFF;
border-color: #E8F0FE;
background-color: #E8F0FE;
opacity: .7;
}
// .el-button--mini {
// //迷你按钮
// width: 80px;
// height: 28px;
// font-size: 12px;
// }
.el-button--mild.is-disabled,
.el-button--mild.is-disabled:hover {
color: #006AFF;
opacity: .7;
border-color: #006AFF;
}
// .el-button--reverseMild {
// background: #E8F0FE;
// color: #006AFF;
// border: none;
// }
// .el-button--reverseMild:hover {
// border-color: #F2F7FF !important;
// background-color: #F2F7FF !important;
// }
// .el-button--reverseMild.is-disabled,
// .el-button--reverseMild.is-disabled:hover {
// color: #006AFF;
// border-color: #E8F0FE;
// background-color: #E8F0FE;
// opacity: .7;
// }
// .el-button--mild.is-disabled,
// .el-button--mild.is-disabled:hover {
// color: #006AFF;
// opacity: .7;
// border-color: #006AFF;
// }
/* button==== end */
@ -585,6 +638,20 @@ body {
// table start
.el-table{
min-height: 258px;
th,td{
font-size: 14px;
font-weight: normal;
letter-spacing: 0.08em;
color: #1E2226;
height: 56px;
padding: 18px 16px !important;
box-sizing: border-box !important;
}
td{
}
}
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background-color: #F6F7FA;
}
@ -621,12 +688,22 @@ body {
padding-left: 16px;
padding-right: 16px;
}
.el-table .el-form-item {
margin-bottom: 0;
}
// 表格行内小图标 默认隐藏
.svg-icon-wrapper{
display: none !important;
}
//划过时 显示
.el-table__row:hover{
.svg-icon-wrapper{
display: block !important;
}
}
// table end
.el-pagination {
margin-top: 16px;
display: flex;

747
src/style/theme/commonOld.scss

@ -0,0 +1,747 @@
html {
scroll-behavior: smooth; /* 使整个页面的滚动平滑 */
}
body {
font-family: Microsoft YaHei UI;
font-size: 14px;
margin: 0;
width: 100vw;
height: 100vh;
p {
margin: 0;
padding: 0;
}
}
.point{
cursor: pointer;
}
.mt16{
margin-top: 16px;
}
.mt32{
margin-top: 32px;
}
.mb32{
margin-bottom: 32px;
}
.hide{
display: none !important;
}
.column{
display: flex;
flex-direction: column;
}
.mb24{
margin-bottom: 24px;
}
.mt12{
margin-top: 12px;
}
.mt10{
margin-top: 10px;
}
.ceshi{
transition: all .5s;
box-sizing: border-box;
/* main/main_stardard */
border: 1px solid #006AFF !important;
/* 蓝色阴影_常规 */
box-shadow: 0px 4px 16px 0px rgba(17, 55, 143, 0.12);
}
::v-deep .el-radio__original {
display: none !important;
}
.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
.el-tabs__item.is-active {
letter-spacing: 0.08em;
/* main/main_stardard */
color: #006AFF;
font-weight: bold;
}
.el-tabs__nav-wrap::after {
content: none;
}
.addStore {
margin-top: 12px;
border-radius: 4px;
opacity: 1;
/* text/text_white_2 */
border: 1px dashed #BABDC2;
padding: 15px 20px;
color: #626573;
justify-content: center;
img{
margin-right: 12px;
}
}
@keyframes fadeInOut {
0% {
opacity: 0;
}
50% {
opacity: 1;
}
100% {
opacity: 0;
}
}
.ellipsis{
}
.el-container {
height: 100%;
.el-main {
padding: 0;
}
}
.min-width {
min-width: 1200px;
}
// 公共类名
.mb24 {
margin-bottom: 24px;
}
// 多数左右布局中间带竖线
.min-flex {
min-width: 1100px;
max-width: 1556px;
width: 84.75%;
margin: 0 auto;
}
.min-flex-right {
min-width: 1033px;
max-width: 1556px;
width: 84.75%;
margin: 0 auto;
.flex-common{
.flex-left,
.flex-right {
min-width: 440px;
max-width: 590px;
flex: 1;
}
.flex-line {
margin: 0 33px;
}
}
}
.desc {
font-size: 12px;
font-weight: normal;
line-height: 13px;
letter-spacing: 0.08em;
font-variation-settings: "opsz"auto;
/* text/text_4 */
color: #8A9099;
}
.borderNone{
border: none !important;
}
.flex-common {
padding: 32px 36px;
background-color: #fff;
h3 {
text-align: left;
margin: 0 0 32px 0;
span{
margin-left: 12px;
font-size: 14px;
font-weight: normal;
letter-spacing: 0.08em;
color: #626573;
}
}
.flex-wrap {
width: 100%;
display: flex;
justify-content: space-between;
}
.flex-line {
border-left: 1px solid #DFE2E6;
margin: 0 54px;
}
.flex-left,
.flex-right {
min-width: 460px;
max-width: 590px;
flex: 1;
}
.flex-left-desc{
/* body/body 2_regular */
font-family: Microsoft YaHei UI;
font-size: 14px;
font-weight: normal;
line-height: normal;
letter-spacing: 0.08em;
font-variation-settings: "opsz" auto;
/* text/text_1 */
color: #1E2226;
text-align: left;
// margin: ;
}
}
// end---------
//radio 发生change事件时会有报错
::v-deep .el-radio__original {
display: none !important;
}
::v-deep.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) {
.el-radio__inner {
box-shadow: none !important;
}
}
::v-deep .el-popover {
display: none !important;
}
::v-deep.el-popover:focus:not(.is-focus):not(:active):not(.is-disabled) {}
// .el-radio__inner {
// box-shadow: none !important;
// }
/* button==== start */
.el-button {
width: 144px;
height: 46px;
font-family: Microsoft YaHei UI;
font-size: 14px;
letter-spacing: 0.08em;
display: flex;
align-items: center;
justify-content: center;
transition: all .3s;
span{
display: flex;
align-items: center;
}
img{
margin-right: 6px;
}
}
.el-button--normal {
color: #626573;
}
.el-button--mild {
background: #FFFFFF;
border: 1px solid #006AFF;
color: #006AFF;
}
.el-button--primary,
.el-button--success,
.el-button--info,
.el-button--warning,
.el-button--danger {
color: #fff !important;
}
.el-button--medium {
//中等按钮
width: 97px;
height: 33px;
font-size: 14px;
line-height: 14px;
span {
height: 14px;
}
}
.el-button--small {
//小的按钮
width: 80px;
height: 32px;
font-size: 12px;
}
.el-button--mini {
//迷你按钮
width: 80px;
height: 28px;
font-size: 12px;
}
.el-button--reverseMild {
background: #E8F0FE;
color: #006AFF;
border: none;
}
.el-button--reverseMild:hover {
border-color: #F2F7FF !important;
background-color: #F2F7FF !important;
}
.el-button--reverseMild.is-disabled,
.el-button--reverseMild.is-disabled:hover {
color: #006AFF;
border-color: #E8F0FE;
background-color: #E8F0FE;
opacity: .7;
}
.el-button--mild.is-disabled,
.el-button--mild.is-disabled:hover {
color: #006AFF;
opacity: .7;
border-color: #006AFF;
}
/* button==== end */
// radio ---start
.el-radio__input.is-checked .el-radio__inner::after {
content: '';
/* 清空默认的伪元素内容 */
width: 14px;
height: 14px;
background-image: url('../../assets/radio_checked.svg');
/* 使用你的自定义图标 */
background-size: contain;
background-repeat: no-repeat;
}
.el-radio__label {
font-weight: normal;
}
// radio ---end
// input ---start
.el-input {
border-radius: 2px;
border: 1px solid transparent;
}
.el-input:focus-within {
transition: all .5s;
outline: 3px solid #D8E9FA;
border-color: #006AFF !important;
}
.is-error .hoverclass {
border-color: transparent !important;
}
.is-error .el-input:focus-within {
outline: none !important;
border-color: transparent !important;
}
.el-input__inner {
height: 100%;
padding: 10px 12px;
border-radius: 4px;
}
.el-input__prefix {
display: flex;
align-items: center;
left: 12px;
cursor: pointer;
}
.el-input__suffix {
display: flex;
align-items: center;
right: 12px;
cursor: pointer;
}
.el-input__inner:focus {
border-color: transparent;
}
.el-input__inner:hover {
border-color: transparent;
}
.el-input__inner::placeholder {
color: #BABDC2;
}
.el-input--prefix .el-input__inner {
padding-left: 36px;
}
.el-input--suffix .el-input__inner {
padding-right: 36px;
}
.el-input.is-disabled .el-input__inner {
background: #F6F7FA !important;
border-color: #DFE2E6 !important;
color: #BABDC2 !important;
}
.hoverclass {
border-color: #006AFF !important;
transition: all .5s;
}
// input ---end
// select start
.el-select {
width: 100%;
transition: all .5s;
}
.el-select:hover .el-input__inner {
transition: all .5s;
border-color: transparent;
}
.el-select .el-input.is-focus .el-input__inner {
border-color: transparent;
transition: all .5s;
}
.el-select .el-input__inner:focus {
border-color: transparent;
}
.el-select>.el-input {
height: 100%;
}
// select end
// textarea start
.el-textarea__inner {
padding: 10px 12px;
border-radius: 2px;
height: 100%;
}
.el-textarea__inner:hover {
border-color: #006AFF;
}
.el-textarea__inner:focus {
transition: all .5s;
outline: 3px solid #D8E9FA;
}
// textarea end
.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,
.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before {
content: '';
}
.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label::after,
.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label::after {
content: url(../../assets/require.svg);
display: inline-block;
// background-image: url(../../assets/require.svg);
color: #ff4d4f;
margin-right: 4px;
margin-left: 4px;
}
.form-item1 {
display: flex;
align-items: center;
label {
min-width: 54px;
margin-right: 8px;
}
label.el-radio {
margin-right: 24px;
.el-radio__label {
padding-left: 8px;
}
}
label.el-radio:last-child {
margin-right: 0px;
}
.form-item-top {
height: 18px;
display: flex;
align-items: center;
text-align: left;
}
.form-item-bottom {
flex: 1;
}
.rightdesc {
flex: 1;
text-align: right;
font-size: 12px;
line-height: 13px;
letter-spacing: 0.08em;
font-variation-settings: "opsz"auto;
color: #8A9099;
}
.form-item {
margin-bottom: 0;
}
}
.el-form-item__content {
// width: 100%;
flex: 1;
position: relative;
.desc_right {
position: absolute;
right: 0;
top: -40px;
margin: 0;
font-size: 12px;
line-height: 40px;
letter-spacing: 0.08em;
font-variation-settings: "opsz"auto;
color: #8A9099;
}
}
.w510 {
width: 510px;
}
.w388 {
width: 388px;
}
.form-item {
display: flex;
align-items: center;
}
.column {
display: flex;
flex-direction: column !important;
align-items: self-start;
.form-item-top {
width: 100%;
margin-bottom: 12px;
justify-content: space-between;
}
.form-item-bottom {
width: 100%;
}
.el-form-item__content {
width: 100%;
display: flex;
justify-content: flex-start;
}
}
.form-top-icon {
display: flex;
align-items: center;
img {
width: 16px;
height: 16px;
margin-right: 8px;
}
span {
color: #1E2226;
}
}
// table start
.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell {
background-color: #F6F7FA;
}
.el-table td.el-table__cell {
border-bottom: 1px solid#EAECF0;
}
.el-table--fit {
border: 1px solid#EAECF0;
}
.el-button--text {
padding: 0;
width: auto !important;
height: auto !important;
}
.el-table th.el-table__cell {
background: #F6F7FA;
padding: 10px 0;
}
.el-table th.el-table__cell>.cell {
padding-left: 16px;
padding-right: 16px;
}
.el-table .el-table__cell {
padding: 18px 0;
}
.el-table .cell {
padding-left: 16px;
padding-right: 16px;
}
.el-table .el-form-item {
margin-bottom: 0;
}
// table end
.el-pagination {
margin-top: 16px;
display: flex;
justify-content: flex-end;
}
// dialog--start
.el-dialog {
min-height: 214px;
max-height: 550px;
border-radius: 4px;
background: #FFFFFF;
box-shadow: 0px 4px 16px 0px rgba(0, 0, 0, 0.16);
display: flex;
flex-direction: column;
.el-dialog__header {
font-size: 20px;
font-weight: bold;
line-height: 26px;
text-align: left;
letter-spacing: 0.08em;
color: #1F2026;
padding: 32px 32px 12px;
}
.el-dialog__body {
padding: 0 32px 32px;
flex: 1;
}
}
.el-dialog__footer {
display: flex;
justify-content: center;
padding: 0 32px 32px !important;
.dialog-footer-center {
width: 100%;
justify-content: space-between;
button {
width: 247px;
height: 44px;
}
}
.dialog-footer-normal {
width: 100%;
justify-content: flex-end !important;
button {
width: 96px;
height: 38px;
}
}
}
.center {
.el-dialog .el-dialog__header{
text-align: center;
}
}
// dialog--end
// switch --start
// .el-switch__core{
// background-color: #00C261;
// }
// .el-switch.is-checked .el-switch__core{
// background-color: #BABDC2;
// }
// switch --end
// 弹出气泡框
.el-popover {
padding: 32px;
}
// 日历区间背景颜色
.el-date-table td.in-range div {
background: #F2F7FF;
}
.flex {
display: flex;
align-items: center;
}
// 自定义下拉内容框
.noraml-jump {
padding: 24px 10px;
border-bottom: 1px solid #EAECF0;
}
.flex-between {
display: flex;
justify-content: space-between;
align-items: center;
font-family: Microsoft YaHei UI;
.left b {
display: block;
text-align: left;
margin-bottom: 12px;
}
.left p {
letter-spacing: 0.08em;
text-align: left;
line-height: 13px;
font-size: 12px;
color: #8A9099;
}
.left .one {
line-height: 18px;
font-size: 14px;
color: #1E2226;
margin-bottom: 4px;
}
}

363
src/views/elementGroups.vue

@ -17,21 +17,61 @@
<h3 for="">表格(表头自定义自定义渲染固定列)</h3>
<GuipButton type="primary" @click="toggleAllSelection">全选按钮</GuipButton>
<GuipTable :tableData="tableData" ref="multipleTable" @selectChange="handleSelectionChange"
:multiple="true" autoColumn="true" width="900px">
<template slot="header">
<el-table-column fixed prop="date" label="日期" width="180">
<template slot="header" slot-scope="scope">
<el-form>
<!-- <el-table :data="tableData">
<template>
<el-table-column prop="type" width="190">
<template slot="header">
<GuipSelect class="custom-select" v-model="chktype" :options="type2filterOptions"
defaultValue="全部检测类型" @change="changeSelectType" />
</template>
<template slot-scope="scope">
{{ type2name[scope.row.type] }}
</template>
</el-table-column>
</template>
</el-table> -->
<!-- style="width:100%; height:500px" -->
<GuipTable :tableData="tableData" ref="multipleTable" @selectChange="handleSelectionChange"
:multiple="true" autoColumn="true" :loading="tableLoading">
<!-- <template slot="header"> -->
<el-table-column width="180">
<template slot="header">
<span>日期</span>
<el-button @click="handleFilter(scope.column)" icon="el-icon-search"
size="mini"></el-button>
</template>
</el-table-column>
<!-- <el-table-column prop="type">
<template slot="header">
<GuipSelect class="custom-select" v-model="chktype" :options="type2filterOptions"
defaultValue="全部检测类型" @change="changeSelectType" />
</template>
<el-table-column prop="name" label="姓名" width="150"></el-table-column>
<el-table-column prop="name1" label="姓名" width="150"></el-table-column>
<template slot-scope="scope">
{{ type2name[scope.row.type] }}
</template>
</el-table-column> -->
<el-table-column prop="created_at" label="时间" width="150">
<template slot-scope="scope">
<div class="flex cell_render">
<GuipToolTip content="点击编辑">
<span :class="(scope.row.payment == '0' ? 'normal_payment' : 'self_payment')">{{
scope.row.payment
==
'0' ? '默认站点支付' : '自定义支付' }}</span>
</GuipToolTip>
<svg-icon :path="require('@/assets/register/tableEdit.svg')" :color="'#8A9099'"
:hoverColor="'#006AFF'" />
</div>
</template>
</el-table-column>
<el-table-column prop="unit_num" label="数量" width="150"></el-table-column>
<el-table-column prop="name2" label="姓名" width="150"></el-table-column>
<el-table-column prop="name3" label="姓名" width="150"></el-table-column>
<!-- <el-table-column prop="name3" label="姓名" width="150"></el-table-column>
<el-table-column prop="name4" label="姓名" width="150"></el-table-column>
<el-table-column prop="name5" label="姓名" width="150"></el-table-column>
<el-table-column prop="name6" label="姓名" width="150"></el-table-column>
@ -39,7 +79,7 @@
<el-table-column prop="name8" label="姓名" width="150"></el-table-column>
<el-table-column prop="name9" label="姓名" width="150"></el-table-column>
<el-table-column prop="name11" label="姓名" width="150"></el-table-column>
<el-table-column prop="name12" label="姓名" width="150"></el-table-column>
<el-table-column prop="name12" label="姓名" width="150"></el-table-column> -->
<el-table-column prop="price" label="价格" width="150">
<!-- <template slot-scope="scope">
<span @click="handlePriceClick(scope.row)">{{ scope.row.price }}</span>
@ -63,7 +103,7 @@
prop="card" :options="options" defaultValue="选项1" />
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="100">
<el-table-column label="操作" width="100">
<template slot-scope="scope">
<div class="flex">
<el-button @click="handleClick(scope.row)" type="text">查看</el-button>
@ -71,40 +111,49 @@
</div>
</template>
</el-table-column>
</template>
</GuipTable>
<!-- </template> -->
</GuipTable>
<el-pagination background @size-change='handleSizeChange' @current-change='handleCurrentChange'
:current-page="currentPage" :page-size=pageSize layout="prev, pager, next,jumper"
:total="total">
</el-pagination>
</el-form>
</div>
<div>
<h3 for="">表格(带气泡框),内容自定义</h3>
<GuipTable :tableData="tableData" :key="random()" ref="multipleTable"
@selectChange="handleSelectionChange" :multiple="true" autoColumn="true" width="900px"
:columns="columns" @confirm="onConfirm" @cancel="onCancel">
<!-- 自定义姓名列的气泡框内容 -->
<template #popover-content-name="{ row, column }">
<div>
<GuipInput ref="GuipInput" width="252px" v-model="row[`edit_${column.prop}`]" label="排序"
:prop="column.label" placeholder="这是" />
</div>
</template>
<template #popover-content-age="{ row, column }">
<GuipInput ref="GuipInput" width="252px" v-model="row[`edit_${column.prop}`]" label="年龄"
:prop="column.label" placeholder="这是" unit="岁">
</GuipInput>
</template>
<!-- 自定义地址列的气泡框内容 -->
<template #popover-content-address="{ row, column }">
<div>
<p>自定义内容{{ column.label }}</p>
<el-select v-model="row[`edit_${column.prop}`]" placeholder="请选择">
<el-option label="北京市" value="北京市" />
<el-option label="上海市" value="上海市" />
<el-option label="广州市" value="广州市" />
</el-select>
</div>
</template>
</GuipTable>
<el-form>
<GuipTable :tableData="tableData2" :key="random()" ref="multipleTable"
@selectChange="handleSelectionChange" :multiple="true" autoColumn="true" width="900px"
:columns="columns" @confirm="onConfirm" @cancel="onCancel">
<!-- 自定义姓名列的气泡框内容 -->
<template #popover-content-name="{ row, column }">
<div>
<GuipInput ref="GuipInput" width="252px" v-model="row[`edit_${column.prop}`]" label="排序"
:prop="column.label" placeholder="这是" />
</div>
</template>
<template #popover-content-age="{ row, column }">
<GuipInput ref="GuipInput" width="252px" v-model="row[`edit_${column.prop}`]" label="年龄"
:prop="column.label" placeholder="这是" unit="岁">
</GuipInput>
</template>
<!-- 自定义地址列的气泡框内容 -->
<template #popover-content-address="{ row, column }">
<div>
<p>自定义内容{{ column.label }}</p>
<el-select v-model="row[`edit_${column.prop}`]" placeholder="请选择">
<el-option label="北京市" value="北京市" />
<el-option label="上海市" value="上海市" />
<el-option label="广州市" value="广州市" />
</el-select>
</div>
</template>
</GuipTable>
</el-form>
</div>
<div class="ele-item">
<label for="">文本域</label>
<GuipTextarea disabled :styleObject="styleObject" />
@ -153,6 +202,45 @@
</el-radio-group>
</div>
<div class="ele-item">
<label for="">按钮尺寸</label>
<GuipButton size="superBig">加盟并进入后台</GuipButton>
<GuipButton size="big">准备完毕验证自有域名</GuipButton>
<GuipButton size="page">下一步</GuipButton>
<GuipButton size="primary">保存</GuipButton>
<GuipButton size="table">新增站点</GuipButton>
<GuipButton size="form">前往添加</GuipButton>
</div>
<div class="ele-item">
<label for="">强按钮</label>
<!-- 默认 type= primary normal 样式 -->
<GuipButton>默认</GuipButton>
<GuipButton loading>按钮</GuipButton>
<GuipButton disabled>按钮</GuipButton>
</div>
<div class="ele-item">
<label for="">弱按钮</label>
<GuipButton type="ignore">按钮</GuipButton>
<GuipButton type="ignore" loading>按钮</GuipButton>
<GuipButton type="ignore" disabled>按钮</GuipButton>
</div>
<div class="ele-item">
<label for="">中按钮</label>
<GuipButton type="system">按钮</GuipButton>
<GuipButton type="system" loading>按钮</GuipButton>
<GuipButton type="system" disabled>按钮</GuipButton>
</div>
<div class="ele-item">
<label for="">独特按钮</label>
<hover-button button-text="上传文件" :default-icon="require('../assets/upLoad_grey.svg')"
:hover-icon="require('../assets/upLoad_active.svg')" default-text-color="#23242B"
hover-text-color="#006AFF" @click="btnClick" />
</div>
<div class="ele-item">
<label for="">独特按钮单独写样式</label>
<div class="btn1">创建首个网站</div>
</div>
<!-- <div class="ele-item">
<label for="">常规按钮</label>
<GuipButton>默认按钮</GuipButton>
<GuipButton type="mild" size="medium">轻度按钮</GuipButton>
@ -168,7 +256,6 @@
<label for="">禁用按钮</label>
<GuipButton disabled>默认按钮</GuipButton>
<GuipButton type="mild" disabled size="medium">轻度按钮</GuipButton>
<GuipButton type="reverseMild" disabled>按钮</GuipButton>
<GuipButton type="primary" size="medium" disabled>按钮</GuipButton>
<GuipButton type="success" disabled>按钮</GuipButton>
@ -182,11 +269,10 @@
<GuipButton type="primary" size="medium">中等按钮</GuipButton>
<GuipButton type="primary" size="small">小的按钮</GuipButton>
<GuipButton type="primary" size="mini">迷你按钮</GuipButton>
</div>
</div> -->
<div class="ele-item">
<label for="">自定义宽高按钮</label>
<GuipButton type="primary" :btnstyle="btnstyleObj">超长啊扭测试长的长的</GuipButton>
<GuipButton type="primary" :btnstyle="btnstyleObj1">随便写的</GuipButton>
<GuipButton type="primary" :btnstyle="btnstyleObj">宽高自定义</GuipButton>
</div>
<div style="width: 600px;">
@ -202,30 +288,19 @@
prop="age" placeholder="这是自定义默认提示语" />
</div>
<div style="width: 600px;height: 150px;">
<h3>获取手机验证码(布局也可更改使用插槽自定义展示内容)</h3>
<GuipFormItem column="column" addClass="w388">
<!-- 这个 form-top-icon 类名已经有样式除此布局外需要自定义添加样式 -->
<div slot="formLeft" class="form-top-icon">
<img src="../assets/franchise1/phone-fill.svg" alt="">
<span>手机号码</span>
</div>
<PhoneCode slot="formDom"></PhoneCode>
</GuipFormItem>
</div>
<div class="ele-item">
<label for="">开关L</label>
<GuipSwitch v-model="switchValue" activeText="开启" inactiveText="关闭" @change="onSwitchChange">
</GuipSwitch>
</div>
<el-button type="primary" @click="submitForm">表单Submit</el-button>
<el-button type="primary" @click="submitForm">Submit</el-button>
</el-form>
<div style="width: 100%;margin: 20px 0;height: 20px;background-color: antiquewhite;">
--------------------分割线0------------------------------</div>
<div style="display: flex;">
<div style="display: flex;" class="ele-item">
<label for="">日期选择器</label>
<el-date-picker v-model="date1" type="daterange" range-separator="" start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
@ -250,8 +325,29 @@
<el-button @click="save" type="primary">保存</el-button>
</div> -->
</div>
<el-button type="primary" @click="openDialog">打开弹框</el-button>
<div class="flex ele-item">
<label for="">一些功能集合</label>
<GuipButton type="primary" @click="openDialog">打开弹框</GuipButton>
<GuipButton type="primary" @click="openLoading" size="page">展示加载动画 2s</GuipButton>
</div>
<div class="flex ele-item">
<label for="">提示信息</label>
<GuipToolTip content="这是一个提示">
<GuipButton type="primary" size="page">悬停查看提示</GuipButton>
</GuipToolTip>
<GuipToolTip placement="bottom" effect="light">
<GuipButton type="primary" size="page">自定义提示内容</GuipButton>
<template #content>
<div style="max-width: 200px">
<h4>自定义标题</h4>
<p>这里可以放任何HTML内容</p>
<el-button size="mini">甚至按钮</el-button>
</div>
</template>
</GuipToolTip>
</div>
<GuipDialog :dialogVisible="dialogVisible" title="自定义标题" :show-close-button="false"
:show-cancel-button="showCancelButton" @confirm="handleConfirm" @cancel="handleCancel" @close="handleClose"
@ -261,14 +357,6 @@
<p>这是一个自定义内容的弹框</p>
</div>
</GuipDialog>
<!-- <el-switch v-model="switchValue1" active-text="按月付费" inactive-text="按年付费">
</el-switch>
<el-switch style="display: block" v-model="switchValue2" active-color="#13ce66"
active-text="按月付费" inactive-text="按年付费">
</el-switch> -->
</div>
</template>
@ -277,18 +365,19 @@
import { rules } from "../assets/vabForm";
// @ is an alias to /src
import GuipSwitch from '@/components/GuipSwitch.vue';
import GuipFormItem from '@/components/GuipFormItem.vue';
import GuipDialog from '@/components/GuipDialog.vue';
import GuipRadio from '@/components/GuipRadio.vue';
// import GuipForm from '@/components/GuipForm.vue';
import PhoneCode from '@/components/PhoneCode.vue';
import GuipButton from '@/components/GuipButton.vue';
// import GuipConfirm from '@/components/GuipConfirm.vue';
import GuipInput from '@/components/GuipInput.vue';
// import GuipModal from '@/components/GuipModal.vue';
import GuipSelect from '@/components/GuipSelect.vue';
import GuipTable from '@/components/GuipTable.vue';
import GuipTextarea from '@/components/GuipTextarea.vue'
import GuipToolTip from '@/components/GuipToolTip.vue'
import HoverButton from '@/components/HoverButton.vue'
import SvgIcon from '@/components/SvgIcon.vue';
// import { mapState } from 'vuex'
// import store from '@/store';
export default {
name: 'HomeView',
@ -296,23 +385,25 @@ export default {
GuipTextarea,
GuipTable,
GuipSwitch,
// GuipForm,
GuipDialog,
GuipRadio,
GuipFormItem,
PhoneCode,
GuipButton,
// GuipConfirm,
GuipInput,
// GuipModal,
GuipSelect
GuipSelect,
GuipToolTip,
HoverButton,
SvgIcon
},
data() {
return {
currentPage: 1, //
pageSize: 5, //
total: 0, //
tableLoading: false,
timer: null,
date1: '',
switchValue: true,
dialogVisible: true,//
dialogVisible: false,//
showCancelButton: true, //
showCloseButton: true, //
form: {
@ -374,7 +465,7 @@ export default {
],
},
//
tableData: [{
tableData2: [{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
@ -471,17 +562,15 @@ export default {
radio: 3,
radio1: 5,
btnstyleObj: {
width: '247px',
height: '44px',
background: '#F2F7FF',
borderRadius: '2px',
fontSize: '14px',
letterSpacing: '0.08em',
color: '#006AFF !important'
width: '388px',
height: '46px',
borderRadius: '4px',
background: '#006AFF',
},
btnstyleObj1: {
width: '180px',
height: '40px',
width: '247px',
height: '46px',
borderRadius: '4px',
},
styleObject: {
width: '200px',
@ -516,7 +605,64 @@ export default {
}],
}
},
mounted() {
this.getList();
this.getStagePurchase()
// this.$loadingFn.show()
// setInterval(()=>{
// this.$loadingFn.hide()
// },70000)
// this.timer = setTimeout(() => {
// this.$store.dispatch('hideLoading')
// }, 2000)
// this.timer = null;
},
methods: {
showTooltip() {
this.$refs.tooltip.show()
},
hideTooltip() {
this.$refs.tooltip.hide()
},
handleSizeChange(val) {
this.pageSize = val
this.getStagePurchase()
},
handleCurrentChange(val) {
this.currentPage = val
this.getStagePurchase()
},
getStagePurchase() {
this.tableLoading = true
const that = this
that.tableData = []
this.$http('POST', '/supernew/ajax_get_stage_purchase', {
type: 0,
cur_page: 1,
page_size: 5,
}).then(response => {
this.tableLoading = false
this.$nextTick(() => {
that.tableData = response.data.list
// that.type2name = response.data.type2name
that.total = response.data.total
})
}).catch(error => {
console.error(error, 'error')
})
},
btnClick() {
},
openLoading() {
this.$store.dispatch('showLoading')
setTimeout(() => {
this.$store.dispatch('hideLoading')
}, 2000)
},
handleFilter(column) {
//
console.log('筛选列:', column);
@ -527,7 +673,6 @@ export default {
return randomNumber
},
onSwitchChange(value) {
console.log('Switch 状态变化:', this.switchValue, value);
},
// ---start
@ -619,6 +764,7 @@ export default {
console.log(value, 'value===qinghcu');
},
getList() {
console.log('zhixingle--');
const dataList = rules();
dataList.forEach((item) => {
if (item.field === "id") {
@ -649,9 +795,14 @@ export default {
this.$refs.multipleTable.$refs.guiptable.toggleAllSelection();
},
},
mounted() {
this.getList();
},
beforeDestroy() {
if (this.timer) {
clearTimeout(this.timer)
// loading
this.$store.dispatch('hideContentLoading')
}
}
}
</script>
@ -695,4 +846,24 @@ export default {
text-align: right;
justify-content: center;
}
.btn1 {
cursor: pointer;
width: 114px;
height: 40px;
/* 自动布局 */
display: flex;
align-items: center;
padding: 11px 12px;
box-sizing: border-box;
color: #FFFFFF;
border-radius: 4px;
transition: all .3s;
background: linear-gradient(290deg, #FF4143 4%, #FF768B 92%);
&:hover {
opacity: 0.7;
background: linear-gradient(290deg, #FF4143 4%, #FF768B 92%);
}
}
</style>
Loading…
Cancel
Save