123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- <template>
- <view>
- <m-nav-bar fixed title="本次考试成绩"></m-nav-bar>
- <view class="top">
- <view class="score">
- <view class="circle">
- <canvas
- id="circle1"
- class="circle-canvas"
- canvas-id="circle1"
- width="340"
- height="300"
- type="2d"
- ></canvas>
- <view style="border: none" class="wxad">
- <ad
- :ad-intervals="100"
- ad-type="banner"
- unit-id="adunit-8eb44bbd7e3147d4"
- ></ad>
- </view>
- </view>
- </view>
- </view>
- <view class="split"> </view>
- <view class="history">
- <view class="title">
- <view class="title-left">考试情况</view>
- <view class="title-right"
- >历史成绩<van-icon name="arrow" size="26rpx"
- /></view>
- </view>
- <view class="content">
- <ec-canvas
- class="uni-ec-canvas"
- :ec="ec"
- :init-chart="initChart"
- canvasId="line-canvas1"
- ></ec-canvas>
- <!-- <view style="width: 100%; height: 250rpx"></view> -->
- </view>
- <view style="width: 100%; height: 150rpx"></view>
- </view>
- </view>
- </template>
- <script>
- import ecCanvas from "./../components/ec-canvas/index";
- import * as echarts from "./../components/ec-canvas/echarts";
- import api from "@/api";
- export default {
- data() {
- return {
- query: {
- score: 90,
- },
- ec: {},
- };
- },
- onLoad(query) {
- this.query = {
- ...query,
- score: Number(query.score || 0),
- };
- //登记成绩
- // api.exam.studentScoreInfo({
- // type: "三力测试",
- // score: Number(query.score),
- // });
- },
- onReady() {
- let that = this;
- const query = wx.createSelectorQuery();
- query
- .select("#circle1")
- .fields({ node: true, size: true })
- .exec((res) => {
- console.log(res);
- const canvas = res[0].node;
- const ctx = canvas.getContext("2d");
- const dpr = wx.getSystemInfoSync().pixelRatio;
- canvas.width = res[0].width * dpr;
- canvas.height = res[0].height * dpr;
- ctx.dpr = dpr;
- ctx.scale(dpr, dpr);
- that.drawHalfCircleAndScore(ctx);
- // ctx.fillRect(0, 0, 100, 100);
- });
- },
- methods: {
- initChart: async function (canvas, width, height, dpr) {
- let that = this;
- const chart = echarts.init(canvas, null, {
- width: width,
- height: height,
- devicePixelRatio: dpr, // new
- });
- canvas.setChart(chart);
- let res = await api.exam.studentScoreInfoList({
- type: "三力测试",
- });
- let optionSeriesData0 = res.rows.map((item) => {
- return item.score;
- });
- optionSeriesData0.reverse();
- console.log(res);
- var option = {
- color: ["#01C18D", "#00DDFF", "#37A2FF", "#FF0087", "#FFBF00"],
- title: {
- text: "",
- },
- toolbox: {
- left: "center",
- itemSize: 0,
- top: 0,
- feature: {
- dataZoom: {
- type: "inside",
- xAxisIndex: 0,
- start: 0,
- end: 100,
- },
- },
- },
- tooltip: {
- trigger: "axis",
- axisPointer: {
- type: "cross",
- label: {
- backgroundColor: "#6a7985",
- },
- },
- },
- legend: {
- data: [],
- },
- grid: {
- left: "3%",
- right: "4%",
- bottom: "3%",
- containLabel: true,
- },
- xAxis: [
- {
- type: "category",
- boundaryGap: true,
- axisLine: {
- lineStyle: {
- color: "#F0F0F0",
- },
- },
- },
- ],
- yAxis: [
- {
- type: "value",
- max: 100,
- minInterval: 30,
- },
- ],
- series: [
- {
- name: "Line 1",
- type: "line",
- stack: "Total",
- smooth: false,
- lineStyle: {
- width: 2,
- },
- markLine: {
- data: [
- [
- {
- name: "及格线",
- yAxis: 90,
- x: "10%",
- label: {
- color: "#01C18D",
- },
- },
- {
- name: "及格线",
- yAxis: 90,
- x: "85%",
- },
- ],
- ],
- },
- showSymbol: true,
- areaStyle: {
- opacity: 0.8,
- color: new echarts.graphic.LinearGradient(1, 0, 1, 1, [
- {
- offset: 0,
- color: "#E1F8F1",
- },
- {
- offset: 1,
- color: "#FEFEFE",
- },
- ]),
- },
- emphasis: {
- focus: "series",
- },
- data: optionSeriesData0,
- },
- ],
- };
- chart.setOption(option);
- return chart;
- },
- /**
- * @function 绘制半圆和分数
- * @param ctx {WechatMiniprogram.CanvasContext}
- */
- drawHalfCircleAndScore(ctx) {
- let x1 = ctx.canvas.width / ctx.dpr / 2;
- let y1 = 100;
- let r1 = 70;
- let that = this;
- //绘制白环
- ctx.moveTo(x1, y1);
- ctx.lineCap = "round";
- ctx.lineWidth = 40;
- ctx.strokeStyle = "#ffffff";
- ctx.beginPath();
- ctx.arc(x1, y1, r1, Math.PI, 0, false);
- ctx.stroke();
- //绘制灰环
- ctx.moveTo(x1, y1);
- ctx.lineCap = "round";
- ctx.lineWidth = 20;
- ctx.strokeStyle = "#d8d8d8";
- ctx.beginPath();
- ctx.arc(x1, y1, r1, Math.PI, 0, false);
- ctx.stroke();
- // ctx.draw()
- //绘制渐变环
- ctx.moveTo(x1, y1);
- let scoreColor1 = that.query.score >= 90 ? "#01C18D" : "#FF6D4E";
- let scoreColor2 = that.query.score >= 90 ? "#3ED2AA" : "#FE3B2B";
- var arcColor = ctx.createLinearGradient(15, 125, 155, 125);
- arcColor.addColorStop(0, scoreColor1);
- arcColor.addColorStop(1, scoreColor2);
- ctx.strokeStyle = arcColor;
- ctx.lineCap = "round";
- ctx.lineWidth = 20;
- ctx.beginPath();
- ctx.arc(
- x1,
- y1,
- r1,
- Math.PI,
- Math.PI * (1 + that.query.score / 100),
- false
- );
- ctx.stroke();
- console.log(ctx);
- // ctx.draw()
- //绘制文字
- ctx.moveTo(x1, y1);
- ctx.textAlign = "right";
- ctx.lineWidth = 1;
- ctx.font = "30px sans-serif";
- let score = that.query.score;
- console.log(scoreWidth);
- ctx.beginPath();
- ctx.fillStyle = scoreColor1;
- ctx.fillText(String(that.query.score), x1 + 10, y1);
- ctx.textAlign = "right";
- ctx.font = "14px sans-serif";
- let scoreWidth = ctx.measureText(String(score)).actualBoundingBoxRight;
- console.log(scoreWidth);
- ctx.fillText("分", x1 + scoreWidth + 30, y1);
- ctx.textAlign = "center";
- ctx.font = "14px sans-serif";
- ctx.fillStyle = "#333333";
- ctx.fillText(
- that.query.score >= 90 ? "恭喜你,成绩合格!" : "很遗憾,考试不合格!",
- x1,
- y1 + 40
- );
- },
- },
- components: { ecCanvas },
- };
- </script>
- <style lang="less" scoped>
- .vh100 {
- height: 100vh;
- }
- .top {
- width: 750rpx;
- height: 726rpx;
- background-image: url("https://ndata.zzxcx.net/ctjk/mp-wx/threeExamScore/topBg.png");
- background-size: 100%;
- padding: 0 30rpx;
- overflow-x: hidden;
- .score {
- background: #fff;
- width: 100%;
- height: 472rpx;
- margin-top: 150rpx;
- border-radius: 20rpx 20rpx 20rpx 20rpx;
- .circle {
- .circle-canvas {
- width: 340rpx;
- height: 300rpx;
- margin: 0 auto;
- transform: translateY(-15%);
- }
- }
- }
- }
- .split {
- width: 100%;
- height: 20rpx;
- border-bottom: 2rpx dashed #888;
- }
- .history {
- background: #fff;
- .title {
- display: flex;
- justify-content: space-between;
- padding-top: 40rpx;
- padding-left: 30rpx;
- padding-right: 30rpx;
- font-size: 26rpx;
- .title-left {
- font-size: 34rpx;
- color: #0a1a33;
- font-weight: bold;
- }
- .title-right {
- color: #8a9099;
- }
- }
- .content {
- width: 750rpx;
- height: 500rpx;
- padding: 15rpx;
- }
- .uni-ec-canvas {
- width: 100%;
- height: 100%;
- display: block;
- }
- }
- </style>
|