This commit is contained in:
caoqianming 2024-05-08 12:55:09 +08:00
commit 218f35dd60
13 changed files with 3497 additions and 1718 deletions

View File

@ -10,7 +10,8 @@ const routes = [
"meta": {
"title": "工作台",
"icon": "el-icon-home-filled",
"type": "menu"
"type": "menu",
"perms": ["home"]
},
"children": [
//首页
@ -227,17 +228,6 @@ const routes = [
},
"component": "enm_limestone/handoverLog"
},
{
"name": "limestone_logDetail",
"path": "/enm_limestone/logDetail",
"meta": {
"title": "日志详情",
"icon": "el-icon-document-copy",
"perms": ["enm_limestone"],
"hidden": true
},
"component": "enm_limestone/logDetail"
},
]
},
//原料磨
@ -301,17 +291,6 @@ const routes = [
},
"component": "enm_rm/handoverLog"
},
{
"name": "logDetail",
"path": "/enm_rm/logDetail",
"meta": {
"title": "日志详情",
"icon": "el-icon-document-copy",
"perms": ["enm_rm"],
"hidden": true
},
"component": "enm_rm/logDetail"
},
]
},
//原料磨——基础
@ -2378,7 +2357,27 @@ const routes = [
"perms": ["enm_base"]
},
"component": "enm_base/material"
}
},
{
"name": "logDetail",
"path": "/enm_rm/logDetail",
"meta": {
"title": "日志详情",
"icon": "el-icon-document-copy",
"hidden": true
},
"component": "enm_rm/logDetail"
},
{
"name": "formula",
"path": "/enm_base/formula",
"meta": {
"title": "计算公式",
"icon": "el-icon-grid",
"perms": ["enm_base"]
},
"component": "enm_base/formulaSetting"
},
]
},
//每月配置

View File

@ -114,9 +114,8 @@ router.sc_getMenu = () => {
userMenu = treeFilter(userRoutes, node => {
return node.meta.perms ? node.meta.perms.filter(item => permissions.indexOf(item) > -1).length > 0 : true
});
// let userMenu = checkRoute(userRoutes, permissions)
// var menu = [...userMenu, ...apiMenu]
return userMenu
let menus = checkRoute(userMenu, permissions)
return menus
}
//转换
@ -229,19 +228,21 @@ function checkRoute(routes, perms) {
}
}
}
}
else if (routes[i].children) {
for (var m = 0; m < routes[i].children.length; m++) {
let child = routes[i].children[m]
console.log(m, child)
if (child.meta && child.meta.perms) {
let has = hasPerm(child.meta.perms, perms)
if (!has) {
routes[i].children.splice(m, 1)
}
}
}else{
routes.splice(i, 1)
}
}
// else if (routes[i].children) {
// for (var m = 0; m < routes[i].children.length; m++) {
// let child = routes[i].children[m]
// console.log(m, child)
// if (child.meta && child.meta.perms) {
// let has = hasPerm(child.meta.perms, perms)
// if (!has) {
// routes[i].children.splice(m, 1)
// }
// }
// }
// }
}
return routes
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,126 +1,180 @@
<template>
<el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" icon="el-icon-plus" v-auth="'ecate.create'" @click="add"></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable ref="table" :apiObj="apiObj" row-key="id" stripe :query="query">
<el-table-column type="index" width="50" />
<el-table-column label="名称" prop="name" show-overflow-tooltip>
</el-table-column>
<el-table-column label="编码" prop="code" show-overflow-tooltip></el-table-column>
<el-table-column label="类型" show-overflow-tooltip>
<template #default="scope">
<span>{{ typeOptions_[scope.row.type] }}</span>
</template>
</el-table-column>
<el-table-column label="是否用于安全" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_for_safe" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column label="是否用于环保" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_for_enp" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column label="是否为车辆" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_car" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
icon="el-icon-plus"
v-auth="'ecate.create'"
@click="add"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="apiObj"
row-key="id"
stripe
:query="query"
>
<el-table-column type="index" width="50" />
<el-table-column label="名称" prop="name" show-overflow-tooltip>
</el-table-column>
<el-table-column
label="编码"
prop="code"
show-overflow-tooltip
></el-table-column>
<el-table-column label="类型" show-overflow-tooltip>
<template #default="scope">
<span>{{ typeOptions_[scope.row.type] }}</span>
</template>
</el-table-column>
<el-table-column label="是否用于安全" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_for_safe" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column label="是否用于环保" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_for_enp" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column label="是否为车辆" show-overflow-tooltip>
<template #default="scope">
<el-icon v-if="scope.row.is_car" color="green">
<CircleCheckFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column
label="操作"
fixed="right"
align="left"
width="100"
>
<template #default="scope">
<el-button
link
type="primary"
@click="table_edit(scope.row)"
v-auth="'equipment.update'"
>
编辑
</el-button>
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row)"
v-auth="'equipment.delete'"
>
<template #reference>
<el-button link type="danger">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
</el-container>
</template>
<script>
import saveDialog from "./ecate_form.vue";
export default {
data() {
return {
apiObj: this.$API.em.ecate.list,
query: {},
typeOptions_: {
10: '生产设备',
20: '计量设备',
30: '治理设备',
40: '监测设备',
50: '监控设备',
},
typeOptions: [
{ id: 10, name: '生产设备' },
{ id: 20, name: '计量设备' },
{ id: 30, name: '治理设备' },
{ id: 40, name: '监测设备' },
{ id: 50, name: '监控设备' }
],
};
},
methods: {
//
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add", 20);
});
},
//
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit", 20).setData(row);
});
},
//
async table_del(row) {
this.$API.em.equipment.delete
.req(row.id)
.then((res) => {
this.$message.success("删除成功");
this.$refs.table.refresh();
})
.catch((err) => {
return err;
});
},
//
submit() {
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
this.$API.em.echeckrecord.create.req(this.form).then(res => {
this.visible = false;
this.isSaveing = false;
this.$message.success("操作成功");
this.$refs.drawer_table.refresh();
this.$refs.table.refresh();
}).catch(() => {
this.isSaveing = false;
})
}
});
},
//
handleSaveSuccess(data, mode) {
if (mode == "add") {
this.$refs.table.refresh();
} else if (mode == "edit") {
this.$refs.table.refresh();
}
},
handleQuery() {
this.$refs.table.queryData(this.query)
},
resetQuery() {
this.query = {};
},
},
name: "设备类型",
components: {
saveDialog,
},
data() {
return {
apiObj: this.$API.em.ecate.list,
query: {},
typeOptions_: {
10: "生产设备",
20: "计量设备",
30: "治理设备",
40: "监测设备",
50: "监控设备",
},
dialog: {
save: false,
},
typeOptions: [
{ id: 10, name: "生产设备" },
{ id: 20, name: "计量设备" },
{ id: 30, name: "治理设备" },
{ id: 40, name: "监测设备" },
{ id: 50, name: "监控设备" },
],
};
},
methods: {
//
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add");
});
},
//
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row);
});
},
//
async table_del(row) {
this.$API.em.ecate.delete
.req(row.id)
.then((res) => {
this.$message.success("删除成功");
this.$refs.table.refresh();
})
.catch((err) => {
return err;
});
},
//
submit() {
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
this.$API.em.echeckrecord.create
.req(this.form)
.then((res) => {
this.visible = false;
this.isSaveing = false;
this.$message.success("操作成功");
this.$refs.drawer_table.refresh();
this.$refs.table.refresh();
})
.catch(() => {
this.isSaveing = false;
});
}
});
},
//
handleSaveSuccess(data, mode) {
this.$refs.table.refresh();
},
handleQuery() {
this.$refs.table.queryData(this.query);
},
resetQuery() {
this.query = {};
},
},
};
</script>
</script>

167
src/views/em/ecate_form.vue Normal file
View File

@ -0,0 +1,167 @@
<template>
<el-dialog
:title="titleMap[mode]"
v-model="visible"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-container v-loading="loading">
<el-main style="padding: 0 20px 20px 20px">
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
:disabled="mode == 'show'"
label-width="120px"
>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="名称" prop="name">
<el-input
v-model="form.name"
clearable
></el-input>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24" prop="type">
<el-form-item label="类型">
<el-select
v-model="form.type"
style="width: 100%"
>
<el-option
v-for="e in eqTypeEnum.values"
:key="e.key"
:value="e.key"
:label="e.text"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="编号">
<el-input
v-model="form.code"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="是否用于安全">
<el-switch v-model="form.is_for_safe" />
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="是否用于环保">
<el-switch v-model="form.is_for_enp" />
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="是否为车辆">
<el-switch v-model="form.is_car" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-dialog>
</template>
<script>
import { eqTypeEnum } from "@/utils/enum.js";
export default {
emits: ["success", "closed"],
data() {
return {
eqTypeEnum,
loading: false,
mode: "add",
titleMap: {
add: "新增",
edit: "编辑",
show: "查看",
},
form: {
name: "",
code: "",
type: 10,
is_for_safe: false,
is_for_enp: false,
is_car: false,
},
rules: {
name: [{ required: true, message: "请输入类型名称" }],
type: [{ required: true, message: "请请选择设备类型" }],
},
visible: false,
isSaveing: false,
};
},
mounted() {},
methods: {
//
open(mode = "add") {
this.mode = mode;
this.visible = true;
return this;
},
//
submit() {
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
this.isSaveing = true;
if (this.mode == "add") {
this.$API.em.ecate.create
.req(this.form)
.then((res) => {
this.isSaveing = false;
this.$emit("success");
this.visible = false;
this.$message.success("操作成功");
})
.catch((res) => {
this.isSaveing = false;
});
} else if (this.mode == "edit") {
this.$API.em.ecate.update
.req(this.form.id, this.form)
.then((res) => {
this.isSaveing = false;
this.$emit("success");
this.visible = false;
this.$message.success("操作成功");
})
.catch((res) => {
this.isSaveing = false;
});
}
}
});
},
//
setData(data) {
Object.assign(this.form, data);
},
//
setFilters(filters) {
this.selectionFilters = filters;
},
},
};
</script>
<style>
.formItem {
width: 100%;
}
</style>

View File

@ -160,7 +160,10 @@
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="关联环保字段" label-width="120">
<el-form-item
label="关联环保字段"
label-width="120"
>
<el-select
v-model="form.enp_field"
clearable
@ -181,14 +184,17 @@
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="报告排序" prop="report_sortstr">
<el-form-item
label="报告排序"
prop="report_sortstr"
>
<el-input
v-model="form.report_sortstr"
clearable
></el-input>
</el-form-item>
</el-col>
<el-divider/>
<el-divider />
<el-col :md="12" :sm="24">
<el-form-item label="所监测设备">
<el-select
@ -232,7 +238,7 @@
label="状态量表达式"
label-width="100"
>
<el-input
<el-input
v-model="form.ep_rs_expr"
clearable
></el-input>
@ -243,21 +249,19 @@
label="影响测点编号"
label-width="100"
>
<el-input
<el-input
v-model="form.mpoint_affect"
clearable
></el-input>
</el-form-item>
</el-col>
<el-divider/>
<el-divider />
<el-col :md="12" :sm="24">
<el-form-item
label="是否代表所在工段数据"
label-width="220"
>
<el-switch
v-model="form.is_rep_mgroup"
/>
<el-switch v-model="form.is_rep_mgroup" />
</el-form-item>
</el-col>
<!-- <el-col :md="12" :sm="24">
@ -377,11 +381,9 @@ export default {
methods: {
//
getMgroup() {
this.$API.mtm.mgroup.list
.req({ page: 0 })
.then((res) => {
this.mgroupOptions = res;
});
this.$API.mtm.mgroup.list.req({ page: 0 }).then((res) => {
this.mgroupOptions = res;
});
},
//
getEquipment() {
@ -393,11 +395,9 @@ export default {
},
//
getMaterial() {
this.$API.mtm.material.list
.req({ page: 0, type__in: "0, 30" })
.then((res) => {
this.materials = res;
});
this.$API.mtm.material.list.req({ page: 0 }).then((res) => {
this.materials = res;
});
},
mgroupChange(e) {
this.form.mgroups_allocate.push({ mgroup: e, ratio: 1 });

View File

@ -0,0 +1,104 @@
<template>
<el-container class="page-user">
<el-aside style="width: 240px">
<el-container>
<el-main class="nopadding">
<el-menu class="menu" :default-active="page">
<el-menu-item-group
v-for="group in menu"
:key="group.groupName"
:title="group.groupName"
>
<el-menu-item
v-for="item in group.list"
:key="item.component"
:index="item.component"
@click="openPage"
>
<el-icon v-if="item.icon"
><component :is="item.icon"
/></el-icon>
<template #title>
<span>{{ item.title }}</span>
</template>
</el-menu-item>
</el-menu-item-group>
</el-menu>
</el-main>
</el-container>
</el-aside>
<el-main>
<Suspense>
<template #default>
<component :is="page" />
</template>
<template #fallback>
<el-skeleton :rows="3" />
</template>
</Suspense>
</el-main>
</el-container>
</template>
<script>
import { defineAsyncComponent } from "vue";
export default {
name: "userCenter",
components: {
calculate: defineAsyncComponent(() =>
import("./settings/calculate.vue")
),
},
data() {
return {
form: {},
menu: [
{
groupName: "配置",
list: [
{
icon: "el-icon-platform",
title: "计算系数",
component: "calculate",
},
],
},
],
userData: {},
page: "calculate",
};
},
// from
beforeRouteEnter(to, from, next) {
next((vm) => {
if (from.is) {
//
delete from.is;
//
vm.$alert("路由跳转过来后含有特殊标识,做特殊处理", "提示", {
type: "success",
center: true,
})
.then(() => {})
.catch(() => {});
}
});
},
mounted() {
this.getSysConfig();
},
methods: {
openPage(item) {
this.page = item.index;
},
getSysConfig() {
this.$API.system.config.getInfo.req().then((res) => {
this.form = res.base;
});
},
},
};
</script>
<style scoped></style>

View File

@ -0,0 +1,52 @@
<template>
<el-container>
<el-main>
<el-card header="计算系数" shadow="hover">
<el-form>
<el-form-item label="料号系数">
<el-input-number
v-model="form.enm_lhxs"
controls-position="right"
placeholder="料号系数"
></el-input-number>
</el-form-item>
<el-form-item style="float: right">
<el-button
type="primary"
:loading="saveLoading"
@click="submitForm"
>保存</el-button
>
</el-form-item>
</el-form>
</el-card>
</el-main>
</el-container>
</template>
<script>
export default {
data() {
return {
saveLoading: false,
form: {
enm_lhxs: "",
},
};
},
mounted() {},
methods: {
submitForm() {
this.saveLoading = true;
this.$API.system.config.update
.req(this.form)
.then((res) => {
this.saveLoading = false;
})
.catch((res) => {
this.saveLoading = false;
});
},
},
};
</script>

View File

@ -298,7 +298,7 @@ let yAxis = [
axisLine: {
show: true,
lineStyle: {
color: colors[2],
color: colors[3],
},
},
axisLabel: {
@ -313,7 +313,7 @@ let yAxis = [
axisLine: {
show: true,
lineStyle: {
color: colors[4],
color: colors[2],
},
},
axisLabel: {

View File

@ -256,7 +256,7 @@ export default {
name: "sflog",
data() {
return {
apiObj: this.$API.wpm.sflog.list,
apiObj: null,
apiObj2: null,
query: {
shift: "",

View File

@ -279,13 +279,13 @@ let yAxis = [
},
{
type: "value",
name: "分布电耗(KW.h)",
name: "分布电耗(KW.h/t)",
position: "right",
alignTicks: true,
axisLine: {
show: true,
lineStyle: {
color: colors[3],
color: colors[1],
},
},
axisLabel: {

View File

@ -279,10 +279,10 @@ let yAxis = [
},
{
type: "value",
name: "运转率 (%)",
position: "right",
name: "台时产量t/h",
position: "left",
alignTicks: true,
offset: 80,
offset: 70,
axisLine: {
show: true,
lineStyle: {
@ -295,9 +295,10 @@ let yAxis = [
},
{
type: "value",
name: "分布电耗(KW.h/t)",
name: "运转率 (%)",
position: "right",
alignTicks: true,
offset: 80,
axisLine: {
show: true,
lineStyle: {
@ -310,10 +311,9 @@ let yAxis = [
},
{
type: "value",
name: "台时产量t/h",
position: "left",
name: "分布电耗(KW.h/t)",
position: "right",
alignTicks: true,
offset: 70,
axisLine: {
show: true,
lineStyle: {
@ -391,19 +391,19 @@ export default {
data: [],
},
{
name: "运转率",
type: "line",
name: "台时产量",
type: "bar",
yAxisIndex: 1,
data: [],
},
{
name: "分布电耗",
type: "bar",
name: "运转率",
type: "line",
yAxisIndex: 2,
data: [],
},
{
name: "台时产量",
name: "分布电耗",
type: "bar",
yAxisIndex: 3,
data: [],
@ -434,19 +434,19 @@ export default {
data: [],
},
{
name: "运转率",
type: "line",
name: "台时产量",
type: "bar",
yAxisIndex: 1,
data: [],
},
{
name: "分布电耗",
type: "bar",
name: "运转率",
type: "line",
yAxisIndex: 2,
data: [],
},
{
name: "台时产量",
name: "分布电耗",
type: "bar",
yAxisIndex: 3,
data: [],
@ -490,203 +490,25 @@ export default {
data: [],
},
{
name: "运转率",
type: "line",
name: "台时产量",
type: "bar",
yAxisIndex: 1,
data: [],
},
{
name: "分布电耗",
type: "bar",
name: "运转率",
type: "line",
yAxisIndex: 2,
data: [],
},
{
name: "台时产量",
name: "分布电耗",
type: "bar",
yAxisIndex: 3,
data: [],
},
],
},
dataX: [],
dataY: [],
dataY2: [],
option: {
color: [
"#647bfe",
"#8698fe",
"#a9b6fe",
"#cbd3fe",
"#91CC75",
"#EE6666",
],
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
},
},
grid: {
right: "20%",
left: "20%",
},
toolbox: {
feature: {
dataView: { show: true, readOnly: false },
restore: { show: true },
saveAsImage: { show: true },
},
},
legend: {
data: [
"总产量",
"台时产量",
"运转率",
"分布电耗",
"单位产品标煤耗",
"成本",
],
},
xAxis: [
{
type: "category",
axisTick: {
alignWithLabel: true,
},
// prettier-ignore
data: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
},
],
yAxis: [
{
type: "value",
name: "产量 (t)",
position: "right",
alignTicks: true,
axisLine: {
show: true,
lineStyle: {
color: colors[0],
},
},
axisLabel: {
formatter: "{value}",
},
},
{
type: "value",
name: "运转率 (%)",
position: "right",
alignTicks: true,
offset: 80,
axisLine: {
show: true,
lineStyle: {
color: colors[1],
},
},
axisLabel: {
formatter: "{value}",
},
},
{
type: "value",
name: "成本(元)",
position: "right",
alignTicks: true,
offset: 160,
axisLine: {
show: true,
lineStyle: {
color: colors[2],
},
},
axisLabel: {
formatter: "{value}",
},
},
{
type: "value",
name: "分布电耗(KW.h)",
position: "left",
alignTicks: true,
axisLine: {
show: true,
lineStyle: {
color: colors[3],
},
},
axisLabel: {
formatter: "{value} ",
},
},
{
type: "value",
name: "标煤耗 (t)",
position: "left",
alignTicks: true,
offset: 80,
min: 0,
max: 180,
axisLine: {
show: true,
lineStyle: {
color: colors[4],
},
},
axisLabel: {
formatter: "{value}",
},
},
],
series: [
{
name: "总产量",
type: "bar",
yAxisIndex: 0,
data: [
100, 120, 110, 130, 140, 120, 110, 120, 100, 150,
120, 160,
],
},
{
name: "台时产量",
type: "bar",
data: [
2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6,
20.0, 6.4, 3.3,
],
},
{
name: "运转率",
type: "bar",
yAxisIndex: 1,
data: [
2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7,
18.8, 6.0, 2.3,
],
},
{
name: "分布电耗",
type: "line",
yAxisIndex: 2,
data: [
2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0,
16.5, 12.0, 6.2,
],
},
{
name: "单位产品标煤耗",
type: "bar",
yAxisIndex: 2,
data: [
2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0,
16.5, 12.0, 6.2,
],
},
],
},
};
},