Compare commits

...

55 Commits

Author SHA1 Message Date
ccb2808e60 logo 2023-12-18 15:12:17 +08:00
e039a3992d Merge pull request 'projects/mesxc-zhp' (#146) from projects/mesxc-zhp into projects/mesxc-test
Reviewed-on: #146
2023-12-15 16:29:57 +08:00
‘937886381’
c8d55ff625 解决冲突 2023-12-15 16:28:37 +08:00
‘937886381’
83fc835c51 质量管理 2023-12-15 16:27:30 +08:00
gtz
8d5623bb24 '1' 2023-12-14 16:07:21 +08:00
4fa49c46ff Merge pull request 'projects/mesxc-zjl' (#145) from projects/mesxc-zjl into projects/mesxc-test
Reviewed-on: #145
2023-12-14 15:55:28 +08:00
ae251fc428 merge test 2023-12-14 15:54:46 +08:00
a2c61b86ca Merge pull request 'projects/mesxc-dy' (#144) from projects/mesxc-dy into projects/mesxc-test
Reviewed-on: #144
2023-12-14 15:52:47 +08:00
503e3442a0 merge test 2023-12-14 15:51:26 +08:00
69a65b32ea 12.14测试bug 2023-12-14 15:48:35 +08:00
helloDy
3aec5ee86c merge 2023-12-14 14:03:53 +08:00
helloDy
79274aa8c8 定制化报表,基础核心 2023-12-14 14:01:19 +08:00
29ea06e5be Merge pull request 'projects/mesxc-zhp' (#143) from projects/mesxc-zhp into projects/mesxc-test
Reviewed-on: #143
2023-12-13 17:08:40 +08:00
‘937886381’
f5bb5f27b4 修改 2023-12-13 16:55:39 +08:00
‘937886381’
fbe8e5c023 新增报表 2023-12-13 16:50:55 +08:00
gtz
68898ea67f '1' 2023-12-13 09:49:02 +08:00
gtz
1299d72404 Merge branch 'projects/mesxc-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mesxc-test 2023-12-13 09:48:44 +08:00
0f4bddc6d1 Merge pull request '更新成本和仓库' (#141) from projects/mesxc-zwq into projects/mesxc-test
Reviewed-on: #141
2023-12-13 09:19:00 +08:00
zwq
91d269e1ce 更新成本和仓库 2023-12-13 09:18:36 +08:00
4e26d49ff5 Merge pull request '首页' (#140) from projects/mesxc-zjl into projects/mesxc-test
Reviewed-on: #140
2023-12-13 09:16:28 +08:00
63b19d84e4 首页 2023-12-13 09:12:52 +08:00
6c7390f61e Merge pull request 'projects/mesxc-zjl' (#139) from projects/mesxc-zjl into projects/mesxc-test
Reviewed-on: #139
2023-12-12 10:57:12 +08:00
1661615af4 环保 2023-12-12 10:56:25 +08:00
8fdaa3e968 环保管理 2023-12-08 17:03:01 +08:00
gtz
54953f7bc6 Merge branch 'projects/mesxc-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mesxc-test 2023-12-07 10:06:18 +08:00
gtz
f99e979d14 '1' 2023-12-07 10:06:14 +08:00
f2e38b5e67 Merge pull request 'projects/mesxc-zjl' (#138) from projects/mesxc-zjl into projects/mesxc-test
Reviewed-on: #138
2023-12-06 10:09:07 +08:00
fe0c84bc3a 能源&bug 2023-12-06 10:06:26 +08:00
0a53bcb57e merge test 2023-12-05 14:40:02 +08:00
1ce61f13b7 原模块修改能源 2023-12-05 14:30:32 +08:00
‘937886381’
4e48eae2a7 修改ui 2023-12-04 14:14:34 +08:00
49d002142f Merge pull request 'projects/mesxc-dy' (#137) from projects/mesxc-dy into projects/mesxc-test
Reviewed-on: #137
2023-12-01 15:34:28 +08:00
helloDy
8399081a6f Merge branch 'projects/mesxc-test' into projects/mesxc-dy 2023-12-01 15:27:02 +08:00
helloDy
cc6c4772d3 ui 2023-12-01 15:25:46 +08:00
ba7dad7fce Merge pull request 'projects/mesxc-dy' (#136) from projects/mesxc-dy into projects/mesxc-test
Reviewed-on: #136
2023-11-30 16:01:21 +08:00
helloDy
8e7e31f918 Merge branch 'projects/mes-dy' into projects/mesxc-dy 2023-11-30 15:53:40 +08:00
helloDy
5e4df4d849 Merge branch 'projects/mes-test' into projects/mes-dy 2023-11-30 15:06:20 +08:00
helloDy
1d3372ed69 ui 2023-11-30 15:04:17 +08:00
86f246eb94 Merge pull request 'projects/mes-lb' (#134) from projects/mes-lb into projects/mes-test
Reviewed-on: #134
2023-11-30 14:24:09 +08:00
lb
e2a16332be Merge branch 'projects/mes-test' into projects/mes-lb 2023-11-30 14:22:56 +08:00
lb
69b6942f35 fix bugs 2023-11-30 14:19:13 +08:00
gtz
be430ebbff Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-30 09:08:59 +08:00
gtz
61b4bf784b Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-29 10:17:02 +08:00
gtz
b0f10b9002 '1' 2023-11-29 10:16:58 +08:00
gtz
e6b9d75f16 Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-28 09:03:13 +08:00
gtz
d9f3434712 Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-27 09:31:52 +08:00
gtz
de15716b7c Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-22 14:53:49 +08:00
gtz
c736992a34 '1' 2023-11-22 14:49:56 +08:00
gtz
dcbb2c719b Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-22 14:15:39 +08:00
gtz
bc2940ca99 Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-21 17:30:38 +08:00
gtz
76938951ed Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-20 16:07:12 +08:00
gtz
8b91e7812f '1' 2023-11-17 10:38:44 +08:00
gtz
9cffa01414 Merge branch 'projects/mes-test' of git.picaiba.com:mt-fe-group/yudao-dev into projects/mes-test 2023-11-17 10:38:35 +08:00
gtz
905479d5f4 'del_dist' 2023-11-17 10:29:23 +08:00
gtz
c1ae248234 '1' 2023-11-17 10:28:39 +08:00
178 changed files with 21434 additions and 10195 deletions

View File

@@ -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: 2023-12-15 16:28:20
# @LastEditors: zhp
# @Description:
###
# 开发环境配置
@@ -20,7 +20,8 @@ VUE_APP_BASE_API = 'http://192.168.0.33: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.62:48082'
# VUE_APP_BASE_API = 'http://192.168.1.78:48082'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'

View File

@@ -15,15 +15,14 @@ VUE_APP_TITLE = MES系统
VUE_APP_BASE_API = '/prod-api'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'
VUE_APP_JIMU_API = 'http://10.70.2.22:8080'
# 根据服务器或域名修改
# PUBLIC_PATH = 'http://my-pi.com:8888/yudao-admin/'
PUBLIC_PATH = 'http://192.168.0.33:8889/'
PUBLIC_PATH = 'http://10.70.2.32'
# 二级部署路径
VUE_APP_APP_NAME ='yudao-admin'
# VUE_APP_APP_NAME ='yudao-admin'
# 多租户的开关
VUE_APP_TENANT_ENABLE = true

View File

@@ -1,16 +1,21 @@
NODE_ENV = production
# 生产环境配置
ENV = 'production'
# 页面标题
VUE_APP_TITLE = 产线监控系统
VUE_APP_TITLE = MES系统
# 测试环境配置
ENV = 'staging'
# 芋道管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'
# 芋道管理系统/测试环境
VUE_APP_BASE_API = 'http://api-dashboard.yudao.iocoder.cn'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://192.168.0.33:48082'
# 静态资源地址
PUBLIC_PATH = 'http://static.yudao.iocoder.cn/'
# 根据服务器或域名修改
PUBLIC_PATH = 'http://192.168.0.33:8889/'
# 二级部署路径
# VUE_APP_APP_NAME ='yudao-admin'
# 多租户的开关
VUE_APP_TENANT_ENABLE = true
@@ -20,4 +25,3 @@ VUE_APP_DOC_ENABLE = false
# 百度统计
VUE_APP_BAIDU_CODE = fadc1bd5db1a1d6f581df60a1807f8ab

View File

@@ -48,7 +48,7 @@
"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",

View File

@@ -1,7 +1,7 @@
/*
* @Author: Do not edit
* @Date: 2023-10-21 11:50:46
* @LastEditTime: 2023-11-15 15:56:14
* @LastEditTime: 2023-12-14 10:57:24
* @LastEditors: DY
* @Description:
*/
@@ -65,4 +65,31 @@ export function getHotMaterialList(query) {
method: 'get',
params: query
})
}
// 创建原料质量检测条目
export function createHotMaterialCheck(data) {
return request({
url: '/base/core-hot-material-check/create',
method: 'post',
data: data
})
}
// 更新原料质量检测条目
export function updateHotMaterialCheck(data) {
return request({
url: '/base/core-hot-material-check/update',
method: 'put',
data: data
})
}
// 获得质量检测条目列表
export function getHotCheckList(query) {
return request({
url: '/base/core-hot-material-check/listByMaterial',
method: 'get',
params: query
})
}

View File

@@ -0,0 +1,56 @@
import request from '@/utils/request'
// 获得分页数据
export function energyQuantityManualPage(data) {
return request({
url: '/base/energy-quantity-manual/page',
method: 'post',
data: data
})
}
// 创建
export function energyQuantityManualCreate(data) {
return request({
url: '/base/energy-quantity-manual/create',
method: 'post',
data: data
})
}
// 更新
export function energyQuantityManualUpdate(data) {
return request({
url: '/base/energy-quantity-manual/update',
method: 'put',
data: data
})
}
//获得能源抄表(手动)
export function energyQuantityManualGet(query) {
return request({
url: '/base/energy-quantity-manual/get',
method: 'get',
params: query
})
}
//删除
export function energyQuantityManualDelete(query) {
return request({
url: '/base/energy-quantity-manual/delete',
method: 'delete',
params: query
})
}
//导出
export function energyQuantityManualExport(data) {
return request({
url: '/base/energy-quantity-manual/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}

View File

@@ -0,0 +1,125 @@
/*
* @Author: zhp
* @Date: 2023-11-06 15:38:12
* @LastEditTime: 2023-12-15 15:29:16
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
// 创建质量检测类型基础
export function createQualityHotMaterial(data) {
return request({
url: '/base/quality-hot-material/create',
method: 'post',
data: data
})
}
// 更新质量检测类型基础
export function updateQualityHotMaterial(data) {
return request({
url: '/base/quality-hot-material/update',
method: 'put',
data: data
})
}
// 删除质量检测类型基础
export function deleteQualityHotMaterial(id) {
return request({
url: '/base/quality-hot-material/delete?id=' + id,
method: 'delete'
})
}
// 获得质量检测类型基础
export function getQualityHotMaterial(id) {
return request({
url: '/base/quality-hot-material/get?id=' + id,
method: 'get'
})
}
// 获得质量检测类型基础分页
export function getQualityHotMaterialPage(query) {
return request({
url: 'base/quality-hot-material/page',
method: 'get',
params: query
})
}
// 导出质量检测类型基础 Excel
// export function exportQualityScrapTypeExcel(query) {
// return request({
// url: '/base/quality-scrap-type/export-excel',
// method: 'get',
// params: query,
// responseType: 'blob'
// })
// }
export function getCode(query) {
return request({
url: '/base/quality-hot-material/getCode',
method: 'get',
params: query
})
}
export function getHotMaterialAllList(query) {
return request({
url: '/base/core-hot-material/listAll',
method: 'get',
params: query
})
}
export function getSupplierList(query) {
return request({
url: '/base/core-supplier/listAll',
method: 'get',
params: query
})
}
export function getWorkerList(query) {
return request({
url: '/base/core-worker/listAll',
method: 'get',
params: query
})
}
export function getMaterialCheckList(query) {
return request({
url: '/base/core-hot-material-check/listByMaterial',
method: 'get',
params: query
})
}
export function createQualityHotMaterialDet(query){
return request({
url: '/base/quality-hot-material-det/create',
method: 'post',
data: query
})
}
export function updateQualityHotMaterialDet(query){
return request({
url: '/base/quality-hot-material-det/listbyfilter',
method: 'put',
data: query
})
}
export function getQualityHotMaterialDetList(query){
return request({
url: '/base/quality-hot-material-det/listbyfilter',
method: 'get',
params: query
})
}

View File

@@ -1,10 +1,17 @@
/*
* @Author: zhp
* @Date: 2023-12-04 14:10:37
* @LastEditTime: 2023-12-14 10:06:03
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
// 创建安灯按钮16键对应
export function createQualityInspectionBoxBtn(data) {
return request({
url: '/base/quality-inspection-box-btn/create',
method: 'post',
url: '/base/quality-inspection-box-btn/updateBatch',
method: 'put',
data: data
})
}
@@ -12,7 +19,7 @@ export function createQualityInspectionBoxBtn(data) {
// 更新安灯按钮16键对应
export function updateQualityInspectionBoxBtn(data) {
return request({
url: '/base/quality-inspection-box-btn/update',
url: '/base/quality-inspection-box-btn/updateBatch',
method: 'put',
data: data
})
@@ -37,7 +44,7 @@ export function getQualityInspectionBoxBtn(id) {
// 获得安灯按钮16键对应分页
export function getQualityInspectionBoxBtnPage(query) {
return request({
url: '/base/quality-inspection-box-btn/page',
url: '/base/quality-inspection-box-btn/listGroupByLineSection',
method: 'get',
params: query
})
@@ -52,3 +59,19 @@ export function exportQualityInspectionBoxBtnExcel(query) {
responseType: 'blob'
})
}
export function getAllDetByTypeList(query) {
return request({
url: '/base/quality-scrap-det/scrapMap',
method: 'get',
params: query,
})
}
export function getListByLineSection(query) {
return request({
url: '/base/quality-inspection-box-btn/detListByLineSection',
method: 'get',
params: query,
})
}

View File

@@ -1,7 +1,7 @@
/*
* @Author: zhp
* @Date: 2023-11-06 15:38:12
* @LastEditTime: 2023-11-06 15:39:39
* @LastEditTime: 2023-12-08 09:46:55
* @LastEditors: zhp
* @Description:
*/
@@ -67,3 +67,4 @@ export function getCode(query) {
params: query
})
}

View File

@@ -0,0 +1,78 @@
/*
* @Author: zwq
* @Date: 2023-11-23 14:57:00
* @LastEditors: zwq
* @LastEditTime: 2023-12-07 09:37:18
* @Description:
*/
import request from '@/utils/request'
// 创建能源自动记录报
export function createCostEneryAutoReport(data) {
return request({
url: '/extend/cost-enery-auto-report/create',
method: 'post',
data: data
})
}
// 更新能源自动记录报
export function updateCostEneryAutoReport(data) {
return request({
url: '/extend/cost-enery-auto-report/update',
method: 'put',
data: data
})
}
// 删除能源自动记录报
export function deleteCostEneryAutoReport(id) {
return request({
url: '/extend/cost-enery-auto-report/delete?id=' + id,
method: 'delete'
})
}
// 获得能源自动记录报
export function getCostEneryAutoReport(id) {
return request({
url: '/extend/cost-enery-auto-report/get?id=' + id,
method: 'get'
})
}
// 获得能源自动记录报分页历史
export function getCostEneryAutoReportPage(data) {
return request({
url: '/extend/cost-enery-auto-report/page',
method: 'post',
data: data
})
}
// 获得能源查询
export function getCostEneryAutoPage(data) {
return request({
url: '/extend/cost-energy-search/getData',
method: 'post',
data: data
})
}
// 导出能源自动记录报 Excel
export function exportCostEneryAutoReportExcel(data) {
return request({
url: '/extend/cost-enery-auto-report/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 导出能源自动记录报 Excel 查询
export function exportCostEneryExcel(data) {
return request({
url: '/extend/cost-energy-search/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}

View File

@@ -0,0 +1,73 @@
import request from '@/utils/request'
// 创建原料成本自动统计报
export function createCostMaterialAutoReport(data) {
return request({
url: '/extend/cost-material-auto-report/create',
method: 'post',
data: data
})
}
// 更新原料成本自动统计报
export function updateCostMaterialAutoReport(data) {
return request({
url: '/extend/cost-material-auto-report/update',
method: 'put',
data: data
})
}
// 删除原料成本自动统计报
export function deleteCostMaterialAutoReport(id) {
return request({
url: '/extend/cost-material-auto-report/delete?id=' + id,
method: 'delete'
})
}
// 获得原料成本自动统计报
export function getCostMaterialAutoReport(id) {
return request({
url: '/extend/cost-material-auto-report/get?id=' + id,
method: 'get'
})
}
// 获得原料成本自动统计报分页历史
export function getCostMaterialAutoReportPage(data) {
return request({
url: '/extend/cost-material-auto-report/page',
method: 'post',
data: data
})
}
// 获得原料成本查询
export function getCostMaterialSearchPage(data) {
return request({
url: '/extend/cost-material-search/getData',
method: 'post',
data: data
})
}
// 导出原料成本自动统计报 Excel
export function exportCostMaterialAutoReportExcel(data) {
return request({
url: '/extend/cost-material-auto-report/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 导出原料成本自动统计报 Excel查询
export function exportCostMaterialSearch(data) {
return request({
url: '/extend/cost-material-search/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}

View File

@@ -0,0 +1,61 @@
/*
* @Author: zwq
* @Date: 2023-11-15 09:24:30
* @LastEditors: zwq
* @LastEditTime: 2023-12-05 14:38:48
* @Description:
*/
import request from '@/utils/request'
// 创建原料价位配置
export function createCostMaterialSet(data) {
return request({
url: '/extend/cost-material-set/create',
method: 'post',
data: data
})
}
// 更新原料价位配置
export function updateCostMaterialSet(data) {
return request({
url: '/extend/cost-material-set/update',
method: 'put',
data: data
})
}
// 删除原料价位配置
export function deleteCostMaterialSet(id) {
return request({
url: '/extend/cost-material-set/delete?id=' + id,
method: 'delete'
})
}
// 获得原料价位配置
export function getCostMaterialSet(id) {
return request({
url: '/extend/cost-material-set/get?id=' + id,
method: 'get'
})
}
// 获得原料价位配置分页
export function getCostMaterialSetPage(data) {
return request({
url: '/extend/cost-material-set/page',
method: 'POST',
data: data
})
}
// 导出原料价位配置 Excel
export function exportCostMaterialSetExcel(query) {
return request({
url: '/extend/cost-material-set/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

View File

@@ -0,0 +1,63 @@
/*
* @Author: zhp
* @Date: 2023-12-08 15:26:59
* @LastEditTime: 2023-12-11 15:21:44
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
export function getQualityIsraPage(query) {
return request({
url: 'base/quality-isra-statistics/getIsraData',
method: 'get',
params: query
})
}
export function getQualityIsraDayMap(query) {
return request({
url: '/base/quality-isra-statistics/dayMap',
method: 'get',
params: query
})
}
export function getQualityIsraWeekMap(query) {
return request({
url: '/base/quality-isra-statistics/weekMap',
method: 'get',
params: query
})
}
export function getQualityIsraMonthMap(query) {
return request({
url: '/base/quality-isra-statistics/monthMap',
method: 'get',
params: query
})
}
export function getQualityIsraDayList(query) {
return request({
url: '/base/quality-isra-statistics/dayList',
method: 'get',
params: query
})
}
export function getQualityIsraWeekList(query) {
return request({
url: '/base/quality-isra-statistics/weekList',
method: 'get',
params: query
})
}
export function getQualityIsraMonthList(query) {
return request({
url: '/base/quality-isra-statistics/monthList',
method: 'get',
params: query
})
}

View File

@@ -1,7 +1,7 @@
/*
* @Author: zhp
* @Date: 2023-10-31 10:55:20
* @LastEditTime: 2023-10-31 15:05:30
* @LastEditTime: 2023-12-06 14:09:14
* @LastEditors: zhp
* @Description:
*/
@@ -33,3 +33,12 @@ export function exportEnergyPlcExcel(query) {
responseType: 'blob'
})
}
export function getOriginalGlassRetrace(query) {
return request({
url: '/base/original-glass-statistics/originalGlassRetrace',
method: 'get',
params: query,
})
}

61
src/api/report/glass.js Normal file
View File

@@ -0,0 +1,61 @@
/*
* @Author: Do not edit
* @Date: 2023-12-08 10:26:48
* @LastEditTime: 2023-12-13 17:16:00
* @LastEditors: DY
* @Description:
*/
import request from '@/utils/request'
// 创建原片自动报
export function createGlass(data) {
return request({
url: '/base/report-auto-original-glass/create',
method: 'post',
data: data
})
}
// 批量更新原片自动报
export function updateGlass(data) {
return request({
url: '/base/report-auto-original-glass/updatePlus',
method: 'put',
data: data
})
}
// 更新原片自动报
export function updateGlassRemark(data) {
return request({
url: '/base/report-auto-original-glass/update',
method: 'put',
data: data
})
}
// 获得原片自动报
export function getGlass(id) {
return request({
url: '/base/report-auto-original-glass/get?id=' + id,
method: 'get'
})
}
// 获得原片分页
export function getGlassPage(query) {
return request({
url: '/base/report-auto-original-glass/listPlus',
method: 'get',
params: query
})
}
// 导出原片自动报 Excel
export function exportGlasscExcel(query) {
return request({
url: '/base/report-auto-original-glass/export-excel',
method: 'get',
params: query,
responseType: 'blob'
})
}

View File

@@ -0,0 +1,57 @@
/*
* @Author: zhp
* @Date: 2023-12-12 13:49:02
* @LastEditTime: 2023-12-14 14:21:43
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
// 获得质量检查信息记录表分页
export function getProductionDataList(query) {
return request({
url: '/base/report-auto-production/listPlus',
method: 'get',
data: query,
})
}
export function updateProductionDataList(query) {
return request({
url: '/base/report-auto-production/updatePlus',
method: 'put',
data: query,
})
}
export function updateSumProductionDataList(query) {
return request({
url: '/base/report-auto-production/update',
method: 'put',
data: query,
})
}
export function getAutoDeliveDataList(query) {
return request({
url: '/base/report-auto-delive/listPlus',
method: 'put',
data: query,
})
}
export function updateAutoDeliveDataList(query) {
return request({
url: '/base/report-auto-delive/update',
method: 'put',
data: query,
})
}
export function updateSumAutoDeliveDataList(query) {
return request({
url: '/base/report-auto-delive/updatePlus',
method: 'put',
data: query,
})
}

View File

@@ -0,0 +1,92 @@
import request from '@/utils/request'
// 获得环保检测指标实时数据
export function environmentalCheckRealtime(query) {
return request({
url: '/base/environmental-check/realtime',
method: 'get',
params: query
})
}
// 获得环保检测指标趋势数据
export function environmentalCheckRealtimeTrend(data) {
return request({
url: '/base/environmental-check-record/trend',
method: 'post',
data: data
})
}
// 获得环保检测指标分页
export function environmentalCheckPage(query) {
return request({
url: '/base/environmental-check/page',
method: 'get',
params: query
})
}
// 创建环保检测指标
export function environmentalCheckCreate(data) {
return request({
url: '/base/environmental-check/create',
method: 'post',
data: data
})
}
// 更新环保检测指标
export function environmentalCheckUpdate(data) {
return request({
url: '/base/environmental-check/update',
method: 'put',
data: data
})
}
// 获得环保检测指标
export function environmentalCheckGet(query) {
return request({
url: '/base/environmental-check/get',
method: 'get',
params: query
})
}
// 删除环保检测指标
export function environmentalCheckDelete(query) {
return request({
url: '/base/environmental-check/delete',
method: 'delete',
params: query
})
}
// 获得环保检测记录分页
export function environmentalCheckRecordPage(data) {
return request({
url: '/base/environmental-check-record/page',
method: 'post',
data: data
})
}
// 导出环保检测记录 Excel
export function environmentalCheckRecordExport(data) {
return request({
url: '/base/environmental-check-record/export-excel',
method: 'post',
data: data,
responseType: 'blob'
})
}
// 获取环保检测指标code
export function getEnvironmentalCheckCode(query) {
return request({
url: '/base/environmental-check/getCode',
method: 'get',
params: query
})
}

View 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

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702606455297" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1590" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M614.4 59.136l238.592 137.728a204.8 204.8 0 0 1 102.4 177.3568v275.5584a204.8 204.8 0 0 1-102.4 177.3568L614.4 964.864a204.8 204.8 0 0 1-204.8 0l-238.592-137.728a204.8 204.8 0 0 1-102.4-177.3568V374.2208a204.8 204.8 0 0 1 102.4-177.3568L409.6 59.136a204.8 204.8 0 0 1 204.8 0z" fill="#EE1609" p-id="1591"></path><path d="M471.04 261.9904v315.392a40.96 40.96 0 1 0 81.92 0v-315.392a40.96 40.96 0 1 0-81.92 0z" fill="#FFFFFF" p-id="1592"></path><path d="M512 706.56m-51.2 0a51.2 51.2 0 1 0 102.4 0 51.2 51.2 0 1 0-102.4 0Z" fill="#FFFFFF" p-id="1593"></path></svg>

After

Width:  |  Height:  |  Size: 895 B

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702606467176" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1824" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M622.812817 29.238717l258.222014 146.7694A217.658893 217.658893 0 0 1 991.847648 365.004111v293.666761c0 77.991238-42.226593 150.032365-110.812817 188.995994l-258.222014 146.7694a224.568699 224.568699 0 0 1-221.625634 0l-258.222014-146.7694A217.658893 217.658893 0 0 1 32.152352 658.670872v-293.666761c0-77.991238 42.226593-150.032365 110.812817-188.995994L401.187183 29.238717a224.568699 224.568699 0 0 1 221.625634 0z" fill="#4AA468" p-id="1825"></path><path d="M448.852049 592.899754l-124.120591-140.883269a37.108218 37.108218 0 0 0-56.877941 1.087654 51.631607 51.631607 0 0 0-0.447858 65.067342l151.567877 172.105356c15.355125 17.466454 39.987304 18.042272 55.982226 1.407553l279.39929-290.403797a50.863851 50.863851 0 0 0 12.667978-44.529861 44.84976 44.84976 0 0 0-27.511265-34.67699 36.980259 36.980259 0 0 0-39.859345 10.17277l-250.800371 260.653242z" fill="#FFFFFF" p-id="1826"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

BIN
src/assets/logo/logo1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -142,9 +142,6 @@ function findMaxLabelWidth(rows) {
if (!opt.label) return 0;
if (opt.label.length > max) {
max = opt.label.length;
if (opt.label.includes('(')) {
max = max - 3
}
}
});
});
@@ -242,7 +239,7 @@ export default {
size: {
type: String,
default: '',
}
},
},
data() {
return {

View File

@@ -83,7 +83,7 @@ export default {
],
},
placeholder: '请输入内容',
// readOnly: false,
readOnly: true,
},
};
},
@@ -123,13 +123,9 @@ export default {
const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options);
// 取消自动聚焦 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') {
@@ -198,7 +194,7 @@ export default {
};
</script>
<style lang="scss" scoped>
<style>
.editor-wrapper {
position: relative;
cursor: not-allowed;

View File

@@ -15,6 +15,7 @@
:headers="headers"
:file-list="fileList"
:on-preview="handlePictureCardPreview"
:disabled="disabled"
:class="{hide: this.fileList.length >= this.limit}"
>
<i class="el-icon-plus"></i>
@@ -44,6 +45,7 @@
<script>
import { getAccessToken } from "@/utils/auth";
import { flatten } from 'min-dash';
export default {
props: {
@@ -67,6 +69,10 @@ export default {
isShowTip: {
type: Boolean,
default: true
},
disabled: {
type: Boolean,
default: false
}
},
data() {
@@ -122,14 +128,16 @@ export default {
// 上传成功回调
handleUploadSuccess(res) {
// edit by 芋道源码
this.uploadList.push({ name: res.data, url: res.data });
if (this.uploadList.length === this.number) {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("input", this.listToString(this.fileList));
this.$modal.closeLoading();
if (res.code !== 500) {
this.uploadList.push({ name: res.data, url: res.data });
if (this.uploadList.length === this.number) {
this.fileList = this.fileList.concat(this.uploadList);
this.uploadList = [];
this.number = 0;
this.$emit("input", this.listToString(this.fileList));
}
}
this.$modal.closeLoading();
},
// 上传前loading加载
handleBeforeUpload(file) {

View File

@@ -67,7 +67,7 @@ export default {
},
data() {
return {
title: '中建材智能化院',
title: '许昌安彩新能科技有限公司',
logo: logoImg,
};
},
@@ -98,8 +98,8 @@ export default {
width: 100%;
& .sidebar-logo {
width: 32px;
height: 40px;
width: 67px;
height: 24px;
vertical-align: middle;
margin-right: 12px;
}
@@ -108,10 +108,10 @@ export default {
display: inline-block;
margin: 0;
color: #fff;
font-weight: 600;
line-height: 50px;
font-size: 18px;
letter-spacing: 1px;
font-weight: 500;
width: 147px;
letter-spacing: 2px;
font-size: 10px;
font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
vertical-align: middle;
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -28,7 +28,7 @@ export default {
// tableBtn: [], // 占位
// searchBarFormConfig: [], // 占位
// // 弹窗表单配置
// dialogFormConfig: [], //
// dialogFormConfig: [], //
updateUrl: '',
addUrl: '',
pageUrl: '',
@@ -78,7 +78,6 @@ export default {
return this.http(this.infoUrl == '' ? this.infoPath : this.infoUrl, 'get', payload);
},
del(payload) {
debugger;
return this.http(this.deleteUrl == '' ? this.deletePath : this.deleteUrl, 'delete', payload);
},
@@ -119,9 +118,9 @@ export default {
this.queryParams['startTime'] = btn.timeVal[0];
this.queryParams['endTime'] = btn.timeVal[1];
return;
}
}
this.queryParams[key] = btn[key] || null;
});
});
this.handleQuery();
break;
case 'add':

View File

@@ -94,16 +94,22 @@ export const DICT_TYPE = {
OBJECT_TYPE: 'object_type',
STATISTIC_TYPE: 'statistic_type',
TIME_DIM: 'time_dim',
TABLE_NAME: 'table_name',
METHOD: 'method',
// ============== ORDER - 订单模块 =============
ORDER_STATUS: 'order_status',
ORDER_ORIGIN: 'order_Origin',
ORDER_PRIORITY: 'order_priority',
PACK_SPEC: 'pack_spec',
WORK_ORDER_STATUS: 'work_order_status',
// ============== EQUIPMENT - 设备模块 =============
MAINTAIN_TYPE: 'maintain_type',
FAULT_LEVEL: 'fault-level',
// ============== ENVIRONMENTAL - 环保模块 =============
ENVIRONMENT_CHECK_UNIT: 'environment_check_unit'
}
/**

View File

@@ -5,7 +5,7 @@
const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化
// 日期格式化(通用)
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
@@ -48,6 +48,51 @@ export function parseTime(time, pattern) {
return time_str
}
// 日期格式化(仅适用表格)
export function parseTimeTable(pattern) {
return function(time){
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm),'');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
}
// 表单重置
export function resetForm(refName) {
if (this.$refs[refName]) {

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-11-22 10:27:50
* @LastEditTime: 2023-12-12 16:04:44
* @Description:
-->
<template>
@@ -15,25 +15,26 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="客户编号" prop="code">
<el-input v-model="dataForm.code" clearable placeholder="请输入客户编号" />
<el-input v-model="dataForm.code" :disabled="isdetail" 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-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入客户名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="联系人" prop="contact">
<el-input v-model="dataForm.contact" clearable placeholder="请输入联系人" />
<el-input v-model="dataForm.contact" :disabled="isdetail" clearable placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话" prop="telephone">
<el-input
v-model="dataForm.telephone"
:disabled="isdetail"
maxlength="11"
placeholder="请输入联系电话" />
</el-form-item>
@@ -42,22 +43,34 @@
<el-form-item label="地址" prop="address">
<el-input
v-model="dataForm.address"
:disabled="isdetail"
placeholder="请输入地址" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="dataForm.remark"
:disabled="isdetail"
placeholder="请输入备注" />
</el-form-item>
<el-form-item label="特殊要求" prop="specialRequirements">
<el-input
type="textarea"
v-model="dataForm.specialRequirements"
:disabled="isdetail"
placeholder="请输入备注" />
<imageUpload v-model="files" :disabled="isdetail" :limit="5"/>
</el-form-item>
</el-form>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createCustomer, updateCustomer, getCustomer, getCode } from "@/api/base/coreCustomer";
import ImageUpload from '@/components/ImageUpload';
export default {
mixins: [basicAdd],
components: { ImageUpload },
data() {
return {
urlOptions: {
@@ -67,6 +80,8 @@ export default {
updateURL: updateCustomer,
infoURL: getCustomer
},
files: [],
isdetail: false,
dataForm: {
id: undefined,
code: undefined,
@@ -74,7 +89,9 @@ export default {
telephone: undefined,
contact: undefined,
address: undefined,
remark: undefined
remark: undefined,
specialRequirements: undefined,
files: []
},
dataRule: {
code: [{ required: true, message: "客户编号不能为空", trigger: "blur" }],
@@ -100,6 +117,66 @@ export default {
};
},
mounted() {},
methods: {}
methods: {
init(id, isdetail) {
this.dataForm.id = id || "";
this.isdetail = isdetail || false;
this.visible = true;
if (this.urlOptions.getOption) {
this.getArr()
}
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
if (this.setData) {
this.setDataForm()
}
});
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
// 表单提交
dataFormSubmit() {
console.log('122', this.files)
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
this.dataForm.files = []
if (this.files.length > 0) {
this.files.forEach(item => {
const temp = {
fileType: 1,
fileUrl: item
}
this.dataForm.files.push(temp)
})
}
// 修改的提交
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
// 添加的提交
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.visible = false;
this.$emit("refreshDataList");
});
});
},
}
};
</script>

View File

@@ -88,13 +88,19 @@ export default {
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:core-customer:detail`)
? {
type: 'detail',
btnName: '详情',
}
: undefined,
this.$auth.hasPermi(`base:core-customer:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:core-customer:delete`)
this.$auth.hasPermi(`base:core-customer:delete`)
? {
type: 'delete',
btnName: '删除',
@@ -171,6 +177,13 @@ export default {
console.log(val);
}
},
otherMethods(val) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = "详情";
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, true);
});
}
},
};
</script>

View File

@@ -248,6 +248,9 @@ export default {
label: '设备编码',
prop: 'code',
url: '/base/core-equipment/getCode',
rules: [
{ required: true, message: '设备编码不能为空', trigger: 'blur' },
],
},
{
input: true,

View File

@@ -0,0 +1,65 @@
<!--
* @Author: zwq
* @Date: 2023-08-01 15:27:31
* @LastEditors: zwq
* @LastEditTime: 2023-08-01 16:25:54
* @Description:
-->
<template>
<div :class="[className, { 'p-0': noPadding }]">
<slot />
</div>
</template>
<script>
export default {
props: {
size: {
// 取值范围: xl lg md sm
type: String,
default: 'de',
validator: function (val) {
return ['xl', 'lg', 'de', 'md', 'sm'].indexOf(val) !== -1;
},
},
noPadding: {
type: Boolean,
default: false,
},
},
computed: {
className: function () {
return `${this.size}-title`;
},
},
};
</script>
<style lang="scss" scoped>
$pxls: (xl, 28px) (lg, 24px) (de, 20px) (md, 18px) (sm, 16px);
$mgr: 8px;
@each $size, $height in $pxls {
.#{$size}-title {
font-size: 18px;
line-height: $height;
color: #000;
font-weight: 500;
font-family: '微软雅黑', 'Microsoft YaHei', Arial, Helvetica, sans-serif;
&::before {
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: $height + 2px;
border-radius: 1px;
margin-right: $mgr;
background-color: #0b58ff;
}
}
}
.p-0 {
padding: 0;
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-11-27 20:12:00
* @LastEditTime: 2023-12-14 13:52:42
* @Description:
-->
<template>
@@ -15,19 +15,19 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原料名称" prop="name">
<el-input v-model="dataForm.name" clearable placeholder="请输入原料名称" />
<el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入原料名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原料编号" prop="code">
<el-input v-model="dataForm.code" clearable placeholder="请输入原料编号" />
<el-input v-model="dataForm.code" :disabled="isdetail" clearable placeholder="请输入原料编号" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="每日消耗量" prop="dailyCost">
<el-input-number v-model="dataForm.dailyCost" controls-position="right" clearable placeholder="请输入每日消耗量" style="width: 100%" />
<el-input-number v-model="dataForm.dailyCost" :disabled="isdetail" :min="0" controls-position="right" clearable placeholder="请输入每日消耗量" style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -35,6 +35,7 @@
<el-select
v-model="dataForm.unit"
filterable
:disabled="isdetail"
style="width: 100%"
placeholder="请选择单位">
<el-option
@@ -47,17 +48,58 @@
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item>
<small-title
:size="'sm'"
style="margin: 16px 0; padding-left: 8px; font-size: 14px"
:no-padding="true">
质量信息
</small-title>
<div v-if="!isdetail" class="action_btn">
<template>
<span style="display: inline-block;">
<el-button type="text" @click="addNew()" icon="el-icon-plus">新增</el-button>
</span>
</template>
</div>
<el-row :gutter="20" v-for="(item, index) in test" :key="index">
<el-col :span="9">
<el-form-item label="成分" label-width="50px" prop="name1">
<el-input v-model="item.name" :disabled="isdetail" :min="0" controls-position="right" clearable placeholder="请输入成分" style="width: 100%" />
</el-form-item>
</el-col>
<el-col :span="15">
<el-form-item label="标准含量" prop="unit1">
<el-row :gutter="5">
<el-col :span="1">
<el-tooltip content="如果标准含量不是一个范围,而是一个值,在最大值、最小值中填入相同数字即可。" placement="top">
<span style="margin-left: -15px"><i class="el-icon-question"></i></span>
</el-tooltip>
</el-col>
<el-col :span="11">
<el-input-number v-model="item.minValue" :disabled="isdetail" :min="0" controls-position="right" clearable placeholder="最小值" style="width: 100%" />
</el-col>
<el-col :span="11">
<el-input-number v-model="item.maxValue" :disabled="isdetail" :min="0" controls-position="right" clearable placeholder="最大值" style="width: 100%" />
</el-col>
</el-row>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import basicAdd from '../../core/mixins/basic-add';
import { createHotMaterial, updateHotMaterial, getHotMaterial, getCode } from "@/api/base/coreHotMaterial";
import { createHotMaterial, updateHotMaterial, getHotMaterial, getCode, createHotMaterialCheck, updateHotMaterialCheck, getHotCheckList } from "@/api/base/coreHotMaterial";
import { getDictDatas} from "@/utils/dict";
import SmallTitle from './SmallTitle';
export default {
components: { SmallTitle },
mixins: [basicAdd],
data() {
return {
@@ -76,8 +118,10 @@ export default {
dailyCost: undefined,
remark: undefined
},
test: [],
departmentlList: [],
menuOptions: [],
isdetail: false,
dataRule: {
code: [{ required: true, message: "原料编码不能为空", trigger: "blur" }],
name: [{ required: true, message: "原料名称不能为空", trigger: "blur" }]
@@ -85,6 +129,100 @@ export default {
};
},
mounted() {},
methods: {}
methods: {
init(id, isdetail) {
this.test = []
this.dataForm.id = id || "";
this.isdetail = isdetail || false;
this.visible = true;
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
});
getHotCheckList({
materialId: this.dataForm.id
}).then(res => {
this.test = res.data
})
} else {
this.test = [
{
name: null,
minValue: undefined,
maxValue: undefined
}
]
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
// 表单提交
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
// 修改的提交
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
if (this.test.length > 1 || this.test[0].name) {
this.test.forEach(check => {
check.hotMaterialId = this.dataForm.id
if (check.id) {
updateHotMaterialCheck(check).then(res => {
console.log(res)
})
} else {
createHotMaterialCheck(check).then(res1 => {
console.log(res1)
})
}
})
}
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
// 添加的提交
this.urlOptions.createURL(this.dataForm).then(response => {
if (this.test.length > 1 || this.test[0].name) {
this.test.forEach(check => {
check.hotMaterialId = response.data
createHotMaterialCheck(check).then(res => {
console.log(res)
})
})
}
this.$modal.msgSuccess("新增成功");
this.visible = false;
this.$emit("refreshDataList");
});
});
},
addNew() {
this.test.push({
name: null,
minValue: undefined,
maxValue: undefined
})
}
}
};
</script>
<style scoped>
.action_btn {
float: right;
margin: -40px 15px;
font-size: 14px;
}
.add {
color: #0b58ff;
}
</style>

View File

@@ -83,13 +83,19 @@ export default {
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:core-hot-material:update`)
this.$auth.hasPermi(`base:core-hot-material-check:detail`)
? {
type: 'detail',
btnName: '详情',
}
: undefined,
this.$auth.hasPermi(`base:core-hot-material-check:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:core-hot-material:delete`)
this.$auth.hasPermi(`base:core-hot-material-check:delete`)
? {
type: 'delete',
btnName: '删除',
@@ -120,7 +126,7 @@ export default {
type: 'separate',
},
{
type: this.$auth.hasPermi('base:core-hot-material:create') ? 'button' : '',
type: this.$auth.hasPermi('base:core-hot-material-check:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
@@ -143,6 +149,14 @@ export default {
// this.dataListLoading = false;
// });
// },
otherMethods(val) {
// 详情
this.addOrUpdateVisible = true;
this.addOrEditTitle = "详情";
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, true);
});
},
buttonClick(val) {
switch (val.btnName) {
case 'search':

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-11-27 20:07:09
* @LastEditTime: 2023-12-06 10:36:56
* @Description:
-->
<template>
@@ -91,27 +91,30 @@
</el-col>
<el-col :span="8">
<el-form-item label="单位平方数" prop="area">
<el-input-number v-model="dataForm.area" :precision="2" style="width: 100%" :disabled="isdetail" clearable placeholder="请输入单位平方数" />
<el-input-number v-model="dataForm.area" :precision="6" :min="0" style="width: 100%" :disabled="isdetail" clearable placeholder="请输入单位平方数" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="规格" prop="specifications">
<el-input v-model="dataForm.specifications" :disabled="isdetail" clearable placeholder="请输入规格" />
<el-input v-model="dataForm.specifications" :disabled="isdetail" @blur="setArea" @clear="clearArea" clearable placeholder="请输入规格" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="产线生产单位用时(S)" prop="processTime">
<el-input v-model.number="dataForm.processTime" type="number" :disabled="isdetail" clearable placeholder="请输入产线生产单位用时" />
<el-input v-model.number="dataForm.processTime" :precision="4" :min="0" type="number" :disabled="isdetail" clearable placeholder="请输入产线生产单位用时" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
<el-form-item label="重量" prop="weight">
<el-input-number v-model="dataForm.weight" :precision="6" :min="0" style="width: 100%" :disabled="isdetail" clearable placeholder="请输入重量" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item>
</el-form>
</div>
@@ -240,7 +243,8 @@ export default {
specifications: undefined,
processTime: 0,
remark: undefined,
unit: undefined
unit: undefined,
weight: undefined
},
productAttrList: [],
visible: false,
@@ -257,6 +261,24 @@ export default {
},
mounted() {},
methods: {
clearArea() {
this.$set(this.dataForm, 'area', 0)
this.$set(this.dataForm, 'weight', 0)
},
setArea() {
if (this.dataForm.specifications) {
const height = Number(this.dataForm.specifications.slice(2,4))
const length = Number(this.dataForm.specifications.slice(4,8))
const width = Number(this.dataForm.specifications.slice(8))
// this.dataForm.area = length * width
// this.dataForm.weight = 2.5 * height * length * width
this.$set(this.dataForm, 'area', length * width)
this.$set(this.dataForm, 'weight', 2.5 * height * length * width)
} else {
this.dataForm.area = 0
this.dataForm.weight = 0
}
},
initData() {
this.productAttrList.splice(0);
this.listQuery.total = 0;
@@ -317,6 +339,10 @@ export default {
// 获取产品详情
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data
// this.dataForm.area = response.data.area || 0
// this.dataForm.weight = response.data.weight || 0
// this.dataForm.specifications = response.data.specifications || undefined
console.log('11res112', this.dataForm.specifications, this.dataForm.weight, this.dataForm.area)
if (this.dataForm.unit !== undefined) {
this.dataForm.unit = String(this.dataForm.unit)
}
@@ -339,7 +365,7 @@ export default {
goback() {
this.$emit('refreshDataList');
this.visible = false;
// this.initData();
this.initData();
},
goEdit() {
this.isdetail = false;
@@ -370,6 +396,7 @@ export default {
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.idAttrShow = true
this.dataForm.id = response.data
// this.visible = false;
this.$emit("refreshDataList");
});

View File

@@ -140,12 +140,13 @@ export default {
allocationVisible: false,
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:core-work-order:material`)
? {
type: 'material',
btnName: '原料信息',
}
: undefined,
// this.$auth.hasPermi(`base:core-work-order:material`)
// ? {
// type: 'material',
// btnName: '原料信息',
// showTip: '预使用原料信息'
// }
// : undefined,
{
type: 'active',
btnName: '激活',

View File

@@ -268,17 +268,25 @@ export default {
// })
// } else {
$('.hiprintEpContainer').empty()
console.log(this.modelData);
console.log(this.modelData || {});
hiprint.PrintElementTypeManager.build('.hiprintEpContainer', provider.value)
$('.hiprint-printTemplate').empty()
// const templates = this.$ls.get('KEY_TEMPLATES', {})
const template = provider.value
// console.log(template)
// console.log(template)
if (this.modelData) {
hiprintTemplate = new hiprint.PrintTemplate({
template: this.modelData != '' ? JSON.parse(this.modelData) : {},
template: JSON.parse(this.modelData),
settingContainer: '#PrintElementOptionSetting',
paginationContainer: '.hiprint-printPagination'
})
} else {
hiprintTemplate = new hiprint.PrintTemplate({
template:{},
settingContainer: '#PrintElementOptionSetting',
paginationContainer: '.hiprint-printPagination'
})
}
// }
hiprintTemplate.design('#hiprint-printTemplate')
// console.log(hiprintTemplate)

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-11-27 15:26:12
* @LastEditTime: 2023-12-04 15:10:11
* @Description:
-->
<template>
@@ -377,6 +377,7 @@ export default {
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.idAttrShow = true
this.dataForm.id = response.data
this.$emit("refreshDataList");
});
});

View File

@@ -1,18 +1,18 @@
<!--
* @Author: zhp
* @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-30 10:47:13
* @LastEditTime: 2023-12-01 16:48:53
* @LastEditors: zhp
* @Description:
-->
<template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%">
<el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%" show-close="true">
<small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }}
</small-title>
<!--
<div class="content">
<div class="visual-part">
<div class="visual-part"> -->
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px"
@keyup.enter.native="dataFormSubmit">
<el-row :gutter="20">
@@ -96,8 +96,8 @@
:page-sizes="[5, 10, 15]"
@pagination="getList" />
</div> -->
</div>
</div>
<!-- </div> -->
<!-- </div> -->
<!-- <div style="position: absolute; bottom: 24px; right: 24px">
<el-button style="margin-right: 10px" @click="goback()">返回</el-button>
@@ -416,3 +416,34 @@ export default {
padding: 18px;
}
</style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .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;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@@ -1,12 +1,12 @@
<!--
* @Author: zhp
* @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-30 10:41:07
* @LastEditTime: 2023-12-04 13:43:19
* @LastEditors: zhp
* @Description:
-->
<template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="30%">
<el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="30%" show-close="true">
<small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }}
</small-title>
@@ -46,7 +46,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="模板设计" prop="content">
<el-button type="primary" @click="btnClickDesign()">模板设计</el-button>
<el-button icon="el-icon-edit" @click="btnClickDesign()">模板设计</el-button>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
@@ -439,3 +439,36 @@ export default {
padding: 18px;
}
</style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .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;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 14:55:51
* @LastEditors: zhp
* @LastEditTime: 2023-11-22 14:40:07
* @LastEditTime: 2023-12-04 13:38:45
* @Description:
-->
<template>
@@ -71,7 +71,7 @@ export default {
modelShow:false,
tableBtn: [
{
type: 'print',
type: 'detail',
btnName: '查看',
},
this.$auth.hasPermi(`base:packaging-print-model:update`)
@@ -121,11 +121,12 @@ export default {
// name: 'reset',
// },
{
type: 'separate',
type: 'label',
label:'标签模板',
},
{
type: this.$auth.hasPermi('base:packaging-print-model:create') ? 'button' : '',
btnName: '新增模板',
btnName: '新增',
name: 'add',
color: 'success',
plain: true,

View File

@@ -1,19 +1,19 @@
<!--
* @Author: zhp
* @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-18 16:07:39
* @LastEditTime: 2023-12-04 13:45:45
* @LastEditors: zhp
* @Description:
-->
<template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%">
<el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%" show-close="true">
<small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<div class="visual-part">
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px"
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="auto"
@keyup.enter.native="dataFormSubmit">
<el-row :gutter="20">
<el-col :span="12">
@@ -345,3 +345,37 @@ export default {
padding: 18px;
}
</style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .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;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2023-08-01 14:55:51
* @LastEditors: zhp
* @LastEditTime: 2023-11-22 14:36:33
* @LastEditTime: 2023-12-04 13:44:01
* @Description:
-->
<template>
@@ -122,7 +122,8 @@ export default {
// name: 'reset',
// },
{
type: 'separate',
type: 'label',
label: '标签类型'
},
{
type: this.$auth.hasPermi('base:packaging-print-type:create') ? 'button' : '',

View File

@@ -1,8 +1,8 @@
<template>
<div class="navbar">
<div style="color: #fff;font-size: 22px; float: left; letter-spacing: 1px; font-weight: 500; padding-left: 24px; marginTop: 13px">
<img src="../../../assets/images/cnbm.png" style="width: 26px; height: 26px; position: relative; top: 6px; marginRight: 14px" alt="">
MES
<div style="color: #fff;font-size: 22px; float: left; letter-spacing: 2px; font-weight: 500; padding-left: 24px; marginTop: 13px">
<img src="../../../assets/logo/logo.png" style="width: 79px; height: 28px; position: relative; top: 6px; marginRight: 14px" alt="">
许昌安彩新能科技有限公司
</div>
<div style="padding-top: 15px; padding-right: 38px;">
<navbar-right />

View File

@@ -2,7 +2,7 @@
<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:1710px;height:538px;'" v-show="showItem">
<div class="choicepart-line1">
<div
v-for="(item, index) in menuArr1"
@@ -102,9 +102,7 @@ export default {
meta: {
title: ''
}
}
],
menuArr2: [
},
{
name: 'Packaging',
title: '包装管理',
@@ -112,7 +110,9 @@ export default {
meta: {
title: ''
}
},
}
],
menuArr2: [
{
name: 'Material',
title: '物料管理',
@@ -129,17 +129,41 @@ export default {
title: ''
}
},
// {
// name: 'Delivery',
// title: '成品发货',
// visible: false,
// meta: {
// title: ''
// }
// },
{
name: 'Delivery',
title: '成品发货',
name: 'Report',
title: '报表管理',
visible: false,
meta: {
title: ''
}
},
{
name: 'Report',
title: '报表管理',
name: 'Cost',
title: '成本管理',
visible: false,
meta: {
title: ''
}
},
{
name: 'SafetyEnvironmental',
title: '安环管理',
visible: false,
meta: {
title: ''
}
},
{
name: 'Databoard',
title: '数据驾驶舱',
visible: false,
meta: {
title: ''
@@ -176,7 +200,7 @@ export default {
console.log(menuList)
if (menuList.length > 0) {
for (let i = 0; i < menuList.length; i ++) {
for (let k = 0; k < 7; k++) {
for (let k = 0; k < 8; k++) {
if (menuList[i].name === this.menuArr1[k].name) {
this.menuArr1[k].visible = true
this.menuArr1[k].id = menuList[i].id
@@ -185,7 +209,7 @@ export default {
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

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2022-08-24 11:19:43
* @LastEditors: zhp
* @LastEditTime: 2023-11-06 15:59:53
* @LastEditTime: 2023-12-13 15:52:53
* @Description:
*/
export default {
@@ -38,7 +38,7 @@ export default {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
this.dataForm = response.data
if (this.setData) {
this.setDataForm()
}
@@ -80,7 +80,7 @@ export default {
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.visible = false;
this.$emit("refreshDataList");
});
return;

View File

@@ -0,0 +1,162 @@
<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"></base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import codeFilter from '../mixins/code-filter';
import {
getCostEneryAutoPage,
exportCostEneryExcel,
} from '@/api/cost/costEneryAutoReport';
import { getEnergyTypeListAll } from '@/api/base/energyType';
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'energyTypeName',
label: '能源类型',
},
{
prop: 'objName',
label: '监控对象',
filter: (val) => (val != null ? val : '--'),
},
{
prop: 'tableName',
label: '水/气表名',
filter: (val) => (val != null ? val : '--'),
filter: publicFormatter('table_name'),
},
{
prop: 'totalUsed',
label: '累计使用量',
},
{
prop: 'totalCost',
label: '总价',
align: 'right',
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getCostEneryAutoPage,
exportURL: exportCostEneryExcel
},
tableData: [],
tableProps,
drawerVisible: false,
formConfig: [
{
type: 'select',
label: '能源类型',
selectOptions: [],
param: 'energyTypeId',
filterable: true,
},
{
type: 'datePicker',
label: '时间范围',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: this.$auth.hasPermi('cost:energyCost:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
],
};
},
components: {},
created() {
getEnergyTypeListAll().then((response) => {
this.formConfig[0].selectOptions = response.data;
});
},
methods: {
// 获取数据列表
getDataList() {
if(this.listQuery.searchTime){
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
if(response.hasOwnProperty('data')){
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
}
this.dataListLoading = false;
});
}else{
this.$message.warning('请选择时间范围')
}
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.energyTypeId = val.energyTypeId;
this.listQuery.searchTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
this.getDataList();
break;
case 'export':
const data = {
energyTypeId:val.energyTypeId,
startTime : val.searchTime ? val.searchTime[0] : null,
endTime : val.searchTime ? val.searchTime[1] : null,
}
this.handleExport(data);
break;
default:
console.log(val);
}
},
},
};
</script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
</style>

View File

@@ -0,0 +1,173 @@
<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"></base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import codeFilter from '../mixins/code-filter';
import {
getCostEneryAutoReportPage,
exportCostEneryAutoReportExcel,
} from '@/api/cost/costEneryAutoReport';
import { getEnergyTypeListAll } from '@/api/base/energyType';
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'reportType',
label: '维度',
filter: codeFilter('reportType'),
},
{
prop: 'reportName',
label: '时间',
minWidth: 150,
},
{
prop: 'energyType',
label: '能源类型',
},
{
prop: 'objName',
label: '监控对象',
filter: (val) => (val != null ? val : '--'),
},
{
prop: 'tableName',
label: '水/气表名',
filter: (val) => (val != null ? val : '--'),
filter: publicFormatter('table_name'),
},
{
prop: 'totalUsed',
label: '累计使用量',
},
{
prop: 'totalCost',
label: '总价',
align: 'right',
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getCostEneryAutoReportPage,
exportURL: exportCostEneryAutoReportExcel,
},
tableData: [],
tableProps,
drawerVisible: false,
listQuery: {
reportType: 2,
},
formConfig: [
{
type: 'select',
label: '维度',
selectOptions: [
{ id: 2, name: '日' },
{ id: 3, name: '周' },
{ id: 4, name: '月' },
{ id: 5, name: '年' },
],
param: 'reportType',
filterable: true,
defaultSelect: 2, // 默认值
clearable: false,
},
{
type: 'select',
label: '能源类型',
selectOptions: [],
param: 'energyTypeId',
filterable: true,
},
{
type: 'datePicker',
label: '时间范围',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: this.$auth.hasPermi('cost:energyCostHis:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
],
};
},
components: {},
created() {
getEnergyTypeListAll().then((response) => {
this.formConfig[1].selectOptions = response.data;
});
},
methods: {
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.reportType = val.reportType;
this.listQuery.energyTypeId = val.energyTypeId;
this.listQuery.reportTime = val.searchTime ? val.searchTime : null;
this.getDataList();
break;
case 'export':
const data = {
reportType: val.reportType,
energyTypeId: val.energyTypeId,
reportTime: val.searchTime ? val.searchTime : null
}
this.handleExport(data);
break;
default:
console.log(val);
}
},
},
};
</script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
</style>

View File

@@ -0,0 +1,121 @@
/*
* @Author: zwq
* @Date: 2022-08-24 11:19:43
* @LastEditors: zwq
* @LastEditTime: 2023-11-02 15:33:39
* @Description:
*/
import { listData } from "@/api/system/dict/data";
export default {
data() {
/* eslint-disable */
return {
urlOptions: {
createURL: '',
updateURL: '',
infoURL: '',
codeURL: '',
getOption: false, //是否加载获取下拉框方法
isGetCode: false, //是否加载获取code方法
getDictList: false, //是否加载获取数据字典方法
optionArrUrl: [], //需要获取下拉框的方法数组
optionArr: {}, //需要获取下拉框的方法数组的返回结果
dictList: {}, //需要获取数据字典的方法数组的返回结果
},
visible: false,
setData: false
}
},
created() {
},
activated() {
},
methods: {
init(id) {
this.dataForm.id = id || "";
this.visible = true;
if (this.urlOptions.getOption) {
this.getArr()
}
if (this.urlOptions.getDictList) {
this.getDict()
}
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data;
if (this.setData) {
this.setDataForm()
}
});
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
getCode() {
this.urlOptions.codeURL()
.then(({ data: res }) => {
this.dataForm.code = res;
})
.catch(() => {});
},
getArr() {
const params = {
pageSize: 100,
pageNo: 1,
}
this.urlOptions.optionArrUrl.forEach((item, index) => {
item(params).then(({ data: res }) => {
this.$set(this.urlOptions.optionArr, `arr${index}`, res.list)
})
.catch(() => {
});
});
},
/** 查询字典数据列表 */
getDict() {
this.nameList.forEach((item,index)=>{
const queryParams = {
pageNo: 1,
pageSize: 99,
dictType: item,
}
listData(queryParams).then(response => {
this.$set(this.urlOptions.dictList, `dict${index}`, response.data.list)
});
})
},
// 表单提交
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
// 修改的提交
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
// 添加的提交
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.visible = false;
this.$emit("refreshDataList");
});
});
},
formClear() {
if (this.$refs.dataForm!==undefined) {
this.$refs.dataForm.resetFields();
}
}
}
}

View File

@@ -0,0 +1,172 @@
/*
* @Author: zwq
* @Date: 2022-08-24 11:19:43
* @LastEditors: zwq
* @LastEditTime: 2023-12-07 09:35:33
* @Description:
*/
export default {
data() {
/* eslint-disable */
return {
urlOptions: {
getDataListURL: '',
deleteURL: '',
statusUrl: '',
exportURL: ''
},
tableData: [],
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
},
exportLoading: false,
dataListLoading: false,
addOrEditTitle: '',
addOrUpdateVisible: false,
addOrUpdate:'addOrUpdate'
}
},
created() {
},
mounted() {
this.getDataList()
},
methods: {
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
if(response.hasOwnProperty('data')){
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
}
this.dataListLoading = false;
});
},
// 每页数
sizeChangeHandle(val) {
this.listQuery.pageSize = val;
this.listQuery.pageNo = 1;
this.getDataList();
},
// 当前页
currentChangeHandle(val) {
this.listQuery.pageNo = val;
this.getDataList();
},
// 新增 / 修改
addOrUpdateHandle(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
},
cancel(id) {
this.$refs["popover-" + id].showPopper = false;
},
//改变状态
changeStatus(id) {
this.$http
.post(this.urlOptions.statusUrl, { id })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$refs["popover-" + id].showPopper = false;
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
onClose: () => {
this.getDataList();
},
});
})
.catch(() => { });
},
//tableBtn点击
handleClick(val) {
if (val.type === "edit") {
this.addOrUpdateVisible = true;
this.addOrEditTitle = "编辑";
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id);
});
} else if (val.type === "delete") {
this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex)
} else if (val.type === "change") {
this.changeStatus(val.data.id)
} else {
this.otherMethods(val)
}
},
// 删除
deleteHandle(id, name, index) {
this.$confirm(`是否确认删除${name ? '名称为"' + name + '"' : '序号为"' + index + '"'}的数据项?`, "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.urlOptions.deleteURL(id).then(({ data }) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getDataList();
},
});
});
})
.catch(() => { });
},
//search-bar点击
buttonClick(val) {
switch (val.btnName) {
case "search":
this.listQuery.xm1 = val.xm1;
this.listQuery.xm2 = val.xm2;
this.listQuery.pageNo = 1;
this.getDataList();
break;
case "add":
this.addOrEditTitle = '新增'
this.addOrUpdateVisible = true;
this.addOrUpdateHandle()
break;
default:
console.log(val)
}
},
handleCancel() {
this.$refs[this.addOrUpdate].formClear()
this.addOrUpdateVisible = false
this.addOrEditTitle = ''
this.addOrUpdate = 'addOrUpdate'
},
handleConfirm() {
this.$refs[this.addOrUpdate].dataFormSubmit()
},
successSubmit() {
this.handleCancel()
this.getDataList()
},
/** 导出按钮操作 */
handleExport(data) {
// 处理查询参数
let params = data?{ ...data }:{ ...this.listQuery };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有数据项?').then(() => {
this.exportLoading = true;
return this.urlOptions.exportURL(params);
}).then(response => {
this.$download.excel(response, '报表.xls');
this.exportLoading = false;
}).catch(() => { });
}
}
}

View File

@@ -0,0 +1,79 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: zwq
* @LastEditTime: 2023-12-07 10:00:51
* @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description:
*/
const table = {
lineStatus: {
1: '生产中',
2: '停止',
3: '未知',
},
deactivate: {
1: '启用',
0: '停用',
},
wareType: {
1: '缓存',
2: '活动',
3: '其它',
},
reportType: {
2: '日',
3: '周',
4: '月',
5: '年',
},
}
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm),'');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
export default function (dictTable) {
return function (val) {
return table?.[dictTable]?.[val]
}
}

View File

@@ -0,0 +1,23 @@
<!--
* @Author: zwq
* @Date: 2023-12-05 13:45:59
* @LastEditors: zwq
* @LastEditTime: 2023-12-06 15:54:40
* @Description
-->
<template>
<div>
<span>{{ parseTime(injectData.enableTime,'{y}年{m}月{d}日') + '-' + (parseTime(injectData.disableTime)?parseTime(injectData.disableTime,'{y}年{m}月{d}日'):'永久') }}</span>
</div>
</template>
<script>
export default {
name: '',
props: {
injectData: {
type: Object,
default: () => ({}),
},
},
};
</script>

View File

@@ -0,0 +1,166 @@
<!--
* @Author: zwq
* @Date: 2023-08-01 13:52:10
* @LastEditors: zwq
* @LastEditTime: 2023-12-05 15:41:39
* @Description:
-->
<template>
<el-form
:model="dataForm"
:rules="dataRule"
ref="dataForm"
v-if="visible"
@keyup.enter.native="dataFormSubmit()"
label-width="100px"
label-position="top">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="原料名称" prop="materialId">
<el-select
v-model="dataForm.materialId"
filterable
clearable
@change="setCode"
:style="{ width: '100%' }"
placeholder="请选择原料名称">
<el-option
v-for="item in MaterialList"
: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="grade">
<el-select
v-model="dataForm.grade"
filterable
clearable
:style="{ width: '100%' }"
placeholder="请选择原料等级">
<el-option
v-for="item in urlOptions.dictList.dict0"
:key="item.id"
:label="item.label"
:value="parseInt(item.value)"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原料编码" prop="code">
<el-input v-model="dataForm.code" clearable readonly />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单价" prop="price">
<el-input-number
:min="0"
style="width: 80%"
v-model="dataForm.price"
clearable
placeholder="请输入允许留存时间" />
(/)
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生效开始时间" prop="enabledTime">
<el-date-picker
v-model="dataForm.enabledTime"
type="datetime"
value-format="timestamp"
:style="{ width: '100%' }"
placeholder="选择开始时间"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生效结束时间" prop="disabledTime">
<el-date-picker
v-model="dataForm.disabledTime"
type="datetime"
value-format="timestamp"
:style="{ width: '100%' }"
placeholder="选择结束时间"></el-date-picker>
</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-form>
</template>
<script>
import basicAdd from '../mixins/basic-add';
import {
createCostMaterialSet,
updateCostMaterialSet,
getCostMaterialSet,
} from '@/api/cost/costMaterialSet';
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
export default {
mixins: [basicAdd],
data() {
return {
urlOptions: {
getDictList: true,
createURL: createCostMaterialSet,
updateURL: updateCostMaterialSet,
infoURL: getCostMaterialSet,
getOption: true,
},
nameList: ['material_grade'],
dataForm: {
id: undefined,
code: '',
materialId: '',
price: '',
grade: '',
enabledTime: new Date().getTime(),
disabledTime: null,
remark: '',
},
setData: true,
MaterialList: [],
dataRule: {
materialId: [
{ required: true, message: '原料不能为空', trigger: 'change' },
],
price: [{ required: true, message: '单价不能为空', trigger: 'blur' }],
enabledTime: [
{
required: true,
message: '生效开始时间不能为空',
trigger: 'change',
},
],
},
};
},
created() {},
methods: {
getArr() {
getHotMaterialList().then((response) => {
this.MaterialList = response.data;
});
},
setDataForm() {
this.setCode();
},
setCode() {
this.MaterialList.forEach((item) => {
if (item.id === this.dataForm.materialId) {
this.dataForm.code = item.code;
}
});
},
},
};
</script>

View File

@@ -0,0 +1,186 @@
<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="80"
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="40%">
<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 {
deleteCostMaterialSet,
getCostMaterialSetPage,
} from '@/api/cost/costMaterialSet';
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'rawMaterialName',
label: '原料名称',
},
{
prop: 'code',
label: '原料编码',
width: 190,
},
{
prop: 'grade',
label: '原料等级',
filter: publicFormatter('material_grade'),
},
{
prop: 'dailyUse',
label: '单日消耗量(天)吨',
width: 130,
},
{
prop: 'price',
label: '单价(元/吨)',
align: 'right',
},
{
prop: 'enabledTime',
label: '生效时间',
filter: parseTime,
width: 150,
},
{
prop: 'remark',
label: '备注',
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getCostMaterialSetPage,
deleteURL: deleteCostMaterialSet,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`cost:rawMaterialConfig:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`cost:rawMaterialConfig:delete`)
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v) => v),
tableData: [],
formConfig: [
{
type: 'select',
label: '原料名称',
selectOptions: [],
param: 'name',
filterable: true,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: 'separate',
},
{
type: this.$auth.hasPermi('cost:rawMaterialConfig:create')
? 'button'
: '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true,
},
],
};
},
components: {
AddOrUpdate,
},
created() {
getHotMaterialList().then((response) => {
this.formConfig[0].selectOptions = response.data;
});
},
methods: {
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.materialId = 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>

View File

@@ -0,0 +1,166 @@
<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"></base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import connectTime from '../mixins/connectTime';
import {
getCostMaterialSearchPage,
exportCostMaterialSearch,
} from '@/api/cost/costMaterialAutoReport';
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'rawMaterialName',
label: '原料名称',
},
{
prop: 'grade',
label: '原料等级',
filter: publicFormatter('material_grade'),
},
{
prop: 'price',
label: '单价(元/吨)',
align: 'right',
},
{
prop: 'reportName',
label: '单价生效时间',
minWidth: 190,
subcomponent: connectTime,
},
{
prop: 'totalUsed',
label: '累计使用量(吨)',
},
{
prop: 'totalCost',
label: '总价(元)',
align: 'right',
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getCostMaterialSearchPage,
exportURL: exportCostMaterialSearch,
},
tableData: [],
tableProps,
drawerVisible: false,
formConfig: [
{
type: 'select',
label: '原料名称',
selectOptions: [],
param: 'materialId',
filterable: true,
},
{
type: 'datePicker',
label: '时间范围',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: this.$auth.hasPermi('cost:rawMaterialCost:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
],
};
},
components: {},
created() {
getHotMaterialList().then((response) => {
this.formConfig[0].selectOptions = response.data;
});
},
methods: {
// 获取数据列表
getDataList() {
if (this.listQuery.searchTime) {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then((response) => {
if (response.hasOwnProperty('data')) {
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
}
this.dataListLoading = false;
});
} else {
this.$message.warning('请选择时间范围');
}
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.materialId = val.materialId;
this.listQuery.searchTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
this.getDataList();
break;
case 'export':
this.listQuery.materialId = val.materialId;
this.listQuery.searchTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.startTime = val.searchTime ? val.searchTime[0] : null;
this.listQuery.endTime = val.searchTime ? val.searchTime[1] : null;
this.handleExport();
break;
default:
console.log(val);
}
},
},
};
</script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
</style>

View File

@@ -0,0 +1,170 @@
<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"></base-table>
<pagination
:limit.sync="listQuery.pageSize"
:page.sync="listQuery.pageNo"
:total="listQuery.total"
@pagination="getDataList" />
</div>
</template>
<script>
import basicPage from '../mixins/basic-page';
import codeFilter from '../mixins/code-filter';
import {
getCostMaterialAutoReportPage,
exportCostMaterialAutoReportExcel,
} from '@/api/cost/costMaterialAutoReport';
import { getHotMaterialList } from '@/api/base/coreHotMaterial';
import { publicFormatter } from '@/utils/dict';
const tableProps = [
{
prop: 'reportType',
label: '维度',
filter: codeFilter('reportType'),
},
{
prop: 'reportName',
label: '时间',
minWidth: 150,
},
{
prop: 'rawMaterialName',
label: '原料名称',
},
{
prop: 'grade',
label: '原料等级',
filter: publicFormatter('material_grade'),
},
{
prop: 'price',
label: '单价(元/吨)',
align: 'right',
},
{
prop: 'totalUsed',
label: '累计使用量(吨)',
},
{
prop: 'totalCost',
label: '总价(元)',
align: 'right',
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getCostMaterialAutoReportPage,
exportURL: exportCostMaterialAutoReportExcel
},
tableData: [],
tableProps,
drawerVisible: false,
listQuery: {
reportType: 2,
},
formConfig: [
{
type: 'select',
label: '维度',
selectOptions: [
{ id: 2, name: '日' },
{ id: 3, name: '周' },
{ id: 4, name: '月' },
{ id: 5, name: '年' },
],
param: 'reportType',
filterable: true,
defaultSelect: 2, // 默认值
clearable: false,
},
{
type: 'select',
label: '原料名称',
selectOptions: [],
param: 'materialId',
filterable: true,
},
{
type: 'datePicker',
label: '时间范围',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'searchTime',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: this.$auth.hasPermi('cost:rawMaterialCostHis:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true,
},
],
};
},
components: {},
created() {
getHotMaterialList().then((response) => {
this.formConfig[1].selectOptions = response.data;
});
},
methods: {
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.reportType = val.reportType;
this.listQuery.materialId = val.materialId;
this.listQuery.times = val.searchTime ? val.searchTime : null;
this.getDataList();
break;
case 'export':
this.listQuery.reportType = val.reportType;
this.listQuery.materialId = val.materialId;
this.listQuery.times = val.searchTime ? val.searchTime : null;
this.handleExport();
break;
default:
console.log(val);
}
},
},
};
</script>
<style>
.app-container .el-table .el-table__cell {
padding: 0;
height: 35px;
}
</style>

View File

@@ -221,18 +221,30 @@ export default {
timeSelect() {
switch (this.queryParams.timeDim) {
case '1':
if (!this.timeValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.timeValue[1] - this.timeValue[0] > 7*24*3600000) {
this.$modal.msgError('最大时间范围为7天请重新选择')
this.timeValue = []
}
break
case '2':
if (!this.dateValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.dateValue[1] - this.dateValue[0] > 29*24*3600000) {
this.$modal.msgError('最大时间范围为30天请重新选择') // 自动选择默认是0:00:00要求是23:59:59
this.dateValue = []
}
break
case '4':
if (!this.monthValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.monthValue[1] - this.monthValue[0] > 729*24*3600000) {
this.$modal.msgError('最大时间范围为24个月请重新选择')// 同理上面
this.monthValue = []
@@ -338,7 +350,7 @@ export default {
}
switch (this.queryParams.timeDim) {
case '1':
if (this.timeValue.length > 0) {
if (this.timeValue && this.timeValue.length > 0) {
this.queryParams.startTime = this.timeValue[0]
this.queryParams.endTime = this.timeValue[1] // 不用转
} else {

View File

@@ -8,7 +8,6 @@
<script>
import * as echarts from 'echarts'
import resize from '@/utils/chartMixins/resize'
import moment from 'moment'
export default {
name: "LineChart",
mixins: [resize],

View File

@@ -207,18 +207,30 @@ export default {
timeSelect() {
switch (this.queryParams.timeDim) {
case '1':
if (!this.timeValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.timeValue[1] - this.timeValue[0] > 7*24*3600000) {
this.$modal.msgError('最大时间范围为7天请重新选择')
this.timeValue = []
}
break
case '2':
if (!this.dateValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.dateValue[1] - this.dateValue[0] > 29*24*3600000) {
this.$modal.msgError('最大时间范围为30天请重新选择') // 自动选择默认是0:00:00要求是23:59:59
this.dateValue = []
}
break
case '4':
if (!this.monthValue) {
this.$modal.msgError('时间范围不能为空')
return false
}
if (this.monthValue[1] - this.monthValue[0] > 729*24*3600000) {
this.$modal.msgError('最大时间范围为24个月请重新选择')// 同理上面
this.monthValue = []
@@ -307,7 +319,7 @@ export default {
}
switch (this.queryParams.timeDim) {
case '1':
if (this.timeValue.length > 0) {
if (this.timeValue && this.timeValue.length > 0) {
this.queryParams.startTime = this.timeValue[0]
this.queryParams.endTime = this.timeValue[1] // 不用转
} else {
@@ -316,7 +328,7 @@ export default {
}
break
case '2':
if (this.dateValue.length > 0) {
if (this.dateValue && this.dateValue.length > 0) {
this.queryParams.startTime = this.dateValue[0]
this.queryParams.endTime = this.dateValue[1] + 86399000 // 转为23:59:59
} else {
@@ -336,7 +348,7 @@ export default {
}
break
case '4':// 转为本月最后一天的最后一秒
if (this.monthValue.length > 0) {
if (this.monthValue && this.monthValue.length > 0) {
this.queryParams.startTime = this.monthValue[0]
this.queryParams.endTime = this.transformTime(this.monthValue[1])
} else {

View File

@@ -0,0 +1,149 @@
<template>
<el-form ref="energyQuantityManualForm" :rules="rules" label-width="90px" :model="form">
<el-row :gutter="20">
<el-col :span='12'>
<el-form-item label="能源类型" prop="energyTypeId">
<el-select v-model="form.energyTypeId" placeholder="请选择" style="width: 100%;" filterable>
<el-option
v-for="item in this.energyTypeList"
: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="tableName">
<el-select v-model="form.tableName" placeholder="请选择" style="width: 100%;" filterable>
<el-option
v-for="item in getDictDatas(DICT_TYPE.TABLE_NAME)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span='12'>
<el-form-item label="抄表数" prop="readingQuantity">
<el-input-number v-model="form.readingQuantity" :min="0" :max="999999999999" :controls='false' style="width: 50%;"></el-input-number>
<el-select v-model="form.unit" placeholder="单位" style="width: 50%;">
<el-option
v-for="item in getDictDatas(DICT_TYPE.ENERGY_UNIT)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="抄表日期" prop="recordTime">
<el-date-picker
v-model="form.recordTime"
type="date"
format="yyyy-MM-dd"
value-format="timestamp"
placeholder="选择日期"
style="width: 100%;">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import { energyQuantityManualCreate, energyQuantityManualUpdate, energyQuantityManualGet } from '@/api/base/energyQuantityManual'
import moment from 'moment'
export default {
name: 'EnergyQuantityManualAdd',
props: {
energyTypeList: {
type: Array,
required: true,
default: () => {
return []
}
}
},
data() {
return {
form: {
id: '',
energyTypeId: '',
tableName: '',
readingQuantity: null,
unit: '',
recordTime: ''
},
rules: {
energyTypeId: [{ required: true, message: '能源类型不能为空', trigger: 'change' }],
tableName: [{ required: true, message: '水/气表名不能为空', trigger: 'change' }],
readingQuantity: [{ required: true, message: '抄表数不能为空', trigger: 'blur' }],
recordTime: [{ required: true, message: '抄表日期不能为空', trigger: 'change' }]
},
isEdit: false
}
},
methods: {
init(params) {
this.form.recordTime = moment().valueOf()
if (params.type === 'add') {
this.isEdit = false
} else if (params.type === 'meterReading') {
this.isEdit = false
this.form.energyTypeId = params.energyTypeId
this.form.tableName = params.tableName + ''
}else {
this.isEdit = true
this.form.id = params.id
energyQuantityManualGet({id: this.form.id}).then(res => {
if (res.code === 0) {
this.form.energyTypeId = res.data.energyTypeId
this.form.tableName = res.data.tableName ? res.data.tableName+'' : ''
this.form.readingQuantity = res.data.readingQuantity
this.form.unit = res.data.unit ? res.data.unit+'' : ''
this.form.recordTime = res.data.recordTime ? res.data.recordTime : null
}
})
}
},
submitForm() {
this.$refs['energyQuantityManualForm'].validate((valid) => {
if (valid) {
if (!this.form.unit) {
this.$modal.msgError("抄表数单位不能为空");
return false
}
if (this.isEdit) {
// 编辑
energyQuantityManualUpdate({...this.form}).then((res) => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功");
this.$emit('successSubmit')
}
})
} else {
energyQuantityManualCreate({...this.form}).then((res) => {
if (res.code === 0) {
this.$modal.msgSuccess("操作成功");
this.$emit('successSubmit')
}
})
}
} else {
return false
}
})
},
formClear() {
this.$refs.energyQuantityManualForm.resetFields()
this.form.unit = ''
this.isEdit = false
}
}
}
</script>

View File

@@ -0,0 +1,309 @@
<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"
@selection-change="selectChange"
>
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="120"
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-quantity-manual-add ref="energyQuantityManualAdd" :energyTypeList="energyTypeList" @successSubmit="successSubmit" />
</base-dialog>
</div>
</template>
<script>
import { energyQuantityManualPage, energyQuantityManualDelete, energyQuantityManualExport } from "@/api/base/energyQuantityManual"
import { getEnergyTypeListAll } from "@/api/base/energyType"
import { publicFormatter } from '@/utils/dict'
import { parseTime, parseTimeTable } from '@/utils/ruoyi'
// import FileSaver from "file-saver"
// import * as XLSX from 'xlsx/xlsx.mjs'
import EnergyQuantityManualAdd from './components/energyQuantityManualAdd'
import moment from 'moment'
const tableProps = [
{
prop: 'energyType',
label: '能源类型',
minWidth: 110,
showOverflowtooltip: true
},
{
prop: 'tableName',
label: '水/气表名',
filter: publicFormatter('table_name'),
minWidth: 110
},
{
prop: 'recordTime',
label: '抄表日期',
filter: parseTimeTable('{y}-{m}-{d}'),
minWidth: 110
},
{
prop: 'readingQuantity',
label: '抄表值'
},
{
prop: 'recordTimeLast',
label: '上期抄表日期',
filter: parseTimeTable('{y}-{m}-{d}'),
minWidth: 110
},
{
prop: 'readingQuantityLast',
label: '上期抄表值',
minWidth: 110
},
{
prop: 'diff',
label: '差值'
}
]
export default {
name: "EnergyQuantityManual",
data() {
return {
formConfig: [
{
type: 'select',
label: '能源类型',
selectOptions: [],
param: 'energyTypeId',
filterable: true
},
{
type: 'datePicker',
label: '抄表日期',
dateType: 'daterange',
format: 'yyyy-MM-dd',
valueFormat: "timestamp",
rangeSeparator: '-',
startPlaceholder: '开始时间',
endPlaceholder: '结束时间',
param: 'timeVal',
defaultSelect: []
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary'
},
{
type: 'separate'
},
{
type: this.$auth.hasPermi('base:energy-quantity-manual:export') ? 'button' : '',
btnName: '导出',
name: 'export',
color: 'primary',
plain: true
},
{
type: this.$auth.hasPermi('base:energy-quantity-manual:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
}
],
tableProps,
tableH: this.tableHeight(260),
// 总条数
total: 0,
// 班次基础信息列表
list: [],
tableBtn: [
this.$auth.hasPermi('base:energy-quantity-manual:create')
? {
type: 'meterReading',
btnName: '抄表'
}
: undefined,
this.$auth.hasPermi('base:energy-quantity-manual:update')
? {
type: 'edit',
btnName: '编辑',
showParam: {
type: '&',
data: [
{
type: 'equal',
name: 'latest',
value: 1
}
]
}
}
: undefined,
this.$auth.hasPermi('base:energy-quantity-manual:delete')
? {
type: 'delete',
btnName: '删除'
}
: undefined
].filter((v)=>v),
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 20,
energyTypeId: '',
recordTime: []
},
energyTypeList: [],
exportList: [],
addOrEditTitle: '',
centervisible: false,
};
},
components: { EnergyQuantityManualAdd },
created() {
window.addEventListener('resize', () => {
this.tableH = this.tableHeight(260)
})
let end = moment(moment().format('YYYY-MM-DD 23:59:59')).valueOf()
let start = moment(moment().subtract(7, 'days').format('YYYY-MM-DD 00:00:00')).valueOf()
this.formConfig[1].defaultSelect = [start, end]
this.queryParams.recordTime[0] = start
this.queryParams.recordTime[1] = end
this.getList();
this.getTypeList()
},
methods: {
buttonClick(val) {
this.queryParams.pageNo = 1;
this.queryParams.energyTypeId = val.energyTypeId
this.queryParams.recordTime[0] = val.timeVal ? moment(moment(val.timeVal[0]).format('YYYY-MM-DD 00:00:00')).valueOf() : null
this.queryParams.recordTime[1] = val.timeVal ? moment(moment(val.timeVal[1]).format('YYYY-MM-DD 23:59:59')).valueOf() : null
switch (val.btnName) {
case 'search':
this.getList()
break
case 'add':
this.addOrEditTitle = '新增'
this.centervisible = true
let params = {}
params.type = 'add'
this.$nextTick(() => {
this.$refs.energyQuantityManualAdd.init(params)
})
break
default:
this.$modal.confirm('是否确认导出').then(() => {
return energyQuantityManualExport({...this.queryParams});
}).then(response => {
this.$download.excel(response, '能源报表.xls');
}).catch(() => {})
}
},
/** 查询列表 */
getList() {
energyQuantityManualPage(this.queryParams).then(response => {
let arr = response.data.list || []
arr && arr.map(item => {
item.amount = item.amount ? (!isNaN(parseFloat(item.amount)) && isFinite(item.amount) ? item.amount.toFixed(2) : '') : ''
})
this.list = arr
this.total = response.data.total;
this.exportList = []
});
},
getTypeList() {
getEnergyTypeListAll().then((res) => {
this.formConfig[0].selectOptions = res.data || []
this.energyTypeList = res.data || []
})
},
selectChange(val) {
console.log(val)
this.exportList = val
},
handleClick(val) {
console.log(val)
switch (val.type) {
case 'edit':
this.addOrEditTitle = '编辑'
this.centervisible = true
let paramA = {}
paramA.type = 'edit'
paramA.id = val.data.id
this.$nextTick(() => {
this.$refs.energyQuantityManualAdd.init(paramA)
})
break
case 'meterReading':
this.addOrEditTitle = '新增'
this.centervisible = true
let paramB = {}
paramB.type = 'meterReading'
paramB.energyTypeId = val.data.energyTypeId
paramB.tableName = val.data.tableName
this.$nextTick(() => {
this.$refs.energyQuantityManualAdd.init(paramB)
})
break
default:
this.handleDelete(val.data)
}
},
// 新增
handleCancel() {
this.$refs.energyQuantityManualAdd.formClear()
this.centervisible = false
this.addOrEditTitle = ''
},
handleConfirm() {
this.$refs.energyQuantityManualAdd.submitForm()
},
successSubmit() {
this.handleCancel()
this.getList()
},
/** 删除按钮操作 */
handleDelete(row) {
console.log(row.id)
this.$modal.confirm('是否确认删除能源类型为"' + row.energyType + '"的数据项?').then(function() {
return energyQuantityManualDelete({id: row.id});
}).then(() => {
this.queryParams.pageNo = 1;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
}
}
};
</script>

View File

@@ -1,12 +1,13 @@
<template>
<el-popover placement="right" width="400" trigger="click">
<span v-if='tableProps.length'>计量维度 {{dim === 4 ? '月' : (dim === 5 ? '年' : '-')}}</span>
<el-table :data="tableData" v-if='tableProps.length'>
<el-table-column
v-for='item in tableProps'
:key="item.prop"
:prop="item.prop"
:label="item.label"
:align="item.align ? item.align : 'left'"
:align="item.align ? item.align : 'left'"
width="120">
</el-table-column>
</el-table>
@@ -70,7 +71,8 @@ export default {
tableProps: [],
singlePrice:'',
temp1,
temp2
temp2,
dim: ''
}
},
methods: {
@@ -78,7 +80,6 @@ export default {
let id = data.id
getEnergyType(id).then((res) => {
if (res.code === 0) {
console.log(res)
if (res.data.pricingMethod === 0) {
this.tableProps = this.temp1
this.singlePrice = ''
@@ -87,6 +88,7 @@ export default {
item.price = item.price.toFixed(2)
}
this.tableData = arr1
this.dim = ''
} else if (res.data.pricingMethod === 1) {
this.tableProps = this.temp2
this.singlePrice = ''
@@ -95,10 +97,12 @@ export default {
item.price = item.price.toFixed(2)
}
this.tableData = arr2
this.dim = res.data.dim
} else {
this.tableProps = []
this.tableData = []
this.singlePrice = res.data.singlePrice
this.dim = ''
}
}
})

View File

@@ -22,7 +22,6 @@ export default {
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}

View File

@@ -28,7 +28,6 @@ export default {
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}

View File

@@ -41,6 +41,14 @@
<el-input-number v-model="form.singlePrice" :precision="2" :min="0" :max="999999999" style="width: 100%;"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12" v-show="form.pricingMethod === 1">
<el-form-item label="计量维度" prop="dim">
<el-select v-model="form.dim" placeholder="请选择" style="width: 100%;">
<el-option label="月" :value= '4' ></el-option>
<el-option label="年" :value= '5' ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24" v-show="form.pricingMethod === 0">
<el-form-item label="时间段" prop="pricingMethod">
<base-table
@@ -213,10 +221,10 @@ export default {
// 增加
emitButtonClick1() {
let n = this.tableData1.length
if (n >=3) {
this.$modal.msgWarning('最多可添加3档计价')
return false
}
// if (n >=3) {
// this.$modal.msgWarning('最多可添加3档计价')
// return false
// }
let obj = {}
obj.startTime = n === 0 ? '' : this.tableData1[n-1].endTime
obj.endTime = ''
@@ -289,6 +297,7 @@ export default {
unit: this.form.unit,
pricingMethod: this.form.pricingMethod,
description: this.form.description,
dim: this.form.pricingMethod === 1 ? this.form.dim: '',
singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '',
segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [],
usedPriceList: this.form.pricingMethod === 1 ? this.tableData2: []
@@ -305,6 +314,7 @@ export default {
unit: this.form.unit,
pricingMethod: this.form.pricingMethod,
description: this.form.description,
dim: this.form.pricingMethod === 1 ? this.form.dim: '',
singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '',
segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [],
usedPriceList: this.form.pricingMethod === 1 ? this.tableData2: []

View File

@@ -2,6 +2,18 @@
<el-form ref="form" :rules="rules" label-width="110px" :model="form">
<el-row>
<el-col :span="12">
<el-form-item label="抄表方式" prop="method">
<el-select v-model="form.method" placeholder="请选择" style="width: 100%;" @change="changeMethod">
<el-option
v-for="item in getDictDatas(DICT_TYPE.METHOD)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if='form.method == 1'>
<el-form-item label="监控对象" prop="objectId">
<el-cascader
style='width: 100%;'
@@ -13,8 +25,20 @@
clearable></el-cascader>
</el-form-item>
</el-col>
<el-col :span="12" v-if='form.method == 2'>
<el-form-item label="水/气表名" prop="tableName">
<el-select v-model="form.tableName" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in getDictDatas(DICT_TYPE.TABLE_NAME)"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="能源类型" prop="energyTypeId">
<el-form-item label="监控能源类型" prop="energyTypeId">
<el-select v-model="form.energyTypeId" placeholder="请选择" style="width: 100%;" filterable @change="toggleType">
<el-option
v-for="item in this.energyTypeList"
@@ -25,11 +49,29 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12" v-if='form.method == 1'>
<el-form-item label="监控模式" prop="type">
<el-select v-model="form.type" placeholder="请选择" style="width: 100%;" @change="typeChange">
<el-option label="合并" :value= "1" ></el-option>
<el-option label="详细" :value= "2" ></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" v-if='form.method == 1'>
<el-form-item label="监控详细参数" prop="type" v-if="form.type === 2">
<el-select v-model="form.plcParamId" placeholder="请选择" style="width: 100%;" @change="selectDetail">
<el-option
v-for="item in detailList"
: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="limitType">
<el-select v-model="form.limitType" placeholder="请选择" style="width: 100%;">
<el-select v-model="form.limitType" placeholder="请选择" style="width: 100%;" :disabled='form.method == 2'>
<el-option
v-for="item in getDictDatas(DICT_TYPE.MONITOR_INDEX_TYPE)"
:key="item.value"
@@ -39,34 +81,12 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="监控模式" prop="type">
<el-select v-model="form.type" placeholder="请选择" style="width: 100%;" @change="typeChange">
<el-option label="合并" :value= "1" ></el-option>
<el-option label="详细" :value= "2" ></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="消耗量阈值">
<el-input-number v-model="form.minValue" placeholder="最小值" :max="9999999" style="width: 50%;"></el-input-number>
<el-input-number v-model="form.maxValue" placeholder="最大值" :max="9999999" style="width: 50%;"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="监控详细参数" prop="type" v-if="form.type === 2">
<el-select v-model="form.plcParamId" placeholder="请选择" style="width: 100%;" @change="selectDetail">
<el-option
v-for="item in detailList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
@@ -91,19 +111,21 @@ export default {
return {
form: {
id: '',
method: '1',
objectId: '',
objectType: '',
energyTypeId: '',
type: '',
plcParamId: '',
limitType: '',
minValue: null,
maxValue: null
minValue: 0,
maxValue: 0
},
objIds: [],// 回显数组
isEdit: false, //是否是编辑
rules: {
objectId: [{ required: true, message: '对象不能为空', trigger: 'change' }],
method: [{ required: true, message: '抄表方式不能为空', trigger: 'change' }],
objectId: [{ required: true, message: '监控对象不能为空', trigger: 'change' }],
energyTypeId: [{ required: true, message: '能源类型不能为空', trigger: 'change' }],
type: [{ required: true, message: '监控模式不能为空', trigger: 'change' }],
limitType: [{ required: true, message: '指标类型不能为空', trigger: 'change' }]
@@ -120,6 +142,7 @@ export default {
if (res.code === 0) {
this.form = res.data
this.form.plcParamId = res.data.plcParamId || ''
this.form.method = this.form.method ? this.form.method + '' : ''
this.form.limitType = this.form.limitType ? this.form.limitType + '' : ''
this.objIds = this.changeDetSelect(this.form.objectId, this.objList)
if (this.form.type === 2) {
@@ -132,6 +155,14 @@ export default {
this.form.id = ''
}
},
// 切换方式
changeMethod() {
if(this.form.method === '2'){
this.form.limitType = "2"
}else{
this.form.limitType = ''
}
},
// 监控详细参数
getDetailList() {
getEnergyParamList({
@@ -208,7 +239,8 @@ export default {
return false
}
}
// this.form.limitType = Number(this.form.limitType)
this.form.minValue = this.form.minValue || 0
this.form.maxValue = this.form.maxValue || 0
if (this.isEdit) {
// 编辑
updateEnergyLimit({...this.form}).then((res) => {

View File

@@ -51,6 +51,11 @@ import { getTree } from '@/api/base/factory'
import { publicFormatter } from '@/utils/dict'
import EnergyLimitAdd from './components/energyLimitAdd'
const tableProps = [
{
prop: 'method',
label: '抄表方式',
filter: publicFormatter('method')
},
{
prop: 'objName',
label: '监控对象'
@@ -59,6 +64,11 @@ const tableProps = [
prop: 'objCode',
label: '对象编码'
},
{
prop: 'tableName',
label: '水/气表名',
filter: publicFormatter('table_name')
},
{
prop: 'energyType',
label: '能源类型'

View File

@@ -1,5 +1,5 @@
<template>
<div class="app-container">
<div class="app-container energyOverlimitLog">
<!-- 搜索工作栏 -->
<search-bar
@@ -7,14 +7,29 @@
ref="searchBarForm"
@headBtnClick="buttonClick"
/>
<el-tabs v-model="activeName" @tab-click="toggleTab">
<el-tab-pane label="自动抄表" name="auto"></el-tab-pane>
<el-tab-pane label="手动抄表" name="manual"></el-tab-pane>
</el-tabs>
<!-- 列表 -->
<base-table
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-props="tableProps"
:table-data="list"
:max-height="tableH"
/>
<div v-if="activeName === 'auto'">
<base-table
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-props="tableProps"
:table-data="list"
:max-height="tableH"
/>
</div>
<div v-if="activeName === 'manual'">
<base-table
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-props="tableProps2"
:table-data="list2"
:max-height="tableH"
/>
</div>
<pagination
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@@ -28,6 +43,7 @@
import { getEnergyOverlimitLogPage } from "@/api/monitoring/energyOverlimitLog";
import { getEnergyTypeListAll } from "@/api/base/energyType";
import { publicFormatter } from '@/utils/dict'
import { parseTime } from '@/utils/ruoyi'
const tableProps = [
{
prop: 'objName',
@@ -65,6 +81,41 @@ const tableProps = [
{
prop: 'overValue',
label: '超出值'
},
{
prop: 'time',
label: '提醒时间',
filter: parseTime,
minWidth: 160
}
]
const tableProps2 = [
{
prop: 'energyType',
label: '能源类型'
},
{
prop: 'limitType',
label: '指标类型',
filter: publicFormatter('monitor_index_type')
},
{
prop: 'realityValue',
label: '实际值'
},
{
prop: 'limitValue',
label: '阈值'
},
{
prop: 'overValue',
label: '超出值'
},
{
prop: 'time',
label: '提醒时间',
filter: parseTime,
minWidth: 160
}
]
export default {
@@ -93,18 +144,20 @@ export default {
color: 'primary'
}
],
activeName: 'auto',
tableProps,
tableProps2,
tableH: this.tableHeight(260),
// 总条数
total: 0,
// 班次基础信息列表
list: [],
list2: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 20,
energyTypeId: '',
indexType: ''
indexType: '',
method: '1'
},
typeList: [
{id: 1, name: '合并'},
@@ -155,7 +208,47 @@ export default {
console.log(res)
this.formConfig[0].selectOptions = res.data || []
})
},
toggleTab() {
if (this.activeName === 'auto') {
this.queryParams.method = '1'
}else{
this.queryParams.method = '2'
}
this.queryParams.pageNo = 1
this.getList()
}
}
};
</script>
<style lang='scss'>
.energyOverlimitLog {
.el-tabs__nav::after {
content: "";
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 2px;
background-color: #e4e7ed;
}
.el-tabs__nav-wrap::after {
width: 0;
}
.el-tabs__item {
padding: 0 10px;
}
.el-tabs__item:hover {
color: rgba(0, 0, 0, 0.85);
}
.el-tabs__item.is-active {
color: rgba(0, 0, 0, 0.85);
}
.el-tabs__item {
color: rgba(0, 0, 0, 0.45);
}
.searchBarBox {
margin-bottom: 0;
}
}
</style>

View File

@@ -27,20 +27,20 @@
<div class="legend">
<div class="legend-item">
<span class="icon blue"></span>
<span class="text">工作时长</span>
<span class="text">有效时长</span>
</div>
<div class="legend-item">
<span class="icon green"></span>
<span class="text">机时长</span>
<span class="text">机时长</span>
</div>
<div class="legend-item">
<span class="icon purple"></span>
<span class="text">故障时长</span>
<span class="text">中断时长</span>
</div>
<div class="legend-item">
<!-- <div class="legend-item">
<span class="icon yellow"></span>
<span class="text">速度开动率</span>
</div>
</div> -->
</div>
<div v-if="list.length" class="graph-grid">
<div class="bg-grid grid-line">
@@ -389,14 +389,14 @@ export default {
position: relative;
padding: 4px 0;
padding-left: 12px;
font-size: 14px;
font-size: 18px;
&::before {
content: '';
position: absolute;
left: 0;
top: 6px;
height: 16px;
height: 20px;
width: 4px;
border-radius: 1px;
background: #0b58ff;

View File

@@ -16,23 +16,22 @@
<div class="data-view__item">
<!-- <div class="data-view__item__value">111</div> -->
<div class="data-view__item__value">{{ textData.workTime }}</div>
<div class="data-view__item__title blue">工作时长</div>
<div class="data-view__item__title blue">有效时长</div>
</div>
<div class="data-view__item">
<!-- <div class="data-view__item__value">22</div> -->
<div class="data-view__item__value">{{ textData.stopTime }}</div>
<div class="data-view__item__title green">机时长</div>
<div class="data-view__item__title green">机时长</div>
</div>
<div class="data-view__item">
<!-- <div class="data-view__item__value">10</div> -->
<div class="data-view__item__value">{{ textData.downTime }}</div>
<div class="data-view__item__title purple">故障时长</div>
<div class="data-view__item__title purple">中断时长</div>
</div>
<div class="data-view__item">
<!-- <div class="data-view__item__value">100%</div> -->
<!-- <div class="data-view__item">
<div class="data-view__item__value">{{ textData.peEfficiency }}</div>
<div class="data-view__item__title yellow">速度开动率</div>
</div>
</div> -->
</div>
</div>
</template>
@@ -93,7 +92,7 @@ export default {
// 外环
name: '',
type: 'pie',
radius: ['75%', '90%'],
radius: ['60%', '90%'],
center: ['50%', '48%'],
label: {
show: false,
@@ -259,7 +258,7 @@ export default {
}
.data-view__item__title {
font-size: 8px;
font-size: 14px;
line-height: 14px;
}

View File

@@ -19,6 +19,7 @@
:page="1"
:limit="10"
:table-data="list"
height="65vh"
@emitFun="handleEmitFun" />
<!-- <el-row>
@@ -122,23 +123,24 @@ export default {
// : undefined,
// ].filter((v) => v),
tableProps: [
{ prop: 'factoryName', label: '工厂' },
{ prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备' },
{ prop: 'factoryName', label: '工厂', showOverflowtooltip: true },
{ prop: 'lineName', label: '产线', showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段', showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备', showOverflowtooltip: true },
{
label: '有效时间',
children: [
{
width: 128,
prop: 'workTime',
label: '工作时长[h]',
label: '工作时长(h)',
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
{
width: 128,
prop: 'workRate',
label: '百分比[%]',
filter: (val) => (val != null ? +Number(val).toFixed(3) : '-'),
label: '百分比(%)',
filter: (val) => (val != null ? +Number(val).toFixed(0) : '-'),
},
],
},
@@ -148,9 +150,10 @@ export default {
{
width: 128,
prop: 'stopTime',
label: '停机时长[h]',
label: '停机时长(h)',
filter: (val) => (val != null ? +Number(val).toFixed(0) : '-'),
},
{ width: 128, prop: 'stopRate', label: '百分比[%]' },
{ width: 128, prop: 'stopRate', label: '百分比(%)', filter: (val) => (val != null ? +Number(val).toFixed(0) : '-'), },
],
},
{
@@ -159,48 +162,52 @@ export default {
{
width: 128,
prop: 'downTime',
label: '故障时长[h]',
filter: (val) => (val != null ? +val.toFixed(3) : '-'),
label: '故障时长(h)',
filter: (val) => (val != null ? +val.toFixed(2) : '-'),
},
{ width: 128, prop: 'downRate', label: '百分比[%]' },
{ width: 128, prop: 'downRate', label: '百分比(%)', filter: (val) => (val != null ? +Number(val).toFixed(0) : '-'), },
{
width: 128,
prop: 'timeEfficiency',
label: '时间开动率',
filter: (val) => (val != null ? +Number(val).toFixed(3) : '-'),
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
],
},
{
label: '速度损失',
showOverflowtooltip: true,
children: [
{
width: 128,
prop: 'realProcSpeed',
label: '实际加工速度',
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
{
width: 128,
prop: 'designProcSpeed',
label: '理论加工速度',
showOverflowtooltip: true,
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
{
width: 128,
prop: 'peEfficiency',
label: '速度开动率',
filter: (val) => (val != null ? +Number(val).toFixed(3) : '-'),
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
],
},
{
prop: 'oee',
label: 'OEE',
filter: (val) => (val != null ? +Number(val).toFixed(3) : '-'),
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
{
prop: 'teep',
label: 'TEEP',
filter: (val) => (val != null ? +Number(val).toFixed(3) : '-'),
filter: (val) => (val != null ? +Number(val).toFixed(2) : '-'),
},
// {
// _action: 'view-trend',
@@ -433,6 +440,9 @@ export default {
</script>
<style scoped lang="scss">
.app-container {
overflow: inherit;
}
.visualization {
display: grid;
grid-template-columns: repeat(3, minmax(240px, 1fr));

View File

@@ -94,7 +94,7 @@ export default {
return {
readOnly: false,
chosedLogId: false,
searchBarKeys: ['equipmentName', 'recordTime'],
searchBarKeys: ['equipmentName', 'createTime'],
tableBtn: [
// this.$auth.hasPermi('equipment:spare-parts-config:update')
// ? {
@@ -124,11 +124,11 @@ export default {
label: '报警级别',
filter: publicFormatter(this.DICT_TYPE.EQU_ALARM_LEVEL),
},
{ prop: 'createTime', label: '报警时间', filter: timeFilter }, // 接口缺
{ prop: 'alarmCode', label: '设备报警码' }, // 接口缺
{ prop: 'createTime', label: '报警时间', filter: timeFilter },
{ prop: 'alarmCode', label: '设备报警码' },
{ prop: 'alarmContent', label: '报警内容' },
{ prop: 'opt1', label: '处理记录', name: '查看', subcomponent: btn },
{ prop: 'opt2', label: '处理', name: '报警处理', subcomponent: btn }, // TODO: 是否换成按钮, 群里问
{ prop: 'opt2', label: '处理', name: '报警处理', subcomponent: btn },
// { prop: 'remark', label: '备注' },
],
searchBarFormConfig: [
@@ -145,8 +145,8 @@ export default {
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd',
valueFormat: 'timestamp',
// valueFormat: 'yyyy-MM-dd HH:mm:ss',
// valueFormat: 'timestamp',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',

View File

@@ -9,8 +9,7 @@
<el-drawer
:visible="visible"
:show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false"
:before-close="handleCancel"
:wrapper-closable="false"
class="drawer"
custom-class="mes-drawer"
:size="size || '50%'"
@@ -130,12 +129,13 @@
</section>
</div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">返回</el-button>
<el-button
type="primary"
v-if="!mode.includes('detail')"
@click="handleSave">
确定
保存
</el-button>
</div>
</div>

View File

@@ -9,8 +9,7 @@
<el-drawer
:visible="visible"
:show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false"
:before-close="handleCancel"
:wrapper-closable="false"
class="drawer"
custom-class="mes-drawer"
:size="size || '50%'"
@@ -129,10 +128,11 @@
</section>
</div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer">
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<el-button
type="primary"
v-if="!mode.includes('detail')"
@click="handleCancel">
确定
</el-button>

View File

@@ -34,7 +34,7 @@
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
width="30%"
width="700px"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">

View File

@@ -25,7 +25,6 @@
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="90"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
@@ -42,7 +41,7 @@
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
width="45%"
width="700px"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
@@ -128,7 +127,7 @@ export default {
// width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// },
{ prop: 'code', label: '编码', showOverflowtooltip: true },
{ prop: 'code', label: '编码' },
{ prop: 'plcTableName', label: '关联表名' },
{ prop: 'name', label: '标识名称' },
{ prop: 'enName', label: '英文名称' },
@@ -137,7 +136,7 @@ export default {
label: '是否采集',
subcomponent: switchBtn,
},
{ prop: 'description', label: '描述', showOverflowtooltip: true },
{ prop: 'description', label: '描述' },
],
searchBarFormConfig: [
{
@@ -214,28 +213,16 @@ export default {
},
],
[
// {
// switch: true,
// label: '是否采集', // 是否采集 0 代表不采集, 1 代表采集
// prop: 'collection',
// bind: {
// 'active-value': 1,
// 'inactive-value': 0,
// value: 1,
// },
// },
{
select: true,
options: [
{ label: '否', value: 0 },
{ label: '是', value: 1 }
],
label: '是否采集',
switch: true,
label: '是否采集', // 是否采集 0 代表不采集, 1 代表采集
prop: 'collection',
bind: {
clearable: true, filterable: true
}
}
'active-value': 1,
'inactive-value': 0,
value: 1,
},
},
],
[
{

View File

@@ -9,8 +9,7 @@
<el-drawer
:visible="visible"
:show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false"
:before-close="handleCancel"
:wrapper-closable="false"
class="drawer"
custom-class="mes-drawer"
:size="size || '50%'"
@@ -148,12 +147,13 @@
</section>
</div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer">
<div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button>
<el-button
type="primary"
v-if="!mode.includes('detail')"
@click="handleSave">
确定
保存
</el-button>
</div>
</div>

View File

@@ -84,10 +84,10 @@ export default {
: undefined,
].filter((v) => v),
tableProps: [
{ prop: 'program', label: '巡检项目' },
{ prop: 'content', label: '巡检内容' },
{ prop: 'code', label: '巡检内容编码' },
{ prop: 'remark', label: '备注' },
{ prop: 'program', label: '巡检项目', showOverflowtooltip: true },
{ prop: 'content', label: '巡检内容', minWidth: 150, showOverflowtooltip: true },
{ prop: 'code', label: '巡检内容编码', showOverflowtooltip: true },
{ prop: 'remark', label: '备注', showOverflowtooltip: true },
],
searchBarFormConfig: [
{

View File

@@ -1,8 +1,8 @@
<!--
<!--
filename: dialogForm.vue
author: liubin
date: 2023-10-31 15:55:13
description:
description:
-->
<template>
@@ -12,7 +12,7 @@
:show-close="false"
:wrapper-closable="isdetail"
class="drawer"
size="60%"
size="55%"
@closed="$emit('destroy')">
<small-title slot="title" :no-padding="true">
{{ isdetail ? '查看详情' : !dataForm.id ? '新增' : '编辑' }}
@@ -24,7 +24,7 @@
label-width="100px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId">
<el-select
v-model="dataForm.equipmentId"
@@ -41,7 +41,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<!-- <el-form-item label="物料名称" prop="name">
<el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入物料名称" />
</el-form-item> -->
@@ -61,21 +61,19 @@
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" disabled clearable placeholder="请输入设备编码" />
</el-form-item>
</el-col>
<el-col :span="12">
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="巡检人" prop="responsible">
<el-input v-model="dataForm.responsible" :disabled="isdetail" clearable placeholder="请输入巡检人" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="巡检时间" prop="actualTime">
<el-date-picker
v-model="dataForm.actualTime"
@@ -86,7 +84,7 @@
placeholder="选择巡检时间" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="数据来源" prop="origin">
<el-select
v-model="dataForm.origin"
@@ -95,7 +93,7 @@
style="width: 100%"
placeholder="请选择数据来源">
<el-option key="1" label="手动" :value="1" />
<el-option key="2" label="自动" :value="2" />
<el-option key="2" label="PDA" :value="2" />
</el-select>
</el-form-item>
</el-col>
@@ -108,16 +106,17 @@
:table-data="list" />
</el-form-item>
<el-form-item label="巡检详情" prop="description">
<editor v-model="dataForm.description" :read-only="isdetail" :min-height="150"/>
<editor v-if="!isdetail" v-model="dataForm.description" :min-height="150"/>
<div v-else v-html="dataForm.description" style="padding: 5px; margin-left: 5px; border: 1px solid #dfdfdf" />
</el-form-item>
<el-form-item label="附件">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="isdetail" @name="setFileName" />
</el-form-item>
</el-form>
<div v-if="!isdetail" class="drawer-body__footer">
<el-button type="primary" @click="goback()">取消</el-button>
<el-button @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</el-drawer>
@@ -126,7 +125,7 @@
<script>
import SmallTitle from '../../../base/alarm/Record/SmallTitle.vue';
import { createCheckLog, updateCheckLog, getcheckConfigByEqList, getEqCheckLog } from '@/api/equipment/base/inspection/record'
import { getEquipmentAll } from '@/api/base/equipment'
import { getEquipmentPage } from '@/api/base/equipment'
import Editor from "@/components/Editor";
import { getCheckDetPage } from "@/api/equipment/base/inspection/settings";
// import FileUpload from "@/components/FileUpload";
@@ -185,7 +184,7 @@ export default {
actualTime: undefined,
responsible: undefined,
description: undefined,
origin: undefined,
origin: 1,
files: []
},
list: [],
@@ -204,7 +203,7 @@ export default {
}
};
},
mounted() {
created() {
this.getDict()
},
methods: {
@@ -212,17 +211,24 @@ export default {
this.fileName = val
},
async getDict() {
const res = await getEquipmentAll()
this.eqList = res.data
const res = await getEquipmentPage({
pageNo: 1,
pageSize: 100,
special: false
})
this.eqList = res.data.list
const configres = await getcheckConfigByEqList()
this.configList = configres.data
},
async setConfig() {
const configres = await getcheckConfigByEqList({equipmentId: this.dataForm.equipmentId})
this.configList = configres.data
this.dataForm.configId = this.configList.filter(it => {
return it.id === this.dataForm.configId
})[0]?.id ?? undefined
this.dataForm.equipmentCode = this.eqList.filter(item => {
return item.id === this.dataForm.equipmentId
})[0].code
})[0]?.code ?? undefined
},
goback() {
this.$emit('refreshDataList');
@@ -265,8 +271,8 @@ export default {
this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName
}
this.dataForm.description = this.dataForm.description || '无'
this.setConfig()
this.setInspectionContet()
});
} else {
// if (this.urlOptions.isGetCode) {

View File

@@ -49,8 +49,7 @@
<addRecord
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getList"
@destroy="addOrUpdateVisible = false" />
@refreshDataList="getList" />
</div>
</template>
@@ -94,7 +93,7 @@ export default {
tableProps: [
{ prop: 'configName', label: '配置名称' },
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'origin', label: '数据来源', filter: (val) => ['', '手动', '自动'][val] },
{ prop: 'origin', label: '数据来源', filter: (val) => ['', '手动', 'PDA'][val] },
// { prop: 'sectionName', label: '计划巡检时间' },
{ prop: 'actualTime', label: '实际巡检时间', filter: parseTime },
// { prop: 'maintenanceDetail', label: '完成状态' },
@@ -131,6 +130,15 @@ export default {
{
type: 'separate',
},
{
type: this.$auth.hasPermi('equipment:check-record:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
plain: true,
color: 'primary',
},
{
type: this.$auth.hasPermi('equipment:check-record:create')
? 'button'
@@ -140,17 +148,6 @@ export default {
plain: true,
color: 'success',
},
{
type: 'separate',
},
{
type: this.$auth.hasPermi('equipment:check-record:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'warning',
},
],
rows: [
[
@@ -218,6 +215,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
special: false,
maintenanceStatus: null,
createTime: null,
equipmentId: null,
@@ -234,11 +232,15 @@ export default {
},
methods: {
initSearchBar() {
this.http('/base/core-equipment/listAll', 'get').then(({ data }) => {
this.http('/base/core-equipment/page', 'get', {
special: false,
pageNo: 1,
pageSize: 99,
}).then(({ data }) => {
this.$set(
this.searchBarFormConfig[0],
'selectOptions',
data.map((item) => ({
(data?.list || []).map((item) => ({
name: item.name,
id: item.id,
}))

View File

@@ -2,14 +2,14 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: DY
* @LastEditTime: 2023-11-27 10:48:55
* @LastEditTime: 2023-12-01 11:02:43
* @Description:
-->
<template>
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="false"
:wrapper-closable="true"
class="drawer"
size="50%">
<small-title slot="title" :no-padding="true">
@@ -43,6 +43,8 @@
</el-form>
</div>
<el-divider />
<div class="attr-list">
<small-title
style="margin: 16px 0; padding-left: 8px"
@@ -78,9 +80,9 @@
:page-sizes="[5, 10, 15]"
@pagination="getList" />
<div class="drawer-body__footer">
<!-- <div class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div> -->
</div>
</div>

View File

@@ -1,7 +1,7 @@
<template>
<el-dialog
:visible.sync="visible"
:width="'35%'"
:width="'30%'"
:append-to-body="true"
:close-on-click-modal="false"
class="dialog">
@@ -17,7 +17,7 @@
ref="dataForm"
:model="dataForm"
:rules="dataRule"
label-width="100px"
label-width="60px"
@keyup.enter.native="dataFormSubmit()">
<el-form-item label="巡检" prop="checkId">
<el-select v-model="dataForm.checkId" filterable placeholder="请选择巡检" style="width: 100%">

View File

@@ -66,6 +66,13 @@ export default {
addOrEditTitle: '',
searchBarKeys: ['equipmentId', 'name'],
tableBtn: [
this.$auth.hasPermi('equipment:check-setting:addInsp')
? {
type: 'add',
btnName: '添加',
showTip: '添加巡检'
}
: undefined,
this.$auth.hasPermi('equipment:check-setting:update')
? {
type: 'edit',
@@ -78,12 +85,6 @@ export default {
btnName: '查看详情',
}
: undefined,
this.$auth.hasPermi('equipment:check-setting:addInsp')
? {
type: 'add',
btnName: '添加巡检',
}
: undefined,
this.$auth.hasPermi('equipment:check-setting:delete')
? {
type: 'delete',
@@ -92,12 +93,12 @@ export default {
: undefined,
].filter((v) => v),
tableProps: [
{ prop: 'name', label: '配置名' },
{ prop: 'code', label: '编码' },
{ prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备' },
{ prop: 'equipmentCode', label: '设备编码' },
{ prop: 'name', label: '配置名', width: 110, showOverflowtooltip: true },
{ prop: 'code', label: '编码', minWidth: 150, showOverflowtooltip: true },
{ prop: 'lineName', label: '产线', showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段', showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备', showOverflowtooltip: true },
{ prop: 'equipmentCode', label: '设备编码', minWidth: 150, showOverflowtooltip: true },
// { prop: 'responsible', label: '负责人' },
{ prop: 'checkNumber', label: '巡检条数' }, // TODO: 操作 选项,四个,群里询问
],

View File

@@ -49,7 +49,7 @@
<script>
import { publicFormatter } from '@/utils/dict';
// import moment from 'moment';
import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { exportMaintainMonitorExcel } from '@/api/equipment/base/maintain/record'
import { parseTime } from '@/utils/ruoyi'
@@ -67,7 +67,7 @@ const remainBox = {
color() {
if (this.value) {
const v = +this.value;
return v < 0 ? '#FF5454' : v >= 0 && v < 2 ? '#FFD767' : '#37D97F';
return v < 0 ? 'red' : v >= 0 && v < 2 ? 'yellow' : 'green';
}
return 'unset';
},
@@ -78,10 +78,9 @@ const remainBox = {
style={`background: ${
this.color
}; position:absolute; inset: 0; padding: 0 10px; display: flex; align-items: center; color: ${
// this.color == 'red' ? '#fff' : 'unset'
'#fff'
this.color == 'red' ? '#fff' : 'unset'
}`}>
{ this.injectData[this.injectData.prop]?.toFixed(0) || '' }
{this.injectData[this.injectData.prop] || ''}
</div>
);
},
@@ -122,35 +121,30 @@ export default {
// width: 180,
// filter: parseTime(createTime),
// },
{ prop: 'name', label: '保养计划', minWidth: 100, showOverflowtooltip: true },
{ prop: 'lineName', label: '产线名', minWidth: 100, showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段名', minWidth: 100, showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true },
{ prop: 'equipmentCode', label: '设备编码', minWidth: 100, showOverflowtooltip: true },
{ prop: 'name', label: '保养计划' },
{ prop: 'lineName', label: '产线名' },
{ prop: 'sectionName', label: '工段名' },
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'equipmentCode', label: '设备编码' },
{ prop: 'maintenancePeriod', label: '保养频率' },
{
prop: 'maintainType',
label: '保养类型',
showOverflowtooltip: true,
filter: publicFormatter(this.DICT_TYPE.MAINTAIN_TYPE),
},
{
prop: 'lastMaintainTime',
label: '上次保养时间',
filter: parseTime,
minWidth: 150,
showOverflowtooltip: true
},
{ prop: 'nextMaintainTime', label: '计划下次保养时间', filter: parseTime, minWidth: 150, showOverflowtooltip: true },
{ prop: 'nextMaintainTime', label: '计划下次保养时间', filter: parseTime },
{
prop: 'remainDays',
label: '距离保养时间(天)',
subcomponent: remainBox,
minWidth: 150,
// showOverflowtooltip: true
},
{ prop: 'opt1', label: '设备保养', name: '操作', subcomponent: btn, width: 100 },
{ prop: 'opt2', label: '保养记录', name: '查看详情', subcomponent: btn, width: 100 },
{ prop: 'opt1', label: '设备保养', name: '操作', subcomponent: btn },
{ prop: 'opt2', label: '保养记录', name: '查看详情', subcomponent: btn },
],
searchBarFormConfig: [
{
@@ -183,7 +177,7 @@ export default {
btnName: '导出',
name: 'export',
plain: true,
color: 'warning',
color: 'primary',
},
],
// 是否显示弹出层
@@ -192,6 +186,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
special: false,
equipmentName: null,
createTime: null,
},
@@ -223,11 +218,15 @@ export default {
.catch(() => { });
},
initSearchBar() {
this.http('/base/core-equipment/listAll', 'get').then(({ data }) => {
this.http('/base/core-equipment/page', 'get', {
special: false,
pageNo: 1,
pageSize: 99
}).then(({ data }) => {
this.$set(
this.searchBarFormConfig[1],
'selectOptions',
data.map((item) => ({
(data?.list || []).map((item) => ({
name: item.name,
id: item.id,
}))

View File

@@ -186,7 +186,8 @@ export default {
select: true,
label: '设备名称',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
// url: '/base/core-equipment/listAll?special=false',
url: '/base/core-equipment/page?special=false&pageNo=1&pageSize=99',
rules: [{ required: true, message: '设备名称不能为空', trigger: 'blur' }],
},
{
@@ -244,6 +245,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
special: false,
equipmentName: null,
createTime: null,
},

View File

@@ -99,24 +99,23 @@ export default {
prop: 'createTime',
label: '添加时间',
fixed: true,
width: 150,
width: 180,
filter: timeFilter,
},
{ prop: 'maintainOrderNumber', label: '设备保养单号', width: 110, showOverflowtooltip: true },
{ prop: 'startTime', label: '开始时间', filter: timeFilter, minWidth: 150, showOverflowtooltip: true },
{ prop: 'endTime', label: '结束时间', filter: timeFilter, minWidth: 150, showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true },
{ prop: 'maintainWorker', label: '保养人员', minWidth: 100, showOverflowtooltip: true },
{ prop: 'maintainOrderNumber', label: '设备保养单号' },
{ prop: 'startTime', label: '开始时间', filter: timeFilter },
{ prop: 'endTime', label: '结束时间', filter: timeFilter },
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'maintainWorker', label: '保养人员' },
{
prop: 'relatePlan',
label: '是否计划保养',
width: 120,
filter: (v) => (v != null ? ['', '是', '否'][v] : ''),
},
{ prop: 'planName', label: '保养计划名称', minWidth: 120, showOverflowtooltip: true },
{ prop: 'maintainDuration', label: '计划保养用时(h)', minWidth: 130, showOverflowtooltip: true },
{ prop: 'timeUsed', label: '实际保养用时(h)', minWidth: 130 },
{ prop: 'remark', label: '备注', minWidth: 100, showOverflowtooltip: true },
{ prop: 'planName', label: '保养计划名称' },
{ prop: 'maintainDuration', label: '计划保养用时(h)' },
{ prop: 'timeUsed', label: '实际保养用时(h)' },
{ prop: 'remark', label: '备注' },
],
searchBarFormConfig: [
{
@@ -170,7 +169,7 @@ export default {
btnName: '导出',
name: 'export',
plain: true,
color: 'warning',
color: 'primary',
},
{
type: this.$auth.hasPermi('equipment:maintain-record:create')
@@ -181,6 +180,14 @@ export default {
plain: true,
color: 'success',
},
{
type: this.$auth.hasPermi('equipment:maintain-record:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'warning',
},
],
rows: [
[
@@ -188,7 +195,8 @@ export default {
select: true,
label: '保养设备',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
// url: '/base/core-equipment/listAll',
url: '/base/core-equipment/page?special=false&pageNo=1&pageSize=99',
bind: {
filterable: true,
clearable: true,
@@ -215,29 +223,17 @@ export default {
},
],
[
// {
// switch: true,
// label: '是否计划保养',
// prop: 'relatePlan',
// bind: {
// 'active-value': 1,
// 'inactive-value': 2,
// },
// rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }],
// },
{
select: true,
options: [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
],
switch: true,
label: '是否计划保养',
prop: 'relatePlan',
bind: {
clearable: true, filterable: true
'active-value': 1,
'inactive-value': 2,
},
rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }],
},
{},
{
select: true,
label: '所属计划',
@@ -248,11 +244,6 @@ export default {
clearable: true,
},
},
{
input: true,
label: '保养用时',
prop: 'timeUsed',
},
],
[
{
@@ -279,7 +270,11 @@ export default {
clearable: true,
},
},
{}
{
input: true,
label: '保养用时',
prop: 'timeUsed',
},
],
[
@@ -307,6 +302,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
special: false,
maintainPlanId: null,
maintainPlanId: null,
startTime: null,
@@ -344,11 +340,15 @@ export default {
},
methods: {
initSearchBar() {
this.http('/base/core-equipment/listAll', 'get').then(({ data }) => {
this.http('/base/core-equipment/page', 'get', {
special: false,
pageNo: 1,
pageSize: 99
}).then(({ data }) => {
this.$set(
this.searchBarFormConfig[0],
'selectOptions',
data.map((item) => ({
(data?.list || []).map((item) => ({
name: item.name,
id: item.id,
}))

View File

@@ -1,178 +1,173 @@
<!--
首页
工单管理
合并请求
里程碑
探索
通知469
创建
个人信息和配置
mt-fe-group / yudao-dev
取消关注
11
点赞
0
派生
0
代码
工单
0
合并请求
0
版本发布
0
百科
动态
559 提交
25 分支
145 MiB
分支: projects/mes-test
yudao-dev/src/views/equipment/base/repair/CustomDialogForm.vue
346
8.9 KiB
原始文件
永久链接
Blame
文件历史
<!--
filename: dialogForm.vue
author: liubin
date: 2023-10-31 15:55:13
description:
description:
-->
<template>
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="disabled"
class="drawer"
custom-class="mes-drawer"
size="65%"
@closed="$emit('destroy')">
<small-title slot="title" :no-padding="true">
{{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }}
</small-title>
<div class="drawer-body flex">
<div class="drawer-body__content">
<el-form
ref="form"
:model="dataForm"
label-width="100px"
label-position="top"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="维修单号" prop="repairOrderNumber">
<span>{{ dataForm.repairOrderNumber }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备名称" prop="equipmentName">
<span>{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修工" prop="repairman">
<span>{{ dataForm.repairman }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="故障发生时间" prop="faultTime">
<span>{{ parseTime(dataForm.faultTime) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="故障级别" prop="faultLevel">
<span>{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系方式" prop="repairmanPhone">
<span>{{ dataForm.repairmanPhone }}</span>
</el-form-item>
</el-col>
</el-row>
<el-drawer :visible.sync="visible" :show-close="false" :wrapper-closable="disabled" class="drawer"
custom-class="mes-drawer" size="65%" @closed="$emit('destroy')">
<small-title slot="title" :no-padding="true">
{{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }}
</small-title>
<div class="drawer-body flex">
<div class="drawer-body__content">
<el-form ref="form" :model="dataForm" label-width="100px" label-position="top" v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="维修单号" prop="repairOrderNumber">
<span>{{ dataForm.repairOrderNumber }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备名称" prop="equipmentName">
<span>{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修工" prop="repairman">
<span>{{ dataForm.repairman }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="故障发生时间" prop="faultTime">
<span>{{ parseTime(dataForm.faultTime) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="故障级别" prop="faultLevel">
<span>{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系方式" prop="repairmanPhone">
<span>{{ dataForm.repairmanPhone }}</span>
</el-form-item>
</el-col>
</el-row>
<el-divider style="margin-top: -10px" />
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '设备维修信息' }}
</small-title>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item
label="维修开始时间"
prop="maintenanceStartTime"
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceStartTime"
type="datetime"
:disabled="disabled"
placeholder="请选择维修开始时间"
value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="维修结束时间"
prop="maintenanceFinishTime"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceFinishTime"
type="datetime"
:disabled="disabled"
placeholder="请选择维修开始时间"
value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="维修方式"
prop="repairMode"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.repairMode"
placeholder="请选择维修方式">
<el-option
v-for="opt in getDictDatas('repair-mode')"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="故障类型" prop="faultType">
<el-select
:disabled="disabled"
v-model="dataForm.faultType"
placeholder="请选择故障类型">
<el-option
v-for="opt in getDictDatas('fault-type')"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-divider style="margin-top: -10px" />
<el-row :gutter="20">
<el-col>
<el-form-item
label="故障明细"
prop="faultDetail"
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<!-- // 富文本 -->
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150"/>
</el-form-item>
</el-col>
</el-row>
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '设备维修信息' }}
</small-title>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="维修开始时间" prop="maintenanceStartTime"
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="dataForm.maintenanceStartTime" type="datetime" :disabled="disabled"
placeholder="请选择维修开始时间" value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="维修结束时间" prop="maintenanceFinishTime"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="dataForm.maintenanceFinishTime" type="datetime" :disabled="disabled"
placeholder="请选择维修开始时间" value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="维修方式" prop="repairMode"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select :disabled="disabled" v-model="dataForm.repairMode" placeholder="请选择维修方式">
<el-option v-for="opt in getDictDatas('repair-mode')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="故障类型" prop="faultType">
<el-select :disabled="disabled" v-model="dataForm.faultType" placeholder="请选择故障类型">
<el-option v-for="opt in getDictDatas('fault-type')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修记录" prop="maintenanceDetail">
<!-- // 富文本 -->
<editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150"/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="故障明细" prop="faultDetail"
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<!-- // 富文本 -->
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修附件" prop="file">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修记录" prop="maintenanceDetail">
<!-- // 富文本 -->
<editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="备注" prop="remark">
<el-input
v-model="dataForm.remark"
:placeholder="`请输入备注`"
:disabled="disabled" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row :gutter="20">
<el-col>
<el-form-item label="维修附件" prop="file">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" />
</el-form-item>
</el-col>
</el-row>
<div v-if="!disabled" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</div>
</div>
</el-drawer>
<el-row :gutter="20">
<el-col>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :placeholder="`请输入备注`" :disabled="disabled" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div v-if="!disabled" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</div>
</div>
</el-drawer>
</template>
<script>
@@ -185,102 +180,102 @@ import { parseTime } from '@/utils/ruoyi'
import { getDictDataLabel } from '@/utils/dict';
export default {
name: 'DialogForm',
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: { SmallTitle, Editor, FileUpload },
props: {
// dataForm: {
// type: Object,
// default: () => ({}),
// },
// disabled: {
// type: Boolean,
// default: false
// },
},
data() {
return {
formLoading: true,
visible: false,
disabled: false,
dataForm: {},
file: '',
fileName: ''
};
},
mounted() {},
methods: {
setFileName(val) {
this.fileName = val
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
},
goEdit() {
this.disabled = false;
},
/** 模拟透传 ref */
validate(cb) {
return this.$refs.form.validate(cb);
},
resetFields(args) {
return this.$refs.form.resetFields(args);
},
initData() {
this.file = ''
this.fileName = ''
},
init(row, isdetail) {
this.initData();
this.disabled = isdetail || false;
this.dataForm.id = row.id || undefined;
this.visible = true;
name: 'DialogForm',
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: { SmallTitle, Editor, FileUpload },
props: {
// dataForm: {
// type: Object,
// default: () => ({}),
// },
// disabled: {
// type: Boolean,
// default: false
// },
},
data() {
return {
formLoading: true,
visible: false,
disabled: false,
dataForm: {},
file: '',
fileName: ''
};
},
mounted() { },
methods: {
setFileName(val) {
this.fileName = val
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
},
goEdit() {
this.disabled = false;
},
/** 模拟透传 ref */
validate(cb) {
return this.$refs.form.validate(cb);
},
resetFields(args) {
return this.$refs.form.resetFields(args);
},
initData() {
this.file = ''
this.fileName = ''
},
init(row, isdetail) {
this.initData();
this.disabled = isdetail || false;
this.dataForm.id = row.id || undefined;
this.visible = true;
this.$nextTick(() => {
this.$refs['form'].resetFields();
this.$nextTick(() => {
this.$refs['form'].resetFields();
if (this.dataForm.id) {
// 获取设备维修
getEqRepair(this.dataForm.id).then(response => {
this.formLoading = false
if (this.dataForm.id) {
// 获取设备维修
getEqRepair(this.dataForm.id).then(response => {
this.formLoading = false
this.dataForm = response.data;
this.dataForm.maintenanceStatus = row.maintenanceStatus || 0
if (this.dataForm.files.length > 0) {
this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName
}
this.dataForm.maintenanceStatus = row.maintenanceStatus || 0
if (this.dataForm.files.length > 0) {
this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName
}
});
} else {
// if (this.urlOptions.isGetCode) {
} else {
// if (this.urlOptions.isGetCode) {
// this.getCode()
// }
}
});
},
// 表单提交
}
});
},
// 表单提交
dataFormSubmit() {
this.$refs["form"].validate((valid) => {
if (!valid) {
return false;
}
// 修改的提交
if (this.file) {
const temp = this.file.split(',') // 获取文件个数
let arry = []
temp.forEach(item => {
arry.push({
fileName: this.fileName,
fileType: 2,
fileUrl: item
})
})
this.dataForm.files = arry
}
if (this.file) {
const temp = this.file.split(',') // 获取文件个数
let arry = []
temp.forEach(item => {
arry.push({
fileName: this.fileName,
fileType: 2,
fileUrl: item
})
})
this.dataForm.files = arry
}
if (this.dataForm.id) {
updateEqRepair(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
@@ -297,49 +292,49 @@ export default {
// });
});
},
},
},
};
</script>
<style scoped>
.drawer >>> .el-drawer {
border-radius: 8px 0 0 8px;
.drawer>>>.el-drawer {
border-radius: 8px 0 0 8px;
}
.drawer >>> .el-drawer__header {
margin: 0;
padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6;
margin-bottom: 0px;
.drawer>>>.el-drawer__header {
margin: 0;
padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6;
margin-bottom: 0px;
}
.small-title::before {
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: 22px;
border-radius: 1px;
margin-right: 8px;
background-color: #0b58ff;
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: 22px;
border-radius: 1px;
margin-right: 8px;
background-color: #0b58ff;
}
.drawer-body {
display: flex;
flex-direction: column;
height: 100%;
display: flex;
flex-direction: column;
height: 100%;
}
.drawer-body__content {
flex: 1;
/* background: #eee; */
padding: 20px 30px;
overflow-y: auto;
flex: 1;
/* background: #eee; */
padding: 20px 30px;
overflow-y: auto;
}
.drawer-body__footer {
display: flex;
justify-content: flex-end;
padding: 18px;
display: flex;
justify-content: flex-end;
padding: 18px;
}
</style>

View File

@@ -0,0 +1,35 @@
<!--
* @Author: zhp
* @Date: 2023-11-08 14:00:52
* @LastEditTime: 2023-12-01 10:12:27
* @LastEditors: DY
* @Description:
-->
<template>
<div v-html="content" />
</template>
<script>
export default {
props: {
injectData: {
type: Object,
default: () => ({})
}
},
data() {
return {
content: ''
}
},
mounted() {
this.getContent()
},
methods: {
getContent() {
this.content = this.injectData[this.injectData.prop] ?? ''
}
}
}
</script>

View File

@@ -17,7 +17,7 @@
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
:width="180"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
@@ -48,8 +48,7 @@
<CustomDialogForm
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getList"
@destroy="addOrUpdateVisible = false" />
@refreshDataList="getList" />
</div>
</template>
@@ -59,6 +58,7 @@ import basicPageMixin from '@/mixins/lb/basicPageMixin';
import CustomDialogForm from './CustomDialogForm.vue';
import { deleteRepair, exportRepairLogExcel } from '@/api/equipment/base/repair'
import { parseTime } from '@/utils/ruoyi'
import htmls from './htmls.vue'
// const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
export default {
@@ -70,6 +70,12 @@ export default {
addOrUpdateVisible: false,
searchBarKeys: ['maintenanceStatus', 'createTime', 'equipmentId'],
tableBtn: [
this.$auth.hasPermi('equipment:repair:update')
? {
type: 'detail',
btnName: '详情',
}
: undefined,
this.$auth.hasPermi('equipment:repair:finish')
? {
type: 'finish',
@@ -78,16 +84,10 @@ export default {
: undefined,
this.$auth.hasPermi('equipment:repair:update')
? {
type: 'detail',
btnName: '详情',
type: 'edit',
btnName: '修改',
}
: undefined,
// this.$auth.hasPermi('equipment:repair:update')
// ? {
// type: 'edit',
// btnName: '修改',
// }
// : undefined,
this.$auth.hasPermi('equipment:repair:delete')
? {
type: 'delete',
@@ -100,28 +100,26 @@ export default {
prop: 'createTime',
label: '添加时间',
fixed: true,
width: 150,
width: 180,
filter: parseTime,
},
{ prop: 'repairOrderNumber', label: '设备维修单号', minWidth: 100, showOverflowtooltip: true },
{ prop: 'maintenanceStartTime', label: '开始时间', filter: parseTime, minWidth: 150, showOverflowtooltip: true },
{ prop: 'repairOrderNumber', label: '设备维修单号' },
{ prop: 'maintenanceStartTime', label: '开始时间', filter: parseTime },
{
prop: 'maintenanceFinishTime',
label: '结束时间',
filter: parseTime,
minWidth: 150,
showOverflowtooltip: true
},
{
prop: 'maintenanceStatus',
label: '维修状态',
filter: (v) => (v != null ? ['未完成', '完成', '进行中'][v] : ''),
},
{ prop: 'maintenanceDuration', label: '维修时长(h)', width: 110 },
{ prop: 'maintenanceDuration', label: '维修时长(h)' },
{ prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true },
{ prop: 'maintenanceDetail', label: '维修明细' },
{ prop: 'maintenanceDetail', label: '维修明细', subcomponent: htmls, minWidth: 100, showOverflowtooltip: true },
{ prop: 'repairman', label: '维修工', minWidth: 100, showOverflowtooltip: true },
{ prop: 'repairmanPhone', label: '联系方式', minWidth: 100, showOverflowtooltip: true },
{ prop: 'remark', label: '备注', minWidth: 120, showOverflowtooltip: true },
@@ -168,6 +166,13 @@ export default {
{
type: 'separate',
},
{
type: this.$auth.hasPermi('equipment:repair:export') ? 'button' : '',
btnName: '导出',
name: 'export',
plain: true,
color: 'primary',
},
{
type: this.$auth.hasPermi('equipment:repair:create') ? 'button' : '',
btnName: '新增',
@@ -175,13 +180,6 @@ export default {
plain: true,
color: 'success',
},
{
type: this.$auth.hasPermi('equipment:repair:export') ? 'button' : '',
btnName: '导出',
name: 'export',
plain: true,
color: 'warning',
},
],
rows: [
[
@@ -195,7 +193,8 @@ export default {
select: true,
label: '设备名称',
prop: 'equipmentId',
url: '/base/core-equipment/listAll',
// url: '/base/core-equipment/listAll',
url: '/base/core-equipment/page?special=false&pageNo=1&pageSize=99',
bind: {
filterable: true,
clearable: true,
@@ -253,6 +252,7 @@ export default {
queryParams: {
pageNo: 1,
pageSize: 10,
special: false,
maintenanceStatus: null,
createTime: null,
equipmentId: null,
@@ -269,11 +269,15 @@ export default {
},
methods: {
initSearchBar() {
this.http('/base/core-equipment/listAll', 'get').then(({ data }) => {
this.http('/base/core-equipment/page', 'get', {
special: false,
pageNo: 1,
pageSize: 99,
}).then(({ data }) => {
this.$set(
this.searchBarFormConfig[0],
'selectOptions',
data.map((item) => ({
(data?.list || []).map((item) => ({
name: item.name,
id: item.id,
}))

View File

@@ -9,72 +9,80 @@
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="false"
:wrapper-closable="disabled"
class="drawer"
size="60%">
size="60%"
@closed="$emit('destroy')">
<small-title slot="title" :no-padding="true">
{{ disabled ? '查看备件' : '添加备件' }}
</small-title>
<el-form
ref="form"
:model="dataForm"
label-width="100px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="配置名" prop="name">
<span>{{ dataForm.name }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称" prop="equipmentName">
<span>{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="负责人" prop="responsible">
<span>{{ dataForm.responsible }}</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="描述" prop="faultTime">
<editor v-model="dataForm.description" read-only :min-height="200"/>
</el-form-item>
</el-form>
<div class="content">
<el-form
ref="form"
:model="dataForm"
label-width="100px"
label-position="top"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="配置名" prop="name">
<span>{{ dataForm.name }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="设备名称" prop="equipmentName">
<span>{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="负责人" prop="responsible">
<span>{{ dataForm.responsible }}</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="描述" prop="description">
<div v-html="dataForm.description" style="padding: 5px; margin: 0; border: 1px solid #dfdfdf" />
<!-- <editor v-model="dataForm.description" read-only :min-height="200"/> -->
</el-form-item>
</el-form>
<div v-if="!disabled" class="action_btn">
<template>
<span style="display: inline-block;" @click="addNew()">
<svg-icon style="width: 14px; height: 14px" class="item-icon" icon-class="table_add" />
<span class="add">添加</span>
</span>
</template>
</div>
<base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:table-data="list">
<method-btn
v-if="!disabled"
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>
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '备品备件' }}
</small-title>
<div v-if="!disabled" class="action_btn">
<template>
<span style="display: inline-block;" @click="addNew()">
<svg-icon style="width: 14px; height: 14px" class="item-icon" icon-class="table_add" />
<span class="add">添加</span>
</span>
</template>
</div>
<base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:table-data="list">
<method-btn
v-if="!disabled"
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 class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
<div v-if="!disabled" class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div>
<attr-add
@@ -255,10 +263,10 @@ export default {
padding: 18px;
}
.action_btn {
/* float: right; */
float: right;
display: flex;
justify-content: right;
margin: 5px 15px;
margin: -35px 15px;
font-size: 14px;
}
.add {
@@ -312,4 +320,7 @@ export default {
justify-content: flex-end;
padding: 18px;
}
.content {
padding: 0 20px;
}
</style>

View File

@@ -17,7 +17,7 @@
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="250"
:width="180"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
@@ -34,7 +34,7 @@
<base-dialog
:dialogTitle="title"
:dialogVisible="open"
width="35%"
width="50%"
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
@@ -44,12 +44,14 @@
v-model="form"
:disabled="mode == 'detail'"
:has-files="false"
:rows="rows" />
:rows="rows"
style="margin: 0 30px" />
</base-dialog>
<addSparts
v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getList" />
@refreshDataList="getList"
@destroy="addOrUpdateVisible = false" />
</div>
</template>
@@ -79,22 +81,24 @@ export default {
// btnName: '详情',
// }
// : undefined,
this.$auth.hasPermi('equipment:spare-parts-config:update')
this.$auth.hasPermi('equipment:spare-parts-config:addParts')
? {
type: 'edit',
btnName: '修改',
type: 'addParts',
btnName: '添加',
showTip: '添加备件'
}
: undefined,
this.$auth.hasPermi('equipment:spare-parts-config:queryParts')
? {
type: 'queryParts',
btnName: '查看备件',
btnName: '查看',
showTip: '查看备件'
}
: undefined,
this.$auth.hasPermi('equipment:spare-parts-config:addParts')
this.$auth.hasPermi('equipment:spare-parts-config:update')
? {
type: 'addParts',
btnName: '添加备件',
type: 'edit',
btnName: '修改',
}
: undefined,
this.$auth.hasPermi('equipment:spare-parts-config:delete')
@@ -105,15 +109,15 @@ export default {
: undefined,
].filter((v) => v),
tableProps: [
{ prop: 'name', label: '配置名' },
{ prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备名' },
{ prop: 'equipmentCode', label: '设备编码' },
{ prop: 'responsible', label: '负责人' },
{ prop: 'name', label: '配置名', minWidth: 100, showOverflowtooltip: true },
{ prop: 'lineName', label: '产线', minWidth: 100, showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段', minWidth: 100, showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备名', minWidth: 120, showOverflowtooltip: true },
{ prop: 'equipmentCode', label: '设备编码', minWidth: 100, showOverflowtooltip: true },
{ prop: 'responsible', label: '负责人', minWidth: 150, showOverflowtooltip: true },
// { prop: 'unit', label: '单位', filter: publicFormatter('unit_dict') },
{ prop: 'description', label: '描述', subcomponent: htmls },
{ prop: 'sparePartNumber', label: '备品备件数量' },
{ prop: 'description', label: '描述', subcomponent: htmls, minWidth: 120, showOverflowtooltip: true },
{ prop: 'sparePartNumber', label: '备品备件数量', width: 130 },
// { prop: 'remark', label: '备注' },
],
searchBarFormConfig: [
@@ -198,7 +202,7 @@ export default {
prop: 'description', // TODO: 富文本
subcomponent: Editor,
bind: {
'min-height': 192
'min-height': 150
}
},
],

View File

@@ -9,81 +9,84 @@
<el-drawer
:visible.sync="visible"
:show-close="false"
:wrapper-closable="false"
:wrapper-closable="!isLog"
class="drawer"
size="60%">
<small-title slot="title" :no-padding="true">
{{ !isLog ? '操作页面' : '更换记录' }}
</small-title>
<el-form
ref="form"
:model="dataForm"
label-width="100px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item v-if="!isLog" label="配置名" prop="name">
<span>{{ dataForm.name }}</span>
</el-form-item>
<el-form-item v-else label="产线名称" prop="lineName">
<span>{{ dataForm.lineName }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称" prop="equipmentName">
<span>{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="描述" prop="faultTime">
<editor v-model="dataForm.description" read-only :min-height="200"/>
</el-form-item>
</el-form>
<div v-if="!isLog">
<base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:table-data="list">
<method-btn
v-if="!isLog"
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 class="content">
<el-form
ref="form"
:model="dataForm"
label-width="90px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item v-if="!isLog" label="配置名" prop="name">
<span style="margin-left: 5px">{{ dataForm.name }}</span>
</el-form-item>
<el-form-item v-else label="产线名称" prop="lineName">
<span style="margin-left: 5px">{{ dataForm.lineName }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备名称" prop="equipmentName">
<span style="margin-left: 5px">{{ dataForm.equipmentName }}</span>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="描述" prop="description">
<div v-html="dataForm.description" style="padding: 5px; margin-left: 5px; border: 1px solid #dfdfdf" />
<!-- <editor v-model="dataForm.description" :read-only="true" :min-height="200"/> -->
</el-form-item>
</el-form>
<div v-if="!isLog">
<base-table
:table-props="tableProps"
:page="listQuery.pageNo"
:limit="listQuery.pageSize"
:table-data="list">
<method-btn
v-if="!isLog"
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 v-else>
<!-- 搜索工作栏 -->
<SearchBar
:formConfigs="formConfig"
ref="search-bar"
@headBtnClick="buttonClick" />
<base-table
:table-props="tableProps1"
:page="listQuery1.pageNo"
:limit="listQuery1.pageSize"
:table-data="list1" />
<pagination
v-show="listQuery1.total > 0"
:total="listQuery1.total"
:page.sync="listQuery1.pageNo"
:limit.sync="listQuery1.pageSize"
:page-sizes="[5, 10, 15]"
@pagination="getList1" />
</div>
</div>
<div v-else>
<!-- 搜索工作栏 -->
<SearchBar
:formConfigs="formConfig"
ref="search-bar"
@headBtnClick="buttonClick" />
<base-table
:table-props="tableProps1"
:page="listQuery1.pageNo"
:limit="listQuery1.pageSize"
:table-data="list1" />
<pagination
v-show="listQuery1.total > 0"
:total="listQuery1.total"
:page.sync="listQuery1.pageNo"
:limit.sync="listQuery1.pageSize"
:page-sizes="[5, 10, 15]"
@pagination="getList1" />
</div>
<div class="drawer-body__footer">
<div v-if="isLog" class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
@@ -249,7 +252,7 @@ export default {
type: 'button',
btnName: '导出',
name: 'export',
color: 'warning',
color: 'primary',
plain: true
},
],
@@ -429,4 +432,7 @@ export default {
justify-content: flex-end;
padding: 18px;
}
.content {
padding: 0 20px;
}
</style>

View File

@@ -74,8 +74,7 @@ const remainBox = {
value() {
const temp = this.injectData[this.injectData.prop] || null;
if (temp) {
console.log('12', temp);
return temp === 'Green' ? 'green' : 'red';
return temp === 'Green' ? '未超期' : temp === 'Red' ? '已超期' : '即将超期';
}
return this.injectData[this.injectData.prop] || null;
},
@@ -83,7 +82,7 @@ const remainBox = {
if (this.value) {
// const v = +this.value;
// return v < 0 ? 'red' : v >= 0 && v < 2 ? 'yellow' : 'green';
return this.value;
return this.value === '未超期' ? '#37D97F' : this.value === '已超期' ? '#FF5454' : '#FFD767';
}
return 'unset';
},
@@ -95,9 +94,9 @@ const remainBox = {
this.color
// this.color == 'Green' ? 'green' : this.color == 'Red' ? 'red' : 'yellow'
}; position:absolute; inset: 0; padding: 0 10px; display: flex; align-items: center; color: ${
this.color == 'red' || this.color == 'green' ? '#fff' : 'unset'
'#fff'
}`}>
{this.injectData[this.injectData.prop] || ''}
{this.value}
</div>
);
},
@@ -155,18 +154,19 @@ export default {
// : undefined,
].filter((v) => v),
tableProps: [
{ prop: 'name', label: '配置名' },
{ prop: 'lineName', label: '产线名称' },
{ prop: 'sectionName', label: '工段名' },
{ prop: 'equipmentName', label: '设备名称' },
{ prop: 'responsible', label: '负责人' },
{ prop: 'name', label: '配置名', showOverflowtooltip: true },
{ prop: 'lineName', label: '产线名称', showOverflowtooltip: true },
{ prop: 'sectionName', label: '工段名', showOverflowtooltip: true },
{ prop: 'equipmentName', label: '设备名称', showOverflowtooltip: true },
{ prop: 'responsible', label: '负责人', minWidth: 130, showOverflowtooltip: true },
{ prop: 'color', label: '是否超期', subcomponent: remainBox },
{ prop: 'opt1', label: '备件更换', name: '操作', subcomponent: btn },
{ prop: 'opt1', label: '备件更换', name: '操作', subcomponent: btn, width: 110 },
{
prop: 'opt2',
label: '更换记录',
name: '更新记录',
subcomponent: btn,
width: 110
}, // TODO: 是否换成按钮, 群里问
// { prop: 'remark', label: '备注' },
],

Some files were not shown because too many files have changed in this diff Show More