general-chart.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <view class="page-box">
  3. <!-- 返回按钮 -->
  4. <back></back>
  5. <!-- 学生信息头部 -->
  6. <view class="children-box">
  7. <image class="children-avatar" :src="childreninfo.avatar"></image>
  8. <view class="children-msg">
  9. <view class="children-name">{{childreninfo.name}}</view>
  10. <view class="children-class">{{childreninfo.class}}</view>
  11. </view>
  12. </view>
  13. <!-- 图表区域 -->
  14. <!-- 总成绩图表 -->
  15. <view class="chart-container">
  16. <view class="chart-name">
  17. <view class="t-icon t-icon-beach"></view>
  18. <text class="chart-name-text">{{semester}} 总成绩对比</text>
  19. <!-- 按钮区域 -->
  20. <view class="btn-box">
  21. <text class="btn" @click="tooltipMsg">图表详情</text>
  22. <u-icon name="question-circle" color="#3B4144;" @click="tooltipMsg"></u-icon>
  23. </view>
  24. </view>
  25. <view class="charts-box">
  26. <qiun-data-charts type="area" :chartData="gradeData.semesterLineChart.generalComparison"
  27. :loadingType="4" tooltipFormat='tooltipScore' :canvas2d="true" canvasId="canvasId9999" />
  28. </view>
  29. </view>
  30. <!-- 单科与平均成绩对比 -->
  31. <view class="chart-container">
  32. <view class="chart-name">
  33. <view class="t-icon t-icon-bridge"></view>
  34. <text class="chart-name-text">{{semester}} 单科与平均对比</text>
  35. <!-- 按钮区域 -->
  36. <view class="btn-box" @click="setSubjectPicker = true">
  37. <text class="btn">{{subjectCurrent}}</text>
  38. <u-icon name="arrow-down" color="#3B4144;"></u-icon>
  39. </view>
  40. </view>
  41. <!-- 图表 -->
  42. <view class="charts-box">
  43. <qiun-data-charts type="area" :chartData="gradeData.semesterLineChart.singleAverageComparison"
  44. :loadingType="4" background="none" tooltipFormat='tooltipScore' :canvas2d="true"
  45. canvasId="canvasId99999" />
  46. </view>
  47. </view>
  48. <!-- 单科成绩走势 -->
  49. <view class="chart-container">
  50. <view class="chart-name">
  51. <view class="t-icon t-icon-cape"></view>
  52. <text class="chart-name-text">{{semester}} 单科走势对比</text>
  53. <!-- 按钮 -->
  54. <view class="btn-box" @click="switchScoreTypePicker = true">
  55. <text class="btn">{{scoreTypeCurrent}}</text>
  56. <u-icon name="arrow-down" color="#3B4144;"></u-icon>
  57. </view>
  58. </view>
  59. <!-- 图表 -->
  60. <view class="charts-box" v-if="scoreTypeCurrent === '得分'">
  61. <qiun-data-charts type="area" :chartData="gradeData.semesterLineChart.subjectComparison"
  62. :loadingType="4" tooltipFormat='tooltipScore' :canvas2d="true" canvasId="canvasId99998" />
  63. </view>
  64. <view class="charts-box" v-if="scoreTypeCurrent === '得分率'">
  65. <qiun-data-charts type="area" :chartData="gradeData.semesterLineChart.subjectComparison"
  66. :loadingType="4" tooltipFormat='tooltipScoreShort' :canvas2d="true" canvasId="canvasId991398" />
  67. </view>
  68. </view>
  69. <!-- 选择器 -->
  70. <!-- 科目选择 -->
  71. <u-picker :show="setSubjectPicker" :columns="subjectList" @confirm="pickerConfirm" @cancel="pickerCancel"
  72. :closeOnClickOverlay="true" :immediateChange="true">
  73. </u-picker>
  74. <!-- 得分展示模式选择 -->
  75. <u-picker :show="switchScoreTypePicker" :columns="scoreTypeList" @confirm="scoreTypeConfirm"
  76. @cancel="pickerCancel" :closeOnClickOverlay="true" :immediateChange="true">
  77. </u-picker>
  78. </view>
  79. </template>
  80. <script>
  81. import getdata from '../../common/data.js'
  82. import {
  83. mapState,
  84. mapMutations,
  85. mapGetters
  86. } from 'vuex'
  87. export default {
  88. computed: {
  89. ...mapState('m_children', ['childreninfo', 'semester']),
  90. ...mapState('m_chart', ['gradeData']),
  91. ...mapGetters('m_chart', ['getSubjectList'])
  92. },
  93. //picker选择科目的变化通过监听器,监听变化并做出对应图表的整体变化
  94. watch: {
  95. //对象形式监听subjectCurrent的变化
  96. subjectCurrent: {
  97. //newValue为变化后的新值
  98. handler(newValue) {
  99. //拿到对应图表数据
  100. let subjectChartData = this.getdata.find(x => x.series[0].name.includes(newValue))
  101. this.updateSubjectComparison(subjectChartData)
  102. },
  103. //immediate 属性用来声明此监听器是否在页面初次加载完毕后立即调用
  104. immediate: true
  105. },
  106. },
  107. data() {
  108. return {
  109. //模拟数据
  110. getdata: getdata.subjectData,
  111. //科目切换
  112. setSubjectPicker: false,
  113. //数据展示切换
  114. switchScoreTypePicker: false,
  115. //科目列表
  116. subjectList: [],
  117. //数据维度列表
  118. scoreTypeList: [
  119. ['得分', '得分率']
  120. ],
  121. //主科图表展示方式
  122. scoreTypeCurrent: '',
  123. //当前选择科目
  124. subjectCurrent: '',
  125. };
  126. },
  127. onLoad() {
  128. this.setSubject()
  129. this.setScoreType()
  130. },
  131. methods: {
  132. ...mapMutations('m_chart', ['updateSubjectComparison']),
  133. //设置孩子科目
  134. setSubject() {
  135. //通过table获取孩子考试科目
  136. if (this.subjectList.length === 0) {
  137. let res = [this.getSubjectList]
  138. this.subjectList = res
  139. if (this.subjectCurrent === '')
  140. this.subjectCurrent = this.getSubjectList[0]
  141. }
  142. console.log('111',this.subjectList);
  143. console.log('222',this.subjectCurrent);
  144. },
  145. //设置默认图表模式
  146. setScoreType() {
  147. if (this.scoreTypeCurrent == '')
  148. this.scoreTypeCurrent = this.scoreTypeList[0][0]
  149. },
  150. //图表模式
  151. scoreTypeConfirm(e) {
  152. this.scoreTypeCurrent = e.value[0]
  153. uni.$showMsg('切换完成', 1000)
  154. this.switchScoreTypePicker = false
  155. },
  156. //切换科目
  157. pickerConfirm(e) {
  158. //改变subjectCurrent并由监听器处理数据图表同步改变
  159. this.subjectCurrent = e.value[0]
  160. uni.$showMsg('切换完成', 1000)
  161. this.setSubjectPicker = false
  162. },
  163. //取消picker
  164. pickerCancel() {
  165. uni.$showMsg('取消选择', 1000)
  166. this.setSubjectPicker = false
  167. this.switchScoreTypePicker = false
  168. },
  169. //提示信息
  170. tooltipMsg() {
  171. uni.$showMsg('点击图表展示更多信息', 1500)
  172. }
  173. }
  174. }
  175. </script>
  176. <style lang="scss">
  177. @import '@/gradepkg/common/chartpage.scss';
  178. .page-box {
  179. background: linear-gradient($color-blue, $page-background-color);
  180. }
  181. </style>