@ -1,11 +1,13 @@
|
||||
# 页面标题 |
||||
VUE_APP_TITLE = 若依管理系统 |
||||
VUE_APP_TITLE = 铭汉能耗监测控制系统 |
||||
|
||||
# 开发环境配置 |
||||
ENV = 'development' |
||||
|
||||
# 若依管理系统/开发环境 |
||||
VUE_APP_BASE_API = '/dev-api' |
||||
# 开发环境 |
||||
# VUE_APP_BASE_API = '/dev-api' |
||||
# 后台 |
||||
VUE_APP_BASE_API = 'http://192.168.1.222:8080' |
||||
|
||||
# 路由懒加载 |
||||
VUE_CLI_BABEL_TRANSPILE_MODULES = true |
||||
|
@ -1,8 +1,8 @@
|
||||
# 页面标题 |
||||
VUE_APP_TITLE = 若依管理系统 |
||||
VUE_APP_TITLE = 铭汉能耗监测控制系统 |
||||
|
||||
# 生产环境配置 |
||||
ENV = 'production' |
||||
|
||||
# 若依管理系统/生产环境 |
||||
# 生产环境 |
||||
VUE_APP_BASE_API = '/prod-api' |
||||
|
@ -0,0 +1,140 @@
|
||||
/*! @source http://purl.eligrey.com/github/Blob.js/blob/master/Blob.js */ |
||||
(function (view) { |
||||
view.URL = view.URL || view.webkitURL; |
||||
if (view.Blob && view.URL) { |
||||
try { |
||||
new Blob; |
||||
return |
||||
} catch (e) { |
||||
} |
||||
} |
||||
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; |
||||
FakeBlob.fake = FB_proto.fake = true; |
||||
while (file_ex_code--) { |
||||
FileException.prototype[file_ex_codes[file_ex_code]] = file_ex_code + 1 |
||||
} |
||||
if (!real_URL.createObjectURL) { |
||||
URL = view.URL = {} |
||||
} |
||||
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) { |
||||
var bb = this.data; |
||||
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 { |
||||
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 += "" |
||||
} |
||||
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 = this.data.length = 0 |
||||
}; |
||||
return FakeBlobBuilder |
||||
}(view)); |
||||
view.Blob = function Blob(blobParts, options) { |
||||
var type = options ? (options.type || "") : ""; |
||||
var builder = new BlobBuilder(); |
||||
if (blobParts) { |
||||
for (var i = 0, len = blobParts.length; i < len; i++) { |
||||
builder.append(blobParts[i]) |
||||
} |
||||
} |
||||
return builder.getBlob(type) |
||||
} |
||||
}(typeof self !== "undefined" && self || typeof window !== "undefined" && window || this.content || this)); |
||||
|
||||
|
@ -0,0 +1,236 @@
|
||||
// 引入file插件
|
||||
import FileSaver from "file-saver"; |
||||
// 引入xlsx插件
|
||||
import * as XLSX from "xlsx"; |
||||
|
||||
// 导出
|
||||
|
||||
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'; |
||||
|
||||
|
||||
|
||||
// 设置表头背景颜色为红色 无效
|
||||
if (R == 0) { |
||||
cell.s = { |
||||
fill: { |
||||
fgColor: { |
||||
rgb: 'FFFF0000' |
||||
} |
||||
} |
||||
} |
||||
} |
||||
|
||||
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); |
||||
var oo = generateArray(theTable); |
||||
var ranges = oo[1]; |
||||
|
||||
/* original data */ |
||||
var data = oo[0]; |
||||
var ws_name = "SheetJS"; |
||||
|
||||
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") |
||||
} |
||||
|
||||
export function export_json_to_excel({ |
||||
multiHeader = [], |
||||
header, |
||||
data, |
||||
filename, |
||||
merges = [], |
||||
autoWidth = true, |
||||
bookType = 'xlsx' |
||||
} = {}) { |
||||
/* original data */ |
||||
filename = filename || 'excel-list' |
||||
data = [...data] |
||||
data.unshift(header); |
||||
|
||||
for (let i = multiHeader.length - 1; i > -1; i--) { |
||||
data.unshift(multiHeader[i]) |
||||
} |
||||
|
||||
var ws_name = "SheetJS"; |
||||
var wb = new Workbook(), |
||||
ws = sheet_from_array_of_arrays(data); |
||||
|
||||
if (merges.length > 0) { |
||||
if (!ws['!merges']) ws['!merges'] = []; |
||||
merges.forEach(item => { |
||||
ws['!merges'].push(XLSX.utils.decode_range(item)) |
||||
}) |
||||
} |
||||
|
||||
if (autoWidth) { |
||||
/*设置worksheet每列的最大宽度*/ |
||||
const colWidth = data.map(row => row.map(val => { |
||||
/*先判断是否为null/undefined*/ |
||||
if (val == null) { |
||||
return { |
||||
'wch': 10 |
||||
}; |
||||
} |
||||
/*再判断是否为中文*/ |
||||
else if (val.toString().charCodeAt(0) > 255) { |
||||
return { |
||||
'wch': val.toString().length * 2 |
||||
}; |
||||
} else { |
||||
return { |
||||
'wch': val.toString().length |
||||
}; |
||||
} |
||||
})) |
||||
/*以第一行为初始值*/ |
||||
let result = colWidth[0]; |
||||
for (let i = 1; i < colWidth.length; i++) { |
||||
for (let j = 0; j < colWidth[i].length; j++) { |
||||
if (result[j]['wch'] < colWidth[i][j]['wch']) { |
||||
result[j]['wch'] = colWidth[i][j]['wch']; |
||||
} |
||||
} |
||||
} |
||||
ws['!cols'] = result; |
||||
} |
||||
|
||||
/* add worksheet to workbook */ |
||||
wb.SheetNames.push(ws_name); |
||||
wb.Sheets[ws_name] = ws; |
||||
|
||||
var wbout = XLSX.write(wb, { |
||||
bookType: bookType, |
||||
bookSST: false, |
||||
type: 'binary' |
||||
}); |
||||
saveAs(new Blob([s2ab(wbout)], { |
||||
type: "application/octet-stream" |
||||
}), `${filename}.${bookType}`); |
||||
} |
@ -0,0 +1,58 @@
|
||||
// import XLSX from 'xlsx'
|
||||
// 引入file插件
|
||||
import FileSaver from "file-saver"; |
||||
// 引入xlsx插件
|
||||
import * as XLSX from "xlsx"; |
||||
|
||||
export function readExcel(file){ |
||||
const types = file.name.split('.')[1]; |
||||
const fileType = [ |
||||
'xlsx', 'xlc', 'xlm', 'xls', 'xlt', 'xlw', 'csv' |
||||
].some(item => item == types); |
||||
if (!fileType) { |
||||
this.$message({ |
||||
type: 'waring', |
||||
message: '格式错误!请重新选择' |
||||
}) |
||||
return |
||||
} |
||||
const reader = new FileReader(); |
||||
let result = []; |
||||
reader.onload = function(e) { |
||||
const data = e.target.result; |
||||
const wb = XLSX.read(data, { |
||||
type: 'binary' |
||||
}); |
||||
wb.SheetNames.forEach((sheetName) => { |
||||
result.push({ |
||||
sheetName: sheetName, |
||||
sheet: XLSX.utils.sheet_to_json(wb.Sheets[sheetName]) |
||||
}) |
||||
}); |
||||
}; |
||||
reader.readAsBinaryString(file.raw) |
||||
console.log(result) |
||||
return result; |
||||
} |
||||
|
||||
export function file2Xce(file){ |
||||
return new Promise(function (resolve, reject) { |
||||
const reader = new FileReader() |
||||
reader.onload = function (e) { |
||||
const data = e.target.result |
||||
this.wb = XLSX.read(data, { |
||||
type: 'binary' |
||||
}) |
||||
const result = [] |
||||
this.wb.SheetNames.forEach((sheetName) => { |
||||
result.push({ |
||||
sheetName: sheetName, |
||||
sheet: XLSX.utils.sheet_to_json(this.wb.Sheets[sheetName]) |
||||
}) |
||||
}) |
||||
resolve(result) |
||||
} |
||||
reader.readAsBinaryString(file.raw) |
||||
// reader.readAsBinaryString(file) // 传统input方法
|
||||
}) |
||||
} |
@ -0,0 +1,9 @@
|
||||
@font-face { |
||||
font-family: "YouSheBiaoTiHei"; |
||||
src: url("./YouSheBiaoTiHei.ttf") format("woff") |
||||
} |
||||
@font-face { |
||||
font-family: "DIN-Bold"; |
||||
src: url("./DIN-Bold.otf") format("woff") |
||||
} |
||||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 436 B |
Before Width: | Height: | Size: 600 B After Width: | Height: | Size: 616 B |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 819 B |
After Width: | Height: | Size: 2.2 MiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 7.6 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 7.4 KiB |
After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 9.2 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 9.3 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 150 KiB |
After Width: | Height: | Size: 4.4 KiB |
After Width: | Height: | Size: 1.9 MiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 773 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 820 B |
After Width: | Height: | Size: 1.5 MiB |
After Width: | Height: | Size: 152 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 777 B |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 323 B |
After Width: | Height: | Size: 252 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 3.2 KiB |
@ -1,21 +0,0 @@
|
||||
<template> |
||||
<div> |
||||
<svg-icon icon-class="question" @click="goto" /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'RuoYiDoc', |
||||
data() { |
||||
return { |
||||
url: 'http://doc.ruoyi.vip/ruoyi-vue' |
||||
} |
||||
}, |
||||
methods: { |
||||
goto() { |
||||
window.open(this.url) |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -1,21 +0,0 @@
|
||||
<template> |
||||
<div> |
||||
<svg-icon icon-class="github" @click="goto" /> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
name: 'RuoYiGit', |
||||
data() { |
||||
return { |
||||
url: 'https://gitee.com/y_project/RuoYi-Vue' |
||||
} |
||||
}, |
||||
methods: { |
||||
goto() { |
||||
window.open(this.url) |
||||
} |
||||
} |
||||
} |
||||
</script> |
@ -1,56 +0,0 @@
|
||||
<template> |
||||
<el-dropdown trigger="click" @command="handleSetSize"> |
||||
<div> |
||||
<svg-icon class-name="size-icon" icon-class="size" /> |
||||
</div> |
||||
<el-dropdown-menu slot="dropdown"> |
||||
<el-dropdown-item v-for="item of sizeOptions" :key="item.value" :disabled="size===item.value" :command="item.value"> |
||||
{{ item.label }} |
||||
</el-dropdown-item> |
||||
</el-dropdown-menu> |
||||
</el-dropdown> |
||||
</template> |
||||
|
||||
<script> |
||||
export default { |
||||
data() { |
||||
return { |
||||
sizeOptions: [ |
||||
{ label: 'Default', value: 'default' }, |
||||
{ label: 'Medium', value: 'medium' }, |
||||
{ label: 'Small', value: 'small' }, |
||||
{ label: 'Mini', value: 'mini' } |
||||
] |
||||
} |
||||
}, |
||||
computed: { |
||||
size() { |
||||
return this.$store.getters.size |
||||
} |
||||
}, |
||||
methods: { |
||||
handleSetSize(size) { |
||||
this.$ELEMENT.size = size |
||||
this.$store.dispatch('app/setSize', size) |
||||
this.refreshView() |
||||
this.$message({ |
||||
message: 'Switch Size Success', |
||||
type: 'success' |
||||
}) |
||||
}, |
||||
refreshView() { |
||||
// In order to make the cached page re-rendered |
||||
this.$store.dispatch('tagsView/delAllCachedViews', this.$route) |
||||
|
||||
const { fullPath } = this.$route |
||||
|
||||
this.$nextTick(() => { |
||||
this.$router.replace({ |
||||
path: '/redirect' + fullPath |
||||
}) |
||||
}) |
||||
} |
||||
} |
||||
|
||||
} |
||||
</script> |