Browse Source

统计分析

master
蟑螂恶霸 3 years ago
parent
commit
09b785f163
  1. 78
      package-lock.json
  2. 3
      package.json
  3. BIN
      src/assets/images/bg_count.jpg
  4. 3
      src/components/header-nav/index.vue
  5. 340
      src/views/common/analyse.vue

78
package-lock.json

@ -11,6 +11,7 @@
"@zxing/library": "^0.20.0",
"axios": "^1.6.7",
"core-js": "^3.36.0",
"echarts": "^5.5.0",
"jsonp": "^0.2.1",
"lodash": "^4.17.21",
"mitt": "^3.0.1",
@ -35,7 +36,7 @@
"postcss-pxtorem": "^6.1.0",
"unplugin-auto-import": "^0.17.5",
"unplugin-vue-components": "^0.26.0",
"vite": "^5.1.4",
"vite": "^5.1.6",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-progress": "^0.0.7",
@ -3830,6 +3831,20 @@
"tslib": "^2.0.3"
}
},
"node_modules/echarts": {
"version": "5.5.0",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
"integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.5.0"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/electron-to-chromium": {
"version": "1.4.689",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz",
@ -6435,9 +6450,9 @@
}
},
"node_modules/vite": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
"integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
"version": "5.1.6",
"resolved": "https://registry.npmmirror.com/vite/-/vite-5.1.6.tgz",
"integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==",
"dev": true,
"dependencies": {
"esbuild": "^0.19.3",
@ -6450,9 +6465,6 @@
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
},
@ -7309,6 +7321,19 @@
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zrender": {
"version": "5.5.0",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
"integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
"dependencies": {
"tslib": "2.3.0"
}
},
"node_modules/zrender/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/zxing-wasm": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/zxing-wasm/-/zxing-wasm-1.1.3.tgz",
@ -9513,7 +9538,7 @@
},
"ansi-regex": {
"version": "5.0.1",
"resolved": "https:/registry/.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"peer": true
@ -9902,6 +9927,22 @@
"tslib": "^2.0.3"
}
},
"echarts": {
"version": "5.5.0",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.0.tgz",
"integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==",
"requires": {
"tslib": "2.3.0",
"zrender": "5.5.0"
},
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
}
},
"electron-to-chromium": {
"version": "1.4.689",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz",
@ -11847,9 +11888,9 @@
}
},
"vite": {
"version": "5.1.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
"integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
"version": "5.1.6",
"resolved": "https://registry.npmmirror.com/vite/-/vite-5.1.6.tgz",
"integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==",
"dev": true,
"requires": {
"esbuild": "^0.19.3",
@ -12357,6 +12398,21 @@
"integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
"dev": true
},
"zrender": {
"version": "5.5.0",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.5.0.tgz",
"integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==",
"requires": {
"tslib": "2.3.0"
},
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
}
},
"zxing-wasm": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/zxing-wasm/-/zxing-wasm-1.1.3.tgz",

3
package.json

@ -18,6 +18,7 @@
"@zxing/library": "^0.20.0",
"axios": "^1.6.7",
"core-js": "^3.36.0",
"echarts": "^5.5.0",
"jsonp": "^0.2.1",
"lodash": "^4.17.21",
"mitt": "^3.0.1",
@ -42,7 +43,7 @@
"postcss-pxtorem": "^6.1.0",
"unplugin-auto-import": "^0.17.5",
"unplugin-vue-components": "^0.26.0",
"vite": "^5.1.4",
"vite": "^5.1.6",
"vite-plugin-compression": "^0.5.1",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-progress": "^0.0.7",

BIN
src/assets/images/bg_count.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

3
src/components/header-nav/index.vue

@ -63,4 +63,7 @@
color: black !important;
}
}
.van-nav-bar {
background-color: #ebf3fb;
}
</style>

340
src/views/common/analyse.vue

@ -11,13 +11,39 @@
</div>
<!-- 中间 -->
<div class="warp_body">
<div class="countbox">
<span class="count-tit">本月执法</span>
<span class="count-tot"><b>356</b></span>
<span class="count-com"><i>投诉</i><b>24</b></span>
</div>
<div class="analybox">
<div class="title">执法类别</div>
<div id="echartRing" class="chartbox"></div>
<div id="echartLine" class="chartbox"></div>
</div>
<div class="analybox">
<div class="title">执法人员</div>
</div>
<div class="analybox">
<div class="title">案件数量</div>
</div>
<div class="analybox">
<div class="title">企业类型</div>
</div>
</div>
</div>
</template>
<script setup name="addressEdit">
import util from "@/util/area";
import * as echarts from 'echarts';
const { useMy } = $globalStore
const router = useRouter();
@ -61,21 +87,325 @@ watchEffect(() => {
queryaddressId = route?.query?.addressId;
}
});
const echartInit = () =>{
var myChart = echarts.init(document.getElementById('echartRing'));
//
let option = {
tooltip: {
trigger: 'item'
},
series: [
{
name: '统计图表',
type: 'pie',
radius: ['43%', '60%'],
avoidLabelOverlap: false,
itemStyle: {
borderRadius: 0,
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
show: true,
fontSize: '14',
fontWeight: 'bold'
}
},
data: [
{ value: 1048, name: '安全检查' },
{ value: 735, name: '卫生检查' },
{ value: 580, name: '商业检查' },
{ value: 484, name: '财务检查' },
{ value: 300, name: '个案检查' }
],
color: ['#0038bb','#0047eb','#1c60ff','#3f78ff','#6592ff','#8aadff'],
}
]
};
// 使
myChart.setOption(option);
};
const initSchedule = (dataAll) =>{
let _this = this;
var myChartLine = echarts.init(document.getElementById('echartLine'));
let myColor = ['#3C83FF']
var option = {
grid: { //
top: '-5%',
bottom: '5%',
left: '35%', //grid ,
//left80
//'80%'
right: '15%',
//containLabel: true //gidtrue
// left/right/top/bottom/width/height
//.
},
xAxis: { //gridx,
//gridx,
//xoffsetx
type: 'value', //,
//'value'-'category'-;
//'time'-;'log'-
splitLine: {
show: false
}, // grid 线
axisLabel: {
show: false
}, //
axisTick: {
show: false
}, //
axisLine: {
show: false
}, //线
},
yAxis: {
type: 'category',
axisTick: {
show: false
},
axisLine: {
show: false
},
axisLabel: {
color: 'rgba(0,0,0,.7)',
fontSize: 14,
formatter: function(data) {
var traceValue;
for (var i = 0; i < dataAll.dataX.length; i++) {
if (data === dataAll.dataX[i]) {
traceValue = dataAll.dataY[i]
break
}
}
var arr = [
'{a|' + data + '}',
'{b|' + traceValue + '}',
'{c|件}'
]
return arr.join('')
},
textStyle: {
rich: {
a: {
fontSize: 14,
width: 100
},
b: {
fontSize: 14,
align: 'center',
color: '#3C83FF',
fontWeight: 600,
},
c: {
padding: [0, 0, 0, 5],
fontSize: 14,
align: 'center',
}
}
},
},
data: dataAll.dataX //type: 'category'
// typeaxis.data,type 'category'
},
series: [ // type
{
name: '%', //
type: 'bar', //
barWidth: 15, //,
data: dataAll.dataPercent, //
label: { //
show: true,
position: 'right', //
offset: [0, 40], //40
//formatter: '{c}{a}',// {a}-,{b}-,{c}-
formatter: function(data) {
//.toFixed(0)2
//let b = data.percent.toFixed(0) + "%";
//subText = b;
return '';
},
color: 'rgba(0,0,0,.7)', //
fontSize: 26 //
},
itemStyle: { //
normal: { //normal ;
//emphasis
barBorderRadius: 10, //,px.
//4;
//[10,10,10,10]
color: function(params) {
let num = myColor.length; //myColor
return myColor[params.dataIndex % num]; //
},
}
},
zlevel: 1 // zlevel ,
//zlevel Canvas zlevel Canvas
},
{
name: '进度条背景',
type: 'bar',
label: { //
show: true,
position: 'right', //
offset: [0, 0], //40
//formatter: '{c}{a}',// {a}-,{b}-,{c}-
formatter: function(data) {
//.toFixed(0)2
var traceValue;
for (var i = 0; i < dataAll.dataX.length; i++) {
if (data.name === dataAll.dataX[i]) {
traceValue = dataAll.dataPercent[i]
break
}
}
var arr = [
'{a|' + traceValue + '}',
'{b|%}'
]
return arr.join('');
},
textStyle: {
rich: {
a: {
fontSize: 14,
color: 'rgba(0,0,0,0.7)',
fontWeight: 560,
padding: [0, 0, 0, 15],
},
b: {
fontSize: 14,
color: 'rgba(0,0,0,0.7)',
padding: [0, 0, 0, 3],
align: 'center',
},
}
},
},
barGap: '-100%', //
// 'bar'
// 'bar'
// 'bar'
barWidth: 15,
data: dataAll.dataSum,
color: '#DEE0E3', //
itemStyle: {
normal: {
barBorderRadius: 10
}
}
},
]
};
myChartLine.setOption(option, true);
};
const initData = () => {
var dataX = ['商业检查', '账务检查', '安全检查', '卫生检查', '个案检查']
var dataY = ['30', '20', '15', '25', '10'];
var dataPercent = ['30', '20', '15', '25', '10'];
var dataSum = new Array(dataX.length).fill(100);
var data = {
dataX: dataX,
dataY: dataY,
dataSum: dataSum,
dataPercent: dataPercent,
}
initSchedule(data);
};
onMounted(() => {
route?.query?.addressId && getEditdata(route?.query?.addressId);
// route?.query?.addressId && getEditdata(route?.query?.addressId);
nextTick(() => {
if (!route?.query?.addressId) {
data.addressInfo = {};
}
echartInit();
initData();
// if (!route?.query?.addressId) {
// data.addressInfo = {};
// }
});
});
</script>
<style lang="less" scoped>
.address_edit {
display: flex;
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #f4f4f4;
background-color: #ebf3fb;
}
.warp_body {
background-image: linear-gradient(to bottom, #ebf3fb, transparent);
}
.countbox, .analybox {
position: relative;
margin: 2% 4%;
padding: 2% 0 0;
width: 92%;
height: 3rem;
background: #fff url("../../assets/images/bg_count.jpg") no-repeat right;
background-size: auto 100%;
border-radius: 0.25rem;
}
.countbox span {
display: block;
margin: 1.75% 2.5%;
color: #999;
font-size: 0.3rem;
line-height: 1.25;
}
.countbox span.count-tit {
color: #666;
font-size: 0.45rem;
}
.countbox span.count-tot {
font-size: 0.25rem;
b {
margin-right: 5px;
color: #085dff;
font-size: 0.85rem;
}
}
.countbox span.count-com {
font-size: 0.25rem;
i {
font-size: 0.35rem;
font-style: normal;
}
b{
margin-right: 5px;
color: #f00;
font-size: 0.5rem;
}
}
.analybox {
height: auto;
min-height: 7rem;
background: #fff none;
.title {
margin: 2% 2.5%;
font-size: 0.4rem;
font-weight: 600;
}
}
.chartbox {
margin: 2% 5%;
width: 90%;
height: 7rem;
}
</style>

Loading…
Cancel
Save