Commit dbc6b2b6 authored by liuzhaoh's avatar liuzhaoh

优化DCTOM样式

parent 02931e6e
......@@ -44,6 +44,7 @@
range-separator="~"
start-placeholder="开始时间"
end-placeholder="结束时间"
popper-class="date-picker-popper"
:teleported="false"
/>
</el-form-item>
......@@ -128,6 +129,7 @@
v-model="equSubmitInfo.startTime"
type="datetime"
placeholder="选择开始时间"
popper-class="date-picker-popper"
/>
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
......@@ -135,6 +137,7 @@
v-model="equSubmitInfo.endTime"
type="datetime"
placeholder="选择结束时间"
popper-class="date-picker-popper"
/>
</el-form-item>
</el-form>
......
......@@ -2,18 +2,19 @@
<div class="my-agency all-select-btn">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="事件名称:">
<el-input v-model="formInline.eventName">
</el-input>
<el-input v-model="formInline.eventName"> </el-input>
</el-form-item>
<el-form-item label="发生位置:">
<el-input v-model="formInline.keyword" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="所属工序:">
<el-select v-model="formInline.productionLineId"
<el-select
v-model="formInline.productionLineId"
placeholder="请选择"
style="width: 180px"
>
<el-option v-for="(item, index) in basicConfiguration.productLineList"
<el-option
v-for="(item, index) in basicConfiguration.productLineList"
:key="item.productionLineId"
:label="item.productionLineName"
:value="item.productionLineId"
......@@ -21,7 +22,8 @@
</el-select>
</el-form-item>
<el-form-item label="设备类型">
<el-select v-model="formInline.deviceType"
<el-select
v-model="formInline.deviceType"
style="width: 180px"
placeholder="请选择"
>
......@@ -36,18 +38,27 @@
</el-select>
</el-form-item>
<el-form-item label="发生时间">
<el-date-picker type="datetimerange"
<el-date-picker
type="datetimerange"
v-model="formInline.createTime"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
popper-class="date-picker-popper"
/>
</el-form-item>
<el-form-item>
<el-button class="default-btn reset-btn-balck-theme" @click="onReset">重置</el-button>
<el-button type="default" class="default-btn search-btn-balck-theme" @click="onSearch">查询</el-button>
<el-button class="default-btn reset-btn-balck-theme" @click="onReset"
>重置</el-button
>
<el-button
type="default"
class="default-btn search-btn-balck-theme"
@click="onSearch"
>查询</el-button
>
</el-form-item>
</el-form>
<div class="table-box">
......@@ -103,10 +114,11 @@
<div class="label-title">闭环控制分派</div>
<el-form-item label="已分派人:">
<el-tag
v-for="(ele,eIndex) in personTag"
v-for="(ele, eIndex) in personTag"
:key="ele.name"
:type="ele.type">
{{ele.name}}
:type="ele.type"
>
{{ ele.name }}
</el-tag>
</el-form-item>
</el-col>
......@@ -125,7 +137,9 @@
</div>
<div class="content-item">
<span class="name">闭环控制状态:</span>
<span class="value work-status">{{ workSheetDetail?.desc }}</span>
<span class="value work-status">{{
workSheetDetail?.desc
}}</span>
</div>
</div>
</el-col>
......@@ -166,8 +180,11 @@
workSheetDetail?.warnType != 20 &&
workSheetDetail?.warnType != 21
"
>告警值:</span>
<span class="name" v-else-if="workSheetDetail?.warnType == 4">离线时长:</span>
>告警值:</span
>
<span class="name" v-else-if="workSheetDetail?.warnType == 4"
>离线时长:</span
>
<span
class="value alarm-value"
v-if="
......@@ -175,16 +192,21 @@
workSheetDetail.warnType != 4 &&
workSheetDetail.warnType != 18
"
>{{ workSheetDetail?.value }}{{ workSheetDetail?.unit }}</span
>{{ workSheetDetail?.value
}}{{ workSheetDetail?.unit }}</span
>
<span
class="value alarm-value"
v-else-if="workSheetDetail?.warnType == 4"
>{{ warnValueFilter(workSheetDetail?.offlineTime) }}</span>
>{{ warnValueFilter(workSheetDetail?.offlineTime) }}</span
>
</div>
<div class="content-item" v-if="workSheetDetail?.convertValue">
<span class="name">折算值:</span>
<span class="value alarm-value">{{ workSheetDetail?.convertValue }}{{ workSheetDetail?.unit }}</span>
<span class="value alarm-value"
>{{ workSheetDetail?.convertValue
}}{{ workSheetDetail?.unit }}</span
>
</div>
<div class="content-item">
<span class="name">告警时间:</span>
......@@ -423,7 +445,10 @@
</div>
<div
class="input-style-text"
v-if=" !workSheetDetail?.forwards[0]?.forward && imgUrlList.length == 0"
v-if="
!workSheetDetail?.forwards[0]?.forward &&
imgUrlList.length == 0
"
>
暂无描述
</div>
......@@ -566,7 +591,11 @@
<el-form>
<el-form-item label="分派人:">
<div class="inline-box">
<el-select v-model="handlerPeopleId" filterable placeholder="请选择分派人">
<el-select
v-model="handlerPeopleId"
filterable
placeholder="请选择分派人"
>
<el-option
v-for="(item, i) in handlerPeople"
:key="i"
......@@ -574,17 +603,23 @@
:value="item.id"
></el-option>
</el-select>
<el-button type="default" class="addBtn search-btn-balck-theme" @click="addPerson">新增</el-button>
<el-button
type="default"
class="addBtn search-btn-balck-theme"
@click="addPerson"
>新增</el-button
>
</div>
</el-form-item>
<el-form-item label="已分派人:">
<el-tag
v-for="(ele,eIndex) in personTag"
v-for="(ele, eIndex) in personTag"
:key="ele.name"
closable
@close="delPerson(eIndex)"
:type="ele.type">
{{ele.name}}
:type="ele.type"
>
{{ ele.name }}
</el-tag>
</el-form-item>
</el-form>
......@@ -599,9 +634,14 @@
>
<el-form>
<el-form-item label="第几行:">
<el-select v-model="bagRow" placeholder="请选择第几行" @change="getCol">
<el-select
v-model="bagRow"
placeholder="请选择第几行"
@change="getCol"
>
<el-option
v-for="item in rowList" :key="item"
v-for="item in rowList"
:key="item"
:label="item"
:value="item"
>
......@@ -611,7 +651,8 @@
<el-form-item label="第几列:">
<el-select v-model="bagCol" placeholder="请选择第几列">
<el-option
v-for="item in colList" :key="item"
v-for="item in colList"
:key="item"
:label="item"
:value="item"
>
......@@ -624,14 +665,20 @@
</template>
<script setup>
import { ref, reactive, onMounted, onBeforeUnmount,computed } from 'vue'
import { ref, reactive, onMounted, onBeforeUnmount, computed } from "vue";
import CommonTable from "@/components/commonTable/index.vue";
import commonDialog from "./components/dialog.vue";
import { getData, getDataFun, postData, postDataJson, postDataJSON } from '@/request/method.js';
import moment from 'moment';
import { getToken } from '@/utils/auth.js';
import { ElMessage } from 'element-plus'
import { storeToRefs } from 'pinia'
import {
getData,
getDataFun,
postData,
postDataJson,
postDataJSON,
} from "@/request/method.js";
import moment from "moment";
import { getToken } from "@/utils/auth.js";
import { ElMessage } from "element-plus";
import { storeToRefs } from "pinia";
import { useUsersStore } from "@/pinia/user.js";
import { useRoute, useRouter } from "vue-router";
const router = useRouter();
......@@ -640,11 +687,11 @@ const route = useRoute();
const { functionAuthority } = storeToRefs(useUsersStore());
const total = ref(0);
const formInline = ref({
eventName: '',
keyword: '',
warnType: '',
productionLineId: '',
deviceType: '',
eventName: "",
keyword: "",
warnType: "",
productionLineId: "",
deviceType: "",
createTime: route.query.startTime
? [
moment(new Date(route.query.startTime).getTime()).format(
......@@ -654,16 +701,16 @@ const formInline = ref({
"YYYY-MM-DD HH:mm:ss"
),
]
: ['','']
: ["", ""],
});
const workTicketNo = ref('');
const workTicketNo = ref("");
const handlerPeopleId = ref('');
const handlerPeopleId = ref("");
const handlerPeople = ref([]);
const getHandlerPeople = async () => {
const url = '/transfer-work-ticket-pc/getTicketHandler?pageSize=999&pageNo=1';
const url = "/transfer-work-ticket-pc/getTicketHandler?pageSize=999&pageNo=1";
try {
let result = await getData(url);
if (result && result.code === 1) {
......@@ -672,180 +719,180 @@ const getHandlerPeople = async () => {
}
} catch (e) {
ElMessage({
message: '接口报错',
type: 'error'
})
message: "接口报错",
type: "error",
});
}
}
};
const assignDialog = ref({
title: '闭环控制分派',
title: "闭环控制分派",
show: false,
width: '30%',
width: "30%",
btnGroup: [
{
attrKey: 'save',
label: '保存'
}
]
attrKey: "save",
label: "保存",
},
],
});
const bagDialog = ref({
title: '更换布袋',
title: "更换布袋",
show: false,
width: '30%',
width: "30%",
btnGroup: [
{
attrKey: 'save',
label: '保存'
}
]
attrKey: "save",
label: "保存",
},
],
});
const bagRow = ref('');
const bagCol = ref('');
const bagRow = ref("");
const bagCol = ref("");
const rowList = ref([]);
const colList = ref([]);
const saveBag = ()=>{
if (bagRow.value === '') {
const saveBag = () => {
if (bagRow.value === "") {
ElMessage({
type: 'warning',
message: '请选择第几行'
type: "warning",
message: "请选择第几行",
});
return;
}
if (bagCol.value === '') {
if (bagCol.value === "") {
ElMessage({
type: 'warning',
message: '请选择第几列'
type: "warning",
message: "请选择第几列",
});
return;
}
const params = {
workTicketNo: workTicketNo.value,
row: bagRow.value,
column: bagCol.value
column: bagCol.value,
};
postDataJSON('/transaction/doc/changeBag',params).then(res => {
postDataJSON("/transaction/doc/changeBag", params).then((res) => {
if (res.code === 1) {
ElMessage({
type: 'success',
message: '更换布袋成功'
type: "success",
message: "更换布袋成功",
});
bagDialog.value.show = false;
searchData();
}
});
}
};
const rowLineMap = ref(null);
const getBagRowLine = (no) => {
const url = '/bag/cycle/getCompartEnumList';
const url = "/bag/cycle/getCompartEnumList";
const params = {
deviceNo: no
}
getDataFun(url,params).then(res => {
deviceNo: no,
};
getDataFun(url, params).then((res) => {
if (res.code === 1) {
rowLineMap.value = res.data;
res.data.forEach(item => {
res.data.forEach((item) => {
rowList.value.push(item.row);
});
}
})
}
});
};
const getCol = ()=>{
rowLineMap.value.forEach(item => {
const getCol = () => {
rowLineMap.value.forEach((item) => {
if (item.row === bagRow.value) {
colList.value = item.columns;
}
});
}
};
const personTag = ref([]);
const addPerson = ()=>{
const target = handlerPeople.value.find(item => item.id === handlerPeopleId.value);
const addPerson = () => {
const target = handlerPeople.value.find(
(item) => item.id === handlerPeopleId.value
);
personTag.value.push({
userId: target.id,
userName: target.name,
name: target.name,
type: 'info'
type: "info",
});
}
};
const delPerson = (index)=>{
personTag.value.splice(index,1);
}
const delPerson = (index) => {
personTag.value.splice(index, 1);
};
const getIndex = (index) => {
return (currentPage.value - 1) * pageSize.value + index + 1;
};
const saveAssign = ()=> {
const saveAssign = () => {
if (personTag.value.length === 0) {
ElMessage({
showClose: true,
type: 'warning',
message: '请选择分派人'
})
type: "warning",
message: "请选择分派人",
});
}
const tempArr = [];
personTag.value.forEach(item => {
personTag.value.forEach((item) => {
tempArr.push({
userId: item.userId,
userName: item.userName
})
userName: item.userName,
});
});
const params = {
workTicketNo: workTicketNo.value,
receiveUser: '',
receiveUserName: '',
handleUsers: tempArr
}
const url = '/transaction/doc/transferTransaction';
receiveUser: "",
receiveUserName: "",
handleUsers: tempArr,
};
const url = "/transaction/doc/transferTransaction";
dispatchHandle(url, params);
}
};
const dispatchHandle = async (url,param) => {
const dispatchHandle = async (url, param) => {
try {
let result = await postDataJSON(url,param);
let result = await postDataJSON(url, param);
if (result && result.code === 1) {
assignDialog.value.show = false;
ElMessage({
message: '处理成功',
type: 'success'
message: "处理成功",
type: "success",
});
searchData();
}
} catch (e) {
}
}
} catch (e) {}
};
const basicConfiguration = reactive({
ticketEventName: [{ name: '全部', id: '' }],
ticketEventName: [{ name: "全部", id: "" }],
eventTypeList: [],
productLineList: [{productionLineName: '全部', productionLineId: ''}],
deviceList: []
productLineList: [{ productionLineName: "全部", productionLineId: "" }],
deviceList: [],
});
const workSheetDetail = ref(null);
const getColor = computed(()=>{
const getColor = computed(() => {
return (level) => {
if (level == 2) {
return 'red'
return "red";
} else if (level == 1) {
return 'yellow'
return "yellow";
} else {
return 'purple'
}
return "purple";
}
};
});
const warnValueFilter = computed(()=> {
return (offlineTime)=> {
const warnValueFilter = computed(() => {
return (offlineTime) => {
if (offlineTime == null || offlineTime <= 0) {
return "--";
}
......@@ -874,71 +921,69 @@ const warnValueFilter = computed(()=> {
}
return s;
}
}
};
});
const onSearch = ()=> {
const onSearch = () => {
searchData();
}
};
const onReset =()=> {
const onReset = () => {
currentPage.value = 1;
pageSize.value = 20;
formInline.value.eventName = '';
formInline.value.keyword = '';
formInline.value.productionLineId = '';
formInline.value.deviceType = '';
formInline.value.createTime = [
'',''
]
formInline.value.eventName = "";
formInline.value.keyword = "";
formInline.value.productionLineId = "";
formInline.value.deviceType = "";
formInline.value.createTime = ["", ""];
searchData();
}
};
const doneDialog = ref({
title: '闭环控制分派',
title: "闭环控制分派",
show: false,
width: '45%',
width: "45%",
btnGroup: [
{
attrKey: 'save',
label: '处理'
}
]
attrKey: "save",
label: "处理",
},
],
});
const viewData = {
D: "在线监控(监测)仪器仪表故障",
B: "在线监控(监测)仪器仪表与数采通讯异常",
VGD: "在线监控(监测)仪器仪表与数采通讯异常",
}
};
const handleDone = async (data)=> {
const handleDone = async (data) => {
doneDialog.value.title = data.eventName;
workTicketNo.value = data.workTicketNo;
let res = await getDetail(data.workTicketNo);
doneDialog.value.show = true;
personTag.value = [];
if (res.handleUsers && res.handleUsers.length > 0) {
res.handleUsers.forEach(item => {
res.handleUsers.forEach((item) => {
personTag.value.push({
type: 'info',
type: "info",
name: item.userName,
userId: item.userId,
userName: item.userName
userName: item.userName,
});
});
}
disposeWorkSheetDetail(res);
}
};
const saveDeal = () => {
const { workTicketNo, handleValue, imgUrl } = workSheetDetail.value;
const reason = dialogReason.value;
const measure = dialogMeasure.value;
const param = { workTicketNo, handleValue, reason, measure, imgUrl };
const url = '/transaction/doc/finishTransaction';
const url = "/transaction/doc/finishTransaction";
disposeHandle(url, param);
}
};
const disposeHandle = async (url, param) => {
try {
......@@ -947,141 +992,147 @@ const disposeHandle = async (url, param) => {
doneDialog.value.show = false;
searchData();
ElMessage({
message: '处理成功',
type: 'success'
message: "处理成功",
type: "success",
});
}
} catch (e) {
ElMessage({
message: '处理失败',
type: 'error'
message: "处理失败",
type: "error",
});
}
};
// 分派
const handleDispatch = async (data)=> {
const handleDispatch = async (data) => {
getHandlerPeople();
workTicketNo.value = data.workTicketNo;
let res = await getDetail(data.workTicketNo);
assignDialog.value.show = true;
personTag.value = [];
if (res.handleUsers && res.handleUsers.length > 0) {
res.handleUsers.forEach(item => {
res.handleUsers.forEach((item) => {
personTag.value.push({
type: 'info',
type: "info",
name: item.userName,
userId: item.userId,
userName: item.userName
userName: item.userName,
});
});
}
}
};
const getDetail = (workTicketNo) => {
return new Promise((resolve,reject) => {
const url = '/transaction/doc/detail';
return new Promise((resolve, reject) => {
const url = "/transaction/doc/detail";
const params = {
workTicketNo
}
getDataFun(url,params).then(res => {
workTicketNo,
};
getDataFun(url, params)
.then((res) => {
workSheetDetail.value = res.data;
resolve(res.data);
}).catch(err => {
})
.catch((err) => {
reject();
});
});
}
};
const changeBag = (data)=>{
const changeBag = (data) => {
workTicketNo.value = data.workTicketNo;
getBagRowLine(data.deviceNo);
bagDialog.value.show = true;
}
};
const tableData = ref([]);
const tableColumns = ref([
{
prop: 'index',
label: '序号',
width: '6%'
prop: "index",
label: "序号",
width: "6%",
},
{
prop: 'workTicketNo',
label: '编号',
width: '10%'
prop: "workTicketNo",
label: "编号",
width: "10%",
},
{
prop: 'eventName',
label: '事件名称',
width: '10%'
prop: "eventName",
label: "事件名称",
width: "10%",
},
{
prop: 'deviceName',
label: '发生位置',
width: '10%'
prop: "deviceName",
label: "发生位置",
width: "10%",
},
{
prop: 'deviceNo',
label: '设备编码',
width: '10%'
prop: "deviceNo",
label: "设备编码",
width: "10%",
},
{
prop: 'typeName',
label: '设备类型',
width: '10%'
prop: "typeName",
label: "设备类型",
width: "10%",
},
{
prop: 'signalName',
label: '信号名称',
width: '10%'
prop: "signalName",
label: "信号名称",
width: "10%",
},
{
prop: 'productionLine', label: '所属工序',width: '10%' },
{ prop: 'warnTypeName', label: '类型',width: '10%' },
{ prop: 'createTime', label: '发生时间',width: '10%' },
{ prop: 'desc', label: '闭环状态',width: '10%' },
{ prop: 'handleUser', label: '处理人',width: '10%' },
{ prop: 'level', label: '级别',width: '5%' },
prop: "productionLine",
label: "所属工序",
width: "10%",
},
{ prop: "warnTypeName", label: "类型", width: "10%" },
{ prop: "createTime", label: "发生时间", width: "10%" },
{ prop: "desc", label: "闭环状态", width: "10%" },
{ prop: "handleUser", label: "处理人", width: "10%" },
{ prop: "level", label: "级别", width: "5%" },
{
prop: "operation",
label: "操作",
width: '15%'
width: "15%",
},
]);
const customerId = getToken('customerId');
const customerId = getToken("customerId");
const getWarnAndTicketConfigMap = ()=> {
const url = '/system/getWarnAndTicketConfigMap';
const getWarnAndTicketConfigMap = () => {
const url = "/system/getWarnAndTicketConfigMap";
const params = {
customerId
}
getDataFun(url,params).then(res => {
customerId,
};
getDataFun(url, params).then((res) => {
if (res && res.code === 1) {
const { ticketEventName } = res.data;
basicConfiguration.ticketEventName = basicConfiguration.ticketEventName.concat(ticketEventName);
basicConfiguration.ticketEventName =
basicConfiguration.ticketEventName.concat(ticketEventName);
}
});
};
const getDeviceType =() => {
const url = '/alarm/getDeviceType';
getData(url).then(res=>{
const getDeviceType = () => {
const url = "/alarm/getDeviceType";
getData(url).then((res) => {
basicConfiguration.deviceList = res.data;
});
}
};
let realBtn = '';
let realBtn = "";
const searchData =()=> {
const searchData = () => {
currentPage.value = 1;
pageSize.value = 20;
getTableData();
}
};
const getTableData = ()=> {
const getTableData = () => {
let keyWord = formInline.value.keyword;
const params = {
eventName: formInline.value.eventName,
......@@ -1095,77 +1146,76 @@ const getTableData = ()=> {
handleState: 1,
belongTo: 1,
isDcTom: 1,
deviceType: formInline.value.deviceType
}
deviceType: formInline.value.deviceType,
};
tableData.value = [];
const url = '/transaction/doc/getListParamPage';
getDataFun(url,params).then(res => {
const url = "/transaction/doc/getListParamPage";
getDataFun(url, params).then((res) => {
if (res && res.code === 1) {
const { list } = res.data;
total.value = res.data.total;
disposeType(list);
tableData.value = list;
tableData.value.forEach(item => {
item.handleUser = '';
item.handleUsers.forEach((ele,eIndex)=>{
tableData.value.forEach((item) => {
item.handleUser = "";
item.handleUsers.forEach((ele, eIndex) => {
if (eIndex > 0) {
item.handleUser += ',' + ele.userName;
item.handleUser += "," + ele.userName;
} else {
item.handleUser += ele.userName;
}
});
});
}
});
}
};
const disposeType = (list)=> {
const disposeType = (list) => {
if (list.length) {
list.forEach(l => {
list.forEach((l) => {
if (!l.deviceNo) {
l.deviceNo = '--';
l.deviceNo = "--";
}
switch (l.warnType) {
case 0:
l.warnType = '人工提交'
break
l.warnType = "人工提交";
break;
case 1:
l.warnType = '超标'
break
l.warnType = "超标";
break;
case 2:
l.warnType = '超低'
break
l.warnType = "超低";
break;
case 3:
l.warnType = '生产治理同步率'
break
l.warnType = "生产治理同步率";
break;
case 4:
l.warnType = '离线'
break
l.warnType = "离线";
break;
case 5:
l.warnType = '其他'
break
l.warnType = "其他";
break;
case 10:
l.warnType = '持续超标'
break
l.warnType = "持续超标";
break;
case 11:
l.warnType = '三倍超标'
break
l.warnType = "三倍超标";
break;
case 99:
l.warnType = '恒值'
break
l.warnType = "恒值";
break;
}
})
});
}
}
};
const srcList = ref([]);
const dialogReason = ref('');
const dialogMeasure = ref('');
const dialogReason = ref("");
const dialogMeasure = ref("");
const imgUrlList = ref([]);
const alarmImg = ref([]);
const disposeWorkSheetDetail = (obj)=> {
const disposeWorkSheetDetail = (obj) => {
const {
reason,
measure,
......@@ -1178,8 +1228,8 @@ const disposeWorkSheetDetail = (obj)=> {
if (forwards.length > 0) {
let receiveUserItem = forwards.slice(-1)[0];
}
dialogMeasure.value = '';
dialogMeasure.value = '';
dialogMeasure.value = "";
dialogMeasure.value = "";
srcList.value = [];
imgUrlList.value = [];
......@@ -1197,7 +1247,7 @@ const disposeWorkSheetDetail = (obj)=> {
if (imgUrl) {
imgUrlList.value = imgUrl.split(";");
}
}
};
// 其他页面跳转当前页面,携带参数初始化
const getInitParams = () => {
if (route.query) {
......@@ -1212,8 +1262,8 @@ const getInitParams = () => {
formInline.value.createTime[1] = suspendEndTime;
}
}
}
onMounted(()=>{
};
onMounted(() => {
getInitParams();
getProDuctLine();
getWarnAndTicketConfigMap();
......@@ -1224,13 +1274,12 @@ onMounted(()=>{
const formModel = ref({
selectReason: [],
});
const getProDuctLine = ()=>{
const url = '/transaction/getProductionLine';
getData(url).then(res => {
const getProDuctLine = () => {
const url = "/transaction/getProductionLine";
getData(url).then((res) => {
basicConfiguration.productLineList.push(...res.data);
});
}
};
const currentPage = ref(1);
const pageSize = ref(20);
......@@ -1246,7 +1295,7 @@ const handlePaginationChange = (pagination) => {
width: 100%;
height: calc(100% - 14px);
box-sizing: border-box;
background: #181D21;
background: #181d21;
padding: 20px;
display: flex;
flex-direction: column;
......
......@@ -2,18 +2,19 @@
<div class="my-agency all-select-btn">
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="事件名称:">
<el-input v-model="formInline.eventName">
</el-input>
<el-input v-model="formInline.eventName"> </el-input>
</el-form-item>
<el-form-item label="发生位置:">
<el-input v-model="formInline.keyword" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="所属工序:">
<el-select v-model="formInline.productionLineId"
<el-select
v-model="formInline.productionLineId"
placeholder="请选择"
style="width: 180px"
>
<el-option v-for="(item, index) in basicConfiguration.productLineList"
<el-option
v-for="(item, index) in basicConfiguration.productLineList"
:key="item.productionLineId"
:label="item.productionLineName"
:value="item.productionLineId"
......@@ -21,7 +22,8 @@
</el-select>
</el-form-item>
<el-form-item label="设备类型">
<el-select v-model="formInline.deviceType"
<el-select
v-model="formInline.deviceType"
style="width: 180px"
placeholder="请选择"
>
......@@ -36,18 +38,27 @@
</el-select>
</el-form-item>
<el-form-item label="发生时间">
<el-date-picker type="datetimerange"
<el-date-picker
type="datetimerange"
v-model="formInline.createTime"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
popper-class="date-picker-popper"
/>
</el-form-item>
<el-form-item>
<el-button type="default" class="reset-btn-balck-theme" @click="onReset">重置</el-button>
<el-button type="default" class="search-btn-balck-theme" @click="onSearch">查询</el-button>
<el-button type="default" class="reset-btn-balck-theme" @click="onReset"
>重置</el-button
>
<el-button
type="default"
class="search-btn-balck-theme"
@click="onSearch"
>查询</el-button
>
</el-form-item>
</el-form>
<div class="table-box">
......@@ -77,7 +88,7 @@
<span class="view-btn green-color" @click="handleView(row)">
查看
</span>
<!-- <span class="table-btn">|</span>
<!-- <span class="table-btn">|</span>
<span class="view-btn" @click="handleReject(row)">
驳回
</span>
......@@ -148,19 +159,24 @@
workSheetDetail.warnType != 20 &&
workSheetDetail.warnType != 21
"
>告警值:</span>
<span class="name" v-else-if="workSheetDetail.warnType == 4">离线时长:</span>
>告警值:</span
>
<span class="name" v-else-if="workSheetDetail.warnType == 4"
>离线时长:</span
>
<span
class="value alarm-value"
v-if="
workSheetDetail.warnType != 99 &&
workSheetDetail.warnType != 4
"
>{{ workSheetDetail.value }}{{ workSheetDetail.unit }}</span>
>{{ workSheetDetail.value }}{{ workSheetDetail.unit }}</span
>
<span
class="value alarm-value"
v-else-if="workSheetDetail.warnType == 4"
>{{ warnValueFilter(workSheetDetail?.offlineTime) }}</span>
>{{ warnValueFilter(workSheetDetail?.offlineTime) }}</span
>
<span class="value alarm-value" v-else>
{{ workSheetDetail.totalConstantTime }}
</span>
......@@ -220,7 +236,9 @@
</div>
<div
class="content-item"
v-if="workSheetDetail.warnType && workSheetDetail.warnType == 3"
v-if="
workSheetDetail.warnType && workSheetDetail.warnType == 3
"
>
<span class="name">运行状态:</span>
<span class="value">{{ workSheetDetail.runState }}</span>
......@@ -230,7 +248,9 @@
v-if="workSheetDetail.metric == 'TSP浓度'"
>
<span class="name change-style">TSP粉尘污染溯源结果:</span>
<span class="value">{{ workSheetDetail.sourceTrace || "无"}}</span>
<span class="value">{{
workSheetDetail.sourceTrace || "无"
}}</span>
</div>
</div>
</el-col>
......@@ -683,7 +703,8 @@
<el-form>
<el-form-item label="驳回原因">
<el-select v-model="rejectType">
<el-option v-for="(item, i) in reasonList"
<el-option
v-for="(item, i) in reasonList"
:key="i"
:label="item.description"
:value="item.rejectType"
......@@ -693,7 +714,12 @@
</el-form-item>
<el-row>
<el-col :span="24">
<el-input type="textarea" v-model="rejectReason" :autosize="{ minRows: 2, maxRows: 12 }" placeholder="请输入内容">
<el-input
type="textarea"
v-model="rejectReason"
:autosize="{ minRows: 2, maxRows: 12 }"
placeholder="请输入内容"
>
</el-input>
</el-col>
</el-row>
......@@ -709,9 +735,14 @@
>
<el-form>
<el-form-item label="第几行:">
<el-select v-model="bagRow" placeholder="请选择第几行" @change="getCol">
<el-select
v-model="bagRow"
placeholder="请选择第几行"
@change="getCol"
>
<el-option
v-for="item in rowList" :key="item"
v-for="item in rowList"
:key="item"
:label="item"
:value="item"
>
......@@ -721,7 +752,8 @@
<el-form-item label="第几列:">
<el-select v-model="bagCol" placeholder="请选择第几列">
<el-option
v-for="item in colList" :key="item"
v-for="item in colList"
:key="item"
:label="item"
:value="item"
>
......@@ -734,24 +766,26 @@
</template>
<script setup>
import { ref, reactive, onMounted, onBeforeUnmount,computed } from 'vue'
import { ref, reactive, onMounted, onBeforeUnmount, computed } from "vue";
import CommonTable from "@/components/commonTable/index.vue";
import commonDialog from "./components/dialog.vue";
import { getData, getDataFun, postDataJSON } from '@/request/method.js';
import moment from 'moment';
import { getToken } from '@/utils/auth.js';
import { ElMessage } from 'element-plus';
import { router } from '@/router/index.js';
import { getData, getDataFun, postDataJSON } from "@/request/method.js";
import moment from "moment";
import { getToken } from "@/utils/auth.js";
import { ElMessage } from "element-plus";
import { router } from "@/router/index.js";
const formInline = ref({
eventName: '',
keyword: '',
warnType: '',
productionLineId: '',
deviceType: '',
eventName: "",
keyword: "",
warnType: "",
productionLineId: "",
deviceType: "",
createTime: [
moment(new Date().getTime() - 1000 * 60 * 60 * 24 * 30).format('YYYY-MM-DD HH:mm:ss'),
moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
]
moment(new Date().getTime() - 1000 * 60 * 60 * 24 * 30).format(
"YYYY-MM-DD HH:mm:ss"
),
moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
],
});
const formModel = ref({
......@@ -759,90 +793,90 @@ const formModel = ref({
});
const viewDialog = ref({
title: '闭环控制分派',
title: "闭环控制分派",
show: false,
width: '45%',
width: "45%",
});
const bagDialog = ref({
title: '更换布袋',
title: "更换布袋",
show: false,
width: '30%',
width: "30%",
btnGroup: [
{
attrKey: 'save',
label: '保存'
}
]
attrKey: "save",
label: "保存",
},
],
});
const bagRow = ref('');
const bagCol = ref('');
const bagRow = ref("");
const bagCol = ref("");
const rowList = ref([]);
const colList = ref([]);
const saveBag = ()=>{
if (bagRow.value === '') {
const saveBag = () => {
if (bagRow.value === "") {
ElMessage({
type: 'warning',
message: '请选择第几行'
type: "warning",
message: "请选择第几行",
});
return;
}
if (bagCol.value === '') {
if (bagCol.value === "") {
ElMessage({
type: 'warning',
message: '请选择第几列'
type: "warning",
message: "请选择第几列",
});
return;
}
const params = {
workTicketNo: workTicketNo.value,
row: bagRow.value,
column: bagCol.value
column: bagCol.value,
};
postDataJSON('/transaction/doc/changeBag',params).then(res => {
postDataJSON("/transaction/doc/changeBag", params).then((res) => {
if (res.code === 1) {
ElMessage({
type: 'success',
message: '更换布袋成功'
type: "success",
message: "更换布袋成功",
});
bagDialog.value.show = false;
}
});
}
};
const rowLineMap = ref(null);
const getBagRowLine = (no) => {
const url = '/bag/cycle/getCompartEnumList';
const url = "/bag/cycle/getCompartEnumList";
const params = {
deviceNo: no
}
getDataFun(url,params).then(res => {
deviceNo: no,
};
getDataFun(url, params).then((res) => {
if (res.code === 1) {
rowLineMap.value = res.data;
res.data.forEach(item => {
res.data.forEach((item) => {
rowList.value.push(item.row);
});
}
})
}
});
};
const getCol = ()=>{
rowLineMap.value.forEach(item => {
const getCol = () => {
rowLineMap.value.forEach((item) => {
if (item.row === bagRow.value) {
colList.value = item.columns;
}
});
}
};
const viewData = {
D: "在线监控(监测)仪器仪表故障",
B: "在线监控(监测)仪器仪表与数采通讯异常",
VGD: "在线监控(监测)仪器仪表与数采通讯异常",
}
};
const warnValueFilter = computed(()=> {
return (offlineTime)=> {
const warnValueFilter = computed(() => {
return (offlineTime) => {
if (offlineTime == null || offlineTime <= 0) {
return "--";
}
......@@ -871,28 +905,28 @@ const warnValueFilter = computed(()=> {
}
return s;
}
}
};
});
const imgUrlList = ref([]);
const alarmImg = ref([]);
const srcList = ref([]);
const workTicketNo = ref('');
const rejectType = ref('');
const workTicketNo = ref("");
const rejectType = ref("");
const reasonList = ref([]);
const rejectReason = ref('');
const rejectReason = ref("");
const rejectDialog = ref({
title: '驳回申请',
title: "驳回申请",
show: false,
width: '35%',
width: "35%",
btnGroup: [
{
attrKey: 'save',
label: '保存'
}
]
attrKey: "save",
label: "保存",
},
],
});
const getIndex = (index) => {
......@@ -902,47 +936,49 @@ const getIndex = (index) => {
const basicConfiguration = reactive({
ticketEventName: [],
deviceList: [],
productLineList: [{productionLineName: '全部', productionLineId: ''}],
productLineList: [{ productionLineName: "全部", productionLineId: "" }],
});
const workSheetDetail = ref(null);
const getProDuctLine = ()=>{
const url = '/transaction/getProductionLine';
getData(url).then(res => {
const getProDuctLine = () => {
const url = "/transaction/getProductionLine";
getData(url).then((res) => {
basicConfiguration.productLineList.push(...res.data);
});
}
};
const getColor = computed(()=>{
const getColor = computed(() => {
return (level) => {
if (level == 2) {
return 'red'
return "red";
} else if (level == 1) {
return 'yellow'
return "yellow";
} else {
return 'purple'
}
return "purple";
}
};
});
const onSearch = ()=> {
const onSearch = () => {
searchData();
}
};
const onReset =()=> {
const onReset = () => {
currentPage.value = 1;
pageSize.value = 20;
formInline.value.eventName = '';
formInline.value.keyword = '';
formInline.value.productionLineId = '';
formInline.value.deviceType = '';
formInline.value.eventName = "";
formInline.value.keyword = "";
formInline.value.productionLineId = "";
formInline.value.deviceType = "";
formInline.value.createTime = [
moment(new Date().getTime() - 1000 * 60 * 60 * 24 * 30).format('YYYY-MM-DD HH:mm:ss'),
moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
]
moment(new Date().getTime() - 1000 * 60 * 60 * 24 * 30).format(
"YYYY-MM-DD HH:mm:ss"
),
moment(new Date()).format("YYYY-MM-DD HH:mm:ss"),
];
searchData();
}
};
const personTag = ref([]);
const handleView = async (data) => {
viewDialog.value.title = data.eventName;
......@@ -950,21 +986,20 @@ const handleView = async (data) => {
viewDialog.value.show = true;
personTag.value = [];
if (res.handleUsers && res.handleUsers.length > 0) {
res.handleUsers.forEach(item => {
res.handleUsers.forEach((item) => {
personTag.value.push({
type: 'info',
type: "info",
name: item.userName,
userId: item.userId,
userName: item.userName
userName: item.userName,
});
});
}
disposeWorkSheetDetail(res);
}
const dialogReason = ref('');
const dialogMeasure = ref('');
const disposeWorkSheetDetail = (obj)=> {
};
const dialogReason = ref("");
const dialogMeasure = ref("");
const disposeWorkSheetDetail = (obj) => {
const {
reason,
measure,
......@@ -977,8 +1012,8 @@ const disposeWorkSheetDetail = (obj)=> {
if (forwards.length > 0) {
let receiveUserItem = forwards.slice(-1)[0];
}
dialogMeasure.value = '';
dialogMeasure.value = '';
dialogMeasure.value = "";
dialogMeasure.value = "";
srcList.value = [];
imgUrlList.value = [];
......@@ -996,140 +1031,143 @@ const disposeWorkSheetDetail = (obj)=> {
if (imgUrl) {
imgUrlList.value = imgUrl.split(";");
}
}
};
// 拒绝
const handleReject = (data)=> {
const handleReject = (data) => {
workTicketNo.value = data.workTicketNo;
rejectDialog.value.show = true;
}
};
const saveReject = ()=>{
const url = '/transaction/doc/reject';
const saveReject = () => {
const url = "/transaction/doc/reject";
const params = {
workTicketNo: workTicketNo.value,
rejectType: rejectType.value,
rejectReason: rejectReason.value,
isDcTom: 1
}
postDataJSON(url,params).then(res => {
workTicketNo.value = '';
rejectReason.value = '';
rejectType.value = '';
isDcTom: 1,
};
postDataJSON(url, params).then((res) => {
workTicketNo.value = "";
rejectReason.value = "";
rejectType.value = "";
rejectDialog.value.show = false;
ElMessage({
type: 'success',
message: '操作成功'
type: "success",
message: "操作成功",
});
searchData();
});
}
};
const getDetail = (workTicketNo) => {
return new Promise((resolve,reject) => {
const url = '/transaction/doc/detail';
return new Promise((resolve, reject) => {
const url = "/transaction/doc/detail";
const params = {
workTicketNo
}
getDataFun(url,params).then(res => {
workTicketNo,
};
getDataFun(url, params)
.then((res) => {
workSheetDetail.value = res.data;
resolve(res.data);
}).catch(err => {
})
.catch((err) => {
reject();
});
});
}
};
const changeBag = (data)=>{
const changeBag = (data) => {
workTicketNo.value = data.workTicketNo;
getBagRowLine(data.deviceNo);
bagDialog.value.show = true;
}
};
const tableData = ref([]);
const tableColumns = ref([
{
prop: 'index',
label: '序号',
width: '6%'
prop: "index",
label: "序号",
width: "6%",
},
{
prop: 'workTicketNo',
label: '编号',
width: '10%'
prop: "workTicketNo",
label: "编号",
width: "10%",
},
{
prop: 'eventName',
label: '事件名称',
width: '10%'
prop: "eventName",
label: "事件名称",
width: "10%",
},
{
prop: 'deviceName',
label: '发生位置',
width: '10%'
prop: "deviceName",
label: "发生位置",
width: "10%",
},
{
prop: 'deviceNo',
label: '设备编码',
width: '10%'
prop: "deviceNo",
label: "设备编码",
width: "10%",
},
{
prop: 'typeName',
label: '设备类型',
width: '10%'
prop: "typeName",
label: "设备类型",
width: "10%",
},
{
prop: 'signalName',
label: '信号名称',
width: '10%'
prop: "signalName",
label: "信号名称",
width: "10%",
},
{
prop: 'productionLine', label: '所属工序',width: '10%' },
{ prop: 'warnTypeName', label: '类型',width: '10%' },
{ prop: 'createTime', label: '发生时间',width: '10%' },
{ prop: 'desc', label: '闭环状态',width: '10%' },
{ prop: 'handleUser', label: '处理人',width: '10%' },
{ prop: 'finishTime', label: '完成时间',width: '10%' },
{ prop: 'level', label: '级别',width: '5%' },
prop: "productionLine",
label: "所属工序",
width: "10%",
},
{ prop: "warnTypeName", label: "类型", width: "10%" },
{ prop: "createTime", label: "发生时间", width: "10%" },
{ prop: "desc", label: "闭环状态", width: "10%" },
{ prop: "handleUser", label: "处理人", width: "10%" },
{ prop: "finishTime", label: "完成时间", width: "10%" },
{ prop: "level", label: "级别", width: "5%" },
{
prop: "operation",
label: "操作",
width: '15%'
width: "15%",
},
]);
const customerId = getToken("customerId");
const customerId = getToken('customerId');
const getWarnAndTicketConfigMap = ()=> {
const url = '/system/getWarnAndTicketConfigMap';
const getWarnAndTicketConfigMap = () => {
const url = "/system/getWarnAndTicketConfigMap";
const params = {
customerId
}
getDataFun(url,params).then(res => {
customerId,
};
getDataFun(url, params).then((res) => {
if (res && res.code === 1) {
const { ticketEventName } = res.data;
basicConfiguration.ticketEventName = basicConfiguration.ticketEventName.concat(ticketEventName);
basicConfiguration.ticketEventName =
basicConfiguration.ticketEventName.concat(ticketEventName);
}
});
};
let realBtn = '';
let realBtn = "";
const searchData = ()=>{
const searchData = () => {
currentPage.value = 1;
pageSize.value = 20;
getTableData();
}
};
const total = ref(0);
const getTableData = ()=> {
const getTableData = () => {
let keyWord = formInline.value.keyword;
const params = {
eventName: formInline.value.eventName,
......@@ -1143,21 +1181,21 @@ const getTableData = ()=> {
handleState: 2,
belongTo: 1,
isDcTom: 1,
deviceType: formInline.value.deviceType
}
deviceType: formInline.value.deviceType,
};
tableData.value = [];
const url = '/transaction/doc/getListParamPage';
getDataFun(url,params).then(res => {
const url = "/transaction/doc/getListParamPage";
getDataFun(url, params).then((res) => {
if (res && res.code === 1) {
const { list } = res.data;
total.value = res.data.total;
disposeType(list);
tableData.value = list;
tableData.value.forEach(item => {
item.handleUser = '';
item.handleUsers.forEach((ele,eIndex)=>{
tableData.value.forEach((item) => {
item.handleUser = "";
item.handleUsers.forEach((ele, eIndex) => {
if (eIndex > 0) {
item.handleUser += ',' + ele.userName;
item.handleUser += "," + ele.userName;
} else {
item.handleUser += ele.userName;
}
......@@ -1165,53 +1203,53 @@ const getTableData = ()=> {
});
}
});
}
};
const disposeType = (list)=> {
const disposeType = (list) => {
if (list.length) {
list.forEach(l => {
list.forEach((l) => {
if (!l.deviceNo) {
l.deviceNo = '--';
l.deviceNo = "--";
}
switch (l.warnType) {
case 0:
l.warnType = '人工提交'
break
l.warnType = "人工提交";
break;
case 1:
l.warnType = '超标'
break
l.warnType = "超标";
break;
case 2:
l.warnType = '超低'
break
l.warnType = "超低";
break;
case 3:
l.warnType = '生产治理同步率'
break
l.warnType = "生产治理同步率";
break;
case 4:
l.warnType = '离线'
break
l.warnType = "离线";
break;
case 5:
l.warnType = '其他'
break
l.warnType = "其他";
break;
case 10:
l.warnType = '持续超标'
break
l.warnType = "持续超标";
break;
case 11:
l.warnType = '三倍超标'
break
l.warnType = "三倍超标";
break;
case 99:
l.warnType = '恒值'
break
l.warnType = "恒值";
break;
}
})
});
}
}
};
const getDeviceType =() => {
const url = '/alarm/getDeviceType';
getData(url).then(res=>{
const getDeviceType = () => {
const url = "/alarm/getDeviceType";
getData(url).then((res) => {
basicConfiguration.deviceList = res.data;
});
}
};
onMounted(() => {
getProDuctLine();
......@@ -1235,7 +1273,7 @@ const handlePaginationChange = (pagination) => {
width: 100%;
height: calc(100% - 14px);
box-sizing: border-box;
background: #181D21;
background: #181d21;
padding: 20px;
display: flex;
flex-direction: column;
......@@ -1256,7 +1294,7 @@ const handlePaginationChange = (pagination) => {
// color: #faa508;
position: relative;
&::before {
content: ' ';
content: " ";
width: 8px;
height: 8px;
border-radius: 50%;
......@@ -1269,7 +1307,7 @@ const handlePaginationChange = (pagination) => {
.red {
position: relative;
&::before {
content: ' ';
content: " ";
width: 8px;
height: 8px;
border-radius: 50%;
......@@ -1283,7 +1321,7 @@ const handlePaginationChange = (pagination) => {
.purple {
position: relative;
&::before {
content: ' ';
content: " ";
width: 8px;
height: 8px;
border-radius: 50%;
......
......@@ -26,6 +26,7 @@
range-separator="~"
start-placeholder="开始时间"
end-placeholder="结束时间"
popper-class="date-picker-popper"
:teleported="false"
/>
</el-form-item>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment