| @@ -0,0 +1 @@ | |||
| <div :id="id" class="chart"></div> | |||
| @@ -0,0 +1,195 @@ | |||
| import * as echarts from 'echarts'; | |||
| import elementResizeDetectorMaker from 'element-resize-detector'; | |||
| export default { | |||
| props: { | |||
| id: { | |||
| type: String, | |||
| default: 'lines' | |||
| }, | |||
| data: { | |||
| type: Array, | |||
| default: function () { | |||
| return [ | |||
| { | |||
| name: '1月', | |||
| value: '10' | |||
| }, | |||
| { | |||
| name: '2月', | |||
| value: '19' | |||
| } | |||
| ]; | |||
| } | |||
| }, | |||
| color: { | |||
| type: Array, | |||
| default: function () { | |||
| return ['rgba(134, 91, 252, 1)', 'rgba(26, 106, 226, 0.5)', 'rgba(26, 106, 226, 0)'] | |||
| } | |||
| }, | |||
| areaStyle: { | |||
| type: Array, | |||
| default: function () { | |||
| return ['rgba(134, 91, 252, 1)', 'rgba(26, 106, 226, 0.5)', 'rgba(26, 106, 226, 0)'] | |||
| } | |||
| } | |||
| }, | |||
| data () { | |||
| return { | |||
| chart: null | |||
| }; | |||
| }, | |||
| mounted () { | |||
| this.initChart(); | |||
| }, | |||
| computed: { | |||
| }, | |||
| methods: { | |||
| // 设置监听器 页面尺寸变化重新绘制图表 | |||
| initResizeCallBack () { | |||
| const erd = elementResizeDetectorMaker(); | |||
| erd.listenTo(document.getElementById(this.id), () => { | |||
| this.$nextTick(() => { | |||
| this.chart.resize(); | |||
| }); | |||
| }); | |||
| }, | |||
| initChart () { | |||
| this.chart = echarts.init(document.getElementById(this.id)); | |||
| this.chartSetOption(); | |||
| }, | |||
| chartSetOption () { | |||
| let xAxisData = []; | |||
| let data = []; | |||
| this.data.forEach(item => { | |||
| xAxisData.push(item.name) | |||
| data.push(item.value) | |||
| }); | |||
| const option = { | |||
| grid: { | |||
| left: "5%", | |||
| right: "10%", | |||
| top: "15%", | |||
| bottom: "10%", | |||
| containLabel: true, | |||
| }, | |||
| tooltip: { | |||
| show: true, | |||
| trigger: "item", | |||
| }, | |||
| legend: { | |||
| show: false | |||
| }, | |||
| color: { | |||
| color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ | |||
| { | |||
| offset: 1, | |||
| color: this.color[0], | |||
| }, | |||
| { | |||
| offset: 0.5, | |||
| color: this.color[1], | |||
| }, | |||
| { | |||
| offset: 0, | |||
| color: this.color[2], | |||
| }, | |||
| ]), | |||
| }, | |||
| xAxis: [ | |||
| { | |||
| type: "category", | |||
| boundaryGap: false, | |||
| axisLabel: { | |||
| color: 'rgba(185, 211, 235, 1)', | |||
| }, | |||
| axisLine: { | |||
| show: false | |||
| }, | |||
| axisTick: { | |||
| show: false | |||
| }, | |||
| splitLine: { | |||
| show: false | |||
| }, | |||
| data: xAxisData | |||
| }, | |||
| ], | |||
| yAxis: [ | |||
| { | |||
| type: "value", | |||
| name: "单位:万元", | |||
| nameTextStyle: { | |||
| color: 'rgba(185, 211, 235, 1)' | |||
| }, | |||
| axisLabel: { | |||
| formatter: "{value}", | |||
| textStyle: { | |||
| color: "rgba(185, 211, 235, 1)", | |||
| }, | |||
| }, | |||
| axisLine: { | |||
| lineStyle: { | |||
| color: "#27b4c2", | |||
| }, | |||
| }, | |||
| axisTick: { | |||
| show: false, | |||
| }, | |||
| splitLine: { | |||
| show: true, | |||
| lineStyle: { | |||
| color: "#11366e", | |||
| }, | |||
| }, | |||
| } | |||
| ], | |||
| series: [ | |||
| { | |||
| name: "", | |||
| type: "line", | |||
| smooth: true, | |||
| symbolSize: 12, | |||
| itemStyle: { | |||
| normal: { | |||
| color: this.color[0], | |||
| lineStyle: { | |||
| color: this.color[0], | |||
| width: 1, | |||
| }, | |||
| areaStyle: { | |||
| color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [ | |||
| { | |||
| offset: 1, | |||
| color: this.areaStyle[0], | |||
| }, | |||
| { | |||
| offset: 0.5, | |||
| color: this.areaStyle[1], | |||
| }, | |||
| { | |||
| offset: 0, | |||
| color: this.areaStyle[2], | |||
| }, | |||
| ]), | |||
| }, | |||
| }, | |||
| }, | |||
| markPoint: { | |||
| itemStyle: { | |||
| normal: { | |||
| color: "red", | |||
| }, | |||
| }, | |||
| }, | |||
| data: data | |||
| } | |||
| ], | |||
| };; | |||
| this.chart.setOption(option); | |||
| this.initResizeCallBack(); | |||
| } | |||
| } | |||
| }; | |||
| @@ -0,0 +1,6 @@ | |||
| .chart { | |||
| overflow: visible; | |||
| width: 100%; | |||
| height: 100%; | |||
| z-index: 2; | |||
| } | |||
| @@ -0,0 +1,3 @@ | |||
| <template src='./index.html'/> | |||
| <script lang='js' src='./index.js'></script> | |||
| <style lang='scss' src='./index.scss' scoped></style> | |||
| @@ -53,8 +53,8 @@ service.interceptors.response.use(res => { | |||
| try { | |||
| const code = res.data.code || 200; | |||
| // 获取错误信息 | |||
| // const msg = errorCode[code] || res.data.msg || errorCode['default'] | |||
| const msg = errorCode[code] | |||
| const msg = errorCode[code] || res.data.msg || errorCode['default'] | |||
| // const msg = errorCode[code] | |||
| if (code === 401) { | |||
| MessageBox.confirm('登录状态已过期,请重新登录', '系统提示', { | |||
| confirmButtonText: '重新登录', | |||
| @@ -327,4 +327,17 @@ export function debtCategoryAnalysis (deptId, year) { | |||
| method: 'get', | |||
| params: query | |||
| }) | |||
| } | |||
| } | |||
| // 资产一张图-债务预警-右中-债务分布 | |||
| export function debtDistribution (deptId, year) { | |||
| let query = { | |||
| deptId, | |||
| year | |||
| } | |||
| return request({ | |||
| url: 'api/home/xixia/assetLiabilities/zwfb', | |||
| method: 'get', | |||
| params: query | |||
| }) | |||
| } | |||
| @@ -1,4 +1,23 @@ | |||
| <Pannel title="负债分布" height="305"> | |||
| <BarSpecial id="other"></BarSpecial> | |||
| <Pannel title="负债分布" height="305" | |||
| v-loading="!isLoad" | |||
| element-loading-text="拼命加载中" | |||
| element-loading-spinner="el-icon-loading" | |||
| element-loading-background="rgba(0, 0, 0, 0.1)" | |||
| > | |||
| <div class="full"> | |||
| <div class="top"> | |||
| <el-dropdown class="right" @command="handleCommand"> | |||
| <span class="el-dropdown-link"> | |||
| {{currentselect}}<i class="el-icon-arrow-down el-icon--right"></i> | |||
| </span> | |||
| <el-dropdown-menu slot="dropdown"> | |||
| <el-dropdown-item v-for="item in dropdown" :command="item.name">{{item.name}}</el-dropdown-item> | |||
| </el-dropdown-menu> | |||
| </el-dropdown> | |||
| </div> | |||
| <div class="buttom"> | |||
| <BarSpecial v-if="isLoad" :data="data"></BarSpecial> | |||
| </div> | |||
| </div> | |||
| </Pannel> | |||
| @@ -1,18 +1,90 @@ | |||
| import Pannel from '@/components/pannel/index.vue'; | |||
| import BarSpecial from '@/components/charts/bar-special/index.vue'; | |||
| import { distributionOfLiabilities } from '../../../../api/index.js'; | |||
| import { mapGetters } from 'vuex'; | |||
| export default { | |||
| components: { | |||
| BarSpecial, | |||
| Pannel | |||
| }, | |||
| computed: { | |||
| ...mapGetters(['year', 'deptId']) | |||
| }, | |||
| watch: { | |||
| year: { | |||
| handler () { | |||
| this.getData(); | |||
| } | |||
| }, | |||
| deptId: { | |||
| handler () { | |||
| this.getData(); | |||
| } | |||
| } | |||
| }, | |||
| data () { | |||
| return { | |||
| isLoad: false, | |||
| currentselect: '', | |||
| data: [], | |||
| dropdown: [] | |||
| }; | |||
| }, | |||
| created () { | |||
| this.getSelectData() | |||
| }, | |||
| mounted () { | |||
| }, | |||
| methods: { | |||
| getSelectData () { | |||
| if (this.year, this.deptId) { | |||
| distributionOfLiabilities(this.deptId, this.year).then(res => { | |||
| this.dropdown = res.data.map(item => { | |||
| return { | |||
| name: item.name | |||
| } | |||
| }) | |||
| this.currentselect = this.dropdown[0].name | |||
| this.getData() | |||
| }) | |||
| } | |||
| }, | |||
| getData () { | |||
| if (this.year, this.deptId) { | |||
| this.total = 0 | |||
| this.isLoad = false; | |||
| distributionOfLiabilities(this.deptId, this.year).then(res => { | |||
| res.data.forEach(item => { | |||
| if (item.name === this.currentselect) { | |||
| let data = [ | |||
| { | |||
| name: '资不抵债', | |||
| value: item.zbdz | |||
| }, | |||
| { | |||
| name: '高债务率', | |||
| value: item.gfzl | |||
| }, | |||
| { | |||
| name: '中债务率', | |||
| value: item.zfzl | |||
| }, | |||
| { | |||
| name: '低债务率', | |||
| value: item.dfzl | |||
| } | |||
| ] | |||
| this.data = data | |||
| } | |||
| }) | |||
| this.isLoad = true; | |||
| }) | |||
| } | |||
| }, | |||
| handleCommand (item) { | |||
| this.currentselect = item; | |||
| this.getData() | |||
| } | |||
| } | |||
| }; | |||
| @@ -8,10 +8,24 @@ | |||
| display: flex !important; | |||
| align-items: center !important; | |||
| justify-content: flex-end; | |||
| .right { | |||
| width: 80px; | |||
| height: 30px; | |||
| } | |||
| } | |||
| .buttom { | |||
| flex: 1; | |||
| width: 100%; | |||
| } | |||
| } | |||
| .el-dropdown-link { | |||
| cursor: pointer; | |||
| color: #409EFF; | |||
| } | |||
| .el-icon-arrow-down { | |||
| font-size: 12px; | |||
| } | |||
| @@ -1,4 +1,23 @@ | |||
| <Pannel title="债务分布" height="305"> | |||
| <BarSpecial></BarSpecial> | |||
| <Pannel title="债务分布" height="305" | |||
| v-loading="!isLoad" | |||
| element-loading-text="拼命加载中" | |||
| element-loading-spinner="el-icon-loading" | |||
| element-loading-background="rgba(0, 0, 0, 0.1)" | |||
| > | |||
| <div class="full"> | |||
| <div class="top"> | |||
| <el-dropdown class="right" @command="handleCommand"> | |||
| <span class="el-dropdown-link"> | |||
| {{currentselect}}<i class="el-icon-arrow-down el-icon--right"></i> | |||
| </span> | |||
| <el-dropdown-menu slot="dropdown"> | |||
| <el-dropdown-item v-for="item in dropdown" :command="item.name">{{item.name}}</el-dropdown-item> | |||
| </el-dropdown-menu> | |||
| </el-dropdown> | |||
| </div> | |||
| <div class="buttom"> | |||
| <BarSpecial id="2dsad" v-if="isLoad" :data="data"></BarSpecial> | |||
| </div> | |||
| </div> | |||
| </Pannel> | |||
| @@ -1,16 +1,13 @@ | |||
| import Pannel from '@/components/pannel/index.vue'; | |||
| import BarSpecial from '@/components/charts/bar-special/index.vue'; | |||
| import { debtDistribution } from '../../../../api/index.js'; | |||
| import { mapGetters } from 'vuex'; | |||
| import { distributionOfLiabilities } from '../../../../api/index.js'; | |||
| export default { | |||
| components: { | |||
| BarSpecial, | |||
| Pannel | |||
| }, | |||
| data () { | |||
| return { | |||
| }; | |||
| }, | |||
| computed: { | |||
| ...mapGetters(['year', 'deptId']) | |||
| }, | |||
| @@ -18,24 +15,76 @@ export default { | |||
| year: { | |||
| handler () { | |||
| this.getData(); | |||
| }, | |||
| immediate: true, // 立即执行 | |||
| } | |||
| }, | |||
| deptId: { | |||
| handler () { | |||
| this.getData(); | |||
| }, | |||
| immediate: true, // 立即执行 | |||
| } | |||
| } | |||
| }, | |||
| data () { | |||
| return { | |||
| isLoad: false, | |||
| currentselect: '', | |||
| data: [], | |||
| dropdown: [] | |||
| }; | |||
| }, | |||
| created () { | |||
| this.getSelectData() | |||
| }, | |||
| mounted () { | |||
| }, | |||
| methods: { | |||
| getSelectData () { | |||
| if (this.year, this.deptId) { | |||
| debtDistribution(this.deptId, this.year).then(res => { | |||
| this.dropdown = res.data.map(item => { | |||
| return { | |||
| name: item.name | |||
| } | |||
| }) | |||
| this.currentselect = this.dropdown[0].name | |||
| this.getData() | |||
| }) | |||
| } | |||
| }, | |||
| getData () { | |||
| if (this.year, this.deptId) { | |||
| this.total = 0 | |||
| this.isLoad = false; | |||
| distributionOfLiabilities(this.deptId, this.year).then(res => { | |||
| debtDistribution(this.deptId, this.year).then(res => { | |||
| res.data.forEach(item => { | |||
| if (item.name === this.currentselect) { | |||
| let data = [ | |||
| { | |||
| name: '资不抵债', | |||
| value: item.zbdzw | |||
| }, | |||
| { | |||
| name: '高债务率', | |||
| value: item.gzwl | |||
| }, | |||
| { | |||
| name: '中债务率', | |||
| value: item.zzwl | |||
| }, | |||
| { | |||
| name: '低债务率', | |||
| value: item.dzwl | |||
| } | |||
| ] | |||
| this.data = data | |||
| } | |||
| }) | |||
| this.isLoad = true; | |||
| }) | |||
| } | |||
| }, | |||
| handleCommand (item) { | |||
| this.currentselect = item; | |||
| this.getData() | |||
| } | |||
| } | |||
| }; | |||
| @@ -8,10 +8,24 @@ | |||
| display: flex !important; | |||
| align-items: center !important; | |||
| justify-content: flex-end; | |||
| .right { | |||
| width: 80px; | |||
| height: 30px; | |||
| } | |||
| } | |||
| .buttom { | |||
| flex: 1; | |||
| width: 100%; | |||
| } | |||
| } | |||
| .el-dropdown-link { | |||
| cursor: pointer; | |||
| color: #409EFF; | |||
| } | |||
| .el-icon-arrow-down { | |||
| font-size: 12px; | |||
| } | |||
| @@ -35,7 +35,6 @@ export default { | |||
| this.isLoad = false // 是否加载完成 | |||
| if (this.year, this.deptId) { | |||
| debtOverview2(this.deptId, this.year).then(res => { | |||
| console.log(222, res); | |||
| this.data.topData[0][0].value = res.data.zbdzw | |||
| this.data.topData[0][1].value = res.data.gzwl | |||
| this.data.topData[1][0].value = res.data.zzwl | |||