123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 |
- <template>
- <view>
- <cu-custom bgColor="bg-blue" :isBack="true" backUrl="/pages/index/index">
- <block slot="content">数据分析</block>
- </cu-custom>
- <view class="header-line-2">
- <!-- <jp-picker v-model="yqid" rangeKey="label" rangeValue="value" :range="parkList"
- :onChangeNew="changeYQId" empty="选择园区">
- </jp-picker> -->
-
- <picker @change="changeYQId" :value="yqIndex" :range="showYQList">
- <view class=" picker action">
- <view style="color: #fff;">{{showYQList[yqIndex]}}</view>
- </view>
- </picker>
- </view>
-
- <view class="header-line">
- <view @click="changeShow(2)" :class="show == 2 ? 'actClass' : ''">楼宇</view>
- <view @click="changeShow(1)" :class="show == 1 ? 'actClass' : ''">统计报表</view>
- </view>
- <view class="page-box" v-show="show != 1">
- <view class="yqshpmfxBox">
- <view class="tab-header">
- <view class="header-name">楼宇税收排名分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="column" :opts="opts" :chartData="chartData" :ontouch="true" />
- </view>
- <view class="line-box"></view>
- <view class="ssbox">
- <view class="ss-left-box">
- <view class="num">{{ssInfo.yearTax}}<text class="unit">万元</text></view>
- <view style="height: 20rpx;"></view>
- <view class="unit">税收总额</view>
- </view>
- <view class="ss-right-box">
- <view class="right-text-box">
- <view class="num">{{ssInfo.monthrTax}}<text class="unit">万元</text></view>
- <view style="height: 20rpx;"></view>
- <view class="unit">本月税收(占比)</view>
- </view>
- <view class="pie-box">
- <qiun-data-charts type="arcbar" :opts="opts2" :chartData="chartData2" />
- </view>
- </view>
- </view>
- </view>
- <view class="page-center-box">
- <view class="center-left-box">
- <view class="center-title">楼宇入住率排名分析</view>
- <view class="table-line" v-for="(item, index) in rzList" :key="index">
- <view class="index">{{index + 1 }}</view>
- <view class="name">{{item.name}}</view>
- <view class="percent">{{item.value}}%</view>
- </view>
- </view>
- <view class="center-right-box">
- <view class="center-title">楼宇企业数量类型分析</view>
- <view class="right-box-in">
- <qiun-data-charts type="pie" :opts="opts3" :chartData="chartData3" />
- </view>
- </view>
- </view>
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">楼宇税收趋势分析</view>
- <jp-picker v-model="ssqsLYid" rangeKey="label" rangeValue="value" :range="LYList"
- :onChangeNew="changeSSLYId">
- </jp-picker>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataSSLY" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">楼宇新增企业月增长量</view>
- <jp-picker v-model="yzlLYid" rangeKey="label" rangeValue="value" :range="LYList"
- :onChangeNew="changeData">
- </jp-picker>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataLLXZL" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
- <view v-show="show == 1">
- <view class="page-box">
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">园区企业总数统计分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataYQQYZS" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
-
- <view class="page-box">
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">本年度税收额分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="column" :opts="opts" :chartData="BNDSSchartData" :ontouch="true" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
-
- <view class="page-box">
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">本年度销售额分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="column" :opts="opts" :chartData="BNDXSchartData" :ontouch="true" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
- <view class="page-box">
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">园区企业参保人数统计分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="line" :opts="opts4" :chartData="chartDataYQSBRS" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
- <view class="page-box">
- <view class="yqqsBox">
- <view class="tab-header">
- <view class="header-name">人才分析</view>
- </view>
- <view class="pmfx-box">
- <qiun-data-charts type="pie" :opts="optsSS" :chartData="chartDataSBRS" />
- </view>
- <view style="height: 20rpx;"></view>
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- import uniFab from '@/components/uni-fab/uni-fab.vue';
- import loginService from '@/api/auth/loginService.js'
- import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
- import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
- export default {
- mixins: [MescrollMixin, MescrollMoreItemMixin], // 使用mixin (在main.js注册全局组件)
- onShow(option) {
- this.$auth.checkLogin()
- },
- components: {
- },
- data() {
- return {
- yqIndex: 0,
- show: 2,
- parkList: [],
- LYList: [],
- ssInfo: {},
- rzList: [],
- ssqsLYid: '',
- yzlLYid: '',
- yqid: '',
- chartData: {},
- BNDSSchartData: {},
- BNDXSchartData: {},
- //您可以通过修改 config-ucharts.js 文件中下标为 ['column'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
- opts: {
- color: ["#1FD094"],
- padding: [15, 15, 0, 5],
- touchMoveLimit: 24,
- enableScroll: true,
- legend: {
- show: false
- },
- xAxis: {
- disableGrid: true,
- scrollShow: true,
- itemCount: 4
- },
- yAxis: {
- data: [{
- min: 0
- }]
- },
- extra: {
- column: {
- type: "group",
- width: 30,
- activeBgColor: "#000000",
- activeBgOpacity: 0.08
- }
- }
- },
- chartData2: {},
- //您可以通过修改 config-ucharts.js 文件中下标为 ['arcbar'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
- opts2: {
- color: ["#1890FF"],
- title: {
- name: '',
- fontSize: 0,
- },
- subtitle: {
- name: '',
- fontSize: 0,
- },
- extra: {
- arcbar: {
- type: "circle",
- width: 4,
- backgroundColor: "#E9E9E9",
- startAngle: 1.5,
- endAngle: 0.25,
- gap: 2
- }
- }
- },
- chartData3: {},
- //您可以通过修改 config-ucharts.js 文件中下标为 ['pie'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
- opts3: {
- color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
- "#ea7ccc"
- ],
- padding: [5, 5, 5, 5],
- enableScroll: true,
- legend: {
- show: false
- },
- dataLabel: false,
- extra: {
- pie: {
- activeOpacity: 0.5,
- activeRadius: 10,
- offsetAngle: 0,
- labelWidth: 15,
- border: true,
- borderWidth: 3,
- borderColor: "#FFFFFF"
- }
- }
- },
- chartData4: {},
- chartDataSSLY: {},
- chartDataLLXZL: {},
- //您可以通过修改 config-ucharts.js 文件中下标为 ['line'] 的节点来配置全局默认参数,如都是默认参数,此处可以不传 opts 。实际应用过程中 opts 只需传入与全局默认参数中不一致的【某一个属性】即可实现同类型的图表显示不同的样式,达到页面简洁的需求。
- opts4: {
- color: ["#1890FF"],
- padding: [15, 10, 30, 15],
- enableScroll: false,
- legend: {
- show: false
- },
- xAxis: {
- disableGrid: true,
- rotateLabel: true,
- rotateAngle: 45,
- },
- yAxis: {
- gridType: "dash",
- dashLength: 2
- },
- extra: {
- line: {
- type: "straight",
- width: 2,
- activeType: "hollow"
- }
- }
- },
- chartDataSBRS: {},
- chartDataYQQYZS: {},
- chartDataYQSBRS: {},
- chartDataSSEFX: {},
- showYQList: [],
- optsSS: {
- color: ["#1890FF", "#91CB74", "#FAC858", "#EE6666", "#73C0DE", "#3CA272", "#FC8452", "#9A60B4",
- "#ea7ccc"
- ],
- padding: [5, 5, 5, 5],
- enableScroll: true,
- extra: {
- pie: {
- activeOpacity: 0.5,
- activeRadius: 10,
- offsetAngle: 0,
- labelWidth: 15,
- border: false,
- borderWidth: 3,
- borderColor: "#FFFFFF"
- }
- }
- }
- }
- },
- created() {
- this.getParkList()
- this.getAllparkList()
- },
- mounted() {
- this.AppFirst()
- },
-
- methods: {
- changeData() {
- this.AppFirstAddNwe()
- },
-
- getAllparkList() {
- loginService.parkList({
- current: 1,
- size: 1000000,
- }).then(({
- data
- }) => {
- this.parkList = data.records.map((item) => {
- return {
- label: item.parkName,
- value: item.id
- }
- })
- this.showYQList = data.records.map((item) => item.parkName)
- this.yqid = this.parkList[0].value
-
- }).catch(e => {
- console.log(e)
- })
- },
-
-
-
- changeYQId(e) {
- console.log('更改园区id')
- console.log(e, '================>e')
- this.yqIndex = e.detail.value
- this.yqid = this.parkList[this.yqIndex].value
- },
- changeShow(index) {
- this.show = index
- if (index == 1) {
- this.getStatisticsForPark()
- this.getSaleStatisticsForPark()
- this.getSaleStatisticsForYear2()
- }
- },
-
- getSaleStatisticsForYear2() {
- loginService
- .getSaleStatisticsForYear2({
- yqid: this.yqid,
- lyid: '',
- })
- .then(({ data }) => {
- let keys = data.map(item => item.building_name);
- let values = data.map(item => item.nowYearIncome);
- let res = {
- categories: keys,
- series: [{
- name: "税收",
- data: values
- }]
- };
- this.BNDSSchartData = JSON.parse(JSON.stringify(res));
-
- let values2 = data.map(item => item.nowYearSale);
- let res2 = {
- categories: keys,
- series: [{
- name: "销售",
- data: values2
- }]
- };
- this.BNDXSchartData = JSON.parse(JSON.stringify(res2));
- });
- },
-
- // 楼宇新增企业月增量
- AppFirstAddNwe() {
- loginService.AppFirstAddNwe({
- searchid: this.yzlLYid
- }).then(({
- data
- }) => {
- let keys = Object.keys(data[0]);
- let values = Object.values(data[0]);
- let res4 = {
- categories: keys,
- series: [{
- name: "新增企业数",
- data: values
- }]
- };
- this.chartDataLLXZL = JSON.parse(JSON.stringify(res4));
- }).catch(e => {
- console.log(e)
- })
- },
- changeSSLYId() {
- this.AppFirstAddTotle()
- },
- // 税收
- AppFirstAddTotle() {
- loginService.AppFirstAddTotle({
- searchid: this.ssqsLYid
- }).then(({
- data
- }) => {
- let keys = Object.keys(data[0]);
- let values = Object.values(data[0]);
- let res4 = {
- categories: keys,
- series: [{
- name: "税收",
- data: values
- }]
- };
- this.chartDataSSLY = JSON.parse(JSON.stringify(res4));
- }).catch(e => {
- console.log(e)
- })
- },
- getSaleStatisticsForPark() {
- loginService.getSaleStatisticsForPark({
- }).then(({
- data
- }) => {
- console.log(data, '===============.data')
- let peopelList = [{
- name: '博士生',
- value: data[0].DoctoralStudent,
- },
- {
- name: '硕士生',
- value: data[0].Postgraduate,
- },
- {
- name: '本科生',
- value: data[0].Undergraduate,
- },
- {
- name: '本科以下',
- value: data[0].BelowUndergraduate,
- },
- ]
- let res2 = {
- series: [{
- data: peopelList
- }]
- };
- this.chartDataSBRS = JSON.parse(JSON.stringify(res2));
- }).catch(e => {
- console.log(e)
- })
- },
- getParkList() {
- loginService.list({
- current: 1,
- size: 1000000,
- }).then(({
- data
- }) => {
- this.LYList = data.records.map((item) => {
- return {
- label: item.buildingName,
- value: item.id
- }
- })
- this.ssqsLYid = this.LYList[0].value
- this.yzlLYid = this.LYList[0].value
- this.AppFirstAddTotle()
- this.AppFirstAddNwe()
- }).catch(e => {
- console.log(e)
- })
- },
-
-
- AppFirst() {
- loginService.AppFirst().then(({
- data
- }) => {
- let lyssList = data[0];
- let keys = Object.keys(lyssList);
- let values = Object.values(lyssList);
- let res = {
- categories: keys,
- series: [{
- name: "税收",
- data: values
- }]
- };
- this.chartData = JSON.parse(JSON.stringify(res));
- this.ssInfo = data[1]
- let res2 = {
- series: [{
- color: "#2fc25b",
- data: Number(this.ssInfo.percentage).toFixed(2)
- }]
- };
- this.chartData2 = JSON.parse(JSON.stringify(res2));
- let rzList = data[2];
- const rzListNew = [];
- for (const key in rzList) {
- if (rzList.hasOwnProperty(key)) {
- rzListNew.push({
- name: key,
- value: parseFloat(rzList[key]).toFixed(2)
- });
- }
- }
- this.rzList = rzListNew.slice(0, 5)
- let lyslList = data[3]
- let lyslListNew = []
- for (const key in lyslList) {
- if (lyslList.hasOwnProperty(key)) {
- lyslListNew.push({
- 'name': this.$dictUtils.getDictLabel("industrial_type", key, '-'),
- 'value': parseFloat(lyslList[key]).toFixed(2) * 100
- });
- }
- }
- let res3 = {
- series: [{
- data: lyslListNew
- }]
- }
- this.chartData3 = JSON.parse(JSON.stringify(res3));
- }).catch(e => {
- console.log(e)
- })
- },
- getStatisticsForPark() {
- loginService.getStatisticsForPark({
- }).then(({
- data
- }) => {
- let buildNameArr = data.map(item => item.park_name)
- let buildQYZS = data.map(item => item.qycount)
- let buildSSZE = data.map(item => item.ssze)
- let buildSBRS = data.map(item => item.sbuser)
- let res = {
- categories: buildNameArr,
- series: [{
- name: "企业总数",
- data: buildQYZS
- }]
- };
- this.chartDataYQQYZS = JSON.parse(JSON.stringify(res));
- // chartDataSBRS
- let resCB = {
- categories: buildNameArr,
- series: [{
- name: "企业参保人数统计",
- data: buildSBRS
- }]
- };
- this.chartDataYQSBRS = JSON.parse(JSON.stringify(resCB));
- }).catch(e => {
- console.log(e)
- })
- },
- },
- }
- </script>
- <style>
- @font-face {
- font-family: 'DIN';
- /* 自定义字体名称 */
- src: url('/static/fonts/DINSchrift.ttf');
- /* 字体文件路径 */
- }
- .header-line {
- display: flex;
- background: #36A7F3;
- font-weight: normal;
- font-size: 32rpx;
- color: #fff;
- justify-content: space-around;
- height: 240rpx;
- line-height: 80rpx;
- }
-
- .header-line-2{
- background: #36A7F3;
- font-weight: normal;
- font-size: 32rpx;
- color: #fff !important;
- line-height: 40rpx;
- padding-left: 40rpx;
- }
-
- .text-grey {
- color: #fff;
- }
- .page-box {
- position: relative;
- top: -160rpx;
- }
- .yqshpmfxBox {
- width: 706rpx;
- border-radius: 40rpx;
- background: #fff;
- margin-left: auto;
- margin-right: auto;
- box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
- }
- .actClass {
- color: #FAF82F;
- }
- .yqqsBox {
- margin-top: 30rpx;
- width: 706rpx;
- border-radius: 40rpx;
- background: #fff;
- margin-left: auto;
- margin-right: auto;
- box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
- }
- .tab-header {
- display: flex;
- justify-content: space-between;
- padding-left: 40rpx;
- padding-right: 40rpx;
- border-bottom: 1rpx solid #D5D4D0;
- align-items: center;
- }
- .header-name {
- font-size: 32rpx;
- color: #40547E;
- line-height: 102rpx;
- }
- .pmfx-box {
- height: 440rpx;
- }
- .ssfx-box {
- height: 650rpx;
- }
- .line-box {
- height: 30rpx;
- border-bottom: 1rpx solid #D5D4D0;
- }
- .ssbox {
- display: flex;
- }
- .ss-left-box {
- flex: 1;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- height: 156rpx;
- border-right: 1rpx solid #D5D4D0;
- }
- .ss-right-box {
- flex: 1;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- .num {
- font-weight: bold;
- font-size: 44rpx;
- font-family: 'DIN';
- color: #070303;
- }
- .unit {
- font-size: 28rpx;
- color: #07245A;
- opacity: 0.7;
- }
- .right-text-box {
- flex: 1;
- }
- .pie-box {
- height: 156rpx;
- width: 110rpx;
- }
- .page-center-box {
- display: flex;
- width: 706rpx;
- margin-left: auto;
- margin-right: auto;
- justify-content: space-between;
- margin-top: 30rpx;
- }
- .center-left-box {
- width: 344rpx;
- border-radius: 40rpx;
- border-radius: 40rpx;
- padding-left: 20rpx;
- padding-right: 20rpx;
- background: #fff;
- box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
- padding-bottom: 30rpx;
- }
- .center-right-box {
- width: 344rpx;
- border-radius: 40rpx;
- border-radius: 40rpx;
- padding-left: 20rpx;
- padding-right: 20rpx;
- background: #fff;
- box-shadow: 0px 8px 16px 2px rgba(101, 101, 101, 0.2);
- padding-bottom: 30rpx;
- }
- .center-title {
- font-size: 24rpx;
- color: #064875;
- line-height: 18px;
- opacity: 0.7;
- padding-left: 22rpx;
- padding-top: 23rpx;
- padding-bottom: 23rpx;
- }
- .table-line {
- display: flex;
- line-height: 50rpx;
- height: 50rpx;
- }
- .table-line:nth-child(odd) {
- background-color: #fff;
- }
- .table-line:nth-child(even) {
- background-color: #F1F6F9;
- }
- .index {
- width: 15%;
- text-align: center;
- font-size: 28rpx;
- color: #122F64;
- font-family: 'DIN';
- }
- .name {
- font-size: 26rpx;
- color: #242323;
- width: 65%;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .percent {
- font-weight: bold;
- font-size: 28rpx;
- color: #219BED;
- font-family: 'DIN';
- }
- .right-box-in {
- height: 220rpx;
- }
- </style>
|