Skip to content

Commit 3e36f8d

Browse files
committed
Merge remote-tracking branch 'origin/develop' into develop
2 parents 039fe17 + 03e049b commit 3e36f8d

File tree

107 files changed

+283
-56
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+283
-56
lines changed

admin/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@
2727
"nprogress": "0.2.0",
2828
"vue": "2.5.17",
2929
"vue-router": "3.0.1",
30-
"vuex": "3.0.1"
30+
"vuex": "3.0.1",
31+
"xlsx": "^0.14.2"
3132
},
3233
"devDependencies": {
3334
"autoprefixer": "8.5.0",
@@ -53,7 +54,7 @@
5354
"html-webpack-plugin": "4.0.0-alpha",
5455
"mini-css-extract-plugin": "0.4.1",
5556
"node-notifier": "5.2.1",
56-
"node-sass": "^4.7.2",
57+
"node-sass": "^4.11.0",
5758
"optimize-css-assets-webpack-plugin": "5.0.0",
5859
"ora": "3.0.0",
5960
"path-to-regexp": "2.4.0",
@@ -74,7 +75,7 @@
7475
"vue-style-loader": "4.1.2",
7576
"vue-template-compiler": "2.5.17",
7677
"webpack": "4.16.5",
77-
"webpack-bundle-analyzer": "2.13.1",
78+
"webpack-bundle-analyzer": "^3.3.2",
7879
"webpack-cli": "3.1.0",
7980
"webpack-dev-server": "^3.1.14",
8081
"webpack-merge": "4.1.4"

admin/src/permission.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ if (store.getters.roles.length === 0 && sessionStorage.getItem('roles')) {
1717
// router.addRoutes(routeAdmin)
1818
// router.addRoutes(routeSuper)
1919

20-
const whiteList = ['/login', '/index', '/line', '/home', '/404', '/', '', '/md', '/out'] // 不重定向白名单
20+
const whiteList = ['/login', '/index', '/line', '/home', '/404', '/', '', '/md', '/out', '/excel'] // 不重定向白名单
2121
router.beforeEach((to, from, next) => {
2222
NProgress.start()
2323
if (getToken()) {

admin/src/router/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ const routeBase = [
2929
{ path: '/home', component: () => import('@/views/home/home'), hidden: true },
3030
{ path: '/md', name: 'md', component: () => import('@/views/markdown/index'), hidden: true },
3131
{ path: '/out', name: 'out', component: () => import('@/views/home/out'), hidden: true },
32+
{ path: '/excel', name: 'excel', component: () => import('@/views/home/excel'), hidden: true },
3233
{ path: '/websocket', name: 'websocket', component: () => import('@/views/home/websocket'), hidden: true },
3334
{ path: '/echarts', name: 'echarts', component: () => import('@/views/echarts/index'), hidden: true },
3435
// { path: '/index', component: () => import('@/views/home/index'), hidden: true },

admin/src/views/api_excel/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ export default {
216216
},
217217
initWebSocket(id) { // 初始化 weosocket
218218
if ('WebSocket' in window) {
219-
const url = 'ws://118.25.87.12:5200?id=' + id
219+
const url = 'wss://www.guke1.com/ws?id=' + id
220220
this.websock = new WebSocket(url)
221221
this.websock.onmessage = this.onmessage
222222
this.websock.onopen = this.onopen

admin/src/views/home/excel.vue

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
<template>
2+
<div>
3+
<nav-bar/>
4+
<el-upload
5+
ref="upload"
6+
:on-preview="handlePreview"
7+
:on-remove="handleRemove"
8+
:before-upload="beforeUpload"
9+
:file-list="fileList"
10+
class="upload-demo"
11+
action="">
12+
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
13+
<div slot="tip" class="el-upload__tip">只能上传 Excel 文件,且不超过 500kb</div>
14+
</el-upload>
15+
16+
<el-card class="box-card">
17+
<div slot="header" class="clearfix">
18+
<span>数据预览</span>
19+
</div>
20+
<div class="text item">
21+
<el-table :data="tableData" border highlight-current-row style="width: 100%;">
22+
<el-table-column :label="tableTitle" >
23+
<el-table-column v-for="item in tableHeader" :prop="item" :label="item" :key="item" min-width="150" />
24+
</el-table-column>
25+
</el-table>
26+
</div>
27+
</el-card>
28+
</div>
29+
</template>
30+
31+
<script>
32+
import XLSX from 'xlsx'
33+
export default {
34+
data() {
35+
return {
36+
fileList: [],
37+
upLoadNumber: 100000,
38+
tableTitle: '',
39+
tableData: [],
40+
tableHeader: ''
41+
}
42+
},
43+
methods: {
44+
submitUpload() {
45+
this.$refs.upload.submit()
46+
},
47+
handleRemove(file, fileList) {
48+
console.log(file, fileList)
49+
},
50+
handlePreview(file) {
51+
console.log(file)
52+
},
53+
beforeUpload(file) {
54+
const _this = this
55+
// 使返回的值变成Promise对象,如果校验不通过,则reject,校验通过,则resolve
56+
return new Promise(function(resolve, reject) {
57+
// readExcel方法也使用了Promise异步转同步,此处使用then对返回值进行处理
58+
_this.readExcel(file).then(result => { // 此时标识校验成功,为resolve返回
59+
if (result) resolve(result)
60+
})
61+
})
62+
},
63+
readExcel(file) { // 解析Excel
64+
console.log(file)
65+
const _this = this
66+
return new Promise(function(resolve, reject) { // 返回Promise对象
67+
const reader = new FileReader()
68+
reader.onload = (e) => { // 异步执行
69+
try {
70+
// 以二进制流方式读取得到整份excel表格对象
71+
const data = e.target.result
72+
const workbook = XLSX.read(data, { type: 'binary' })
73+
const batteryArr = []
74+
console.log(workbook.SheetNames)
75+
for (const item in workbook.SheetNames) {
76+
console.log(item)
77+
const SheetName = workbook.SheetNames[item]
78+
const sheetInfos = workbook.Sheets[SheetName]
79+
for (const battery in sheetInfos) {
80+
if (battery !== '!ref') {
81+
batteryArr.push(sheetInfos[battery])
82+
}
83+
}
84+
}
85+
const outdata = XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]])
86+
console.log(outdata)
87+
const tableTitle = workbook.SheetNames[0]
88+
console.log(tableTitle)
89+
const worksheet = workbook.Sheets[workbook.SheetNames[0]]
90+
const header = _this.get_header_row(worksheet)
91+
console.log(header)
92+
const results = XLSX.utils.sheet_to_json(worksheet)
93+
console.log(results)
94+
_this.generateDate({ tableTitle, header, results })
95+
// console.log(batteryArr)
96+
if (batteryArr.length > _this.upLoadNumber) {
97+
console.log('不能超过')
98+
resolve(false)
99+
} else {
100+
resolve(true)
101+
}
102+
} catch (e) {
103+
reject(e.message)
104+
}
105+
}
106+
reader.readAsBinaryString(file)
107+
})
108+
},
109+
generateDate({ tableTitle, header, results }) {
110+
console.log(tableTitle)
111+
console.log(header)
112+
console.log(results)
113+
this.tableTitle = tableTitle
114+
this.tableData = results
115+
this.tableHeader = header
116+
},
117+
handleDrop(e) {
118+
e.stopPropagation()
119+
e.preventDefault()
120+
const files = e.dataTransfer.files
121+
if (files.length !== 1) {
122+
this.$message.error('Only support uploading one file!')
123+
return
124+
}
125+
const itemFile = files[0] // only use files[0]
126+
this.readerData(itemFile)
127+
e.stopPropagation()
128+
e.preventDefault()
129+
},
130+
handleDragover(e) {
131+
e.stopPropagation()
132+
e.preventDefault()
133+
e.dataTransfer.dropEffect = 'copy'
134+
},
135+
readerData(itemFile) {
136+
if (itemFile.name.split('.')[1] !== 'xls' && itemFile.name.split('.')[1] !== 'xlsx') {
137+
this.$message({ message: '上传文件格式错误,请上传xls、xlsx文件!', type: 'warning' })
138+
} else {
139+
const reader = new FileReader()
140+
reader.onload = e => {
141+
const data = e.target.result
142+
const fixedData = this.fixdata(data)
143+
// const fixedData = data
144+
const workbook = XLSX.read(btoa(fixedData), { type: 'base64' })
145+
const firstSheetName = workbook.SheetNames[0] // 第一张表 sheet1
146+
console.log(firstSheetName)
147+
const worksheet = workbook.Sheets[firstSheetName] // 读取sheet1表中的数据 delete worksheet['!merges']
148+
const A_l = worksheet['!ref'].split(':')[1] // 当excel存在标题行时
149+
worksheet['!ref'] = `A2:${A_l}`
150+
const tableTitle = firstSheetName
151+
const header = this.get_header_row(worksheet)
152+
console.log(header)
153+
const results = XLSX.utils.sheet_to_json(worksheet)
154+
console.log(results)
155+
this.generateDate({ tableTitle, header, results })
156+
}
157+
reader.readAsArrayBuffer(itemFile)
158+
}
159+
},
160+
fixdata(data) {
161+
let o = ''
162+
let l = 0
163+
const w = 10240
164+
for (l = 0; l < data.byteLength / w; ++l) {
165+
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)))
166+
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)))
167+
return o
168+
}
169+
},
170+
get_header_row(sheet) {
171+
const headers = []
172+
const range = XLSX.utils.decode_range(sheet['!ref'])
173+
let C
174+
const R = range.s.r /* start in the first row */
175+
for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
176+
var cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })] /* find the cell in the first row */
177+
var hdr = 'UNKNOWN ' + C // <-- replace with your desired defaultif (cell && cell.t)
178+
hdr = XLSX.utils.format_cell(cell)
179+
headers.push(hdr)
180+
}
181+
return headers
182+
}
183+
}
184+
}
185+
</script>
186+
187+
<style scoped>
188+
.el-input {
189+
width: 97%;
190+
margin-bottom: 3%
191+
}
192+
193+
.input-with-select .el-input-group__prepend {
194+
background-color: #fff
195+
}
196+
</style>

laravel/app/Http/Controllers/Bus/NewApiController.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
namespace App\Http\Controllers\Bus;
1010

1111

12+
use App\Events\TestEvent;
1213
use App\Http\Repository\NewBusRepository;
14+
use App\Tasks\TestTask;
15+
use Hhxsv5\LaravelS\Swoole\Task\Event;
16+
use Hhxsv5\LaravelS\Swoole\Task\Task;
1317
use Illuminate\Http\Request;
1418
use Jxlwqq\ChineseTypesetting\ChineseTypesetting;
1519

@@ -97,4 +101,18 @@ public function output(Request $request)
97101
// output: <p>Hello 世界。</p>
98102
}
99103

104+
public function Task()
105+
{
106+
// 实例化TestEvent并通过fire触发,此操作是异步的,触发后立即返回,由Task进程继续处理监听器中的handle逻辑
107+
// use Hhxsv5\LaravelS\Swoole\Task\Event;
108+
$success = Event::fire(new TestEvent('event data'));
109+
var_dump($success);//判断是否触发成功
110+
111+
// 实例化TestTask并通过deliver投递,此操作是异步的,投递后立即返回,由Task进程继续处理TestTask中的handle逻辑
112+
$task = new TestTask('task data222');
113+
// $task->delay(3);// 延迟3秒投放任务
114+
$ret = Task::deliver($task);
115+
var_dump($ret);//判断是否投递成功
116+
}
117+
100118
}

0 commit comments

Comments
 (0)