Commit 838c98df authored by Zhang Xiaojie's avatar Zhang Xiaojie

首页新增日活折线图

parent 167ef694
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -11,9 +11,11 @@ ...@@ -11,9 +11,11 @@
"@tiptap/extension-placeholder": "^2.0.0-beta.29", "@tiptap/extension-placeholder": "^2.0.0-beta.29",
"@tiptap/starter-kit": "^2.0.0-beta.101", "@tiptap/starter-kit": "^2.0.0-beta.101",
"@tiptap/vue-2": "^2.0.0-beta.48", "@tiptap/vue-2": "^2.0.0-beta.48",
"@types/echarts": "^4.9.10",
"ant-design-vue": "^1.7.7", "ant-design-vue": "^1.7.7",
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"echarts": "^5.2.0",
"element-ui": "^2.15.5", "element-ui": "^2.15.5",
"moment": "^2.29.1", "moment": "^2.29.1",
"node-sass": "^4.14.1", "node-sass": "^4.14.1",
......
function getDate(day: Date,isSmaller:Boolean) {
let mm:Number,dd:Number
if(isSmaller){
mm = day.getMonth() + 1 < 10 ? + (day.getMonth()+1): day.getMonth()+1 ;
dd = day.getDate() < 10 ? + (day.getDate()+1) : day.getDate()+1;
} else {
mm = day.getMonth() + 1 < 10 ? + day.getMonth(): day.getMonth() ;
dd = day.getDate() < 10 ? + day.getDate() : day.getDate();
}
return mm + "/" + dd
}
export function getPastDaysUtilYesterday(total: number):Array<String> {
const isSmaller = total < new Date().getDate() ? true:false
let period: Array<string> = [];
const startDay = new Date();
startDay.setDate(startDay.getDate()-total-1);
for (let i = 0; i < total; i++) {
let day = new Date();
day.setDate(startDay.getDate() + i);
period.push(getDate(day,isSmaller))
}
return period
}
...@@ -198,12 +198,18 @@ export default Vue.extend({ ...@@ -198,12 +198,18 @@ export default Vue.extend({
verify_code: code, verify_code: code,
phone, phone,
}); });
if (ret && ret.code === 200) { if (ret.code === 200) {
const { accessToken, userType } = ret.data; const { accessToken, level, phone, role, userType } = ret.data;
// setUserMsg(user) setUserMsg({
// this.$router.push({ token: accessToken,
// name: "home", newRole: this.adminLogin ? eNewRoleRelatedToBackEnd.PlatformAdmin : role,
// }); level: level,
phone,
userType,
})
this.$router.push({
name: "home",
});
} else { } else {
message.warn(ret.msg); message.warn(ret.msg);
} }
...@@ -215,7 +221,8 @@ export default Vue.extend({ ...@@ -215,7 +221,8 @@ export default Vue.extend({
use_pwd: true, use_pwd: true,
pwd, pwd,
}); });
console.log(ret);
if (ret.code === 200) { if (ret.code === 200) {
const { accessToken, level, phone, role, userType } = ret.data; const { accessToken, level, phone, role, userType } = ret.data;
setUserMsg({ setUserMsg({
......
<template> <template>
<div> <div>
<a-card :title="title" style="width: 400px;border-radius: 0.75rem; "> <a-card :title="title" style="width: 400px; border-radius: 0.75rem">
<p class=" text-lg tracking-wide font-normal">{{start}}{{end}}</p> <p class="text-blue-400 text-3xl font-medium mb-0 mt-4">{{ total }}</p>
<p class="text-blue-400 text-3xl font-medium mb-0 mt-4">{{total}} <span class=" text-base">{{unit}}</span> </p>
</a-card> </a-card>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from 'vue'; import Vue from "vue";
import {Card} from "ant-design-vue"; import { Card } from "ant-design-vue";
Vue.use(Card);
Vue.use(Card)
export default Vue.extend({ export default Vue.extend({
name:'card', props: {
props:{ title: {
title:{ type: String,
type:String, default: "",
default:''
},
total:{
type:String,
default:''
}, },
unit:{ total: {
type:String, type: String,
default:'人' default: "",
}
},
data(){
return{
start:'',
end:''
}
},
methods:{
getStart(){
let yy = new Date().getFullYear()
let mm = new Date().getMonth()
let dd = new Date().getDate()
this.start = yy+'-'+mm+'-'+dd
}, },
getEnd(){
let yy = new Date().getFullYear()
let mm = new Date().getMonth()+1
let dd = new Date().getDate()
this.end = yy+'-'+mm+'-'+dd
}
}, },
mounted(){ });
this.getStart()
this.getEnd()
}
})
</script> </script>
......
export enum barChartType{
allUser,
newUser
}
<template> <template>
<div class=""> <div class="">
<p class=" text-2xl font-bold mb-5">实时数据</p> <p class="text-2xl font-bold mb-5">实时数据</p>
<a-row type="flex" justify="center" align="middle" :gutter="[50,100]"> <a-row type="flex" justify="center" align="middle" :gutter="[50, 100]">
<a-col > <a-col>
<card title="总注册用户数" total="3157"/> <card title="全局用户日活数" total="3157" />
</a-col>
<a-col >
<card title="今日注册用户数" total="3157"/>
</a-col> </a-col>
</a-row>
<a-row type="flex" justify="center" align="middle" :gutter="[50,100]">
<a-col> <a-col>
<card title="今日沟通次数" total="3157" unit="次"/> <card title="登录用户日活数" total="3157" />
</a-col> </a-col>
<a-col> <a-col>
<card title="今日活跃用户数" total="3157" /> <card title="总注册用户数" total="3157" />
</a-col> </a-col>
</a-row> </a-row>
<p class="text-2xl font-bold my-5">日活折线图</p>
<!-- 数据源 -->
<span>统计:</span>
<a-radio-group @change="handleChangeSource" default-value="barChartType.allUser">
<a-radio-button value="barChartType.allUser">
全局日活
</a-radio-button>
<a-radio-button value="barChartType.newUser">
注册日活
</a-radio-button>
</a-radio-group>
<!-- 日期范围 -->
<span class=" ml-7">统计:</span>
<a-radio-group @change="handleChangeTimeRange" default-value="10">
<a-radio-button value="10">
10天
</a-radio-button>
<a-radio-button value="15">
15天
</a-radio-button>
<a-radio-button value="30">
30天
</a-radio-button>
</a-radio-group>
<div id="barchart" ref="barchart" class="h-96 w-5/6"></div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from "vue"; import Vue from "vue";
import {Row,Col} from 'ant-design-vue'; import { Row, Col, Radio } from "ant-design-vue";
Vue.use(Row); import * as echarts from "echarts";
Vue.use(Col); import { getPastDaysUtilYesterday } from "@/utils/days/index";
import { barChartType } from "./const"
Vue.use(Row).use(Col).use(Radio)
export default Vue.extend({ export default Vue.extend({
components: { components: {
'card': () => import('@/views/Root/Home/card.vue') card: () => import("@/views/Root/Home/card.vue"),
}, },
data() { data() {
return {}; return {
option: {
color: "#60A5FA",
xAxis: {
type: "category",
data: [],
},
yAxis: {
type: "value",
},
series: [
{
data: [120, 200, 150, 70, 70, 110, 130],
type: "bar",
showBackground: false,
},
],
},
timeRange: 10,
myChart: undefined as undefined | echarts.ECharts,
barChartType,
};
},
mounted() {
this.myChart = echarts.init(
document.getElementById("barchart") as HTMLCanvasElement
);
this.initEchart(this.timeRange);
},
watch: {
timeRange(newValue, oldValue) {
this.initEchart(newValue);
},
// barChartType(newValue, oldValue) {
// this.initEchart(newValue);
// },
},
methods: {
handleChangeTimeRange(e:any) {
this.timeRange = e.target!.value;
},
handleChangeSource(e:any) {
this.barChartType = e.target!.value;
},
initEchart(period: number) {
// 切换横坐标日期范围
(this.option.xAxis.data as Array<String>) = getPastDaysUtilYesterday(
period
) as Array<String>;
(this.myChart as echarts.ECharts).setOption(this.option);
// 调用获取数据的请求接口
},
}, },
watch: {},
}); });
</script> </script>
\ No newline at end of file
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
:wrapper-col="{ span: 4, offset: 0 }" :wrapper-col="{ span: 4, offset: 0 }"
prop="pwd" prop="pwd"
> >
<a-input v-model="changeSecurityPhoneForm.pwd" /> <a-input v-model="changeSecurityPhoneForm.pwd" type="password" />
</a-form-model-item> </a-form-model-item>
<a-form-model-item <a-form-model-item
label="新手机号码" label="新手机号码"
...@@ -53,7 +53,7 @@ import CodeInput from "@/components/CodeInput/index.vue"; ...@@ -53,7 +53,7 @@ import CodeInput from "@/components/CodeInput/index.vue";
import { FormModel, Modal } from "ant-design-vue"; import { FormModel, Modal } from "ant-design-vue";
import { phoneValid } from "./const"; import { phoneValid } from "./const";
import UserService from "@/service/UserManagementService"; import UserService from "@/service/UserManagementService";
import { deleteUserMsg } from "@/utils/userMsg/userMsg" import { deleteUserMsg } from "@/utils/userMsg/userMsg";
export default Vue.extend({ export default Vue.extend({
components: { CodeInput }, components: { CodeInput },
props: { props: {
...@@ -63,13 +63,6 @@ export default Vue.extend({ ...@@ -63,13 +63,6 @@ export default Vue.extend({
}, },
}, },
data() { data() {
let validatePass = (rule: any, value: string, callback: Function) => {
console.log(1, value);
if (value === "" || value.length < 4) {
return;
}
};
return { return {
labelCol: { span: 10 }, labelCol: { span: 10 },
wrapperCol: { span: 10 }, wrapperCol: { span: 10 },
...@@ -98,8 +91,8 @@ export default Vue.extend({ ...@@ -98,8 +91,8 @@ export default Vue.extend({
codeToConfirmChange: [ codeToConfirmChange: [
{ {
required: true, required: true,
len: 4, len: 6,
message: "请输入4位短信验证码", message: "请输入6位短信验证码",
trigger: "blur", trigger: "blur",
}, },
], ],
...@@ -131,7 +124,7 @@ export default Vue.extend({ ...@@ -131,7 +124,7 @@ export default Vue.extend({
verify_code: this.changeSecurityPhoneForm.codeToConfirmChange, verify_code: this.changeSecurityPhoneForm.codeToConfirmChange,
}); });
if (ret.code == 200) { if (ret.code == 200) {
deleteUserMsg() deleteUserMsg();
Modal.info({ Modal.info({
title: "手机号修改成功", title: "手机号修改成功",
content: "请重新登陆", content: "请重新登陆",
...@@ -139,12 +132,11 @@ export default Vue.extend({ ...@@ -139,12 +132,11 @@ export default Vue.extend({
that.$router.push({ name: "login" }); that.$router.push({ name: "login" });
}, },
}); });
} else{ } else {
Modal.error({ Modal.error({
title: "手机号修改失败", title: "手机号修改失败",
content: ret.msg, content: ret.msg,
onOk() { onOk() {},
},
}); });
} }
console.log(ret); console.log(ret);
......
...@@ -91,8 +91,8 @@ export default Vue.extend({ ...@@ -91,8 +91,8 @@ export default Vue.extend({
code: [ code: [
{ {
required: true, required: true,
len: 4, len: 6,
message: "请输入4位短信验证码", message: "请输入6位短信验证码",
trigger: "blur", trigger: "blur",
}, },
], ],
...@@ -137,6 +137,7 @@ export default Vue.extend({ ...@@ -137,6 +137,7 @@ export default Vue.extend({
new_pwd: this.changeByCodeForm.newPass, new_pwd: this.changeByCodeForm.newPass,
verify_code: this.changeByCodeForm.code, verify_code: this.changeByCodeForm.code,
phone: this.userPhone, phone: this.userPhone,
// phone:"",
}); });
if (ret.code == 200) { if (ret.code == 200) {
deleteUserMsg(); deleteUserMsg();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment