diff --git a/xiuosiot-frontend/package-lock.json b/xiuosiot-frontend/package-lock.json
index b45f6c5..601ed4f 100644
--- a/xiuosiot-frontend/package-lock.json
+++ b/xiuosiot-frontend/package-lock.json
@@ -10,9 +10,10 @@
"license": "MIT",
"dependencies": {
"axios": "0.18.1",
- "core-js": "^3.6.5",
+ "core-js": "^3.23.4",
"echarts": "^5.3.3",
- "element-ui": "^2.15.8",
+ "element-ui": "2.15.13",
+ "file-saver": "^2.0.5",
"html-loader": "^4.2.0",
"js-cookie": "2.2.0",
"markdown-loader": "^8.0.0",
@@ -6028,10 +6029,9 @@
}
},
"node_modules/core-js": {
- "version": "3.6.5",
- "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.6.5.tgz",
- "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==",
- "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
+ "version": "3.23.4",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.23.4.tgz",
+ "integrity": "sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ==",
"hasInstallScript": true
},
"node_modules/core-js-compat": {
@@ -7198,9 +7198,9 @@
"dev": true
},
"node_modules/element-ui": {
- "version": "2.15.10",
- "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.10.tgz",
- "integrity": "sha512-jmD++mU2wKXbisvx4fxOl2mHaU+HWHTAq/3Wf8x9Bwyu4GdDZPLABb+CGi3DWN6fPqdgRcd74aX39DO+YHObLw==",
+ "version": "2.15.13",
+ "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.13.tgz",
+ "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==",
"dependencies": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -8482,6 +8482,11 @@
"node": ">=4.0.0"
}
},
+ "node_modules/file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
@@ -25192,9 +25197,9 @@
}
},
"core-js": {
- "version": "3.6.5",
- "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.6.5.tgz",
- "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA=="
+ "version": "3.23.4",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.23.4.tgz",
+ "integrity": "sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ=="
},
"core-js-compat": {
"version": "3.25.1",
@@ -26188,9 +26193,9 @@
"dev": true
},
"element-ui": {
- "version": "2.15.10",
- "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.10.tgz",
- "integrity": "sha512-jmD++mU2wKXbisvx4fxOl2mHaU+HWHTAq/3Wf8x9Bwyu4GdDZPLABb+CGi3DWN6fPqdgRcd74aX39DO+YHObLw==",
+ "version": "2.15.13",
+ "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.13.tgz",
+ "integrity": "sha512-LJoatEYX6WV74FqXBss8Xfho9fh9rjDSzrDrTyREdGb1h1R3uRvmLh5jqp2JU137aj4/BgqA3K06RQpQBX33Bg==",
"requires": {
"async-validator": "~1.8.1",
"babel-helper-vue-jsx-merge-props": "^2.0.0",
@@ -27229,6 +27234,11 @@
}
}
},
+ "file-saver": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
+ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
+ },
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
diff --git a/xiuosiot-frontend/package.json b/xiuosiot-frontend/package.json
index 9e05975..64beef3 100644
--- a/xiuosiot-frontend/package.json
+++ b/xiuosiot-frontend/package.json
@@ -15,9 +15,10 @@
},
"dependencies": {
"axios": "0.18.1",
- "core-js": "^3.6.5",
+ "core-js": "^3.23.4",
"echarts": "^5.3.3",
"element-ui": "2.15.13",
+ "file-saver": "^2.0.5",
"html-loader": "^4.2.0",
"js-cookie": "2.2.0",
"markdown-loader": "^8.0.0",
diff --git a/xiuosiot-frontend/src/api/terminal/ota.js b/xiuosiot-frontend/src/api/terminal/ota.js
new file mode 100644
index 0000000..83b3cd7
--- /dev/null
+++ b/xiuosiot-frontend/src/api/terminal/ota.js
@@ -0,0 +1,82 @@
+import request from '@/utils/request'
+
+export function remove(data) {
+ return request({
+ url: '/firmware/delete',
+ method: 'post',
+ data
+ })
+}
+
+export function upload(data) {
+ return request({
+ url: '/firmware/upload',
+ method: 'post',
+ data
+ })
+}
+
+export function add(data) {
+ return request({
+ url: '/firmware/add',
+ method: 'post',
+ data
+ })
+}
+
+export function verify(data) {
+ return request({
+ url: '/firmware/verify',
+ method: 'post',
+ data
+ })
+}
+
+export function download(data) {
+ return request({
+ url: '/firmware/download',
+ method: 'get',
+ params: data || {},
+ responseType: 'blob'
+ })
+}
+
+export function getList(data) {
+ return request({
+ url: '/firmware/getAll',
+ method: 'get',
+ params: data || {}
+ })
+}
+
+export function getByVerify(data) {
+ return request({
+ url: '/firmware/getVerify',
+ method: 'get',
+ params: data || {}
+ })
+}
+
+export function getByName(data) {
+ return request({
+ url: '/firmware/getByName',
+ method: 'get',
+ params: data || {}
+ })
+}
+
+export function addTask(data) {
+ return request({
+ url: '/ota/addJob',
+ method: 'post',
+ data
+ })
+}
+
+export function getTaskList(data) {
+ return request({
+ url: '/ota/getAll',
+ method: 'get',
+ params: data || {}
+ })
+}
diff --git a/xiuosiot-frontend/src/assets/images/ota_file.png b/xiuosiot-frontend/src/assets/images/ota_file.png
new file mode 100644
index 0000000..944955e
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_file.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_md5.png b/xiuosiot-frontend/src/assets/images/ota_md5.png
new file mode 100644
index 0000000..f27d0e4
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_md5.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_time.png b/xiuosiot-frontend/src/assets/images/ota_time.png
new file mode 100644
index 0000000..9c42a5b
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_time.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_failed_big.png b/xiuosiot-frontend/src/assets/images/ota_verify_failed_big.png
new file mode 100644
index 0000000..1e3c826
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_failed_big.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_failed_small.png b/xiuosiot-frontend/src/assets/images/ota_verify_failed_small.png
new file mode 100644
index 0000000..cd73b89
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_failed_small.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_not_big.png b/xiuosiot-frontend/src/assets/images/ota_verify_not_big.png
new file mode 100644
index 0000000..e2391a8
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_not_big.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_not_small.png b/xiuosiot-frontend/src/assets/images/ota_verify_not_small.png
new file mode 100644
index 0000000..e176a98
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_not_small.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_success_big.png b/xiuosiot-frontend/src/assets/images/ota_verify_success_big.png
new file mode 100644
index 0000000..9c9e666
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_success_big.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_verify_success_small.png b/xiuosiot-frontend/src/assets/images/ota_verify_success_small.png
new file mode 100644
index 0000000..7a2d7df
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_verify_success_small.png differ
diff --git a/xiuosiot-frontend/src/assets/images/ota_version.png b/xiuosiot-frontend/src/assets/images/ota_version.png
new file mode 100644
index 0000000..12bc7df
Binary files /dev/null and b/xiuosiot-frontend/src/assets/images/ota_version.png differ
diff --git a/xiuosiot-frontend/src/icons/svg/ota_arrow_up.svg b/xiuosiot-frontend/src/icons/svg/ota_arrow_up.svg
new file mode 100644
index 0000000..a486c92
--- /dev/null
+++ b/xiuosiot-frontend/src/icons/svg/ota_arrow_up.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/xiuosiot-frontend/src/icons/svg/ota_close.svg b/xiuosiot-frontend/src/icons/svg/ota_close.svg
new file mode 100644
index 0000000..76399f1
--- /dev/null
+++ b/xiuosiot-frontend/src/icons/svg/ota_close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/xiuosiot-frontend/src/icons/svg/ota_refresh.svg b/xiuosiot-frontend/src/icons/svg/ota_refresh.svg
new file mode 100644
index 0000000..186c8fc
--- /dev/null
+++ b/xiuosiot-frontend/src/icons/svg/ota_refresh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/xiuosiot-frontend/src/layout/index.vue b/xiuosiot-frontend/src/layout/index.vue
index 95a9f59..17f90f8 100644
--- a/xiuosiot-frontend/src/layout/index.vue
+++ b/xiuosiot-frontend/src/layout/index.vue
@@ -48,7 +48,7 @@ export default {
}
},
showBreadcrumb() {
- const whiteList = ['overview', 'terminal/add', 'terminal/plc', 'terminal/stock', 'data/value', 'configuration/development', 'dashboard', 'log/accessLog', 'log/systemLog', 'rule/manage', 'rule/dataTransfer']
+ const whiteList = ['overview', 'terminal/add', 'terminal/plc', 'terminal/stock', 'terminal/ota', 'data/value', 'configuration/development', 'dashboard', 'log/accessLog', 'log/systemLog', 'rule/manage', 'rule/dataTransfer']
return whiteList.every((item) => this.$route.path.indexOf(item) === -1)
}
},
diff --git a/xiuosiot-frontend/src/router/index.js b/xiuosiot-frontend/src/router/index.js
index 31ad718..3d41bfd 100644
--- a/xiuosiot-frontend/src/router/index.js
+++ b/xiuosiot-frontend/src/router/index.js
@@ -219,7 +219,7 @@ export const asyncRouter = [
path: 'ota',
name: 'OTA',
component: () => import('@/views/terminal/OTA/index'),
- meta: { title: 'OTA升级', disabled: true, permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
+ meta: { title: 'OTA升级', permission: ['dashengda', 'hangxiao', 'qianjiangdianqi'] }
},
{
path: 'stock',
diff --git a/xiuosiot-frontend/src/utils/request.js b/xiuosiot-frontend/src/utils/request.js
index f4cfcaf..a1ea20a 100644
--- a/xiuosiot-frontend/src/utils/request.js
+++ b/xiuosiot-frontend/src/utils/request.js
@@ -2,7 +2,7 @@
* @Author: 龚祖望 573413756@qq.com
* @Date: 2022-05-16 09:16:41
* @LastEditors: 龚祖望 573413756@qq.com
- * @LastEditTime: 2022-11-10 15:09:14
+ * @LastEditTime: 2023-08-23 15:32:34
* @FilePath: \dashengda\src\utils\request.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
@@ -56,35 +56,35 @@ service.interceptors.response.use(
*/
response => {
const res = response.data
-
- // if the custom code is not 20000, it is judged as an error.
- if (res.code !== '200000') {
- Message({
- message: res.message || 'Error',
- type: 'error',
- duration: 5 * 1000
- })
+ if (res instanceof Blob) {
+ return response
+ } else {
+ if (res.code !== '200000') {
+ Message({
+ message: res.message || 'Error',
+ type: 'error',
+ duration: 5 * 1000
+ })
+ }
+ if (res.code === '200300') {}
+ // // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
+ // if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
+ // // to re-login
+ // MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
+ // confirmButtonText: 'Re-Login',
+ // cancelButtonText: 'Cancel',
+ // type: 'warning'
+ // }).then(() => {
+ // store.dispatch('user/resetToken').then(() => {
+ // location.reload()
+ // })
+ // })
+ // }
+ // return Promise.reject(new Error(res.message || 'Error'))
+ // } else {
+ return res
+ // }
}
- if (res.code === '200300') {
-
- }
- // // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
- // if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
- // // to re-login
- // MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
- // confirmButtonText: 'Re-Login',
- // cancelButtonText: 'Cancel',
- // type: 'warning'
- // }).then(() => {
- // store.dispatch('user/resetToken').then(() => {
- // location.reload()
- // })
- // })
- // }
- // return Promise.reject(new Error(res.message || 'Error'))
- // } else {
- return res
- // }
},
error => {
Message({
diff --git a/xiuosiot-frontend/src/views/terminal/OTA/index.vue b/xiuosiot-frontend/src/views/terminal/OTA/index.vue
index a5c1833..8a66203 100644
--- a/xiuosiot-frontend/src/views/terminal/OTA/index.vue
+++ b/xiuosiot-frontend/src/views/terminal/OTA/index.vue
@@ -1,3 +1,836 @@
-
+ {{ item.fileName }} {{ item.file_version }} 2023-08-24 15:00:00
+ 固件升级
+
+ {{ item.fileName }}
+ {{ item.fileDesc }}
+
+ {{
+ item.verify
+ }}
+
+ {{ item.fileVersion }}
+
+ {{ item.fileName }}
+
+ {{ item.fileMd5 }}
+
+ {{ item.createTime }}
+
固件升级记录
+
{{ formula.productName }}
{{ formula.brandName }}
{{ formula.protocolType }}
{{ '工业设备ID:' + formula.deviceId }}
-{{ '工业设备名称:' + formula.deviceName }}
-{{ '扫描间隔:' + formula.readPeriod + 'ms' }}
+{{ "工业设备ID:" + formula.deviceId }}
+{{ "工业设备名称:" + formula.deviceName }}
+{{ "扫描间隔:" + formula.readPeriod + "ms" }}
+
+
+
读取数据设置
添加
删除
清空