| @@ -2,7 +2,7 @@ | |||||
| <div class="dashboard-container"> | <div class="dashboard-container"> | ||||
| <div class="chart-row"> | <div class="chart-row"> | ||||
| <div class="chart-container"> | <div class="chart-container"> | ||||
| <h2>用户增长趋势</h2> | |||||
| <h2>资源调查进度</h2> | |||||
| <div ref="lineChart" class="chart"></div> | <div ref="lineChart" class="chart"></div> | ||||
| </div> | </div> | ||||
| @@ -57,7 +57,7 @@ | |||||
| trigger: 'axis' | trigger: 'axis' | ||||
| }, | }, | ||||
| legend: { | legend: { | ||||
| data: ['新增用户', '活跃用户', '付费用户'] | |||||
| data: ['已调查', '待调查'] | |||||
| }, | }, | ||||
| grid: { | grid: { | ||||
| left: '3%', | left: '3%', | ||||
| @@ -68,27 +68,14 @@ | |||||
| xAxis: { | xAxis: { | ||||
| type: 'category', | type: 'category', | ||||
| boundaryGap: false, | boundaryGap: false, | ||||
| data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月'] | |||||
| data: ['A市', 'B市', 'C市', 'D市', 'E市', 'F市', 'G市'] | |||||
| }, | }, | ||||
| yAxis: { | yAxis: { | ||||
| type: 'value' | type: 'value' | ||||
| }, | }, | ||||
| series: [ | series: [ | ||||
| { | { | ||||
| name: '新增用户', | |||||
| type: 'line', | |||||
| data: [120, 132, 101, 134, 90, 230, 210], | |||||
| smooth: true, | |||||
| lineStyle: { | |||||
| width: 3, | |||||
| color: '#5470C6' | |||||
| }, | |||||
| itemStyle: { | |||||
| color: '#5470C6' | |||||
| } | |||||
| }, | |||||
| { | |||||
| name: '活跃用户', | |||||
| name: '已调查', | |||||
| type: 'line', | type: 'line', | ||||
| data: [220, 182, 191, 234, 290, 330, 310], | data: [220, 182, 191, 234, 290, 330, 310], | ||||
| smooth: true, | smooth: true, | ||||
| @@ -101,7 +88,7 @@ | |||||
| } | } | ||||
| }, | }, | ||||
| { | { | ||||
| name: '付费用户', | |||||
| name: '待调查', | |||||
| type: 'line', | type: 'line', | ||||
| data: [150, 232, 201, 154, 190, 330, 410], | data: [150, 232, 201, 154, 190, 330, 410], | ||||
| smooth: true, | smooth: true, | ||||
| @@ -0,0 +1,312 @@ | |||||
| <template> | |||||
| <div class="dashboard-container"> | |||||
| <div class="chart-row"> | |||||
| <div class="chart-container"> | |||||
| <h2>用户增长趋势</h2> | |||||
| <div ref="lineChart" class="chart"></div> | |||||
| </div> | |||||
| <div class="chart-container"> | |||||
| <h2>产品销售统计</h2> | |||||
| <div ref="barChart" class="chart"></div> | |||||
| </div> | |||||
| </div> | |||||
| <div class="chart-row"> | |||||
| <div class="chart-container"> | |||||
| <h2>用户分布比例</h2> | |||||
| <div ref="pieChart" class="chart"></div> | |||||
| </div> | |||||
| <div class="info-cards"> | |||||
| <div class="info-card"> | |||||
| <h3>总用户数</h3> | |||||
| <p class="number">12,345</p> | |||||
| <p class="trend up">↑ 12% 同比</p> | |||||
| </div> | |||||
| <div class="info-card"> | |||||
| <h3>本月销售额</h3> | |||||
| <p class="number">¥ 456,789</p> | |||||
| <p class="trend up">↑ 8% 环比</p> | |||||
| </div> | |||||
| <div class="info-card"> | |||||
| <h3>活跃用户</h3> | |||||
| <p class="number">8,642</p> | |||||
| <p class="trend down">↓ 3% 环比</p> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| </template> | |||||
| <script> | |||||
| import * as echarts from 'echarts'; | |||||
| export default { | |||||
| name: 'Dashboard', | |||||
| mounted() { | |||||
| this.initLineChart(); | |||||
| this.initBarChart(); | |||||
| this.initPieChart(); | |||||
| }, | |||||
| methods: { | |||||
| initLineChart() { | |||||
| const chart = echarts.init(this.$refs.lineChart); | |||||
| const option = { | |||||
| tooltip: { | |||||
| trigger: 'axis' | |||||
| }, | |||||
| legend: { | |||||
| data: ['新增用户', '活跃用户', '付费用户'] | |||||
| }, | |||||
| grid: { | |||||
| left: '3%', | |||||
| right: '4%', | |||||
| bottom: '3%', | |||||
| containLabel: true | |||||
| }, | |||||
| xAxis: { | |||||
| type: 'category', | |||||
| boundaryGap: false, | |||||
| data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月'] | |||||
| }, | |||||
| yAxis: { | |||||
| type: 'value' | |||||
| }, | |||||
| series: [ | |||||
| { | |||||
| name: '新增用户', | |||||
| type: 'line', | |||||
| data: [120, 132, 101, 134, 90, 230, 210], | |||||
| smooth: true, | |||||
| lineStyle: { | |||||
| width: 3, | |||||
| color: '#5470C6' | |||||
| }, | |||||
| itemStyle: { | |||||
| color: '#5470C6' | |||||
| } | |||||
| }, | |||||
| { | |||||
| name: '活跃用户', | |||||
| type: 'line', | |||||
| data: [220, 182, 191, 234, 290, 330, 310], | |||||
| smooth: true, | |||||
| lineStyle: { | |||||
| width: 3, | |||||
| color: '#91CC75' | |||||
| }, | |||||
| itemStyle: { | |||||
| color: '#91CC75' | |||||
| } | |||||
| }, | |||||
| { | |||||
| name: '付费用户', | |||||
| type: 'line', | |||||
| data: [150, 232, 201, 154, 190, 330, 410], | |||||
| smooth: true, | |||||
| lineStyle: { | |||||
| width: 3, | |||||
| color: '#EE6666' | |||||
| }, | |||||
| itemStyle: { | |||||
| color: '#EE6666' | |||||
| } | |||||
| } | |||||
| ] | |||||
| }; | |||||
| chart.setOption(option); | |||||
| window.addEventListener('resize', function() { | |||||
| chart.resize(); | |||||
| }); | |||||
| }, | |||||
| initBarChart() { | |||||
| const chart = echarts.init(this.$refs.barChart); | |||||
| const option = { | |||||
| tooltip: { | |||||
| trigger: 'axis', | |||||
| axisPointer: { | |||||
| type: 'shadow' | |||||
| } | |||||
| }, | |||||
| legend: { | |||||
| data: ['2022', '2023'] | |||||
| }, | |||||
| grid: { | |||||
| left: '3%', | |||||
| right: '4%', | |||||
| bottom: '3%', | |||||
| containLabel: true | |||||
| }, | |||||
| xAxis: { | |||||
| type: 'value' | |||||
| }, | |||||
| yAxis: { | |||||
| type: 'category', | |||||
| data: ['产品A', '产品B', '产品C', '产品D', '产品E'] | |||||
| }, | |||||
| series: [ | |||||
| { | |||||
| name: '2022', | |||||
| type: 'bar', | |||||
| data: [320, 302, 341, 374, 390], | |||||
| itemStyle: { | |||||
| color: '#91CC75' | |||||
| } | |||||
| }, | |||||
| { | |||||
| name: '2023', | |||||
| type: 'bar', | |||||
| data: [420, 432, 401, 454, 590], | |||||
| itemStyle: { | |||||
| color: '#5470C6' | |||||
| } | |||||
| } | |||||
| ] | |||||
| }; | |||||
| chart.setOption(option); | |||||
| window.addEventListener('resize', function() { | |||||
| chart.resize(); | |||||
| }); | |||||
| }, | |||||
| initPieChart() { | |||||
| const chart = echarts.init(this.$refs.pieChart); | |||||
| const option = { | |||||
| tooltip: { | |||||
| trigger: 'item' | |||||
| }, | |||||
| legend: { | |||||
| orient: 'vertical', | |||||
| right: 10, | |||||
| top: 'center' | |||||
| }, | |||||
| series: [ | |||||
| { | |||||
| name: '用户分布', | |||||
| type: 'pie', | |||||
| radius: ['40%', '70%'], | |||||
| avoidLabelOverlap: false, | |||||
| itemStyle: { | |||||
| borderRadius: 10, | |||||
| borderColor: '#fff', | |||||
| borderWidth: 2 | |||||
| }, | |||||
| label: { | |||||
| show: false, | |||||
| position: 'center' | |||||
| }, | |||||
| emphasis: { | |||||
| label: { | |||||
| show: true, | |||||
| fontSize: '18', | |||||
| fontWeight: 'bold' | |||||
| } | |||||
| }, | |||||
| labelLine: { | |||||
| show: false | |||||
| }, | |||||
| data: [ | |||||
| { value: 1048, name: '华北地区' }, | |||||
| { value: 735, name: '华东地区' }, | |||||
| { value: 580, name: '华南地区' }, | |||||
| { value: 484, name: '西部地区' }, | |||||
| { value: 300, name: '东北地区' } | |||||
| ], | |||||
| color: ['#5470C6', '#91CC75', '#EE6666', '#FAC858', '#73C0DE'] | |||||
| } | |||||
| ] | |||||
| }; | |||||
| chart.setOption(option); | |||||
| window.addEventListener('resize', function() { | |||||
| chart.resize(); | |||||
| }); | |||||
| } | |||||
| } | |||||
| }; | |||||
| </script> | |||||
| <style scoped> | |||||
| .dashboard-container { | |||||
| padding: 20px; | |||||
| background-color: #f5f7fa; | |||||
| min-height: 100vh; | |||||
| } | |||||
| h1 { | |||||
| color: #333; | |||||
| margin-bottom: 30px; | |||||
| } | |||||
| .chart-row { | |||||
| display: flex; | |||||
| margin-bottom: 20px; | |||||
| gap: 20px; | |||||
| } | |||||
| .chart-container { | |||||
| flex: 1; | |||||
| background-color: white; | |||||
| border-radius: 8px; | |||||
| padding: 15px; | |||||
| box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); | |||||
| } | |||||
| .chart { | |||||
| height: 350px; | |||||
| } | |||||
| .info-cards { | |||||
| flex: 0 0 300px; | |||||
| display: flex; | |||||
| flex-direction: column; | |||||
| gap: 20px; | |||||
| } | |||||
| .info-card { | |||||
| background-color: white; | |||||
| border-radius: 8px; | |||||
| padding: 20px; | |||||
| box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1); | |||||
| } | |||||
| .info-card h3 { | |||||
| color: #666; | |||||
| margin-bottom: 10px; | |||||
| font-size: 16px; | |||||
| } | |||||
| .info-card .number { | |||||
| font-size: 24px; | |||||
| font-weight: bold; | |||||
| margin-bottom: 5px; | |||||
| color: #333; | |||||
| } | |||||
| .info-card .trend { | |||||
| font-size: 14px; | |||||
| } | |||||
| .trend.up { | |||||
| color: #67C23A; | |||||
| } | |||||
| .trend.down { | |||||
| color: #F56C6C; | |||||
| } | |||||
| @media (max-width: 1200px) { | |||||
| .chart-row { | |||||
| flex-direction: column; | |||||
| } | |||||
| .info-cards { | |||||
| flex-direction: row; | |||||
| flex-wrap: wrap; | |||||
| } | |||||
| .info-card { | |||||
| flex: 1; | |||||
| min-width: 200px; | |||||
| } | |||||
| } | |||||
| </style> | |||||
| @@ -54,6 +54,11 @@ | |||||
| <el-option v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.label" :value="dict.value"/> | <el-option v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.label" :value="dict.value"/> | ||||
| </el-select> | </el-select> | ||||
| </el-form-item>--> | </el-form-item>--> | ||||
| <el-form-item label="是账外地" prop="sfzwd"> | |||||
| <el-select v-model="queryParams.sfzwd" placeholder="请选择是否账外地" clearable> | |||||
| <el-option v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.label" :value="dict.value"/> | |||||
| </el-select> | |||||
| </el-form-item> | |||||
| <el-form-item label="调查状态" prop="surveyStatus"> | <el-form-item label="调查状态" prop="surveyStatus"> | ||||
| <el-select v-model="queryParams.surveyStatus" placeholder="请选择调查状态" clearable> | <el-select v-model="queryParams.surveyStatus" placeholder="请选择调查状态" clearable> | ||||
| <el-option v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.label" :value="dict.value"/> | <el-option v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.label" :value="dict.value"/> | ||||
| @@ -207,6 +212,7 @@ | |||||
| <el-descriptions-item label="指界人姓名">{{ form.zjrxm }}</el-descriptions-item> | <el-descriptions-item label="指界人姓名">{{ form.zjrxm }}</el-descriptions-item> | ||||
| <el-descriptions-item label="实测面积(㎡)">{{ form.scmj }}</el-descriptions-item> | <el-descriptions-item label="实测面积(㎡)">{{ form.scmj }}</el-descriptions-item> | ||||
| <el-descriptions-item label="实测面积(亩)">{{ form.scmjm }}</el-descriptions-item> | <el-descriptions-item label="实测面积(亩)">{{ form.scmjm }}</el-descriptions-item> | ||||
| <el-descriptions-item label="是否账外地">{{ form.sfzwd }}</el-descriptions-item> | |||||
| </el-descriptions> | </el-descriptions> | ||||
| <el-descriptions title="经营数据" border :column="2" class="margin-top"> | <el-descriptions title="经营数据" border :column="2" class="margin-top"> | ||||
| @@ -301,6 +307,11 @@ | |||||
| <el-form-item label="实测面积" prop="scmjm"> | <el-form-item label="实测面积" prop="scmjm"> | ||||
| <el-input-number v-model="form.scmjm" placeholder="请输入实测面积" controls-position="right" :precision="3"/> | <el-input-number v-model="form.scmjm" placeholder="请输入实测面积" controls-position="right" :precision="3"/> | ||||
| </el-form-item> | </el-form-item> | ||||
| <el-form-item label="是否账外地" prop="sfzwd"> | |||||
| <el-radio-group v-model="form.sfzwd"> | |||||
| <el-radio v-for="dict in dict.type.is_common" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio> | |||||
| </el-radio-group> | |||||
| </el-form-item> | |||||
| <el-form-item label="调查状态" prop="surveyStatus"> | <el-form-item label="调查状态" prop="surveyStatus"> | ||||
| <el-radio-group v-model="form.surveyStatus"> | <el-radio-group v-model="form.surveyStatus"> | ||||
| <el-radio v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio> | <el-radio v-for="dict in dict.type.survey_status" :key="dict.value" :label="dict.value">{{dict.label}}</el-radio> | ||||
| @@ -390,6 +401,7 @@ export default { | |||||
| sfjbnt: null, | sfjbnt: null, | ||||
| surveyStatus: null, | surveyStatus: null, | ||||
| importCode: null, | importCode: null, | ||||
| sfzwd: null, | |||||
| }, | }, | ||||
| // 表单参数 | // 表单参数 | ||||
| form: {}, | form: {}, | ||||
| @@ -474,6 +486,7 @@ export default { | |||||
| surveyStatus: '1', | surveyStatus: '1', | ||||
| importCode: null, | importCode: null, | ||||
| deptName: null, | deptName: null, | ||||
| sfzwd: '2' | |||||
| } | } | ||||
| this.resetForm("form") | this.resetForm("form") | ||||
| }, | }, | ||||