10 changed files with 966 additions and 39 deletions
			
			
		@ -0,0 +1,75 @@ | 
				
			|||
const width=80 | 
				
			|||
export default [ | 
				
			|||
  { | 
				
			|||
    key: 'orgName', | 
				
			|||
    title: '组织', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'userCount', | 
				
			|||
    title: '用户数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'resiCount', | 
				
			|||
    title: '居民数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'partyCount', | 
				
			|||
    title: '党员数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'groupCount', | 
				
			|||
    title: '小组数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'topicCount', | 
				
			|||
    title: '话题数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'issueCount', | 
				
			|||
    title: '议题数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'projectCount', | 
				
			|||
    title: '项目数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'closedProjectCount', | 
				
			|||
    title: '结案项目数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'patrolPeopleCount', | 
				
			|||
    title: '巡查人数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'patrolCount', | 
				
			|||
    title: '巡查次数', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  }, | 
				
			|||
  { | 
				
			|||
    key: 'patrolDuration', | 
				
			|||
    title: '巡查时长', | 
				
			|||
    display: ['formA', 'formU', 'table', 'model'], | 
				
			|||
    width: width | 
				
			|||
  } | 
				
			|||
] | 
				
			|||
@ -0,0 +1,211 @@ | 
				
			|||
/* eslint-disable */ | 
				
			|||
/* Blob.js*/ | 
				
			|||
 | 
				
			|||
/*global self, unescape */ | 
				
			|||
/*jslint bitwise: true, regexp: true, confusion: true, es5: true, vars: true, white: true, | 
				
			|||
  plusplus: true */ | 
				
			|||
 | 
				
			|||
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ | 
				
			|||
 | 
				
			|||
(function (view) { | 
				
			|||
  "use strict"; | 
				
			|||
 | 
				
			|||
  view.URL = view.URL || view.webkitURL; | 
				
			|||
 | 
				
			|||
  if (view.Blob && view.URL) { | 
				
			|||
    try { | 
				
			|||
      new Blob; | 
				
			|||
      return; | 
				
			|||
    } catch (e) { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  // Internally we use a BlobBuilder implementation to base Blob off of
 | 
				
			|||
  // in order to support older browsers that only have BlobBuilder
 | 
				
			|||
  var BlobBuilder = view.BlobBuilder || view.WebKitBlobBuilder || view.MozBlobBuilder || (function (view) { | 
				
			|||
    var | 
				
			|||
      get_class = function (object) { | 
				
			|||
        return Object.prototype.toString.call(object).match(/^\[object\s(.*)\]$/)[1]; | 
				
			|||
      } | 
				
			|||
      , FakeBlobBuilder = function BlobBuilder() { | 
				
			|||
        this.data = []; | 
				
			|||
      } | 
				
			|||
      , FakeBlob = function Blob(data, type, encoding) { | 
				
			|||
        this.data = data; | 
				
			|||
        this.size = data.length; | 
				
			|||
        this.type = type; | 
				
			|||
        this.encoding = encoding; | 
				
			|||
      } | 
				
			|||
      , FBB_proto = FakeBlobBuilder.prototype | 
				
			|||
      , FB_proto = FakeBlob.prototype | 
				
			|||
      , FileReaderSync = view.FileReaderSync | 
				
			|||
      , FileException = function (type) { | 
				
			|||
        this.code = this[this.name = type]; | 
				
			|||
      } | 
				
			|||
      , file_ex_codes = ( | 
				
			|||
        "NOT_FOUND_ERR SECURITY_ERR ABORT_ERR NOT_READABLE_ERR ENCODING_ERR " | 
				
			|||
        + "NO_MODIFICATION_ALLOWED_ERR INVALID_STATE_ERR SYNTAX_ERR" | 
				
			|||
      ).split(" ") | 
				
			|||
      , file_ex_code = file_ex_codes.length | 
				
			|||
      , real_URL = view.URL || view.webkitURL || view | 
				
			|||
      , real_create_object_URL = real_URL.createObjectURL | 
				
			|||
      , real_revoke_object_URL = real_URL.revokeObjectURL | 
				
			|||
      , URL = real_URL | 
				
			|||
      , btoa = view.btoa | 
				
			|||
      , atob = view.atob | 
				
			|||
 | 
				
			|||
      , ArrayBuffer = view.ArrayBuffer | 
				
			|||
      , Uint8Array = view.Uint8Array | 
				
			|||
 | 
				
			|||
      , origin = /^[\w-]+:\/*\[?[\w\.:-]+\]?(?::[0-9]+)?/ | 
				
			|||
    ; | 
				
			|||
    FakeBlob.fake = FB_proto.fake = true; | 
				
			|||
    while (file_ex_code--) { | 
				
			|||
      FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1; | 
				
			|||
    } | 
				
			|||
    // Polyfill URL
 | 
				
			|||
    if (!real_URL.createObjectURL) { | 
				
			|||
      URL = view.URL = function (uri) { | 
				
			|||
        var | 
				
			|||
          uri_info = document.createElementNS("http://www.w3.org/1999/xhtml", "a") | 
				
			|||
          , uri_origin | 
				
			|||
        ; | 
				
			|||
        uri_info.href = uri; | 
				
			|||
        if (!("origin" in uri_info)) { | 
				
			|||
          if (uri_info.protocol.toLowerCase() === "data:") { | 
				
			|||
            uri_info.origin = null; | 
				
			|||
          } else { | 
				
			|||
            uri_origin = uri.match(origin); | 
				
			|||
            uri_info.origin = uri_origin && uri_origin[1]; | 
				
			|||
          } | 
				
			|||
        } | 
				
			|||
        return uri_info; | 
				
			|||
      }; | 
				
			|||
    } | 
				
			|||
    URL.createObjectURL = function (blob) { | 
				
			|||
      var | 
				
			|||
        type = blob.type | 
				
			|||
        , data_URI_header | 
				
			|||
      ; | 
				
			|||
      if (type === null) { | 
				
			|||
        type = "application/octet-stream"; | 
				
			|||
      } | 
				
			|||
      if (blob instanceof FakeBlob) { | 
				
			|||
        data_URI_header = "data:" + type; | 
				
			|||
        if (blob.encoding === "base64") { | 
				
			|||
          return data_URI_header + ";base64," + blob.data; | 
				
			|||
        } else if (blob.encoding === "URI") { | 
				
			|||
          return data_URI_header + "," + decodeURIComponent(blob.data); | 
				
			|||
        } | 
				
			|||
        if (btoa) { | 
				
			|||
          return data_URI_header + ";base64," + btoa(blob.data); | 
				
			|||
        } else { | 
				
			|||
          return data_URI_header + "," + encodeURIComponent(blob.data); | 
				
			|||
        } | 
				
			|||
      } else if (real_create_object_URL) { | 
				
			|||
        return real_create_object_URL.call(real_URL, blob); | 
				
			|||
      } | 
				
			|||
    }; | 
				
			|||
    URL.revokeObjectURL = function (object_URL) { | 
				
			|||
      if (object_URL.substring(0, 5) !== "data:" && real_revoke_object_URL) { | 
				
			|||
        real_revoke_object_URL.call(real_URL, object_URL); | 
				
			|||
      } | 
				
			|||
    }; | 
				
			|||
    FBB_proto.append = function (data/*, endings*/) { | 
				
			|||
      var bb = this.data; | 
				
			|||
      // decode data to a binary string
 | 
				
			|||
      if (Uint8Array && (data instanceof ArrayBuffer || data instanceof Uint8Array)) { | 
				
			|||
        var | 
				
			|||
          str = "" | 
				
			|||
          , buf = new Uint8Array(data) | 
				
			|||
          , i = 0 | 
				
			|||
          , buf_len = buf.length | 
				
			|||
        ; | 
				
			|||
        for (; i < buf_len; i++) { | 
				
			|||
          str += String.fromCharCode(buf[i]); | 
				
			|||
        } | 
				
			|||
        bb.push(str); | 
				
			|||
      } else if (get_class(data) === "Blob" || get_class(data) === "File") { | 
				
			|||
        if (FileReaderSync) { | 
				
			|||
          var fr = new FileReaderSync; | 
				
			|||
          bb.push(fr.readAsBinaryString(data)); | 
				
			|||
        } else { | 
				
			|||
          // async FileReader won't work as BlobBuilder is sync
 | 
				
			|||
          throw new FileException("NOT_READABLE_ERR"); | 
				
			|||
        } | 
				
			|||
      } else if (data instanceof FakeBlob) { | 
				
			|||
        if (data.encoding === "base64" && atob) { | 
				
			|||
          bb.push(atob(data.data)); | 
				
			|||
        } else if (data.encoding === "URI") { | 
				
			|||
          bb.push(decodeURIComponent(data.data)); | 
				
			|||
        } else if (data.encoding === "raw") { | 
				
			|||
          bb.push(data.data); | 
				
			|||
        } | 
				
			|||
      } else { | 
				
			|||
        if (typeof data !== "string") { | 
				
			|||
          data += ""; // convert unsupported types to strings
 | 
				
			|||
        } | 
				
			|||
        // decode UTF-16 to binary string
 | 
				
			|||
        bb.push(unescape(encodeURIComponent(data))); | 
				
			|||
      } | 
				
			|||
    }; | 
				
			|||
    FBB_proto.getBlob = function (type) { | 
				
			|||
      if (!arguments.length) { | 
				
			|||
        type = null; | 
				
			|||
      } | 
				
			|||
      return new FakeBlob(this.data.join(""), type, "raw"); | 
				
			|||
    }; | 
				
			|||
    FBB_proto.toString = function () { | 
				
			|||
      return "[object BlobBuilder]"; | 
				
			|||
    }; | 
				
			|||
    FB_proto.slice = function (start, end, type) { | 
				
			|||
      var args = arguments.length; | 
				
			|||
      if (args < 3) { | 
				
			|||
        type = null; | 
				
			|||
      } | 
				
			|||
      return new FakeBlob( | 
				
			|||
        this.data.slice(start, args > 1 ? end : this.data.length) | 
				
			|||
        , type | 
				
			|||
        , this.encoding | 
				
			|||
      ); | 
				
			|||
    }; | 
				
			|||
    FB_proto.toString = function () { | 
				
			|||
      return "[object Blob]"; | 
				
			|||
    }; | 
				
			|||
    FB_proto.close = function () { | 
				
			|||
      this.size = 0; | 
				
			|||
      delete this.data; | 
				
			|||
    }; | 
				
			|||
    return FakeBlobBuilder; | 
				
			|||
  }(view)); | 
				
			|||
 | 
				
			|||
  view.Blob = function (blobParts, options) { | 
				
			|||
    var type = options ? (options.type || "") : ""; | 
				
			|||
    var builder = new BlobBuilder(); | 
				
			|||
    if (blobParts) { | 
				
			|||
      for (var i = 0, len = blobParts.length; i < len; i++) { | 
				
			|||
        if (Uint8Array && blobParts[i] instanceof Uint8Array) { | 
				
			|||
          builder.append(blobParts[i].buffer); | 
				
			|||
        } | 
				
			|||
        else { | 
				
			|||
          builder.append(blobParts[i]); | 
				
			|||
        } | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
    var blob = builder.getBlob(type); | 
				
			|||
    if (!blob.slice && blob.webkitSlice) { | 
				
			|||
      blob.slice = blob.webkitSlice; | 
				
			|||
    } | 
				
			|||
    return blob; | 
				
			|||
  }; | 
				
			|||
 | 
				
			|||
  var getPrototypeOf = Object.getPrototypeOf || function (object) { | 
				
			|||
    return object.__proto__; | 
				
			|||
  }; | 
				
			|||
  view.Blob.prototype = getPrototypeOf(new view.Blob()); | 
				
			|||
}( | 
				
			|||
  typeof self !== "undefined" && self | 
				
			|||
  || typeof window !== "undefined" && window | 
				
			|||
  || this | 
				
			|||
)); | 
				
			|||
 | 
				
			|||
@ -0,0 +1,158 @@ | 
				
			|||
/* eslint-disable */ | 
				
			|||
require('script-loader!file-saver'); | 
				
			|||
// 注意,更改vendor目录此处导入需修改!!!!!!!!!!!!!!!!!!!!
 | 
				
			|||
/* eslint-disable */ | 
				
			|||
require('script-loader!@/vendor/Blob'); | 
				
			|||
/* eslint-disable */ | 
				
			|||
require('script-loader!xlsx/dist/xlsx.core.min'); | 
				
			|||
 | 
				
			|||
function generateArray(table) { | 
				
			|||
  var out = []; | 
				
			|||
  var rows = table.querySelectorAll('tr'); | 
				
			|||
  var ranges = []; | 
				
			|||
  for (var R = 0; R < rows.length; ++R) { | 
				
			|||
    var outRow = []; | 
				
			|||
    var row = rows[R]; | 
				
			|||
    var columns = row.querySelectorAll('td'); | 
				
			|||
    for (var C = 0; C < columns.length; ++C) { | 
				
			|||
      var cell = columns[C]; | 
				
			|||
      var colspan = cell.getAttribute('colspan'); | 
				
			|||
      var rowspan = cell.getAttribute('rowspan'); | 
				
			|||
      var cellValue = cell.innerText; | 
				
			|||
      if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue; | 
				
			|||
 | 
				
			|||
      //Skip ranges
 | 
				
			|||
      ranges.forEach(function (range) { | 
				
			|||
        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) { | 
				
			|||
          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null); | 
				
			|||
        } | 
				
			|||
      }); | 
				
			|||
 | 
				
			|||
      //Handle Row Span
 | 
				
			|||
      if (rowspan || colspan) { | 
				
			|||
        rowspan = rowspan || 1; | 
				
			|||
        colspan = colspan || 1; | 
				
			|||
        ranges.push({s: {r: R, c: outRow.length}, e: {r: R + rowspan - 1, c: outRow.length + colspan - 1}}); | 
				
			|||
      } | 
				
			|||
      ; | 
				
			|||
 | 
				
			|||
      //Handle Value
 | 
				
			|||
      outRow.push(cellValue !== "" ? cellValue : null); | 
				
			|||
 | 
				
			|||
      //Handle Colspan
 | 
				
			|||
      if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null); | 
				
			|||
    } | 
				
			|||
    out.push(outRow); | 
				
			|||
  } | 
				
			|||
  return [out, ranges]; | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
function datenum(v, date1904) { | 
				
			|||
  if (date1904) v += 1462; | 
				
			|||
  var epoch = Date.parse(v); | 
				
			|||
  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000); | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function sheet_from_array_of_arrays(data, opts) { | 
				
			|||
  var ws = {}; | 
				
			|||
  var range = {s: {c: 10000000, r: 10000000}, e: {c: 0, r: 0}}; | 
				
			|||
  for (var R = 0; R != data.length; ++R) { | 
				
			|||
    for (var C = 0; C != data[R].length; ++C) { | 
				
			|||
      if (range.s.r > R) range.s.r = R; | 
				
			|||
      if (range.s.c > C) range.s.c = C; | 
				
			|||
      if (range.e.r < R) range.e.r = R; | 
				
			|||
      if (range.e.c < C) range.e.c = C; | 
				
			|||
      var cell = {v: data[R][C]}; | 
				
			|||
      if (cell.v == null) continue; | 
				
			|||
      var cell_ref = XLSX.utils.encode_cell({c: C, r: R}); | 
				
			|||
 | 
				
			|||
      if (typeof cell.v === 'number') cell.t = 'n'; | 
				
			|||
      else if (typeof cell.v === 'boolean') cell.t = 'b'; | 
				
			|||
      else if (cell.v instanceof Date) { | 
				
			|||
        cell.t = 'n'; | 
				
			|||
        cell.z = XLSX.SSF._table[14]; | 
				
			|||
        cell.v = datenum(cell.v); | 
				
			|||
      } | 
				
			|||
      else cell.t = 's'; | 
				
			|||
 | 
				
			|||
      ws[cell_ref] = cell; | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range); | 
				
			|||
  return ws; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function Workbook() { | 
				
			|||
  if (!(this instanceof Workbook)) return new Workbook(); | 
				
			|||
  this.SheetNames = []; | 
				
			|||
  this.Sheets = {}; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function s2ab(s) { | 
				
			|||
  var buf = new ArrayBuffer(s.length); | 
				
			|||
  var view = new Uint8Array(buf); | 
				
			|||
  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; | 
				
			|||
  return buf; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
export function export_table_to_excel(id) { | 
				
			|||
  var theTable = document.getElementById(id); | 
				
			|||
  console.log('a') | 
				
			|||
  var oo = generateArray(theTable); | 
				
			|||
  var ranges = oo[1]; | 
				
			|||
 | 
				
			|||
  /* original data */ | 
				
			|||
  var data = oo[0]; | 
				
			|||
  var ws_name = "SheetJS"; | 
				
			|||
  console.log(data); | 
				
			|||
 | 
				
			|||
  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); | 
				
			|||
 | 
				
			|||
  /* add ranges to worksheet */ | 
				
			|||
  // ws['!cols'] = ['apple', 'banan'];
 | 
				
			|||
  ws['!merges'] = ranges; | 
				
			|||
 | 
				
			|||
  /* add worksheet to workbook */ | 
				
			|||
  wb.SheetNames.push(ws_name); | 
				
			|||
  wb.Sheets[ws_name] = ws; | 
				
			|||
 | 
				
			|||
  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); | 
				
			|||
 | 
				
			|||
  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), "test.xlsx") | 
				
			|||
} | 
				
			|||
 | 
				
			|||
function formatJson(jsonData) { | 
				
			|||
  console.log(jsonData) | 
				
			|||
} | 
				
			|||
 | 
				
			|||
export function export_json_to_excel(th1, th, jsonData, defaultTitle) { | 
				
			|||
 | 
				
			|||
  /* original data */ | 
				
			|||
 | 
				
			|||
  var data = jsonData; | 
				
			|||
  // 第二行表头
 | 
				
			|||
  data.unshift(th); | 
				
			|||
  // 第一行表头
 | 
				
			|||
  data.unshift(th1) | 
				
			|||
  // 这个地方定义sheet名,可更改
 | 
				
			|||
  var ws_name = "SheetJS"; | 
				
			|||
 | 
				
			|||
  var wb = new Workbook(), ws = sheet_from_array_of_arrays(data); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
  /* add worksheet to workbook */ | 
				
			|||
  wb.SheetNames.push(ws_name); | 
				
			|||
  wb.Sheets[ws_name] = ws; | 
				
			|||
   | 
				
			|||
  // 设置合并单元格,注意预留空值,否则合并后值会被覆盖
 | 
				
			|||
  ws['!merges'] = [ | 
				
			|||
    // 设置A3-A9的单元格合并
 | 
				
			|||
    {s: {r: 0, c: 0}, e: {r: 0, c: 11}} | 
				
			|||
  ]; | 
				
			|||
 | 
				
			|||
  var wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: false, type: 'binary'}); | 
				
			|||
  var title = defaultTitle || '列表' | 
				
			|||
  saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), title + ".xlsx") | 
				
			|||
} | 
				
			|||
 | 
				
			|||
 | 
				
			|||
@ -0,0 +1,433 @@ | 
				
			|||
<template> | 
				
			|||
  <div class="registerList"> | 
				
			|||
    <el-card shadow="never" | 
				
			|||
             class="aui-card--fill"> | 
				
			|||
      <div class="mod-demo__demo}"> | 
				
			|||
        <el-form :inline="true" | 
				
			|||
                 :model="tableParams" | 
				
			|||
                 @keyup.enter.native="loadData()"> | 
				
			|||
 | 
				
			|||
          <div> | 
				
			|||
            <el-form-item label="选择客户" | 
				
			|||
                          :label-width="labelWidth"> | 
				
			|||
              <el-select v-model="tableParams.customerId" | 
				
			|||
                         placeholder="客户" | 
				
			|||
                         clearable> | 
				
			|||
                <el-option v-for="(item,index) in customerList" | 
				
			|||
                           :key="index" | 
				
			|||
                           @click.native="handelChangeCustomer(index)" | 
				
			|||
                           :label="item.customerName" | 
				
			|||
                           :value="item.customerId"> | 
				
			|||
                </el-option> | 
				
			|||
              </el-select> | 
				
			|||
            </el-form-item> | 
				
			|||
            <el-form-item label="所属组织" | 
				
			|||
                          :label-width="labelWidth"> | 
				
			|||
              <el-cascader v-model="tableParams.agencyId" | 
				
			|||
                           style="width:480px" | 
				
			|||
                           :options="options" | 
				
			|||
                           :props="optionProps" | 
				
			|||
                           clearable></el-cascader> | 
				
			|||
            </el-form-item> | 
				
			|||
 | 
				
			|||
            <div> | 
				
			|||
              <el-form-item label="统计类型" | 
				
			|||
                            :label-width="labelWidth"> | 
				
			|||
                <el-radio v-model="tableParams.type" | 
				
			|||
                          label="end">截止累计值</el-radio> | 
				
			|||
                <el-radio v-model="tableParams.type" | 
				
			|||
                          label="Interval">区间新增值</el-radio> | 
				
			|||
 | 
				
			|||
                <el-date-picker v-if="tableParams.type==='Interval'" | 
				
			|||
                                v-model="timeArray" | 
				
			|||
                                type="daterange" | 
				
			|||
                                range-separator="至" | 
				
			|||
                                @change="handleTimeChange" | 
				
			|||
                                format="yyyy-MM-dd" | 
				
			|||
                                :picker-options="pickerOptions" | 
				
			|||
                                start-placeholder="开始日期" | 
				
			|||
                                end-placeholder="结束日期"> | 
				
			|||
                </el-date-picker> | 
				
			|||
 | 
				
			|||
                <el-date-picker v-if="tableParams.type==='end'" | 
				
			|||
                                v-model="endTimeModel" | 
				
			|||
                                @change="handleEndTimeChange" | 
				
			|||
                                :picker-options="pickerOptions" | 
				
			|||
                                type="date" | 
				
			|||
                                placeholder="选择日期"> | 
				
			|||
                </el-date-picker> | 
				
			|||
              </el-form-item> | 
				
			|||
              <el-form-item style="margin-left:10px"> | 
				
			|||
                <el-button @click="loadData()" | 
				
			|||
                           type="primary">查询</el-button> | 
				
			|||
              </el-form-item> | 
				
			|||
              <el-form-item style="margin-left:10px"> | 
				
			|||
                <el-button @click="loadOutTableData()" | 
				
			|||
                           type="primary">导出</el-button> | 
				
			|||
              </el-form-item> | 
				
			|||
            </div> | 
				
			|||
 | 
				
			|||
          </div> | 
				
			|||
        </el-form> | 
				
			|||
 | 
				
			|||
        <c-table ref="table" | 
				
			|||
                 :url="tableUrl" | 
				
			|||
                 :params="tableParams" | 
				
			|||
                 keyword="operStaticList" | 
				
			|||
                 :operations="operations" | 
				
			|||
                 :tableHeight="tableHeight"> | 
				
			|||
        </c-table> | 
				
			|||
      </div> | 
				
			|||
 | 
				
			|||
    </el-card> | 
				
			|||
 | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import CTable from '@c/CTable' | 
				
			|||
import util from '@js/util.js'; | 
				
			|||
 | 
				
			|||
import { mapGetters } from 'vuex' | 
				
			|||
import { Loading } from 'element-ui' // 引入Loading服务 | 
				
			|||
import { requestPost } from '@/js/dai/request' | 
				
			|||
// import { export_json_to_excel } from '@/vendor/Export2Excel' | 
				
			|||
 | 
				
			|||
let loading // 加载动画 | 
				
			|||
const customerId = localStorage.getItem('customerId') | 
				
			|||
export default { | 
				
			|||
  data () { | 
				
			|||
    return { | 
				
			|||
 | 
				
			|||
      tableData1: [ | 
				
			|||
        { 'name': 'lgk', 'sex': '男', 'username': 'liqing' }, | 
				
			|||
        { 'name': 'll', 'sex': '女', 'username': 'yaoyao' } | 
				
			|||
      ], | 
				
			|||
 | 
				
			|||
      tableData: [], | 
				
			|||
 | 
				
			|||
 | 
				
			|||
      downloadLoading: false, | 
				
			|||
 | 
				
			|||
      //查询条件标题宽度 | 
				
			|||
      labelWidth: '70px', | 
				
			|||
 | 
				
			|||
      options: [ | 
				
			|||
      ], | 
				
			|||
      customerList: [], | 
				
			|||
 | 
				
			|||
      optionProps: { | 
				
			|||
        value: 'agencyId', | 
				
			|||
        label: 'agencyName', | 
				
			|||
        children: 'subAgencyList', | 
				
			|||
        checkStrictly: true | 
				
			|||
      }, | 
				
			|||
 | 
				
			|||
      pickerOptions: { //控制时间范围 | 
				
			|||
        disabledDate (time) { | 
				
			|||
          return time.getTime() > (Date.now() - (24 * 60 * 60 * 1000)) | 
				
			|||
        } | 
				
			|||
      }, | 
				
			|||
 | 
				
			|||
      // 列表相关 | 
				
			|||
      // tableUrl: '/data/aggregator/datastats/operatedata', | 
				
			|||
      tableUrl: 'http://yapi.elinkservice.cn/mock/102/data/aggregator/datastats/operatedata', | 
				
			|||
      tableParams: { | 
				
			|||
        customerId: '', //客户Id	 | 
				
			|||
        agencyId: '', //所选组织Id 	 | 
				
			|||
        type: 'end', //区间:Interval  截止:end	 | 
				
			|||
        startTime: '', //开始时间【yyyymmdd】	 | 
				
			|||
        endTime: '', //结束时间【yyyymmdd】	 | 
				
			|||
        isPage: true | 
				
			|||
      }, | 
				
			|||
      timeArray: ['', ''], | 
				
			|||
      customerName: '', | 
				
			|||
      agencyName: '', | 
				
			|||
      startTimeShow: '',//导出表格标题处显示的内容 	 | 
				
			|||
      endTimeShow: '', //导出表格标题处显示的内容 	 | 
				
			|||
      endTimeModel: new Date() - 60 * 60 * 24 * 2, | 
				
			|||
 | 
				
			|||
      operations: [ | 
				
			|||
      ], | 
				
			|||
 | 
				
			|||
    } | 
				
			|||
  }, | 
				
			|||
  components: { | 
				
			|||
    CTable | 
				
			|||
  }, | 
				
			|||
  activated () { | 
				
			|||
    this.$nextTick(() => { | 
				
			|||
      this.$refs.table.doLayout() // 解决表格错位 | 
				
			|||
    }) | 
				
			|||
  }, | 
				
			|||
  mounted () { | 
				
			|||
    this.initData() | 
				
			|||
    console.log(customerId) | 
				
			|||
  }, | 
				
			|||
  computed: { | 
				
			|||
    tableHeight () { | 
				
			|||
      return this.clientHeight - 60 - 80 - 80 - 100 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    ...mapGetters(['clientHeight', 'env']) | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    async initData () { | 
				
			|||
      this.startLoading() | 
				
			|||
      this.initDate() | 
				
			|||
      await this.loadCustomer()//获取客户列表 | 
				
			|||
 | 
				
			|||
      this.endLoading() | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    initDate () { | 
				
			|||
      //设置默认结束日期为前一天 | 
				
			|||
      const date = new Date() | 
				
			|||
      const month = date.getMonth() + 1 > 9 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1) | 
				
			|||
      const day = date.getDate() - 1 > 9 ? (date.getDate() - 1) : '0' + (date.getDate() - 1) | 
				
			|||
      const yesterday = date.getFullYear() + '-' + month + '-' + day | 
				
			|||
      this.timeArray = ['', yesterday] | 
				
			|||
      this.endTimeModel = yesterday | 
				
			|||
 | 
				
			|||
      let yesterdayArray = yesterday.split('-') | 
				
			|||
 | 
				
			|||
      this.tableParams.endTime = yesterdayArray[0] + yesterdayArray[1] + yesterdayArray[2] | 
				
			|||
 | 
				
			|||
      this.endTimeShow = yesterdayArray[0] + '年' + yesterdayArray[1] + '月' + yesterdayArray[2] + '日' | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    loadData () { | 
				
			|||
      if (this.validate()) { | 
				
			|||
        this.tableParams.isPage = true | 
				
			|||
        this.$refs.table.loadData() | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    //获取客户列表 | 
				
			|||
    async loadCustomer (row) { | 
				
			|||
      const url = ' https://epmet-cloud.elinkservice.cn/api/third/pacustomer/registerbyauth' | 
				
			|||
      const params = { | 
				
			|||
        //  workAuth: 1, | 
				
			|||
        // resiAuth: 1, | 
				
			|||
        source: this.env, | 
				
			|||
        initState: 1 | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      const { data, code, msg } = await requestPost(url, params) | 
				
			|||
      if (code === 0) { | 
				
			|||
        this.customerList = data | 
				
			|||
 | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg) | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handelChangeCustomer (index) { | 
				
			|||
      this.customerName = this.customerList[index].customerName | 
				
			|||
      this.getAgencylist()//获取组织级别 | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleEndTimeChange (item) { | 
				
			|||
      const endTimeArray = util.dateFormatter(item, 'date').split('-') | 
				
			|||
      this.tableParams.endTime = endTimeArray[0] + endTimeArray[1] + endTimeArray[2] | 
				
			|||
      this.endTime = endTimeArray[0] + '年' + endTimeArray[1] + '月' + endTimeArray[2] + '日' | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleTimeChange (time) { | 
				
			|||
      if (time) { | 
				
			|||
        const startTimeArray = util.dateFormatter(time[0], 'date').split('-') | 
				
			|||
        const endTimeArray = util.dateFormatter(time[1], 'date').split('-') | 
				
			|||
 | 
				
			|||
        this.tableParams.startTime = startTimeArray[0] + startTimeArray[1] + startTimeArray[2] | 
				
			|||
        this.tableParams.endTime = endTimeArray[0] + endTimeArray[1] + endTimeArray[2] | 
				
			|||
 | 
				
			|||
        this.startTimeShow = startTimeArray[0] + '年' + startTimeArray[1] + '月' + startTimeArray[2] + '日' | 
				
			|||
        this.endTimeShow = endTimeArray[0] + '年' + endTimeArray[1] + '月' + endTimeArray[2] + '日' | 
				
			|||
      } else { | 
				
			|||
        this.tableParams.startTime = '' | 
				
			|||
        this.tableParams.endTime = '' | 
				
			|||
        this.startTimeShow = '' | 
				
			|||
        this.endTimeShow = '' | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    async getAgencylist () { | 
				
			|||
      const url = '/gov/org/customeragency/agencylist' | 
				
			|||
      // const url = 'http://yapi.elinkservice.cn/mock/102/gov/org/agency/agencylist' | 
				
			|||
 | 
				
			|||
      const params = {} | 
				
			|||
      const { data, code, msg } = await requestPost(url, params) | 
				
			|||
      if (code === 0) { | 
				
			|||
 | 
				
			|||
        this.options = [] | 
				
			|||
        if (data) { | 
				
			|||
          this.options.push(data) | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
      } else { | 
				
			|||
        this.$message.error(msg) | 
				
			|||
      } | 
				
			|||
    }, | 
				
			|||
    validate () { | 
				
			|||
      if (!this.tableParams.customerId) { | 
				
			|||
        this.$message.info("请选择客户和组织") | 
				
			|||
        return false | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      if (this.tableParams.type === 'Interval' && (!this.tableParams.endTime || !this.tableParams.startTime)) { | 
				
			|||
        this.$message.info("请选择起止日期") | 
				
			|||
        return false | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      return true | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    //导出表格 | 
				
			|||
    async loadOutTableData () { | 
				
			|||
      // if (!this.validate()) { | 
				
			|||
      //   return false | 
				
			|||
      // } | 
				
			|||
      let title = this.agencyName | 
				
			|||
 | 
				
			|||
      if (this.tableParams.type === 'Interval') { | 
				
			|||
        title = title + + this.startTimeShow + '-' + this.endTimeShow + '区间增长值' | 
				
			|||
      } else { | 
				
			|||
        title = title + '截止至' + this.endTimeShow + '累计值' | 
				
			|||
      } | 
				
			|||
      console.log(title) | 
				
			|||
 | 
				
			|||
      const url = "/data/aggregator/datastats/operateexport" | 
				
			|||
      // const url = "http://yapi.elinkservice.cn/mock/102/data/aggregator/datastats/operateexport" | 
				
			|||
      this.tableParams.isPage = false | 
				
			|||
      this.tableParams.agencyId = '30705f91f1295ae77d372b868596a5e7' | 
				
			|||
      // this.tableParams = { | 
				
			|||
      //   "customerId": "613cc61a6b8ce4c70d21bd413dac72cc", | 
				
			|||
      //   "agencyId": "30705f91f1295ae77d372b868596a5e7", | 
				
			|||
      //   "type": "Interval", | 
				
			|||
      //   "isPage": true, | 
				
			|||
      //   "endTime": "20210909", | 
				
			|||
      //   "startTime": "20210901" | 
				
			|||
      // } | 
				
			|||
 | 
				
			|||
      console.log(this.tableParams) | 
				
			|||
      app.ajax.exportFilePost( | 
				
			|||
        url, | 
				
			|||
        this.tableParams, | 
				
			|||
        (data, rspMsg) => { | 
				
			|||
 | 
				
			|||
          this.download(data, title + '.xls') | 
				
			|||
        }, | 
				
			|||
        (rspMsg, data) => { | 
				
			|||
          this.$message.error(rspMsg); | 
				
			|||
        } | 
				
			|||
      ); | 
				
			|||
 | 
				
			|||
 | 
				
			|||
      // const { data, code, msg } = await requestPost(url, this.tableParams) | 
				
			|||
      // if (code === 0) { | 
				
			|||
      //   this.tableData = data | 
				
			|||
      //   this.download(data, title + '.xls') | 
				
			|||
      //   // this.handleDownload() | 
				
			|||
 | 
				
			|||
      // } else { | 
				
			|||
      //   this.$message.error(msg) | 
				
			|||
      // } | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    // 下载文件 | 
				
			|||
    download (data, fileName) { | 
				
			|||
      if (!data) { | 
				
			|||
        return | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
      var csvData = new Blob([data]) | 
				
			|||
 | 
				
			|||
      if (window.navigator && window.navigator.msSaveOrOpenBlob) { | 
				
			|||
        window.navigator.msSaveOrOpenBlob(csvData, fileName); | 
				
			|||
      } | 
				
			|||
      // for Non-IE (chrome, firefox etc.) | 
				
			|||
      else { | 
				
			|||
        var a = document.createElement('a'); | 
				
			|||
        document.body.appendChild(a); | 
				
			|||
        a.style = 'display: none'; | 
				
			|||
        var url = window.URL.createObjectURL(csvData); | 
				
			|||
        a.href = url; | 
				
			|||
        a.download = fileName; | 
				
			|||
        a.click(); | 
				
			|||
        a.remove(); | 
				
			|||
        window.URL.revokeObjectURL(url); | 
				
			|||
      } | 
				
			|||
 | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    handleDownload () { | 
				
			|||
 | 
				
			|||
      this.downloadLoading = true | 
				
			|||
      require.ensure([], () => { | 
				
			|||
 | 
				
			|||
        const multiHeader = [title, '', '', '', '', '', '', '', '', '', ''] | 
				
			|||
        const tHeader = ['组织', '用户数', '居民数', '党员数', '小组数', '话题数', '议题数', '项目数', '结案项目数', '巡查人数', '巡查次数', '巡查时长'] | 
				
			|||
        const filterVal = ['orgName', 'userCount', 'residentCount', 'partyMemberCount', 'groupCount', 'topicCount', 'issueCount', 'projectCount', 'closedProjectCount', 'patrolPeopleCount', 'patrolCount', 'patrolDuration'] | 
				
			|||
        const list = this.tableData | 
				
			|||
        const data = this.formatJson(filterVal, list) | 
				
			|||
        export_json_to_excel(multiHeader, tHeader, data, title) | 
				
			|||
        this.downloadLoading = false | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    formatJson (filterVal, jsonData) { | 
				
			|||
      return jsonData.map(v => filterVal.map(j => v[j])) | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    // 截取value值 | 
				
			|||
    cutValue (target, name) { | 
				
			|||
      let arr = [] | 
				
			|||
      for (let i = 0; i < target.length; i++) { | 
				
			|||
        arr.push(target[i][name]) | 
				
			|||
      } | 
				
			|||
      return arr | 
				
			|||
    }, | 
				
			|||
 | 
				
			|||
    // 开启加载动画 | 
				
			|||
    startLoading () { | 
				
			|||
      loading = Loading.service({ | 
				
			|||
        lock: true, // 是否锁定 | 
				
			|||
        text: '正在加载……', // 加载中需要显示的文字 | 
				
			|||
        background: 'rgba(0,0,0,.7)' // 背景颜色 | 
				
			|||
      }) | 
				
			|||
    }, | 
				
			|||
    // 结束加载动画 | 
				
			|||
    endLoading () { | 
				
			|||
      // clearTimeout(timer); | 
				
			|||
      if (loading) { | 
				
			|||
        loading.close() | 
				
			|||
      } | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
<style lang="css" scoped> | 
				
			|||
.myNote { | 
				
			|||
  display: -webkit-box; | 
				
			|||
  text-overflow: ellipsis; | 
				
			|||
  overflow: hidden; | 
				
			|||
  -webkit-line-clamp: 3; | 
				
			|||
  -webkit-box-orient: vertical; | 
				
			|||
} | 
				
			|||
/* .register .el-table .el-table__header-wrapper { | 
				
			|||
  position: absolute; | 
				
			|||
  top: 0; | 
				
			|||
  left: 0; | 
				
			|||
}*/ | 
				
			|||
/* | 
				
			|||
.register .el-table .el-table__fixed-body-wrapper { | 
				
			|||
  height: calc(100% - 44px); | 
				
			|||
  margin-top: 44px; | 
				
			|||
  overflow-y: auto !important; | 
				
			|||
} */ | 
				
			|||
</style> | 
				
			|||
 | 
				
			|||
					Loading…
					
					
				
		Reference in new issue