Compare commits

..

15 Commits

48 changed files with 10769 additions and 9078 deletions

View File

@ -48,7 +48,7 @@
"benz-amr-recorder": "^1.1.5", "benz-amr-recorder": "^1.1.5",
"bpmn-js-token-simulation": "0.10.0", "bpmn-js-token-simulation": "0.10.0",
"clipboard": "2.0.8", "clipboard": "2.0.8",
"code-brick-zj": "^1.0.2", "code-brick-zj": "^1.0.5",
"core-js": "^3.26.0", "core-js": "^3.26.0",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"diagram-js": "^12.3.0", "diagram-js": "^12.3.0",

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

@ -125,11 +125,8 @@ export default {
// start // start
this.Quill?.enable(false); this.Quill?.enable(false);
this.$nextTick(() => { this.$nextTick(() => {
this.Quill?.enable(true);
this.Quill?.blur(); this.Quill?.blur();
// if (!this.readOnly) { this.Quill?.enable(true);
// this.Quill?.enable();
// }
}); });
// //
if (this.type === 'url') { if (this.type === 'url') {

View File

@ -78,7 +78,6 @@ export default {
return this.http(this.infoUrl == '' ? this.infoPath : this.infoUrl, 'get', payload); return this.http(this.infoUrl == '' ? this.infoPath : this.infoUrl, 'get', payload);
}, },
del(payload) { del(payload) {
debugger;
return this.http(this.deleteUrl == '' ? this.deletePath : this.deleteUrl, 'delete', payload); return this.http(this.deleteUrl == '' ? this.deletePath : this.deleteUrl, 'delete', payload);
}, },

View File

@ -94,6 +94,8 @@ export const DICT_TYPE = {
OBJECT_TYPE: 'object_type', OBJECT_TYPE: 'object_type',
STATISTIC_TYPE: 'statistic_type', STATISTIC_TYPE: 'statistic_type',
TIME_DIM: 'time_dim', TIME_DIM: 'time_dim',
TABLE_NAME: 'table_name',
METHOD: 'method',
// ============== ORDER - 订单模块 ============= // ============== ORDER - 订单模块 =============
ORDER_STATUS: 'order_status', ORDER_STATUS: 'order_status',

View File

@ -5,7 +5,7 @@
const baseURL = process.env.VUE_APP_BASE_API const baseURL = process.env.VUE_APP_BASE_API
// 日期格式化 // 日期格式化(通用)
export function parseTime(time, pattern) { export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) { if (arguments.length === 0 || !time) {
return null return null
@ -48,6 +48,51 @@ export function parseTime(time, pattern) {
return time_str 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) { export function resetForm(refName) {
if (this.$refs[refName]) { if (this.$refs[refName]) {

View File

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

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

View File

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

View File

@ -28,7 +28,6 @@ export default {
}, },
methods: { methods: {
changeInput() { changeInput() {
console.log(this.list)
this.$emit('emitData', 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-input-number v-model="form.singlePrice" :precision="2" :min="0" :max="999999999" style="width: 100%;"></el-input-number>
</el-form-item> </el-form-item>
</el-col> </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-col :span="24" v-show="form.pricingMethod === 0">
<el-form-item label="时间段" prop="pricingMethod"> <el-form-item label="时间段" prop="pricingMethod">
<base-table <base-table
@ -213,10 +221,10 @@ export default {
// //
emitButtonClick1() { emitButtonClick1() {
let n = this.tableData1.length let n = this.tableData1.length
if (n >=3) { // if (n >=3) {
this.$modal.msgWarning('最多可添加3档计价') // this.$modal.msgWarning('3')
return false // return false
} // }
let obj = {} let obj = {}
obj.startTime = n === 0 ? '' : this.tableData1[n-1].endTime obj.startTime = n === 0 ? '' : this.tableData1[n-1].endTime
obj.endTime = '' obj.endTime = ''
@ -289,6 +297,7 @@ export default {
unit: this.form.unit, unit: this.form.unit,
pricingMethod: this.form.pricingMethod, pricingMethod: this.form.pricingMethod,
description: this.form.description, description: this.form.description,
dim: this.form.pricingMethod === 1 ? this.form.dim: '',
singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '', singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '',
segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [], segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [],
usedPriceList: this.form.pricingMethod === 1 ? this.tableData2: [] usedPriceList: this.form.pricingMethod === 1 ? this.tableData2: []
@ -305,6 +314,7 @@ export default {
unit: this.form.unit, unit: this.form.unit,
pricingMethod: this.form.pricingMethod, pricingMethod: this.form.pricingMethod,
description: this.form.description, description: this.form.description,
dim: this.form.pricingMethod === 1 ? this.form.dim: '',
singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '', singlePrice: this.form.pricingMethod === 2 ? this.form.singlePrice : '',
segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [], segPriceList: this.form.pricingMethod === 0 ? this.tableData1: [],
usedPriceList: this.form.pricingMethod === 1 ? this.tableData2: [] 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-form ref="form" :rules="rules" label-width="110px" :model="form">
<el-row> <el-row>
<el-col :span="12"> <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-form-item label="监控对象" prop="objectId">
<el-cascader <el-cascader
style='width: 100%;' style='width: 100%;'
@ -13,8 +25,20 @@
clearable></el-cascader> clearable></el-cascader>
</el-form-item> </el-form-item>
</el-col> </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-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-select v-model="form.energyTypeId" placeholder="请选择" style="width: 100%;" filterable @change="toggleType">
<el-option <el-option
v-for="item in this.energyTypeList" v-for="item in this.energyTypeList"
@ -25,11 +49,29 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="12" v-if='form.method == 1'>
<el-row> <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-col :span="12">
<el-form-item label="指标类型" prop="limitType"> <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 <el-option
v-for="item in getDictDatas(DICT_TYPE.MONITOR_INDEX_TYPE)" v-for="item in getDictDatas(DICT_TYPE.MONITOR_INDEX_TYPE)"
:key="item.value" :key="item.value"
@ -39,34 +81,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </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-col :span="12">
<el-form-item label="消耗量阈值"> <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.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-input-number v-model="form.maxValue" placeholder="最大值" :max="9999999" style="width: 50%;"></el-input-number>
</el-form-item> </el-form-item>
</el-col> </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-row>
</el-form> </el-form>
</template> </template>
@ -91,6 +111,7 @@ export default {
return { return {
form: { form: {
id: '', id: '',
method: '1',
objectId: '', objectId: '',
objectType: '', objectType: '',
energyTypeId: '', energyTypeId: '',
@ -103,7 +124,8 @@ export default {
objIds: [],// objIds: [],//
isEdit: false, // isEdit: false, //
rules: { 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' }], energyTypeId: [{ required: true, message: '能源类型不能为空', trigger: 'change' }],
type: [{ required: true, message: '监控模式不能为空', trigger: 'change' }], type: [{ required: true, message: '监控模式不能为空', trigger: 'change' }],
limitType: [{ required: true, message: '指标类型不能为空', trigger: 'change' }] limitType: [{ required: true, message: '指标类型不能为空', trigger: 'change' }]
@ -120,6 +142,7 @@ export default {
if (res.code === 0) { if (res.code === 0) {
this.form = res.data this.form = res.data
this.form.plcParamId = res.data.plcParamId || '' 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.form.limitType = this.form.limitType ? this.form.limitType + '' : ''
this.objIds = this.changeDetSelect(this.form.objectId, this.objList) this.objIds = this.changeDetSelect(this.form.objectId, this.objList)
if (this.form.type === 2) { if (this.form.type === 2) {
@ -132,6 +155,14 @@ export default {
this.form.id = '' this.form.id = ''
} }
}, },
//
changeMethod() {
if(this.form.method === '2'){
this.form.limitType = "2"
}else{
this.form.limitType = ''
}
},
// //
getDetailList() { getDetailList() {
getEnergyParamList({ getEnergyParamList({

View File

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

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="app-container"> <div class="app-container energyOverlimitLog">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<search-bar <search-bar
@ -7,14 +7,29 @@
ref="searchBarForm" ref="searchBarForm"
@headBtnClick="buttonClick" @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 <div v-if="activeName === 'auto'">
:page="queryParams.pageNo" <base-table
:limit="queryParams.pageSize" :page="queryParams.pageNo"
:table-props="tableProps" :limit="queryParams.pageSize"
:table-data="list" :table-props="tableProps"
:max-height="tableH" :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 <pagination
:page.sync="queryParams.pageNo" :page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -28,6 +43,7 @@
import { getEnergyOverlimitLogPage } from "@/api/monitoring/energyOverlimitLog"; import { getEnergyOverlimitLogPage } from "@/api/monitoring/energyOverlimitLog";
import { getEnergyTypeListAll } from "@/api/base/energyType"; import { getEnergyTypeListAll } from "@/api/base/energyType";
import { publicFormatter } from '@/utils/dict' import { publicFormatter } from '@/utils/dict'
import { parseTime } from '@/utils/ruoyi'
const tableProps = [ const tableProps = [
{ {
prop: 'objName', prop: 'objName',
@ -65,6 +81,41 @@ const tableProps = [
{ {
prop: 'overValue', prop: 'overValue',
label: '超出值' 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 { export default {
@ -93,18 +144,20 @@ export default {
color: 'primary' color: 'primary'
} }
], ],
activeName: 'auto',
tableProps, tableProps,
tableProps2,
tableH: this.tableHeight(260), tableH: this.tableHeight(260),
//
total: 0, total: 0,
//
list: [], list: [],
list2: [],
// //
queryParams: { queryParams: {
pageNo: 1, pageNo: 1,
pageSize: 20, pageSize: 20,
energyTypeId: '', energyTypeId: '',
indexType: '' indexType: '',
method: '1'
}, },
typeList: [ typeList: [
{id: 1, name: '合并'}, {id: 1, name: '合并'},
@ -155,7 +208,47 @@ export default {
console.log(res) console.log(res)
this.formConfig[0].selectOptions = res.data || [] 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> </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">
<div class="legend-item"> <div class="legend-item">
<span class="icon blue"></span> <span class="icon blue"></span>
<span class="text">工作时长</span> <span class="text">有效时长</span>
</div> </div>
<div class="legend-item"> <div class="legend-item">
<span class="icon green"></span> <span class="icon green"></span>
<span class="text">机时长</span> <span class="text">机时长</span>
</div> </div>
<div class="legend-item"> <div class="legend-item">
<span class="icon purple"></span> <span class="icon purple"></span>
<span class="text">故障时长</span> <span class="text">中断时长</span>
</div> </div>
<div class="legend-item"> <!-- <div class="legend-item">
<span class="icon yellow"></span> <span class="icon yellow"></span>
<span class="text">速度开动率</span> <span class="text">速度开动率</span>
</div> </div> -->
</div> </div>
<div v-if="list.length" class="graph-grid"> <div v-if="list.length" class="graph-grid">
<div class="bg-grid grid-line"> <div class="bg-grid grid-line">
@ -389,14 +389,14 @@ export default {
position: relative; position: relative;
padding: 4px 0; padding: 4px 0;
padding-left: 12px; padding-left: 12px;
font-size: 14px; font-size: 18px;
&::before { &::before {
content: ''; content: '';
position: absolute; position: absolute;
left: 0; left: 0;
top: 6px; top: 6px;
height: 16px; height: 20px;
width: 4px; width: 4px;
border-radius: 1px; border-radius: 1px;
background: #0b58ff; background: #0b58ff;

View File

@ -16,23 +16,22 @@
<div class="data-view__item"> <div class="data-view__item">
<!-- <div class="data-view__item__value">111</div> --> <!-- <div class="data-view__item__value">111</div> -->
<div class="data-view__item__value">{{ textData.workTime }}</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>
<div class="data-view__item"> <div class="data-view__item">
<!-- <div class="data-view__item__value">22</div> --> <!-- <div class="data-view__item__value">22</div> -->
<div class="data-view__item__value">{{ textData.stopTime }}</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>
<div class="data-view__item"> <div class="data-view__item">
<!-- <div class="data-view__item__value">10</div> --> <!-- <div class="data-view__item__value">10</div> -->
<div class="data-view__item__value">{{ textData.downTime }}</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>
<div class="data-view__item"> <!-- <div class="data-view__item">
<!-- <div class="data-view__item__value">100%</div> -->
<div class="data-view__item__value">{{ textData.peEfficiency }}</div> <div class="data-view__item__value">{{ textData.peEfficiency }}</div>
<div class="data-view__item__title yellow">速度开动率</div> <div class="data-view__item__title yellow">速度开动率</div>
</div> </div> -->
</div> </div>
</div> </div>
</template> </template>
@ -93,7 +92,7 @@ export default {
// //
name: '', name: '',
type: 'pie', type: 'pie',
radius: ['75%', '90%'], radius: ['60%', '90%'],
center: ['50%', '48%'], center: ['50%', '48%'],
label: { label: {
show: false, show: false,
@ -259,7 +258,7 @@ export default {
} }
.data-view__item__title { .data-view__item__title {
font-size: 8px; font-size: 14px;
line-height: 14px; line-height: 14px;
} }

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@
:show-close="false" :show-close="false"
:wrapper-closable="isdetail" :wrapper-closable="isdetail"
class="drawer" class="drawer"
size="60%" size="55%"
@closed="$emit('destroy')"> @closed="$emit('destroy')">
<small-title slot="title" :no-padding="true"> <small-title slot="title" :no-padding="true">
{{ isdetail ? '查看详情' : !dataForm.id ? '新增' : '编辑' }} {{ isdetail ? '查看详情' : !dataForm.id ? '新增' : '编辑' }}
@ -24,7 +24,7 @@
label-width="100px" label-width="100px"
v-loading="formLoading"> v-loading="formLoading">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId"> <el-form-item label="设备名称" prop="equipmentId">
<el-select <el-select
v-model="dataForm.equipmentId" v-model="dataForm.equipmentId"
@ -41,7 +41,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="8">
<!-- <el-form-item label="物料名称" prop="name"> <!-- <el-form-item label="物料名称" prop="name">
<el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入物料名称" /> <el-input v-model="dataForm.name" :disabled="isdetail" clearable placeholder="请输入物料名称" />
</el-form-item> --> </el-form-item> -->
@ -61,21 +61,19 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备编码" prop="equipmentCode"> <el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" disabled clearable placeholder="请输入设备编码" /> <el-input v-model="dataForm.equipmentCode" disabled clearable placeholder="请输入设备编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="巡检人" prop="responsible"> <el-form-item label="巡检人" prop="responsible">
<el-input v-model="dataForm.responsible" :disabled="isdetail" clearable placeholder="请输入巡检人" /> <el-input v-model="dataForm.responsible" :disabled="isdetail" clearable placeholder="请输入巡检人" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="巡检时间" prop="actualTime"> <el-form-item label="巡检时间" prop="actualTime">
<el-date-picker <el-date-picker
v-model="dataForm.actualTime" v-model="dataForm.actualTime"
@ -86,7 +84,7 @@
placeholder="选择巡检时间" /> placeholder="选择巡检时间" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="8">
<el-form-item label="数据来源" prop="origin"> <el-form-item label="数据来源" prop="origin">
<el-select <el-select
v-model="dataForm.origin" v-model="dataForm.origin"
@ -95,7 +93,7 @@
style="width: 100%" style="width: 100%"
placeholder="请选择数据来源"> placeholder="请选择数据来源">
<el-option key="1" label="手动" :value="1" /> <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-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -108,7 +106,8 @@
:table-data="list" /> :table-data="list" />
</el-form-item> </el-form-item>
<el-form-item label="巡检详情" prop="description"> <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>
<el-form-item label="附件"> <el-form-item label="附件">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="isdetail" @name="setFileName" /> <FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="isdetail" @name="setFileName" />
@ -117,7 +116,7 @@
</el-form> </el-form>
<div v-if="!isdetail" class="drawer-body__footer"> <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> <el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div> </div>
</el-drawer> </el-drawer>
@ -185,7 +184,7 @@ export default {
actualTime: undefined, actualTime: undefined,
responsible: undefined, responsible: undefined,
description: undefined, description: undefined,
origin: undefined, origin: 1,
files: [] files: []
}, },
list: [], list: [],
@ -220,9 +219,12 @@ export default {
async setConfig() { async setConfig() {
const configres = await getcheckConfigByEqList({equipmentId: this.dataForm.equipmentId}) const configres = await getcheckConfigByEqList({equipmentId: this.dataForm.equipmentId})
this.configList = configres.data 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 => { this.dataForm.equipmentCode = this.eqList.filter(item => {
return item.id === this.dataForm.equipmentId return item.id === this.dataForm.equipmentId
})[0].code })[0]?.code ?? undefined
}, },
goback() { goback() {
this.$emit('refreshDataList'); this.$emit('refreshDataList');
@ -265,6 +267,7 @@ export default {
this.file = this.dataForm.files[0].fileUrl this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName this.fileName = this.dataForm.files[0].fileName
} }
this.dataForm.description = this.dataForm.description || '无'
this.setConfig() this.setConfig()
this.setInspectionContet() this.setInspectionContet()
}); });

View File

@ -94,7 +94,7 @@ export default {
tableProps: [ tableProps: [
{ prop: 'configName', label: '配置名称' }, { prop: 'configName', label: '配置名称' },
{ prop: 'equipmentName', label: '设备名称' }, { prop: 'equipmentName', label: '设备名称' },
{ prop: 'origin', label: '数据来源', filter: (val) => ['', '手动', '自动'][val] }, { prop: 'origin', label: '数据来源', filter: (val) => ['', '手动', 'PDA'][val] },
// { prop: 'sectionName', label: '' }, // { prop: 'sectionName', label: '' },
{ prop: 'actualTime', label: '实际巡检时间', filter: parseTime }, { prop: 'actualTime', label: '实际巡检时间', filter: parseTime },
// { prop: 'maintenanceDetail', label: '' }, // { prop: 'maintenanceDetail', label: '' },
@ -131,6 +131,15 @@ export default {
{ {
type: 'separate', 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') type: this.$auth.hasPermi('equipment:check-record:create')
? 'button' ? 'button'
@ -140,17 +149,6 @@ export default {
plain: true, plain: true,
color: 'success', color: 'success',
}, },
{
type: 'separate',
},
{
type: this.$auth.hasPermi('equipment:check-record:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'warning',
},
], ],
rows: [ rows: [
[ [

View File

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

View File

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

View File

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

View File

@ -183,7 +183,7 @@ export default {
btnName: '导出', btnName: '导出',
name: 'export', name: 'export',
plain: true, plain: true,
color: 'warning', color: 'primary',
}, },
], ],
// //

View File

@ -170,7 +170,7 @@ export default {
btnName: '导出', btnName: '导出',
name: 'export', name: 'export',
plain: true, plain: true,
color: 'warning', color: 'primary',
}, },
{ {
type: this.$auth.hasPermi('equipment:maintain-record:create') type: this.$auth.hasPermi('equipment:maintain-record:create')

View File

@ -60,110 +60,112 @@
</el-col> </el-col>
</el-row> </el-row>
<el-divider style="margin-top: -10px" /> <el-divider />
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true"> <div v-if=" disabled && dataForm.maintenanceStatus === 1 ? true : !disabled ? true : false">
{{ '设备维修信息' }} <small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
</small-title> {{ '设备维修信息' }}
<el-row :gutter="20"> </small-title>
<el-col :span="6"> <el-row :gutter="20">
<el-form-item <el-col :span="6">
label="维修开始时间" <el-form-item
prop="maintenanceStartTime" label="维修开始时间"
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]"> prop="maintenanceStartTime"
<el-date-picker :rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
v-model="dataForm.maintenanceStartTime" <el-date-picker
type="datetime" v-model="dataForm.maintenanceStartTime"
:disabled="disabled" type="datetime"
placeholder="请选择维修开始时间" :disabled="disabled"
value-format="timestamp" /> placeholder="请选择维修开始时间"
</el-form-item> value-format="timestamp" />
</el-col> </el-form-item>
<el-col :span="6"> </el-col>
<el-form-item <el-col :span="6">
label="维修结束时间" <el-form-item
prop="maintenanceFinishTime" label="维修结束时间"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]"> prop="maintenanceFinishTime"
<el-date-picker :rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
v-model="dataForm.maintenanceFinishTime" <el-date-picker
type="datetime" v-model="dataForm.maintenanceFinishTime"
:disabled="disabled" type="datetime"
placeholder="请选择维修开始时间" :disabled="disabled"
value-format="timestamp" /> placeholder="请选择维修开始时间"
</el-form-item> value-format="timestamp" />
</el-col> </el-form-item>
<el-col :span="6"> </el-col>
<el-form-item <el-col :span="6">
label="维修方式" <el-form-item
prop="repairMode" label="维修方式"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]"> prop="repairMode"
<el-select :rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
:disabled="disabled" <el-select
v-model="dataForm.repairMode" :disabled="disabled"
placeholder="请选择维修方式"> v-model="dataForm.repairMode"
<el-option placeholder="请选择维修方式">
v-for="opt in getDictDatas('repair-mode')" <el-option
:key="opt.value" v-for="opt in getDictDatas('repair-mode')"
:label="opt.label" :key="opt.value"
:value="opt.value" /> :label="opt.label"
</el-select> :value="opt.value" />
</el-form-item> </el-select>
</el-col> </el-form-item>
<el-col :span="6"> </el-col>
<el-form-item label="故障类型" prop="faultType"> <el-col :span="6">
<el-select <el-form-item label="故障类型" prop="faultType">
:disabled="disabled" <el-select
v-model="dataForm.faultType" :disabled="disabled"
placeholder="请选择故障类型"> v-model="dataForm.faultType"
<el-option placeholder="请选择故障类型">
v-for="opt in getDictDatas('fault-type')" <el-option
:key="opt.value" v-for="opt in getDictDatas('fault-type')"
:label="opt.label" :key="opt.value"
:value="opt.value" /> :label="opt.label"
</el-select> :value="opt.value" />
</el-form-item> </el-select>
</el-col> </el-form-item>
</el-row> </el-col>
</el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item <el-form-item
label="故障明细" label="故障明细"
prop="faultDetail" prop="faultDetail"
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]"> :rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<!-- // --> <!-- // -->
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150"/> <editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="维修记录" prop="maintenanceDetail"> <el-form-item label="维修记录" prop="maintenanceDetail">
<!-- // --> <!-- // -->
<editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150"/> <editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="维修附件" prop="file"> <el-form-item label="维修附件" prop="file">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" /> <FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input <el-input
v-model="dataForm.remark" v-model="dataForm.remark"
:placeholder="`请输入备注`" :placeholder="`请输入备注`"
:disabled="disabled" /> :disabled="disabled" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</div>
</el-form> </el-form>
<div v-if="!disabled" class="drawer-body__footer"> <div v-if="!disabled" class="drawer-body__footer">
@ -249,7 +251,7 @@ export default {
getEqRepair(this.dataForm.id).then(response => { getEqRepair(this.dataForm.id).then(response => {
this.formLoading = false this.formLoading = false
this.dataForm = response.data; this.dataForm = response.data;
this.dataForm.maintenanceStatus = row.maintenanceStatus || 0 this.dataForm.maintenanceStatus = this.dataForm.maintenanceStatus || 0
if (this.dataForm.files.length > 0) { if (this.dataForm.files.length > 0) {
this.file = this.dataForm.files[0].fileUrl this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName this.fileName = this.dataForm.files[0].fileName

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

@ -59,6 +59,7 @@ import basicPageMixin from '@/mixins/lb/basicPageMixin';
import CustomDialogForm from './CustomDialogForm.vue'; import CustomDialogForm from './CustomDialogForm.vue';
import { deleteRepair, exportRepairLogExcel } from '@/api/equipment/base/repair' import { deleteRepair, exportRepairLogExcel } from '@/api/equipment/base/repair'
import { parseTime } from '@/utils/ruoyi' import { parseTime } from '@/utils/ruoyi'
import htmls from './htmls.vue'
// const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'); // const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss');
export default { export default {
@ -121,7 +122,7 @@ export default {
{ prop: 'lineName', label: '产线' }, { prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' }, { prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true }, { 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: 'repairman', label: '维修工', minWidth: 100, showOverflowtooltip: true },
{ prop: 'repairmanPhone', label: '联系方式', minWidth: 100, showOverflowtooltip: true }, { prop: 'repairmanPhone', label: '联系方式', minWidth: 100, showOverflowtooltip: true },
{ prop: 'remark', label: '备注', minWidth: 120, showOverflowtooltip: true }, { prop: 'remark', label: '备注', minWidth: 120, showOverflowtooltip: true },
@ -168,6 +169,13 @@ export default {
{ {
type: 'separate', 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' : '', type: this.$auth.hasPermi('equipment:repair:create') ? 'button' : '',
btnName: '新增', btnName: '新增',
@ -175,13 +183,6 @@ export default {
plain: true, plain: true,
color: 'success', color: 'success',
}, },
{
type: this.$auth.hasPermi('equipment:repair:export') ? 'button' : '',
btnName: '导出',
name: 'export',
plain: true,
color: 'warning',
},
], ],
rows: [ rows: [
[ [

View File

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

View File

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

View File

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

View File

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

View File

@ -290,7 +290,6 @@ export default {
break; break;
case '2': // case '2': //
this.$router.push({ 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 path: '/energy/base/energy-quantity-realtime?startTime='+this.chooseObj.startTime+'&endTime='+this.chooseObj.endTime
}) })
break; break;

View File

@ -0,0 +1,8 @@
<template>
<div>vocDetectionHistory</div>
</template>
<script>
export default {
name: 'VocDetectionHistory'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>vocDetectionIndication</div>
</template>
<script>
export default {
name: 'VocDetectionIndication'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>voc</div>
</template>
<script>
export default {
name: 'Voc'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>wasteGasDetectionHistory</div>
</template>
<script>
export default {
name: 'WasteGasDetectionHistory'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>wasteGasDetectionIndication</div>
</template>
<script>
export default {
name: 'WasteGasDetectionIndication'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>wasteGas</div>
</template>
<script>
export default {
name: 'WasteGas'
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>wasteWaterDetectionHistory</div>
</template>
<script>
export default {
name: 'WasteWaterDetectionHistory'
}
</script>

View File

@ -0,0 +1,161 @@
<template>
<el-form ref="wasteWaterAddForm" :rules="rules" label-width="130px" :model="form">
<el-row :gutter="20">
<el-col :span='12'>
<el-form-item label="指标名称" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="指标编码" prop="code">
<el-input v-model="form.code"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="指标名称" prop="name1">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="最小值" prop="code11">
<el-input v-model="form.code"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="最大值" prop="name12">
<el-input v-model="form.name"></el-input>
</el-form-item>
</el-col>
<el-col :span='12'>
<el-form-item label="备注" prop="code1122">
<el-input v-model="form.code"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
export default {
name: 'WasteWaterAdd',
data() {
return {
// rules: {
// name: [{ required: true, message: "", trigger: "blur" }],
// code: [{ required: true, message: "", trigger: "blur" }],
// planQuantity: [{ required: true, message: "", trigger: "blur" }],
// planProductId: [{ required: true, message: "", trigger: "change" }]
// }
}
},
methods: {
// init(id) {
// this.getList()
// if (id) {
// this.isEdit = true
// this.form.id = id
// getOrderById({id: this.form.id}).then(res => {
// if (res.code === 0) {
// this.form.name = res.data.name
// this.form.code = res.data.code
// this.form.planQuantity = res.data.planQuantity
// this.form.planProductId = res.data.planProductId
// this.form.price = res.data.price
// this.form.customerId = res.data.customerId
// this.form.priority = res.data.priority ? res.data.priority + '' : ''
// this.form.planStartTime = res.data.planStartTime ? res.data.planStartTime : null
// this.form.packSpec = res.data.packSpec ? res.data.packSpec+'' : ''
// this.form.workers = res.data.workers
// this.form.processFlowId = res.data.processFlowId
// this.form.materialMethod = res.data.materialMethod
// this.form.planFinishTime = res.data.planFinishTime ? res.data.planFinishTime : null
// this.form.remark = res.data.remark
// // this.form.description = res.data.description
// }
// })
// } else {
// this.isEdit = false
// this.form.id = ''
// //
// getOrderCode().then(res => {
// this.form.code = res.data || ''
// })
// }
// },
// getList() {
// //
// getProductAll().then(res => {
// this.productList = res.data || []
// })
// //
// getCustomerList().then(res => {
// this.customerList = res.data || []
// })
// //
// getProcessFlowList().then(res => {
// this.processFlowList = res.data || []
// })
// },
// timeChange() {
// if (this.form.planStartTime && this.form.planFinishTime) {
// if (this.form.planStartTime > this.form.planFinishTime) {
// this.$modal.msgError('')
// }
// }
// },
// //
// materialMethodChange(val) {
// if (val === 2 && !this.form.processFlowId) {
// this.form.materialMethod = 1
// this.$modal.msgError("");
// }
// },
// //
// processFlowIdChange(val) {
// console.log(val)
// if (!val) {
// this.form.materialMethod = 1
// }
// },
// submitForm() {
// this.$refs['orderAddForm'].validate((valid) => {
// if (valid) {
// if (this.form.planStartTime && this.form.planFinishTime) {
// if (this.form.planStartTime > this.form.planFinishTime) {
// this.$modal.msgError('')
// return false
// }
// }
// // console.log(this.form)
// if (this.isEdit) {
// //
// orderUpdate({ ...this.form }).then((res) => {
// if (res.code === 0) {
// this.$modal.msgSuccess("");
// this.$emit('successSubmit')
// }
// })
// } else {
// this.form.status = 1
// this.form.triggerOrigin = 1
// orderCreate({ ...this.form }).then((res) => {
// if (res.code === 0) {
// this.$modal.msgSuccess("");
// this.$emit('successSubmit')
// }
// })
// }
// } else {
// return false
// }
// })
// },
// formClear() {
// this.$refs.orderAddForm.resetFields()
// this.form.materialMethod = 1
// this.form.price = 0.00
// this.form.planQuantity = 0
// this.isEdit = false
// }
}
}
</script>

View File

@ -0,0 +1,202 @@
<template>
<div class="app-container">
<!-- 搜索工作栏 -->
<search-bar
:formConfigs="formConfig"
ref="searchBarForm"
@headBtnClick="buttonClick"
/>
<!-- 列表 -->
<base-table
:page="queryParams.pageNo"
:limit="queryParams.pageSize"
:table-props="tableProps"
:table-data="list"
:max-height="tableH"
>
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
:width="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"
width='60%'
>
<waste-water-add ref="wasteWaterAdd" @successSubmit="successSubmit" />
</base-dialog>
</div>
</template>
<script>
import { parseTime } from '@/utils/ruoyi'
// import { publicFormatter } from '@/utils/dict'
const tableProps = [
{
prop: 'name',
label: '指示名称',
minWidth: 120,
showOverflowtooltip: true
},
{
prop: 'code',
label: '指示编码',
minWidth: 120
},
{
prop: 'customerId',
label: '单位'
},
{
prop: 'customerId1',
label: '最小值'
},
{
prop: 'customerId2',
label: '最大值'
},
{
prop: 'customerId3',
label: '创建人'
},
// {
// prop: 'triggerOrigin',
// label: '',
// filter: publicFormatter('order_Origin')
// },
{
prop: 'createTime',
label: '创建时间',
filter: parseTime,
minWidth: 160
}
]
export default {
name: 'WasteWaterDetectionIndication',
data() {
return {
formConfig: [
{
type: 'select',
label: '指标名称',
selectOptions: this.getDictDatas(this.DICT_TYPE.ORDER_STATUS),
labelField: 'label',
valueField: 'value',
param: 'name'
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary'
},
{
type: this.$auth.hasPermi('base:order-manage:create') ? 'separate' : '',
},
{
type: this.$auth.hasPermi('base:order-manage:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
}
],
//
queryParams: {
pageNo: 1,
pageSize: 20,
name: null,
status: null
},
total: 0,
tableProps,
list: [
{name:'1111'}
],
tableH: this.tableHeight(260),
tableBtn: [
this.$auth.hasPermi('base:order-manage:edit')
? {
type: 'edit',
btnName: '编辑'
}
: undefined,
this.$auth.hasPermi('base:order-manage:delete')
? {
type: 'delete',
btnName: '删除'
}
: undefined
],
addOrEditTitle: '',
centervisible: false
}
},
methods: {
getList() {},
buttonClick(val) {
console.log(val)
if (val.btnName === 'search') {
this.queryParams.name = val.name
this.getList()
} else {
this.addOrEditTitle = '新增'
this.centervisible = true
this.$nextTick(() => {
this.$refs.wasteWaterAdd.init()
})
}
},
handleClick(val) {
console.log(val)
switch (val.type) {
case 'edit':
this.addOrEditTitle = '编辑'
this.centervisible = true
this.$nextTick(() => {
this.$refs.wasteWaterAdd.init(val.data.id)
})
break
default:
this.handleDelete(val.data)
}
},
//
handleDelete(val) {
this.$modal.confirm('是否确认删除"' + val.name + '"的数据项?').then(function() {
// return wasteWaterDelete({ id: val.id })
}).then(() => {
this.getList();
this.$modal.msgSuccess("操作成功");
}).catch(() => {});
},
//
handleCancel() {
this.$refs.wasteWaterAdd.formClear()
this.centervisible = false
this.addOrEditTitle = ''
},
handleConfirm() {
this.$refs.wasteWaterAdd.submitForm()
},
successSubmit() {
this.handleCancel()
this.getList()
}
}
}
</script>

View File

@ -0,0 +1,8 @@
<template>
<div>wasteWater</div>
</template>
<script>
export default {
name: 'WasteWater'
}
</script>

View File

@ -28,6 +28,7 @@
<el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="id" :default-expand-all="isExpandAll" <el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="id" :default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"> :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
<el-table-column prop="id" label="部门编码" width="260"></el-table-column>
<el-table-column prop="name" label="部门名称" width="260"></el-table-column> <el-table-column prop="name" label="部门名称" width="260"></el-table-column>
<el-table-column prop="leader" label="负责人" :formatter="userNicknameFormat" width="120"/> <el-table-column prop="leader" label="负责人" :formatter="userNicknameFormat" width="120"/>
<el-table-column prop="sort" label="排序" width="200"></el-table-column> <el-table-column prop="sort" label="排序" width="200"></el-table-column>

17814
yarn.lock

File diff suppressed because it is too large Load Diff