123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426 |
- <template>
- <table class="com-table">
- <thead>
- <tr>
- <th v-for="(col, index) of data.column" :key="index" :class="{ light: col.is_light }" :style="{ width: col.width }" @click="onSort(col)">
- {{ col.name }}
- </th>
- </tr>
- </thead>
- <el-scrollbar>
- <tbody :style="{ height: height }">
- <tr v-for="(row, index) of tableData" :key="index">
- <td
- v-for="(col, i) of data.column"
- :key="i"
- :style="{ width: col.width }"
- :class="{ light: hoverRow == row || hoverCol == col, num: col.is_num, 'always-light': col.is_light || row.is_light }"
- @mouseenter="hover(row, col)"
- @mouseleave="leave()"
- >
- <component :is="col.type ? col.type : 'div'" v-bind="col.props" v-html="template(col, row[col.field])" @click="onClick(col, row)"> </component>
- </td>
- </tr>
- </tbody>
- </el-scrollbar>
- <el-pagination class="mg-t-8" v-if="pageable" @current-change="handleCurrentChange" :current-page="currentPage4" :page-size="pageSize" layout="total, prev, pager, next, jumper" :total="data.total"> </el-pagination>
- <el-dialog :title="dialogTitle" v-model="dialogShow" width="70%" top="10vh" custom-class="modal" :close-on-click-modal="true">
- <div class="chart" id="chartDiv" height="500px"></div>
- </el-dialog>
- </table>
- </template>
- <script>
- import * as echarts from "echarts";
- export default {
- // 名称
- name: "ComTable",
- // 使用组件
- components: {},
- // 传入参数
- props: {
- data: Object,
- // hover 样式
- showHover: {
- type: Boolean,
- default: true,
- },
- // 列高亮
- showColHover: {
- type: Boolean,
- default: false,
- },
- canScroll: {
- type: Boolean,
- default: true,
- },
- pageSize: {
- type: Number,
- default: 0,
- },
- height: {
- type: String,
- default: "",
- },
- },
- // 自定义事件
- emits: {
- // 分页事件
- onPagging: null,
- },
- // 数据
- data() {
- return {
- hoverRow: -1,
- hoverCol: -1,
- sortCol: "",
- sortType: "",
- currentPage: 1,
- dialogShow: false,
- dialogTitle:"",
- dialogData:{},
- };
- },
- computed: {
- tableData() {
- let that = this;
- if (this.sortCol == "") {
- return this.data.data;
- } else {
- let data = this.data.data;
- data.sort((a, b) => {
- let rev = 1;
- if (that.sortType == "ASC") rev = 1;
- else if (that.sortType == "DESC") rev = -1;
- if (a[that.sortCol] > b[that.sortCol]) return rev * 1;
- if (a[that.sortCol] < b[that.sortCol]) return rev * -1;
- return 0;
- });
- return data;
- }
- },
- pageable() {
- return this.pageSize != 0;
- },
- pages() {
- if (this.pageable) return parseInt(this.data.total / this.pageSize) + 1;
- else return 0;
- },
- startRow() {
- if (this.pageable) return (this.currentPage - 1) * this.pageSize;
- else return 0;
- },
- endRow() {
- if (this.pageable) return this.currentPage * this.pageSize;
- else return this.data.data.length;
- },
- },
- // 函数
- methods: {
- clearCheckBox(time){
- this.$nextTick(()=>{
- setTimeout(()=>{
- const domArray = document.querySelectorAll(".curCheckBox");
- for(let i=0;i<domArray.length;i++){
- domArray[i].checked=false;
- }
- },(time || 300));
- });
- },
- onClick(col, data) {
- this.dialogShow = true;
- this.dialogTitle="曲线偏差率排行";
- const date = new Date();
- let year = date.getFullYear();
- let month = date.getMonth() + 1;
- let pdate = this.$parent.date.split("-");
- if(pdate && pdate.length>1){
- year = pdate[0];
- month = pdate[1];
- }
- let that = this;
- that.API.requestData({
- method: "POST",
- subUrl:"/leaderboard/curveMonthchatAjax",
- data: {
- wtId : data.fj,
- month : month,
- type :"zybz",
- year : year
- },
- success (res) {
- if (res.code === 200) {
- const linedata1 = [];
- const linedata2 = [];
-
- res.data.datas.forEach((item, index) => {
- linedata1.push(item['value2']);
- linedata2.push(item['value3']);
- });
-
- that.dialogShow = true;
- that.dialogTitle="曲线偏差率排行";
- that.initChart(linedata1,linedata2);
- }
- }
- });
- },
- initChart(data1,data2){
- let myChart = echarts.init(document.getElementById('chartDiv'));
- let option = {
- "color": [
- "#05bb4c",
- "#4b55ae",
- ],
- tooltip: {
- trigger: 'axis'
- },
- "legend": {
- "show": true,
- "data": [
- "最优功率",
- "保证功率",
- ],
- "right": 56,
- "icon": "circle",
- "itemWidth": 6,
- "inactiveColor": "#606769",
- "textStyle": {
- "color": "#B3BDC0",
- "fontSize": 12
- }
- },
- "grid": {
- "top": 32,
- "left": 40,
- "right": 40,
- "bottom": 24
- },
- "xAxis": [
- {
- "type": "category",
- "boundaryGap": false,
- "axisLabel": {
- "formatter": "{value}",
- "fontSize": 9.35925925925926,
- "textStyle": {
- "color": "#606769"
- }
- },
- "axisLine": {
- "show": false
- },
- "data": ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"]
- }
- ],
- "yAxis": [
- {
- "type": "value",
- "name": "(W)",
- "axisLabel": {
- "formatter": "{value}",
- "fontSize": 9.35925925925926
- },
- "axisLine": {
- "show": false
- },
- "splitLine": {
- "show": true,
- "lineStyle": {
- "color": "#606769",
- "type": "dashed"
- }
- }
- }
- ],
- "series": [
- {
- "name": "最优功率",
- "type": "line",
- "smooth": true,
- "showSymbol": false,
- "zlevel": 0,
- "lineStyle": {
- "normal": {
- "color": "#05bb4c",
- "width": 1
- },
- "emphasis": {
- "color": "#05bb4c"
- }
- },
- "areaStyle": {
- "normal": {
- "color": {
- "colorStops": [
- {
- "offset": 0,
- "color": "rgba(5,187,76,0.3)"
- },
- {
- "offset": 1,
- "color": "rgba(5,187,76,0.1)"
- }
- ],
- "x": 0,
- "y": 0,
- "x2": 0,
- "y2": 1,
- "type": "linear",
- "global": false
- },
- "shadowColor": "rgba(5,187,76,0.1)",
- "shadowBlur": 10
- },
- "emphasis": {
- "color": {
- "colorStops": [
- {
- "offset": 0,
- "color": "rgba(5,187,76,0.3)"
- },
- {
- "offset": 1,
- "color": "rgba(5,187,76,0.1)"
- }
- ],
- "x": 0,
- "y": 0,
- "x2": 0,
- "y2": 1,
- "type": "linear",
- "global": false
- },
- "shadowColor": "rgba(5,187,76,0.1)",
- "shadowBlur": 10
- }
- },
- "yAxisIndex": 0,
- "data": data1
- },
- {
- "name": "保证功率",
- "type": "line",
- "smooth": true,
- "showSymbol": false,
- "zlevel": 2,
- "lineStyle": {
- "normal": {
- "color": "#606769",
- "width": 1
- },
- "emphasis": {
- "color": "#fa8c16"
- }
- },
- "areaStyle": {
- "normal": {
- "color": "transparent",
- "shadowColor": "rgba(250,140,22,0.1)",
- "shadowBlur": 10
- },
- "emphasis": {
- "color": {
- "colorStops": [
- {
- "offset": 0,
- "color": "rgba(250,140,22,0.3)"
- },
- {
- "offset": 1,
- "color": "rgba(250,140,22,0.1)"
- }
- ],
- "x": 0,
- "y": 0,
- "x2": 0,
- "y2": 1,
- "type": "linear",
- "global": false
- },
- "shadowColor": "rgba(250,140,22,0.1)",
- "shadowBlur": 10
- }
- },
- "yAxisIndex": 0,
- "data": data2
- }
- ]
- };
- myChart.clear();
- myChart && myChart && myChart.setOption(option);
- this.resize = function() {
- myChart.resize();
- };
- window.addEventListener("resize", this.resize);
- myChart.resize();
- },
- onSort(col) {
- if (col.sortable == true) {
- this.sortCol = col.field;
- switch (this.sortType) {
- case "":
- this.sortType = "DESC";
- break;
- case "DESC":
- this.sortType = "ASC";
- break;
- case "ASC":
- this.sortType = "";
- break;
- }
- }
- },
- template(col, data) {
- if (!col.template) return data;
- else return col.template(data);
- },
- hover(row, col) {
- if (this.showHover) {
- this.hoverRow = row;
- if (this.showColHover) this.hoverCol = col;
- }
- },
- leave() {
- this.hoverRow = -1;
- this.hoverCol = -1;
- },
- handleCurrentChange(val) {
- this.currentPage = val;
- this.$emit("onPagging", {
- pageIndex: this.currentPage,
- pageSize: this.pageSize,
- start: this.startRow,
- end: this.endRow,
- });
- },
- },
- // 生命周期钩子
- beforeCreate() {
- // 创建前
- },
- created() {
- // 创建后
- },
- beforeMount() {
- // 渲染前
- },
- mounted() {
- // 渲染后
- },
- beforeUpdate() {},
- updated() {},
- };
- </script>
- <style lang="less">
- .chart {
- width: 1000px;
- height: 500px;
- }
- </style>
|