|
|
@@ -0,0 +1,536 @@
|
|
|
+<template>
|
|
|
+ <view class="manage-container">
|
|
|
+ <!-- 营销数据 -->
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-title">营销数据</view>
|
|
|
+ </view>
|
|
|
+ <view class="section-content">
|
|
|
+ <view class="data-cards">
|
|
|
+ <view class="data-card orange" @click="toSaleOrderDetail('year')">
|
|
|
+ <view class="data-header">本年度</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">订单数量</text>
|
|
|
+ <text class="data-value">{{ marketing.yearOrderCount }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">订单金额</text>
|
|
|
+ <text class="data-value">{{ marketing.yearOrderAmount }}<text class="data-unit">万元</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="data-card orange" @click="toSaleOrderDetail('month')">
|
|
|
+ <view class="data-header">本月</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">订单数量</text>
|
|
|
+ <text class="data-value">{{ marketing.monthOrderCount }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">订单金额</text>
|
|
|
+ <text class="data-value">{{ marketing.monthOrderAmount }}<text class="data-unit">万元</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart-wrapper">
|
|
|
+ <view class="chart-box">
|
|
|
+ <view id="marketingChart" class="chart"></view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 生产数据 -->
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-title">生产数据</view>
|
|
|
+ </view>
|
|
|
+ <view class="section-content">
|
|
|
+ <view class="data-cards">
|
|
|
+ <view class="data-card orange">
|
|
|
+ <view class="data-header">本年度</view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">生产工单</text>
|
|
|
+ <text class="data-value">{{ production.yearWorkOrder }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">生产总量</text>
|
|
|
+ <text class="data-value">{{ production.yearTotal }}<text class="data-unit">件</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="data-card orange">
|
|
|
+ <view class="data-header">本月</view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">生产工单</text>
|
|
|
+ <text class="data-value">{{ production.monthWorkOrder }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">生产总量</text>
|
|
|
+ <text class="data-value">{{ production.monthTotal }}<text class="data-unit">件</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart-wrapper">
|
|
|
+ <view class="chart-box">
|
|
|
+ <!-- <canvas canvas-id="productionChart" type="2d" class="chart"></canvas> -->
|
|
|
+ <view id="productionChart" class="chart"></view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 采购数据 -->
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-title">采购数据</view>
|
|
|
+ </view>
|
|
|
+ <view class="section-content">
|
|
|
+ <view class="data-cards">
|
|
|
+ <view class="data-card orange" @click="toPurchaseOrderDetail('year')">
|
|
|
+ <view class="data-header">本年度</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">采购数量</text>
|
|
|
+ <text class="data-value">{{ purchase.yearCount }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">采购金额</text>
|
|
|
+ <text class="data-value">{{ purchase.yearAmount }}<text class="data-unit">万元</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="data-card orange" @click="toPurchaseOrderDetail('month')">
|
|
|
+ <view class="data-header">本月</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">采购数量</text>
|
|
|
+ <text class="data-value">{{ purchase.monthCount }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row">
|
|
|
+ <text class="data-label">采购金额</text>
|
|
|
+ <text class="data-value">{{ purchase.monthAmount }}<text class="data-unit">万元</text></text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart-wrapper">
|
|
|
+ <view class="chart-title">采购走势</view>
|
|
|
+ <view class="chart-box">
|
|
|
+ <!-- <canvas canvas-id="purchaseChart" type="2d" class="chart"></canvas> -->
|
|
|
+ <view id="purchaseChart" class="chart"></view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <!-- 仓储数据 -->
|
|
|
+ <view class="section">
|
|
|
+ <view class="section-header">
|
|
|
+ <view class="section-title">仓储数据</view>
|
|
|
+ </view>
|
|
|
+ <view class="section-content">
|
|
|
+ <view class="data-cards">
|
|
|
+ <view class="data-card orange">
|
|
|
+ <view class="data-header">年度出入库</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">采购入库</text>
|
|
|
+ <text class="data-value">{{ warehouse.yearPurchaseIn }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">领料出库</text>
|
|
|
+ <text class="data-value">{{ warehouse.yearMaterialOut }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">生产入库</text>
|
|
|
+ <text class="data-value">{{ warehouse.yearProduceIn }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">发货出库</text>
|
|
|
+ <text class="data-value">{{ warehouse.yearDeliveryOut }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="data-card orange">
|
|
|
+ <view class="data-header">本月出入库</view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">采购入库</text>
|
|
|
+ <text class="data-value">{{ warehouse.monthPurchaseIn }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">领料出库</text>
|
|
|
+ <text class="data-value">{{ warehouse.monthMaterialOut }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">生产入库</text>
|
|
|
+ <text class="data-value">{{ warehouse.monthProduceIn }}</text>
|
|
|
+ </view>
|
|
|
+ <view class="data-divider"></view>
|
|
|
+ <view class="data-row small">
|
|
|
+ <text class="data-label">发货出库</text>
|
|
|
+ <text class="data-value">{{ warehouse.monthDeliveryOut }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart-wrapper">
|
|
|
+ <view class="chart-title">物料走势</view>
|
|
|
+ <view class="chart-box">
|
|
|
+ <!-- <canvas canvas-id="materialChart" type="2d" class="chart"></canvas> -->
|
|
|
+ <view id="materialChart" class="chart"></view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ <view class="chart-wrapper">
|
|
|
+ <view class="chart-title">成品走势</view>
|
|
|
+ <view class="chart-box">
|
|
|
+ <!-- <canvas canvas-id="finishedChart" type="2d" class="chart"></canvas> -->
|
|
|
+ <view id="finishedChart" class="chart"></view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
+ <view class="bottom-safe"></view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+import * as echarts from 'echarts'
|
|
|
+let chartInstances = {}
|
|
|
+
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ marketing: {
|
|
|
+ yearOrderCount: 23,
|
|
|
+ yearOrderAmount: 98,
|
|
|
+ monthOrderCount: 23,
|
|
|
+ monthOrderAmount: 98
|
|
|
+ },
|
|
|
+ production: {
|
|
|
+ yearWorkOrder: 23,
|
|
|
+ yearTotal: 98,
|
|
|
+ monthWorkOrder: 23,
|
|
|
+ monthTotal: 98
|
|
|
+ },
|
|
|
+ purchase: {
|
|
|
+ yearCount: 23,
|
|
|
+ yearAmount: 98,
|
|
|
+ monthCount: 23,
|
|
|
+ monthAmount: 98
|
|
|
+ },
|
|
|
+ warehouse: {
|
|
|
+ yearPurchaseIn: 23,
|
|
|
+ yearMaterialOut: 23,
|
|
|
+ yearProduceIn: 98,
|
|
|
+ yearDeliveryOut: 98,
|
|
|
+ monthPurchaseIn: 23,
|
|
|
+ monthMaterialOut: 23,
|
|
|
+ monthProduceIn: 98,
|
|
|
+ monthDeliveryOut: 98
|
|
|
+ },
|
|
|
+ chartData: {
|
|
|
+ marketingChart: {
|
|
|
+ categories: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
|
|
+ // 混合图表:柱状图(订单量) + 折线图(订单金额)
|
|
|
+ series: [
|
|
|
+ { name: '月订单量', data: [15, 20, 25, 30, 45, 50, 48, 40, 35, 42, 48, 52], type: 'bar' },
|
|
|
+ { name: '去年同期订单量', data: [12, 18, 22, 28, 40, 45, 42, 38, 32, 38, 45, 48], type: 'bar' },
|
|
|
+ { name: '月订单金额', data: [8.5, 10.2, 12.5, 15.0, 22.5, 25.0, 24.0, 20.0, 17.5, 21.0, 24.0, 26.0], type: 'line' },
|
|
|
+ { name: '去年同期订单金额', data: [6.0, 9.0, 11.0, 14.0, 20.0, 22.5, 21.0, 19.0, 16.0, 19.0, 22.5, 24.0], type: 'line' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ productionChart: {
|
|
|
+ categories: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
|
|
+ series: [
|
|
|
+ { name: '生产工单', data: [18, 22, 28, 35, 42, 48, 45, 40, 38, 45, 50, 55], type: 'bar' },
|
|
|
+ { name: '去年同期工单', data: [15, 20, 25, 30, 38, 42, 40, 35, 32, 38, 45, 48], type: 'bar' },
|
|
|
+ { name: '生产总量', data: [180, 220, 280, 350, 420, 480, 450, 400, 380, 450, 500, 550], type: 'line' },
|
|
|
+ { name: '去年同期总量', data: [150, 200, 250, 300, 380, 420, 400, 350, 320, 380, 450, 480], type: 'line' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ purchaseChart: {
|
|
|
+ categories: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
|
|
+ series: [
|
|
|
+ { name: '采购数量', data: [20, 25, 30, 38, 45, 52, 48, 42, 38, 45, 52, 58], type: 'bar' },
|
|
|
+ { name: '去年同期数量', data: [18, 22, 28, 35, 42, 48, 45, 38, 35, 42, 48, 52], type: 'bar' },
|
|
|
+ { name: '采购金额', data: [10.5, 12.5, 15.0, 19.0, 22.5, 26.0, 24.0, 21.0, 19.0, 22.5, 26.0, 29.0], type: 'line' },
|
|
|
+ { name: '去年同期金额', data: [9.0, 11.0, 14.0, 17.5, 21.0, 24.0, 22.5, 19.0, 17.5, 21.0, 24.0, 26.0], type: 'line' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ materialChart: {
|
|
|
+ categories: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
|
|
+ series: [
|
|
|
+ { name: '采购入库', data: [22, 28, 35, 42, 50, 58, 52, 45, 42, 50, 58, 65], type: 'bar' },
|
|
|
+ { name: '去年同期入库', data: [18, 22, 28, 35, 42, 48, 45, 38, 35, 42, 48, 52], type: 'bar' },
|
|
|
+ { name: '领料出库', data: [20, 25, 32, 38, 45, 52, 48, 42, 38, 45, 52, 58], type: 'line' },
|
|
|
+ { name: '去年同期出库', data: [15, 20, 25, 32, 38, 45, 42, 38, 35, 42, 48, 52], type: 'line' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ finishedChart: {
|
|
|
+ categories: ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'],
|
|
|
+ series: [
|
|
|
+ { name: '生产入库', data: [18, 22, 28, 35, 42, 48, 45, 40, 38, 45, 50, 55], type: 'bar' },
|
|
|
+ { name: '去年同期入库', data: [15, 20, 25, 32, 38, 45, 42, 38, 35, 42, 48, 52], type: 'bar' },
|
|
|
+ { name: '发货出库', data: [15, 20, 25, 32, 38, 45, 42, 38, 35, 42, 48, 52], type: 'line' },
|
|
|
+ { name: '去年同期发货', data: [12, 18, 22, 28, 35, 42, 40, 35, 32, 38, 45, 48], type: 'line' }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onReady() {
|
|
|
+ console.log('onReady11111111111111111111111111111111111111')
|
|
|
+ this.$nextTick(() => {
|
|
|
+ console.log('onReady - initCharts')
|
|
|
+ this.initCharts()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ onLoad() {
|
|
|
+ console.log('onLoad22222222222222222222222222222222222222')
|
|
|
+ },
|
|
|
+ onUnload() {
|
|
|
+ Object.keys(chartInstances).forEach(key => {
|
|
|
+ chartInstances[key]?.dispose()
|
|
|
+ })
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ toSaleOrderDetail(type) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/home/pages/manage/saleOrderDetail?type=' + type
|
|
|
+ })
|
|
|
+ },
|
|
|
+ toPurchaseOrderDetail(type) {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: '/pages/home/pages/manage/purchaseOrderDetail?type=' + type
|
|
|
+ })
|
|
|
+ },
|
|
|
+ initCharts() {
|
|
|
+ console.log('initCharts')
|
|
|
+ Object.keys(this.chartData).forEach(chartId => {
|
|
|
+ this.initChart(chartId, this.chartData[chartId])
|
|
|
+ })
|
|
|
+ },
|
|
|
+ initChart(domId, data) {
|
|
|
+ const query = uni.createSelectorQuery().in(this)
|
|
|
+ query.select(`#${domId}`).boundingClientRect()
|
|
|
+ query.exec(res => {
|
|
|
+ if (!res[0]) {
|
|
|
+ console.error(`Element #${domId} not found`)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const width = res[0].width || 355
|
|
|
+ const height = res[0].height || 200
|
|
|
+ console.log('init chart:', domId, width, height)
|
|
|
+
|
|
|
+ const chart = echarts.init(document.getElementById(domId))
|
|
|
+ chart.resize({ width, height })
|
|
|
+
|
|
|
+ const option = {
|
|
|
+ grid: {
|
|
|
+ left: 35,
|
|
|
+ right: 15,
|
|
|
+ top: 35,
|
|
|
+ bottom: 30
|
|
|
+ },
|
|
|
+ tooltip: {
|
|
|
+ show: true,
|
|
|
+ trigger: 'axis',
|
|
|
+ axisPointer: {
|
|
|
+ type: 'cross',
|
|
|
+ label: {
|
|
|
+ backgroundColor: '#6a7985'
|
|
|
+ }
|
|
|
+ },
|
|
|
+ backgroundColor: 'rgba(50, 50, 50, 0.9)',
|
|
|
+ borderColor: '#333',
|
|
|
+ textStyle: {
|
|
|
+ color: '#fff',
|
|
|
+ fontSize: 12
|
|
|
+ }
|
|
|
+ },
|
|
|
+ xAxis: {
|
|
|
+ type: 'category',
|
|
|
+ data: data.categories,
|
|
|
+ axisLine: { lineStyle: { color: '#e5e5e5' } },
|
|
|
+ axisLabel: { fontSize: 10, color: '#666' },
|
|
|
+ axisTick: { show: false }
|
|
|
+ },
|
|
|
+ yAxis: {
|
|
|
+ type: 'value',
|
|
|
+ min: 0,
|
|
|
+ splitNumber: 4,
|
|
|
+ axisLine: { show: false },
|
|
|
+ axisTick: { show: false },
|
|
|
+ splitLine: {
|
|
|
+ lineStyle: { color: '#e5e5e5', type: 'dashed' }
|
|
|
+ },
|
|
|
+ axisLabel: { fontSize: 10, color: '#666' }
|
|
|
+ },
|
|
|
+ series: data.series.map((item, index) => {
|
|
|
+ const chartType = item.type || 'line'
|
|
|
+ const barColors = ['#34c759', '#8bc34a', '#00bcd4', '#9c27b0']
|
|
|
+ const lineColors = ['#ff9500', '#faad14', '#e91e63', '#9c27b0']
|
|
|
+
|
|
|
+ if (chartType === 'bar') {
|
|
|
+ return {
|
|
|
+ name: item.name,
|
|
|
+ type: 'bar',
|
|
|
+ barWidth: 10,
|
|
|
+ itemStyle: {
|
|
|
+ color: barColors[index % barColors.length]
|
|
|
+ },
|
|
|
+ data: item.data
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ return {
|
|
|
+ name: item.name,
|
|
|
+ type: 'line',
|
|
|
+ smooth: true,
|
|
|
+ symbol: 'circle',
|
|
|
+ symbolSize: 4,
|
|
|
+ lineStyle: {
|
|
|
+ width: 2,
|
|
|
+ color: lineColors[index % lineColors.length]
|
|
|
+ },
|
|
|
+ itemStyle: {
|
|
|
+ color: lineColors[index % lineColors.length]
|
|
|
+ },
|
|
|
+ data: item.data
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ chart.setOption(option)
|
|
|
+ chartInstances[domId] = chart
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped lang="scss">
|
|
|
+.manage-container {
|
|
|
+ min-height: 100vh;
|
|
|
+ // background: #f0f0f0;
|
|
|
+ padding-bottom: constant(safe-area-inset-bottom);
|
|
|
+ padding-bottom: env(safe-area-inset-bottom);
|
|
|
+}
|
|
|
+
|
|
|
+/* 数据区块 */
|
|
|
+.section {
|
|
|
+ margin-top: 2rpx;
|
|
|
+ padding-bottom: 8rpx;
|
|
|
+
|
|
|
+ .section-header {
|
|
|
+ padding: 24rpx 0 24rpx;
|
|
|
+
|
|
|
+ .section-title {
|
|
|
+ font-size: 30rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #333;
|
|
|
+ padding-left: 12rpx;
|
|
|
+ border-left: 6rpx solid #34c759;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .section-content {
|
|
|
+ background: #fff;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 数据卡片 */
|
|
|
+.data-cards {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(2, 1fr);
|
|
|
+ gap: 16rpx;
|
|
|
+ padding: 20rpx;
|
|
|
+ border-radius: 4rpx;
|
|
|
+
|
|
|
+ .data-card {
|
|
|
+ border-radius: 12rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ background: linear-gradient(135deg, #ff9500 0%, #ff6b00 100%);
|
|
|
+ box-shadow: 0 4rpx 16rpx rgba(255, 149, 0, 0.25);
|
|
|
+ padding: 20rpx;
|
|
|
+
|
|
|
+ .data-header {
|
|
|
+ font-size: 26rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #fff;
|
|
|
+ margin-bottom: 6rpx;
|
|
|
+ }
|
|
|
+
|
|
|
+ .data-divider {
|
|
|
+ height: 1rpx;
|
|
|
+ background: rgba(255, 255, 255, 0.2);
|
|
|
+ }
|
|
|
+
|
|
|
+ .data-row {
|
|
|
+ display: flex;
|
|
|
+ align-items: baseline;
|
|
|
+ justify-content: space-between;
|
|
|
+ padding: 8rpx 0;
|
|
|
+
|
|
|
+ &.small {
|
|
|
+ padding: 6rpx 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ .data-label {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: rgba(255, 255, 255, 0.9);
|
|
|
+ }
|
|
|
+
|
|
|
+ .data-value {
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #fff;
|
|
|
+ }
|
|
|
+
|
|
|
+ .data-unit {
|
|
|
+ font-size: 22rpx;
|
|
|
+ margin-left: 4rpx;
|
|
|
+ opacity: 0.85;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* 图表 */
|
|
|
+.chart-wrapper {
|
|
|
+ padding: 16rpx 20rpx 8rpx;
|
|
|
+
|
|
|
+ .chart-title {
|
|
|
+ font-size: 26rpx;
|
|
|
+ color: #333;
|
|
|
+ margin-bottom: 10rpx;
|
|
|
+ font-weight: 500;
|
|
|
+ }
|
|
|
+
|
|
|
+ .chart-box {
|
|
|
+ // background: #f7f7f7;
|
|
|
+ border-radius: 10rpx;
|
|
|
+ overflow: hidden;
|
|
|
+ }
|
|
|
+
|
|
|
+ .chart {
|
|
|
+ width: 100%;
|
|
|
+ height: 280px;
|
|
|
+ min-height: 200px;
|
|
|
+ display: block;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.bottom-safe {
|
|
|
+ height: constant(safe-area-inset-bottom);
|
|
|
+ height: env(safe-area-inset-bottom);
|
|
|
+}
|
|
|
+</style>
|