Compare commits

...

39 Commits

Author SHA1 Message Date
‘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
171 changed files with 21380 additions and 9990 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,7 +15,7 @@ VUE_APP_TITLE = MES系统
VUE_APP_BASE_API = '/prod-api'
# 积木报表指向地址
VUE_APP_JIMU_API = 'http://10.70.2.2:8080'
VUE_APP_JIMU_API = 'http://10.70.2.22:8080'
# 根据服务器或域名修改

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

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

@@ -360,7 +360,6 @@ export default {
ts: Date.now(), // 现在的时间戳
}
reqGet(data).then(res => {
console.log(1)
if (res.repCode === '0000') {
this.backImgBase = res.repData.originalImageBase64
this.blockBackImgBase = res.repData.jigsawImageBase64

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

@@ -104,7 +104,7 @@ export const constantRoutes = [
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '@/views/OperationalOverview/coldBoard.vue')
},
},
{
path: '/processingBoard',
name: 'processingBoard',

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

@@ -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: '备注' },
],

View File

@@ -2,7 +2,7 @@
* @Author: zwq
* @Date: 2021-11-18 14:16:25
* @LastEditors: zhp
* @LastEditTime: 2023-11-28 10:03:20
* @LastEditTime: 2023-12-08 13:59:20
* @Description:
-->
<template>
@@ -11,11 +11,11 @@
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<div class="visual-part">
<!-- <div class="visual-part"> -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="100px" label-position="top">
<el-row :gutter="20">
<el-col :span="12">
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId">
<el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%"
@change="getCode" placeholder="请选择设备名称">
@@ -23,44 +23,39 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="设备Bom编码" prop="code">
<el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入设备Bom编码" />
</el-form-item>
</el-col>
<el-col :span="12">
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备物料BOM名称" prop="name">
<el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备物料BOM名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="当前状态" prop="enabled">
<el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" />
<el-select v-model="dataForm.enabled" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择当前状态">
<el-option v-for="dict in enableList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</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>
</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>
<div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()">
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<!-- </div> -->
<div class="attr-list" v-if="idAttrShow">
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
设备物料明细
@@ -80,14 +75,12 @@
</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="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div>
</div>
<div class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" />
</el-drawer>
</template>
@@ -200,6 +193,29 @@ export default {
mounted() {
},
methods: {
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.idAttrShow = true;
this.dataForm.id = res.data
this.$emit("refreshDataList");
});
});
},
getCode(val) {
this.equipmentList.forEach((ele) => {
if (val === ele.id) {
@@ -232,8 +248,8 @@ export default {
this.$confirm(
`确定对${
raw.data.materialName
? '[物料名为' + raw.data.materialName + ']'
: '[序号为' + raw.data.materialName + ']'
? '[物料名为' + raw.data.materialName + ']'
: '[序号为' + raw.data.id + ']'
}进行删除操作?`,
'提示',
{
@@ -374,7 +390,7 @@ export default {
}
.action_btn {
float: right;
margin: 5px 15px;
margin: -40px 15px;
font-size: 14px;
}
.add {

View File

@@ -1,13 +1,8 @@
<!--
* @Author: zwq
* @Date: 2021-11-18 14:16:25
<<<<<<< HEAD
* @LastEditors: zhp
* @LastEditTime: 2023-11-28 10:09:20
=======
* @LastEditors: DY
* @LastEditTime: 2023-11-27 16:37:17
>>>>>>> projects/mes-test
* @LastEditTime: 2023-12-14 14:03:27
* @Description:
-->
<template>
@@ -16,11 +11,11 @@
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<div class="visual-part">
<!-- <div class="visual-part"> -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="100px" label-position="top">
<el-row :gutter="20">
<el-col :span="12">
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId">
<el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%"
@change="getCode" placeholder="请选择设备名称">
@@ -28,43 +23,44 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="参数Bom编码" prop="code">
<el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入参数Bom编码" />
</el-form-item>
</el-col>
<el-col :span="12">
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备参数BOM名称" prop="name">
<el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备参数BOM名称" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-col :span="8">
<el-form-item label="当前状态" prop="enabled">
<el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" />
<!-- <el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" /> -->
<el-select v-model="dataForm.enabled" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择当前状态">
<el-option v-for="dict in enableList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</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>
</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>
<div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()">
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<!-- </div> -->
<!-- <div v-if="!isdetail" class="drawer-body__footer">
</div> -->
<div class="attr-list" v-if="idAttrShow">
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
@@ -85,14 +81,12 @@
</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="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div>
</div>
<div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" />
</el-drawer>
</template>
@@ -173,7 +167,17 @@ export default {
tableBtn,
tableProps,
topBtnConfig,
addOrUpdateVisible: false,
addOrUpdateVisible: false,
enableList: [
{
id: 0,
name: '停用'
},
{
id: 1,
name:'启用'
}
],
urlOptions: {
isGetCode: false,
// codeURL: getCode,
@@ -248,8 +252,8 @@ export default {
this.$confirm(
`确定对${
raw.data.valueName
? '[物料名称为' + raw.data.valueName + ']'
: '[序号为' + raw.data.valueName + ']'
? '[参数名为' + raw.data.valueName + ']'
: '[序号为' + raw.data.id + ']'
}进行删除操作?`,
'提示',
{
@@ -274,7 +278,30 @@ export default {
} else {
this.addNew(raw.data.id);
}
},
},
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.idAttrShow = true;
this.dataForm.id = res.data
this.$emit("refreshDataList");
});
});
},
getList() {
// 获取产品属性列表
processEquValueBomDetPage({
@@ -389,12 +416,13 @@ export default {
justify-content: flex-end;
padding: 18px;
}
.action_btn {
float: right;
margin: 5px 15px;
font-size: 14px;
}
.add {
color: #0b58ff;
}
.action_btn {
float: right;
margin: -40px 15px;
font-size: 14px;
}
</style>

View File

@@ -1,7 +1,7 @@
<!--
* @Author: zhp
* @Date: 2023-11-08 15:30:27
* @LastEditTime: 2023-11-28 10:11:40
* @LastEditTime: 2023-12-04 15:19:33
* @LastEditors: zhp
* @Description:
-->
@@ -15,36 +15,40 @@
</slot>
</template>
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px"
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px" label-position="top"
@keyup.enter.native="dataFormSubmit()">
<el-form-item label="参数名称" prop="paramId">
<el-select v-model="dataForm.paramId" filterable placeholder="参数名称" @change="getData" multiple >
<el-option v-for="dict in materialList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
<!-- <el-form-item label="参数编码" prop="code">
<el-input v-model="dataForm.code" placeholder="请输入参数编码" clearable />
</el-form-item> -->
<!-- <el-form-item label="标准最小值" prop="standardMinValue">
<el-input v-model="dataForm.standardMinValue" placeholder="请输入标准最小值" clearable />
</el-form-item>
<el-form-item label="标准最大值" prop="standardMaxValue">
<el-input v-model="dataForm.standardMaxValue" placeholder="请输入标准最大值" clearable />
</el-form-item> -->
<el-form-item label="工艺最值" prop="minValue">
<el-input v-model="dataForm.minValue" placeholder="请输入工艺最值" clearable />
</el-form-item>
<el-form-item label="工艺最大值" prop="maxValue">
<el-input v-model="dataForm.maxValue" placeholder="请输入工艺最大值" clearable />
</el-form-item>
<el-form-item label="工艺标准值" prop="defaultValue">
<el-input v-model="dataForm.defaultValue" placeholder="请输入工艺标准值" clearable />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable />
</el-form-item>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="参数名称" prop="paramId">
<el-select v-model="dataForm.paramId" filterable placeholder="参数名称" @change="getData" multiple>
<el-option v-for="dict in materialList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工艺最小值" prop="minValue">
<el-input v-model="dataForm.minValue" placeholder="请输入工艺最小值" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工艺最值" prop="maxValue">
<el-input v-model="dataForm.maxValue" placeholder="请输入工艺最值" clearable />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="工艺标准值" prop="defaultValue">
<el-input v-model="dataForm.defaultValue" placeholder="请输入工艺标准值" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-row style="text-align: right">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>

View File

@@ -116,7 +116,16 @@ export default {
getGroupClasses(id).then((res) => {
if (res.code === 0) {
this.form = res.data
this.form.disableTime = res.data.disableTime || ''
this.form.name = res.data.name
this.form.code = res.data.code
this.form.enableTime = res.data.enableTime
// this.form.disableTime = res.data.disableTime || null
this.$set(this.form, 'disableTime', res.data.disableTime || null)
this.form.startTime = res.data.startTime
this.form.endTime = res.data.endTime
this.form.daySpan = res.data.daySpan
this.form.remark = res.data.remark
console.log(this.form)
}
})
} else {

View File

@@ -290,7 +290,6 @@ export default {
break;
case '2': // 能源
this.$router.push({
// path: '/energy/monitoring/energy-report-search?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime
path: '/energy/base/energy-quantity-realtime?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime
})
break;

View File

@@ -165,7 +165,7 @@ const tableProps1 = [
{
prop: 'status',
label: '状态',
filter: publicFormatter('order_status')
filter: publicFormatter('work_order_status')
},
{
prop: 'startProduceTime',

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