|
|
@@ -6,7 +6,7 @@ import axios from 'axios'
|
|
|
* 来源以模板为准
|
|
|
*/
|
|
|
class FormAnalyticalServer {
|
|
|
- constructor () {
|
|
|
+ constructor() {
|
|
|
console.warn('该服务需要特定数据模板')
|
|
|
this.XLSX = XLSX
|
|
|
this.X2js = new X2js()
|
|
|
@@ -18,15 +18,15 @@ class FormAnalyticalServer {
|
|
|
* @param {File} file file
|
|
|
* @return srcData
|
|
|
*/
|
|
|
- async CountdrillingParameterObj (file) {
|
|
|
+ async CountdrillingParameterObj(file) {
|
|
|
const url = window.URL.createObjectURL(file)
|
|
|
const res = await this.Axios.get(url)
|
|
|
const jsonObj = this.X2js.xml2js(res)
|
|
|
const xmlData = jsonObj.Workbook.Worksheet.Table.Row
|
|
|
- let srcData = []
|
|
|
+ const srcData = []
|
|
|
for (const i in xmlData) {
|
|
|
- let rowData = xmlData[i].Cell
|
|
|
- let arr = []
|
|
|
+ const rowData = xmlData[i].Cell
|
|
|
+ const arr = []
|
|
|
for (const j in rowData) {
|
|
|
if (rowData[j].Data && rowData[j].Data.__text) {
|
|
|
arr.push(rowData[j].Data.__text)
|
|
|
@@ -42,52 +42,52 @@ class FormAnalyticalServer {
|
|
|
* @param {File} file file
|
|
|
* @return geologicalSketchObj
|
|
|
*/
|
|
|
- async CountGeologicalSketchObj (file) {
|
|
|
+ async CountGeologicalSketchObj(file) {
|
|
|
const data = await this.XLSX2JSON(file)
|
|
|
- const mileageTime = new Date(data[0]['__EMPTY_9']).getTime() / 1000
|
|
|
- const date = new Date(data[23]['__EMPTY_5']).getTime() / 1000
|
|
|
+ const mileageTime = new Date(data[0].__EMPTY_9).getTime() / 1000
|
|
|
+ const date = new Date(data[23].__EMPTY_5).getTime() / 1000
|
|
|
const geologicalSketchObj = {
|
|
|
- tunnelName: data[0]['__EMPTY'], // 隧道
|
|
|
- workArea: data[0]['__EMPTY_2'], // 工区
|
|
|
- workFace: data[0]['__EMPTY_4'], // 工作面
|
|
|
- mileage: data[0]['__EMPTY_6'], // 断面里程
|
|
|
+ tunnelName: data[0].__EMPTY, // 隧道
|
|
|
+ workArea: data[0].__EMPTY_2, // 工区
|
|
|
+ workFace: data[0].__EMPTY_4, // 工作面
|
|
|
+ mileage: data[0].__EMPTY_6, // 断面里程
|
|
|
mileageTime: mileageTime || '', // 时间
|
|
|
- tunnelNumber: data[1]['__EMPTY'], // 项目编号
|
|
|
+ tunnelNumber: data[1].__EMPTY, // 项目编号
|
|
|
faceSize: {
|
|
|
- width: data[2]['__EMPTY_2'], // 开挖宽度
|
|
|
- height: data[2]['__EMPTY_4'], // 开挖高度
|
|
|
- faceNum: data[2]['__EMPTY_6'], // 开挖面积
|
|
|
- methods: data[2]['__EMPTY_8'], // 开挖方法
|
|
|
- support: data[2]['__EMPTY_10'] // 超前支护类型
|
|
|
+ width: data[2].__EMPTY_2, // 开挖宽度
|
|
|
+ height: data[2].__EMPTY_4, // 开挖高度
|
|
|
+ faceNum: data[2].__EMPTY_6, // 开挖面积
|
|
|
+ methods: data[2].__EMPTY_8, // 开挖方法
|
|
|
+ support: data[2].__EMPTY_10 // 超前支护类型
|
|
|
},
|
|
|
- lithology: data[3]['__EMPTY_1'], // 地层岩性
|
|
|
- choose1: data[4]['__EMPTY_1'], // 风化程度
|
|
|
- choose2: data[5]['__EMPTY_1'], // 岩石强度(MPa)
|
|
|
- choose12: data[6]['__EMPTY_1'], // 岩体结构类型
|
|
|
- choose3: data[7]['__EMPTY_1'], // 主要结构面组数
|
|
|
- choose4: data[8]['__EMPTY_1'], // 结构面平均间距(m)
|
|
|
- choose5: data[9]['__EMPTY_1'], // 结构面发育程度
|
|
|
- choose6: data[10]['__EMPTY_1'], // 裂隙宽度(mm)
|
|
|
- choose7: data[11]['__EMPTY_1'], // 裂隙充填物
|
|
|
- choose13: data[12]['__EMPTY_1'], // 结构面粗糙程度
|
|
|
- choose8: data[13]['__EMPTY_1'], // 结合程度
|
|
|
- choose9: data[14]['__EMPTY_1'], // 完整程度
|
|
|
- choose10: data[15]['__EMPTY_1'], // 地下水状态
|
|
|
- choose11: data[17]['__EMPTY_1'], // 地应力状态
|
|
|
+ lithology: data[3].__EMPTY_1, // 地层岩性
|
|
|
+ choose1: data[4].__EMPTY_1, // 风化程度
|
|
|
+ choose2: data[5].__EMPTY_1, // 岩石强度(MPa)
|
|
|
+ choose12: data[6].__EMPTY_1, // 岩体结构类型
|
|
|
+ choose3: data[7].__EMPTY_1, // 主要结构面组数
|
|
|
+ choose4: data[8].__EMPTY_1, // 结构面平均间距(m)
|
|
|
+ choose5: data[9].__EMPTY_1, // 结构面发育程度
|
|
|
+ choose6: data[10].__EMPTY_1, // 裂隙宽度(mm)
|
|
|
+ choose7: data[11].__EMPTY_1, // 裂隙充填物
|
|
|
+ choose13: data[12].__EMPTY_1, // 结构面粗糙程度
|
|
|
+ choose8: data[13].__EMPTY_1, // 结合程度
|
|
|
+ choose9: data[14].__EMPTY_1, // 完整程度
|
|
|
+ choose10: data[15].__EMPTY_1, // 地下水状态
|
|
|
+ choose11: data[17].__EMPTY_1, // 地应力状态
|
|
|
mainStructural: {
|
|
|
- text1: data[16]['__EMPTY_2'], // 主要结构面走向
|
|
|
- text2: data[16]['__EMPTY_4'], // 主要结构面倾角
|
|
|
- text3: data[16]['__EMPTY_6'], // 与洞轴线夹角
|
|
|
- text4: data[16]['__EMPTY_8'] // 备注
|
|
|
+ text1: data[16].__EMPTY_2, // 主要结构面走向
|
|
|
+ text2: data[16].__EMPTY_4, // 主要结构面倾角
|
|
|
+ text3: data[16].__EMPTY_6, // 与洞轴线夹角
|
|
|
+ text4: data[16].__EMPTY_8 // 备注
|
|
|
}, // 主要结构面产状及与洞轴线夹角
|
|
|
- grade: data[18]['__EMPTY_1'], // 围岩亚级划分
|
|
|
- stability: data[19]['__EMPTY_1'], // 掌子面稳定性划分
|
|
|
- describeText: data[20]['__EMPTY_1'], // 描述
|
|
|
+ grade: data[18].__EMPTY_1, // 围岩亚级划分
|
|
|
+ stability: data[19].__EMPTY_1, // 掌子面稳定性划分
|
|
|
+ describeText: data[20].__EMPTY_1, // 描述
|
|
|
personCompany: {
|
|
|
- tabulation: data[22]['__EMPTY_1'], // 制表
|
|
|
- review: data[22]['__EMPTY_5'], // 复核
|
|
|
- supervisor: data[22]['__EMPTY_9'], // 监理工程师
|
|
|
- company: data[23]['__EMPTY_1'], // 施工单位
|
|
|
+ tabulation: data[22].__EMPTY_1, // 制表
|
|
|
+ review: data[22].__EMPTY_5, // 复核
|
|
|
+ supervisor: data[22].__EMPTY_9, // 监理工程师
|
|
|
+ company: data[23].__EMPTY_1, // 施工单位
|
|
|
date: date || '' // 日期
|
|
|
}
|
|
|
}
|
|
|
@@ -99,9 +99,9 @@ class FormAnalyticalServer {
|
|
|
* @param {File} file file
|
|
|
* @return DesignDb
|
|
|
*/
|
|
|
- async CountDesign (file) {
|
|
|
+ async CountDesign(file) {
|
|
|
const data = await this.XLSX2JSON(file)
|
|
|
- let DesignDb = []
|
|
|
+ const DesignDb = []
|
|
|
for (let j = 0; j < data.length; j++) {
|
|
|
const el = data[j]
|
|
|
DesignDb.push({
|
|
|
@@ -124,43 +124,47 @@ class FormAnalyticalServer {
|
|
|
* @param {FILE} FILE
|
|
|
* @return JSON
|
|
|
*/
|
|
|
- async XLSX2JSON (FILE) {
|
|
|
+ async XLSX2JSON(FILE) {
|
|
|
const reader = new FileReader()
|
|
|
reader.readAsBinaryString(FILE)
|
|
|
const JSON = await new Promise((resolve, reject) => {
|
|
|
- reader.onload = e => {
|
|
|
- let wb = this.XLSX.read(e.target.result, {
|
|
|
+ reader.onload = (e) => {
|
|
|
+ const wb = this.XLSX.read(e.target.result, {
|
|
|
type: 'binary'
|
|
|
}) // 读取完成的数据
|
|
|
// 转成json header解析第一行标题,只解析最后一个标签
|
|
|
const lastexcel = wb.SheetNames[wb.SheetNames.length - 1]
|
|
|
- let data = this.XLSX.utils.sheet_to_json(wb.Sheets[lastexcel], { dateNF: 'yyyy/mm/dd', raw: false })
|
|
|
+ const data = this.XLSX.utils.sheet_to_json(wb.Sheets[lastexcel], { dateNF: 'yyyy/mm/dd', raw: false })
|
|
|
resolve(data)
|
|
|
}
|
|
|
})
|
|
|
return JSON
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 导出excel
|
|
|
* @param fileName 保存文件名
|
|
|
* @param table table表格DOM
|
|
|
*/
|
|
|
- outfile (fileName, table) {
|
|
|
+ outfile(fileName, table) {
|
|
|
try {
|
|
|
- let sheet1 = XLSX.utils.table_to_sheet(table, { raw: true })
|
|
|
- let blob2 = this.sheets2book2blob([sheet1])
|
|
|
+ const sheet1 = XLSX.utils.table_to_sheet(table, { raw: true })
|
|
|
+ const blob2 = this.sheets2book2blob([ sheet1 ])
|
|
|
this.openDownloadDialog(blob2, `${fileName}.xlsx`)
|
|
|
} catch (error) {
|
|
|
console.error('导出错误')
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* sheet转blob
|
|
|
* @param params sheet参数arr|obj
|
|
|
+ * @returns
|
|
|
*/
|
|
|
- sheets2book2blob (params) {
|
|
|
+ sheets2book2blob(params) {
|
|
|
+ let blob = null
|
|
|
if (params && params.length > 0) {
|
|
|
- let workbook = {
|
|
|
+ const workbook = {
|
|
|
SheetNames: [],
|
|
|
Sheets: {}
|
|
|
}
|
|
|
@@ -176,39 +180,38 @@ class FormAnalyticalServer {
|
|
|
}
|
|
|
}
|
|
|
// 生成excel的配置项
|
|
|
- let wopts = {
|
|
|
+ const wopts = {
|
|
|
bookType: 'xlsx', // 要生成的文件类型
|
|
|
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
|
|
|
type: 'binary'
|
|
|
}
|
|
|
- let wbout = XLSX.write(workbook, wopts)
|
|
|
- let blob = new Blob([this.s2ab(wbout)], { type: 'application/octet-stream' })
|
|
|
-
|
|
|
- return blob
|
|
|
- } else {
|
|
|
- console.error('参数错误(need arr and arr obj)')
|
|
|
+ const wbout = XLSX.write(workbook, wopts)
|
|
|
+ blob = new Blob([ this.s2ab(wbout) ], { type: 'application/octet-stream' })
|
|
|
}
|
|
|
+ return blob
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 字符串转ArrayBuffer
|
|
|
* @param s 字符串
|
|
|
*/
|
|
|
- s2ab (s) {
|
|
|
- let buf = new ArrayBuffer(s.length)
|
|
|
- let view = new Uint8Array(buf)
|
|
|
+ s2ab(s) {
|
|
|
+ const buf = new ArrayBuffer(s.length)
|
|
|
+ const view = new Uint8Array(buf)
|
|
|
for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
|
|
|
return buf
|
|
|
}
|
|
|
+
|
|
|
/**
|
|
|
* 下载
|
|
|
* @param url 文件blob
|
|
|
* @param fileName 文件名
|
|
|
*/
|
|
|
- openDownloadDialog (url, fileName) {
|
|
|
+ openDownloadDialog(url, fileName) {
|
|
|
if (typeof url === 'object' && url instanceof Blob) {
|
|
|
url = URL.createObjectURL(url) // 创建blob地址
|
|
|
}
|
|
|
- let aLink = document.createElement('a')
|
|
|
+ const aLink = document.createElement('a')
|
|
|
aLink.href = url
|
|
|
aLink.download = fileName || '' // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
|
|
|
let event
|