|
@@ -1,31 +1,34 @@
|
|
|
<template>
|
|
|
<div class="chartTheme-page">
|
|
|
<div class="header">
|
|
|
- <div class="select-item">
|
|
|
- <span style="margin-right: 20px;">主题设置</span>
|
|
|
+ <div style="display: flex;gap:20px;">
|
|
|
<div class="select-item">
|
|
|
- <label>图表类型</label>
|
|
|
- <el-select v-model="formData.chartType" style="margin-left: 15px;">
|
|
|
+ <div class="select-item">
|
|
|
+ <label>图表类型</label>
|
|
|
+ <el-select v-model="formData.chartType" style="margin-left: 15px;" @change="getThemeList();">
|
|
|
+ <el-option
|
|
|
+ v-for="item in chartTypeOpts"
|
|
|
+ :key="item.ChartThemeTypeId"
|
|
|
+ :label="item.ChartTypeName"
|
|
|
+ :value="item.ChartThemeTypeId"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="select-item">
|
|
|
+ <label>ETA图库默认主题</label>
|
|
|
+ <el-select v-model="formData.theme" style="margin-left: 10px;">
|
|
|
<el-option
|
|
|
- v-for="item in chartTypeOpts"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
+ v-for="item in themeOpts"
|
|
|
+ :key="item.ChartThemeId"
|
|
|
+ :label="item.ChartThemeName"
|
|
|
+ :value="item.ChartThemeId"
|
|
|
/>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="select-item">
|
|
|
- <label>ETA图库默认主题</label>
|
|
|
- <el-select v-model="formData.theme" style="margin-left: 10px;">
|
|
|
- <el-option
|
|
|
- v-for="item in themeOpts"
|
|
|
- :key="item.id"
|
|
|
- :label="item.label"
|
|
|
- :value="item.id"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
+
|
|
|
+ <el-button type="primary" v-permission="permissionBtn.chartThemePermission.chartTheme_edit" @click="setConfigTheme">保存</el-button>
|
|
|
</div>
|
|
|
|
|
|
<!-- 主题列表 -->
|
|
@@ -33,39 +36,28 @@
|
|
|
<ul class="list-wrap">
|
|
|
<li
|
|
|
v-for="(item,index) in themeOpts"
|
|
|
- :key="index"
|
|
|
+ :key="item.ChartThemeId"
|
|
|
class="theme-item"
|
|
|
>
|
|
|
- <header class="item-top">
|
|
|
- <label>{{item.label}}</label>
|
|
|
- <div>
|
|
|
- <el-button type="text" @click="editThemeHandle(item)">编辑</el-button>
|
|
|
- <span class="deletesty" @click="delThemeHandle(index)" v-if="item.id!==0">删除</span>
|
|
|
- </div>
|
|
|
- </header>
|
|
|
<el-card>
|
|
|
<div slot="header" class="item-top">
|
|
|
- <span class="text_oneLine">标题</span>
|
|
|
+ <span class="text_oneLine">{{item.ChartThemeName}}</span>
|
|
|
+ <div>
|
|
|
+ <el-button type="text" @click="editThemeHandle(item)" v-permission="permissionBtn.chartThemePermission.chartTheme_edit">编辑</el-button>
|
|
|
+ <span class="deletesty" @click="delThemeHandle(item,index)" v-permission="permissionBtn.chartThemePermission.chartTheme_del" v-if="!item.IsSystemTheme">删除</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <img
|
|
|
- :src="item.ChartImage"
|
|
|
- alt=""
|
|
|
- class="chart-img"
|
|
|
- />
|
|
|
+ <div class="chart-img" :style="`backgroundImage:url(${item.ChartImage})`"></div>
|
|
|
</el-card>
|
|
|
</li>
|
|
|
- <li class="add-item" @click="addThemeHandle">
|
|
|
- <div>
|
|
|
+ <li class="theme-item add-item" @click="addThemeHandle" v-permission="permissionBtn.chartThemePermission.chartTheme_add">
|
|
|
+ <div class="chart-img">
|
|
|
<i class="el-icon-plus"/>
|
|
|
<el-button type="text" style="font-size:16px;">添加自定义主题</el-button>
|
|
|
</div>
|
|
|
</li>
|
|
|
</ul>
|
|
|
|
|
|
- <div class="bottom">
|
|
|
- <el-button type="primary">保存</el-button>
|
|
|
- </div>
|
|
|
-
|
|
|
</div>
|
|
|
|
|
|
|
|
@@ -85,60 +77,87 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div slot="footer" style="margin: 20px 0;">
|
|
|
- <el-button
|
|
|
- @click="isOpenThemeDia=false"
|
|
|
- style="width: 132px; height: 40px"
|
|
|
- >取消</el-button>
|
|
|
<el-button
|
|
|
@click="saveThemeHandle"
|
|
|
type="primary"
|
|
|
style="width: 132px; height: 40px"
|
|
|
>保存</el-button>
|
|
|
+ <el-button
|
|
|
+ @click="isOpenThemeDia=false"
|
|
|
+ style="width: 132px; height: 40px"
|
|
|
+ >取消</el-button>
|
|
|
</div>
|
|
|
</m-dialog>
|
|
|
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
-import { chartTypeOpts } from "./common/config";
|
|
|
+import * as chartThemeInterface from '@/api/modules/chartThemeApi';
|
|
|
import mDialog from '@/components/mDialog.vue';
|
|
|
export default {
|
|
|
components: { mDialog },
|
|
|
data() {
|
|
|
return {
|
|
|
- chartTypeOpts,
|
|
|
+ chartTypeOpts:[],
|
|
|
formData: {
|
|
|
- chartType: chartTypeOpts[0].value,
|
|
|
+ chartType: 0,
|
|
|
theme: 0
|
|
|
},
|
|
|
|
|
|
- themeOpts: [
|
|
|
- { label: 'ETA主题',id: 0,ChartImage:'' },
|
|
|
- { label: 'ETA主题1',id: 1,ChartImage:'' },
|
|
|
- { label: 'ETA主题2',id: 2,ChartImage:'' },
|
|
|
- { label: 'ETA主题3',id: 3,ChartImage:'' },
|
|
|
- { label: 'ETA主题4',id: 4,ChartImage:'' },
|
|
|
- ],
|
|
|
+ themeOpts: [],
|
|
|
|
|
|
isOpenThemeDia: false,
|
|
|
addThemeForm: {
|
|
|
- themeId: 0,
|
|
|
themeName: '',
|
|
|
}
|
|
|
};
|
|
|
},
|
|
|
- mounted() {},
|
|
|
+ mounted() {
|
|
|
+ this.getChartType()
|
|
|
+ },
|
|
|
methods: {
|
|
|
+ /* 获取图表类型 */
|
|
|
+ async getChartType() {
|
|
|
+ let res = await chartThemeInterface.getThemeChartType()
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+
|
|
|
+ this.chartTypeOpts = res.Data||[];
|
|
|
+ this.formData.chartType = res.Data[0].ChartThemeTypeId;
|
|
|
+ this.getThemeList()
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 主题列表 */
|
|
|
+ async getThemeList() {
|
|
|
+ let res = await chartThemeInterface.getThemeByType({ChartThemeTypeId: this.formData.chartType})
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ this.themeOpts = res.Data || []
|
|
|
+ this.formData.theme = res.Data[0].DefaultChartThemeId
|
|
|
+ },
|
|
|
+
|
|
|
+ /* 设置默认主题 */
|
|
|
+ async setConfigTheme() {
|
|
|
+ const { chartType,theme } = this.formData
|
|
|
+ let res = await chartThemeInterface.setConfigTheme({
|
|
|
+ ChartThemeId: theme,
|
|
|
+ ChartThemeTypeId: chartType
|
|
|
+ })
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ this.$message.success('默认主题设置成功')
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
// 添加主题
|
|
|
addThemeHandle() {
|
|
|
this.isOpenThemeDia = true;
|
|
|
this.addThemeForm= {
|
|
|
- themeId: 0,
|
|
|
themeName: '',
|
|
|
}
|
|
|
},
|
|
|
|
|
|
- async delThemeHandle(index) {
|
|
|
+ async delThemeHandle(item,index) {
|
|
|
await this.$confirm('删除后,所有采用该主题的图表,将采用ETA主题,是否确定删除?',
|
|
|
'提示', {
|
|
|
confirmButtonText: '确定',
|
|
@@ -146,26 +165,37 @@ export default {
|
|
|
type: 'warning'
|
|
|
})
|
|
|
|
|
|
+ let res = await chartThemeInterface.delTheme({ ChartThemeId: item.ChartThemeId })
|
|
|
+ if(res.Ret!==200) return
|
|
|
+
|
|
|
this.themeOpts.splice(index,1)
|
|
|
+ this.$message.success('删除成功')
|
|
|
},
|
|
|
|
|
|
- editThemeHandle({id}) {
|
|
|
+ editThemeHandle({ChartThemeId}) {
|
|
|
this.$router.push({
|
|
|
path: '/chartThemeSet',
|
|
|
query: {
|
|
|
type: this.formData.chartType,
|
|
|
- id
|
|
|
+ themeId: ChartThemeId
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
|
|
|
- saveThemeHandle() {
|
|
|
+
|
|
|
+ async saveThemeHandle() {
|
|
|
if(!this.addThemeForm.themeName) return this.$message.warning('主题名称不能为空')
|
|
|
-
|
|
|
- this.isOpenThemeDia = false;
|
|
|
- this.themeOpts.push({
|
|
|
- label: this.addThemeForm.themeName,id: new Date().getTime(),ChartImage:''
|
|
|
+
|
|
|
+ let res = await chartThemeInterface.addTheme({
|
|
|
+ ChartThemeName: this.addThemeForm.themeName,
|
|
|
+ ChartThemeTypeId: this.formData.chartType
|
|
|
})
|
|
|
+
|
|
|
+ if(res.Ret !== 200) return
|
|
|
+ this.$message.success('添加成功')
|
|
|
+ this.isOpenThemeDia = false;
|
|
|
+
|
|
|
+ this.getThemeList()
|
|
|
}
|
|
|
},
|
|
|
};
|
|
@@ -175,7 +205,6 @@ export default {
|
|
|
box-sizing: border-box;
|
|
|
}
|
|
|
.chartTheme-page {
|
|
|
- min-height: calc(100vh - 120px);
|
|
|
.select-item {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -192,6 +221,10 @@ export default {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
margin-bottom: 30px;
|
|
|
+ gap: 20px;
|
|
|
+ }
|
|
|
+ .main {
|
|
|
+ min-height: calc(100vh - 240px);
|
|
|
}
|
|
|
.list-wrap {
|
|
|
display: flex;
|
|
@@ -199,31 +232,31 @@ export default {
|
|
|
margin-bottom: 30px;
|
|
|
gap: 15px 30px;
|
|
|
.theme-item {
|
|
|
- min-width: 280px;
|
|
|
+ width: 20%;
|
|
|
+ min-width: 230px;
|
|
|
position: relative;
|
|
|
.item-top {
|
|
|
display: flex;
|
|
|
+ height: 30px;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
font-size: 14px;
|
|
|
}
|
|
|
.chart-img {
|
|
|
width: 100%;
|
|
|
- height: 220px;
|
|
|
- object-fit: contain !important;
|
|
|
- cursor: pointer;
|
|
|
+ height: 0;
|
|
|
+ padding-bottom: 75%;
|
|
|
+ object-fit: cover ;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-size: 100%;
|
|
|
}
|
|
|
}
|
|
|
.add-item {
|
|
|
background: #F8F8F8;
|
|
|
- display: flex;
|
|
|
- justify-content: center;
|
|
|
- align-items: center;
|
|
|
- width: 280px;
|
|
|
- height: 302px;
|
|
|
- margin-top: 40px;
|
|
|
border: 1px dashed #DCDFE6;
|
|
|
cursor: pointer;
|
|
|
+ text-align: center;
|
|
|
+ padding-top: 60px;
|
|
|
.el-icon-plus {
|
|
|
font-size: 30px;
|
|
|
display:block;
|
|
@@ -233,11 +266,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- .bottom {
|
|
|
- margin: 40px 0;
|
|
|
- display: flex;
|
|
|
- justify-content: flex-end;
|
|
|
- }
|
|
|
}
|
|
|
</style>
|
|
|
<style lang="scss">
|