rt-sim-training-client/src/views/dispatcherStationManage/dispatchCmd.vue

1249 lines
52 KiB
Vue
Raw Normal View History

2022-06-28 11:29:38 +08:00
<template>
<el-dialog
v-dialogDrag
class="dispatcher-cmd chengdou-03__systerm"
:title="title"
:visible.sync="show"
width="1500px"
2022-06-28 11:29:38 +08:00
:before-close="doClose"
:z-index="2010"
:modal="false"
:close-on-click-modal="false"
append-to-body
>
<div class="main">
<el-row style="height: 100%;">
<el-col :span="5" style="height: 100%;">
2022-06-28 11:29:38 +08:00
<div class="left">
2022-06-29 10:36:57 +08:00
<el-tabs v-model="activeTab" type="border-card" @tab-click="tabClick">
2022-06-28 11:29:38 +08:00
<el-tab-pane label="操作" name="operate">
<div class="operate-box">
2022-06-30 18:13:23 +08:00
<div class="create-cmd">
2022-07-07 15:14:42 +08:00
<!-- <span>数据库正常</span> -->
2022-07-07 15:03:41 +08:00
<div>
<el-select v-model="numTime" placeholder="请选择" style="width: 66px;">
<el-option label="24" value="24" />
<el-option label="12" value="12" />
</el-select>
<span>小时</span>
</div>
<span style="width: 85px; font-weight: bold; text-align: end;">{{ getSimulationTime }}</span>
</div>
<div class="create-cmd">
2022-07-07 15:14:42 +08:00
<!-- <span>通信正常</span> -->
2022-07-07 15:03:41 +08:00
<el-button type="primary" @click="refreshSearch">刷新</el-button>
<el-button type="primary" style="width: 100px" @click="createCmd">新建调度命令</el-button>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">缓存命令</div>
<div class="contant-icon" @click="active1=!active1">
<i v-if="active1" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active1" class="left-table1">
<el-table ref="table1" :data="filterDisCmdData('Cache')" border style="width: 100%" height="100" highlight-current-row @current-change="handleCurrentChange($event, 'table1')">
<el-table-column prop="cmdCode" label="命令号" width="80" />
<el-table-column prop="transitId" label="识别号" width="80" />
2022-07-07 15:03:41 +08:00
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column label="接收单位" show-overflow-tooltip width="160">
2022-07-07 15:03:41 +08:00
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.rcvCompanies) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="sender" label="发令人" />
<el-table-column label="发令单位">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name: '' }}</span>
2022-07-07 15:03:41 +08:00
</template>
</el-table-column>
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">接受命令</div>
<div class="contant-icon" @click="active2=!active2">
<i v-if="active2" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active2" class="left-table1">
<el-table ref="table2" :data="filterDisCmdData('Receive')" border style="width: 100%" height="100" highlight-current-row @current-change="handleCurrentChange($event, 'table2')">
<el-table-column prop="cmdCode" label="命令号" width="80" />
2022-07-07 15:03:41 +08:00
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column label="接收单位" show-overflow-tooltip width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.rcvCompanies) || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" />
<el-table-column prop="sender" label="发令人" />
<el-table-column label="发令单位">
2022-07-07 15:03:41 +08:00
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name: '' }}</span>
2022-07-07 15:03:41 +08:00
</template>
</el-table-column>
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">发送命令</div>
<div class="contant-icon" @click="active3=!active3">
<i v-if="active3" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active3" class="left-table1">
<el-table ref="table3" :data="filterDisCmdData('Sent')" border style="width: 100%" height="150" highlight-current-row @current-change="handleCurrentChange($event, 'table3')">
<el-table-column prop="cmdCode" label="命令号" width="80" />
2022-07-07 15:03:41 +08:00
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column label="接收单位" show-overflow-tooltip width="160">
2022-07-07 15:03:41 +08:00
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.rcvCompanies) || '' }}</span>
2022-07-07 15:03:41 +08:00
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" width="160" />
<el-table-column prop="sender" label="发令人" />
<el-table-column label="发令单位">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name: '' }}</span>
</template>
</el-table-column>
2022-07-07 15:03:41 +08:00
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
</div>
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">签收完成</div>
<div class="contant-icon" @click="active4=!active4">
<i v-if="active4" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active4" class="left-table1">
<el-table ref="table4" :data="filterDisCmdData('Signed')" border style="width: 100%" height="170" highlight-current-row @current-change="handleCurrentChange($event, 'table4')">
<el-table-column prop="cmdCode" label="命令号" width="80" />
2022-07-07 15:03:41 +08:00
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column label="接收单位" show-overflow-tooltip width="160">
2022-07-07 15:03:41 +08:00
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.rcvCompanies) || '' }}</span>
2022-07-07 15:03:41 +08:00
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" width="160" />
<el-table-column prop="sender" label="发令人" />
<el-table-column label="发令单位">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name: '' }}</span>
</template>
</el-table-column>
2022-07-07 15:03:41 +08:00
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
2022-06-30 18:13:23 +08:00
</div>
2022-06-28 11:29:38 +08:00
</div>
</el-tab-pane>
<el-tab-pane label="查询" name="search">
<div class="search-box">
2022-07-19 14:50:52 +08:00
<div class="box-title">
<div class="contant-null" />
<div class="contant-text">查询条件</div>
<div class="contant-icon" @click="active5=!active5">
<i v-if="active1" class="el-icon-arrow-down" />
<i v-else class="el-icon-arrow-up" />
</div>
</div>
<div v-show="active5" class="search-condition">
<div class="condition-top">
<el-radio v-model="searchObj.timeType" label="1">时间范围</el-radio>
<el-radio v-model="searchObj.timeType" label="2">精确匹配发令时间</el-radio>
</div>
<div class="condition-border" style="padding: 5px 10px">
<div v-if="searchObj.timeType==1">
<div class="condition-row">
<span style="margin-right: 5px"></span>
<el-date-picker v-model="searchObj.startTime" style="flex: 1" type="datetime" placeholder="选择日期时间" value-format="yyyy-MM-dd HH:mm:ss" />
</div>
<div class="condition-row">
<span style="margin-right: 5px"></span>
<el-date-picker v-model="searchObj.endTime" style="flex: 1" type="datetime" placeholder="选择日期时间" value-format="yyyy-MM-dd HH:mm:ss" />
</div>
</div>
<div v-else class="condition-row">
<span style="margin-right: 5px">发令时间</span>
<el-date-picker v-model="searchObj.sendTime" style="flex: 1" type="datetime" placeholder="选择日期时间" value-format="yyyy-MM-dd HH:mm:ss" />
</div>
</div>
<div class="condition-row">
<el-checkbox v-model="searchObj.hasNumber">命令号</el-checkbox>
<el-input v-model="searchObj.cmdCode" />
2022-07-19 14:50:52 +08:00
</div>
<div class="condition-border">
<div class="condition-row">
<el-checkbox v-model="searchObj.hasCompanyOfSender">发令单位</el-checkbox>
<el-input v-model="searchObj.sendCompany.name" />
2022-07-19 14:50:52 +08:00
</div>
<div class="condition-row">
<el-checkbox v-model="searchObj.hasCompanyOfReceiver">受令单位</el-checkbox>
<el-input v-model="searchObj.companyOfReceiver" />
</div>
<div>
<el-checkbox v-model="searchObj.hasTitleKey">命令标题或者内容 关键字</el-checkbox>
<el-input v-model="searchObj.titleKey" />
</div>
<div>
<el-select v-model="searchObj.allSigned" placeholder="请选择">
<el-option
v-for="item in searchSignedOption"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="condition-btn">
<el-button type="primary" @click="search">查询</el-button>
<el-button type="primary" style="width: 100px" @click="clearCondition">清除</el-button>
</div>
</div>
<el-table ref="table5" class="search-table" :data="searchTable" border style="width: 100%" height="100%" highlight-current-row @current-change="handleCurrentChange($event, 'table5')">
<el-table-column prop="cmdCode" label="命令号" width="80" />
<el-table-column prop="transitId" label="识别号" width="80" />
2022-07-19 14:50:52 +08:00
<el-table-column prop="title" label="命令标题" show-overflow-tooltip />
<el-table-column label="接收单位" show-overflow-tooltip width="160">
2022-07-19 14:50:52 +08:00
<template slot-scope="scope">
<span style="margin-left: 10px">{{ JoinDeviceNameStr(scope.row.rcvCompanies) || '' }}</span>
2022-07-19 14:50:52 +08:00
</template>
</el-table-column>
<el-table-column prop="sendTime" label="发令时间" width="160" />
<el-table-column prop="sender" label="发令人" />
<el-table-column label="发令单位">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ scope.row.sendCompany ? scope.row.sendCompany.name: '' }}</span>
</template>
</el-table-column>
2022-07-19 14:50:52 +08:00
<el-table-column label="命令类型" width="100">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ typeObj[scope.row.type] || '' }}</span>
</template>
</el-table-column>
<el-table-column prop="content" label="命令正文" show-overflow-tooltip />
</el-table>
2022-06-28 11:29:38 +08:00
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
<el-col :span="15">
2022-06-28 11:29:38 +08:00
<div class="middle">
<el-tabs v-model="cmdTab" type="border-card" class="middle-padding">
2022-06-28 11:29:38 +08:00
<el-tab-pane label="调度命令" name="cmd">
<el-form ref="form" :model="command" :rules="rules" label-width="95px">
2022-07-08 14:56:33 +08:00
<el-form-item label="命令标题" prop="title">
2022-06-29 10:36:57 +08:00
<el-input v-model="command.title" />
</el-form-item>
<el-col :span="8">
<el-form-item label="命令号" prop="cmdCode">
<el-input v-model="command.cmdCode" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="中转识别号">
<el-input v-model="command.transitId" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="当前状态">
<el-input v-model="currentStatus" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="发令时间">
<el-date-picker v-model="command.sendTime" type="datetime" placeholder="选择日期时间" style="width: 100%;" value-format="yyyy-MM-dd HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="发令人">
<el-select v-model="command.sender" placeholder="请选择" style="width: 100%;" @change="senderChange">
2022-06-30 18:13:23 +08:00
<el-option
2022-07-01 13:58:44 +08:00
v-for="item in memberDataList"
:key="item.id"
:label="item.labelName"
:value="item.id"
2022-06-30 18:13:23 +08:00
/>
</el-select>
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="发令单位">
<el-input v-model="command.sendCompany.name" />
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="授权时间">
<el-date-picker v-model="command.authTime" type="datetime" placeholder="选择日期时间" style="width: 100%;" value-format="yyyy-MM-dd HH:mm:ss" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="值班主任">
<el-select v-model="command.chiefOnDuty" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in memberDataList"
:key="item.id"
:label="item.labelName"
:value="item.id"
/>
</el-select>
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="授权状态">
<el-input v-model="command.authState" />
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="定稿时间">
<el-date-picker v-model="command.finishedTime" type="datetime" placeholder="选择日期时间" style="width: 100%;" value-format="yyyy-MM-dd HH:mm:ss" />
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="审核人">
<el-select v-model="command.reviewer" placeholder="请选择" style="width: 100%;">
2022-06-30 18:13:23 +08:00
<el-option
v-for="item in memberDataList"
:key="item.id"
:label="item.labelName"
:value="item.id"
2022-06-30 18:13:23 +08:00
/>
</el-select>
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
<div style="height: 40px; line-height: 40px; margin-left: 20px;">
<el-checkbox v-model="command.chiefOnDutyAuth">需值班主任授权</el-checkbox>
</div>
</el-col>
<el-col :span="8">
<el-form-item label="日计划号">
<el-input v-model="command.dailyPlanNum" />
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="拟令人">
<el-select v-model="command.designer" placeholder="请选择" style="width: 100%;">
2022-06-30 18:13:23 +08:00
<el-option
v-for="item in memberDataList"
:key="item.id"
:label="item.labelName"
:value="item.id"
2022-06-30 18:13:23 +08:00
/>
</el-select>
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
<el-col :span="8">
2022-06-29 10:36:57 +08:00
<el-form-item label="命令分类">
2022-06-30 18:13:23 +08:00
<el-select v-model="command.type" placeholder="请选择" style="width: 100%;">
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
2022-06-29 10:36:57 +08:00
</el-form-item>
</el-col>
</el-form>
2022-06-28 11:29:38 +08:00
</el-tab-pane>
</el-tabs>
2022-06-29 10:36:57 +08:00
<el-tabs v-model="textTab" type="border-card">
2022-07-08 14:56:33 +08:00
<el-tab-pane :label="getContentLable" name="text">
2022-06-28 11:29:38 +08:00
<div class="cmd-box">
2022-06-29 10:36:57 +08:00
<div>
2022-07-08 14:56:33 +08:00
<el-input v-model="command.content" type="textarea" :rows="6" placeholder="请输入内容" maxlength="200" />
2022-06-29 10:36:57 +08:00
</div>
2022-06-28 11:29:38 +08:00
</div>
</el-tab-pane>
</el-tabs>
<div>
2022-06-30 18:13:23 +08:00
<div class="table-title">
2022-06-29 10:36:57 +08:00
<span>受令列表</span>
2022-06-30 18:13:23 +08:00
<!-- <el-checkbox v-model="tableChecked">全选</el-checkbox> -->
2022-06-29 10:36:57 +08:00
</div>
<div class="table">
<el-table ref="table" :data="getTableData" border style="width: 100%" :header-cell-class-name="cellClass" height="200" highlight-current-row @select="selectionChange" @select-all="selectionChange" @row-click="tableRowChange">
<el-table-column type="selection" :selectable="selectableFn" width="50" />
<el-table-column prop="name" label="受令单位" width="160" />
2022-07-07 15:03:41 +08:00
<el-table-column prop="copyers" label="抄送" width="120" show-overflow-tooltip />
2022-07-01 15:37:55 +08:00
<el-table-column label="签收状态">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignedStatus(getCurrentState(scope.row)) }}</span>
2022-07-07 15:03:41 +08:00
</template>
</el-table-column>
<el-table-column label="签收人">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getSignedBy(getCurrentState(scope.row)) || '' }}</span>
</template>
</el-table-column>
<el-table-column label="签收时间" width="160">
<template slot-scope="scope">
<span style="margin-left: 10px">{{ getCurrentState(scope.row).time || '' }}</span>
2022-07-01 15:37:55 +08:00
</template>
</el-table-column>
2022-06-29 10:36:57 +08:00
</el-table>
</div>
</div>
<div class="midle-bottom">
<el-button type="primary" :disabled="!allographRow" @click="allographCmd">代签</el-button>
<el-button type="primary" :disabled="disabledSent" @click="sendCmd">下达</el-button>
<el-button type="primary" :disabled="disabledSent" @click="saveCacheData(true)">缓存</el-button>
2022-06-30 18:13:23 +08:00
<el-button type="primary" @click="doClose">关闭</el-button>
2022-06-28 11:29:38 +08:00
</div>
</div>
</el-col>
<el-col :span="4">
2022-06-28 11:29:38 +08:00
<div class="right">
常用词汇
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
2022-06-30 18:13:23 +08:00
import { sendCommandNew } from '@/api/jmap/training';
import { mapState } from 'vuex';
2022-07-07 15:03:41 +08:00
import { parseTime } from '@/utils/index';
2022-06-28 11:29:38 +08:00
export default {
name:'DispatcherCmd',
data() {
return {
dialogShow: false,
activeTab: 'operate',
cmdTab: 'cmd',
2022-06-29 10:36:57 +08:00
textTab: 'text',
2022-07-07 15:03:41 +08:00
typeObj: {
Normal: '普通调度命令',
Construct: '施工调度命令',
Forward: '转发调度命令',
Request: '请求调度命令',
LongTerm: '长效调度命令',
ShiftScheduling: '班计划调度命令',
Other: '其他调度命令'
2022-07-07 15:03:41 +08:00
},
2022-07-01 15:37:55 +08:00
signedStatusObj: {
Cache: '缓存',
Sent: '已发送',
SrmReceived: '自律机接收',
Received: '已接收',
Signed: '已签收',
Reject: '已拒签'
2022-07-01 15:37:55 +08:00
},
2022-06-29 10:36:57 +08:00
command: {
cmdId: '',
cmdCode: '',
2022-06-29 10:36:57 +08:00
title: '',
transitId: '',
2022-06-29 10:36:57 +08:00
senderId: '',
sendTime: '',
sender: '',
authTime: '',
chiefOnDuty: '',
chiefOnDutyAuth: false,
authState: '',
finishedTime: '',
reviewer: '',
dailyPlanNum: '',
designer: '',
type: 'Normal',
content: '',
sendCompany: {
id: '',
name: '',
rsCompany: true,
cpType: '',
code: '',
trainViaGsmR: false,
transStationCode: '',
trainNum: ''
},
rcvCompanies: []
2022-07-19 14:50:52 +08:00
// allSigned: ''
2022-06-29 10:36:57 +08:00
},
2022-07-08 14:56:33 +08:00
rules: {
title: [
{ required: true, message: '命令标题不能为空', trigger: 'blur' },
{ min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur' }
],
cmdCode: [
2022-07-08 14:56:33 +08:00
{ required: true, message: '命令号不能为空', trigger: 'blur' },
{ min: 1, max: 7, message: '长度在 1 到 7 个字符', trigger: 'blur' }
2022-07-08 14:56:33 +08:00
]
},
typeTransition: {
DISPATCHER: 'Dispatcher',
STATION: 'Station',
TRAIN: 'Train'
},
DisStationId: 'DisStation1986',
allographRow: null,
2022-07-01 13:58:44 +08:00
tableChecked: false,
2022-07-07 15:03:41 +08:00
active1: true,
active2: true,
active3: true,
active4: true,
2022-07-19 14:50:52 +08:00
active5: true,
2022-07-07 15:03:41 +08:00
numTime: 24,
queryResData: {}, // 查询的结果数据
// currentInfo: {},
2022-07-19 14:50:52 +08:00
searchObj: {
timeType: '1',
startTime: '',
endTime: '',
sendTime: '',
hasNumber: false,
cmdCode: '',
2022-07-19 14:50:52 +08:00
hasCompanyOfSender: false,
sendCompany: {},
2022-07-19 14:50:52 +08:00
hasCompanyOfReceiver: false,
companyOfReceiver: '',
hasTitleKey: false,
titleKey: '',
allSigned: ''
},
searchTable: [],
searchSignedOption: [
{ value: '', label: '全部'},
{ value: true, label: '只显示签收完成的'},
{ value: false, label: '只显示未签收完成的'}
]
2022-06-28 11:29:38 +08:00
};
},
computed: {
2022-06-30 18:13:23 +08:00
...mapState('training', [
2022-07-07 15:03:41 +08:00
'memberList', 'memberData', 'simulationUserList', 'initTime'
2022-06-30 18:13:23 +08:00
]),
...mapState('socket', [
'dispatchCommandState'
]),
currentStatus() {
let s = '编辑';
const cpId = this.command.sendCompany.id;
if (this.queryResData.companyStateMap && this.queryResData.companyStateMap[cpId]) {
const state = this.queryResData.companyStateMap[cpId].state;
s = this.signedStatusObj[state] ? this.signedStatusObj[state] : '编辑';
}
return s;
},
2022-07-08 14:56:33 +08:00
getContentLable() {
const text = '命令正文';
const fontLength = this.command.content.length;
return `${text} ${fontLength}`;
},
disabledSent() {
let s = false;
const sentArr = ['编辑', '缓存'];
if (!this.command.cmdCode || !sentArr.includes(this.currentStatus)) {
s = true;
}
return s;
},
2022-07-07 15:03:41 +08:00
typeOptions() {
const list = [];
Object.keys(this.typeObj).forEach(item => {
list.push({
label: this.typeObj[item],
value: item
});
});
return list;
},
getSimulationTime() {
const t = parseTime(this.initTime, '{h}:{i}:{s}');
const tArr = t.split(':');
let s = ' ';
let h = tArr[0];
if (this.numTime != 24) {
s = '上午';
if (h > 12) {
s = '下午';
h = h - 12;
}
}
return `${s} ${h}:${tArr[1]}:${tArr[2]}`;
},
2022-06-28 11:29:38 +08:00
show() {
return this.dialogShow;
},
2022-06-30 18:13:23 +08:00
group() {
return this.$route.query.group;
},
2022-06-28 11:29:38 +08:00
title() {
return '调度命令管理系统';
2022-06-30 18:13:23 +08:00
},
getTableData() {
2022-07-07 15:03:41 +08:00
const mList = [];
const filterArr = this.memberList.filter(item => {
2022-06-30 18:13:23 +08:00
return item.type == 'STATION_SUPERVISOR';
});
2022-07-07 15:03:41 +08:00
filterArr.forEach(item => {
const name = this.getDeviceName(item.deviceCode);
2022-07-07 15:03:41 +08:00
mList.push({
code: item.deviceCode || '',
name: name,
cpType: 'Station'
2022-07-07 15:03:41 +08:00
});
});
return mList;
},
memberDataList() {
return Object.values(this.memberData);
},
2022-07-07 15:03:41 +08:00
getActiveSender() {
const userInfo = this.memberDataList.find(item => {
return item.userId == this.$store.state.user.id;
});
const activeUser = userInfo || {};
return activeUser;
}
},
watch: {
getTableData() {
this.allographRow = null;
2022-07-07 15:03:41 +08:00
},
getActiveSender(obj) {
this.DisStationId = obj.deviceCode ? obj.deviceCode : 'DisStation1986';
2022-07-07 15:03:41 +08:00
},
dispatchCommandState(obj) {
Object.values(obj.cpStateMap).forEach(item => {
if (item.cpId) {
if (!this.queryResData.companyStateMap) {
this.queryResData.companyStateMap = {};
}
this.$set(this.queryResData.companyStateMap, item.cpId, item);
}
2022-06-30 18:13:23 +08:00
});
}
},
2022-06-28 11:29:38 +08:00
beforeDestroy() {},
2022-07-01 13:58:44 +08:00
mounted() {},
2022-06-28 11:29:38 +08:00
methods:{
cellClass(row) {
if (row.columnIndex === 0 && this.disabledSent) {
return 'DisableSelection';
}
},
getCurrentState(row) {
const rcList = this.command.rcvCompanies || [];
const StateMap = this.queryResData.companyStateMap || {};
const findRc = rcList.find(item => {
return item.code == row.code;
});
let findObj = {};
if (findRc && findRc.id && StateMap[findRc.id] && StateMap[findRc.id].state) {
findObj = StateMap[findRc.id];
}
return findObj;
},
getSignedStatus(row) {
let s = '';
if (row.signedByProxy) {
s = '代签';
} else {
s = this.signedStatusObj[row.state] || '';
}
return s;
},
selectableFn() {
return !this.disabledSent;
},
filterDisCmdData(state) {
const { companyStateMap = {}, disCmdMap = {}, rcvCompanyMap = {} } = this.queryResData;
const list = [];
if (state != 'Receive') {
Object.values(companyStateMap).forEach(item => {
if (item.state == state) {
const findObj = this.findDisCmdObj(disCmdMap, item.cpId);
if (findObj) {
list.push(findObj);
}
}
});
} else {
Object.values(rcvCompanyMap).forEach(item => {
const findObj = this.findDisCmdObj(disCmdMap, item.id);
if (findObj) {
list.push(findObj);
}
});
}
return list.reverse();
},
findDisCmdObj(obj, val) {
return Object.values(obj).find(item => {
return item.sendCompany.id == val;
});
},
2022-07-19 14:50:52 +08:00
search() {
this.searchTable = [];
this.searchCmd().then(res => {
this.getSearchTable();
});
},
getSearchTable() {
const list = Object.values(this.queryResData.disCmdMap).reverse().filter(item => {
2022-07-19 14:50:52 +08:00
return this.conditionFilter(item);
});
this.searchTable = list;
},
conditionFilter(item) {
let status = true;
if (this.searchObj.timeType == '1') {
if (this.searchObj.startTime && new Date(this.searchObj.startTime).getTime() > new Date(item.sendTime).getTime()) {
status = false;
}
if (this.searchObj.endTime && new Date(this.searchObj.endTime).getTime() < new Date(item.sendTime).getTime()) {
status = false;
}
}
if (this.searchObj.timeType == '2' && this.searchObj.sendTime) {
if (this.searchObj.sendTime != item.sendTime) {
status = false;
}
}
if (this.searchObj.hasNumber && this.searchObj.cmdCode) {
if (this.searchObj.cmdCode != item.cmdCode) {
2022-07-19 14:50:52 +08:00
status = false;
}
}
if (this.searchObj.hasCompanyOfSender && this.searchObj.sendCompany) {
if (this.searchObj.sendCompany.name != item.sendCompany.name) {
2022-07-19 14:50:52 +08:00
status = false;
}
}
if (this.searchObj.hasCompanyOfReceiver && this.searchObj.companyOfReceiver) {
const findObj = item.rcvCompanies.find(ii => {
const device = this.$store.getters['map/getDeviceByCode'](ii.code);
2022-07-19 14:50:52 +08:00
const name = device ? device.name : '';
return name == this.searchObj.companyOfReceiver;
});
if (!findObj) {
status = false;
}
}
if (this.searchObj.hasTitleKey && this.searchObj.titleKey) {
if (!item.title.includes(this.searchObj.titleKey) && !item.content.includes(this.searchObj.titleKey)) {
status = false;
}
}
if (this.searchObj.allSigned != '') {
const cpId = item.sendCompany.id;
let s = false;
if (this.queryResData.companyStateMap && this.queryResData.companyStateMap[cpId] == 'Signed') {
s = true;
}
if (this.searchObj.allSigned != s) {
2022-07-19 14:50:52 +08:00
status = false;
}
}
return status;
},
2022-07-07 15:03:41 +08:00
setCurrentRow(obj, refName) {
const tableArr = ['table', 'table1', 'table2', 'table3', 'table4', 'table5'];
2022-07-07 15:03:41 +08:00
tableArr.forEach(key => {
if (key != refName) {
2022-07-07 16:32:18 +08:00
this.$refs[key] && this.$refs[key].setCurrentRow();
2022-07-07 15:03:41 +08:00
} else {
2022-07-07 16:32:18 +08:00
this.$refs[key] && this.$refs[key].setCurrentRow(obj);
2022-07-07 15:03:41 +08:00
}
});
this.allographRow = null;
2022-07-07 15:03:41 +08:00
},
handleCurrentChange(obj, refName) {
if (!obj) { return; }
// this.currentInfo = obj;
2022-07-19 14:50:52 +08:00
// this.command = {...obj};
Object.keys(this.command).forEach(key => {
this.command[key] = obj[key] || '';
});
2022-07-07 15:03:41 +08:00
this.setCurrentRow(obj, refName);
this.$refs.table.clearSelection();
const infoList = this.command.rcvCompanies || [];
infoList.forEach(item => {
const findObj = this.getTableData.find(ii => {
return ii.code == item.code;
});
findObj && this.$refs.table.toggleRowSelection(findObj, true);
});
2022-07-07 15:03:41 +08:00
},
getSignedBy(info) {
const signedInfo = this.memberData[info.operatorId];
2022-07-07 15:03:41 +08:00
let name = '';
if (signedInfo) {
name = signedInfo.labelName;
2022-07-07 15:03:41 +08:00
}
return name;
},
getDeviceName(receiverId) {
let name = '';
if (receiverId) {
const device = this.$store.getters['map/getDeviceByCode'](receiverId);
name = device ? device.name : '';
}
return name;
},
JoinDeviceNameStr(devCodeArr) {
2022-07-07 15:03:41 +08:00
let name = '';
const nameArr = [];
devCodeArr.forEach(ii => {
const device = this.$store.getters['map/getDeviceByCode'](ii.code);
2022-07-07 15:03:41 +08:00
nameArr.push(device ? device.name : '');
});
name = nameArr.join(',');
return name;
},
refreshSearch() {
console.log('刷新');
this.searchCmd();
},
2022-07-19 14:50:52 +08:00
clearCondition() {
this.searchTable = [];
this.searchObj = {
timeType: '1',
startTime: '',
endTime: '',
sendTime: '',
hasNumber: false,
cmdCode: '',
2022-07-19 14:50:52 +08:00
hasCompanyOfSender: false,
sendCompany: {},
2022-07-19 14:50:52 +08:00
hasCompanyOfReceiver: false,
companyOfReceiver: '',
hasTitleKey: false,
titleKey: '',
allSigned: ''
};
},
2022-07-04 14:46:00 +08:00
createCmd() {
const obj = this.resetData();
const findDiff = Object.keys(obj).find(key => {
if (key == 'sendCompany') {
return obj[key].name != this.command[key].name;
} else if (key == 'rcvCompanies') {
return this.command[key].length;
} else {
return obj[key] != this.command[key];
}
});
new Promise((resolve, reject) => {
if (findDiff) {
this.$confirm('当前调度命令已经被编辑修改过了,你要放弃所有的修改吗?', '操作提示', {
confirmButtonText: '是',
cancelButtonText: '否'
}).then(() => {
resolve();
}).catch(() => {
reject();
});
} else {
resolve();
}
2022-07-04 14:46:00 +08:00
}).then(() => {
this.initData();
this.getSenderName();
sendCommandNew(this.group, 'CTC_NEW_DIS_COMMAND', {}).then((res) => {
console.log(res, '---新建调度命令号');
this.command.cmdCode = res.data.cmdCode;
this.command.cmdId = res.data.cmdId;
}).catch(error => {
this.$messageBox('新建调度命令号失败:' + error.message);
});
2022-07-04 14:46:00 +08:00
}).catch(() => {
console.log('取消新建调度命令!');
});
},
resetData() {
const data = this.getSendCompanyData(this.$store.state.user.id);
return {
cmdId: '',
cmdCode: '',
2022-06-30 18:13:23 +08:00
title: '',
transitId: '',
2022-07-01 13:58:44 +08:00
senderId: '',
sendTime: '',
sender: this.command.sender,
authTime: '',
chiefOnDuty: '',
chiefOnDutyAuth: false,
authState: '',
finishedTime: '',
reviewer: '',
dailyPlanNum: '',
designer: '',
type: 'Normal',
content: '',
sendCompany: {
id: '',
name: data.name || '',
rsCompany: true,
cpType: data.type || '',
code: data.code || '',
trainViaGsmR: false,
transStationCode: '',
trainNum: ''
},
rcvCompanies: []
};
},
initData() {
this.command = {
...this.resetData()
2022-06-30 18:13:23 +08:00
};
// this.currentInfo = {};
2022-07-07 16:32:18 +08:00
this.$refs.table && this.$refs.table.clearSelection();
2022-07-08 14:56:33 +08:00
this.$refs.form && this.$refs.form.resetFields();
2022-07-07 15:03:41 +08:00
this.setCurrentRow();
2022-06-30 18:13:23 +08:00
},
getSendCompanyData(memberId) {
const obj = this.memberDataList.find(item => {
return item.userId == memberId;
2022-06-30 18:13:23 +08:00
});
let data = {
type: '',
name: '',
code: ''
};
2022-06-30 18:13:23 +08:00
if (obj) {
data = {
name: obj.label,
rsCompany: false,
cpType: this.typeTransition[obj.type] || obj.type,
code: obj.deviceCode || this.DisStationId
};
2022-06-30 18:13:23 +08:00
}
return data;
},
senderChange(memberId) {
const data = this.getSendCompanyData(memberId);
this.$set(this.command, 'sendCompany', data);
2022-06-30 18:13:23 +08:00
},
2022-07-01 13:58:44 +08:00
getSenderName() {
const activeUser = this.memberDataList.find(item => {
return item.userId == this.$store.state.user.id;
});
if (activeUser) {
// this.command.senderId = activeUser.id;
this.command.sender = activeUser.labelName;
this.senderChange(activeUser.userId);
2022-07-01 13:58:44 +08:00
}
},
2022-06-28 11:29:38 +08:00
doShow() {
this.initData();
2022-07-07 15:03:41 +08:00
this.searchCmd();
2022-07-01 13:58:44 +08:00
this.getSenderName();
2022-06-28 11:29:38 +08:00
this.dialogShow = true;
},
doClose() {
this.dialogShow = false;
2022-09-16 14:47:15 +08:00
this.$emit('close');
2022-06-28 11:29:38 +08:00
},
tabClick() {
console.log('tabClick');
2022-06-30 18:13:23 +08:00
},
selectionChange(selection) {
const arr = [];
selection.forEach(item => {
arr.push({
name: item.name,
rsCompany: true,
cpType: item.cpType,
code: item.code,
...item
});
});
this.command.rcvCompanies = arr;
},
getCompanyIdList(sum) {
return new Promise((resolve, reject) => {
sendCommandNew(this.group, 'CTC_NEW_COMPANY_DIS_COMMAND', {sum: sum}).then(suc => {
resolve(suc.data);
}).catch(err => {
reject(err.message);
});
});
},
saveCacheData(showMsg) {
this.$refs['form'].validate((valid) => {
if (valid) {
if (!this.command.content) {
this.$messageBox('请选择填写命令正文');
return;
}
if (!this.command.rcvCompanies.length) {
this.$messageBox('请选择受令单位');
return;
}
this.cacheCmd(showMsg).then(suc => {
this.searchCmd();
this.initData();
});
}
});
},
cacheCmd(showMsg) {
console.log('缓存', this.command);
return new Promise(async(resolve, reject) => {
const data = JSON.parse(JSON.stringify(this.command));
const idList = await this.getCompanyIdList(data.rcvCompanies.length + 1);
data.rcvCompanies.forEach((item, index) => {
item.id = idList[index];
});
data.sendCompany.id = idList[idList.length - 1];
sendCommandNew(this.group, 'CTC_SAVE_DIS_COMMAND', data).then((res) => {
showMsg && this.$message.success('缓存调度命令成功!');
resolve();
}).catch(error => {
showMsg && this.$messageBox('缓存调度命令失败:' + error.message);
reject(error.message);
});
});
},
tableRowChange(row, column, event) {
const sArr = [undefined, 'Sent', 'Received', 'SrmReceived'];
const findCode = this.command.rcvCompanies.find(item => {
return item.code == row.code;
});
if (this.currentStatus == '已发送' && findCode && sArr.includes(row.state)) {
this.allographRow = row;
} else {
this.allographRow = null;
}
},
allographCmd() {
if (!this.allographRow) { return; }
const test = `当前操作者:【${this.getActiveSender.labelName || ''}】,为【${this.command.cmdCode}】号调度命令的受令单位【${this.allographRow.name}`;
const messageData = [test];
const h = this.$createElement;
messageData.push(h('p', null, '进行代签操作前,请您与受令单位进行联络确认。'));
messageData.push(h('p', null, '您确定要进行代签操作吗?'));
this.$confirm('提示', {
title: '代签操作提示',
message: h('div', null, messageData),
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
console.log('代签');
sendCommandNew(this.group, 'CTC_SIGN_DIS_COMMAND', {cmdId: this.command.cmdId, rcId: this.allographRow.cpId, proxySign: true}).then((res) => {
console.log(res, '---res');
this.$message.success('代签成功!');
this.searchCmd();
this.initData();
}).catch(error => {
this.$messageBox('代签令失败:' + error.message);
});
}).catch(() => {
console.log('取消代签');
2022-06-30 18:13:23 +08:00
});
},
sendCmd() {
const test = `${this.command.cmdCode}】号调度命令下达到以下受令人:`;
2022-07-07 16:00:03 +08:00
const messageData = [test];
const h = this.$createElement;
this.command.rcvCompanies.forEach((item, index) => {
const msg = `${index + 1}. ${item.name || ''}`;
2022-07-07 16:00:03 +08:00
messageData.push(h('p', null, msg));
});
this.$confirm('提示', {
title: '操作提示',
message: h('div', null, messageData),
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
2022-07-07 15:03:41 +08:00
}).then(() => {
2022-07-08 14:56:33 +08:00
this.$refs['form'].validate((valid) => {
if (valid) {
if (!this.command.content) {
this.$messageBox('请选择填写命令正文');
return;
}
if (!this.command.rcvCompanies.length) {
2022-07-08 14:56:33 +08:00
this.$messageBox('请选择受令单位');
return;
}
this.cacheCmd().then(suc => {
sendCommandNew(this.group, 'CTC_SEND_DIS_COMMAND', {cmdId: this.command.cmdId}).then((res) => {
console.log(res, '---res');
this.$message.success('发送调度命令成功!');
this.searchCmd();
this.initData();
}).catch(error => {
this.$messageBox('发送调度命令失败:' + error.message);
});
}).catch(err => {
console.log('缓存调度命令失败', err);
2022-07-08 14:56:33 +08:00
});
}
2022-07-07 15:03:41 +08:00
});
2022-06-30 18:13:23 +08:00
});
},
searchCmd() {
2022-07-19 14:50:52 +08:00
return new Promise((resolve, reject) => {
sendCommandNew(this.group, 'CTC_QUERY_DIS_COMMAND', {holderType: 'Dispatcher', holderCode: this.DisStationId}).then((res) => {
2022-07-19 14:50:52 +08:00
console.log(res, '---res----');
this.queryResData = res.data || {};
2022-07-19 14:50:52 +08:00
resolve();
}).catch(error => {
this.$messageBox('查询调度命令失败:' + error.message);
reject(error.message);
});
2022-06-30 18:13:23 +08:00
});
2022-06-28 11:29:38 +08:00
}
}
};
</script>
<style lang="scss" scoped>
// .dispatcher-cmd{
// }
.main {
height: 100%;
.left {
height: 100%;
2022-07-07 15:03:41 +08:00
.operate-box {
overflow-y: auto;
}
2022-06-30 18:13:23 +08:00
.create-cmd {
2022-07-07 15:03:41 +08:00
height: 30px;
display: flex;
2022-07-07 15:14:42 +08:00
justify-content: flex-end;
2022-07-07 15:03:41 +08:00
align-items: center;
}
.box-title {
height: 28px;
display: flex;
justify-content: center;
align-items: center;
background: #B3B2C2;
.contant-null, .contant-icon {
width: 20px;
display: flex;
justify-content: center;
}
.contant-icon:hover {
cursor: pointer;
}
.contant-text {
display: flex;
justify-content: center;
flex: 1;
color: blue;
}
2022-06-30 18:13:23 +08:00
}
2022-07-19 14:50:52 +08:00
.search-box {
height: 720px;
display: flex;
flex-direction: column;
justify-content: center;
.search-condition {
padding: 5px;
.condition-top {
padding: 5px;
}
.condition-btn {
padding: 10px;
text-align: center;
}
}
.search-table {
flex: 1;
}
.condition-border {
margin: 10px 0;
padding: 5px;
border: 1px solid #92ACD7;
div {
margin: 5px 0;
}
}
.condition-row {
display: flex;
justify-content: space-between;
align-items: center;
height: 32px;
line-height: 32px;
}
.el-checkbox {
margin-right: 5px;
}
}
2022-06-28 11:29:38 +08:00
}
2022-06-29 10:36:57 +08:00
/deep/ .el-tabs__item {
height: 30px !important;
line-height: 30px !important;
}
/deep/ .el-table .DisableSelection .cell .el-checkbox__inner{
display: none;
position: relative;
}
.el-table .DisableSelection .cell:before{
content: "";
position: absolute;
}
2022-07-19 14:50:52 +08:00
.middle, .left {
.middle-padding {
padding-right: 5px;
}
2022-06-29 10:36:57 +08:00
/deep/ .el-form-item {
margin-bottom: 0px;
2022-07-08 14:56:33 +08:00
.el-form-item__error {
top: 30px;
}
2022-06-29 10:36:57 +08:00
}
2022-06-30 18:13:23 +08:00
.el-input {
/deep/ .el-input__icon {
line-height: 22px;
}
2022-06-29 10:36:57 +08:00
}
.midle-bottom {
height: 40px;
display: flex;
justify-content: center;
align-items: center;
}
}
}
</style>
<style>
.dispatcher-cmd .el-dialog .el-dialog__body {
padding: 5px !important;
}
.dispatcher-cmd .el-dialog {
margin-top: 8vh !important;
2022-06-28 11:29:38 +08:00
}
2022-07-19 14:50:52 +08:00
.dispatcher-cmd .el-tabs--border-card>.el-tabs__content {
padding: 5px !important;
}
2022-06-28 11:29:38 +08:00
</style>