添加海南技术监督
This commit is contained in:
163
src/views/pqs/supervise_jb/retire/components/equipment.vue
Normal file
163
src/views/pqs/supervise_jb/retire/components/equipment.vue
Normal file
@@ -0,0 +1,163 @@
|
||||
<template>
|
||||
<el-form :inline="true" ref="formRef" :model="addData" label-width="auto" class="form-one" :rules="rules">
|
||||
<el-form-item label="区域:">
|
||||
<Area ref="areaRef" v-model="addData.orgNo" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="终端编号:" prop="assetNumber">
|
||||
<el-input v-model="addData.assetNumber" clearable placeholder="请输入关键字"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item label="资产编号:" prop="devNumber">-->
|
||||
<!-- <el-input v-model="addData.devNumber" clearable placeholder="请输入关键字"></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item class="item" label="报告:" style="margin-top: 10px" prop="fileList">-->
|
||||
<!-- <el-upload-->
|
||||
<!-- v-model:file-list="addData.fileList"-->
|
||||
<!-- ref="upload"-->
|
||||
<!-- action=""-->
|
||||
<!-- :limit="1"-->
|
||||
<!-- :on-exceed="handleExceed"-->
|
||||
<!-- :auto-upload="false"-->
|
||||
<!-- >-->
|
||||
<!-- <template #trigger>-->
|
||||
<!-- <el-button type="primary">上传文件</el-button>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-upload>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<!-- <el-form-item label="选择审核人:" prop="checker">-->
|
||||
<!-- <el-select v-model="addData.checker" clearable placeholder="请选择审核人">-->
|
||||
<!-- <el-option v-for="item in auditList" :key="item.id" :label="item.name" :value="item.id"></el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
import Area from '@/components/form/area/index.vue'
|
||||
import { uploadFile, addFlow, update } from '@/api/process-boot/retire'
|
||||
import { getUserByRoleType } from '@/api/user-boot/user'
|
||||
import { UploadProps, UploadRawFile, genFileId, ElMessage } from 'element-plus'
|
||||
|
||||
const dictData = useDictData()
|
||||
|
||||
const interferenceType = dictData.getBasicData('Interference_Source')
|
||||
const emit = defineEmits(['onSubmit'])
|
||||
const rules = reactive({
|
||||
assetNumber: [{ required: true, message: '请输入终端编号', trigger: 'blur' }],
|
||||
devNumber: [{ required: true, message: '请输入资产编号', trigger: 'blur' }],
|
||||
|
||||
checker: [{ required: true, message: '请选择审核人', trigger: 'change' }],
|
||||
fileList: [{ required: true, message: '请选择文件', trigger: 'change' }]
|
||||
})
|
||||
const title: any = ref('')
|
||||
const auditList: any = ref([])
|
||||
|
||||
const addData: any = ref({
|
||||
orgNo: dictData.state.area[0].id,
|
||||
assetNumber: '',
|
||||
devNumber: '',
|
||||
fileList: [],
|
||||
checker: '',
|
||||
applyType: 4,
|
||||
type: 5
|
||||
})
|
||||
const formRef = ref()
|
||||
// 新增
|
||||
const config = () => {
|
||||
formRef.value.validate(async (valid: any) => {
|
||||
if (valid) {
|
||||
if (title.value == '新增终端退役申请单') {
|
||||
let form = new FormData()
|
||||
form.append('file', addData.value.fileList[0].raw)
|
||||
await uploadFile(form).then((res: any) => {
|
||||
addData.value.fileName = res.data.minFileName
|
||||
addData.value.filePath = res.data.minFileUrl
|
||||
})
|
||||
addData.value.applicationFormText = JSON.stringify({
|
||||
assetNumber: addData.value.assetNumber,
|
||||
devNumber: addData.value.devNumber
|
||||
})
|
||||
addData.value.operate = 1
|
||||
addData.value.checkerName = auditList.value.find((item: any) => item.id == addData.value.checker).name
|
||||
addFlow(addData.value).then((res: any) => {
|
||||
ElMessage.success('新增成功!')
|
||||
cancel()
|
||||
})
|
||||
} else if (title.value == '编辑终端退役申请单') {
|
||||
if (addData.value.fileList[0].raw != undefined) {
|
||||
let form = new FormData()
|
||||
form.append('file', addData.value.fileList[0].raw)
|
||||
await uploadFile(form).then((res: any) => {
|
||||
addData.value.fileName = res.data.minFileName
|
||||
addData.value.filePath = res.data.minFileUrl
|
||||
})
|
||||
}
|
||||
addData.value.applicationFormText = JSON.stringify({
|
||||
assetNumber: addData.value.assetNumber,
|
||||
devNumber: addData.value.devNumber
|
||||
})
|
||||
addData.value.operate = 1
|
||||
addData.value.checkerName = auditList.value.find((item: any) => item.id == addData.value.checker).name
|
||||
update(addData.value).then((res: any) => {
|
||||
ElMessage.success('修改成功!')
|
||||
|
||||
cancel()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
// 审核
|
||||
const audit = () => {}
|
||||
// 重置
|
||||
const cancel = () => {
|
||||
formRef.value.resetFields()
|
||||
emit('onSubmit')
|
||||
}
|
||||
const open = (text: string, row?: any) => {
|
||||
if (row) {
|
||||
addData.value = JSON.parse(JSON.stringify(row))
|
||||
addData.value.assetNumber = row.applyForm.assetNumber
|
||||
addData.value.devNumber = row.applyForm.devNumber
|
||||
addData.value.fileList = [{ name: row.fileName, url: row.filePath }]
|
||||
} else {
|
||||
addData.value = {
|
||||
orgNo: dictData.state.area[0].id,
|
||||
assetNumber: '',
|
||||
devNumber: '',
|
||||
fileList: [],
|
||||
checker: '',
|
||||
applyType: 4,
|
||||
type: 5
|
||||
}
|
||||
}
|
||||
formRef.value.resetFields()
|
||||
title.value = text
|
||||
}
|
||||
|
||||
// 取消
|
||||
onMounted(() => {
|
||||
getUserByRoleType(3).then(res => {
|
||||
auditList.value = res.data
|
||||
})
|
||||
})
|
||||
const upload = ref()
|
||||
|
||||
// 上传
|
||||
const handleExceed: UploadProps['onExceed'] = files => {
|
||||
upload.value!.clearFiles()
|
||||
const file = files[0] as UploadRawFile
|
||||
file.uid = genFileId()
|
||||
upload.value!.handleStart(file)
|
||||
}
|
||||
|
||||
defineExpose({ open, config, audit })
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
:deep(.el-upload-list__item) {
|
||||
width: 300px;
|
||||
}
|
||||
</style>
|
||||
117
src/views/pqs/supervise_jb/retire/detail.vue
Normal file
117
src/views/pqs/supervise_jb/retire/detail.vue
Normal file
@@ -0,0 +1,117 @@
|
||||
<template>
|
||||
<!--工作流view的路径:/pqs/supervise/retire/detail-->
|
||||
<div class='default-main'>
|
||||
<!-- <h1>详细信息回显</h1>-->
|
||||
<el-descriptions :column='2' border>
|
||||
<el-descriptions-item label='供电公司'>
|
||||
{{ detailData.gdName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label='变电站'>
|
||||
{{ detailData.subName }}
|
||||
</el-descriptions-item>
|
||||
<template v-if='detailData.deviceType == 1'>
|
||||
<el-descriptions-item label='终端终端' :span='2'>
|
||||
{{ detailData.deviceName }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item label='母线'>
|
||||
{{ detailData.volName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label='监测点'>
|
||||
{{ detailData.deviceName }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<!-- <el-descriptions-item label='当前状态'>-->
|
||||
<!-- <el-tag :type='getDeviceStatusType(detailData.deviceStatus)'>-->
|
||||
<!-- {{ getDeviceStatus(detailData.deviceStatus) }}-->
|
||||
<!-- </el-tag>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item label='变更前状态'>
|
||||
<el-tag :type='getDeviceStatusType(detailData.devOriginalStatus)'>
|
||||
{{ getDeviceStatus(detailData.devOriginalStatus) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label='目标状态'>
|
||||
<el-tag :type='getDeviceStatusType(detailData.devStatus)'>
|
||||
{{ getDeviceStatus(detailData.devStatus) }}
|
||||
</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span='2' label='变更原因'>
|
||||
{{ detailData.propertyNo }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang='ts'>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import { propTypes } from '@/utils/propTypes'
|
||||
import { getRunningDeviceById } from '@/api/supervision-boot/device/quitRunningDev'
|
||||
|
||||
defineOptions({ name: 'QuitRunningDeviceDetail' })
|
||||
const { query } = useRoute() // 查询参数
|
||||
|
||||
const props = defineProps({
|
||||
id: propTypes.string.def(undefined)
|
||||
})
|
||||
const detailLoading = ref(false) // 表单的加载中
|
||||
const detailData = ref({}) // 详情数据
|
||||
const queryId = query.id// 从 URL 传递过来的 id 编号
|
||||
const getDeviceStatus = (status: number) => {
|
||||
if (status === 0) {
|
||||
return '运行'
|
||||
}
|
||||
if (status === 1) {
|
||||
return '检修'
|
||||
}
|
||||
if (status === 2) {
|
||||
return '停运'
|
||||
}
|
||||
if (status === 3) {
|
||||
return '调试'
|
||||
}
|
||||
if (status === 4) {
|
||||
return '退运'
|
||||
}
|
||||
return '运行'
|
||||
}
|
||||
|
||||
const getDeviceStatusType = (status: number) => {
|
||||
if (status === 0) {
|
||||
return 'success'
|
||||
}
|
||||
if (status === 1) {
|
||||
return 'warning'
|
||||
}
|
||||
if (status === 2) {
|
||||
return 'danger'
|
||||
}
|
||||
if (status === 3) {
|
||||
return 'warning'
|
||||
}
|
||||
if (status === 4) {
|
||||
return 'info'
|
||||
}
|
||||
return 'success'
|
||||
}
|
||||
|
||||
/** 获得数据 */
|
||||
const getInfo = async () => {
|
||||
detailLoading.value = true
|
||||
try {
|
||||
await getRunningDeviceById(props.id || queryId).then(res => {
|
||||
detailData.value = res.data
|
||||
})
|
||||
} finally {
|
||||
detailLoading.value = false
|
||||
}
|
||||
}
|
||||
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getInfo()
|
||||
})
|
||||
|
||||
</script>
|
||||
258
src/views/pqs/supervise_jb/retire/deviceQuitPopup.vue
Normal file
258
src/views/pqs/supervise_jb/retire/deviceQuitPopup.vue
Normal file
@@ -0,0 +1,258 @@
|
||||
<template>
|
||||
<el-dialog draggable v-model="dialogVisible" :title="title" width="450px" top="20vh">
|
||||
<el-scrollbar>
|
||||
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
|
||||
<el-form-item label="终端" prop="deviceId">
|
||||
<el-tree-select
|
||||
v-model="form.deviceId"
|
||||
:data="data"
|
||||
filterable
|
||||
:filter-node-method="filterNode"
|
||||
style="width: 100%"
|
||||
@change="changeDevStatus"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="终端当前状态:">
|
||||
<el-select v-model="runFlag" disabled placeholder="请选择终端" clearable class="select">
|
||||
<el-option
|
||||
v-for="item in devStatusList"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更状态:" prop="devStatus">
|
||||
<el-select v-model="form.devStatus" placeholder="请选择终端状态" clearable class="select">
|
||||
<el-option
|
||||
v-for="item in devStatuData"
|
||||
:key="item.value"
|
||||
:label="item.name"
|
||||
:value="item.value"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="变更原因" prop="propertyNo">
|
||||
<el-input
|
||||
type="textarea"
|
||||
clearable
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
placeholder="请输入变更原因"
|
||||
v-model="form.propertyNo"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-scrollbar>
|
||||
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<!-- <el-button type="primary" @click="submit">确认</el-button> -->
|
||||
<el-button type="primary" @click="submit(true)" :loading="loading" >保存</el-button>
|
||||
<el-button type="primary" @click="submit(false)" :loading="loading" >提交审批</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, inject } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
|
||||
import { getTerminalSelectTree } from '@/api/device-boot/Business'
|
||||
import { addRunningDevice, quitRunningDeviceUpdate } from '@/api/supervision-boot/device/quitRunningDev'
|
||||
import { getDeviceDetailData } from '@/api/device-boot/line'
|
||||
import { defaultProps } from '@/utils/tree'
|
||||
const devStatusList = ref([
|
||||
{ name: '运行', value: '0' },
|
||||
{ name: '检修', value: '1' },
|
||||
{ name: '退运', value: '4' }
|
||||
])
|
||||
//下拉数据源
|
||||
const sourceData = ref()
|
||||
const deviceList = ref()
|
||||
const data = ref()
|
||||
const title = ref('')
|
||||
const loading = ref(false)
|
||||
const tableStore = inject('tableStore') as TableStore
|
||||
const formRef = ref()
|
||||
const devStatuData: any = ref([])
|
||||
|
||||
const dialogVisible = ref(false)
|
||||
const runFlag = ref('')
|
||||
// 注意不要和表单ref的命名冲突
|
||||
const form = ref({
|
||||
id: '',
|
||||
deviceId: '',
|
||||
deviceType: '1',
|
||||
devOriginalStatus: '0',
|
||||
devStatus: '',
|
||||
propertyNo: '',
|
||||
saveOrCheckflag: ''
|
||||
})
|
||||
|
||||
//form表单校验规则
|
||||
const rules = {
|
||||
deviceId: [{ required: true, message: '终端不能为空', trigger: 'change' }],
|
||||
devStatus: [{ required: true, message: '请选择状态', trigger: 'change' }],
|
||||
propertyNo: [{ required: true, message: '请输入退役原因', trigger: 'blur' }]
|
||||
}
|
||||
const resetForm = () => {
|
||||
if (formRef.value) {
|
||||
formRef.value.resetFields()
|
||||
}
|
||||
}
|
||||
const filterNode = (value: string, data: any, node: any) => {
|
||||
if (!value) return true
|
||||
|
||||
if (data.label) {
|
||||
return chooseNode(value, data, node)
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤父节点 / 子节点 (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。label是中文字符,enlabel是英文字符.
|
||||
const chooseNode = (value: string, data: any, node: any) => {
|
||||
if (data.label.indexOf(value) !== -1) {
|
||||
return true
|
||||
}
|
||||
const level = node.level
|
||||
// 如果传入的节点本身就是一级节点就不用校验了
|
||||
if (level === 1) {
|
||||
return false
|
||||
}
|
||||
// 先取当前节点的父节点
|
||||
let parentData = node.parent
|
||||
// 遍历当前节点的父节点
|
||||
let index = 0
|
||||
while (index < level - 1) {
|
||||
// 如果匹配到直接返回,此处label值是中文字符,enlabel是英文字符。判断匹配中英文过滤
|
||||
if (parentData.data.label.indexOf(value) !== -1) {
|
||||
return true
|
||||
}
|
||||
// 否则的话再往上一层做匹配
|
||||
parentData = parentData.parent
|
||||
index++
|
||||
}
|
||||
// 没匹配到返回false
|
||||
return false
|
||||
}
|
||||
|
||||
const open = async (text: string, tempData?: any) => {
|
||||
title.value = text
|
||||
//终端
|
||||
await getTerminalSelectTree(4).then(res => {
|
||||
deviceList.value = res.data
|
||||
})
|
||||
sourceData.value = deviceList.value
|
||||
data.value = deviceList.value
|
||||
if (tempData) {
|
||||
// 表单赋值
|
||||
for (let key in form.value) {
|
||||
form.value[key] = tempData[key]
|
||||
}
|
||||
form.value.deviceType = form.value.deviceType + ''
|
||||
changeDevStatus(form.value.deviceId, true)
|
||||
form.value.devStatus = tempData.devStatus != null ? tempData.devStatus + '' : ''
|
||||
} else {
|
||||
resetForm()
|
||||
// 在此处恢复默认表单
|
||||
for (let key in form.value) {
|
||||
form.value[key] = ''
|
||||
}
|
||||
runFlag.value = ''
|
||||
form.value.deviceType = '1'
|
||||
}
|
||||
form.value.deviceType = '1'
|
||||
|
||||
// changeType(form.value.deviceType)
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交用户表单数据
|
||||
*/
|
||||
const submit =async (flag: boolean) => {
|
||||
loading.value = true
|
||||
if (flag) {
|
||||
form.value.saveOrCheckflag = '1'
|
||||
|
||||
await addRunningDevice(form.value).then(res => {
|
||||
ElMessage.success('保存成功!')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
})
|
||||
} else {
|
||||
formRef.value.validate(async (valid: any) => {
|
||||
if (valid) {
|
||||
form.value.saveOrCheckflag = '2'
|
||||
if (form.value.devOriginalStatus == form.value.devStatus) {
|
||||
if (form.value.devOriginalStatus == '0') {
|
||||
ElMessage.warning('终端当前状态就是运行,无需变更!')
|
||||
} else if (form.value.devOriginalStatus == '1') {
|
||||
ElMessage.warning('终端当前状态就是检修,无需变更!')
|
||||
} else {
|
||||
ElMessage.warning('终端当前状态就是退运,无需变更!')
|
||||
}
|
||||
} else {
|
||||
if (form.value.id) {
|
||||
await quitRunningDeviceUpdate(form.value).then(res => {
|
||||
ElMessage.success('重新发起成功')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
})
|
||||
} else {
|
||||
await addRunningDevice(form.value).then(res => {
|
||||
//查询进线数据,避免一直处于loading状态
|
||||
ElMessage.success('申请成功')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
await setTimeout(() => {
|
||||
loading.value = false
|
||||
}, 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* 终端类型切换
|
||||
*/
|
||||
|
||||
const changeType = (event: any) => {
|
||||
sourceData.value = deviceList.value
|
||||
form.value.deviceId = ''
|
||||
data.value = sourceData.value
|
||||
}
|
||||
|
||||
const changeDevStatus = async (event: any, flag?: boolean) => {
|
||||
await getDeviceDetailData(event).then(res => {
|
||||
//给当前终端赋值初始运行状态
|
||||
runFlag.value = res.data.runFlag + ''
|
||||
form.value.devOriginalStatus = runFlag.value
|
||||
if (!flag) form.value.devStatus = ''
|
||||
devStatuData.value = devStatusList.value.filter(item => item.value != res.data.runFlag)
|
||||
})
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.el-upload-list__item {
|
||||
transition: none !important;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
min-width: 180px;
|
||||
}
|
||||
::v-deep .el-tree-node__children > div {
|
||||
display: block !important;
|
||||
}
|
||||
:deep(.el-select__input) {
|
||||
width: 100% !important;
|
||||
}
|
||||
</style>
|
||||
55
src/views/pqs/supervise_jb/retire/index.vue
Normal file
55
src/views/pqs/supervise_jb/retire/index.vue
Normal file
@@ -0,0 +1,55 @@
|
||||
<template>
|
||||
<div class='default-main'>
|
||||
<el-tabs v-model='activeName' type='border-card'>
|
||||
<el-tab-pane label='终端状态管理' name='0'>
|
||||
<terminal :id="id" v-if="activeName == '0'" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label='监测点状态管理' name='1'>
|
||||
<monitor :id="id" v-if="activeName == '1'" />
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang='ts'>
|
||||
import { ref } from 'vue'
|
||||
import { mainHeight } from '@/utils/layout'
|
||||
import terminal from './terminal.vue'
|
||||
import monitor from './monitor.vue'
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
defineOptions({
|
||||
name: 'supervision/retire'
|
||||
})
|
||||
const activeName = ref('0')
|
||||
const route = useRoute()
|
||||
const id = ref('')
|
||||
|
||||
const layout = mainHeight(63) as any
|
||||
|
||||
watch(() => route.query.t, async (newValue, oldValue) => {
|
||||
if (route.fullPath.includes('supervision/retire')) {
|
||||
let type = (route.query.type as string) || 'null'
|
||||
if (type == 'null') { }
|
||||
else if (type == '0') {
|
||||
activeName.value = '0'
|
||||
} else {
|
||||
activeName.value = '1'
|
||||
}
|
||||
id.value = (route.query.id as string) || 'null'
|
||||
id.value = id.value + '@' + route.query.t
|
||||
}
|
||||
}, { deep: true, immediate: true })
|
||||
</script>
|
||||
|
||||
<style lang='scss' scoped>
|
||||
.bars_w {
|
||||
width: 100%;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
:deep(.el-tabs__content) {
|
||||
height: v-bind('layout.height');
|
||||
overflow-y: auto;
|
||||
}
|
||||
</style>
|
||||
331
src/views/pqs/supervise_jb/retire/monitor.vue
Normal file
331
src/views/pqs/supervise_jb/retire/monitor.vue
Normal file
@@ -0,0 +1,331 @@
|
||||
<!--待办事项列表-->
|
||||
<template>
|
||||
<div>
|
||||
<TableHeader date-picker nextFlag theCurrentTime>
|
||||
<template #select>
|
||||
<el-form-item label="流程状态">
|
||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、监测点"
|
||||
clearable></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template #operation>
|
||||
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
|
||||
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
|
||||
</template>
|
||||
</TableHeader>
|
||||
<!--表格-->
|
||||
<Table ref="tableRef" :checkbox-config="checkboxConfig"></Table>
|
||||
<!--弹框-->
|
||||
<monitor-quit-popup ref="deviceQuitPopup" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import TableStore from '@/utils/tableStore'
|
||||
import Table from '@/components/table/index.vue'
|
||||
import TableHeader from '@/components/table/header/index.vue'
|
||||
import { onMounted, provide, ref, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import MonitorQuitPopup from '@/views/pqs/supervise/retire/monitorQuitPopup.vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ElMessageBox } from 'element-plus/es'
|
||||
import { cancelQuitRunningDevice, getRunningDeviceById } from '@/api/supervision-boot/device/quitRunningDev'
|
||||
import { deleteQuitRunningDevice } from '@/api/supervision-boot/delete/index'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
const dictData = useDictData()
|
||||
const statusSelect = dictData.statusSelect()
|
||||
|
||||
import { useAdminInfo } from '@/stores/adminInfo'
|
||||
//获取登陆用户姓名和部门
|
||||
const adminInfo = useAdminInfo()
|
||||
defineOptions({
|
||||
name: 'supervision/retire'
|
||||
})
|
||||
const { push, options, currentRoute } = useRouter()
|
||||
const flag = ref(false)
|
||||
const deviceQuitPopup = ref()
|
||||
const tableStore = new TableStore({
|
||||
url: '/supervision-boot/quitRunningDevice/list',
|
||||
method: 'POST',
|
||||
publicHeight: 65,
|
||||
column: [
|
||||
{
|
||||
width: '60',
|
||||
type: 'checkbox'
|
||||
},
|
||||
{
|
||||
field: 'index',
|
||||
title: '序号',
|
||||
width: '60',
|
||||
formatter: (row: any) => {
|
||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||
}
|
||||
},
|
||||
{ title: '供电公司', field: 'gdName', minWidth: 130 },
|
||||
{ title: '变电站', field: 'subName', minWidth: 160 },
|
||||
{ title: '监测点', field: 'deviceName', minWidth: 200 },
|
||||
{ title: '退运原因', field: 'propertyNo', minWidth: 160 },
|
||||
{
|
||||
title: '变更前状态',
|
||||
field: 'devOriginalStatus',
|
||||
minWidth: 130,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'success',
|
||||
1: 'warning',
|
||||
2: 'danger',
|
||||
3: 'warning',
|
||||
4: 'info',
|
||||
null: 'primary'
|
||||
},
|
||||
|
||||
replaceValue: {
|
||||
0: '投运',
|
||||
1: '检修',
|
||||
2: '停运',
|
||||
3: '调试',
|
||||
4: '退运',
|
||||
null: '/'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '目标状态',
|
||||
field: 'devStatus',
|
||||
minWidth: 130,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'success',
|
||||
1: 'warning',
|
||||
2: 'danger',
|
||||
3: 'warning',
|
||||
4: 'info',
|
||||
null: 'primary'
|
||||
},
|
||||
replaceValue: {
|
||||
0: '投运',
|
||||
1: '检修',
|
||||
2: '停运',
|
||||
3: '调试',
|
||||
4: '退运',
|
||||
null: '/'
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: '流程状态',
|
||||
minWidth: 100,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'warning',
|
||||
1: 'primary',
|
||||
2: 'success',
|
||||
3: 'danger',
|
||||
4: 'warning',
|
||||
null: 'primary'
|
||||
},
|
||||
replaceValue: {
|
||||
0: '待提交审批',
|
||||
1: '审批中',
|
||||
2: '审批通过',
|
||||
3: '审批不通过',
|
||||
4: '已取消',
|
||||
null: '/'
|
||||
}
|
||||
},
|
||||
{ field: 'createTime', title: '开始时间', minWidth: 170 },
|
||||
{
|
||||
field: 'createBy',
|
||||
title: '填报人',
|
||||
minWidth: 80,
|
||||
formatter: (row: any) => {
|
||||
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
align: 'center',
|
||||
minWidth: '150',
|
||||
fixed: 'right',
|
||||
render: 'buttons',
|
||||
buttons: [
|
||||
{
|
||||
name: 'productSetting',
|
||||
title: '流程详情',
|
||||
type: 'primary',
|
||||
icon: 'el-icon-EditPen',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return !row.processInstanceId
|
||||
},
|
||||
click: row => {
|
||||
handleAudit(row.processInstanceId, row.historyInstanceId)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'edit',
|
||||
title: '编辑',
|
||||
type: 'primary',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
showDisabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || !(row.status == 0)
|
||||
},
|
||||
disabled: row => {
|
||||
return !(row.status == 0)
|
||||
},
|
||||
click: row => {
|
||||
deviceQuitPopup.value.open('编辑', row)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'edit',
|
||||
title: '重新发起',
|
||||
type: 'warning',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
|
||||
},
|
||||
click: row => {
|
||||
deviceQuitPopup.value.open('重新发起', row)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'cancel',
|
||||
title: '取消',
|
||||
type: 'danger',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || row.status !== 1
|
||||
},
|
||||
click: row => {
|
||||
cancelLeave(row)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
beforeSearchFun: () => {
|
||||
// for (let key in tableStore.table.params) {
|
||||
// if (tableStore.table.params[key] === '') {
|
||||
// delete tableStore.table.params[key]
|
||||
// }
|
||||
|
||||
// }
|
||||
tableStore.table.params.deviceType = 2
|
||||
}
|
||||
})
|
||||
tableStore.table.params.searchValue = ''
|
||||
tableStore.table.params.status = ''
|
||||
provide('tableStore', tableStore)
|
||||
|
||||
//新增退运终端信息
|
||||
const add = () => {
|
||||
deviceQuitPopup.value.open('新增监测点状态变更')
|
||||
}
|
||||
|
||||
// 禁止点击
|
||||
const checkboxConfig = reactive({
|
||||
checkMethod: ({ row }) => {
|
||||
return adminInfo.roleCode.includes('delete_info')
|
||||
? true
|
||||
: row.createBy == adminInfo.$state.id && row.status == 0
|
||||
}
|
||||
})
|
||||
const deleteEven = () => {
|
||||
if (tableStore.table.selection.length == 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: '请选择要删除的数据'
|
||||
})
|
||||
} else {
|
||||
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '删除成功!'
|
||||
})
|
||||
tableStore.index()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
/** 流程实例详情 */
|
||||
const handleAudit = (instanceId: string, historyInstanceId: string) => {
|
||||
push({
|
||||
name: 'BpmProcessInstanceDetail',
|
||||
state: {
|
||||
id: instanceId,
|
||||
historyInstanceId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**取消流程操作*/
|
||||
const cancelLeave = async (row: any) => {
|
||||
// 二次确认
|
||||
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputType: 'textarea',
|
||||
inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // 判断非空,且非空格
|
||||
inputErrorMessage: '取消原因不能为空'
|
||||
})
|
||||
// 发起取消
|
||||
let data = {
|
||||
id: row.id,
|
||||
processInstanceId: row.processInstanceId,
|
||||
reason: value
|
||||
}
|
||||
await cancelQuitRunningDevice(data)
|
||||
ElMessage.success('取消成功')
|
||||
// 加载数据
|
||||
tableStore.index()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 加载数据
|
||||
tableStore.index()
|
||||
})
|
||||
watch(
|
||||
() => currentRoute.value.path,
|
||||
() => {
|
||||
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
|
||||
tableStore.index()
|
||||
flag.value = false
|
||||
}
|
||||
},
|
||||
{
|
||||
deep: true
|
||||
}
|
||||
)
|
||||
|
||||
const props = defineProps({ id: { type: String, default: 'null' } })
|
||||
watch(() => props.id, async (newValue, oldValue) => {
|
||||
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
|
||||
const fullId = newValue.split('@')[0]
|
||||
let nowTime = Date.now()
|
||||
const routeTime = Number(newValue.split('@')[1])
|
||||
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return // 路由时间超过500ms,则不执行
|
||||
await getRunningDeviceById(fullId).then(res => {
|
||||
if (res && res.code == 'A0000') {
|
||||
deviceQuitPopup.value.open('重新发起', res.data)
|
||||
}
|
||||
})
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
238
src/views/pqs/supervise_jb/retire/monitorQuitPopup.vue
Normal file
238
src/views/pqs/supervise_jb/retire/monitorQuitPopup.vue
Normal file
@@ -0,0 +1,238 @@
|
||||
<template>
|
||||
<el-dialog draggable v-model="dialogVisible" :title="title" width="450px" top="20vh">
|
||||
<el-scrollbar>
|
||||
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef">
|
||||
<!-- <el-form-item label="终端类型" prop="deviceType">
|
||||
<el-radio-group v-model="form.deviceType" :disabled="title == '监测点退运'" @change="changeType">
|
||||
<el-radio border label="1">监测终端</el-radio>
|
||||
<el-radio border label="2">监测点</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="监测点" prop="deviceId">
|
||||
<el-tree-select
|
||||
v-model="form.deviceId"
|
||||
:data="data"
|
||||
filterable
|
||||
:default-expand-all="true"
|
||||
style="width: 100%"
|
||||
@change="changeDevStatus"
|
||||
clearable
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="监测点当前状态:">
|
||||
<el-select v-model="runFlag" disabled placeholder="请选择监测点" clearable class="select">
|
||||
<el-option
|
||||
v-for="item in runFlagList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="变更状态:" prop="devStatus">
|
||||
<el-select v-model="form.devStatus" placeholder="请选择监测点变更状态" clearable class="select">
|
||||
<el-option
|
||||
v-for="item in runFlagData"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="退运原因" prop="propertyNo">
|
||||
<!-- <el-input
|
||||
v-model='form.propertyNo'
|
||||
clearable
|
||||
placeholder='请输入退役原因'
|
||||
/> -->
|
||||
<el-input
|
||||
type="textarea"
|
||||
clearable
|
||||
:autosize="{ minRows: 2, maxRows: 4 }"
|
||||
placeholder="请输入退运原因"
|
||||
v-model="form.propertyNo"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-scrollbar>
|
||||
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<!-- <el-button type="primary" @click="submit">确认</el-button> -->
|
||||
<el-button type="primary" @click="submit(true)" :loading="loading" >保存</el-button>
|
||||
<el-button type="primary" @click="submit(false)" :loading="loading" >提交审批</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
import { ref, inject } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
|
||||
import { getTerminalSelectTree } from '@/api/device-boot/Business'
|
||||
import { addRunningDevice, quitRunningDeviceUpdate } from '@/api/supervision-boot/device/quitRunningDev'
|
||||
import { getLineDetailData } from '@/api/device-boot/line'
|
||||
|
||||
//下拉数据源
|
||||
const sourceData = ref()
|
||||
const lineList = ref()
|
||||
const data = ref()
|
||||
const title = ref('')
|
||||
const loading = ref(false)
|
||||
const tableStore = inject('tableStore') as TableStore
|
||||
const formRef = ref()
|
||||
const runFlag = ref('')
|
||||
|
||||
const runFlagData: any = ref([])
|
||||
const dialogVisible = ref(false)
|
||||
// 注意不要和表单ref的命名冲突
|
||||
const form = ref({
|
||||
id: '',
|
||||
deviceId: '',
|
||||
deviceType: '2',
|
||||
devOriginalStatus: '0',
|
||||
devStatus: '',
|
||||
saveOrCheckflag: '',
|
||||
propertyNo: ''
|
||||
})
|
||||
const runFlagList = [
|
||||
{ id: '0', name: '投运' },
|
||||
{ id: '1', name: '检修' },
|
||||
{ id: '2', name: '停运' },
|
||||
{ id: '3', name: '调试' },
|
||||
{ id: '4', name: '退运' }
|
||||
]
|
||||
|
||||
//form表单校验规则
|
||||
const rules = {
|
||||
deviceId: [{ required: true, message: '终端不能为空', trigger: 'change' }],
|
||||
propertyNo: [{ required: true, message: '请输入退役原因', trigger: 'blur' }],
|
||||
devStatus: [{ required: true, message: '请选择变更状态', trigger: 'blur' }]
|
||||
}
|
||||
const resetForm = () => {
|
||||
if (formRef.value) {
|
||||
formRef.value.resetFields()
|
||||
}
|
||||
}
|
||||
|
||||
const open = async (text: string, tempData?: any) => {
|
||||
title.value = text
|
||||
//监测点
|
||||
await getTerminalSelectTree(6).then(res => {
|
||||
lineList.value = res.data
|
||||
})
|
||||
|
||||
sourceData.value = lineList.value
|
||||
data.value = lineList.value
|
||||
if (tempData) {
|
||||
// 表单赋值
|
||||
for (let key in form.value) {
|
||||
form.value[key] = tempData[key]
|
||||
}
|
||||
form.value.deviceType = form.value.deviceType + ''
|
||||
changeDevStatus(form.value.deviceId, true)
|
||||
form.value.devStatus = tempData.devStatus != null ? tempData.devStatus + '' : ''
|
||||
} else {
|
||||
resetForm()
|
||||
// 在此处恢复默认表单
|
||||
for (let key in form.value) {
|
||||
form.value[key] = ''
|
||||
}
|
||||
form.value.deviceType = '1'
|
||||
runFlag.value = ''
|
||||
}
|
||||
form.value.deviceType = '2'
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交用户表单数据
|
||||
*/
|
||||
const submit = async (flag: boolean) => {
|
||||
loading.value = true
|
||||
if (flag) {
|
||||
form.value.saveOrCheckflag = '1'
|
||||
|
||||
await addRunningDevice(form.value).then(res => {
|
||||
ElMessage.success('保存成功!')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
})
|
||||
} else {
|
||||
formRef.value.validate(async (valid: any) => {
|
||||
if (valid) {
|
||||
form.value.saveOrCheckflag = '2'
|
||||
{
|
||||
if (form.value.id) {
|
||||
await quitRunningDeviceUpdate(form.value)
|
||||
ElMessage.success('重新发起成功')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
} else {
|
||||
await addRunningDevice(form.value)
|
||||
//查询进线数据,避免一直处于loading状态
|
||||
ElMessage.success('申请成功')
|
||||
tableStore.index()
|
||||
dialogVisible.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
await setTimeout(() => {
|
||||
loading.value = false
|
||||
}, 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* 终端类型切换
|
||||
*/
|
||||
|
||||
const changeType = (event: any) => {
|
||||
sourceData.value = lineList.value
|
||||
form.value.deviceId = ''
|
||||
data.value = sourceData.value
|
||||
}
|
||||
const changeDevStatus = async (event: any, flag?: any) => {
|
||||
await getLineDetailData(event).then(res => {
|
||||
//给当前终端赋值初始投运状态
|
||||
// switch (res.data.runFlag) {
|
||||
|
||||
// case '投运':
|
||||
// form.value.devOriginalStatus = '0'
|
||||
// break
|
||||
// case '检修':
|
||||
// form.value.devOriginalStatus = '1'
|
||||
// break
|
||||
// case '停运':
|
||||
// form.value.devOriginalStatus = '2'
|
||||
// break
|
||||
// case '调试':
|
||||
// form.value.devOriginalStatus = '3'
|
||||
// break
|
||||
// default:
|
||||
// form.value.devOriginalStatus = '4'
|
||||
// break
|
||||
// }
|
||||
runFlag.value = runFlagList.filter(item => item.name == res.data.runFlag)[0].id
|
||||
form.value.devOriginalStatus = runFlag.value
|
||||
if (!flag) {
|
||||
form.value.devStatus = ''
|
||||
}
|
||||
runFlagData.value = runFlagList.filter(item => item.name != res.data.runFlag)
|
||||
})
|
||||
}
|
||||
|
||||
defineExpose({ open })
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.el-upload-list__item {
|
||||
transition: none !important;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
min-width: 180px;
|
||||
}
|
||||
</style>
|
||||
324
src/views/pqs/supervise_jb/retire/terminal.vue
Normal file
324
src/views/pqs/supervise_jb/retire/terminal.vue
Normal file
@@ -0,0 +1,324 @@
|
||||
<!--待办事项列表-->
|
||||
<template>
|
||||
<div>
|
||||
<TableHeader date-picker nextFlag theCurrentTime>
|
||||
<template v-slot:select>
|
||||
<el-form-item label="流程状态">
|
||||
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
|
||||
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="搜索">
|
||||
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端" clearable></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template #operation>
|
||||
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
|
||||
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
|
||||
</template>
|
||||
</TableHeader>
|
||||
<!--表格-->
|
||||
<Table ref="tableRef" :checkbox-config="checkboxConfig"></Table>
|
||||
<!--弹框-->
|
||||
<device-quit-popup ref="deviceQuitPopup" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import TableStore from '@/utils/tableStore'
|
||||
import Table from '@/components/table/index.vue'
|
||||
import TableHeader from '@/components/table/header/index.vue'
|
||||
import { onMounted, provide, ref, watch } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import DeviceQuitPopup from '@/views/pqs/supervise/retire/deviceQuitPopup.vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import { ElMessageBox } from 'element-plus/es'
|
||||
import { cancelQuitRunningDevice, getRunningDeviceById } from '@/api/supervision-boot/device/quitRunningDev'
|
||||
import { useAdminInfo } from '@/stores/adminInfo'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
import { deleteQuitRunningDevice } from '@/api/supervision-boot/delete/index'
|
||||
const dictData = useDictData()
|
||||
const statusSelect = dictData.statusSelect()
|
||||
|
||||
//获取登陆用户姓名和部门
|
||||
const adminInfo = useAdminInfo()
|
||||
defineOptions({
|
||||
name: 'supervision/retire'
|
||||
})
|
||||
const { push, options, currentRoute } = useRouter()
|
||||
const flag = ref(false)
|
||||
const deviceQuitPopup = ref()
|
||||
const tableStore = new TableStore({
|
||||
url: '/supervision-boot/quitRunningDevice/list',
|
||||
method: 'POST',
|
||||
publicHeight: 65,
|
||||
column: [
|
||||
{
|
||||
width: '60',
|
||||
type: 'checkbox'
|
||||
},
|
||||
{
|
||||
field: 'index',
|
||||
title: '序号',
|
||||
width: '60',
|
||||
formatter: (row: any) => {
|
||||
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
|
||||
}
|
||||
},
|
||||
{ title: '供电公司', field: 'gdName', minWidth: 130 },
|
||||
{ title: '变电站', field: 'subName', minWidth: 160 },
|
||||
{ title: '终端名称', field: 'deviceName', minWidth: 130 },
|
||||
{ title: '变更原因', field: 'propertyNo', minWidth: 160 },
|
||||
{
|
||||
title: '变更前状态',
|
||||
field: 'devOriginalStatus',
|
||||
minWidth: 130,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'success',
|
||||
1: 'warning',
|
||||
2: 'danger',
|
||||
3: 'warning',
|
||||
4: 'info',
|
||||
null: 'primary'
|
||||
},
|
||||
replaceValue: {
|
||||
0: '运行',
|
||||
1: '检修',
|
||||
2: '停运',
|
||||
3: '调试',
|
||||
4: '退运',
|
||||
null: '/'
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '目标状态',
|
||||
field: 'devStatus',
|
||||
minWidth: 130,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'success',
|
||||
1: 'warning',
|
||||
2: 'danger',
|
||||
3: 'warning',
|
||||
4: 'info',
|
||||
null: 'primary'
|
||||
},
|
||||
replaceValue: {
|
||||
0: '运行',
|
||||
1: '检修',
|
||||
2: '停运',
|
||||
3: '调试',
|
||||
4: '退运',
|
||||
null: '/'
|
||||
}
|
||||
},
|
||||
{
|
||||
field: 'status',
|
||||
title: '流程状态',
|
||||
minWidth: 100,
|
||||
render: 'tag',
|
||||
custom: {
|
||||
0: 'warning',
|
||||
1: 'primary',
|
||||
2: 'success',
|
||||
3: 'danger',
|
||||
4: 'warning'
|
||||
},
|
||||
replaceValue: {
|
||||
0: '待提交审批',
|
||||
1: '审批中',
|
||||
2: '审批通过',
|
||||
3: '审批不通过',
|
||||
4: '已取消'
|
||||
}
|
||||
},
|
||||
{ field: 'createTime', title: '开始时间', minWidth: 170 },
|
||||
{
|
||||
field: 'createBy',
|
||||
title: '填报人',
|
||||
minWidth: 80,
|
||||
formatter: (row: any) => {
|
||||
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
|
||||
}
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
align: 'center',
|
||||
minWidth: '150',
|
||||
fixed: 'right',
|
||||
render: 'buttons',
|
||||
buttons: [
|
||||
{
|
||||
name: 'productSetting',
|
||||
title: '流程详情',
|
||||
type: 'primary',
|
||||
icon: 'el-icon-EditPen',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return !row.processInstanceId
|
||||
},
|
||||
click: row => {
|
||||
flag.value = true
|
||||
handleAudit(row.processInstanceId, row.historyInstanceId)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'edit',
|
||||
title: '编辑',
|
||||
type: 'primary',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
showDisabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || !(row.status == 0)
|
||||
},
|
||||
disabled: row => {
|
||||
return !(row.status == 0)
|
||||
},
|
||||
click: row => {
|
||||
deviceQuitPopup.value.open('编辑', row)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'edit',
|
||||
title: '重新发起',
|
||||
type: 'warning',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
|
||||
},
|
||||
click: row => {
|
||||
deviceQuitPopup.value.open('重新发起', row)
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'cancel',
|
||||
title: '取消',
|
||||
type: 'danger',
|
||||
icon: 'el-icon-Open',
|
||||
render: 'basicButton',
|
||||
disabled: row => {
|
||||
return row.createBy != adminInfo.$state.id || row.status != 1
|
||||
},
|
||||
click: row => {
|
||||
cancelLeave(row)
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
beforeSearchFun: () => {
|
||||
// for (let key in tableStore.table.params) {
|
||||
// if (tableStore.table.params[key] === '') {
|
||||
// delete tableStore.table.params[key]
|
||||
// }
|
||||
// }
|
||||
tableStore.table.params.deviceType = 1
|
||||
}
|
||||
})
|
||||
tableStore.table.params.status = ''
|
||||
tableStore.table.params.searchValue = ''
|
||||
provide('tableStore', tableStore)
|
||||
|
||||
//新增退运终端信息
|
||||
const add = () => {
|
||||
deviceQuitPopup.value.open('新增终端状态变更')
|
||||
}
|
||||
// 禁止点击
|
||||
const checkboxConfig = reactive({
|
||||
checkMethod: ({ row }) => {
|
||||
return adminInfo.roleCode.includes('delete_info')
|
||||
? true
|
||||
: row.createBy == adminInfo.$state.id && row.status == 0
|
||||
}
|
||||
})
|
||||
const deleteEven = () => {
|
||||
if (tableStore.table.selection.length == 0) {
|
||||
ElMessage({
|
||||
type: 'warning',
|
||||
message: '请选择要删除的数据'
|
||||
})
|
||||
} else {
|
||||
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
.then(() => {
|
||||
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
|
||||
ElMessage({
|
||||
type: 'success',
|
||||
message: '删除成功!'
|
||||
})
|
||||
tableStore.index()
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
/** 流程实例详情 */
|
||||
const handleAudit = (instanceId: string, historyInstanceId: string) => {
|
||||
push({
|
||||
name: 'BpmProcessInstanceDetail',
|
||||
state: {
|
||||
id: instanceId,
|
||||
historyInstanceId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/**取消流程操作*/
|
||||
const cancelLeave = async (row: any) => {
|
||||
// 二次确认
|
||||
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputType: 'textarea',
|
||||
inputPattern: /^[\s\S]*.*\S[\s\S]*$/, // 判断非空,且非空格
|
||||
inputErrorMessage: '取消原因不能为空'
|
||||
})
|
||||
// 发起取消
|
||||
let data = {
|
||||
id: row.id,
|
||||
processInstanceId: row.processInstanceId,
|
||||
reason: value
|
||||
}
|
||||
await cancelQuitRunningDevice(data)
|
||||
ElMessage.success('取消成功')
|
||||
// 加载数据
|
||||
tableStore.index()
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 加载数据
|
||||
tableStore.index()
|
||||
})
|
||||
watch(
|
||||
() => currentRoute.value.path,
|
||||
() => {
|
||||
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
|
||||
tableStore.index()
|
||||
flag.value = false
|
||||
}
|
||||
},
|
||||
{
|
||||
deep: true
|
||||
}
|
||||
)
|
||||
|
||||
const props = defineProps({ id: { type: String, default: 'null' } })
|
||||
watch(() => props.id, async (newValue, oldValue) => {
|
||||
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
|
||||
const fullId = newValue.split('@')[0]
|
||||
let nowTime = Date.now()
|
||||
const routeTime = Number(newValue.split('@')[1])
|
||||
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return // 路由时间超过500ms,则不执行
|
||||
await getRunningDeviceById(fullId).then(res => {
|
||||
if (res && res.code == 'A0000') {
|
||||
deviceQuitPopup.value.open('重新发起', res.data)
|
||||
}
|
||||
})
|
||||
}, { immediate: true })
|
||||
</script>
|
||||
Reference in New Issue
Block a user