Compare commits
37 Commits
9b20252e27
...
48c678d260
Author | SHA1 | Date | |
---|---|---|---|
48c678d260 | |||
22ca86e0fa | |||
38145f08ac | |||
ad0acc0f22 | |||
ad7ef729d0 | |||
b4b0446747 | |||
|
0029af4ffa | ||
69aaacb1c7 | |||
|
dbe784cec6 | ||
e8d566e121 | |||
c3d6b87151 | |||
d925556ed6 | |||
ec6c7120ea | |||
39571053f5 | |||
|
7ca1f07f56 | ||
|
21988ae8b0 | ||
e4c6154eb6 | |||
f4e847aa46 | |||
d44c366a19 | |||
c2defa2da6 | |||
6aabe6dd90 | |||
|
2a801bf834 | ||
|
a6fe9e654e | ||
3e51a00e17 | |||
506f12d405 | |||
587985e3c6 | |||
7e6cfb6345 | |||
b3623d29c5 | |||
f043a6a0a2 | |||
0f70fe85c8 | |||
5a00db7dcd | |||
9bcb4d42fa | |||
87bca23d96 | |||
c9fe2ba296 | |||
|
5e4df4d849 | ||
|
1d3372ed69 | ||
e28cd67e20 |
12
.env.dev
@ -1,8 +1,8 @@
|
||||
###
|
||||
# @Author: Do not edit
|
||||
# @Date: 2023-08-29 09:40:39
|
||||
# @LastEditTime: 2023-11-21 10:36:47
|
||||
# @LastEditors: DY
|
||||
# @LastEditTime: 2024-07-31 14:57:31
|
||||
# @LastEditors: zhp
|
||||
# @Description:
|
||||
###
|
||||
# 开发环境配置
|
||||
@ -13,14 +13,18 @@ VUE_APP_TITLE = MES系统
|
||||
|
||||
# 芋道管理系统/开发环境
|
||||
# VUE_APP_BASE_API = 'http://100.64.0.26:48082'
|
||||
VUE_APP_BASE_API = 'http://192.168.0.33:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.0.33:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.4.173:48080'
|
||||
# VUE_APP_BASE_API = 'http://192.168.2.173:48080'
|
||||
# VUE_APP_BASE_API = 'http://192.168.1.49:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.1.81:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.1.8:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
|
||||
# VUE_APP_BASE_API = 'http://192.168.1.56:48082'
|
||||
# VUE_APP_BASE_API = 'http://192.168.4.159:48080'
|
||||
# VUE_APP_BASE_API = 'http://192.168.1.64:48082'
|
||||
VUE_APP_BASE_API = 'http://192.168.1.99:48082'
|
||||
|
||||
|
||||
|
||||
# 积木报表指向地址
|
||||
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'
|
||||
|
@ -48,11 +48,12 @@
|
||||
"benz-amr-recorder": "^1.1.5",
|
||||
"bpmn-js-token-simulation": "0.10.0",
|
||||
"clipboard": "2.0.8",
|
||||
"code-brick-zj": "^1.0.2",
|
||||
"code-brick-zj": "^1.0.5",
|
||||
"core-js": "^3.26.0",
|
||||
"crypto-js": "^4.0.0",
|
||||
"diagram-js": "^12.3.0",
|
||||
"echarts": "5.4.0",
|
||||
"el-tree-transfer": "^2.4.7",
|
||||
"element-ui": "2.15.12",
|
||||
"file-saver": "^2.0.5",
|
||||
"fuse.js": "6.6.2",
|
||||
|
72
src/api/base/orderGroup.js
Normal file
@ -0,0 +1,72 @@
|
||||
import request from '@/utils/request'
|
||||
// 获得集团订单分页
|
||||
export function getOrderGroupPage(query) {
|
||||
return request({
|
||||
url: '/base/order-group/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获得集团订单
|
||||
export function getOrderGroup(query) {
|
||||
return request({
|
||||
url: '/base/order-group/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 更新集团订单
|
||||
export function updateOrderGroup(data) {
|
||||
return request({
|
||||
url: '/base/order-group/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 创建集团订单
|
||||
export function createOrderGroup(data) {
|
||||
return request({
|
||||
url: '/base/order-group/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改集团订单状态,结束-终止-作废用
|
||||
export function groupOrderStatusSet(data) {
|
||||
return request({
|
||||
url: '/base/order-group/groupOrderStatusSet',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得集团订单详情
|
||||
export function orderGroupDetail(query) {
|
||||
return request({
|
||||
url: '/base/order-group/getDetail',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建集团订单与厂务订单表关联表 一对多
|
||||
export function orderConGroupOrder(data) {
|
||||
return request({
|
||||
url: '/base/order-con-group-order/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 订单监控
|
||||
export function orderGroupMonitor(query) {
|
||||
return request({
|
||||
url: '/base/order-group/orderGroupMonitor',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
@ -125,7 +125,7 @@ export function orderAssignmentList(query) {
|
||||
// 获得所有客户列表
|
||||
export function customerList() {
|
||||
return request({
|
||||
url: '/base/core-customer/listAll',
|
||||
url: 'base/core-customer/listAll',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
@ -156,3 +156,12 @@ export function orderFinish(query) {
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 作废订单
|
||||
export function orderVoid(data) {
|
||||
return request({
|
||||
url: 'base/order/invalid',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
@ -25,3 +25,13 @@ export function exportEqAnalysisExcel(query) {
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出设备状态追溯
|
||||
export function exportEfficiencyExcel(query) {
|
||||
return request({
|
||||
url: '/analysis/equipment-analysis/export-efficiency',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
61
src/api/equipment/base/inspection/items.js
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-07-23 13:44:00
|
||||
* @LastEditTime: 2024-07-31 09:34:17
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-07-12 15:31:41
|
||||
* @LastEditTime: 2024-07-22 09:33:20
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
|
||||
export function deleteData(id) {
|
||||
return request({
|
||||
url: '/base/equipment-check-program/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemPageData(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-program/page',
|
||||
method: 'get',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemData(id) {
|
||||
return request({
|
||||
url: 'base/equipment-check-program/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateItemData(data) {
|
||||
return request({
|
||||
url: 'base/equipment-check-program/update',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function createItemData(data) {
|
||||
return request({
|
||||
url: 'base/equipment-check-program/create',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteProgramTypeData(id) {
|
||||
return request({
|
||||
url: 'base/equipment-check-program-type/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author: Do not edit
|
||||
* @Date: 2023-11-08 15:56:52
|
||||
* @LastEditTime: 2023-11-16 20:15:02
|
||||
* @LastEditTime: 2024-02-28 18:16:56
|
||||
* @LastEditors: DY
|
||||
* @Description:
|
||||
*/
|
||||
@ -52,6 +52,17 @@ export function exportCheckLogExcel(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// 导出设备巡检单记录
|
||||
export function exportCheckOrderExcel(query) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 根据设备获得所有巡检配置列表
|
||||
export function getcheckConfigByEqList(query) {
|
||||
return request({
|
||||
@ -68,3 +79,55 @@ export function deleteEqCheckLog(id) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备巡检单详情分页
|
||||
export function getCheckOrderDetPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建设备巡检单详情
|
||||
export function createCheckOrderDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新设备巡检单详情
|
||||
export function updateCheckOrderDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备巡检单详情
|
||||
export function deleteCheckOrderDet(id) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备巡检计划单
|
||||
export function getEqCheckOrder(id) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备巡检单分页
|
||||
export function getCheckOrderPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author: Do not edit
|
||||
* @Date: 2023-11-08 15:56:52
|
||||
* @LastEditTime: 2023-11-25 16:22:49
|
||||
* @LastEditTime: 2024-02-25 22:23:54
|
||||
* @LastEditors: DY
|
||||
* @Description:
|
||||
*/
|
||||
@ -100,3 +100,63 @@ export function updateCheckConfig(data) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 创建巡检单
|
||||
export function createCheckOrder(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新巡检单
|
||||
export function updateCheckOrder(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备巡检单code
|
||||
export function getOrderCode() {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得巡检单
|
||||
export function getCheckOrder(id) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得巡检单详细
|
||||
export function getCheckOrderDet(id) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 创建巡检单详情
|
||||
export function createCheckOrderDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新巡检单详情
|
||||
export function updateCheckOrderDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order-det/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
26
src/api/equipment/base/maintain/confirm.js
Normal file
@ -0,0 +1,26 @@
|
||||
/*
|
||||
* @Author: Do not edit
|
||||
* @Date: 2024-02-26 15:01:48
|
||||
* @LastEditTime: 2024-02-26 18:09:39
|
||||
* @LastEditors: DY
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 获得设备保养记录分页
|
||||
export function getLogDetPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备巡检单
|
||||
export function getCheckOrder(query) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
54
src/api/equipment/base/maintain/items.js
Normal file
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-07-12 15:31:41
|
||||
* @LastEditTime: 2024-07-30 16:44:47
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 删除设备保养记录
|
||||
export function deleteData(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-program/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemPageData(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-program/page',
|
||||
method: 'get',
|
||||
params:data
|
||||
})
|
||||
}
|
||||
|
||||
export function getItemData(id) {
|
||||
return request({
|
||||
url: 'base/equipment-maintain-program/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function updateItemData(data) {
|
||||
return request({
|
||||
url: 'base/equipment-maintain-program/update',
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function createItemData(data) {
|
||||
return request({
|
||||
url: 'base/equipment-maintain-program/create',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function deleteProgramTypeData(id) {
|
||||
return request({
|
||||
url: 'base/equipment-maintain-program-type/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
104
src/api/equipment/base/maintain/logConfig.js
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* @Author: zhp
|
||||
* @Date: 2024-07-30 15:46:23
|
||||
* @LastEditTime: 2024-07-31 09:18:25
|
||||
* @LastEditors: zhp
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 获得设备保养计划配置分页
|
||||
export function getLogPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建设备保养计划
|
||||
export function createLog(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新设备保养计划
|
||||
export function updateLog(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划code
|
||||
export function getCode() {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划
|
||||
export function getLog(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备保养计划配置详情分页
|
||||
export function getLogDetPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建设备保养计划详情
|
||||
export function createLogDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新设备保养计划详情
|
||||
export function updateLogDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划详情
|
||||
export function getLogDet(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备保养计划
|
||||
export function deleteLog(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备保养计划详情
|
||||
export function deleteLogDet(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
104
src/api/equipment/base/maintain/planconfig.js
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
* @Author: Do not edit
|
||||
* @Date: 2024-02-22 15:14:19
|
||||
* @LastEditTime: 2024-02-23 19:18:22
|
||||
* @LastEditors: DY
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 获得设备保养计划配置分页
|
||||
export function getPlanPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建设备保养计划
|
||||
export function createPlan(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新设备保养计划
|
||||
export function updatePlan(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划code
|
||||
export function getCode() {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划
|
||||
export function getPlan(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备保养计划配置详情分页
|
||||
export function getPlanDetPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan-det/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 创建设备保养计划详情
|
||||
export function createPlanDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan-det/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新设备保养计划详情
|
||||
export function updatePlanDet(data) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan-det/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得计划详情
|
||||
export function getPlanDet(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan-det/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备保养计划
|
||||
export function deletePlan(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备保养计划详情
|
||||
export function deletePlanDet(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-plan-det/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* @Author: Do not edit
|
||||
* @Date: 2023-11-08 15:56:52
|
||||
* @LastEditTime: 2023-11-23 19:10:07
|
||||
* @LastEditTime: 2024-02-26 17:02:53
|
||||
* @LastEditors: DY
|
||||
* @Description:
|
||||
*/
|
||||
@ -42,3 +42,39 @@ export function exportMaintainLogExcel(query) {
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
// 导出巡检单
|
||||
export function exportCheckOrderExcel(query) {
|
||||
return request({
|
||||
url: '/base/equipment-check-order/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得保养记录
|
||||
export function getLog(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log/get',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 获得设备保养记录详情分页
|
||||
export function getLogDetPage(query) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/page',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 删除设备保养记录详情
|
||||
export function deleteLogDet(id) {
|
||||
return request({
|
||||
url: '/base/equipment-maintain-log-det/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
@ -38,3 +38,11 @@ export function getInspectionData(query) {
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
export function getRecordInOneDay(query) {
|
||||
return request({
|
||||
url: '/analysis/record-in-one-day/get',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
76
src/api/warehouse/warehouse-area-setup.js
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2023-11-02 16:20:15
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2024-08-09 09:55:56
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建库区设置
|
||||
export function createWarehouseArea(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新库区设置
|
||||
export function updateWarehouseArea(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除库区设置
|
||||
export function deleteWarehouseArea(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库区设置
|
||||
export function getWarehouseArea(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库区设置列表
|
||||
export function getWarehouseAreaList(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/listAll?warehouseId=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库区设置分页
|
||||
export function getWarehouseAreaPage(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/page',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
// 获得code
|
||||
export function getCode() {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 导出库区设置 Excel
|
||||
export function exportWarehouseAreaExcel(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse-area/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
84
src/api/warehouse/warehouse-location-setup.js
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2023-11-02 16:20:15
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2024-08-08 15:56:30
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建库位设置
|
||||
export function createWarehouseLocation(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新库位设置
|
||||
export function updateWarehouseLocation(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除库位设置
|
||||
export function deleteWarehouseLocation(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库位设置
|
||||
export function getWarehouseLocation(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库位设置列表
|
||||
export function getWarehouseLocationTree() {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/getTree',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库位设置列表
|
||||
export function getWarehouseLocationList() {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/listAll',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得库位设置分页
|
||||
export function getWarehouseLocationPage(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/page',
|
||||
method: 'POST',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得code
|
||||
export function getCode() {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 导出库位设置 Excel
|
||||
export function exportWarehouseLocationExcel(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
84
src/api/warehouse/warehouse-setup.js
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2023-11-02 16:20:15
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2024-07-30 14:14:48
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 创建仓库设置
|
||||
export function createWarehouse(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse/create',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 更新仓库设置
|
||||
export function updateWarehouse(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse/update',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除仓库设置
|
||||
export function deleteWarehouse(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse/delete?id=' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得仓库设置
|
||||
export function getWarehouse(id) {
|
||||
return request({
|
||||
url: '/extend/warehouse/get?id=' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得仓库设置列表
|
||||
export function getWarehouseList() {
|
||||
return request({
|
||||
url: '/extend/warehouse/listAll',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得仓库首页统计信息
|
||||
export function getWarehouseAllInfo() {
|
||||
return request({
|
||||
url: '/extend/warehouse/getAllInfo',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 获得仓库设置分页
|
||||
export function getWarehousePage(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse/page',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
// 获得code
|
||||
export function getCode() {
|
||||
return request({
|
||||
url: '/extend/warehouse/getCode',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
// 导出仓库设置 Excel
|
||||
export function exportWarehouseExcel(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse/export-excel',
|
||||
method: 'get',
|
||||
params: query,
|
||||
responseType: 'blob'
|
||||
})
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
* @Author: zwq
|
||||
* @Date: 2023-11-02 14:31:42
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2023-11-04 14:56:10
|
||||
* @LastEditTime: 2024-08-02 15:51:37
|
||||
* @Description:
|
||||
*/
|
||||
import request from '@/utils/request'
|
||||
@ -41,10 +41,11 @@ export function getWarehouseLocation(id) {
|
||||
})
|
||||
}
|
||||
// 获得库位列表(通过仓库id)
|
||||
export function listByWarehouse(id) {
|
||||
export function listByWarehouse(query) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location/listByWarehouse?warehouseId=' + id,
|
||||
method: 'get'
|
||||
url: '/extend/warehouse-location/listByWarehouse',
|
||||
method: 'get',
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
// 获得库位列表(All)
|
||||
|
@ -25,6 +25,22 @@ export function outWarehouseRealtimeLocation(data) {
|
||||
data: data
|
||||
})
|
||||
}
|
||||
// 出入库-有库位 > 移库操作
|
||||
export function moveWarehouseRealtimeLocation(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-realtime-location/move',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
// 出入库-有库位 > 批量出库操作
|
||||
export function outWarehouseRealtimeLocationList(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-realtime-location/outList',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 出入库-有库位 > 入库操作
|
||||
export function inWarehouseRealtimeLocation(data) {
|
||||
@ -68,7 +84,16 @@ export function getWarehouseRealtimeLocationPage(data) {
|
||||
// 获得出入库历史-有库位分页
|
||||
export function getWarehouseLocationHisPage(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location-his/page',
|
||||
url: '/extend/warehouse-location-his/inAndOutPage',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 获得移库历史-有库位分页
|
||||
export function getMoveHisPage(data) {
|
||||
return request({
|
||||
url: '/extend/warehouse-location-his/movePage',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
|
12
src/assets/icons/svg/alarm-home.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>切片</title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.300397">
|
||||
<g id="异常警告" transform="translate(-1468.000000, -122.000000)" fill="#000000" fill-rule="nonzero">
|
||||
<g id="编组" transform="translate(1468.000000, 122.000000)">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="20" height="20"></rect>
|
||||
<path d="M9.30923195,2.02433324 C9.77491134,1.74507539 10.3606909,1.77046228 10.8045305,2.10049178 L16.9348344,6.65833873 L17.0554341,6.75466057 C17.5620417,7.18880359 17.858553,7.83620671 17.858553,8.52258247 L17.858553,15.8725474 L17.8541939,16.0176907 C17.7819026,17.2175976 16.8194895,18.1676569 15.6429193,18.1676569 L4.35708075,18.1676569 L4.21696353,18.1631414 C3.05860736,18.088257 2.14144699,17.0913218 2.14144699,15.8725474 L2.14144699,8.52279895 L2.14667089,8.36514909 C2.19177438,7.68568874 2.52672869,7.05865465 3.06516484,6.65833926 L9.19546584,2.10049447 Z M10.0594243,2.9649471 C9.98106349,2.94811965 9.89748036,2.96494528 9.8295714,3.01542217 L3.69926285,7.57327258 L3.6053427,7.65125711 C3.36716077,7.8716339 3.22876238,8.18810985 3.22876238,8.52279895 L3.22876238,15.8725474 L3.2339275,15.9851099 C3.28860185,16.5778056 3.77058378,17.041339 4.35708075,17.041339 L9.37562475,17.0406466 L9.45894699,16.9543314 L9.45935013,12.0522655 L9.46519481,11.973647 C9.50370053,11.7169857 9.72785233,11.5189729 10,11.5189729 C10.2788031,11.5189729 10.5102651,11.7278709 10.5378921,11.998001 L10.5407652,12.056799 L10.5406137,16.9543234 L10.6239359,17.0406466 L15.6429082,17.041339 L15.7515746,17.0359886 C16.3237555,16.9793531 16.7712376,16.4800823 16.7712376,15.8725474 L16.7712376,8.52279895 L16.7648256,8.39829639 C16.7308293,8.06937748 16.5632607,7.76840693 16.3007289,7.57326642 L10.1704369,3.01542833 L10.1168893,2.98387768 Z" id="形状结合" stroke="#000000" stroke-width="0.1"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.1 KiB |
15
src/assets/icons/svg/alarm.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="3-设备管理-设备保养-保养项目设置" transform="translate(-1713.000000, -32.000000)">
|
||||
<g id="icon/banner/消息" transform="translate(1713.000000, 32.000000)">
|
||||
<g id="编组">
|
||||
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M13.875,20.6585751 L13.9796526,20.6647179 C14.3523487,20.7094224 14.6,20.9943408 14.6,21.3949387 C14.6,21.793137 14.3546839,22.079785 13.9805499,22.1250542 L13.8720425,22.1313899 L10.125,22.1313023 L10.0203474,22.1251595 C9.64765132,22.080455 9.4,21.7955365 9.4,21.3949387 C9.4,20.9967404 9.64531608,20.7100924 10.0194501,20.6648232 L10.1279575,20.6584875 L13.875,20.6585751 Z M12,0.930991914 L12.114202,0.938656892 C12.4461465,0.982430206 12.6786924,1.21840343 12.7188472,1.56053658 L12.7250824,1.6705356 L12.724,2.83025932 L12.975759,2.90430031 L13.2244725,2.9413468 C16.687784,3.51732717 19.3536312,6.48703662 19.5838508,10.0724929 L19.5959741,10.3244915 L19.6000064,10.5775585 L19.6,18.0623023 L20.7499628,18.1131205 L20.8641749,18.1204751 C21.1961465,18.1642484 21.4286924,18.4002216 21.4688472,18.7423548 L21.4750824,18.8523538 L21.4678171,18.9675593 C21.4246486,19.3025982 21.1922705,19.5388574 20.8555499,19.5795997 L20.7470425,19.5859353 L3.25,19.5859353 L3.14534744,19.5797049 C2.77265132,19.5350005 2.525,19.250082 2.525,18.8494841 C2.525,18.4512975 2.77030543,18.1646386 3.1443756,18.1193685 L3.25285992,18.113033 L4.35003719,18.1123023 L4.4,10.5767569 L4.40403631,10.3246942 C4.524824,6.55675169 7.34298069,3.38911146 11.0266305,2.90405757 L11.229889,2.87995432 L11.275,1.66770897 L11.2823355,1.55103724 C11.3211556,1.24947788 11.5116242,1.02739927 11.7956288,0.955808301 L11.897531,0.937079811 L12,0.930991914 Z M12,4.31312051 C8.70150639,4.31312051 5.97362451,6.99932148 5.85407645,10.3480678 L5.85000794,10.5758657 L5.849,18.0622956 L18.099,18.1123023 L18.099,18.0619919 L18.1,17.9609919 L18.15,10.5767635 L18.1459233,10.3480647 C18.0266869,7.00812062 15.3071214,4.31312051 12,4.31312051 Z" id="形状结合" fill="#000000" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
<circle id="Oval-1-Copy-2" fill="#F5222D" cx="18" cy="6" r="3"></circle>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |
15
src/assets/icons/svg/home-alarm-white.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-1713.000000, -32.000000)">
|
||||
<g id="icon/banner/消息" transform="translate(1713.000000, 32.000000)">
|
||||
<g id="编组">
|
||||
<rect id="矩形" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M13.875,20.6585751 L13.9796526,20.6647179 C14.3523487,20.7094224 14.6,20.9943408 14.6,21.3949387 C14.6,21.793137 14.3546839,22.079785 13.9805499,22.1250542 L13.8720425,22.1313899 L10.125,22.1313023 L10.0203474,22.1251595 C9.64765132,22.080455 9.4,21.7955365 9.4,21.3949387 C9.4,20.9967404 9.64531608,20.7100924 10.0194501,20.6648232 L10.1279575,20.6584875 L13.875,20.6585751 Z M12,0.930991914 L12.114202,0.938656892 C12.4461465,0.982430206 12.6786924,1.21840343 12.7188472,1.56053658 L12.7250824,1.6705356 L12.724,2.83025932 L12.975759,2.90430031 L13.2244725,2.9413468 C16.687784,3.51732717 19.3536312,6.48703662 19.5838508,10.0724929 L19.5959741,10.3244915 L19.6000064,10.5775585 L19.6,18.0623023 L20.7499628,18.1131205 L20.8641749,18.1204751 C21.1961465,18.1642484 21.4286924,18.4002216 21.4688472,18.7423548 L21.4750824,18.8523538 L21.4678171,18.9675593 C21.4246486,19.3025982 21.1922705,19.5388574 20.8555499,19.5795997 L20.7470425,19.5859353 L3.25,19.5859353 L3.14534744,19.5797049 C2.77265132,19.5350005 2.525,19.250082 2.525,18.8494841 C2.525,18.4512975 2.77030543,18.1646386 3.1443756,18.1193685 L3.25285992,18.113033 L4.35003719,18.1123023 L4.4,10.5767569 L4.40403631,10.3246942 C4.524824,6.55675169 7.34298069,3.38911146 11.0266305,2.90405757 L11.229889,2.87995432 L11.275,1.66770897 L11.2823355,1.55103724 C11.3211556,1.24947788 11.5116242,1.02739927 11.7956288,0.955808301 L11.897531,0.937079811 L12,0.930991914 Z M12,4.31312051 C8.70150639,4.31312051 5.97362451,6.99932148 5.85407645,10.3480678 L5.85000794,10.5758657 L5.849,18.0622956 L18.099,18.1123023 L18.15,10.5767635 L18.1459233,10.3480647 C18.0266869,7.00812062 15.3071214,4.31312051 12,4.31312051 Z" id="形状结合" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
<circle id="Oval-1-Copy-2" fill="#F5222D" cx="18" cy="6" r="3"></circle>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.4 KiB |
15
src/assets/icons/svg/home-device-alarm.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-992.000000, -521.000000)">
|
||||
<g id="设备告警" transform="translate(992.000000, 521.000000)">
|
||||
<rect id="矩形" fill="#0B58FF" x="0" y="0" width="32" height="32" rx="16"></rect>
|
||||
<g id="告警视图" transform="translate(8.196906, 8.196906)" fill-rule="nonzero">
|
||||
<rect id="矩形" fill="#000000" opacity="0" x="0" y="0" width="15.6061876" height="15.6061876"></rect>
|
||||
<path d="M0,11.6800274 L0,1 C-1.78657678e-16,0.44771525 0.44771525,5.45542273e-16 1,0 L14.6061876,0 C15.1584723,-1.01453063e-16 15.6061876,0.44771525 15.6061876,1 L15.6061876,11.6800274 C15.6061876,12.2323122 15.1584723,12.6800274 14.6061876,12.6800274 L1,12.6800274 C0.44771525,12.6800274 -3.76453835e-16,12.2323122 0,11.6800274 Z M13.6554141,1.95077345 L1.95077345,1.95077345 L1.95077345,10.729254 L13.6554141,10.729254 L13.6554141,1.95077345 Z M7.80309379,6.82770706 C7.26440257,6.82770706 6.82770706,6.39101155 6.82770706,5.85232034 L6.82770706,3.90154689 C6.82770706,3.36285568 7.26440257,2.92616017 7.80309379,2.92616017 C8.341785,2.92616017 8.77848051,3.36285568 8.77848051,3.90154689 L8.77848051,5.85232034 C8.77848051,6.39101155 8.341785,6.82770706 7.80309379,6.82770706 Z M7.80309379,9.75386723 C7.26440257,9.75386723 6.82770706,9.31717172 6.82770706,8.77848051 C6.82770706,8.2397893 7.26440257,7.80309379 7.80309379,7.80309379 C8.341785,7.80309379 8.77848051,8.2397893 8.77848051,8.77848051 C8.77848051,9.31717172 8.341785,9.75386723 7.80309379,9.75386723 Z M11.7046407,15.6061876 L3.90154689,15.6061876 C3.36285568,15.6061876 2.92616017,15.1694921 2.92616017,14.6308009 C2.92616017,14.0921096 3.36285568,13.6554141 3.90154689,13.6554141 L11.7046407,13.6554141 C12.2433319,13.6554141 12.6800274,14.0921096 12.6800274,14.6308009 C12.6800274,15.1694921 12.2433319,15.6061876 11.7046407,15.6061876 Z" id="形状" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.2 KiB |
33
src/assets/icons/svg/home-device-menu.svg
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="56px" height="56px" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-873.000000, -386.000000)">
|
||||
<g id="设备管理" transform="translate(873.000000, 386.000000)">
|
||||
<rect id="矩形备份-7" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="55" height="55"></rect>
|
||||
<g id="编组-13" transform="translate(3.180289, 2.923263)">
|
||||
<g id="编组-10" fill-rule="nonzero">
|
||||
<g id="设备" fill="#0B58FF">
|
||||
<rect id="矩形" opacity="0" x="2.00676053" y="1.65338444" width="46.1399529" height="46.1399529"></rect>
|
||||
<g id="烧瓶,实验,化学,科学">
|
||||
<rect id="矩形" opacity="0" x="4.42964393" y="4.42964393" width="41.294186" height="41.294186"></rect>
|
||||
<g id="还原画布">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="50.1534739" height="50.1534739"></rect>
|
||||
<path d="M1.72467326,45.9476439 C1.72467326,47.1152471 2.60037565,47.9909495 3.76797884,47.9909495 L46.3854951,47.9909495 C47.5530983,47.9909495 48.4288007,47.1152471 48.4288007,45.9476439 L48.4288007,13.8385563 L1.72467326,13.8385563 L1.72467326,45.9476439 Z M18.1370611,29.0173977 L38.650124,29.0173977 C39.6980043,29.0173977 40.5474792,29.8668726 40.5474792,30.9147529 C40.5474792,31.9626332 39.6980043,32.8121081 38.650124,32.8121081 L18.1370611,32.8121081 C17.0891807,32.8121081 16.2397059,31.9626332 16.2397059,30.9147529 C16.2397059,29.8668726 17.0891807,29.0173977 18.1370611,29.0173977 Z M10.2370348,36.6068184 L38.650124,36.6068184 C39.6980043,36.6068184 40.5474792,37.4562933 40.5474792,38.5041736 C40.5474792,39.5520539 39.6980043,40.4015288 38.650124,40.4015288 L10.2370348,40.4015288 C9.18915443,40.4015288 8.33967958,39.5520539 8.33967958,38.5041736 C8.33967958,37.4562933 9.18915443,36.6068184 10.2370348,36.6068184 Z M24.2010346,11.7952507 L1.72467326,11.7952507 L6.395086,3.62202844 C6.9788876,2.74632605 8.14649078,2.16252446 9.31409396,2.16252446 L23.9091338,2.16252446 L23.9091338,11.7952507 L24.2010346,11.7952507 Z M48.4288007,11.7952507 L26.2443401,11.7952507 L26.2443401,2.45442526 L40.8393799,2.45442526 C42.0069831,2.45442526 43.1745863,3.03822685 43.7583879,3.91392924 L48.4288007,11.7952507 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="还原画布" transform="translate(1.723618, 2.162524)" fill="#18104D">
|
||||
<path d="M22.4763613,9.63272627 L0,9.63272627 L4.67041274,1.45950398 C5.25421433,0.583801592 6.42181752,0 7.5894207,0 L22.1844605,0 L22.1844605,9.63272627 L22.4763613,9.63272627 Z" id="形状"></path>
|
||||
</g>
|
||||
<g id="还原画布" transform="translate(26.191259, 2.454425)" fill="#18104D">
|
||||
<path d="M22.1844605,9.34082548 L0,9.34082548 L0,0 L14.5950398,0 C15.762643,0 16.9302462,0.583801592 17.5140478,1.45950398 L22.1844605,9.34082548 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M12.3066146,-5.29775726 L15.1753655,-3.62876956 C15.5740069,-3.25849694 15.8853072,-2.83209012 16.1092662,-2.34954908 C16.3332252,-1.86700804 16.4452047,-1.36084209 16.4452047,-0.831051217 L16.4452047,13.7613962 L12.3066146,13.7613962 L12.3066146,-5.29775726 Z" id="矩形" fill="#69F8AF" transform="translate(14.375910, 4.231819) rotate(-90.000000) translate(-14.375910, -4.231819) "></path>
|
||||
<path d="M33.62186,-5.29775726 L36.4906108,-3.62876956 C36.8892523,-3.25849694 37.2005525,-2.83209012 37.4245115,-2.34954908 C37.6484705,-1.86700804 37.76045,-1.36084209 37.76045,-0.831051217 L37.76045,13.7613962 L33.62186,13.7613962 L33.62186,-5.29775726 Z" id="矩形备份-5" fill="#69F8AF" transform="translate(35.691155, 4.231819) scale(-1, 1) rotate(-90.000000) translate(-35.691155, -4.231819) "></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.3 KiB |
25
src/assets/icons/svg/home-device.svg
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-992.000000, -164.000000)">
|
||||
<g id="编组-8备份" transform="translate(968.000000, 140.000000)">
|
||||
<g id="设备总览" transform="translate(24.000000, 24.000000)">
|
||||
<rect id="矩形" fill="#0B58FF" x="0" y="0" width="32" height="32" rx="16"></rect>
|
||||
<g id="烧瓶,实验,化学,科学" transform="translate(7.000000, 7.000000)" fill="#FFFFFF" fill-rule="nonzero">
|
||||
<rect id="矩形" opacity="0" x="0.723623255" y="0.596198408" width="16.6377315" height="16.6377315"></rect>
|
||||
<g>
|
||||
<rect id="矩形" opacity="0" x="1.59729739" y="1.59729739" width="14.8903832" height="14.8903832"></rect>
|
||||
<g id="还原画布">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="18.084978" height="18.084978"></rect>
|
||||
<g id="玻璃" transform="translate(0.634017, 0.634017)">
|
||||
<path d="M13.2593143,16.8169433 L0.5,16.8169433 C0.223857625,16.8169433 2.55862292e-16,16.5930857 0,16.3169433 L0,0.5 C-3.38176876e-17,0.223857625 0.223857625,1.61748834e-16 0.5,0 L13.2593143,0 C13.5354566,-5.07265313e-17 13.7593143,0.223857625 13.7593143,0.5 L13.7593143,16.3169433 C13.7593143,16.5930857 13.5354566,16.8169433 13.2593143,16.8169433 Z M1.37593143,15.2881288 L12.3833828,15.2881288 L12.3833828,1.52881452 L1.37593143,1.52881452 L1.37593143,15.2881288 Z M16.3169433,15.2881288 L13.4949152,15.2881288 C13.2187728,15.2881288 12.9949152,15.0642712 12.9949152,14.7881288 L12.9949152,2.02881452 C12.9949152,1.75267215 13.2187728,1.52881452 13.4949152,1.52881452 L16.3169433,1.52881452 C16.5930857,1.52881452 16.8169433,1.75267215 16.8169433,2.02881452 L16.8169433,14.7881288 C16.8169433,15.0642712 16.5930857,15.2881288 16.3169433,15.2881288 Z M3.2320096,9.37531556 C2.97585886,9.13419414 2.9636752,8.7310754 3.20479662,8.47492467 C3.20919378,8.47025343 3.21366127,8.46564888 3.21819754,8.46111261 L9.1694159,2.50989424 C9.42803493,2.25127521 9.84535293,2.24497024 10.1116667,2.49565843 C10.3678175,2.73677985 10.3800011,3.13989859 10.1388797,3.39604932 C10.1344826,3.40072056 10.1300151,3.40532511 10.1254788,3.40986138 L4.17426043,9.36107975 C3.9156414,9.61969878 3.4983234,9.62600375 3.2320096,9.37531556 Z M4.03073192,13.7322196 C3.77458118,13.4910982 3.76239752,13.0879795 4.00351894,12.8318287 C4.00791611,12.8271575 4.01238359,12.8225529 4.01691986,12.8180167 L9.96813823,6.86679831 C10.2267573,6.60817928 10.6440753,6.60187431 10.9103891,6.85256249 C11.1665398,7.09368392 11.1787235,7.49680265 10.937602,7.75295339 C10.9332049,7.75762463 10.9287374,7.76222918 10.9242011,7.76676545 L4.97298275,13.7179838 C4.71436372,13.9766028 4.29704572,13.9829078 4.03073192,13.7322196 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
17
src/assets/icons/svg/home-order-menu.svg
Normal file
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="56px" height="56px" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-506.000000, -386.000000)">
|
||||
<g id="订单管理" transform="translate(506.000000, 386.000000)">
|
||||
<rect id="矩形" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="55" height="55"></rect>
|
||||
<g id="订单" transform="translate(0.499522, 1.000000)" fill-rule="nonzero">
|
||||
<path d="M29.5269045,4.05189545 C43.5955288,4.05189545 55.0009567,15.4573234 55.0009567,29.5259477 C55.0009567,43.594572 43.5955288,55 29.5269045,55 C15.4582801,55 4.05285219,43.594572 4.05285219,29.5259477 C4.05285219,15.4573234 15.4582801,4.05189545 29.5269045,4.05189545 L29.5269045,4.05189545 Z M29.5269045,9.84145279 C18.6552737,9.84145279 9.84240952,18.654317 9.84240952,29.5259477 C9.84240952,40.3975785 18.6552737,49.2104427 29.5269045,49.2104427 C40.3985352,49.2104427 49.2113994,40.3975785 49.2113994,29.5259477 C49.2113994,18.654317 40.3985352,9.84145279 29.5269045,9.84145279 Z M29.5269045,13.3151872 C38.4798759,13.3151872 45.737665,20.5729763 45.737665,29.5259477 C45.737665,38.4789192 38.4798759,45.7367083 29.5269045,45.7367083 C20.573933,45.7367083 13.3161439,38.4789192 13.3161439,29.5259477 C13.3161439,20.5729763 20.573933,13.3151872 29.5269045,13.3151872 Z" id="形状" fill="#0B58FF"></path>
|
||||
<path d="M29.5269045,17.9468331 C35.9220495,17.9468331 41.1060191,23.1308027 41.1060191,29.5259477 C41.1060191,35.9210928 35.9220495,41.1050624 29.5269045,41.1050624 C23.1317594,41.1050624 17.9477898,35.9210928 17.9477898,29.5259477 C17.9477898,23.1308027 23.1317594,17.9468331 29.5269045,17.9468331 Z M29.5269045,21.4205675 C25.0504265,21.4205675 21.4215242,25.0494698 21.4215242,29.5259477 C21.4215242,34.0024256 25.0504265,37.631328 29.5269045,37.631328 C34.0033824,37.631328 37.6322847,34.0024256 37.6322847,29.5259477 C37.6322847,25.0494698 34.0033824,21.4205675 29.5269045,21.4205675 Z" id="形状" fill="#69F8AF"></path>
|
||||
<path d="M26.0531701,29.5259477 C26.0531701,30.7669935 26.7152601,31.9137671 27.7900372,32.53429 C28.8648144,33.154813 30.1889945,33.154813 31.2637717,32.53429 C32.3385489,31.9137671 33.0006389,30.7669935 33.0006389,29.5259477 C33.0006389,27.6074572 31.445395,26.0522133 29.5269045,26.0522133 C27.6084139,26.0522133 26.0531701,27.6074572 26.0531701,29.5259477 L26.0531701,29.5259477 Z" id="路径" fill="#69F8AF"></path>
|
||||
<path d="M5.16097346,0.068680005 L11.4032742,6.31213864 C11.5452724,6.45390019 11.6069803,6.65727562 11.5676976,6.8540412 L10.9864261,9.75692525 L30.1405975,28.9122546 C30.4594387,29.2544288 30.4500307,29.787647 30.1193172,30.1183605 C29.7886037,30.449074 29.2553855,30.458482 28.9132114,30.1396408 L9.75788199,10.9854693 L6.85499794,11.5667409 C6.65823235,11.6060236 6.45485693,11.5443156 6.31309537,11.4023174 L0.070794654,5.16001673 C0.00785917816,5.09751387 -0.0154139259,5.00536463 0.010295925,4.92047361 C0.036005776,4.8355826 0.10649489,4.77182992 0.19353327,4.75474771 L3.60358254,4.07273786 C3.84074434,4.02516282 4.02611955,3.8397876 4.0736946,3.6026258 L4.75686236,0.192576532 C4.77415833,0.106307273 4.83733049,0.0364492466 4.92143088,0.0105907928 C5.00553127,-0.015267661 5.0970389,0.00703077709 5.15981555,0.068680005 L5.16097346,0.068680005 Z" id="路径" fill="#18104D"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.6 KiB |
18
src/assets/icons/svg/home-order-monitor.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-64.000000, -521.000000)">
|
||||
<g id="工单监控" transform="translate(64.000000, 521.000000)">
|
||||
<g id="监控" transform="translate(0.000000, 0.000000)" fill="#000000" fill-rule="nonzero" opacity="0">
|
||||
<rect id="矩形" x="0" y="0" width="32" height="32"></rect>
|
||||
</g>
|
||||
<rect id="矩形" fill="#0B58FF" x="0" y="0" width="32" height="32" rx="16"></rect>
|
||||
<path d="M7.95196014,15.04804 C7.95196014,17.9233277 9.4859078,20.5802032 11.97598,22.0178471 C14.4660522,23.455491 17.5339478,23.455491 20.02402,22.0178471 C22.5140922,20.5802032 24.0480399,17.9233277 24.0480399,15.04804 C24.0480399,12.1727522 22.5140922,9.51587679 20.02402,8.07823291 C17.5339477,6.64058903 14.4660523,6.64058903 11.97598,8.07823291 C9.48590782,9.51587679 7.95196014,12.1727522 7.95196014,15.04804 L7.95196014,15.04804 Z" id="路径" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
<path d="M10.5399801,15.04804 C10.5399801,18.0635257 12.9845143,20.5080599 16,20.5080599 C19.0154857,20.5080599 21.4600199,18.0635257 21.4600199,15.04804 C21.4600199,12.0325543 19.0154857,9.58802008 16,9.58802008 C12.9845143,9.58802008 10.5399801,12.0325543 10.5399801,15.04804 L10.5399801,15.04804 Z" id="路径" fill="#0B58FF" fill-rule="nonzero"></path>
|
||||
<path d="M13.12154,13.60882 C13.12154,14.4036848 13.7659053,15.04805 14.56077,15.04805 C15.3556348,15.04805 16,14.4036848 16,13.60882 C16,12.8139552 15.3556348,12.16959 14.56077,12.16959 C13.7659053,12.16959 13.12154,12.8139552 13.12154,13.60882 Z" id="路径" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
<path d="M11.4822601,22.9347398 L10.8368601,22.9347398 L10.1914601,24.9999998 L21.8085399,24.9999998 L21.1631399,22.9347398 L20.5177399,22.9347398 C17.7631022,24.6949766 14.2368978,24.6949766 11.4822601,22.9347398 L11.4822601,22.9347398 Z" id="路径" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
14
src/assets/icons/svg/home-produce.svg
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-64.000000, -164.000000)">
|
||||
<g id="编组-8" transform="translate(40.000000, 140.000000)">
|
||||
<g id="生产总览" transform="translate(24.000000, 24.000000)">
|
||||
<rect id="矩形" fill="#0B58FF" x="0" y="0" width="32" height="32" rx="16"></rect>
|
||||
<path d="M8.37437968,12.8114326 L15.7504058,17.0898781 C15.8242411,17.1328167 15.9080324,17.1555207 15.9933456,17.1555207 C16.0810002,17.1555207 16.1670458,17.131811 16.2414377,17.0872002 L23.5609995,12.8417393 C23.7926594,12.7069596 23.8719923,12.4078775 23.7377553,12.1750584 C23.6941637,12.0993735 23.6311005,12.036866 23.5563023,11.9947862 L16.2647451,7.74687591 C16.1909326,7.70388503 16.1071411,7.68113461 16.0218216,7.68113461 C15.9265067,7.68101965 15.8332679,7.70910321 15.7537378,7.76188227 L8.44005972,12.0039794 C8.20831857,12.137714 8.12809173,12.4360124 8.26123967,12.6689293 C8.29129448,12.7215224 8.33087471,12.7680046 8.37793917,12.8059787 L8.37437968,12.8114326 Z M21.6810442,15.0685273 L21.2137792,15.3395552 L21.2137792,15.3395552 L16.4927009,18.0091478 C16.1870188,18.1819995 15.8130711,18.1818429 15.5075339,18.0087351 L10.3178102,15.0684002 C10.0088558,14.8933563 9.63024672,14.895282 9.32308895,15.0734597 L8.44007598,15.5856824 L8.44007598,15.5856824 C8.20833482,15.719417 8.12807547,16.017699 8.26125592,16.2505344 C8.29182536,16.3040667 8.33225083,16.351269 8.38037719,16.3896249 L8.37728903,16.3948175 L15.7504708,20.6715484 C15.9025556,20.7600033 16.0903428,20.7590041 16.2414864,20.6689358 L23.5609995,16.4234259 C23.7926756,16.2885809 23.8720085,15.9895315 23.7377716,15.7567777 C23.6940662,15.6810601 23.6310842,15.61852 23.556286,15.5764238 L22.6861859,15.0694958 C22.3756549,14.8885777 21.9919233,14.8882079 21.6810442,15.0685273 Z M21.6866857,18.6534468 L21.2195166,18.924426 L21.2195166,18.924426 L16.4950848,21.6207262 C16.1882146,21.7958614 15.8117014,21.7960578 15.5046487,21.6212428 L10.7829566,18.9330314 L10.7829566,18.9330314 L10.3151216,18.661704 C10.0048329,18.4817477 9.6219281,18.4817646 9.31165532,18.6617485 L8.44007598,19.1673364 L8.44007598,19.1673364 C8.20833482,19.3010546 8.12810798,19.5993693 8.26125592,19.8322047 C8.29148444,19.8851411 8.33137304,19.9318794 8.37883311,19.9699725 L8.37546865,19.9753448 L15.7504221,24.2531371 C15.8242543,24.2960928 15.9080429,24.3187608 15.9933618,24.3188656 C16.0806614,24.3189335 16.1663657,24.2953601 16.2414539,24.2506225 L23.5610157,20.0050799 C23.7926756,19.8702023 23.8720085,19.5710875 23.7377716,19.3384318 C23.6941799,19.2627141 23.6311817,19.2001577 23.5563023,19.1580778 L22.6918543,18.6544197 C22.3813173,18.4734898 21.9975724,18.4731184 21.6866857,18.6534468 Z" id="形状" fill="#FFFFFF" fill-rule="nonzero"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
19
src/assets/icons/svg/home-quality-menu.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="56px" height="56px" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-1240.000000, -386.000000)">
|
||||
<g id="质量管理" transform="translate(1240.000000, 386.000000)">
|
||||
<rect id="矩形备份-10" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="55" height="55"></rect>
|
||||
<g id="08质量" transform="translate(3.882568, 2.468968)">
|
||||
<g id="编组-14" transform="translate(0.000000, 0.000000)">
|
||||
<path d="M48.2348648,9.32705134 L48.2348648,23.3176283 C48.2348648,36.256626 39.5936261,48.3269278 28.0262536,51.2987824 C16.4131602,48.3726486 7.7719215,36.256626 7.7719215,23.3176283 L7.7719215,9.32705134 L28.0262536,0 L48.2348648,9.32705134 Z" id="路径" fill="#18104D" fill-rule="nonzero"></path>
|
||||
<path d="M40.4629433,9.32705134 L40.4629433,23.3176283 C40.4629433,36.256626 31.8217046,48.3269278 20.2543321,51.2987824 C8.64123874,48.3726486 0,36.256626 0,23.3176283 L0,9.32705134 L20.2543321,0 L40.4629433,9.32705134 Z" id="形状" fill="#0B58FF" fill-rule="nonzero"></path>
|
||||
<path d="M16.4804726,44.8381311 L23.9367499,44.8381311 C23.7967766,45.6009048 23.3406372,46.4633989 22.5683316,47.4256133 C21.4098731,48.8689349 20.2086112,49.4830135 20.2086112,49.4830135 C20.2086112,49.4830135 18.8612116,48.5451406 17.9626413,47.4256133 C17.3635945,46.6792617 16.8695382,45.8167676 16.4804726,44.8381311 Z" id="路径-2" fill="#69F8AF"></path>
|
||||
<path d="M20.2086112,14.5392271 C26.2894829,14.5392271 31.1816128,19.431357 31.1816128,25.5122287 C31.1816128,28.84985 29.6728251,31.8217046 27.3410623,33.8334215 L28.7355479,35.2279071 C29.4551992,35.9475584 29.4551992,37.1143437 28.7355479,37.833995 C28.0158966,38.5536463 26.8491113,38.5536463 26.12946,37.833995 L24.0948826,35.7994176 C22.8604199,36.2109052 21.5802364,36.4852302 20.2086112,36.4852302 C14.1277395,36.4852302 9.23560966,31.5473795 9.23560966,25.5122287 C9.23560966,19.4770778 14.1277395,14.5392271 20.2086112,14.5392271 Z M20.2086112,18.1968943 C16.1851773,18.1968943 12.8932768,21.4887947 12.8932768,25.5122287 C12.8932768,29.5356626 16.1851773,32.827563 20.2086112,32.827563 C20.4829363,32.827563 20.8029821,32.827563 21.0773072,32.7818422 L20.9630051,32.6675401 C20.2433538,31.9478888 20.2433538,30.7811035 20.9630051,30.0614522 C21.6826564,29.3418009 22.8494417,29.3418009 23.569093,30.0614522 L24.7349744,31.2273336 C26.4266455,29.9014293 27.5239456,27.8439915 27.5239456,25.5122287 C27.5239456,21.4887947 24.2320451,18.1968943 20.2086112,18.1968943 Z" id="形状结合" fill="#FFFFFF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
15
src/assets/icons/svg/home-store-menu.svg
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="56px" height="56px" viewBox="0 0 56 56" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="主界面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="主页" transform="translate(-1607.000000, -386.000000)">
|
||||
<g id="仓库管理" transform="translate(1607.000000, 386.000000)">
|
||||
<rect id="矩形备份-11" stroke="#979797" fill="#D8D8D8" opacity="0" x="0.5" y="0.5" width="55" height="55"></rect>
|
||||
<g id="编组" transform="translate(4.828118, 3.724695)" fill-rule="nonzero">
|
||||
<path d="M46.3437634,22.1260999 C46.3437634,20.5189711 45.6536539,18.9916368 44.4577566,17.9509367 L24.3260872,0.434356738 C23.6604711,-0.144785579 22.6832923,-0.144785579 22.0176762,0.434356738 L1.88600685,17.9509367 C0.689748793,18.9917824 0,20.5183296 0,22.1260999 L0,31.9992652 L23.1718817,30.7180576 L46.3437634,31.9992652 L46.3437634,22.1260999 Z" id="路径" fill="#18104D"></path>
|
||||
<path d="M24.3260873,10.3527476 L46.3437634,28.9647616 L46.3437634,46.7765289 C46.3437634,47.7558213 45.5461328,48.5506093 44.560889,48.5506093 L29.4914859,48.5506093 L29.4914859,38.0698881 C29.4914859,34.5968826 26.6621028,31.7814554 23.1718819,31.7814554 C19.6816609,31.7814554 16.8522778,34.5968826 16.8522778,38.0698881 L16.8522778,48.5506093 L1.78287475,48.5506093 C1.3098369,48.5506093 0.856189467,48.363548 0.521804101,48.0306072 C0.187418735,47.6976665 0,47.2461416 0,46.7754371 L0,28.9636698 L22.0176764,10.3527476 C22.6832925,9.7901594 23.6604713,9.7901594 24.3260873,10.3527476 Z" id="路径" fill="#0B58FF"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.8 KiB |
18
src/assets/icons/svg/home-work-menu.svg
Normal file
After Width: | Height: | Size: 7.7 KiB |
12
src/assets/icons/svg/menuIcon.svg
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title></title>
|
||||
<g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="栏" transform="translate(-383.000000, -639.000000)" fill="#FFFFFF" fill-rule="nonzero">
|
||||
<g id="制度流程" transform="translate(383.000000, 639.000000)">
|
||||
<rect id="矩形" opacity="0" x="0" y="0" width="24" height="24"></rect>
|
||||
<path d="M4.37117174,17.071929 L2.37885068,17.071929 C2.0028361,17.071929 1.69692899,17.3771995 1.69692899,17.7524526 L1.69692899,19.7475474 C1.69692899,20.1227781 2.00283612,20.428071 2.37885068,20.428071 L4.37117174,20.428071 C4.74718632,20.428071 5.05307101,20.1228005 5.05307101,19.7475474 L5.05307101,17.7524526 C5.05307101,17.3771996 4.74718632,17.071929 4.37117174,17.071929 Z M7.36536289,6.40073051 L21.8846371,6.40073051 C22.2245029,6.40073051 22.5,6.06492662 22.5,5.65073051 C22.5,5.2365344 22.2245029,4.90073051 21.8846371,4.90073051 L7.36536289,4.90073051 C7.02549709,4.90073051 6.75,5.23653442 6.75,5.65073054 C6.75,6.06492665 7.02549711,6.40073051 7.36536289,6.40073051 Z M3.14077284,5.95492436 L2.03265569,4.84248673 C1.8767502,4.68597337 1.62348469,4.6854806 1.46697133,4.84138609 C1.4665023,4.8418533 1.46603442,4.84232168 1.46556772,4.84279121 L1.18448184,5.12557972 C1.0295067,5.28149361 1.02939503,5.5332514 1.1842318,5.6893027 L2.85590574,7.37408916 C3.01150401,7.53090793 3.26476807,7.53189735 3.42158685,7.37629907 C3.42263304,7.37526103 3.42367349,7.3742172 3.42470814,7.37316765 L5.7220224,5.04277966 C5.87599957,4.88658572 5.87547971,4.63552909 5.72085699,4.47997417 L5.4403523,4.19777835 C5.28461275,4.04109986 5.0313479,4.04033871 4.87466942,4.19607825 C4.87370895,4.19703297 4.87275333,4.19799256 4.8718026,4.19895698 L3.14077284,5.95492436 L3.14077284,5.95492436 Z M21.8846371,11.25 L7.36536289,11.25 C7.02549709,11.25 6.75,11.5857972 6.75,11.999985 C6.75,12.4141729 7.02552167,12.75 7.36536289,12.75 L21.8846371,12.75 C22.2245029,12.75 22.5,12.4142028 22.5,11.999985 C22.5,11.5857672 22.2245029,11.25 21.8846371,11.25 Z M21.8846371,17.972656 L7.36536289,17.972656 C7.02549709,17.972656 6.75,18.30843 6.75,18.722656 C6.75,19.1368821 7.02552167,19.472656 7.36536289,19.472656 L21.8846371,19.472656 C22.2245029,19.472656 22.5,19.1368821 22.5,18.722656 C22.5,18.30843 22.2245029,17.972656 21.8846371,17.972656 Z M4.37117174,10.321929 L2.37885068,10.321929 C2.0028361,10.321929 1.69692899,10.6271975 1.69692899,11.0024481 L1.69692899,12.9975519 C1.69692899,13.3727801 2.00283612,13.678071 2.37885068,13.678071 L4.37117174,13.678071 C4.74718632,13.678071 5.05307101,13.3728025 5.05307101,12.9975519 L5.05307101,11.0024481 C5.05307101,10.6271975 4.74718632,10.321929 4.37117174,10.321929 Z" id="形状"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
BIN
src/assets/images/choicepart/Devconfig.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
src/assets/images/choicepart/Produce.png
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
src/assets/img/alarm-bg.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
src/assets/img/home-bg.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
src/assets/img/home-progress-bg.png
Normal file
After Width: | Height: | Size: 936 B |
@ -80,7 +80,7 @@
|
||||
.submenu-title-noDropdown,
|
||||
.el-submenu__title {
|
||||
&:hover {
|
||||
background-color: rgba(0, 0, 0, 0.06) !important;
|
||||
background-color: #0b58ff !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,18 +37,18 @@ $base-sub-menu-hover:#001528;
|
||||
*/
|
||||
$base-menu-color: #fff;
|
||||
$base-menu-color-active:#fff;
|
||||
$base-menu-background:#001529;
|
||||
$base-menu-background:#1E1651;
|
||||
$base-logo-title-color: #ffffff;
|
||||
|
||||
$base-menu-light-color:rgba(0,0,0,.70);
|
||||
$base-menu-light-background:#ffffff;
|
||||
$base-logo-light-title-color: #001529;
|
||||
|
||||
$base-sub-menu-background:#0B253F;
|
||||
$base-sub-menu-background:#15063C;
|
||||
$base-sub-menu-hover:#0b50ff;
|
||||
|
||||
|
||||
$base-sidebar-width: 248px;
|
||||
$base-sidebar-width: 282px;
|
||||
|
||||
// the :export directive is the magic sauce for webpack
|
||||
// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass
|
||||
|
@ -6,105 +6,44 @@
|
||||
-->
|
||||
|
||||
<template>
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="form"
|
||||
:label-width="`${labelWidth}px`"
|
||||
:size="size"
|
||||
:label-position="labelPosition"
|
||||
<el-form ref="form" :model="form" :label-width="`${labelWidth}px`" :size="size" :label-position="labelPosition"
|
||||
v-loading="formLoading">
|
||||
<el-row :gutter="20" v-for="(row, rindex) in rows" :key="rindex">
|
||||
<el-col v-for="col in row" :key="col.label" :span="24 / row.length">
|
||||
<el-form-item :label="col.label" :prop="col.prop" :rules="col.rules">
|
||||
<el-input
|
||||
v-if="col.input"
|
||||
v-model="form[col.prop]"
|
||||
@change="$emit('update', form)"
|
||||
:placeholder="`请输入${col.label}`"
|
||||
:disabled="disabled"
|
||||
v-bind="col.bind" />
|
||||
<el-input
|
||||
v-if="col.textarea"
|
||||
type="textarea"
|
||||
v-model="form[col.prop]"
|
||||
:disabled="disabled"
|
||||
@change="$emit('update', form)"
|
||||
:placeholder="`请输入${col.label}`"
|
||||
v-bind="col.bind" />
|
||||
<el-select
|
||||
v-if="col.select"
|
||||
v-model="form[col.prop]"
|
||||
:placeholder="`请选择${col.label}`"
|
||||
:disabled="disabled"
|
||||
@change="$emit('update', form)"
|
||||
v-bind="col.bind">
|
||||
<el-option
|
||||
v-for="opt in optionListOf[col.prop]"
|
||||
:key="opt.value"
|
||||
:label="opt.label"
|
||||
:value="opt.value" />
|
||||
<el-input v-if="col.input" v-model="form[col.prop]" @change="$emit('update', form)"
|
||||
:placeholder="`请输入${col.label}`" :disabled="disabled" v-bind="col.bind" />
|
||||
<el-input v-if="col.textarea" type="textarea" v-model="form[col.prop]" :disabled="disabled"
|
||||
@change="$emit('update', form)" :placeholder="`请输入${col.label}`" v-bind="col.bind" />
|
||||
<el-select v-if="col.select" v-model="form[col.prop]" :placeholder="`请选择${col.label}`" :disabled="disabled"
|
||||
@change="$emit('update', form)" v-bind="col.bind">
|
||||
<el-option v-for="opt in optionListOf[col.prop]" :key="opt.value" :label="opt.label" :value="opt.value" />
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-if="col.datetime"
|
||||
v-model="form[col.prop]"
|
||||
type="datetime"
|
||||
:disabled="disabled"
|
||||
:placeholder="`请选择${col.label}`"
|
||||
value-format="timestamp"
|
||||
@change="$emit('update', form)"
|
||||
v-bind="col.bind"></el-date-picker>
|
||||
<el-switch
|
||||
v-if="col.switch"
|
||||
v-model="form[col.prop]"
|
||||
:disabled="disabled"
|
||||
active-color="#0b58ff"
|
||||
inactive-color="#e1e1e1"
|
||||
@change="$emit('update', form)"
|
||||
v-bind="col.bind"></el-switch>
|
||||
<component
|
||||
v-if="col.subcomponent"
|
||||
:key="col.key"
|
||||
:disabled="disabled"
|
||||
:read-only="disabled"
|
||||
:is="col.subcomponent"
|
||||
v-model="form[col.prop]"
|
||||
:inlineStyle="col.style"
|
||||
@on-change="$emit('update', form)"
|
||||
<el-date-picker v-if="col.datetime" v-model="form[col.prop]" type="datetime"
|
||||
:disabled="col.disabled ? col.disabled : disabled" :placeholder="`请选择${col.label}`" value-format="timestamp"
|
||||
@change="$emit('update', form)" v-bind="col.bind">
|
||||
</el-date-picker>
|
||||
<el-switch v-if="col.switch" v-model="form[col.prop]" :disabled="disabled" active-color="#0b58ff"
|
||||
inactive-color="#e1e1e1" @change="$emit('update', form)" v-bind="col.bind"></el-switch>
|
||||
<component v-if="col.subcomponent" :key="col.key" :disabled="disabled" :read-only="disabled"
|
||||
:is="col.subcomponent" v-model="form[col.prop]" :inlineStyle="col.style" @on-change="$emit('update', form)"
|
||||
v-bind="col.bind"></component>
|
||||
|
||||
<div
|
||||
class="upload-area"
|
||||
:class="uploadOpen ? '' : 'height-48'"
|
||||
ref="uploadArea"
|
||||
:key="col.prop"
|
||||
<div class="upload-area" :class="uploadOpen ? '' : 'height-48'" ref="uploadArea" :key="col.prop"
|
||||
v-if="col.upload">
|
||||
<span class="close-icon" :class="uploadOpen ? 'open' : ''">
|
||||
<el-button
|
||||
type="text"
|
||||
icon="el-icon-arrow-right"
|
||||
@click="handleFilesOpen" />
|
||||
<el-button type="text" icon="el-icon-arrow-right" @click="handleFilesOpen" />
|
||||
</span>
|
||||
<!-- :file-list="uploadedFileList" -->
|
||||
<el-upload
|
||||
class="upload-in-dialog"
|
||||
v-if="col.upload"
|
||||
:key="col.prop + '__el-upload'"
|
||||
:action="uploadUrl"
|
||||
:headers="uploadHeaders"
|
||||
:show-file-list="false"
|
||||
icon="el-icon-upload2"
|
||||
:disabled="disabled"
|
||||
:before-upload="beforeUpload"
|
||||
:on-success="
|
||||
<el-upload class="upload-in-dialog" v-if="col.upload" :key="col.prop + '__el-upload'" :action="uploadUrl"
|
||||
:headers="uploadHeaders" :show-file-list="false" icon="el-icon-upload2" :disabled="disabled"
|
||||
:before-upload="beforeUpload" :on-success="
|
||||
(response, file, fileList) => {
|
||||
handleUploadSuccess(response, file, col.prop);
|
||||
}
|
||||
"
|
||||
v-bind="col.bind">
|
||||
" v-bind="col.bind">
|
||||
<el-button size="mini" :disabled="col.bind?.disabled || false">
|
||||
<svg-icon
|
||||
icon-class="icon-upload"
|
||||
style="color: inherit"></svg-icon>
|
||||
<svg-icon icon-class="icon-upload" style="color: inherit"></svg-icon>
|
||||
上传文件
|
||||
</el-button>
|
||||
<div class="el-upload__tip" slot="tip" v-if="col.uploadTips">
|
||||
@ -112,11 +51,7 @@
|
||||
</div>
|
||||
</el-upload>
|
||||
|
||||
<uploadedFile
|
||||
class="file"
|
||||
v-for="file in form[col.prop]"
|
||||
:file="file"
|
||||
:key="file.fileUrl"
|
||||
<uploadedFile class="file" v-for="file in form[col.prop]" :file="file" :key="file.fileUrl"
|
||||
@delete="!disabled && handleDeleteFile(file, col.prop)" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
@ -125,11 +125,8 @@ export default {
|
||||
// 取消自动聚焦 start
|
||||
this.Quill?.enable(false);
|
||||
this.$nextTick(() => {
|
||||
this.Quill?.enable(true);
|
||||
this.Quill?.blur();
|
||||
// if (!this.readOnly) {
|
||||
// this.Quill?.enable();
|
||||
// }
|
||||
this.Quill?.enable(true);
|
||||
});
|
||||
// 如果设置了上传地址则自定义图片上传事件
|
||||
if (this.type === 'url') {
|
||||
|
@ -2,26 +2,39 @@
|
||||
<el-menu
|
||||
:default-active="activeMenu"
|
||||
mode="horizontal"
|
||||
@select="handleSelect"
|
||||
>
|
||||
@select="handleSelect">
|
||||
<template v-for="(item, index) in topMenus">
|
||||
<el-menu-item :style="{'--theme': theme}" :index="item.path" :key="index" v-if="index < visibleNumber">
|
||||
<svg-icon :icon-class="item.meta.icon"/>
|
||||
<el-menu-item
|
||||
:style="{ '--theme': theme }"
|
||||
:index="item.path"
|
||||
:key="index"
|
||||
v-if="index < visibleNumber">
|
||||
<!-- <svg-icon :icon-class="item.meta.icon" /> -->
|
||||
<span class="menu-box" :class="{ active: item.path === currentIndex }">
|
||||
<span class="menu-dot"></span>
|
||||
{{ item.meta.title }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
|
||||
<!-- 顶部菜单超出数量折叠 -->
|
||||
<el-submenu :style="{'--theme': theme}" index="more" v-if="topMenus.length > visibleNumber">
|
||||
<el-submenu
|
||||
:style="{ '--theme': theme }"
|
||||
index="more"
|
||||
v-if="topMenus.length > visibleNumber">
|
||||
<template slot="title">更多菜单</template>
|
||||
<template v-for="(item, index) in topMenus">
|
||||
<el-menu-item
|
||||
:index="item.path"
|
||||
:key="index"
|
||||
v-if="index >= visibleNumber"
|
||||
>
|
||||
<svg-icon :icon-class="item.meta.icon"/>
|
||||
v-if="index >= visibleNumber">
|
||||
<!-- <svg-icon :icon-class="item.meta.icon" /> -->
|
||||
<span
|
||||
class="menu-box"
|
||||
:class="{ active: item.path === currentIndex }">
|
||||
<span class="menu-dot"></span>
|
||||
{{ item.meta.title }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
</el-submenu>
|
||||
@ -29,7 +42,8 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { constantRoutes } from "@/router";
|
||||
import { mapGetters } from 'vuex';
|
||||
import { constantRoutes } from '@/router';
|
||||
|
||||
// 隐藏侧边栏路由
|
||||
const hideList = ['/index', '/user/profile'];
|
||||
@ -39,11 +53,13 @@ export default {
|
||||
return {
|
||||
// 顶部栏初始数
|
||||
visibleNumber: 5,
|
||||
// 当前激活菜单的 index
|
||||
currentIndex: undefined
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['choicepart']),
|
||||
currentIndex() {
|
||||
return this.choicepart;
|
||||
},
|
||||
theme() {
|
||||
return this.$store.state.settings.theme;
|
||||
},
|
||||
@ -53,13 +69,14 @@ export default {
|
||||
this.routers.map((menu) => {
|
||||
if (menu.hidden !== true) {
|
||||
// 兼容顶部栏一级菜单内部跳转
|
||||
if (menu.path === "/") {
|
||||
if (menu.path === '/') {
|
||||
topMenus.push(menu.children[0]);
|
||||
} else {
|
||||
topMenus.push(menu);
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log('topMenus:', topMenus);
|
||||
return topMenus;
|
||||
},
|
||||
// 所有的路由信息
|
||||
@ -72,11 +89,12 @@ export default {
|
||||
this.routers.map((router) => {
|
||||
for (let item in router.children) {
|
||||
if (router.children[item].parentPath === undefined) {
|
||||
if(router.path === "/") {
|
||||
router.children[item].path = "/" + router.children[item].path;
|
||||
if (router.path === '/') {
|
||||
router.children[item].path = '/' + router.children[item].path;
|
||||
} else {
|
||||
if (!this.ishttp(router.children[item].path)) {
|
||||
router.children[item].path = router.path + "/" + router.children[item].path;
|
||||
router.children[item].path =
|
||||
router.path + '/' + router.children[item].path;
|
||||
}
|
||||
}
|
||||
router.children[item].parentPath = router.path;
|
||||
@ -90,11 +108,15 @@ export default {
|
||||
activeMenu() {
|
||||
const path = this.$route.path;
|
||||
let activePath = path;
|
||||
if (path !== undefined && path.lastIndexOf("/") > 0 && hideList.indexOf(path) === -1) {
|
||||
if (
|
||||
path !== undefined &&
|
||||
path.lastIndexOf('/') > 0 &&
|
||||
hideList.indexOf(path) === -1
|
||||
) {
|
||||
const tmpPath = path.substring(1, path.length);
|
||||
activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/"));
|
||||
activePath = '/' + tmpPath.substring(0, tmpPath.indexOf('/'));
|
||||
if (!this.$route.meta.link) {
|
||||
this.$store.dispatch('app/toggleSideBarHide', false)
|
||||
this.$store.dispatch('app/toggleSideBarHide', false);
|
||||
}
|
||||
} else if (!this.$route.children) {
|
||||
activePath = path;
|
||||
@ -105,10 +127,10 @@ export default {
|
||||
},
|
||||
},
|
||||
beforeMount() {
|
||||
window.addEventListener('resize', this.setVisibleNumber)
|
||||
window.addEventListener('resize', this.setVisibleNumber);
|
||||
},
|
||||
beforeDestroy() {
|
||||
window.removeEventListener('resize', this.setVisibleNumber)
|
||||
window.removeEventListener('resize', this.setVisibleNumber);
|
||||
},
|
||||
mounted() {
|
||||
this.setVisibleNumber();
|
||||
@ -116,62 +138,93 @@ export default {
|
||||
methods: {
|
||||
// 根据宽度计算设置显示栏数
|
||||
setVisibleNumber() {
|
||||
const width = document.body.getBoundingClientRect().width / 3;
|
||||
this.visibleNumber = parseInt(width / 85);
|
||||
const width = window.innerWidth - 700;
|
||||
console.log(width);
|
||||
console.log('window.innerWidth:', window.innerWidth);
|
||||
this.visibleNumber = parseInt(width / 120);
|
||||
console.log('this.visibleNumber:', this.visibleNumber);
|
||||
},
|
||||
// 菜单选择事件
|
||||
handleSelect(key, keyPath) {
|
||||
this.currentIndex = key;
|
||||
const route = this.routers.find(item => item.path === key);
|
||||
if (this.ishttp(key)) {
|
||||
// http(s):// 路径新窗口打开
|
||||
window.open(key, "_blank");
|
||||
} else if (!route || !route.children) {
|
||||
// 没有子路由路径内部打开
|
||||
this.$router.push({ path: key });
|
||||
this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
// this.currentIndex = key;
|
||||
const route = this.routers.find((item) => item.path === key);
|
||||
console.log('route:', route);
|
||||
this.$store.dispatch('app/setChoicepart', key);
|
||||
this.toRouter(route);
|
||||
// if (this.ishttp(key)) {
|
||||
// // http(s):// 路径新窗口打开
|
||||
// window.open(key, '_blank');
|
||||
// console.log('aaaaaaaaaaaaaa');
|
||||
// } else if (!route || !route.children) {
|
||||
// // 没有子路由路径内部打开
|
||||
// this.$router.push({ path: key });
|
||||
// this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
// console.log('bbbbbbbbbbbbbbb');
|
||||
// } else {
|
||||
// // 显示左侧联动菜单
|
||||
// this.activeRoutes(key);
|
||||
// if (!this.$route.meta.link) {
|
||||
// this.$store.dispatch('app/toggleSideBarHide', false);
|
||||
// }
|
||||
// console.log('cccccccccccccccc');
|
||||
// }
|
||||
},
|
||||
toRouter(item) {
|
||||
console.log(item);
|
||||
if (item.children) {
|
||||
this.toRouter(item.children[0]);
|
||||
} else {
|
||||
// 显示左侧联动菜单
|
||||
this.activeRoutes(key);
|
||||
if (!this.$route.meta.link) {
|
||||
this.$store.dispatch('app/toggleSideBarHide', false);
|
||||
}
|
||||
this.$router.push({ name: item.name });
|
||||
}
|
||||
},
|
||||
// 当前激活的路由
|
||||
activeRoutes(key) {
|
||||
const routes = []
|
||||
this.$store.dispatch('app/setChoicepart', key);
|
||||
const routes = [];
|
||||
if (this.childrenMenus && this.childrenMenus.length > 0) {
|
||||
this.childrenMenus.map((item) => {
|
||||
if (key === item.parentPath || (key === "index" && "" === item.path)) {
|
||||
if (
|
||||
key === item.parentPath ||
|
||||
(key === 'index' && '' === item.path)
|
||||
) {
|
||||
routes.push(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (routes.length > 0) {
|
||||
this.$store.commit("SET_SIDEBAR_ROUTERS", routes);
|
||||
this.$store.commit('SET_SIDEBAR_ROUTERS', routes);
|
||||
} else {
|
||||
this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
}
|
||||
},
|
||||
ishttp(url) {
|
||||
return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1
|
||||
}
|
||||
return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.topmenu-container.el-menu.el-menu--horizontal {
|
||||
border-bottom: none;
|
||||
}
|
||||
.topmenu-container.el-menu.el-menu--horizontal > .el-menu-item.is-active {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
.topmenu-container.el-menu.el-menu--horizontal > .el-submenu.is-active {
|
||||
--theme: none !important;
|
||||
}
|
||||
.topmenu-container.el-menu--horizontal > .el-menu-item {
|
||||
float: left;
|
||||
height: 50px !important;
|
||||
line-height: 50px !important;
|
||||
height: 84px !important;
|
||||
line-height: 84px !important;
|
||||
color: #999093 !important;
|
||||
padding: 0 5px !important;
|
||||
margin: 0 10px !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.topmenu-container.el-menu--horizontal > .el-menu-item.is-active, .el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
|
||||
.topmenu-container.el-menu--horizontal > .el-menu-item.is-active,
|
||||
.el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
|
||||
border-bottom: 2px solid #{'var(--theme)'} !important;
|
||||
color: #303133;
|
||||
}
|
||||
@ -179,10 +232,34 @@ export default {
|
||||
/* submenu item */
|
||||
.topmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title {
|
||||
float: left;
|
||||
height: 50px !important;
|
||||
line-height: 50px !important;
|
||||
color: #999093 !important;
|
||||
height: 84px !important;
|
||||
line-height: 89px !important;
|
||||
color: #000 !important;
|
||||
padding: 0 5px !important;
|
||||
margin: 0 10px !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss" scoped>
|
||||
.menu-box {
|
||||
padding: 7px 15px 9px 15px;
|
||||
border-radius: 32px;
|
||||
color: #000;
|
||||
}
|
||||
.active {
|
||||
background: #dce7ff;
|
||||
.menu-dot {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
.menu-dot {
|
||||
display: inline-block;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border-radius: 50%;
|
||||
background: #0b58ff;
|
||||
margin-right: 3px;
|
||||
margin-bottom: 2px;
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
||||
|
@ -10,26 +10,26 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import iframeToggle from "./IframeToggle/index"
|
||||
import iframeToggle from './IframeToggle/index';
|
||||
|
||||
export default {
|
||||
name: 'AppMain',
|
||||
components: { iframeToggle },
|
||||
computed: {
|
||||
cachedViews() {
|
||||
return this.$store.state.tagsView.cachedViews
|
||||
return this.$store.state.tagsView.cachedViews;
|
||||
},
|
||||
key() {
|
||||
return this.$route.path
|
||||
}
|
||||
}
|
||||
}
|
||||
return this.$route.path;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.app-main {
|
||||
/* 48= navbar 48 */
|
||||
min-height: calc(100vh - 56px);
|
||||
// min-height: calc(100vh - 84px);
|
||||
min-width: calc(100vh - 280px);
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
@ -39,13 +39,13 @@ export default {
|
||||
}
|
||||
|
||||
.fixed-header + .app-main {
|
||||
padding-top: 56px;
|
||||
padding-top: 84px;
|
||||
}
|
||||
|
||||
.hasTagsView {
|
||||
.app-main {
|
||||
/* 84 = navbar + tags-view = 50 + 34 */
|
||||
min-height: calc(100vh - 120px - 8px);
|
||||
min-height: calc(100vh - 164px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
@ -1,62 +1,34 @@
|
||||
<template>
|
||||
<div class="navbar">
|
||||
<hamburger id="hamburger-container" :is-active="sidebar.opened" class="hamburger-container" @toggleClick="toggleSideBar" />
|
||||
<hamburger
|
||||
id="hamburger-container"
|
||||
:is-active="sidebar.opened"
|
||||
class="hamburger-container"
|
||||
@toggleClick="toggleSideBar" />
|
||||
|
||||
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>
|
||||
<breadcrumb
|
||||
id="breadcrumb-container"
|
||||
class="breadcrumb-container"
|
||||
v-if="!topNav" />
|
||||
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
|
||||
|
||||
<div style="padding-top: 5px; padding-right: 38px;">
|
||||
<navbar-right :blackTitle='true'/>
|
||||
<div style="padding-top: 5px; padding-right: 24px">
|
||||
<navbar-right :blackTitle="true" />
|
||||
</div>
|
||||
|
||||
<!-- <div class="right-menu"> -->
|
||||
<!-- <template v-if="device!=='mobile'"> -->
|
||||
<!-- <search id="header-search" class="right-menu-item" /> -->
|
||||
|
||||
<!-- 站内信 -->
|
||||
<!-- <notify-message class="right-menu-item hover-effect" /> -->
|
||||
|
||||
<!-- <screenfull id="screenfull" class="right-menu-item hover-effect" /> -->
|
||||
|
||||
<!-- <el-tooltip content="布局大小" effect="dark" placement="bottom">
|
||||
<size-select id="size-select" class="right-menu-item hover-effect" />
|
||||
</el-tooltip> -->
|
||||
|
||||
<!-- </template> -->
|
||||
|
||||
<!-- <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
|
||||
<div class="avatar-wrapper"> -->
|
||||
<!-- <img :src="avatar" class="user-avatar"> -->
|
||||
<!-- <span v-if="nickname" class="user-nickname">{{ nickname }}</span>
|
||||
<i class="el-icon-caret-bottom" />
|
||||
</div>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<router-link to="/user/profile">
|
||||
<el-dropdown-item>个人中心</el-dropdown-item>
|
||||
</router-link> -->
|
||||
<!-- <el-dropdown-item @click.native="setting = true">
|
||||
<span>布局设置</span>
|
||||
</el-dropdown-item> -->
|
||||
<!-- <el-dropdown-item divided @click.native="logout">
|
||||
<span>退出登录</span>
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown> -->
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex'
|
||||
import Breadcrumb from '@/components/Breadcrumb'
|
||||
import TopNav from '@/components/TopNav'
|
||||
import Hamburger from '@/components/Hamburger'
|
||||
import Screenfull from '@/components/Screenfull'
|
||||
import SizeSelect from '@/components/SizeSelect'
|
||||
import Search from '@/components/HeaderSearch'
|
||||
import NotifyMessage from '@/layout/components/Message'
|
||||
import { mapGetters } from 'vuex';
|
||||
import Breadcrumb from '@/components/Breadcrumb';
|
||||
import TopNav from '@/components/TopNav';
|
||||
import Hamburger from '@/components/Hamburger';
|
||||
import Screenfull from '@/components/Screenfull';
|
||||
import SizeSelect from '@/components/SizeSelect';
|
||||
import Search from '@/components/HeaderSearch';
|
||||
import NotifyMessage from '@/layout/components/Message';
|
||||
// import {getPath} from "@/utils/ruoyi";
|
||||
import NavbarRight from './NavbarRight.vue'
|
||||
import NavbarRight from './NavbarRight.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
@ -67,65 +39,63 @@ export default {
|
||||
SizeSelect,
|
||||
Search,
|
||||
NotifyMessage,
|
||||
NavbarRight
|
||||
NavbarRight,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
'sidebar',
|
||||
'avatar',
|
||||
'nickname',
|
||||
'device'
|
||||
]),
|
||||
...mapGetters(['sidebar', 'avatar', 'nickname', 'device']),
|
||||
setting: {
|
||||
get() {
|
||||
return this.$store.state.settings.showSettings
|
||||
return this.$store.state.settings.showSettings;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch('settings/changeSetting', {
|
||||
key: 'showSettings',
|
||||
value: val
|
||||
})
|
||||
}
|
||||
value: val,
|
||||
});
|
||||
},
|
||||
},
|
||||
topNav: {
|
||||
get() {
|
||||
return this.$store.state.settings.topNav
|
||||
}
|
||||
}
|
||||
return this.$store.state.settings.topNav;
|
||||
},
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
toggleSideBar() {
|
||||
this.$store.dispatch('app/toggleSideBar')
|
||||
this.$store.dispatch('app/toggleSideBar');
|
||||
},
|
||||
async logout() {
|
||||
this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
|
||||
this.$modal
|
||||
.confirm('确定注销并退出系统吗?', '提示')
|
||||
.then(() => {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = getPath('/');
|
||||
});
|
||||
})
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.navbar {
|
||||
height: 48px; // 56
|
||||
height: 84px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background: #fff;
|
||||
box-shadow: 0 1px 4px rgba(0,21,41,.08);
|
||||
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
|
||||
|
||||
.hamburger-container {
|
||||
line-height: 52px;
|
||||
line-height: 84px;
|
||||
height: 100%;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
transition: background .3s;
|
||||
transition: background 0.3s;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
|
||||
&:hover {
|
||||
background: rgba(0, 0, 0, .025)
|
||||
background: rgba(0, 0, 0, 0.025);
|
||||
}
|
||||
}
|
||||
|
||||
@ -162,10 +132,10 @@ export default {
|
||||
|
||||
&.hover-effect {
|
||||
cursor: pointer;
|
||||
transition: background .3s;
|
||||
transition: background 0.3s;
|
||||
|
||||
&:hover {
|
||||
background: rgba(0, 0, 0, .025)
|
||||
background: rgba(0, 0, 0, 0.025);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,19 +1,37 @@
|
||||
<template>
|
||||
<div class="right-msg" :style="blackTitle ? 'color: #000' : 'color: #fff'">
|
||||
<div class="home-icon" v-if='blackTitle'>
|
||||
<svg-icon icon-class="home" style="font-size: 24px; cursor: pointer;" @click="toHome"/>
|
||||
<div class="home-icon" v-if="blackTitle">
|
||||
<!-- <svg-icon
|
||||
icon-class="home"
|
||||
style="font-size: 24px; cursor: pointer"
|
||||
@click="toHome" /> -->
|
||||
<svg-icon
|
||||
icon-class="alarm"
|
||||
style="font-size: 24px; cursor: pointer"
|
||||
@click="toAlarm" />
|
||||
</div>
|
||||
<div class="time-msg">
|
||||
<!-- <div class="time-msg">
|
||||
<div class="line1">{{timeZone}} {{topTime}}</div>
|
||||
<div class="line2">{{topDate}}</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="base-msg">
|
||||
<div class="avatar">
|
||||
<el-dropdown>
|
||||
<img :src="require(`../../assets/images/choicepart/avatar.png`)" alt="" width="32" height="32" />
|
||||
<img
|
||||
:src="require(`../../assets/images/choicepart/avatar.png`)"
|
||||
alt=""
|
||||
width="42"
|
||||
height="42"
|
||||
style="position: relative; top: 4px" />
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item><svg-icon icon-class="helpbtn"/>帮助文档</el-dropdown-item>
|
||||
<el-dropdown-item @click.native="logout"><svg-icon icon-class="exitbtn"/>退出登录</el-dropdown-item>
|
||||
<!-- <el-dropdown-item>
|
||||
<svg-icon icon-class="helpbtn" />
|
||||
帮助文档
|
||||
</el-dropdown-item> -->
|
||||
<el-dropdown-item @click.native="logout">
|
||||
<svg-icon icon-class="exitbtn" />
|
||||
退出登录
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
@ -25,66 +43,69 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import moment from 'moment'
|
||||
import { getUser } from "@/api/system/user.js";
|
||||
import {getPath} from "@/utils/ruoyi";
|
||||
import moment from 'moment';
|
||||
import { getUser } from '@/api/system/user.js';
|
||||
import { getPath } from '@/utils/ruoyi';
|
||||
export default {
|
||||
name: 'navRight',
|
||||
data() {
|
||||
return {
|
||||
topDate: '',
|
||||
topTime: '',
|
||||
timeZone: '',
|
||||
// topDate: '',
|
||||
// topTime: '',
|
||||
// timeZone: '',
|
||||
timer: '',
|
||||
dept: ' ',
|
||||
nickname: this.$store.getters.nickname
|
||||
}
|
||||
nickname: this.$store.getters.nickname,
|
||||
};
|
||||
},
|
||||
props: {
|
||||
blackTitle: {
|
||||
type: Boolean,
|
||||
default: () => {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getUserMsg()
|
||||
this.getTime()
|
||||
this.getUserMsg();
|
||||
// this.getTime();
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearInterval(this.timer)
|
||||
clearInterval(this.timer);
|
||||
},
|
||||
methods: {
|
||||
getTime() {
|
||||
let _this = this
|
||||
this.timer = setInterval(function () {
|
||||
_this.topDate = moment().format('YYYY/MM/DD')
|
||||
let temp = moment().format('A-hh:mm').split('-')
|
||||
_this.timeZone = temp[0]
|
||||
_this.topTime = temp[1]
|
||||
}, 1000)
|
||||
},
|
||||
// getTime() {
|
||||
// let _this = this;
|
||||
// this.timer = setInterval(function () {
|
||||
// _this.topDate = moment().format('YYYY/MM/DD');
|
||||
// let temp = moment().format('A-hh:mm').split('-');
|
||||
// _this.timeZone = temp[0];
|
||||
// _this.topTime = temp[1];
|
||||
// }, 1000);
|
||||
// },
|
||||
getUserMsg() {
|
||||
let id = this.$store.getters.userId
|
||||
getUser(id).then(res => {
|
||||
this.dept = res.data.dept ? res.data.dept.name : ''
|
||||
})
|
||||
let id = this.$store.getters.userId;
|
||||
getUser(id).then((res) => {
|
||||
this.dept = res.data.dept ? res.data.dept.name : '';
|
||||
});
|
||||
},
|
||||
async logout() {
|
||||
this.$modal.confirm('确定注销并退出系统吗?', '提示').then(() => {
|
||||
this.$modal
|
||||
.confirm('确定注销并退出系统吗?', '提示')
|
||||
.then(() => {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = getPath('/');
|
||||
});
|
||||
})
|
||||
}).catch(() => {})
|
||||
.catch(() => {});
|
||||
},
|
||||
toHome() {
|
||||
this.$router.push({ path: "/" })
|
||||
}
|
||||
}
|
||||
}
|
||||
toAlarm() {
|
||||
this.$router.push({ path: '/abnormalWarning' });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang='scss' scoped>
|
||||
<style lang="scss" scoped>
|
||||
.right-msg {
|
||||
float: right;
|
||||
height: 100%;
|
||||
@ -95,12 +116,13 @@ export default {
|
||||
}
|
||||
.home-icon {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
margin-right: 20px;
|
||||
vertical-align: top;
|
||||
padding-top: 7px;
|
||||
line-height: 84px;
|
||||
}
|
||||
.base-msg {
|
||||
display: inline-block;
|
||||
padding-top: 10px;
|
||||
.avatar {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
|
@ -17,7 +17,9 @@ export default {
|
||||
const vnodes = []
|
||||
|
||||
if (icon) {
|
||||
vnodes.push(<svg-icon icon-class={icon}/>)
|
||||
vnodes.push(<svg-icon style="font-size: 18px;margin-right: 10px;vertical-align: middle;" icon-class={icon}/>)
|
||||
} else {
|
||||
vnodes.push(<span style="display: inline-block; width: 10px;"/>)
|
||||
}
|
||||
|
||||
if (title) {
|
||||
|
@ -4,7 +4,7 @@
|
||||
:class="{ collapse: collapse }"
|
||||
:style="{
|
||||
backgroundColor:
|
||||
sideTheme === 'theme-dark' ? '#1f2d3d' : variables.menuLightBackground,
|
||||
sideTheme === 'theme-dark' ? '#1E1651' : variables.menuLightBackground,
|
||||
}">
|
||||
<!-- sideTheme === 'theme-dark'
|
||||
? variables.menuBackground
|
||||
@ -46,7 +46,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import logoImg from '@/assets/logo/logo.png';
|
||||
import logoImg from '@/assets/logo/cnbm.png';
|
||||
import variables from '@/assets/styles/variables.scss';
|
||||
|
||||
export default {
|
||||
@ -67,7 +67,7 @@ export default {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
title: '中建材智能化院',
|
||||
title: 'MES产品化重构',
|
||||
logo: logoImg,
|
||||
};
|
||||
},
|
||||
@ -87,8 +87,8 @@ export default {
|
||||
.sidebar-logo-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 56px;
|
||||
line-height: 56px;
|
||||
height: 84px;
|
||||
line-height: 84px;
|
||||
background: #1445cc;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
@ -98,20 +98,19 @@ export default {
|
||||
width: 100%;
|
||||
|
||||
& .sidebar-logo {
|
||||
width: 32px;
|
||||
height: 40px;
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
vertical-align: middle;
|
||||
margin-right: 12px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
& .sidebar-title {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
font-weight: 500;
|
||||
line-height: 50px;
|
||||
font-size: 18px;
|
||||
letter-spacing: 1px;
|
||||
font-size: 26px;
|
||||
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
@ -1,96 +0,0 @@
|
||||
<template>
|
||||
<div v-if="!item.hidden">
|
||||
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
|
||||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
||||
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
||||
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
|
||||
</el-menu-item>
|
||||
</app-link>
|
||||
</template>
|
||||
|
||||
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
|
||||
<template slot="title">
|
||||
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
|
||||
</template>
|
||||
<sidebar-item
|
||||
v-for="(child, index) in item.children"
|
||||
:key="child.path + index"
|
||||
:is-nest="true"
|
||||
:item="child"
|
||||
:base-path="resolvePath(child.path)"
|
||||
class="nest-menu"
|
||||
/>
|
||||
</el-submenu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import path from 'path'
|
||||
import { isExternal } from '@/utils/validate'
|
||||
import Item from './Item'
|
||||
import AppLink from './Link'
|
||||
import FixiOSBug from './FixiOSBug'
|
||||
|
||||
export default {
|
||||
name: 'SidebarItem',
|
||||
components: { Item, AppLink },
|
||||
mixins: [FixiOSBug],
|
||||
props: {
|
||||
// route object
|
||||
item: {
|
||||
type: Object,
|
||||
required: true
|
||||
},
|
||||
isNest: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
basePath: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
},
|
||||
data() {
|
||||
this.onlyOneChild = null
|
||||
return {}
|
||||
},
|
||||
methods: {
|
||||
hasOneShowingChild(children = [], parent) {
|
||||
if (!children) {
|
||||
children = [];
|
||||
}
|
||||
const showingChildren = children.filter(item => {
|
||||
if (item.hidden) {
|
||||
return false
|
||||
} else {
|
||||
// Temp set(will be used if only has one showing child)
|
||||
this.onlyOneChild = item
|
||||
return true
|
||||
}
|
||||
})
|
||||
|
||||
// When there is only one child router, the child router is displayed by default
|
||||
if (showingChildren.length === 1) {
|
||||
return true
|
||||
}
|
||||
|
||||
// Show parent if there are no child router to display
|
||||
if (showingChildren.length === 0) {
|
||||
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
|
||||
return true
|
||||
}
|
||||
|
||||
return false
|
||||
},
|
||||
resolvePath(routePath) {
|
||||
if (isExternal(routePath)) {
|
||||
return routePath
|
||||
}
|
||||
if (isExternal(this.basePath)) {
|
||||
return this.basePath
|
||||
}
|
||||
return path.resolve(this.basePath, routePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -1,96 +1,107 @@
|
||||
<template>
|
||||
<div v-if="!item.hidden">
|
||||
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
|
||||
<template
|
||||
v-if="
|
||||
hasOneShowingChild(item.children, item) &&
|
||||
(!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
|
||||
!item.alwaysShow
|
||||
">
|
||||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
||||
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
|
||||
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
|
||||
<el-menu-item
|
||||
:index="resolvePath(onlyOneChild.path)"
|
||||
:class="{ 'submenu-title-noDropdown': !isNest }">
|
||||
<item icon="menuIcon" :title="onlyOneChild.meta.title" />
|
||||
</el-menu-item>
|
||||
</app-link>
|
||||
</template>
|
||||
|
||||
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
|
||||
<el-submenu
|
||||
v-else
|
||||
ref="subMenu"
|
||||
:index="resolvePath(item.path)"
|
||||
popper-append-to-body>
|
||||
<template slot="title">
|
||||
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
|
||||
<item v-if="item.meta" icon="menuIcon" :title="item.meta.title" />
|
||||
</template>
|
||||
<sidebar-item
|
||||
<sidebar-item-sub
|
||||
v-for="(child, index) in item.children"
|
||||
:key="child.path + index"
|
||||
:is-nest="true"
|
||||
:item="child"
|
||||
:base-path="resolvePath(child.path)"
|
||||
class="nest-menu"
|
||||
/>
|
||||
class="nest-menu" />
|
||||
</el-submenu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import path from 'path'
|
||||
import { isExternal } from '@/utils/validate'
|
||||
import Item from './Item'
|
||||
import AppLink from './Link'
|
||||
import FixiOSBug from './FixiOSBug'
|
||||
import path from 'path';
|
||||
import { isExternal } from '@/utils/validate';
|
||||
import Item from './Item';
|
||||
import AppLink from './Link';
|
||||
import FixiOSBug from './FixiOSBug';
|
||||
import SidebarItemSub from './SidebarItemSub';
|
||||
|
||||
export default {
|
||||
name: 'SidebarItem',
|
||||
components: { Item, AppLink },
|
||||
components: { Item, AppLink, SidebarItemSub },
|
||||
mixins: [FixiOSBug],
|
||||
props: {
|
||||
// route object
|
||||
item: {
|
||||
type: Object,
|
||||
required: true
|
||||
required: true,
|
||||
},
|
||||
isNest: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
default: false,
|
||||
},
|
||||
basePath: {
|
||||
type: String,
|
||||
default: ''
|
||||
}
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
this.onlyOneChild = null
|
||||
return {}
|
||||
this.onlyOneChild = null;
|
||||
return {};
|
||||
},
|
||||
methods: {
|
||||
hasOneShowingChild(children = [], parent) {
|
||||
if (!children) {
|
||||
children = [];
|
||||
}
|
||||
const showingChildren = children.filter(item => {
|
||||
const showingChildren = children.filter((item) => {
|
||||
if (item.hidden) {
|
||||
return false
|
||||
return false;
|
||||
} else {
|
||||
// Temp set(will be used if only has one showing child)
|
||||
this.onlyOneChild = item
|
||||
return true
|
||||
this.onlyOneChild = item;
|
||||
return true;
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
// When there is only one child router, the child router is displayed by default
|
||||
if (showingChildren.length === 1) {
|
||||
return true
|
||||
return true;
|
||||
}
|
||||
|
||||
// Show parent if there are no child router to display
|
||||
if (showingChildren.length === 0) {
|
||||
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
|
||||
return true
|
||||
this.onlyOneChild = { ...parent, path: '', noShowingChildren: true };
|
||||
return true;
|
||||
}
|
||||
|
||||
return false
|
||||
return false;
|
||||
},
|
||||
resolvePath(routePath) {
|
||||
if (isExternal(routePath)) {
|
||||
return routePath
|
||||
return routePath;
|
||||
}
|
||||
if (isExternal(this.basePath)) {
|
||||
return this.basePath
|
||||
}
|
||||
return path.resolve(this.basePath, routePath)
|
||||
}
|
||||
}
|
||||
return this.basePath;
|
||||
}
|
||||
return path.resolve(this.basePath, routePath);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
106
src/layout/components/Sidebar/SidebarItemSub.vue
Normal file
@ -0,0 +1,106 @@
|
||||
<template>
|
||||
<div v-if="!item.hidden">
|
||||
<template
|
||||
v-if="
|
||||
hasOneShowingChild(item.children, item) &&
|
||||
(!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
|
||||
!item.alwaysShow
|
||||
">
|
||||
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
|
||||
<el-menu-item
|
||||
:index="resolvePath(onlyOneChild.path)"
|
||||
:class="{ 'submenu-title-noDropdown': !isNest }">
|
||||
<item icon="" :title="onlyOneChild.meta.title" />
|
||||
</el-menu-item>
|
||||
</app-link>
|
||||
</template>
|
||||
|
||||
<el-submenu
|
||||
v-else
|
||||
ref="subMenu"
|
||||
:index="resolvePath(item.path)"
|
||||
popper-append-to-body>
|
||||
<template slot="title">
|
||||
<item v-if="item.meta" icon="" :title="item.meta.title" />
|
||||
</template>
|
||||
<sidebar-item-sub
|
||||
v-for="(child, index) in item.children"
|
||||
:key="child.path + index"
|
||||
:is-nest="true"
|
||||
:item="child"
|
||||
:base-path="resolvePath(child.path)"
|
||||
class="nest-menu" />
|
||||
</el-submenu>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import path from 'path';
|
||||
import { isExternal } from '@/utils/validate';
|
||||
import Item from './Item';
|
||||
import AppLink from './Link';
|
||||
import FixiOSBug from './FixiOSBug';
|
||||
|
||||
export default {
|
||||
name: 'SidebarItemSub',
|
||||
components: { Item, AppLink },
|
||||
mixins: [FixiOSBug],
|
||||
props: {
|
||||
// route object
|
||||
item: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
isNest: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
basePath: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
this.onlyOneChild = null;
|
||||
return {};
|
||||
},
|
||||
methods: {
|
||||
hasOneShowingChild(children = [], parent) {
|
||||
if (!children) {
|
||||
children = [];
|
||||
}
|
||||
const showingChildren = children.filter((item) => {
|
||||
if (item.hidden) {
|
||||
return false;
|
||||
} else {
|
||||
// Temp set(will be used if only has one showing child)
|
||||
this.onlyOneChild = item;
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// When there is only one child router, the child router is displayed by default
|
||||
if (showingChildren.length === 1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Show parent if there are no child router to display
|
||||
if (showingChildren.length === 0) {
|
||||
this.onlyOneChild = { ...parent, path: '', noShowingChildren: true };
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
resolvePath(routePath) {
|
||||
if (isExternal(routePath)) {
|
||||
return routePath;
|
||||
}
|
||||
if (isExternal(this.basePath)) {
|
||||
return this.basePath;
|
||||
}
|
||||
return path.resolve(this.basePath, routePath);
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
@ -1,71 +0,0 @@
|
||||
<template>
|
||||
<div
|
||||
:class="{ 'has-logo': showLogo }"
|
||||
:style="{
|
||||
backgroundColor:
|
||||
settings.sideTheme === 'theme-dark'
|
||||
? variables.menuBackground
|
||||
: variables.menuLightBackground,
|
||||
}">
|
||||
<logo v-if="showLogo" :collapse="isCollapse" />
|
||||
<el-scrollbar :class="settings.sideTheme" wrap-class="scrollbar-wrapper">
|
||||
<el-menu
|
||||
:default-active="activeMenu"
|
||||
:collapse="isCollapse"
|
||||
:background-color="
|
||||
settings.sideTheme === 'theme-dark'
|
||||
? variables.menuBackground
|
||||
: variables.menuLightBackground
|
||||
"
|
||||
:text-color="
|
||||
settings.sideTheme === 'theme-dark'
|
||||
? variables.menuColor
|
||||
: variables.menuLightColor
|
||||
"
|
||||
:unique-opened="true"
|
||||
active-text-color="#fff"
|
||||
:collapse-transition="false"
|
||||
mode="vertical">
|
||||
<!-- 根据 sidebarRouters 路由,生成菜单 -->
|
||||
<sidebar-item
|
||||
v-for="(route, index) in sidebarRouters"
|
||||
:key="route.path + index"
|
||||
:item="route"
|
||||
:base-path="route.path" />
|
||||
</el-menu>
|
||||
</el-scrollbar>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters, mapState } from 'vuex';
|
||||
import Logo from './Logo';
|
||||
import SidebarItem from './SidebarItem';
|
||||
import variables from '@/assets/styles/variables.scss';
|
||||
|
||||
export default {
|
||||
components: { SidebarItem, Logo },
|
||||
computed: {
|
||||
...mapState(['settings']),
|
||||
...mapGetters(['sidebarRouters', 'sidebar']),
|
||||
activeMenu() {
|
||||
const route = this.$route;
|
||||
const { meta, path } = route;
|
||||
// if set path, the sidebar will highlight the path you set
|
||||
if (meta.activeMenu) {
|
||||
return meta.activeMenu;
|
||||
}
|
||||
return path;
|
||||
},
|
||||
showLogo() {
|
||||
return this.$store.state.settings.sidebarLogo;
|
||||
},
|
||||
variables() {
|
||||
return variables;
|
||||
},
|
||||
isCollapse() {
|
||||
return !this.sidebar.opened;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
@ -1,6 +1,7 @@
|
||||
<template>
|
||||
<div
|
||||
:class="{ 'has-logo': showLogo }"
|
||||
class="left-menu-box"
|
||||
:style="{
|
||||
backgroundColor:
|
||||
settings.sideTheme === 'theme-dark'
|
||||
@ -49,9 +50,7 @@ export default {
|
||||
...mapState(['settings']),
|
||||
...mapGetters(['sidebarRouters', 'sidebar', 'choicepart']),
|
||||
routeList() {
|
||||
// return [this.partList[this.choicepart]]
|
||||
// return [this.sidebarRouters[29]]
|
||||
return [this.sidebarRouters[this.choicepart]]
|
||||
return this.sidebarRouters;
|
||||
},
|
||||
activeMenu() {
|
||||
const route = this.$route;
|
||||
@ -74,3 +73,10 @@ export default {
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.left-menu-box {
|
||||
.el-menu-item.is-active {
|
||||
background-color: #0b58ff !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
20
src/mixins/tableHeightMixin.js
Normal file
@ -0,0 +1,20 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
tableH: this.tableHeight(296),
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(296);
|
||||
window.addEventListener('resize', this._setTableHeight);
|
||||
},
|
||||
destroyed() {
|
||||
window.removeEventListener('resize', this._setTableHeight);
|
||||
},
|
||||
methods: {
|
||||
_setTableHeight() {
|
||||
this.tableH = this?.heightNum ? this.tableHeight(this.heightNum) : this.tableHeight(296);
|
||||
// this.tableH = this.tableHeight(260);
|
||||
},
|
||||
},
|
||||
};
|
@ -59,6 +59,33 @@ export default {
|
||||
type: "warning",
|
||||
})
|
||||
},
|
||||
// 删除确认窗体(UI规范)
|
||||
delConfirm(title) {
|
||||
return MessageBox.confirm("确定删除后不可恢复该数据", `是否确认删除 【${title}】 数据项?`, {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: "warning",
|
||||
showClose:false
|
||||
})
|
||||
},
|
||||
// 关闭页面确认窗体(UI规范)
|
||||
closeConfirm() {
|
||||
return MessageBox.confirm("确定关闭将不保留编辑内容", "是否确认要关闭页面?", {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: "warning",
|
||||
showClose:false
|
||||
})
|
||||
},
|
||||
// 确认窗体(UI规范)
|
||||
newConfirm(content,title) {
|
||||
return MessageBox.confirm(content, title, {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: "warning",
|
||||
showClose:false
|
||||
})
|
||||
},
|
||||
// 提交内容
|
||||
prompt(content) {
|
||||
return MessageBox.prompt(content, "系统提示", {
|
||||
|
@ -71,7 +71,8 @@ export const constantRoutes = [
|
||||
},
|
||||
{
|
||||
path: '/',
|
||||
component: () => import('@/views/choicePart'),
|
||||
// component: () => import('@/views/choicePart'),
|
||||
component: () => import('@/views/home'),
|
||||
hidden: true,
|
||||
meta: { requireToken: true }
|
||||
},
|
||||
|
@ -13,7 +13,7 @@ module.exports = {
|
||||
/**
|
||||
* 是否显示顶部导航
|
||||
*/
|
||||
topNav: false,
|
||||
topNav: true,
|
||||
|
||||
/**
|
||||
* 是否显示 tagsView
|
||||
|
@ -23,10 +23,15 @@ const permission = {
|
||||
state.topbarRouters = routes
|
||||
},
|
||||
SET_SIDEBAR_ROUTERS: (state, routes) => {
|
||||
console.log('==SET_SIDEBAR_ROUTERS==:',routes)
|
||||
state.sidebarRouters = routes
|
||||
},
|
||||
},
|
||||
actions: {
|
||||
|
||||
|
||||
|
||||
|
||||
// 生成路由
|
||||
GenerateRoutes({commit}) {
|
||||
return new Promise(resolve => {
|
||||
|
@ -201,3 +201,34 @@ input, textarea{
|
||||
.el-form--label-top .el-form-item__label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
// 确认弹窗(UI样式修改和原样式有区别--start)
|
||||
.el-message-box__status+.el-message-box__message {
|
||||
padding-left: 58px;
|
||||
}
|
||||
.el-message-box {
|
||||
width: auto;
|
||||
min-width: 424px;
|
||||
.el-message-box__header {
|
||||
padding:32px 32px 0px 72px;
|
||||
.el-message-box__title {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: rgba(0,0,0,0.85);
|
||||
}
|
||||
}
|
||||
.el-message-box__content {
|
||||
padding-bottom: 24px;
|
||||
.el-message-box__status {
|
||||
top:-72%;
|
||||
left:20px;
|
||||
font-size:21px !important
|
||||
}
|
||||
}
|
||||
.el-message-box__btns {
|
||||
padding-right: 32px;
|
||||
padding-bottom:14px;
|
||||
}
|
||||
}
|
||||
|
||||
// 确认弹窗(UI样式修改和原样式有区别--end)
|
168
src/views/abnormalWarning/components/Navbar.vue
Normal file
@ -0,0 +1,168 @@
|
||||
<template>
|
||||
<div class="navbar">
|
||||
<div class="logo-container">
|
||||
<img
|
||||
src="../../../assets/images/cnbm.png"
|
||||
style="
|
||||
width: 34px;
|
||||
height: 34px;
|
||||
position: relative;
|
||||
top: 9px;
|
||||
margin-right: 8px;
|
||||
"
|
||||
alt="" />
|
||||
MES产品化重构
|
||||
</div>
|
||||
|
||||
<top-nav id="warnmenu-container" class="warnmenu-container" v-if="topNav" />
|
||||
|
||||
<div style="padding-top: 5px; padding-right: 38px">
|
||||
<navbar-right :blackTitle="true" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import TopNav from './TopNav';
|
||||
import Hamburger from '@/components/Hamburger';
|
||||
import Screenfull from '@/components/Screenfull';
|
||||
import SizeSelect from '@/components/SizeSelect';
|
||||
import Search from '@/components/HeaderSearch';
|
||||
import NotifyMessage from '@/layout/components/Message';
|
||||
// import {getPath} from "@/utils/ruoyi";
|
||||
import NavbarRight from './NavbarRight.vue';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
TopNav,
|
||||
Hamburger,
|
||||
Screenfull,
|
||||
SizeSelect,
|
||||
Search,
|
||||
NotifyMessage,
|
||||
NavbarRight,
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['sidebar', 'avatar', 'nickname', 'device']),
|
||||
setting: {
|
||||
get() {
|
||||
return this.$store.state.settings.showSettings;
|
||||
},
|
||||
set(val) {
|
||||
this.$store.dispatch('settings/changeSetting', {
|
||||
key: 'showSettings',
|
||||
value: val,
|
||||
});
|
||||
},
|
||||
},
|
||||
topNav: {
|
||||
get() {
|
||||
return this.$store.state.settings.topNav;
|
||||
},
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
toggleSideBar() {
|
||||
this.$store.dispatch('app/toggleSideBar');
|
||||
},
|
||||
async logout() {
|
||||
this.$modal
|
||||
.confirm('确定注销并退出系统吗?', '提示')
|
||||
.then(() => {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = getPath('/');
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.navbar {
|
||||
height: 84px; // 56/48
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
background-color: #fff;
|
||||
.logo-container {
|
||||
line-height: 84px;
|
||||
height: 100%;
|
||||
float: left;
|
||||
cursor: pointer;
|
||||
font-size: 26px;
|
||||
padding-left: 40px;
|
||||
font-weight: 500;
|
||||
color: #0c0030;
|
||||
}
|
||||
|
||||
.warnmenu-container {
|
||||
position: absolute;
|
||||
left: 290px;
|
||||
}
|
||||
|
||||
.errLog-container {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.right-menu {
|
||||
float: right;
|
||||
height: 100%;
|
||||
line-height: 56px;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.right-menu-item {
|
||||
display: inline-block;
|
||||
padding: 0 8px;
|
||||
height: 100%;
|
||||
font-size: 18px;
|
||||
color: #5a5e66;
|
||||
vertical-align: text-bottom;
|
||||
|
||||
&.hover-effect {
|
||||
cursor: pointer;
|
||||
transition: background 0.3s;
|
||||
|
||||
&:hover {
|
||||
background: rgba(0, 0, 0, 0.025);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.avatar-container {
|
||||
margin-right: 30px;
|
||||
|
||||
.avatar-wrapper {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.user-avatar {
|
||||
cursor: pointer;
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
.user-nickname {
|
||||
margin-left: 5px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.el-icon-caret-bottom {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: -20px;
|
||||
top: 25px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
138
src/views/abnormalWarning/components/NavbarRight.vue
Normal file
@ -0,0 +1,138 @@
|
||||
<template>
|
||||
<div class="right-msg" :style="blackTitle ? 'color: #000' : 'color: #fff'">
|
||||
<!-- <div class="home-icon" v-if="blackTitle">
|
||||
<svg-icon
|
||||
icon-class="alarm"
|
||||
style="font-size: 24px; cursor: pointer"
|
||||
@click="toHome" />
|
||||
</div> -->
|
||||
<!-- <div class="time-msg">
|
||||
<div class="line1">{{timeZone}} {{topTime}}</div>
|
||||
<div class="line2">{{topDate}}</div>
|
||||
</div> -->
|
||||
<div class="base-msg">
|
||||
<div class="avatar">
|
||||
<el-dropdown>
|
||||
<img
|
||||
:src="require(`../../../assets/images/choicepart/avatar.png`)"
|
||||
alt=""
|
||||
width="42"
|
||||
height="42"
|
||||
style="position: relative; top: 4px" />
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<!-- <el-dropdown-item>
|
||||
<svg-icon icon-class="helpbtn" />
|
||||
帮助文档
|
||||
</el-dropdown-item> -->
|
||||
<el-dropdown-item @click.native="logout">
|
||||
<svg-icon icon-class="exitbtn" />
|
||||
退出登录
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
<div class="use-msg">
|
||||
<div class="line1">{{ nickname }}</div>
|
||||
<div class="line2">{{ dept }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
import { getUser } from '@/api/system/user.js';
|
||||
import { getPath } from '@/utils/ruoyi';
|
||||
export default {
|
||||
name: 'navRight',
|
||||
data() {
|
||||
return {
|
||||
// topDate: '',
|
||||
// topTime: '',
|
||||
// timeZone: '',
|
||||
timer: '',
|
||||
dept: ' ',
|
||||
nickname: this.$store.getters.nickname,
|
||||
};
|
||||
},
|
||||
props: {
|
||||
blackTitle: {
|
||||
type: Boolean,
|
||||
default: () => {
|
||||
return false;
|
||||
},
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.getUserMsg();
|
||||
// this.getTime();
|
||||
},
|
||||
beforeDestroy() {
|
||||
clearInterval(this.timer);
|
||||
},
|
||||
methods: {
|
||||
// getTime() {
|
||||
// let _this = this;
|
||||
// this.timer = setInterval(function () {
|
||||
// _this.topDate = moment().format('YYYY/MM/DD');
|
||||
// let temp = moment().format('A-hh:mm').split('-');
|
||||
// _this.timeZone = temp[0];
|
||||
// _this.topTime = temp[1];
|
||||
// }, 1000);
|
||||
// },
|
||||
getUserMsg() {
|
||||
let id = this.$store.getters.userId;
|
||||
getUser(id).then((res) => {
|
||||
this.dept = res.data.dept ? res.data.dept.name : '';
|
||||
});
|
||||
},
|
||||
async logout() {
|
||||
this.$modal
|
||||
.confirm('确定注销并退出系统吗?', '提示')
|
||||
.then(() => {
|
||||
this.$store.dispatch('LogOut').then(() => {
|
||||
location.href = getPath('/');
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
toHome() {
|
||||
this.$router.push({ path: '/' });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.right-msg {
|
||||
float: right;
|
||||
height: 84px;
|
||||
font-size: 14px;
|
||||
.time-msg {
|
||||
display: inline-block;
|
||||
margin-right: 30px;
|
||||
}
|
||||
.home-icon {
|
||||
display: inline-block;
|
||||
margin-right: 20px;
|
||||
vertical-align: top;
|
||||
line-height: 84px;
|
||||
}
|
||||
.base-msg {
|
||||
display: inline-block;
|
||||
padding-top: 10px;
|
||||
.avatar {
|
||||
display: inline-block;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.use-msg {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
.line1 {
|
||||
height: 19px;
|
||||
}
|
||||
.line2 {
|
||||
height: 19px;
|
||||
opacity: 0.65;
|
||||
}
|
||||
}
|
||||
</style>
|
273
src/views/abnormalWarning/components/TopNav.vue
Normal file
@ -0,0 +1,273 @@
|
||||
<template>
|
||||
<el-menu
|
||||
:default-active="activeMenu"
|
||||
mode="horizontal"
|
||||
@select="handleSelect">
|
||||
<template v-for="(item, index) in topMenus">
|
||||
<el-menu-item
|
||||
:style="{ '--theme': theme }"
|
||||
:index="item.path"
|
||||
:key="index"
|
||||
v-if="index < visibleNumber">
|
||||
<!-- <svg-icon :icon-class="item.meta.icon" /> -->
|
||||
<span class="menu-box">
|
||||
<span class="menu-dot"></span>
|
||||
{{ item.meta.title }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
|
||||
<!-- 顶部菜单超出数量折叠 -->
|
||||
<el-submenu
|
||||
:style="{ '--theme': theme }"
|
||||
index="more"
|
||||
v-if="topMenus.length > visibleNumber">
|
||||
<template slot="title">更多菜单</template>
|
||||
<template v-for="(item, index) in topMenus">
|
||||
<el-menu-item
|
||||
:index="item.path"
|
||||
:key="index"
|
||||
v-if="index >= visibleNumber">
|
||||
<!-- <svg-icon :icon-class="item.meta.icon" /> -->
|
||||
<span class="menu-box">
|
||||
<span class="menu-dot"></span>
|
||||
{{ item.meta.title }}
|
||||
</span>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
</el-submenu>
|
||||
</el-menu>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { mapGetters } from 'vuex';
|
||||
import { constantRoutes } from '@/router';
|
||||
|
||||
// 隐藏侧边栏路由
|
||||
const hideList = ['/index', '/user/profile'];
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
// 顶部栏初始数
|
||||
visibleNumber: 5,
|
||||
// 当前激活菜单的 index
|
||||
// currentIndex: undefined,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['choicepart']),
|
||||
currentIndex() {
|
||||
return this.choicepart;
|
||||
},
|
||||
theme() {
|
||||
return this.$store.state.settings.theme;
|
||||
},
|
||||
// 顶部显示菜单
|
||||
topMenus() {
|
||||
let topMenus = [];
|
||||
this.routers.map((menu) => {
|
||||
if (menu.hidden !== true) {
|
||||
// 兼容顶部栏一级菜单内部跳转
|
||||
if (menu.path === '/') {
|
||||
topMenus.push(menu.children[0]);
|
||||
} else {
|
||||
topMenus.push(menu);
|
||||
}
|
||||
}
|
||||
});
|
||||
console.log('topMenus:', topMenus);
|
||||
return topMenus;
|
||||
},
|
||||
// 所有的路由信息
|
||||
routers() {
|
||||
return this.$store.state.permission.topbarRouters;
|
||||
},
|
||||
// 设置子路由
|
||||
childrenMenus() {
|
||||
const childrenMenus = [];
|
||||
this.routers.map((router) => {
|
||||
for (let item in router.children) {
|
||||
if (router.children[item].parentPath === undefined) {
|
||||
if (router.path === '/') {
|
||||
router.children[item].path = '/' + router.children[item].path;
|
||||
} else {
|
||||
if (!this.ishttp(router.children[item].path)) {
|
||||
router.children[item].path =
|
||||
router.path + '/' + router.children[item].path;
|
||||
}
|
||||
}
|
||||
router.children[item].parentPath = router.path;
|
||||
}
|
||||
childrenMenus.push(router.children[item]);
|
||||
}
|
||||
});
|
||||
return constantRoutes.concat(childrenMenus);
|
||||
},
|
||||
// 默认激活的菜单
|
||||
activeMenu() {
|
||||
const path = this.$route.path;
|
||||
let activePath = path;
|
||||
if (
|
||||
path !== undefined &&
|
||||
path.lastIndexOf('/') > 0 &&
|
||||
hideList.indexOf(path) === -1
|
||||
) {
|
||||
const tmpPath = path.substring(1, path.length);
|
||||
activePath = '/' + tmpPath.substring(0, tmpPath.indexOf('/'));
|
||||
if (!this.$route.meta.link) {
|
||||
this.$store.dispatch('app/toggleSideBarHide', false);
|
||||
}
|
||||
} else if (!this.$route.children) {
|
||||
activePath = path;
|
||||
this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
}
|
||||
this.activeRoutes(activePath);
|
||||
return activePath;
|
||||
},
|
||||
},
|
||||
beforeMount() {
|
||||
window.addEventListener('resize', this.setVisibleNumber);
|
||||
},
|
||||
beforeDestroy() {
|
||||
window.removeEventListener('resize', this.setVisibleNumber);
|
||||
},
|
||||
mounted() {
|
||||
this.setVisibleNumber();
|
||||
},
|
||||
methods: {
|
||||
// 根据宽度计算设置显示栏数
|
||||
setVisibleNumber() {
|
||||
const width = window.innerWidth - 700;
|
||||
console.log(width);
|
||||
console.log('window.innerWidth:', window.innerWidth);
|
||||
this.visibleNumber = parseInt(width / 110);
|
||||
console.log('this.visibleNumber:', this.visibleNumber);
|
||||
},
|
||||
// 菜单选择事件
|
||||
handleSelect(key, keyPath) {
|
||||
// this.currentIndex = key;
|
||||
const route = this.routers.find((item) => item.path === key);
|
||||
console.log('route:', route);
|
||||
this.$store.dispatch('app/setChoicepart', key);
|
||||
this.toRouter(route);
|
||||
// if (this.ishttp(key)) {
|
||||
// // http(s):// 路径新窗口打开
|
||||
// window.open(key, '_blank');
|
||||
// console.log('aaaaaaaaaaaaaa');
|
||||
// } else if (!route || !route.children) {
|
||||
// // 没有子路由路径内部打开
|
||||
// this.$router.push({ path: key });
|
||||
// this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
// console.log('bbbbbbbbbbbbbbb');
|
||||
// } else {
|
||||
// // 显示左侧联动菜单
|
||||
// this.activeRoutes(key);
|
||||
// if (!this.$route.meta.link) {
|
||||
// this.$store.dispatch('app/toggleSideBarHide', false);
|
||||
// }
|
||||
// console.log('cccccccccccccccc');
|
||||
// }
|
||||
},
|
||||
toRouter(item) {
|
||||
console.log(item);
|
||||
if (item.children) {
|
||||
this.toRouter(item.children[0]);
|
||||
} else {
|
||||
this.$router.push({ name: item.name });
|
||||
}
|
||||
},
|
||||
// 当前激活的路由
|
||||
activeRoutes(key) {
|
||||
const routes = [];
|
||||
if (this.childrenMenus && this.childrenMenus.length > 0) {
|
||||
this.childrenMenus.map((item) => {
|
||||
if (
|
||||
key === item.parentPath ||
|
||||
(key === 'index' && '' === item.path)
|
||||
) {
|
||||
routes.push(item);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (routes.length > 0) {
|
||||
this.$store.commit('SET_SIDEBAR_ROUTERS', routes);
|
||||
} else {
|
||||
this.$store.dispatch('app/toggleSideBarHide', true);
|
||||
}
|
||||
},
|
||||
ishttp(url) {
|
||||
return url.indexOf('http://') !== -1 || url.indexOf('https://') !== -1;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.warnmenu-container.el-menu.el-menu--horizontal > .el-menu-item.is-active {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
.warnmenu-container.el-menu.el-menu--horizontal > .el-submenu.is-active {
|
||||
--theme: none !important;
|
||||
}
|
||||
.warnmenu-container.el-menu--horizontal > .el-menu-item {
|
||||
float: left;
|
||||
height: 84px !important;
|
||||
line-height: 84px !important;
|
||||
color: #000 !important;
|
||||
padding: 0 5px !important;
|
||||
font-size: 18px;
|
||||
.menu-box {
|
||||
// color: #fff;
|
||||
}
|
||||
}
|
||||
.warnmenu-container.el-menu--horizontal
|
||||
> .el-menu-item:not(.is-disabled):hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.warnmenu-container.el-menu {
|
||||
background-color: transparent;
|
||||
}
|
||||
.warnmenu-container.el-menu.el-menu--horizontal {
|
||||
border: none;
|
||||
}
|
||||
.warnmenu-container.el-menu--horizontal > .el-menu-item.is-active,
|
||||
.el-menu--horizontal > .el-submenu.is-active .el-submenu__title {
|
||||
border-bottom: 2px solid #{'var(--theme)'} !important;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
/* submenu item */
|
||||
.warnmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title {
|
||||
float: left;
|
||||
height: 84px !important;
|
||||
line-height: 91px !important;
|
||||
color: #000 !important;
|
||||
padding: 0 5px !important;
|
||||
margin: 0 10px !important;
|
||||
font-size: 18px;
|
||||
}
|
||||
.warnmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
.warnmenu-container.el-menu--horizontal > .el-submenu .el-submenu__title i {
|
||||
// color: #fff;
|
||||
}
|
||||
</style>
|
||||
<style lang="scss" scoped>
|
||||
.menu-box {
|
||||
padding: 3px 10px 5px 10px;
|
||||
border-radius: 30px;
|
||||
color: #000;
|
||||
}
|
||||
.menu-dot {
|
||||
display: inline-block;
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border-radius: 50%;
|
||||
background: #0b58ff;
|
||||
margin-right: 3px;
|
||||
margin-bottom: 2px;
|
||||
opacity: 0;
|
||||
}
|
||||
</style>
|
196
src/views/abnormalWarning/index.vue
Normal file
@ -0,0 +1,196 @@
|
||||
<template>
|
||||
<div class="warning-page">
|
||||
<navbar />
|
||||
<div class="main-box">
|
||||
<div class="title">
|
||||
<span></span>
|
||||
异常警告
|
||||
<div class="return-home" @click="toHome">
|
||||
<svg-icon
|
||||
icon-class="alarm-home"
|
||||
style="font-size: 20px; position: relative; top: 2px" />
|
||||
返回首页
|
||||
</div>
|
||||
</div>
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
removeBlue
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<base-table
|
||||
:page="1"
|
||||
:limit="100000"
|
||||
:table-props="tableProps"
|
||||
:table-data="list"
|
||||
:max-height="tableH" />
|
||||
</div>
|
||||
<div class="footer">
|
||||
<img src="../../assets/img/alarm-bg.png" alt="" />
|
||||
<div>© 中建材智能自动化研究院有限公司</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Navbar from './components/Navbar';
|
||||
import moment from 'moment';
|
||||
import tableHeightMixin from '@/mixins/tableHeightMixin';
|
||||
export default {
|
||||
name: 'AbnormalWarning',
|
||||
mixins: [tableHeightMixin],
|
||||
components: { Navbar },
|
||||
data() {
|
||||
return {
|
||||
formConfig: [
|
||||
{
|
||||
type: 'input',
|
||||
label: '报警来源',
|
||||
placeholder: '报警来源',
|
||||
param: 'content',
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
label: '时间段',
|
||||
selectOptions: [],
|
||||
labelField: 'name',
|
||||
valueField: 'id',
|
||||
param: 'typeId',
|
||||
filterable: true,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
label: '报警级别',
|
||||
selectOptions: [],
|
||||
labelField: 'name',
|
||||
valueField: 'id',
|
||||
param: 'typeId',
|
||||
filterable: true,
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '查询',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
],
|
||||
heightNum: 280,
|
||||
tableProps: [
|
||||
{
|
||||
prop: 'createTime',
|
||||
label: '报警时间',
|
||||
width: 180,
|
||||
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
|
||||
},
|
||||
{
|
||||
prop: 'productionLineName1',
|
||||
label: '报警来源',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
{
|
||||
prop: 'productionLineName2',
|
||||
label: '报警类型',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
{
|
||||
prop: 'productionLineName3',
|
||||
label: '报警级别',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
{
|
||||
prop: 'productionLineName4',
|
||||
label: '报警原因',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
{
|
||||
prop: 'sectionName5',
|
||||
label: '报警详情',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
],
|
||||
list: [
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
{ productionLineName: 1 },
|
||||
],
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
buttonClick(val) {},
|
||||
toHome() {
|
||||
this.$router.push({ path: '/' });
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.warning-page {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
.main-box {
|
||||
position: relative;
|
||||
width: 64.58%;
|
||||
height: calc(100vh - 160px);
|
||||
background-color: #fff;
|
||||
border-radius: 24px;
|
||||
margin: 16px auto 0;
|
||||
z-index: 10;
|
||||
padding: 24px 32px;
|
||||
.title {
|
||||
font-size: 16px;
|
||||
color: #000000;
|
||||
position: relative;
|
||||
cursor: pointer;
|
||||
span {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
width: 4px;
|
||||
height: 16px;
|
||||
background-color: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
margin-top: 4px;
|
||||
}
|
||||
.return-home {
|
||||
position: absolute;
|
||||
color: rgba(0, 0, 0, 0.3);
|
||||
font-size: 14px;
|
||||
right: 0px;
|
||||
top: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
bottom: -3px;
|
||||
z-index: 8;
|
||||
img {
|
||||
width: 100%;
|
||||
height: 220px;
|
||||
}
|
||||
div {
|
||||
width: 100%;
|
||||
color: red;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
color: #c7c7c7;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
@ -2,17 +2,27 @@
|
||||
<div class="choicepart-container">
|
||||
<navbar />
|
||||
<div class="choicepart-wrapper">
|
||||
<div class="choicepart-box" id="choicepartBox" :style="'transform:scale('+scale+');width:1574px;height:538px;'" v-show="showItem">
|
||||
<div
|
||||
class="choicepart-box"
|
||||
id="choicepartBox"
|
||||
:style="'transform:scale(' + scale + ');width:1574px;height:538px;'"
|
||||
v-show="showItem">
|
||||
<div class="choicepart-line1">
|
||||
<div
|
||||
v-for="(item, index) in menuArr1"
|
||||
:key="index"
|
||||
class="choicepart-item"
|
||||
@click="handelClick(item, item.choicepart)"
|
||||
:style="{opacity: item.visible?1:0.4, pointerEvents:item.visible?'auto':'none'}"
|
||||
>
|
||||
:style="{
|
||||
opacity: item.visible ? 1 : 0.4,
|
||||
pointerEvents: item.visible ? 'auto' : 'none',
|
||||
}">
|
||||
<div>
|
||||
<img :src="require(`../../assets/images/choicepart/${item.name}.png`)" alt="">
|
||||
<img
|
||||
:src="
|
||||
require(`../../assets/images/choicepart/${item.name}.png`)
|
||||
"
|
||||
alt="" />
|
||||
</div>
|
||||
<div class="choicepart-item-title">{{ item.meta.title }}</div>
|
||||
</div>
|
||||
@ -23,10 +33,16 @@
|
||||
:key="index"
|
||||
class="choicepart-item"
|
||||
@click="handelClick(item, item.choicepart)"
|
||||
:style="{opacity: item.visible?1:0.4, pointerEvents:item.visible?'auto':'none'}"
|
||||
>
|
||||
:style="{
|
||||
opacity: item.visible ? 1 : 0.4,
|
||||
pointerEvents: item.visible ? 'auto' : 'none',
|
||||
}">
|
||||
<div>
|
||||
<img :src="require(`../../assets/images/choicepart/${item.name}.png`)" alt="">
|
||||
<img
|
||||
:src="
|
||||
require(`../../assets/images/choicepart/${item.name}.png`)
|
||||
"
|
||||
alt="" />
|
||||
</div>
|
||||
<div class="choicepart-item-title">{{ item.meta.title }}</div>
|
||||
</div>
|
||||
@ -37,8 +53,8 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import Navbar from './components/Navbar'
|
||||
import { debounce } from '@/utils/debounce'
|
||||
import Navbar from './components/Navbar';
|
||||
import { debounce } from '@/utils/debounce';
|
||||
export default {
|
||||
components: { Navbar },
|
||||
name: 'choicePart',
|
||||
@ -52,57 +68,57 @@ export default {
|
||||
title: '基础核心',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Order',
|
||||
title: '订单管理',
|
||||
name: 'Produce',
|
||||
title: '生产管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Equipment',
|
||||
title: '设备管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Group',
|
||||
title: '班组管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Quality',
|
||||
title: '质量管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Warehouse',
|
||||
title: '仓库管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Energy',
|
||||
title: '能源管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
menuArr2: [
|
||||
{
|
||||
@ -110,99 +126,108 @@ export default {
|
||||
title: '包装管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Material',
|
||||
title: '物料管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Extend',
|
||||
title: '工艺管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Delivery',
|
||||
title: '成品发货',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Report',
|
||||
title: '报表管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'System',
|
||||
title: '系统管理',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: ''
|
||||
}
|
||||
}
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
name: 'Devconfig',
|
||||
title: '开发配置',
|
||||
visible: false,
|
||||
meta: {
|
||||
title: '',
|
||||
},
|
||||
},
|
||||
],
|
||||
showItem: false
|
||||
}
|
||||
showItem: false,
|
||||
};
|
||||
},
|
||||
// computed:{
|
||||
// ...mapGetters(['sidebarRouters'])
|
||||
// },
|
||||
mounted() {
|
||||
this.getMsg()
|
||||
this.getMsg();
|
||||
this.boxReset = debounce(() => {
|
||||
this.resetSize()
|
||||
}, 300)
|
||||
this.boxReset()
|
||||
this.resetSize();
|
||||
}, 300);
|
||||
this.boxReset();
|
||||
window.addEventListener('resize', () => {
|
||||
this.boxReset()
|
||||
})
|
||||
this.boxReset();
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
getMsg() {
|
||||
let menuList = this.$store.state.permission.sidebarRouters
|
||||
console.log(menuList)
|
||||
let menuList = this.$store.state.permission.sidebarRouters;
|
||||
console.log('sss', menuList);
|
||||
console.log(menuList);
|
||||
if (menuList.length > 0) {
|
||||
for (let i = 0; i < menuList.length; i++) {
|
||||
for (let k = 0; k < 7; k++) {
|
||||
if (menuList[i].name === this.menuArr1[k].name) {
|
||||
this.menuArr1[k].visible = true
|
||||
this.menuArr1[k].id = menuList[i].id
|
||||
this.menuArr1[k].choicepart = i
|
||||
this.menuArr1[k].children = menuList[i].children
|
||||
this.menuArr1[k].meta = menuList[i].meta
|
||||
this.menuArr1[k].visible = true;
|
||||
this.menuArr1[k].id = menuList[i].id;
|
||||
this.menuArr1[k].choicepart = i;
|
||||
this.menuArr1[k].children = menuList[i].children;
|
||||
this.menuArr1[k].meta = menuList[i].meta;
|
||||
}
|
||||
}
|
||||
for (let j = 0; j < 6; j++) {
|
||||
for (let j = 0; j < 7; j++) {
|
||||
if (menuList[i].name === this.menuArr2[j].name) {
|
||||
this.menuArr2[j].visible = true
|
||||
this.menuArr2[j].id = menuList[i].id
|
||||
this.menuArr2[j].choicepart = i
|
||||
this.menuArr2[j].children = menuList[i].children
|
||||
this.menuArr2[j].meta = menuList[i].meta
|
||||
this.menuArr2[j].visible = true;
|
||||
this.menuArr2[j].id = menuList[i].id;
|
||||
this.menuArr2[j].choicepart = i;
|
||||
this.menuArr2[j].children = menuList[i].children;
|
||||
this.menuArr2[j].meta = menuList[i].meta;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(this.menuArr1)
|
||||
console.log(this.menuArr2)
|
||||
console.log(this.menuArr1);
|
||||
console.log(this.menuArr2);
|
||||
},
|
||||
handelClick(item, index) {
|
||||
// this.$router.push({name: 'SystemUser'})
|
||||
this.$store.dispatch('app/setChoicepart', index)
|
||||
this.toRouter(item)
|
||||
this.$store.dispatch('app/setChoicepart', index);
|
||||
this.toRouter(item);
|
||||
// if (item.meta.unuse) {
|
||||
// this.$message.warning(this.$t('暂无数据'))
|
||||
// } else {
|
||||
@ -210,38 +235,38 @@ export default {
|
||||
// }
|
||||
},
|
||||
toRouter(item) {
|
||||
console.log(item)
|
||||
console.log(item);
|
||||
if (item.children) {
|
||||
this.toRouter(item.children[0])
|
||||
this.toRouter(item.children[0]);
|
||||
} else {
|
||||
this.$router.push({ name: item.name })
|
||||
this.$router.push({ name: item.name });
|
||||
}
|
||||
},
|
||||
resetSize() {
|
||||
let _this = this
|
||||
_this.showItem = false
|
||||
_this.loading = true
|
||||
let choicepartBox = document.querySelector('#choicepartBox')
|
||||
let rw = parseFloat(window.innerWidth)
|
||||
let rh = parseFloat(window.innerHeight)
|
||||
let bw = parseFloat(choicepartBox.style.width)
|
||||
let bh = parseFloat(choicepartBox.style.height)
|
||||
let wx = 0.82/(bw / rw)
|
||||
let hx = 0.56/(bh / rh)
|
||||
_this.scale = wx > hx ? hx : wx
|
||||
setTimeout(_this.showItemFun, 700)
|
||||
let _this = this;
|
||||
_this.showItem = false;
|
||||
_this.loading = true;
|
||||
let choicepartBox = document.querySelector('#choicepartBox');
|
||||
let rw = parseFloat(window.innerWidth);
|
||||
let rh = parseFloat(window.innerHeight);
|
||||
let bw = parseFloat(choicepartBox.style.width);
|
||||
let bh = parseFloat(choicepartBox.style.height);
|
||||
let wx = 0.82 / (bw / rw);
|
||||
let hx = 0.56 / (bh / rh);
|
||||
_this.scale = wx > hx ? hx : wx;
|
||||
setTimeout(_this.showItemFun, 700);
|
||||
},
|
||||
showItemFun() {
|
||||
this.loading = false
|
||||
this.showItem = true
|
||||
}
|
||||
this.loading = false;
|
||||
this.showItem = true;
|
||||
},
|
||||
},
|
||||
beforeDestroy() {
|
||||
this.showItem = false
|
||||
}
|
||||
}
|
||||
this.showItem = false;
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style lang='scss' scoped>
|
||||
<style lang="scss" scoped>
|
||||
.choicepart-container {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
@ -272,7 +297,8 @@ export default {
|
||||
.choicepart-item {
|
||||
width: 184px;
|
||||
height: 224px;
|
||||
background: url('../../assets/images/choicepart/choice-item-back.png') no-repeat;
|
||||
background: url('../../assets/images/choicepart/choice-item-back.png')
|
||||
no-repeat;
|
||||
background-size: 100% 100%;
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
@ -310,7 +336,7 @@ export default {
|
||||
.choicepart-footer {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
color: #C7C7C7;
|
||||
color: #c7c7c7;
|
||||
user-select: none;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1px;
|
||||
|
@ -1,8 +1,8 @@
|
||||
/*
|
||||
* @Author: zwq
|
||||
* @Date: 2022-08-24 11:19:43
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-09-21 16:02:07
|
||||
* @LastEditors: zwq
|
||||
* @LastEditTime: 2024-07-22 11:15:10
|
||||
* @Description:
|
||||
*/
|
||||
export default {
|
||||
@ -17,7 +17,7 @@ export default {
|
||||
},
|
||||
tableData: [],
|
||||
listQuery: {
|
||||
pageSize: 10,
|
||||
pageSize: 20,
|
||||
pageNo: 1,
|
||||
total: 1,
|
||||
},
|
||||
@ -101,11 +101,8 @@ export default {
|
||||
},
|
||||
// 删除
|
||||
deleteHandle(id, name, index) {
|
||||
this.$confirm(`确定对${name ? '[名称=' + name + ']' : '[序号=' + index + ']'}进行删除操作?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
this.$modal
|
||||
.delConfirm(name ? '名称: ' + name : '序号: ' + index)
|
||||
.then(() => {
|
||||
this.urlOptions.deleteURL(id).then(({ data }) => {
|
||||
this.$message({
|
||||
|
100
src/views/core/oldBase/lineBindProduct/index.vue
Normal file
@ -0,0 +1,100 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2023-08-02 15:12:42
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-10-13 16:35:03
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<search-bar
|
||||
:formConfigs="[{ label: '产线在制产品', type: 'title' }]"
|
||||
ref="searchBarForm" />
|
||||
<base-table
|
||||
v-loading="dataListLoading"
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:table-data="tableData"
|
||||
@emitFun="inputChange" />
|
||||
<pagination
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:total="listQuery.total"
|
||||
@pagination="getDataList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicPage from '../../mixins/basic-page';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import { getLineBindProductPage } from '@/api/core/base/lineBindProduct';
|
||||
import selectProduct from './selectProduct';
|
||||
import { getProductPage } from '@/api/core/base/product';
|
||||
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'lineName',
|
||||
label: '产线'
|
||||
},
|
||||
{
|
||||
prop: 'productName',
|
||||
label: '在制产品',
|
||||
list: [],
|
||||
subcomponent: selectProduct,
|
||||
},
|
||||
{
|
||||
prop: 'recordTime',
|
||||
label: '开始时间',
|
||||
filter: parseTime,
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
mixins: [basicPage, selectProduct],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: getLineBindProductPage,
|
||||
},
|
||||
tableProps,
|
||||
tableData: [],
|
||||
// formConfig: [
|
||||
// {
|
||||
// type: 'button',
|
||||
// btnName: '同步',
|
||||
// name: 'search',
|
||||
// color: 'primary',
|
||||
// },
|
||||
// ],
|
||||
};
|
||||
},
|
||||
components: {},
|
||||
created() {
|
||||
const params = {
|
||||
pageSize: 100,
|
||||
pageNo: 1,
|
||||
};
|
||||
getProductPage(params).then((response) => {
|
||||
this.tableProps[1].list = response.data.list;
|
||||
console.log('打印', this.tableProps[1].list)
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.listQuery.pageNo = 1;
|
||||
this.listQuery.pageSize = 10;
|
||||
this.getDataList();
|
||||
break;
|
||||
default:
|
||||
console.log(val);
|
||||
}
|
||||
},
|
||||
inputChange() {
|
||||
this.getDataList();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
79
src/views/core/oldBase/lineBindProduct/selectProduct.vue
Normal file
@ -0,0 +1,79 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2023-08-03 14:09:18
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-10-13 16:47:25
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<div class="tableInner">
|
||||
<el-popover
|
||||
placement="top"
|
||||
title="切换在制产品"
|
||||
width="160"
|
||||
v-model="visible">
|
||||
<el-select v-model="list.string" style="margin: 5px;" filterable>
|
||||
<el-option
|
||||
v-for="item in injectData.list"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id + '+' + item.name"></el-option>
|
||||
</el-select>
|
||||
<div style="text-align: right; margin: 0">
|
||||
<el-button size="mini" type="text" @click="visible = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button type="primary" size="mini" @click="changeInput">
|
||||
确定
|
||||
</el-button>
|
||||
</div>
|
||||
<el-button type="text" slot="reference">
|
||||
<svg-icon icon-class="changelogo"/>
|
||||
</el-button>
|
||||
</el-popover>
|
||||
<el-input readonly v-model="list.productName" style="width: 50%;margin-left: 5px" ></el-input>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { switchLineBindProduct } from '@/api/core/base/lineBindProduct';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
injectData: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
list: this.injectData,
|
||||
visible: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
console.log('hello', this.list)
|
||||
},
|
||||
methods: {
|
||||
changeInput() {
|
||||
const data = {
|
||||
id: this.list.id,
|
||||
productId: this.list.string.split('+')[0],
|
||||
productName: this.list.string.split('+')[1],
|
||||
};
|
||||
switchLineBindProduct(data).then((response) => {
|
||||
this.$modal.msgSuccess('修改成功');
|
||||
this.visible = false;
|
||||
this.list.productName = this.list.string.split('+')[1]
|
||||
this.$emit('emitData');
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
.tableInner .el-input__inner {
|
||||
border: none;
|
||||
padding: 0;
|
||||
height: 33px;
|
||||
}
|
||||
</style>
|
144
src/views/core/oldBase/lineBindProductLog/index.vue
Normal file
@ -0,0 +1,144 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<base-table
|
||||
v-loading="dataListLoading"
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:table-data="tableData" />
|
||||
<pagination
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:total="listQuery.total"
|
||||
@pagination="getDataList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicPage from '../../mixins/basic-page';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import { getLineBindProductLogPage } from '@/api/core/base/lineBindProductLog';
|
||||
import { getProductionLinePage } from '@/api/core/base/productionLine';
|
||||
import { getProductPage } from '@/api/core/base/product';
|
||||
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'productionLineName',
|
||||
label: '产线'
|
||||
},
|
||||
{
|
||||
prop: 'productName',
|
||||
label: '在制产品'
|
||||
},
|
||||
{
|
||||
prop: 'startTime',
|
||||
label: '开始时间',
|
||||
filter: parseTime,
|
||||
},
|
||||
{
|
||||
prop: 'endTime',
|
||||
label: '结束时间',
|
||||
filter: parseTime,
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: getLineBindProductLogPage,
|
||||
},
|
||||
tableProps,
|
||||
tableData: [],
|
||||
optionArrUrl: [getProductionLinePage, getProductPage],
|
||||
formConfig: [
|
||||
{
|
||||
type: 'select',
|
||||
label: '产线',
|
||||
selectOptions: [],
|
||||
param: 'productionLineId',
|
||||
defaultSelect: '',
|
||||
filterable: true,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
label: '在制产品',
|
||||
selectOptions: [],
|
||||
param: 'productId',
|
||||
defaultSelect: '',
|
||||
filterable: true,
|
||||
},
|
||||
{
|
||||
type: 'datePicker',
|
||||
label: '时间',
|
||||
dateType: 'daterange',
|
||||
format: 'yyyy-MM-dd',
|
||||
valueFormat: 'yyyy-MM-dd HH:mm:ss',
|
||||
rangeSeparator: '-',
|
||||
startPlaceholder: '开始时间',
|
||||
endPlaceholder: '结束时间',
|
||||
param: 'startTime',
|
||||
valueFormat: 'timestamp'
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '搜索',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '重置',
|
||||
name: 'reset',
|
||||
},
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
},
|
||||
created() {
|
||||
this.getArr();
|
||||
},
|
||||
methods: {
|
||||
getArr() {
|
||||
const params = {
|
||||
page: 1,
|
||||
limit: 500,
|
||||
};
|
||||
this.optionArrUrl.forEach((item, index) => {
|
||||
item(params).then((response) => {
|
||||
this.formConfig[index].selectOptions = response.data.list;
|
||||
});
|
||||
});
|
||||
},
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.listQuery.pageNo = 1;
|
||||
this.listQuery.pageSize = 10;
|
||||
this.listQuery.productionLineId = val.productionLineId;
|
||||
this.listQuery.productId = val.productId;
|
||||
this.listQuery.startTime = val.startTime;
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'reset':
|
||||
this.$refs.searchBarForm.resetForm();
|
||||
this.listQuery = {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
total: 1,
|
||||
};
|
||||
this.getDataList();
|
||||
break;
|
||||
default:
|
||||
console.log(val);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
448
src/views/core/oldBase/product/add-or-updata.vue
Normal file
@ -0,0 +1,448 @@
|
||||
<template>
|
||||
<el-drawer
|
||||
:visible.sync="visible"
|
||||
:show-close="false"
|
||||
:wrapper-closable="false"
|
||||
class="drawer"
|
||||
size="60%">
|
||||
<small-title slot="title" :no-padding="true">
|
||||
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
|
||||
</small-title>
|
||||
|
||||
<div class="content">
|
||||
<div class="visual-part">
|
||||
<el-form
|
||||
ref="dataForm"
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
label-width="100px"
|
||||
label-position="top"
|
||||
@keyup.enter.native="dataFormSubmit">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产品编码" prop="code">
|
||||
<el-input
|
||||
v-model="dataForm.code"
|
||||
clearable
|
||||
:disabled="isdetail"
|
||||
placeholder="请输入产品编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产品名称" prop="name">
|
||||
<el-input
|
||||
v-model="dataForm.name"
|
||||
clearable
|
||||
:disabled="isdetail"
|
||||
placeholder="请输入产品名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产品类型" prop="typeDictValue">
|
||||
<el-select
|
||||
v-model="dataForm.typeDictValue"
|
||||
style="width: 100%"
|
||||
:disabled="isdetail"
|
||||
placeholder="请选择产品类型">
|
||||
<el-option
|
||||
v-for="dict in getDictDatas(DICT_TYPE.PRODUCT_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位" prop="unitDictValue">
|
||||
<el-select
|
||||
v-model="dataForm.unitDictValue"
|
||||
style="width: 100%"
|
||||
:disabled="isdetail"
|
||||
placeholder="请选择单位">
|
||||
<el-option
|
||||
v-for="dict in getDictDatas(DICT_TYPE.UNIT_DICT)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规格" prop="specifications">
|
||||
<el-input
|
||||
:disabled="isdetail"
|
||||
v-model="dataForm.specifications"
|
||||
placeholder="请输入规格" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位平方数" prop="area">
|
||||
<el-input
|
||||
:disabled="isdetail"
|
||||
v-model="dataForm.area"
|
||||
placeholder="请输入单位平方数" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="完成单位产品用时" prop="processTime">
|
||||
<el-input
|
||||
:disabled="isdetail"
|
||||
v-model="dataForm.processTime"
|
||||
placeholder="请输入完成单位产品用时" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<small-title
|
||||
style="margin: 16px 0; padding-left: 8px"
|
||||
:no-padding="true">
|
||||
产品属性列表
|
||||
</small-title>
|
||||
|
||||
<div class="attr-list">
|
||||
<base-table
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:add-button-show="isdetail ? null : '添加属性'"
|
||||
@emitButtonClick="addNew()"
|
||||
:table-data="productAttributeList">
|
||||
<method-btn
|
||||
v-if="!isdetail"
|
||||
slot="handleBtn"
|
||||
:width="120"
|
||||
label="操作"
|
||||
:method-list="tableBtn"
|
||||
@clickBtn="handleClick" />
|
||||
</base-table>
|
||||
<pagination
|
||||
v-show="listQuery.total > 0"
|
||||
:total="listQuery.total"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page-sizes="[5, 10, 15]"
|
||||
@pagination="getList" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div style="position: absolute; bottom: 24px; right: 24px">
|
||||
<el-button style="margin-right: 10px" @click="goback()">返回</el-button>
|
||||
<el-button v-if="isdetail" type="primary" @click="goEdit()">
|
||||
编辑
|
||||
</el-button>
|
||||
<span v-if="!isdetail">
|
||||
<el-button type="primary" @click="dataFormSubmit()">保存</el-button>
|
||||
<el-button
|
||||
v-if="dataForm.id && !isdetail"
|
||||
type="primary"
|
||||
@click="addNew()">
|
||||
添加属性
|
||||
</el-button>
|
||||
</span>
|
||||
</div> -->
|
||||
|
||||
<div class="drawer-body__footer">
|
||||
<el-button style="" @click="goback()">取消</el-button>
|
||||
<el-button v-if="isdetail" type="primary" @click="goEdit()">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
|
||||
</div>
|
||||
|
||||
<product-attr-add
|
||||
v-if="addOrUpdateVisible"
|
||||
ref="addOrUpdate"
|
||||
:product-id="dataForm.id"
|
||||
@refreshDataList="getList" />
|
||||
</el-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
deleteProductAttr,
|
||||
getProductAttrPage,
|
||||
} from '@/api/core/base/productAttr';
|
||||
|
||||
import {
|
||||
createProduct,
|
||||
updateProduct,
|
||||
getProduct,
|
||||
getCode,
|
||||
} from '@/api/core/base/product';
|
||||
import productAttrAdd from './attr-add';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import SmallTitle from './SmallTitle';
|
||||
|
||||
const tableBtn = [
|
||||
{
|
||||
type: 'edit',
|
||||
btnName: '编辑',
|
||||
},
|
||||
{
|
||||
type: 'delete',
|
||||
btnName: '删除',
|
||||
},
|
||||
];
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'createTime',
|
||||
label: '添加时间',
|
||||
filter: parseTime,
|
||||
},
|
||||
{
|
||||
prop: 'name',
|
||||
label: '属性名',
|
||||
},
|
||||
{
|
||||
prop: 'value',
|
||||
label: '属性值',
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
components: { productAttrAdd, SmallTitle },
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
addOrUpdateVisible: false,
|
||||
tableBtn,
|
||||
tableProps,
|
||||
productAttributeList: [],
|
||||
dataForm: {
|
||||
id: null,
|
||||
name: '', // 产品名称
|
||||
code: '', // 产品编码
|
||||
area: 0, // 单位平方数(float only)
|
||||
typeDictValue: null, // 产品类型id
|
||||
processTime: null, // 单位产品用时 (s)
|
||||
specifications: '', // 规格
|
||||
unitDictValue: '', // 单位id
|
||||
},
|
||||
listQuery: {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
total: 0,
|
||||
},
|
||||
dataRule: {
|
||||
code: [
|
||||
{
|
||||
required: true,
|
||||
message: '产品编码不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
// {
|
||||
// type: 'number',
|
||||
// message: '产品编码为数字类型',
|
||||
// trigger: 'blur',
|
||||
// transfom: 'val => Number(val)',
|
||||
// },
|
||||
],
|
||||
name: [
|
||||
{
|
||||
required: true,
|
||||
message: '产品名称不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
typeDictValue: [
|
||||
{
|
||||
required: true,
|
||||
message: '产品类型不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
],
|
||||
area: [
|
||||
{
|
||||
type: 'number',
|
||||
message: '请输入正确的数值',
|
||||
trigger: 'change',
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
],
|
||||
processTime: [
|
||||
{
|
||||
required: true,
|
||||
message: '完成单位产品用时不能为空',
|
||||
trigger: 'blur',
|
||||
},
|
||||
{
|
||||
type: 'number',
|
||||
message: '请输入正确的数值',
|
||||
trigger: 'blur',
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
],
|
||||
},
|
||||
isdetail: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
initData() {
|
||||
this.productAttributeList.splice(0);
|
||||
this.listQuery.total = 0;
|
||||
},
|
||||
init(id, isdetail) {
|
||||
this.initData();
|
||||
this.isdetail = isdetail || false;
|
||||
this.dataForm.id = id || null;
|
||||
this.visible = true;
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].resetFields();
|
||||
|
||||
if (this.dataForm.id) {
|
||||
// 获取产品详情
|
||||
getProduct(id).then((response) => {
|
||||
this.dataForm = response.data;
|
||||
});
|
||||
// 获取产品的属性列表
|
||||
this.getList();
|
||||
} else {
|
||||
getCode().then((res) => {
|
||||
this.dataForm.code = res.data;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
getList() {
|
||||
// 获取产品的属性列表
|
||||
getProductAttrPage({
|
||||
...this.listQuery,
|
||||
productId: this.dataForm.id,
|
||||
}).then((response) => {
|
||||
this.productAttributeList = response.data.list;
|
||||
this.listQuery.total = response.data.total;
|
||||
});
|
||||
},
|
||||
handleClick(raw) {
|
||||
if (raw.type === 'delete') {
|
||||
this.$confirm(
|
||||
`确定对${
|
||||
raw.data.name
|
||||
? '[名称=' + raw.data.name + ']'
|
||||
: '[序号=' + raw.data._pageIndex + ']'
|
||||
}进行删除操作?`,
|
||||
'提示',
|
||||
{
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}
|
||||
)
|
||||
.then(() => {
|
||||
deleteProductAttr(raw.data.id).then(({ data }) => {
|
||||
this.$message({
|
||||
message: '操作成功',
|
||||
type: 'success',
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
this.getList();
|
||||
},
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
} else {
|
||||
this.addNew(raw.data.id);
|
||||
}
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
// 修改的提交
|
||||
if (this.dataForm.id) {
|
||||
updateProduct(this.dataForm).then((response) => {
|
||||
this.$modal.msgSuccess('修改成功');
|
||||
this.visible = false;
|
||||
this.$emit('refreshDataList');
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProduct(this.dataForm).then((response) => {
|
||||
this.$modal.msgSuccess('新增成功');
|
||||
this.visible = false;
|
||||
this.$emit('refreshDataList');
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
goEdit() {
|
||||
this.isdetail = false;
|
||||
},
|
||||
// 新增 / 修改
|
||||
addNew(id) {
|
||||
this.addOrUpdateVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init(id);
|
||||
});
|
||||
},
|
||||
goback() {
|
||||
this.$emit('refreshDataList');
|
||||
this.visible = false;
|
||||
this.initData();
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.drawer >>> .el-drawer {
|
||||
border-radius: 8px 0 0 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.drawer >>> .el-form-item__label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.drawer >>> .el-drawer__header {
|
||||
margin: 0;
|
||||
padding: 32px 32px 24px;
|
||||
border-bottom: 1px solid #dcdfe6;
|
||||
}
|
||||
.drawer >>> .el-drawer__body {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.drawer >>> .content {
|
||||
padding: 30px 24px;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
/* height: 100%; */
|
||||
}
|
||||
|
||||
.drawer >>> .visual-part {
|
||||
flex: 1 auto;
|
||||
max-height: 76vh;
|
||||
overflow: hidden;
|
||||
overflow-y: scroll;
|
||||
padding-right: 10px; /* 调整滚动条样式 */
|
||||
}
|
||||
|
||||
.drawer >>> .el-form,
|
||||
.drawer >>> .attr-list {
|
||||
padding: 0 16px;
|
||||
}
|
||||
|
||||
.drawer-body__footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 18px;
|
||||
}
|
||||
</style>
|
139
src/views/core/oldBase/product/attr-add.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
:width="'35%'"
|
||||
:append-to-body="true"
|
||||
:close-on-click-modal="false"
|
||||
class="dialog">
|
||||
<template #title>
|
||||
<slot name="title">
|
||||
<div class="titleStyle">
|
||||
{{ !dataForm.id ? '新增' : '编辑' }}
|
||||
</div>
|
||||
</slot>
|
||||
</template>
|
||||
|
||||
<el-form
|
||||
ref="dataForm"
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
label-width="100px"
|
||||
@keyup.enter.native="dataFormSubmit()">
|
||||
<el-form-item label="属性名" prop="name">
|
||||
<el-input
|
||||
v-model="dataForm.name"
|
||||
placeholder="请输入属性名"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="属性值" prop="value">
|
||||
<el-input
|
||||
v-model="dataForm.value"
|
||||
placeholder="请输入属性值"
|
||||
clearable />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row style="text-align: right">
|
||||
<el-button @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
createProductAttr,
|
||||
updateProductAttr,
|
||||
getProductAttr,
|
||||
} from '@/api/core/base/productAttr';
|
||||
|
||||
export default {
|
||||
props: {
|
||||
productId: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
dataForm: {
|
||||
id: 0,
|
||||
name: '',
|
||||
value: '',
|
||||
},
|
||||
dataRule: {
|
||||
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
init(id) {
|
||||
this.dataForm.id = id || '';
|
||||
this.visible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs['dataForm'].resetFields();
|
||||
if (this.dataForm.id) {
|
||||
getProductAttr(this.dataForm.id).then((res) => {
|
||||
const { name, value } = res.data;
|
||||
this.dataForm.name = name;
|
||||
this.dataForm.value = value;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
this.$refs['dataForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
// 修改的提交
|
||||
if (this.dataForm.id) {
|
||||
updateProductAttr({
|
||||
...this.dataForm,
|
||||
productId: this.productId,
|
||||
}).then((response) => {
|
||||
this.$modal.msgSuccess('修改成功');
|
||||
this.visible = false;
|
||||
this.$emit('refreshDataList');
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProductAttr({
|
||||
...this.dataForm,
|
||||
productId: this.productId,
|
||||
}).then((response) => {
|
||||
this.$modal.msgSuccess('新增成功');
|
||||
this.visible = false;
|
||||
this.$emit('refreshDataList');
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog >>> .el-dialog__body {
|
||||
padding: 30px 24px;
|
||||
}
|
||||
.dialog >>> .el-dialog__header {
|
||||
font-size: 16px;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
font-weight: 500;
|
||||
padding: 13px 24px;
|
||||
border-bottom: 1px solid #e9e9e9;
|
||||
}
|
||||
.dialog >>> .el-dialog__header .titleStyle::before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
width: 4px;
|
||||
height: 16px;
|
||||
background-color: #0b58ff;
|
||||
border-radius: 1px;
|
||||
margin-right: 8px;
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
</style>
|
200
src/views/core/oldBase/product/index.vue
Normal file
@ -0,0 +1,200 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2023-08-01 14:55:51
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-10-13 10:27:00
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<base-table
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:table-data="tableData">
|
||||
<method-btn
|
||||
v-if="tableBtn.length"
|
||||
slot="handleBtn"
|
||||
:width="120"
|
||||
label="操作"
|
||||
:method-list="tableBtn"
|
||||
@clickBtn="handleClick" />
|
||||
</base-table>
|
||||
<pagination
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:total="listQuery.total"
|
||||
@pagination="getDataList" />
|
||||
<add-or-update
|
||||
v-if="addOrUpdateVisible"
|
||||
ref="addOrUpdate"
|
||||
@refreshDataList="getDataList" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './add-or-updata';
|
||||
import unitDict from './unitDict';
|
||||
import basicPage from '../../mixins/basic-page';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import {
|
||||
deleteProduct,
|
||||
getProductPage,
|
||||
exportProductExcel,
|
||||
} from '@/api/core/base/product';
|
||||
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'code',
|
||||
label: '产品编码'
|
||||
},
|
||||
{
|
||||
prop: 'name',
|
||||
label: '产品名称'
|
||||
},
|
||||
{
|
||||
prop: 'specifications',
|
||||
label: '规格'
|
||||
},
|
||||
{
|
||||
prop: 'unitDictValue',
|
||||
label: '单位',
|
||||
subcomponent: unitDict,
|
||||
},
|
||||
{
|
||||
prop: 'createTime',
|
||||
label: '创建时间',
|
||||
filter: parseTime
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: getProductPage,
|
||||
deleteURL: deleteProduct,
|
||||
exportURL: exportProductExcel,
|
||||
},
|
||||
tableProps,
|
||||
tableBtn: [
|
||||
this.$auth.hasPermi(`base:product:update`)
|
||||
? {
|
||||
type: 'edit',
|
||||
btnName: '编辑',
|
||||
}
|
||||
: undefined,
|
||||
this.$auth.hasPermi(`base:product:delete`)
|
||||
? {
|
||||
type: 'delete',
|
||||
btnName: '删除',
|
||||
}
|
||||
: undefined,
|
||||
this.$auth.hasPermi(`base:product:update`)
|
||||
? {
|
||||
type: 'detail',
|
||||
btnName: '详情',
|
||||
}
|
||||
: undefined,
|
||||
].filter((v) => v),
|
||||
tableData: [],
|
||||
formConfig: [
|
||||
{
|
||||
type: 'input',
|
||||
label: '产品编码',
|
||||
placeholder: '产品编码',
|
||||
param: 'code',
|
||||
},
|
||||
{
|
||||
type: 'input',
|
||||
label: '产品名称',
|
||||
placeholder: '产品名称',
|
||||
param: 'name',
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '搜索',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
// {
|
||||
// type: 'separate',
|
||||
// },
|
||||
// {
|
||||
// type: 'button',
|
||||
// btnName: '重置',
|
||||
// name: 'reset',
|
||||
// },
|
||||
{
|
||||
type: 'separate',
|
||||
},
|
||||
{
|
||||
type: this.$auth.hasPermi('base:product:create') ? 'button' : '',
|
||||
btnName: '新增',
|
||||
name: 'add',
|
||||
color: 'success',
|
||||
plain: true,
|
||||
},
|
||||
// {
|
||||
// type: 'separate',
|
||||
// type: this.$auth.hasPermi('base:product:create') ? 'separate' : '',
|
||||
// },
|
||||
// {
|
||||
// type: this.$auth.hasPermi('base:product:export') ? 'button' : '',
|
||||
// btnName: '导出',
|
||||
// name: 'export',
|
||||
// color: 'warning',
|
||||
// },
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.listQuery.pageNo = 1;
|
||||
this.listQuery.pageSize = 10;
|
||||
this.listQuery.name = val.name;
|
||||
this.listQuery.code = val.code;
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'reset':
|
||||
this.$refs.searchBarForm.resetForm();
|
||||
this.listQuery = {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
total: 1,
|
||||
};
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'add':
|
||||
this.addOrEditTitle = '新增';
|
||||
this.addOrUpdateVisible = true;
|
||||
this.addOrUpdateHandle();
|
||||
break;
|
||||
case 'export':
|
||||
this.handleExport();
|
||||
break;
|
||||
default:
|
||||
console.log(val);
|
||||
}
|
||||
},
|
||||
otherMethods(val) {
|
||||
this.addOrUpdateVisible = true;
|
||||
this.addOrEditTitle = '详情';
|
||||
this.$nextTick(() => {
|
||||
this.$refs.addOrUpdate.init(val.data.id, true);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
228
src/views/core/oldBase/productAttr/index.vue
Normal file
@ -0,0 +1,228 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品id,关联产品表" prop="productId">
|
||||
<el-input v-model="queryParams.productId" placeholder="请输入产品id,关联产品表" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="属性值" prop="value">
|
||||
<el-input v-model="queryParams.value" placeholder="请输入属性值" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作工具栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||
v-hasPermi="['base:product-attr:create']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['base:product-attr:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="ID" align="center" prop="id" />
|
||||
<el-table-column label="名称" align="center" prop="name" />
|
||||
<el-table-column label="产品id,关联产品表" align="center" prop="productId" />
|
||||
<el-table-column label="属性值" align="center" prop="value" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['base:product-attr:update']">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['base:product-attr:delete']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="产品id,关联产品表" prop="productId">
|
||||
<el-input v-model="form.productId" placeholder="请输入产品id,关联产品表" />
|
||||
</el-form-item>
|
||||
<el-form-item label="属性值" prop="value">
|
||||
<el-input v-model="form.value" placeholder="请输入属性值" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createProductAttr, updateProductAttr, deleteProductAttr, getProductAttr, getProductAttrPage, exportProductAttrExcel } from "@/api/core/base/productAttr";
|
||||
|
||||
export default {
|
||||
name: "ProductAttr",
|
||||
components: {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 产品属性列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
name: null,
|
||||
productId: null,
|
||||
value: null,
|
||||
createTime: [],
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
|
||||
productId: [{ required: true, message: "产品id,关联产品表不能为空", trigger: "blur" }],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 执行查询
|
||||
getProductAttrPage(this.queryParams).then(response => {
|
||||
this.list = response.data.list;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 取消按钮 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
name: undefined,
|
||||
productId: undefined,
|
||||
value: undefined,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加产品属性";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getProductAttr(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改产品属性";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateProductAttr(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProductAttr(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除产品属性编号为"' + id + '"的数据项?').then(function() {
|
||||
return deleteProductAttr(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
// 处理查询参数
|
||||
let params = {...this.queryParams};
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
this.$modal.confirm('是否确认导出所有产品属性数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportProductAttrExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '产品属性.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
153
src/views/core/oldBase/productionLine/add-or-updata.vue
Normal file
@ -0,0 +1,153 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2023-08-01 13:52:10
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-09-21 15:45:07
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-form
|
||||
class="dialog-inner__form"
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
ref="dataForm"
|
||||
@keyup.enter.native="dataFormSubmit()"
|
||||
label-width="90px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产线编码" prop="code">
|
||||
<el-input
|
||||
v-model="dataForm.code"
|
||||
clearable
|
||||
placeholder="请输入产线编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产线名称" prop="name">
|
||||
<el-input
|
||||
v-model="dataForm.name"
|
||||
clearable
|
||||
placeholder="请输入产线名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="factoryId" label="工厂名称">
|
||||
<el-select
|
||||
v-model="dataForm.factoryId"
|
||||
filterable
|
||||
clearable
|
||||
placeholder="请选择工厂">
|
||||
<el-option
|
||||
v-for="item in urlOptions.optionArr.arr0"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="产线TT值(h)" prop="tvalue">
|
||||
<el-input
|
||||
v-model="dataForm.tvalue"
|
||||
clearable
|
||||
placeholder="请输入每小时下片数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="额外编码" prop="externalCode">
|
||||
<el-input
|
||||
v-model="dataForm.externalCode"
|
||||
clearable
|
||||
placeholder="请输入额外编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input
|
||||
v-model="dataForm.remark"
|
||||
clearable
|
||||
placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col>
|
||||
<el-form-item label="描述" prop="description">
|
||||
<el-input
|
||||
v-model="dataForm.description"
|
||||
type="textarea"
|
||||
placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicAdd from '../../mixins/basic-add';
|
||||
import {
|
||||
createProductionLine,
|
||||
updateProductionLine,
|
||||
getProductionLine,
|
||||
getCode,
|
||||
} from '@/api/core/base/productionLine';
|
||||
import { getFactoryPage } from '@/api/core/base/factory';
|
||||
|
||||
export default {
|
||||
mixins: [basicAdd],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getOption: true,
|
||||
isGetCode: true,
|
||||
codeURL: getCode,
|
||||
createURL: createProductionLine,
|
||||
updateURL: updateProductionLine,
|
||||
infoURL: getProductionLine,
|
||||
optionArrUrl: [getFactoryPage],
|
||||
},
|
||||
dataForm: {
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
name: undefined,
|
||||
tvalue: undefined,
|
||||
factoryId: undefined,
|
||||
externalCode: undefined,
|
||||
remark: undefined,
|
||||
description: undefined,
|
||||
},
|
||||
dataRule: {
|
||||
code: [
|
||||
{ required: true, message: '产线编码不能为空', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '产线名称不能为空', trigger: 'blur' },
|
||||
],
|
||||
factoryId: [
|
||||
{ required: true, message: '工厂不能为空', trigger: 'change' },
|
||||
],
|
||||
tvalue: [
|
||||
{
|
||||
type: 'number',
|
||||
message: '请输入正确的数字',
|
||||
trigger: 'change',
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-inner__form >>> .el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
217
src/views/core/oldBase/productionLine/index.vue
Normal file
@ -0,0 +1,217 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<base-table
|
||||
v-loading="dataListLoading"
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:table-data="tableData">
|
||||
<method-btn
|
||||
v-if="tableBtn.length"
|
||||
slot="handleBtn"
|
||||
:width="120"
|
||||
label="操作"
|
||||
:method-list="tableBtn"
|
||||
@clickBtn="handleClick" />
|
||||
</base-table>
|
||||
<pagination
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:total="listQuery.total"
|
||||
@pagination="getDataList" />
|
||||
<base-dialog
|
||||
:dialogTitle="addOrEditTitle"
|
||||
:dialogVisible="addOrUpdateVisible"
|
||||
@cancel="handleCancel"
|
||||
@confirm="handleConfirm"
|
||||
:before-close="handleCancel"
|
||||
width="50%">
|
||||
<add-or-update
|
||||
ref="addOrUpdate"
|
||||
@refreshDataList="successSubmit"></add-or-update>
|
||||
</base-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './add-or-updata';
|
||||
import basicPage from '../../mixins/basic-page';
|
||||
import codeFilter from '../../mixins/code-filter';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import {
|
||||
deleteProductionLine,
|
||||
getProductionLinePage,
|
||||
exportProductionLineExcel,
|
||||
getStatus,
|
||||
} from '@/api/core/base/productionLine';
|
||||
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'code',
|
||||
label: '产线编码'
|
||||
},
|
||||
{
|
||||
prop: 'name',
|
||||
label: '产线名称'
|
||||
},
|
||||
{
|
||||
prop: 'factoryName',
|
||||
label: '工厂'
|
||||
},
|
||||
{
|
||||
prop: 'externalCode',
|
||||
label: '额外编码'
|
||||
},
|
||||
{
|
||||
prop: 'status',
|
||||
label: '当前状态',
|
||||
filter: codeFilter('lineStatus'),
|
||||
},
|
||||
{
|
||||
prop: 'description',
|
||||
label: '描述'
|
||||
},
|
||||
{
|
||||
prop: 'remark',
|
||||
label: '备注'
|
||||
},
|
||||
{
|
||||
prop: 'createTime',
|
||||
label: '创建时间',
|
||||
filter: parseTime
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: getProductionLinePage,
|
||||
deleteURL: deleteProductionLine,
|
||||
exportURL: exportProductionLineExcel,
|
||||
},
|
||||
tableProps,
|
||||
tableBtn: [
|
||||
this.$auth.hasPermi(`base:production-line:update`)
|
||||
? {
|
||||
type: 'edit',
|
||||
btnName: '编辑',
|
||||
}
|
||||
: undefined,
|
||||
this.$auth.hasPermi(`base:production-line:delete`)
|
||||
? {
|
||||
type: 'delete',
|
||||
btnName: '删除',
|
||||
}
|
||||
: undefined,
|
||||
].filter((v) => v),
|
||||
tableData: [],
|
||||
formConfig: [
|
||||
{
|
||||
type: 'input',
|
||||
label: '产线名称',
|
||||
placeholder: '产线名称',
|
||||
param: 'name',
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '搜索',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
// {
|
||||
// type: 'separate',
|
||||
// },
|
||||
// {
|
||||
// type: 'button',
|
||||
// btnName: '重置',
|
||||
// name: 'reset',
|
||||
// },
|
||||
{
|
||||
type: 'separate',
|
||||
},
|
||||
{
|
||||
type: this.$auth.hasPermi('base:production-line:create')
|
||||
? 'button'
|
||||
: '',
|
||||
btnName: '新增',
|
||||
name: 'add',
|
||||
color: 'success',
|
||||
plain: true,
|
||||
},
|
||||
// {
|
||||
// type: this.$auth.hasPermi('base:production-line:create') ? 'separate' : '',
|
||||
// },
|
||||
// {
|
||||
// type: this.$auth.hasPermi('base:production-line:export') ? 'button' : '',
|
||||
// btnName: '导出',
|
||||
// name: 'export',
|
||||
// color: 'warning',
|
||||
// },
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
// 获取数据列表
|
||||
getDataList() {
|
||||
this.dataListLoading = true;
|
||||
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
|
||||
this.listQuery.total = response.data.total;
|
||||
this.getStatus(response.data.list);
|
||||
this.dataListLoading = false;
|
||||
});
|
||||
},
|
||||
getStatus(list) {
|
||||
const ids = list.map((i) => {
|
||||
return i.id;
|
||||
});
|
||||
getStatus(ids).then((response) => {
|
||||
response.forEach((a) => {
|
||||
list.forEach((b) => {
|
||||
if (b.id === a.id) b.status = a.status;
|
||||
});
|
||||
});
|
||||
this.tableData = list;
|
||||
});
|
||||
},
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.listQuery.pageNo = 1;
|
||||
this.listQuery.pageSize = 10;
|
||||
this.listQuery.name = val.name;
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'reset':
|
||||
this.$refs.searchBarForm.resetForm();
|
||||
this.listQuery = {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
total: 1,
|
||||
};
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'add':
|
||||
this.addOrEditTitle = '新增';
|
||||
this.addOrUpdateVisible = true;
|
||||
this.addOrUpdateHandle();
|
||||
break;
|
||||
case 'export':
|
||||
this.handleExport();
|
||||
break;
|
||||
default:
|
||||
console.log(val);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
271
src/views/core/oldBase/productionLineRecDay/index.vue
Normal file
@ -0,0 +1,271 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="产线id" prop="productionLineId">
|
||||
<el-input v-model="queryParams.productionLineId" placeholder="请输入产线id" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间段内上片数量" prop="inputNum">
|
||||
<el-input v-model="queryParams.inputNum" placeholder="请输入上一次记录时间至该条记录时间段内上片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间段内下片数量" prop="outputNum">
|
||||
<el-input v-model="queryParams.outputNum" placeholder="请输入上一次记录时间至该条记录时间段内下片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计上片数量" prop="sumInputNum">
|
||||
<el-input v-model="queryParams.sumInputNum" placeholder="请输入该记录时间点的累计上片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计下片数量" prop="sumOutputNum">
|
||||
<el-input v-model="queryParams.sumOutputNum" placeholder="请输入该记录时间点的累计下片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间" prop="recordTime">
|
||||
<el-date-picker v-model="queryParams.recordTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合格率(%)" prop="passRate">
|
||||
<el-input v-model="queryParams.passRate" placeholder="请输入合格率(%)" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作工具栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||
v-hasPermi="['base:production-line-rec-day:create']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['base:production-line-rec-day:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="ID" align="center" prop="id" />
|
||||
<el-table-column label="产线id" align="center" prop="productionLineId" />
|
||||
<el-table-column label="上一次记录时间至该条记录时间段内上片数量" align="center" prop="inputNum" />
|
||||
<el-table-column label="上一次记录时间至该条记录时间段内下片数量" align="center" prop="outputNum" />
|
||||
<el-table-column label="该记录时间点的累计上片数量" align="center" prop="sumInputNum" />
|
||||
<el-table-column label="该记录时间点的累计下片数量" align="center" prop="sumOutputNum" />
|
||||
<el-table-column label="记录时间" align="center" prop="recordTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.recordTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="合格率(%)" align="center" prop="passRate" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['base:production-line-rec-day:update']">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['base:production-line-rec-day:delete']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="产线id" prop="productionLineId">
|
||||
<el-input v-model="form.productionLineId" placeholder="请输入产线id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间段内上片数量" prop="inputNum">
|
||||
<el-input v-model="form.inputNum" placeholder="请输入上一次记录时间至该条记录时间段内上片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间段内下片数量" prop="outputNum">
|
||||
<el-input v-model="form.outputNum" placeholder="请输入上一次记录时间至该条记录时间段内下片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计上片数量" prop="sumInputNum">
|
||||
<el-input v-model="form.sumInputNum" placeholder="请输入该记录时间点的累计上片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计下片数量" prop="sumOutputNum">
|
||||
<el-input v-model="form.sumOutputNum" placeholder="请输入该记录时间点的累计下片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间" prop="recordTime">
|
||||
<el-date-picker clearable v-model="form.recordTime" type="date" value-format="timestamp" placeholder="选择记录时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合格率(%)" prop="passRate">
|
||||
<el-input v-model="form.passRate" placeholder="请输入合格率(%)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createProductionLineRecDay, updateProductionLineRecDay, deleteProductionLineRecDay, getProductionLineRecDay, getProductionLineRecDayPage, exportProductionLineRecDayExcel } from "@/api/core/base/productionLineRecDay";
|
||||
|
||||
export default {
|
||||
name: "ProductionLineRecDay",
|
||||
components: {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 产线生产定时记录表 一天添加一次数据列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
productionLineId: null,
|
||||
inputNum: null,
|
||||
outputNum: null,
|
||||
sumInputNum: null,
|
||||
sumOutputNum: null,
|
||||
recordTime: [],
|
||||
passRate: null,
|
||||
createTime: [],
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
inputNum: [{ required: true, message: "上一次记录时间至该条记录时间段内上片数量不能为空", trigger: "blur" }],
|
||||
outputNum: [{ required: true, message: "上一次记录时间至该条记录时间段内下片数量不能为空", trigger: "blur" }],
|
||||
sumInputNum: [{ required: true, message: "该记录时间点的累计上片数量不能为空", trigger: "blur" }],
|
||||
sumOutputNum: [{ required: true, message: "该记录时间点的累计下片数量不能为空", trigger: "blur" }],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 执行查询
|
||||
getProductionLineRecDayPage(this.queryParams).then(response => {
|
||||
this.list = response.data.list;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 取消按钮 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
productionLineId: undefined,
|
||||
inputNum: undefined,
|
||||
outputNum: undefined,
|
||||
sumInputNum: undefined,
|
||||
sumOutputNum: undefined,
|
||||
recordTime: undefined,
|
||||
passRate: undefined,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加产线生产定时记录表 一天添加一次数据";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getProductionLineRecDay(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改产线生产定时记录表 一天添加一次数据";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateProductionLineRecDay(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProductionLineRecDay(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除产线生产定时记录表 一天添加一次数据编号为"' + id + '"的数据项?').then(function() {
|
||||
return deleteProductionLineRecDay(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
// 处理查询参数
|
||||
let params = {...this.queryParams};
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
this.$modal.confirm('是否确认导出所有产线生产定时记录表 一天添加一次数据数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportProductionLineRecDayExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '产线生产定时记录表 一天添加一次数据.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
271
src/views/core/oldBase/productionLineRecSch/index.vue
Normal file
@ -0,0 +1,271 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<!-- 搜索工作栏 -->
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="产线id" prop="productionLineId">
|
||||
<el-input v-model="queryParams.productionLineId" placeholder="请输入产线id" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间端内上片数量" prop="inputNum">
|
||||
<el-input v-model="queryParams.inputNum" placeholder="请输入上一次记录时间至该条记录时间端内上片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间端内下片数量" prop="outputNum">
|
||||
<el-input v-model="queryParams.outputNum" placeholder="请输入上一次记录时间至该条记录时间端内下片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计上片数量" prop="sumInputNum">
|
||||
<el-input v-model="queryParams.sumInputNum" placeholder="请输入该记录时间点的累计上片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计下片数量" prop="sumOutputNum">
|
||||
<el-input v-model="queryParams.sumOutputNum" placeholder="请输入该记录时间点的累计下片数量" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间" prop="recordTime">
|
||||
<el-date-picker v-model="queryParams.recordTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合格率(%)" prop="passRate">
|
||||
<el-input v-model="queryParams.passRate" placeholder="请输入合格率(%)" clearable @keyup.enter.native="handleQuery"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker v-model="queryParams.createTime" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
|
||||
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作工具栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
|
||||
v-hasPermi="['base:production-line-rec-sch:create']">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
|
||||
v-hasPermi="['base:production-line-rec-sch:export']">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<!-- 列表 -->
|
||||
<el-table v-loading="loading" :data="list">
|
||||
<el-table-column label="ID" align="center" prop="id" />
|
||||
<el-table-column label="产线id" align="center" prop="productionLineId" />
|
||||
<el-table-column label="上一次记录时间至该条记录时间端内上片数量" align="center" prop="inputNum" />
|
||||
<el-table-column label="上一次记录时间至该条记录时间端内下片数量" align="center" prop="outputNum" />
|
||||
<el-table-column label="该记录时间点的累计上片数量" align="center" prop="sumInputNum" />
|
||||
<el-table-column label="该记录时间点的累计下片数量" align="center" prop="sumOutputNum" />
|
||||
<el-table-column label="记录时间" align="center" prop="recordTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.recordTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="合格率(%)" align="center" prop="passRate" />
|
||||
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||
<template v-slot="scope">
|
||||
<span>{{ parseTime(scope.row.createTime) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template v-slot="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
|
||||
v-hasPermi="['base:production-line-rec-sch:update']">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
|
||||
v-hasPermi="['base:production-line-rec-sch:delete']">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
|
||||
<!-- 对话框(添加 / 修改) -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="产线id" prop="productionLineId">
|
||||
<el-input v-model="form.productionLineId" placeholder="请输入产线id" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间端内上片数量" prop="inputNum">
|
||||
<el-input v-model="form.inputNum" placeholder="请输入上一次记录时间至该条记录时间端内上片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="上一次记录时间至该条记录时间端内下片数量" prop="outputNum">
|
||||
<el-input v-model="form.outputNum" placeholder="请输入上一次记录时间至该条记录时间端内下片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计上片数量" prop="sumInputNum">
|
||||
<el-input v-model="form.sumInputNum" placeholder="请输入该记录时间点的累计上片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="该记录时间点的累计下片数量" prop="sumOutputNum">
|
||||
<el-input v-model="form.sumOutputNum" placeholder="请输入该记录时间点的累计下片数量" />
|
||||
</el-form-item>
|
||||
<el-form-item label="记录时间" prop="recordTime">
|
||||
<el-date-picker clearable v-model="form.recordTime" type="date" value-format="timestamp" placeholder="选择记录时间" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合格率(%)" prop="passRate">
|
||||
<el-input v-model="form.passRate" placeholder="请输入合格率(%)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { createProductionLineRecSch, updateProductionLineRecSch, deleteProductionLineRecSch, getProductionLineRecSch, getProductionLineRecSchPage, exportProductionLineRecSchExcel } from "@/api/core/base/productionLineRecSch";
|
||||
|
||||
export default {
|
||||
name: "ProductionLineRecSch",
|
||||
components: {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 导出遮罩层
|
||||
exportLoading: false,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
productionLineId: null,
|
||||
inputNum: null,
|
||||
outputNum: null,
|
||||
sumInputNum: null,
|
||||
sumOutputNum: null,
|
||||
recordTime: [],
|
||||
passRate: null,
|
||||
createTime: [],
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
inputNum: [{ required: true, message: "上一次记录时间至该条记录时间端内上片数量不能为空", trigger: "blur" }],
|
||||
outputNum: [{ required: true, message: "上一次记录时间至该条记录时间端内下片数量不能为空", trigger: "blur" }],
|
||||
sumInputNum: [{ required: true, message: "该记录时间点的累计上片数量不能为空", trigger: "blur" }],
|
||||
sumOutputNum: [{ required: true, message: "该记录时间点的累计下片数量不能为空", trigger: "blur" }],
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 执行查询
|
||||
getProductionLineRecSchPage(this.queryParams).then(response => {
|
||||
this.list = response.data.list;
|
||||
this.total = response.data.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 取消按钮 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
/** 表单重置 */
|
||||
reset() {
|
||||
this.form = {
|
||||
id: undefined,
|
||||
productionLineId: undefined,
|
||||
inputNum: undefined,
|
||||
outputNum: undefined,
|
||||
sumInputNum: undefined,
|
||||
sumOutputNum: undefined,
|
||||
recordTime: undefined,
|
||||
passRate: undefined,
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "添加产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const id = row.id;
|
||||
getProductionLineRecSch(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "修改产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
// 修改的提交
|
||||
if (this.form.id != null) {
|
||||
updateProductionLineRecSch(this.form).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
return;
|
||||
}
|
||||
// 添加的提交
|
||||
createProductionLineRecSch(this.form).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const id = row.id;
|
||||
this.$modal.confirm('是否确认删除产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加编号为"' + id + '"的数据项?').then(function() {
|
||||
return deleteProductionLineRecSch(id);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
// 处理查询参数
|
||||
let params = {...this.queryParams};
|
||||
params.pageNo = undefined;
|
||||
params.pageSize = undefined;
|
||||
this.$modal.confirm('是否确认导出所有产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加数据项?').then(() => {
|
||||
this.exportLoading = true;
|
||||
return exportProductionLineRecSchExcel(params);
|
||||
}).then(response => {
|
||||
this.$download.excel(response, '产线生产定时记录表 一小时添加一次数据 至少需要一个上片设备和下片设备才会自动添加.xls');
|
||||
this.exportLoading = false;
|
||||
}).catch(() => {});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
112
src/views/core/oldBase/workshopSection/add-or-updata.vue
Normal file
@ -0,0 +1,112 @@
|
||||
<!--
|
||||
* @Author: zwq
|
||||
* @Date: 2023-08-01 13:52:10
|
||||
* @LastEditors: DY
|
||||
* @LastEditTime: 2023-10-16 13:40:00
|
||||
* @Description:
|
||||
-->
|
||||
<template>
|
||||
<el-form
|
||||
:model="dataForm"
|
||||
:rules="dataRule"
|
||||
ref="dataForm"
|
||||
@keyup.enter.native="dataFormSubmit()"
|
||||
label-width="90px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工段编码" prop="code">
|
||||
<el-input
|
||||
v-model="dataForm.code"
|
||||
clearable
|
||||
placeholder="请输入工段编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工段名称" prop="name">
|
||||
<el-input
|
||||
v-model="dataForm.name"
|
||||
clearable
|
||||
placeholder="请输入工段名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="productionLineId" label="产线">
|
||||
<el-select
|
||||
v-model="dataForm.productionLineId" filterable clearable placeholder="请选择产线">
|
||||
<el-option
|
||||
v-for="item in urlOptions.optionArr.arr0"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number v-model="dataForm.sort" :min="1" :max="100" clearable placeholder="请输入排序" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import basicAdd from '../../mixins/basic-add';
|
||||
import {
|
||||
createWorkshopSection,
|
||||
updateWorkshopSection,
|
||||
getWorkshopSection,
|
||||
getCode,
|
||||
} from '@/api/core/base/workshopSection';
|
||||
import {
|
||||
getProductionLinePage,
|
||||
} from '@/api/core/base/productionLine';
|
||||
|
||||
export default {
|
||||
mixins: [basicAdd],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getOption: true,
|
||||
isGetCode: true,
|
||||
codeURL: getCode,
|
||||
createURL: createWorkshopSection,
|
||||
updateURL: updateWorkshopSection,
|
||||
infoURL: getWorkshopSection,
|
||||
optionArrUrl: [getProductionLinePage],
|
||||
},
|
||||
dataForm: {
|
||||
id: undefined,
|
||||
code: undefined,
|
||||
productionLineId: undefined,
|
||||
sort: undefined,
|
||||
name: undefined,
|
||||
remark: undefined,
|
||||
},
|
||||
dataRule: {
|
||||
code: [
|
||||
{ required: true, message: '工段编码不能为空', trigger: 'blur' },
|
||||
],
|
||||
name: [
|
||||
{ required: true, message: '工段名称不能为空', trigger: 'blur' },
|
||||
],
|
||||
sort: [
|
||||
{ required: true, message: '排序不能为空', trigger: 'blur' },
|
||||
],
|
||||
productionLineId: [
|
||||
{ required: true, message: '产线不能为空', trigger: 'change' },
|
||||
],
|
||||
},
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
},
|
||||
};
|
||||
</script>
|
182
src/views/core/oldBase/workshopSection/index.vue
Normal file
@ -0,0 +1,182 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<base-table
|
||||
v-loading="dataListLoading"
|
||||
:table-props="tableProps"
|
||||
:page="listQuery.pageNo"
|
||||
:limit="listQuery.pageSize"
|
||||
:table-data="tableData">
|
||||
<method-btn
|
||||
v-if="tableBtn.length"
|
||||
slot="handleBtn"
|
||||
:width="120"
|
||||
label="操作"
|
||||
:method-list="tableBtn"
|
||||
@clickBtn="handleClick" />
|
||||
</base-table>
|
||||
<pagination
|
||||
:limit.sync="listQuery.pageSize"
|
||||
:page.sync="listQuery.pageNo"
|
||||
:total="listQuery.total"
|
||||
@pagination="getDataList" />
|
||||
<base-dialog
|
||||
:dialogTitle="addOrEditTitle"
|
||||
:dialogVisible="addOrUpdateVisible"
|
||||
@cancel="handleCancel"
|
||||
@confirm="handleConfirm"
|
||||
:before-close="handleCancel"
|
||||
width="50%">
|
||||
<add-or-update
|
||||
ref="addOrUpdate"
|
||||
@refreshDataList="successSubmit"></add-or-update>
|
||||
</base-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import AddOrUpdate from './add-or-updata';
|
||||
import basicPage from '../../mixins/basic-page';
|
||||
import { parseTime } from '../../mixins/code-filter';
|
||||
import {
|
||||
deleteWorkshopSection,
|
||||
getWorkshopSectionPage,
|
||||
exportWorkshopSectionExcel
|
||||
} from "@/api/core/base/workshopSection";
|
||||
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'code',
|
||||
label: '工段编码'
|
||||
},
|
||||
{
|
||||
prop: 'name',
|
||||
label: '工段名称'
|
||||
},
|
||||
{
|
||||
prop: 'productionLineName',
|
||||
label: '产线'
|
||||
},
|
||||
{
|
||||
prop: 'sort',
|
||||
label: '排序'
|
||||
},
|
||||
{
|
||||
prop: 'remark',
|
||||
label: '备注'
|
||||
},
|
||||
{
|
||||
prop: 'createTime',
|
||||
label: '创建时间',
|
||||
filter: parseTime
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
mixins: [basicPage],
|
||||
data() {
|
||||
return {
|
||||
urlOptions: {
|
||||
getDataListURL: getWorkshopSectionPage,
|
||||
deleteURL: deleteWorkshopSection,
|
||||
exportURL: exportWorkshopSectionExcel,
|
||||
},
|
||||
tableProps,
|
||||
tableBtn: [
|
||||
this.$auth.hasPermi(`base:workshop-section:update`)
|
||||
? {
|
||||
type: 'edit',
|
||||
btnName: '编辑',
|
||||
}
|
||||
: undefined,
|
||||
this.$auth.hasPermi(`base:workshop-section:delete`)
|
||||
? {
|
||||
type: 'delete',
|
||||
btnName: '删除',
|
||||
}
|
||||
: undefined,
|
||||
].filter((v)=>v),
|
||||
tableData: [],
|
||||
formConfig: [
|
||||
{
|
||||
type: 'input',
|
||||
label: '工段名称',
|
||||
placeholder: '工段名称',
|
||||
param: 'name',
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '搜索',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
// {
|
||||
// type: 'separate',
|
||||
// },
|
||||
// {
|
||||
// type: 'button',
|
||||
// btnName: '重置',
|
||||
// name: 'reset',
|
||||
// },
|
||||
{
|
||||
type: 'separate',
|
||||
},
|
||||
{
|
||||
type: this.$auth.hasPermi('base:workshop-section:create') ? 'button' : '',
|
||||
btnName: '新增',
|
||||
name: 'add',
|
||||
color: 'success',
|
||||
plain: true,
|
||||
},
|
||||
// {
|
||||
// type: this.$auth.hasPermi('base:workshop-section:create') ? 'separate' : '',
|
||||
// },
|
||||
// {
|
||||
// type: this.$auth.hasPermi('base:workshop-section:export') ? 'button' : '',
|
||||
// btnName: '导出',
|
||||
// name: 'export',
|
||||
// color: 'warning',
|
||||
// },
|
||||
],
|
||||
};
|
||||
},
|
||||
components: {
|
||||
AddOrUpdate,
|
||||
},
|
||||
created() {},
|
||||
methods: {
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.listQuery.pageNo = 1;
|
||||
this.listQuery.pageSize = 10;
|
||||
this.listQuery.name = val.name;
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'reset':
|
||||
this.$refs.searchBarForm.resetForm();
|
||||
this.listQuery = {
|
||||
pageSize: 10,
|
||||
pageNo: 1,
|
||||
total: 1,
|
||||
};
|
||||
this.getDataList();
|
||||
break;
|
||||
case 'add':
|
||||
this.addOrEditTitle = '新增';
|
||||
this.addOrUpdateVisible = true;
|
||||
this.addOrUpdateHandle();
|
||||
break;
|
||||
case 'export':
|
||||
this.handleExport();
|
||||
break;
|
||||
default:
|
||||
console.log(val);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
215
src/views/devConfig/energy/energyPlc/index.vue
Normal file
@ -0,0 +1,215 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 搜索工作栏 -->
|
||||
<search-bar
|
||||
:formConfigs="formConfig"
|
||||
ref="searchBarForm"
|
||||
@headBtnClick="buttonClick" />
|
||||
<!-- 列表 -->
|
||||
<base-table
|
||||
:page="queryParams.pageNo"
|
||||
:limit="queryParams.pageSize"
|
||||
:table-props="tableProps"
|
||||
:table-data="list"
|
||||
:max-height="tableH">
|
||||
<method-btn
|
||||
v-if="tableBtn.length"
|
||||
slot="handleBtn"
|
||||
:width="80"
|
||||
label="操作"
|
||||
:method-list="tableBtn"
|
||||
@clickBtn="handleClick" />
|
||||
</base-table>
|
||||
<pagination
|
||||
:page.sync="queryParams.pageNo"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:total="total"
|
||||
@pagination="getList" />
|
||||
<!-- 新增 -->
|
||||
<base-dialog
|
||||
:dialogTitle="addOrEditTitle"
|
||||
:dialogVisible="centervisible"
|
||||
@cancel="handleCancel"
|
||||
@confirm="handleConfirm"
|
||||
:before-close="handleCancel">
|
||||
<energy-plc-add ref="energyPlc" @successSubmit="successSubmit" />
|
||||
</base-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getEnergyPlcPage, deleteEnergyPlc } from '@/api/base/energyPlc';
|
||||
// import { publicFormatter } from '@/utils/dict'
|
||||
import EnergyPlcAdd from './components/energyPlcAdd.vue';
|
||||
import tableHeightMixin from '@/mixins/tableHeightMixin';
|
||||
const tableProps = [
|
||||
{
|
||||
prop: 'plcTableName',
|
||||
label: '关联表名',
|
||||
},
|
||||
{
|
||||
prop: 'code',
|
||||
label: '关联表编码',
|
||||
minWidth: 150,
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
{
|
||||
prop: 'name',
|
||||
label: '标识名',
|
||||
},
|
||||
{
|
||||
prop: 'enName',
|
||||
label: '英文标识名',
|
||||
},
|
||||
{
|
||||
prop: 'collection',
|
||||
label: '是否采集',
|
||||
},
|
||||
{
|
||||
prop: 'description',
|
||||
label: '描述',
|
||||
showOverflowtooltip: true,
|
||||
},
|
||||
];
|
||||
export default {
|
||||
name: 'EnergyPlc',
|
||||
components: { EnergyPlcAdd },
|
||||
mixins: [tableHeightMixin],
|
||||
data() {
|
||||
return {
|
||||
formConfig: [
|
||||
{
|
||||
type: 'input',
|
||||
label: '标识名',
|
||||
placeholder: '标识名',
|
||||
param: 'name',
|
||||
},
|
||||
{
|
||||
type: 'button',
|
||||
btnName: '查询',
|
||||
name: 'search',
|
||||
color: 'primary',
|
||||
},
|
||||
{
|
||||
type: 'separate',
|
||||
},
|
||||
{
|
||||
type: this.$auth.hasPermi('base:energy-plc:create') ? 'button' : '',
|
||||
btnName: '新增',
|
||||
name: 'add',
|
||||
color: 'success',
|
||||
plain: true,
|
||||
},
|
||||
],
|
||||
tableProps,
|
||||
tableBtn: [
|
||||
this.$auth.hasPermi('base:energy-plc:update')
|
||||
? {
|
||||
type: 'edit',
|
||||
btnName: '编辑',
|
||||
}
|
||||
: undefined,
|
||||
this.$auth.hasPermi('base:energy-plc:delete')
|
||||
? {
|
||||
type: 'delete',
|
||||
btnName: '删除',
|
||||
}
|
||||
: undefined,
|
||||
].filter((v) => v),
|
||||
collectionList: [
|
||||
{ value: 0, label: '否' },
|
||||
{ value: 1, label: '是' },
|
||||
],
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 班次基础信息列表
|
||||
list: [],
|
||||
// 弹出层标题
|
||||
addOrEditTitle: '',
|
||||
// 是否显示弹出层
|
||||
centervisible: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNo: 1,
|
||||
pageSize: 20,
|
||||
name: null,
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
},
|
||||
methods: {
|
||||
buttonClick(val) {
|
||||
switch (val.btnName) {
|
||||
case 'search':
|
||||
this.queryParams.pageNo = 1;
|
||||
this.queryParams.name = val.name;
|
||||
this.getList();
|
||||
break;
|
||||
default:
|
||||
this.addOrEditTitle = '新增';
|
||||
this.centervisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.energyPlc.init();
|
||||
});
|
||||
}
|
||||
},
|
||||
/** 查询列表 */
|
||||
getList() {
|
||||
getEnergyPlcPage(this.queryParams).then((response) => {
|
||||
let arr = response.data.list || [];
|
||||
arr &&
|
||||
arr.map((item) => {
|
||||
this.collectionList.map((i) => {
|
||||
if (item.collection === i.value) {
|
||||
item.collection = i.label;
|
||||
}
|
||||
});
|
||||
});
|
||||
this.list = arr;
|
||||
this.total = response.data.total;
|
||||
});
|
||||
},
|
||||
handleClick(val) {
|
||||
switch (val.type) {
|
||||
case 'edit':
|
||||
this.addOrEditTitle = '编辑';
|
||||
this.$nextTick(() => {
|
||||
this.$refs.energyPlc.init(val.data.id);
|
||||
});
|
||||
this.centervisible = true;
|
||||
break;
|
||||
default:
|
||||
this.handleDelete(val.data);
|
||||
}
|
||||
},
|
||||
handleCancel() {
|
||||
this.$refs.energyPlc.formClear();
|
||||
this.centervisible = false;
|
||||
this.addOrEditTitle = '';
|
||||
},
|
||||
handleConfirm() {
|
||||
this.$refs.energyPlc.submitForm();
|
||||
},
|
||||
successSubmit() {
|
||||
this.handleCancel();
|
||||
this.getList();
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
this.$modal
|
||||
.delConfirm(row.name)
|
||||
.then(function () {
|
||||
return deleteEnergyPlc(row.id);
|
||||
})
|
||||
.then(() => {
|
||||
this.queryParams.pageNo = 1;
|
||||
this.getList();
|
||||
this.$modal.msgSuccess('删除成功');
|
||||
})
|
||||
.catch(() => {});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|