xy 2 years ago
parent c2eae0a5d8
commit 89df343373

@ -4,3 +4,4 @@ ENV='development'
# base api
VUE_APP_BASE_API=http://wuxiwuye.ali251.langye.net/
VUE_APP_UPLOAD_API=http://wuxiwuye.ali251.langye.net/api/admin/upload-file
VUE_APP_PREVIEW=http://view.ali251.langye.net:8012/onlinePreview

@ -2,5 +2,6 @@
ENV = 'production'
# base api
VUE_APP_BASE_API=http://wuxiwuye.ali251.langye.net/
VUE_APP_UPLOAD_API=http://wuxiwuye.ali251.langye.net/api/admin/upload-file
VUE_APP_BASE_API=http://192.168.1.31:9001/
VUE_APP_UPLOAD_API=http://192.168.1.31:9001/api/admin/upload-file
VUE_APP_PREVIEW=http://192.168.1.31:8012/onlinePreview

@ -4,5 +4,6 @@ NODE_ENV = production
ENV = 'staging'
# base api
VUE_APP_BASE_API = '/stage-api'
VUE_APP_BASE_API=http://wuxiwuye.ali251.langye.net/
VUE_APP_UPLOAD_API=http://wuxiwuye.ali251.langye.net/api/admin/upload-file
VUE_APP_PREVIEW=http://view.ali251.langye.net:8012/onlinePreview

@ -14,13 +14,15 @@
"test:ci": "npm run lint && npm run test:unit"
},
"dependencies": {
"@jiaminghi/data-view": "^2.10.0",
"@smallwei/avue": "^2.9.15",
"@tinymce/tinymce-vue": "^3.0.1",
"af-table-column": "^1.0.3",
"avue-plugin-map": "^1.0.1",
"axios": "0.18.1",
"core-js": "3.6.5",
"echarts": "^4.2.1",
"echarts": "^5.4.1",
"echarts-gl": "^2.0.9",
"element-ui": "2.15.13",
"file-saver": "^2.0.5",
"html2canvas": "^1.4.1",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

@ -12,7 +12,8 @@ export function getInfo(token) {
return request({
url: '/api/admin/auth/me',
method: 'post',
params: { token }
params: { token },
isLoading: false,
})
}
@ -27,6 +28,7 @@ export function getAuthMenu(token) {
return request({
url: '/api/admin/auth/permissions',
method: 'get',
params: { token }
params: { token },
isLoading: false
})
}
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,66 @@
<template>
<div :id="id" :class="className" :style="{ height: height, width: width }" />
</template>
<script>
import * as echarts from 'echarts';
import tdTheme from './theme.json' //
export default {
name: 'echart',
props: {
className: {
type: String,
default: 'chart'
},
id: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '2.5rem'
},
options: {
type: Object,
default: ()=>({})
}
},
data () {
return {
chart: null
}
},
watch: {
options: {
handler (options) {
// trueechart
this.chart.setOption(options, true)
},
deep: true
}
},
mounted () {
echarts.registerTheme('tdTheme', tdTheme); //
this.initChart();
},
beforeDestroy () {
this.chart.dispose()
this.chart = null
},
methods: {
initChart () {
// echart
this.chart = echarts.init(this.$el, 'tdTheme')
this.chart.setOption(this.options, true)
}
}
}
</script>
<style>
</style>

@ -0,0 +1,490 @@
{
"color": [
"#2d8cf0",
"#19be6b",
"#ff9900",
"#E46CBB",
"#9A66E4",
"#ed3f14"
],
"backgroundColor": "rgba(0,0,0,0)",
"textStyle": {},
"title": {
"textStyle": {
"color": "#516b91"
},
"subtextStyle": {
"color": "#93b7e3"
}
},
"line": {
"itemStyle": {
"normal": {
"borderWidth": "2"
}
},
"lineStyle": {
"normal": {
"width": "2"
}
},
"symbolSize": "6",
"symbol": "emptyCircle",
"smooth": true
},
"radar": {
"itemStyle": {
"normal": {
"borderWidth": "2"
}
},
"lineStyle": {
"normal": {
"width": "2"
}
},
"symbolSize": "6",
"symbol": "emptyCircle",
"smooth": true
},
"bar": {
"itemStyle": {
"normal": {
"barBorderWidth": 0,
"barBorderColor": "#ccc"
},
"emphasis": {
"barBorderWidth": 0,
"barBorderColor": "#ccc"
}
}
},
"pie": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"scatter": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"boxplot": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"parallel": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"sankey": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"funnel": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"gauge": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
},
"emphasis": {
"borderWidth": 0,
"borderColor": "#ccc"
}
}
},
"candlestick": {
"itemStyle": {
"normal": {
"color": "#edafda",
"color0": "transparent",
"borderColor": "#d680bc",
"borderColor0": "#8fd3e8",
"borderWidth": "2"
}
}
},
"graph": {
"itemStyle": {
"normal": {
"borderWidth": 0,
"borderColor": "#ccc"
}
},
"lineStyle": {
"normal": {
"width": 1,
"color": "#aaa"
}
},
"symbolSize": "6",
"symbol": "emptyCircle",
"smooth": true,
"color": [
"#2d8cf0",
"#19be6b",
"#f5ae4a",
"#9189d5",
"#56cae2",
"#cbb0e3"
],
"label": {
"normal": {
"textStyle": {
"color": "#eee"
}
}
}
},
"map": {
"itemStyle": {
"normal": {
"areaColor": "#f3f3f3",
"borderColor": "#516b91",
"borderWidth": 0.5
},
"emphasis": {
"areaColor": "rgba(165,231,240,1)",
"borderColor": "#516b91",
"borderWidth": 1
}
},
"label": {
"normal": {
"textStyle": {
"color": "#000"
}
},
"emphasis": {
"textStyle": {
"color": "rgb(81,107,145)"
}
}
}
},
"geo": {
"itemStyle": {
"normal": {
"areaColor": "#f3f3f3",
"borderColor": "#516b91",
"borderWidth": 0.5
},
"emphasis": {
"areaColor": "rgba(165,231,240,1)",
"borderColor": "#516b91",
"borderWidth": 1
}
},
"label": {
"normal": {
"textStyle": {
"color": "#000"
}
},
"emphasis": {
"textStyle": {
"color": "rgb(81,107,145)"
}
}
}
},
"categoryAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#fff"
}
},
"splitLine": {
"show": false,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.05)",
"rgba(200,200,200,0.02)"
]
}
}
},
"valueAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#fff"
}
},
"splitLine": {
"show": false,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.05)",
"rgba(200,200,200,0.02)"
]
}
}
},
"logAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.05)",
"rgba(200,200,200,0.02)"
]
}
}
},
"timeAxis": {
"axisLine": {
"show": true,
"lineStyle": {
"color": "#cccccc"
}
},
"axisTick": {
"show": false,
"lineStyle": {
"color": "#333"
}
},
"axisLabel": {
"show": true,
"textStyle": {
"color": "#999999"
}
},
"splitLine": {
"show": true,
"lineStyle": {
"color": [
"#eeeeee"
]
}
},
"splitArea": {
"show": false,
"areaStyle": {
"color": [
"rgba(250,250,250,0.05)",
"rgba(200,200,200,0.02)"
]
}
}
},
"toolbox": {
"iconStyle": {
"normal": {
"borderColor": "#999"
},
"emphasis": {
"borderColor": "#666"
}
}
},
"legend": {
"textStyle": {
"color": "#fff"
}
},
"tooltip": {
"axisPointer": {
"lineStyle": {
"color": "#ccc",
"width": 1
},
"crossStyle": {
"color": "#ccc",
"width": 1
}
}
},
"timeline": {
"lineStyle": {
"color": "#8fd3e8",
"width": 1
},
"itemStyle": {
"normal": {
"color": "#8fd3e8",
"borderWidth": 1
},
"emphasis": {
"color": "#8fd3e8"
}
},
"controlStyle": {
"normal": {
"color": "#8fd3e8",
"borderColor": "#8fd3e8",
"borderWidth": 0.5
},
"emphasis": {
"color": "#8fd3e8",
"borderColor": "#8fd3e8",
"borderWidth": 0.5
}
},
"checkpointStyle": {
"color": "#8fd3e8",
"borderColor": "rgba(138,124,168,0.37)"
},
"label": {
"normal": {
"textStyle": {
"color": "#8fd3e8"
}
},
"emphasis": {
"textStyle": {
"color": "#8fd3e8"
}
}
}
},
"visualMap": {
"color": [
"#516b91",
"#59c4e6",
"#a5e7f0"
]
},
"dataZoom": {
"backgroundColor": "rgba(0,0,0,0)",
"dataBackgroundColor": "rgba(255,255,255,0.3)",
"fillerColor": "rgba(167,183,204,0.4)",
"handleColor": "#a7b7cc",
"handleSize": "100%",
"textStyle": {
"color": "#333"
}
},
"markPoint": {
"label": {
"normal": {
"textStyle": {
"color": "#eee"
}
},
"emphasis": {
"textStyle": {
"color": "#eee"
}
}
}
}
}

@ -0,0 +1,358 @@
<template>
<div>
<Echart
:options="options"
id="centreLeft1Chart"
height="480px"
width="100%"
></Echart>
</div>
</template>
<script>
import Echart from './echart'
export default {
data() {
return {
options: {},
//
colorList: {
linearYtoG: {
type: 'linear',
x: 0,
y: 0,
x2: 1,
y2: 1,
colorStops: [
{
offset: 0,
color: '#f5b44d'
},
{
offset: 1,
color: '#28f8de'
}
]
},
linearGtoB: {
type: 'linear',
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [
{
offset: 0,
color: '#43dfa2'
},
{
offset: 1,
color: '#28f8de'
}
]
},
linearBtoG: {
type: 'linear',
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [
{
offset: 0,
color: '#1c98e8'
},
{
offset: 1,
color: '#28f8de'
}
]
},
areaBtoG: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: 'rgba(35,184,210,.2)'
},
{
offset: 1,
color: 'rgba(35,184,210,0)'
}
]
}
}
}
},
components: {
Echart
},
props: {
cdata: {
type: Object,
default: () => ({})
}
},
watch: {
cdata: {
handler(newData) {
this.options = {
title: {
text: '',
textStyle: {
color: '#D3D6DD',
fontSize: 24,
fontWeight: 'normal'
},
subtext: newData.year + '/' + newData.weekCategory[6],
subtextStyle: {
color: '#fff',
fontSize: 16
},
top: 50,
left: 80
},
legend: {
top: 120,
left: 80,
orient: 'vertical',
itemGap: 15,
itemWidth: 12,
itemHeight: 12,
data: ['平均指标', '我的指标'],
textStyle: {
color: '#fff',
fontSize: 14
}
},
tooltip: {
trigger: 'item'
},
radar: {
center: ['68%', '27%'],
radius: '40%',
name: {
color: '#fff'
},
splitNumber: 8,
axisLine: {
lineStyle: {
color: this.colorList.linearYtoG,
opacity: 0.6
}
},
splitLine: {
lineStyle: {
color: this.colorList.linearYtoG,
opacity: 0.6
}
},
splitArea: {
areaStyle: {
color: '#fff',
opacity: 0.1,
shadowBlur: 25,
shadowColor: '#000',
shadowOffsetX: 0,
shadowOffsetY: 5
}
},
indicator: [
{
name: '服务态度',
max: newData.maxData
},
{
name: '产品质量',
max: 10
},
{
name: '任务效率',
max: 12
},
{
name: '售后保障',
max: 3.5
}
]
},
grid: {
left: 90,
right: 80,
bottom: 40,
top: '60%'
},
xAxis: {
type: 'category',
position: 'bottom',
axisLine: true,
axisLabel: {
color: 'rgba(255,255,255,.8)',
fontSize: 12
},
data: newData.weekCategory
},
// Y
yAxis: {
name: '工单',
nameLocation: 'end',
nameGap: 24,
nameTextStyle: {
color: 'rgba(255,255,255,.5)',
fontSize: 14
},
max: newData.maxData,
splitNumber: 4,
axisLine: {
lineStyle: {
opacity: 0
}
},
splitLine: {
show: true,
lineStyle: {
color: '#fff',
opacity: 0.1
}
},
axisLabel: {
color: 'rgba(255,255,255,.8)',
fontSize: 12
}
},
series: [
{
name: '',
type: 'radar',
symbolSize: 0,
data: [
{
value: newData.radarDataAvg[6],
name: '平均指标',
itemStyle: {
normal: {
color: '#f8d351'
}
},
lineStyle: {
normal: {
opacity: 0
}
},
areaStyle: {
normal: {
color: '#f8d351',
shadowBlur: 25,
shadowColor: 'rgba(248,211,81,.3)',
shadowOffsetX: 0,
shadowOffsetY: -10,
opacity: 1
}
}
},
{
value: newData.radarData[6],
name: '我的指标',
itemStyle: {
normal: {
color: '#43dfa2'
}
},
lineStyle: {
normal: {
opacity: 0
}
},
areaStyle: {
normal: {
color: this.colorList.linearGtoB,
shadowBlur: 15,
shadowColor: 'rgba(0,0,0,.2)',
shadowOffsetX: 0,
shadowOffsetY: 5,
opacity: 0.8
}
}
}
]
},
{
name: '',
type: 'line',
smooth: true,
symbol: 'emptyCircle',
symbolSize: 8,
itemStyle: {
normal: {
color: '#fff'
}
},
lineStyle: {
normal: {
color: this.colorList.linearBtoG,
width: 3
}
},
areaStyle: {
normal: {
color: this.colorList.areaBtoG
}
},
data: newData.weekLineData,
lineSmooth: true,
markLine: {
silent: true,
data: [
{
type: 'average',
name: '平均值'
}
],
precision: 0,
label: {
normal: {
formatter: '平均值: \n {c}'
}
},
lineStyle: {
normal: {
color: 'rgba(248,211,81,.7)'
}
}
},
tooltip: {
position: 'top',
formatter: '{c} m',
backgroundColor: 'rgba(28,152,232,.2)',
padding: 6
}
},
{
name: '占位背景',
type: 'bar',
itemStyle: {
normal: {
show: true,
color: '#000',
opacity: 0
}
},
silent: true,
barWidth: '50%',
data: newData.weekMaxData,
animation: false
}
]
}
},
immediate: true,
deep: true
}
}
}
</script>

@ -20,7 +20,8 @@ export const addPropsMap = new Map([
["datetime", {
type: 'datetime',
clearable: true,
valueFormat: 'yyyy-MM-dd mm:hh:ss',
format: "yyyy-MM-dd HH:mm:ss",
valueFormat: 'yyyy-MM-dd HH:mm:ss',
pickerOptions: {
shortcuts: [{
text: '今天',

@ -18,6 +18,7 @@ import './styles/viewui-mine.less';
import base from "./utils/common"
Vue.use(ViewUI);
import moment from "moment"
moment.locale('zh-CN');
Vue.prototype.$moment = moment;
Vue.prototype.base = base;
import '@/icons' // icon
@ -115,6 +116,9 @@ amapKeys.forEach(key => {
import { defineDirective } from './draggable';
defineDirective();
import dataV from "@jiaminghi/data-view";
Vue.use(dataV);
new Vue({
el: '#app',
router,

@ -0,0 +1,57 @@
// 屏幕适配 mixin 函数
// * 默认缩放值
const scale = {
width: '1',
height: '1',
}
// * 设计稿尺寸px
const baseWidth = 1920
const baseHeight = 1080
// * 需保持的比例默认1.77778
const baseProportion = parseFloat((baseWidth / baseHeight).toFixed(5))
export default {
data() {
return {
// * 定时函数
drawTiming: null
}
},
mounted () {
this.calcRate()
window.addEventListener('resize', this.resize)
},
beforeDestroy () {
window.removeEventListener('resize', this.resize)
},
methods: {
calcRate () {
const appRef = this.$refs["appRef"]
if (!appRef) return
// 当前宽高比
const currentRate = parseFloat((window.innerWidth / window.innerHeight).toFixed(5))
if (appRef) {
if (currentRate > baseProportion) {
// 表示更宽
scale.width = ((window.innerHeight * baseProportion) / baseWidth).toFixed(5)
scale.height = (window.innerHeight / baseHeight).toFixed(5)
appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
} else {
// 表示更高
scale.height = ((window.innerWidth / baseProportion) / baseHeight).toFixed(5)
scale.width = (window.innerWidth / baseWidth).toFixed(5)
appRef.style.transform = `scale(${scale.width}, ${scale.height}) translate(-50%, -50%)`
}
}
},
resize () {
clearTimeout(this.drawTiming)
this.drawTiming = setTimeout(() => {
this.calcRate()
}, 200)
}
},
}

@ -68,7 +68,16 @@ export const constantRoutes = [
title: '系统首页',
icon: 'dashboard'
}
}, ]
} ]
},
{
path: "/dataShow",
name: '数据展示',
component: () => import('@/views/dataShow/index'),
meta: {
title: "大屏展示",
icon: "dashboard"
}
}
]

@ -0,0 +1,98 @@
//
$colors: (
"primary": #1A5CD7,
"info-1": #4394e4,
"info": #4b67af,
"white": #ffffff,
"light": #f9f9f9,
"grey-1": #999999,
"grey": #666666,
"dark-1": #5f5f5f,
"dark": #222222,
"black-1": #171823,
"black": #000000,
"icon": #5cd9e8
);
//
$base-font-size: 0.2rem;
$font-sizes: (
xxs: 0.1,
//8px
xs: 0.125,
//10px
sm: 0.2875,
//12px
md: 0.1625,
//13px
lg: 0.175,
//14px
xl: 0.2,
//16px
xxl: 0.225,
//18px
xxxl: 0.25 //20px,,,,
);
//
.w-100 {
width: 100%;
}
.h-100 {
height: 100%;
}
//flex
.d-flex {
display: flex;
}
.flex-column {
flex-direction: column;
}
.flex-wrap {
flex-wrap: wrap;
}
.flex-nowrap {
flex-wrap: nowrap;
}
$flex-jc: (
start: flex-start,
end: flex-end,
center: center,
between: space-between,
around: space-around,
evenly: space-evenly,
);
$flex-ai: (
start: flex-start,
end: flex-end,
center: center,
stretch: stretch,
);
.flex-1 {
flex: 1;
}
//.mt-1 => margin top
//spacing
$spacing-types: (
m: margin,
p: padding,
);
$spacing-directions: (
t: top,
r: right,
b: bottom,
l: left,
);
$spacing-base-size: 0.5rem;
$spacing-sizes: (
0: 0,
1: 0.5,
2: 1,
3: 1.5,
4: 2,
5: 2.5,
);

@ -0,0 +1,186 @@
@import "./variables";
//
* {
margin: 0;
padding: 0;
list-style-type: none;
outline: none;
box-sizing: border-box;
}
html {
margin: 0;
padding: 0;
}
body {
font-family: Arial, Helvetica, sans-serif;
line-height: 1.2em;
background-color: #f1f1f1;
margin: 0;
padding: 0;
overflow: hidden;
}
a {
color: #343440;
text-decoration: none;
}
.clearfix {
&::after {
content: "";
display: table;
height: 0;
line-height: 0;
visibility: hidden;
clear: both;
}
}
//
.float-r {
float: right;
}
//
.float-l {
float: left;
}
//
.fw-b {
font-weight: bold;
}
//
.title-item {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.bg-color-black {
background-color: rgba(19, 25, 47, 0.6);
}
.bg-color-blue {
background-color: #1a5cd7;
}
.colorBlack {
color: #272727 !important;
&:hover {
color: #272727 !important;
}
}
.colorGrass {
color: #33cea0;
&:hover {
color: #33cea0 !important;
}
}
.colorRed {
color: #ff5722;
&:hover {
color: #ff5722 !important;
}
}
.colorText {
color: #d3d6dd !important;
&:hover {
color: #d3d6dd !important;
}
}
.colorBlue {
color: #257dff !important;
&:hover {
color: #257dff !important;
}
}
//
@each $colorkey, $color in $colors {
.text-#{$colorkey} {
color: $color;
}
.bg-#{$colorkey} {
background-color: $color;
}
}
//
@each $var in (left, center, right) {
.text-#{$var} {
text-align: $var !important;
}
}
//flex
@each $key, $value in $flex-jc {
.jc-#{$key} {
justify-content: $value;
}
}
@each $key, $value in $flex-ai {
.ai-#{$key} {
align-items: $value;
}
}
//
@each $fontkey, $fontvalue in $font-sizes {
.fs-#{$fontkey} {
font-size: $fontvalue * $base-font-size;
}
}
//.mt-1 => margin top
//spacing
@each $typekey, $type in $spacing-types {
//.m-1
@each $sizekey, $size in $spacing-sizes {
.#{$typekey}-#{$sizekey} {
#{$type}: $size * $spacing-base-size;
}
}
//.mx-1
@each $sizekey, $size in $spacing-sizes {
.#{$typekey}x-#{$sizekey} {
#{$type}-left: $size * $spacing-base-size;
#{$type}-right: $size * $spacing-base-size;
}
.#{$typekey}y-#{$sizekey} {
#{$type}-top: $size * $spacing-base-size;
#{$type}-bottom: $size * $spacing-base-size;
}
}
//.mt-1
@each $directionkey, $direction in $spacing-directions {
@each $sizekey, $size in $spacing-sizes {
.#{$typekey}#{$directionkey}-#{$sizekey} {
#{$type}-#{$direction}: $size * $spacing-base-size;
}
}
}
.#{$typekey} {
#{$type}: 0;
}
}

@ -267,6 +267,7 @@ export class CreateDialog {
attrs: {
href: file.url,
download: file.name,
target: "_blank",
},
class: {
"uploaded-a":

@ -52,6 +52,11 @@ export default {
list: [],
table: [
{
prop: "fashengshijian",
label: "发生时间",
width: 200
},
{
prop: "mianjitiaozheng",
label: "面积调整",

@ -58,6 +58,12 @@
>{{ contentFormat(item)
}}{{ units.get(item.field) }}</el-descriptions-item
>
<el-descriptions-item :label="'关联'+(detail.hasOwnProperty('id_houses_land_id_relation') ? '房产' : '土地')">
<div style="display: flex;align-items: center;">
<span>{{ detail.hasOwnProperty('id_houses_land_id_relation') ? (detail.id_houses_land_id_relation ? detail.id_houses_land_id_relation.name : '') : (detail.land_id_lands_id_relation ? detail.land_id_lands_id_relation.name : '') }}</span>
<el-link style="margin-left: 10px;white-space: nowrap;" @click="$router.push(detail.hasOwnProperty('id_houses_land_id_relation') ? (detail.id_houses_land_id_relation ? ('/houseDetail/'+detail.id_houses_land_id_relation.id) : '') : (detail.land_id_lands_id_relation ? ('/landDetail/'+detail.land_id_lands_id_relation.id) : ''))">查看</el-link>
</div>
</el-descriptions-item>
</el-descriptions>
</el-card>
@ -102,7 +108,7 @@
<template v-if="histories && histories.length > 0">
<Timeline>
<TimelineItem v-for="(item, index) in histories" :key="item.id">
<el-descriptions :column="1" size="mini" border :title="item.created_at" :label-style="{ 'width': '86px' }">
<el-descriptions :column="1" size="mini" border :title="$moment(item.fashengshijian).format('YYYY-MM-DD HH:mm')" :label-style="{ 'width': '86px' }">
<el-descriptions-item>
<template slot="label">
<i class="el-icon-coordinate"></i>
@ -129,12 +135,16 @@
<i class="el-icon-picture-outline"></i>
相关图片
</template>
<el-image
style="height: 200px"
v-for="img in item.id_his_tupian_files_asset_history_id_relation"
:src="img.url"
fit="contain"
></el-image>
<div style="display: flex;flex-wrap: wrap;padding-top: 10px;">
<div style="display: flex;flex-direction: column; align-items: center;margin-right: 16px;" v-for="(img,index) in item.id_his_tupian_files_asset_history_id_relation" :key="img.id">
<el-image
style="height: 160px"
:src="img.url"
fit="contain"
></el-image>
<div style="color: #3477c6;padding: 10px 0;">{{ ++index }}. <span style="font-weight: 600;">{{ img.original_name }}</span></div>
</div>
</div>
</el-descriptions-item>
</el-descriptions>
@ -364,7 +374,7 @@ export default {
},
methods: {
open(url) {
this.codeUri = `http://view.ali251.langye.net:8012/onlinePreview?url=${encodeURIComponent(
this.codeUri = `${process.env.VUE_APP_PREVIEW}?url=${encodeURIComponent(
new Buffer(url).toString("base64")
)}`;
@ -504,6 +514,7 @@ export default {
table_name: 'his_evolutions',
page: 1,
page_size: 999,
sort_name: "fashengshijian",
filter:[
{
key: /\/land/g.test(this.$route.path) ? 'land_id' : 'house_id',

@ -103,7 +103,7 @@ export default {
},
methods: {
open(url) {
this.codeUri = `http://view.ali251.langye.net:8012/onlinePreview?url=${encodeURIComponent(
this.codeUri = `${process.env.VUE_APP_PREVIEW}?url=${encodeURIComponent(
new Buffer(url).toString('base64')
)}`

@ -293,7 +293,7 @@ export default {
//table_name: "assets",
filter: [
{
key: "suoshuqu",
key: "area",
op: "eq",
value: "",
},

@ -261,6 +261,7 @@
$refs['dialog'].show();
}
"
@loaded="adjustAlignment"
>
<template #assetsHistory="{row}">
<Button
@ -341,6 +342,7 @@ export default {
},
data() {
return {
firstAdjustTable: true,
op,
select: {
table_name: "",
@ -581,14 +583,14 @@ export default {
}
}
let alignLeft = ['dikuaimingcheng','chengjiandanwei','jianshedanwei','wuyedanwei']
//let alignLeft = ['dikuaimingcheng','chengjiandanwei','jianshedanwei','wuyedanwei']
this.table.push(
Object.assign(
{
prop: i.field,
label: i.name,
width: i.width,
align: alignLeft.find(m => m === i.field) ? 'left' : 'center',
align: 'center',
fixed: i.is_fixed,
},
linkOb
@ -601,6 +603,30 @@ export default {
label: "序号",
});
},
adjustAlignment () {
if (this.firstAdjustTable) {
const data = this.$refs['xyTable'].getListData();
if (data.length === 0) return;
this.form.forEach((i) => {
let lengthTemp = data[0][i.field]?.length??0;
for (let j = 0;j < data.length;j++) {
if (/^-?\d+.\d+/.test(data[j][i.field])) {
this.table.find(a => a.prop === i.field).align = 'right';
return
}
if (Math.abs(lengthTemp - data[j][i.field].length) > 4) {
this.table.find(a => a.prop === i.field).align = 'left';
return
}
}
})
this.$nextTick(() => {
this.$refs['xyTable'].doLayout();
this.firstAdjustTable = false;
})
}
}
},
computed: {

@ -0,0 +1,102 @@
<template>
<div class="btns">
<div class="item">
<SvgIcon icon-class="chart" class="item__icon"></SvgIcon>
<div class="item__text">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 60" preserveAspectRatio="xMinYMin meet">
<path d="M 0 0 L 160 0 L 160 60 L 0 60 Q 30 30 0 0" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<p>资产总览</p>
</div>
</div>
<div class="item">
<SvgIcon icon-class="chart" class="item__icon"></SvgIcon>
<div class="item__text">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 60" preserveAspectRatio="xMinYMin meet">
<path d="M 0 0 L 160 0 L 160 60 L 0 60 Q 30 30 0 0" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<p>租赁数据</p>
</div>
</div>
<div class="item">
<SvgIcon icon-class="chart" class="item__icon"></SvgIcon>
<div class="item__text">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 60" preserveAspectRatio="xMinYMin meet">
<path d="M 0 0 L 160 0 L 160 60 L 0 60 Q 30 30 0 0" stroke="currentColor" stroke-width="2" stroke-linecap="round"></path>
</svg>
<p>安全巡检</p>
</div>
</div>
</div>
</template>
<script>
import SvgIcon from "@/components/SvgIcon"
export default {
components: {
SvgIcon
},
data() {
return {}
},
methods: {},
computed: {}
}
</script>
<style scoped lang="scss">
.btns {
position: absolute;
top: 20%;
left: 0;
.item {
cursor: pointer;
color: #7bc8b9;
display: flex;
align-items: center;
&__icon {
color: #7bc8b9;
border-radius: 100%;
border: 2px solid #7bc8b9;
width: 60px;
height: 60px;
padding: 6px;
}
&__text {
height: 60px;
line-height: 60px;
width: 160px;
color: #7bc8b9;
position: relative;
& > svg {
width: 100%;
height: 100%;
position: absolute;
top: 0;
right: 0;
left: -4%;
bottom: 0;
}
& > p {
font-weight: 600;
font-size: 18px;
color: #fff;
text-align: center;
position: relative;
z-index: 2;
}
}
}
.item + .item {
margin-top: 40px;
}
}
</style>

@ -0,0 +1,88 @@
<template>
<div class="header d-flex">
<div class="header-title">
<p>智慧资产管理大屏</p>
<dv-decoration-8 :reverse="true" class="header-title__dvd8" />
</div>
<dv-decoration-1 style="width:200px;height:40px;margin-left: 100px;" />
<dv-decoration-2 style="flex: 1;height:5px;" />
<div class="header-time">
<p>{{ time.format('YYYY年MM月DD日 HH:mm:ss') }}</p>
<p>{{ time.format('dddd') }}</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
time: this.$moment(),
timer: null,
}
},
methods: {
updateTime() {
this.time = this.$moment()
}
},
computed: {},
mounted() {
this.timer = setInterval(() => {
this.updateTime()
}, 1000)
},
destroyed() {
clearInterval(this.timer)
}
}
</script>
<style scoped lang="scss">
.header {
display: flex;
justify-content: space-between;
&-title {
color: #fff;
font-size: 26px;
font-weight: 600;
background: linear-gradient(to right, #1d413b, #75f9e2);
padding: 16px 100px;
transform: skewX(-45deg) translateX(-6vw);
position: relative;
& > p {
transform: skewX(45deg);
}
&::after {
content: "";
height: 100%;
background: #2ba28a;
width: 10%;
transform: translateX(100%);
position: absolute;
top: 0;
right: 0;
}
&__dvd8 {
height: 36px;
width: 100px;
transform: translate(100%, 0);
position: absolute;
bottom: 0;
right: -10%;
}
}
&-time {
color: #fff;
font-size: 22px;
padding-right: 40px;
}
}
</style>

@ -0,0 +1,92 @@
<template>
<div class="page">
<div class="container" ref="appRef">
<dv-loading v-if="loading">Loading...</dv-loading>
<div v-else>
<HeaderComponent></HeaderComponent>
<div class="body d-flex">
<btns></btns>
<div class="left">
<MapComponent></MapComponent>
</div>
<div class="right d-flex flex-column">
<dv-border-box-12><right1></right1></dv-border-box-12>
<dv-border-box-12><right2></right2></dv-border-box-12>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import drawMixin from "@/mixin/drawMixin";
import MapComponent from "./map.vue";
import HeaderComponent from "./header.vue";
import right1 from "./right1.vue";
import right2 from "./right2.vue";
import btns from "./btns.vue";
export default {
components: {
MapComponent,
HeaderComponent,
right1,
right2,
btns
},
mixins: [drawMixin],
data() {
return {
loading: true,
}
},
methods: {
},
computed: {},
mounted() {
setTimeout(() => {
this.loading = false;
},500)
}
}
</script>
<style scoped lang="scss">
@import "~@/styles/scss/style.scss";
.page {
background: #040608;
width: 100vw;
height: 100vh;
overflow: hidden;
position: relative;
}
.container {
width: 1920px;
height: 1080px;
transform-origin: 0 0;
position: relative;
top: 50%;
left: 50%;
.body {
padding-top: 60px;
padding-left: 16%;
.left {
flex-basis: 60%;
}
.right {
flex: 1;
padding-right: 60px;
margin-left: 40px;
div + div {
margin-top: 20px;
}
}
}
}
</style>

@ -0,0 +1,38 @@
<template>
<div id="map">
</div>
</template>
<script>
import * as echarts from "echarts";
import "echarts-gl";
import WUXI from "@/assets/wuxi.json";
export default {
data() {
return {}
},
methods: {
initMap () {
echarts.registerMap("wuxi", WUXI);
let chart = echarts.init(document.querySelector("#map"))
chart.setOption({
series: [{
type: 'map3D', // mapmap3D
map: 'wuxi' //
}]
})
}
},
computed: {},
mounted() {
this.initMap()
}
}
</script>
<style scoped lang="scss">
#map {
width: 100%;
height: 100%;
}
</style>

@ -0,0 +1,79 @@
<template>
<div>
<div class="ranking bg-color-black">
<span>
<icon name="chart-pie" class="text-icon"></icon>
</span>
<span class="fs-xl text mx-2 mb-1 pl-3">年度负责人组件达标榜</span>
<dv-scroll-ranking-board class="dv-scr-rank-board mt-1" :config="ranking" />
</div>
</div>
</template>
<script>
export default {
data() {
return {
ranking: {
data: [
{
name: '周口',
value: 55
},
{
name: '南阳',
value: 120
},
{
name: '西峡',
value: 78
},
{
name: '驻马店',
value: 66
},
{
name: '新乡',
value: 80
},
{
name: '新乡2',
value: 80
},
{
name: '新乡3',
value: 80
},
{
name: '新乡4',
value: 80
},
{
name: '新乡5',
value: 80
},
{
name: '新乡6',
value: 80
}
],
carousel: 'single',
unit: '人'
}
}
},
methods: {},
computed: {}
}
</script>
<style scoped lang="scss">
.ranking {
padding: 20px 10px;
width: 100%;
.dv-scr-rank-board {
height: 225px;
padding: 20px;
}
}
</style>

@ -0,0 +1,104 @@
<template>
<div id="bottomRight">
<div class="bg-color-black">
<div class="d-flex pt-2 pl-2">
<span>
<icon name="chart-area" class="text-icon"></icon>
</span>
<div class="d-flex">
<span class="fs-xl text mx-2">工单修复以及满意度统计图</span>
<div class="decoration2">
<dv-decoration-2 :reverse="true" style="width:5px;height:6rem;" />
</div>
</div>
</div>
<div>
<Chart :cdata="cdata" />
</div>
</div>
</div>
</template>
<script>
import Chart from "@/components/Charts"
export default {
data () {
return {
drawTiming: null,
cdata: {
year: null,
weekCategory: [],
radarData: [],
radarDataAvg: [],
maxData: 12000,
weekMaxData: [],
weekLineData: []
}
}
},
components: {
Chart,
},
mounted () {
this.drawTimingFn();
},
beforeDestroy () {
clearInterval(this.drawTiming);
},
methods: {
drawTimingFn () {
this.setData();
this.drawTiming = setInterval(() => {
this.setData();
}, 6000);
},
setData () {
//
this.cdata.weekCategory = [];
this.cdata.weekMaxData = [];
this.cdata.weekLineData = [];
this.cdata.radarData = [];
this.cdata.radarDataAvg = [];
let dateBase = new Date();
this.cdata.year = dateBase.getFullYear();
//
for (let i = 0; i < 7; i++) {
//
let date = new Date();
this.cdata.weekCategory.unshift([date.getMonth() + 1, date.getDate()-i].join("/"));
// 线
this.cdata.weekMaxData.push(this.cdata.maxData);
let distance = Math.round(Math.random() * 11000 + 500);
this.cdata.weekLineData.push(distance);
//
//
let averageSpeed = +(Math.random() * 5 + 3).toFixed(3);
let maxSpeed = averageSpeed + +(Math.random() * 3).toFixed(2);
let hour = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayData = [distance, averageSpeed, maxSpeed, hour];
this.cdata.radarData.unshift(radarDayData);
//
let distanceAvg = Math.round(Math.random() * 8000 + 4000);
let averageSpeedAvg = +(Math.random() * 4 + 4).toFixed(3);
let maxSpeedAvg = averageSpeedAvg + +(Math.random() * 2).toFixed(2);
let hourAvg = +(distance / 1000 / averageSpeed).toFixed(1);
let radarDayDataAvg = [
distanceAvg,
averageSpeedAvg,
maxSpeedAvg,
hourAvg
];
this.cdata.radarDataAvg.unshift(radarDayDataAvg);
}
}
}
};
</script>
<style scoped lang="scss">
</style>

@ -24,8 +24,8 @@ module.exports = {
* In most cases please use '/' !!!
* Detail: https://cli.vuejs.org/config/#publicpath
*/
publicPath: '/admin/',
outputDir: '/Users/liuxiangyu/Work/w-无锡交通产业集团/app/wxjt-asset-service/public/admin',
publicPath: process.env.ENV === 'staging' ? '/app_test' : '/app',
outputDir: './dist',
assetsDir: 'static',
css: {
loaderOptions: { // 向 CSS 相关的 loader 传递选项

Loading…
Cancel
Save