冀北项目添加表格导出功能 技术监督添加下载模版上传功能

This commit is contained in:
GGJ
2025-03-28 16:05:03 +08:00
parent 76f41e9a24
commit ef04022f14
153 changed files with 4208 additions and 3480 deletions

View File

@@ -2,7 +2,7 @@
<!-- 用户投诉 -->
<!-- 2 有新增 发起 预警单 -->
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template v-slot:select>
<el-form-item label="是否解决">
<el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">
@@ -52,6 +52,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/SupervisionUserComplaint/list',
publicHeight: 65,
method: 'POST',
filename:'用户投诉',
column: [
{
title: '序号',
@@ -199,16 +200,14 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
// tableStore.table.data = [
// {
// userName: '东润开阳堡光伏电站用户',
// userId: '8115771123274',
// complaintContent: '终端频繁重启',
// complaintTime: '2024-05-16'
// }
// ]
}
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.dealState =item.dealState==0?'未解决':item.dealState==1?'已解决':'/'
item.detectionFlag=item.detectionFlag==0?'否':item.detectionFlag==1?'是':'/'
return item
})
}
})
provide('tableStore', tableStore)

View File

@@ -102,7 +102,7 @@ const rules = {
}
const formRef = ref()
const submit = () => {
console.log('🚀 ~ open ~ form.value:', form.value)
formRef.value.validate(valid => {
if (valid) {
loading.value = true

View File

@@ -1,7 +1,7 @@
<template>
<!-- <div>1 监测点信息 发起预告警单 </div> -->
<TableHeader datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template v-slot:select>
<el-form-item label="区域">
<Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea"/>
@@ -62,10 +62,10 @@
</el-form-item> -->
</template>
<template #operation>
<el-button icon="el-icon-Plus" :disabled="flag > 2" type="primary" @click="launch('发起预警单')">
<el-button icon="el-icon-Plus" :disabled="flag != '2'" type="primary" @click="launch('发起预警单')">
发起预警单
</el-button>
<el-button icon="el-icon-Plus" :disabled="flag > 2" type="primary" @click="launch('发起告警单')">
<el-button icon="el-icon-Plus" :disabled="flag != '2'" type="primary" @click="launch('发起告警单')">
发起告警单
</el-button>
</template>
@@ -112,6 +112,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/onlineMonitor/list',
publicHeight: 65,
method: 'POST',
filename:'在线监测',
// isWebPaging:true,
column: [
{title: '', type: 'checkbox', width: 40},
@@ -328,7 +329,7 @@ tableStore.table.params.dataType = '1'
tableStore.table.params.deptId = dictData.state.area[0].id
provide('tableStore', tableStore)
onMounted(() => {
TableHeaderRef.value.setDatePicker([{label: '月', value: 3}])
// TableHeaderRef.value.setDatePicker([{label: '月', value: 3}])
tableStore.index()
setTimeout(() => {

View File

@@ -1,6 +1,6 @@
<template>
<!-- <div> 普测结果 发起预告警单</div> -->
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template v-slot:select>
<el-form-item label="计划名称">
<el-input style="width: 200px" v-model="tableStore.table.params.searchValue" clearable
@@ -53,6 +53,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/surveyTest/pageProblemSurvey',
publicHeight: 65,
method: 'POST',
filename:'计划问题',
column: [
{
title: '序号',
@@ -163,7 +164,14 @@ const tableStore = new TableStore({
],
beforeSearchFun: () => {
tableStore.table.params.currentPage = tableStore.table.params.pageNum
}
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.dealState = item.dealState == 0 ? '未解决' : item.dealState == 1 ? '已解决' : '/'
return item
})
}
})
tableStore.table.params.dealState = ''
tableStore.table.params.searchValue = ''

View File

@@ -1,7 +1,7 @@
<!---试运行列表-->
<template>
<div>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -54,6 +54,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/lineRunTestProblem/pageProblem',
method: 'POST',
publicHeight: 65,
filename:'试运行评估问题',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
@@ -233,7 +234,14 @@ const tableStore = new TableStore({
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.dealState =item.dealState == 0 ? '未解决' :item.dealState == 1 ? '已解决' : '/'
item.testRunState = item.testRunState == 0 ? '待试运行' : item.testRunState == 1 ? '试运行中' : item.testRunState == 2 ? '试运行成功' : item.testRunState == 3 ? '试运行失败' : '待试运行'
return item
})
}
})
tableStore.table.params.status = ''
tableStore.table.params.dealState = ''

View File

@@ -64,7 +64,7 @@
</el-form-item>
<el-form-item for="-" label="关联电站:" :key="key" v-if="form.customSubstationFlag == 1" :prop="dynamicProp">
<el-input v-model="form.substation" placeholder="请输入关联电站"></el-input>
<el-input v-model="form.substation" placeholder="名称格式220kV某某电站"></el-input>
</el-form-item>
<!-- <el-form :model="form" label-width="auto"> -->
<!-- <el-form-item for="-" class="uploadFile" label="普测报告:" prop="fileList">
@@ -104,7 +104,7 @@
<div class="dialog-footer">
<el-button @click="cancelFn">取消</el-button>
<!-- <el-button type="primary" @click="submitFn(true)" :loading="loading">保存</el-button>-->
<el-button type="primary" @click="submitFn(true)" :loading="loading">保存</el-button>
<el-button type="primary" @click="submitFn(false)" :loading="loading">提交审批</el-button>
</div>
</template>
@@ -213,12 +213,12 @@ const treeData = ref()
const loadData = () => {
initDetpStataionTree({ orgId: dictData.state.area[0].id }).then(res => {
treeList.value = res.data
// initDetpStataionTree({ orgId: '02d1b4e1680413eb72f3fa63d46c496c' }).then(res => {
// treeListCgy.value = res.data
setTimeout(() => {
changeArea()
}, 10)
// })
initDetpStataionTree({ orgId: 'a3069759b0b6072c99cf9a7af6c162e9' }).then(res => {
treeListCgy.value = res.data
setTimeout(() => {
changeArea()
}, 10)
})
})
}
@@ -242,7 +242,7 @@ const submitFn = async (flag: boolean) => {
}
addForm.saveOrCheckflag = '1'
await addSurveyPlan(addForm).then(res => {
await addSurveyPlan(addForm).then(res => {
cancelFn()
ElMessage.success('保存成功!')
emit('onsubmit')
@@ -263,7 +263,7 @@ const submitFn = async (flag: boolean) => {
emit('onsubmit')
}).catch(() => { loading.value = false})
} else {
await updateSurveyPlan(addForm).then(res => {
await updateSurveyPlan(addForm).then(res => {
cancelFn()
ElMessage.success('重新发起成功!')
emit('onsubmit')
@@ -283,30 +283,14 @@ const changeArea = () => {
treeList.value.forEach((item: any) => {
if (item.id == form.value.deptId) {
list.push(item)
} else {
if (item.children.filter((v: any) => v.id == form.value.deptId).length == 0) {
item.children.forEach((v: any) => {
list.push(v.children.filter((K: any) => K.id == form.value.deptId)[0])
})
// list.push(item.children.filter((v: any) => {
// return (v.children.filter((k: any) => {
// if( k.id == form.value.deptId){
// return k
// }
// }))
// }))
console.log("🚀 ~ list.push ~ list:", list)
} else {
list.push(item.children.filter((v: any) => v.id == form.value.deptId)[0])
if (item.id != treeListCgy.value[0].id && item.name != '冀北电力有限公司' && item.name != '超高压') {
list.push(...treeListCgy.value)
}
} else {
list.push(item.children.filter((v: any) => v.id == form.value.deptId)[0])
if (form.value.deptId != treeListCgy.value[0].id) {
list.push(...treeListCgy.value)
}
// if (form.value.deptId != treeListCgy.value[0].id) {
// list.push(...treeListCgy.value)
// }
}
})
treeData.value = list

View File

@@ -1,25 +1,39 @@
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template #select>
<el-form-item label="监督类型">
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
<el-option v-for="item in supvTypeOptionList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<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>
</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" />
<!-- 新增 -->
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" :openType="openType" />
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="监督类型">
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
<el-option
v-for="item in supvTypeOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<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>
</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>
<el-button icon="el-icon-Download" type="primary" @click="exportExcelTemplate" :loading="loading">模板下载</el-button>
<el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button>
</template>
</TableHeader>
<Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- 新增 -->
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" :openType="openType" />
<!-- 批量导入 -->
<sensitive-user-popup ref="sensitiveUserPopup" />
</template>
<script setup lang="ts">
import { useAdminInfo } from '@/stores/adminInfo'
@@ -33,12 +47,14 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { cancel, getById } from '@/api/process-boot/generalTest'
import planAdd from './planAdd.vue'
import { useRouter } from 'vue-router'
import SensitiveUserPopup from './sensitiveUserPopup.vue'
import { queryPlan, removeSurvey } from '@/api/process-boot/generalTest'
import { getUserByRoleType } from '@/api/user-boot/user'
import { useDictData } from '@/stores/dictData'
import { deleteSurveyPlan } from '@/api/supervision-boot/delete/index'
import { getUserReportById } from "@/api/supervision-boot/interfere";
import { getUserReportById } from '@/api/supervision-boot/interfere'
import { downloadPlanTemplate } from '@/api/supervision-boot/userReport/form'
const loading = ref(false)
const dictData = useDictData()
const supvTypeOptionList = dictData.getBasicData('supv_type')
const statusSelect = dictData.statusSelect()
@@ -52,285 +68,321 @@ const auditUser = ref('')
const flag = ref(false)
const openType = ref('create')
const tableStore = new TableStore({
url: '/supervision-boot/surveyPlan/surveyPlanPage',
publicHeight: 65,
method: 'POST',
column: [
{
width: '60',
type: 'checkbox'
},
{
title: '序号',
width: 80,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{
field: 'planName',
title: '计划名称',
minWidth: 130
},
{
field: 'supvType',
title: '监督类型',
minWidth: 130,
formatter: (row: any) => {
return supvTypeOptionList.filter(item => item.id === row.cellValue)[0]?.name
}
},
{
field: 'supvObjectName',
minWidth: 130,
title: '监督对象名称'
},
{
field: 'deptName',
minWidth: 130,
title: '负责单位'
},
{
field: 'substation',
title: '变电站',
minWidth: 110,
formatter: (row: any) => {
return row.cellValue
}
},
url: '/supervision-boot/surveyPlan/surveyPlanPage',
publicHeight: 65,
method: 'POST',
filename: '技术监督计划管理',
column: [
{
width: '60',
type: 'checkbox'
},
{
title: '序号',
width: 80,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{
field: 'planName',
title: '计划名称',
minWidth: 130
},
{
field: 'supvType',
title: '监督类型',
minWidth: 130,
formatter: (row: any) => {
return supvTypeOptionList.filter(item => item.id === row.cellValue)[0]?.name
}
},
{
field: 'supvObjectName',
minWidth: 130,
title: '监督对象名称'
},
{
field: 'deptName',
minWidth: 130,
title: '负责单位'
},
{
field: 'substation',
title: '变电站',
minWidth: 110,
formatter: (row: any) => {
return row.cellValue
}
},
{ field: 'planStartTime', minWidth: 130, title: '计划开始时间' },
{ field: 'planEndTime', minWidth: 130, title: '计划结束时间' },
{
field: 'status',
title: '流程状态',
render: 'tag',
minWidth: 80,
custom: {
0: 'warning',
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
0: '待提交审批',
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消'
}
},
{
field: 'createBy',
title: '填报人',
minWidth: 80,
formatter: (row: any) => {
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
{
title: '操作',
minWidth: '180',
fixed: 'right',
render: 'buttons',
buttons: [
{ field: 'planStartTime', minWidth: 130, title: '计划开始时间' },
{ field: 'planEndTime', minWidth: 130, title: '计划结束时间' },
{
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)
}
field: 'status',
title: '流程状态',
render: 'tag',
minWidth: 80,
custom: {
0: 'warning',
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
0: '待提交审批',
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消'
}
},
{
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 => {
planAddRef.value.open('编辑', row.id, false)
}
field: 'createBy',
title: '填报人',
minWidth: 80,
formatter: (row: any) => {
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
{
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)
planAddRef.value.open('重新发起计划', row.id, false)
}
},
{
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)
}
title: '操作',
minWidth: '180',
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 => {
planAddRef.value.open('编辑', row.id, false)
}
},
{
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)
planAddRef.value.open('重新发起计划', row.id, false)
}
},
{
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: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
}
})
const sensitiveUserPopup = ref()
tableStore.table.params.status = ''
tableStore.table.params.supvType = ''
provide('tableStore', tableStore)
// 新增计划
const add = () => {
// title.value = '普测计划新增'
planAddRef.value.open('计划新增')
// title.value = '普测计划新增'
planAddRef.value.open('计划新增')
}
// 禁止点击
const checkboxConfig = reactive({
checkMethod: ({ row }) => {
return adminInfo.roleCode.includes('delete_info')
? true
: row.createBy == adminInfo.$state.id && row.status == 0
}
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(() => {
deleteSurveyPlan(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
})
}
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteSurveyPlan(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
const exportFn = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
queryPlan(form).then(res => {
tableRef.value.getRef().exportData({
filename: '计划', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
queryPlan(form).then(res => {
tableRef.value.getRef().exportData({
filename: '计划', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
})
}
//导出模板
const exportExcelTemplate = async() => {
loading.value = true
await downloadPlanTemplate().then((res: any) => {
let blob = new Blob([res], {
type: 'application/vnd.ms-excel'
})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = '技术监督计划管理模板'
document.body.appendChild(link)
link.click()
link.remove()
})
await setTimeout(() => {
loading.value = false
},0)
}
/**取消流程操作*/
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 cancel(data)
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
// 二次确认
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 cancel(data)
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
}
const handleClose = () => {
dialogVisible.value = false
auditUser.value = ''
dialogVisible.value = false
auditUser.value = ''
}
//批量导入用户数据
const importUserData = () => {
sensitiveUserPopup.value.open('技术监督计划管理')
}
/** 处理审批按钮 */
const handleAudit = (instanceId: string, historyInstanceId: string) => {
push({
name: 'BpmProcessInstanceDetail',
state: {
id: instanceId,
historyInstanceId
}
})
push({
name: 'BpmProcessInstanceDetail',
state: {
id: instanceId,
historyInstanceId
}
})
}
// 取消
onMounted(() => {
tableStore.index()
getUserByRoleType(3).then(res => {
auditList.value = res.data
})
tableStore.index()
getUserByRoleType(3).then(res => {
auditList.value = res.data
})
})
watch(
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
}
},
{
deep: true
}
},
{
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则不执行
nextTick(() => {
planAddRef.value.open('重新发起计划', fullId, false)
})
}, { immediate: true })
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则不执行
nextTick(() => {
planAddRef.value.open('重新发起计划', fullId, false)
})
},
{ immediate: true }
)
</script>
<style scoped lang="scss"></style>

View File

@@ -0,0 +1,184 @@
<template>
<el-dialog
draggable
class="cn-operate-dialog"
v-model="eventDataUploadVisible"
:title="title"
style="width: 415px"
top="25vh"
>
<el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" ref="formRef">
<el-form-item label="数据文件">
<el-upload
v-model:file-list="fileList"
ref="uploadEventData"
:limit="1"
accept=".xls, .xlsx"
:on-exceed="handleExceed"
:auto-upload="false"
:on-change="choose"
>
<template #trigger>
<el-button type="primary">选择数据文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class="dialog-footer">
<el-button @click="eventDataUploadVisible = false">取消</el-button>
<el-button type="primary" @click="submit" :loading="loading">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive, inject } from 'vue'
import TableStore from '@/utils/tableStore'
import { ElMessage } from 'element-plus'
import type { UploadInstance, UploadProps, UploadRawFile, UploadUserFile } from 'element-plus'
import { genFileId } from 'element-plus'
import { importSensitiveUserData, importPlanData } from '@/api/supervision-boot/userReport/form'
const fileList = ref<UploadUserFile[]>([])
const formRef = ref()
const tableStore = inject('tableStore') as TableStore
const eventDataUploadVisible = ref(false)
const title = ref('')
const uploadEventData = ref<UploadInstance>()
// 注意不要和表单ref的命名冲突
const form = reactive({
file: null
})
const loading = ref(false)
//弹出界面,默认选择用户的第一个生产线的第一条进线进行数据导入
const open = async (text: string) => {
title.value = text
resetForm()
form.file = null
fileList.value = []
eventDataUploadVisible.value = true
}
//重置表单内容
const resetForm = () => {
if (formRef.value) {
formRef.value.resetFields()
}
}
/**
* 选择待上传文件
*/
const choose = (e: any) => {
const file = e.raw
if (!isValidFile(file)) {
uploadEventData.value!.clearFiles()
fileList.value = []
return
}
form.file = file
}
const handleExceed: UploadProps['onExceed'] = files => {
uploadEventData.value!.clearFiles()
const file = files[0] as UploadRawFile
file.uid = genFileId()
uploadEventData.value!.handleStart(file)
fileList.value = [{ name: file.name, url: '' }]
}
/**
* 提交用户表单数据
*/
const submit = async () => {
if (form.file) {
formRef.value.validate(async (valid: any) => {
if (valid) {
let data = new FormData()
data.append('file', form.file)
if (title.value === '技术监督计划管理') {
loading.value = true
await importPlanData(data)
.then(res => {
loading.value = false
handleImportResponse(title.value, res)
}).catch(()=> loading.value = false)
.finally(() => {
tableStore.index()
eventDataUploadVisible.value = false
})
} else {
await importSensitiveUserData(data)
.then(res => handleImportResponse(title.value, res))
.finally(() => {
tableStore.index()
eventDataUploadVisible.value = false
})
}
}
})
} else {
ElMessage.error('请选择数据文件')
}
}
async function handleImportResponse(title: any, res: any) {
if (res.type === 'application/json') {
const fileReader = new FileReader()
fileReader.onloadend = () => {
try {
const jsonData = JSON.parse(fileReader.result)
if (jsonData.code === 'A0000') {
ElMessage.success('导入成功')
} else {
ElMessage.error('导入失败,请查看下载附件!')
}
} catch (err) {
console.log(err)
}
}
fileReader.readAsText(res)
} else {
ElMessage.error('导入失败,请查看下载附件!')
let blob = new Blob([res], { type: 'application/vnd.ms-excel' })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.download = '技术监督计划管理失败列表'
document.body.appendChild(link)
link.click()
link.remove()
}
}
/**
* 文件校验函数
*/
const isValidFile = (file: UploadRawFile) => {
const validExtensions = ['.xls', '.xlsx']
const fileExtension = file.name.slice(((file.name.lastIndexOf('.') - 1) >>> 0) + 2)
if (!validExtensions.includes(`.${fileExtension}`)) {
ElMessage.error('文件类型不支持,请选择 .xls 或 .xlsx 文件')
return false
}
return true
}
defineExpose({ open })
</script>
<style scoped>
.el-form-item__content div {
width: 100% !important;
}
</style>

View File

@@ -1,28 +1,36 @@
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template v-slot:select>
<el-form-item label='监督类型'>
<el-select v-model='tableStore.table.params.supvType' clearable placeholder='请选择监督类型'>
<el-option v-for='item in supvTypeOptionList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item label="监督类型">
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
<el-option
v-for="item in supvTypeOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<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-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>
</template>
<template #operation>
<el-button icon='el-icon-Delete' type='primary' @click='deleteEven'>删除</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
</template>
</TableHeader>
<Table ref='tableRef' :checkbox-config='checkboxConfig' />
<Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- 新增 -->
<planTest ref='planTestRef' @onsubmit='tableStore.index()' />
<planTest ref="planTestRef" @onsubmit="tableStore.index()" />
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { ref, onMounted, provide, watch, nextTick } from 'vue'
import { useAdminInfo } from '@/stores/adminInfo'
//获取登陆用户姓名和部门
@@ -54,6 +62,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/surveyTest/surveyTestPage',
publicHeight: 65,
method: 'POST',
filename: '技术监督测试管理',
column: [
{
width: '60',
@@ -213,6 +222,22 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.problemFlag = item.problemFlag == 0 ? '合格' : item.problemFlag == 1 ? '存在问题' : '待测试'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
})
@@ -239,25 +264,19 @@ const deleteEven = () => {
message: '请选择要删除的数据'
})
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteSurveyPlanTest(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
}).then(() => {
deleteSurveyPlanTest(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
const exportFn = () => {
@@ -320,20 +339,24 @@ onMounted(() => {
})
const props = defineProps(['id', 'businessKey'])
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则不执行
nextTick(() => {
if (props.businessKey == '3') {
planTestRef.value.open('编辑', fullId, false)
} else {
planTestRef.value.open('重新发起计划测试', fullId, false)
}
})
}, { immediate: true })
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则不执行
nextTick(() => {
if (props.businessKey == '3') {
planTestRef.value.open('编辑', fullId, false)
} else {
planTestRef.value.open('重新发起计划测试', fullId, false)
}
})
},
{ immediate: true }
)
</script>
<style scoped lang='scss'></style>
<style scoped lang="scss"></style>

View File

@@ -1,876 +0,0 @@
<template>
<div class='default-main' :style="layout">
<div :style="`height:${height}`" class="HomePage">
<div class="HomePage-left ">
<div class="title">
<span>流程进度统计</span>
</div>
<div style="display: flex" class="mt2">
<img src="@/assets/img/FGX.png" />
</div>
<div>
<div class="vcl mt5">
<p v-for="(item, i) in vList" style="line-height: 30px;font-weight: 700;" :style="{
width: i === 0 ? '90px' : i === 5 ? '32px' : 'auto',
flex: i === 0 || i === 5 ? 'none' : '1',
}">
{{ item }}
</p>
</div>
<div v-for="(item, i) in list" class="vcl">
<p style="width: 90px">
{{ item.title }}
</p>
<p class="numOne" style="color: #67c23a;">
{{ item.list[0].numOne }}
</p>
<p class="numOne" style="color: #409eff;">
{{ item.list[1].numOne }}
</p>
<p class="numOne" style="color: #e6a23c;">
{{ item.list[2].numOne }}
</p>
<p class="numOne" style="color: #f56c6c;">
{{ item.list[3].numOne }}
</p>
</div>
</div>
</div>
<div class="HomePage-center">
<div class="title">
<span>电能质量问题</span>
</div>
<div style="display: flex" class="mt2">
<img src="@/assets/img/FGX.png" />
</div>
<div class="segmented-controller">
<div v-for="(segment, index) in segments" :key="index" class="segmented-button"
:class="{ active: selectedIndex === index }" @click="selectSegment(index)">
{{ segment }}
</div>
</div>
<!-- <div class="custom-style">
<el-segmented v-model="value" :options="segments" size="large" />
</div> -->
<MyEchartMap ref="EchartMap" :options="echartMapList" class="map" style="height: 100%;width: 100%;" />
</div>
<div class="HomePage-right" style=" max-width: 450px;">
<div class="title">
<span>工单统计</span>
</div>
<div style="display: flex" class="mt2">
<img src="@/assets/img/FGX.png" />
</div>
<div class="WorkOrder" style="border-bottom: 1px solid #ccc;">
<div class="WorkOrderBox">
<h4>工单转换率</h4>
<div class="WorkContent">
<div class="fontColor">电能质量问题</div>
<div class="fontColor">
<i class="ITop">{{ 100 }}</i>
</div>
<div class="fontColor">工单总数量</div>
<div class="fontColor">
<i class="IBottom">{{ 80 }}</i>
</div>
</div>
<div ref="Workontent" class="Workontent" style="flex: 1; width: 100%; height: 100%">
<MyEChart style="width: 100%; height: 100%" :options="incidentCharts"></MyEChart>
</div>
</div>
<div class="WorkOrderBox">
<h4>工单处置率</h4>
<div class="WorkContent">
<div class="fontColor">工单总数量</div>
<div class="fontColor">
<i class="ITop">{{ 80 }}</i>
</div>
<div class="fontColor">已处理工单数量</div>
<div class="fontColor">
<i class="IBottom">{{ 60 }}</i>
</div>
</div>
<div ref="Workontents" class="Workontent" style="flex: 1; width: 100%; height: 100%">
<MyEChart style="width: 100%; height: 100%" :options="incidentCharts1"></MyEChart>
</div>
</div>
</div>
</div>
</div>
<task :height="height1" />
</div>
</template>
<script setup lang='ts'>
import { ref, reactive, onMounted } from 'vue'
import { mainHeight } from '@/utils/layout'
import MyEchartMap from '@/components/echarts/MyEchartMap.vue'
import MyEChart from '@/components/echarts/MyEchart.vue'
import task from '@/views/system/bpm/task/index.vue'
import { useDictData } from '@/stores/dictData'
const layout = mainHeight(25)
const height = mainHeight(50, 2).height
const height1 = mainHeight(410, 2).height
const dictData = useDictData()
const echartMapList: any = ref({})
const EchartMap = ref()
const incidentCharts = ref({})
const incidentCharts1 = ref({})
const color = ref(['', ' #67c23a', '#409eff', '#e6a23c', ' #f56c6c'])
const segments = ref(['总数', '技术监督计划', '用户投诉', '在线监测', '试运行'])
const selectedIndex = ref(0)
const vList = ['', '总数', '审批中', '待提交审批', '审批不通过',]
const list: any = ref([
{
title: '干扰源未建档',
color: ['#000', '#bd3124'],
list: [
{
numOne: 20,
},
{
numOne: 3,
},
{
numOne: 1,
},
{
numOne: 0,
},
]
},
{
title: '干扰源已建档',
color: ['#000', '#2dcd28'],
list: [
{
numOne: 10,
},
{
numOne: 3,
},
{
numOne: 0,
},
{
numOne: 1,
},
]
},
{
title: '终端',
color: ['#000', '#2dcd28', '#bd3124'],
list: [
{
numOne: 8,
},
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
},
]
},
{
title: '入网检测',
color: ['#000', '#2dcd28', '#bd3124'],
list: [
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
},
]
},
{
title: '退运',
color: ['#000', '#2dcd28', '#bd3124'],
list: [
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
},
]
},
{
title: '告警单',
color: ['#000', '#2dcd28', '#bd3124'],
list: [
{
numOne: 10,
},
{
numOne: 3,
},
{
numOne: 0,
},
{
numOne: 0,
},
]
},
{
title: '预警单',
color: ['#000', '#2dcd28', '#bd3124'],
list: [
{
numOne: 5,
},
{
numOne: 2,
},
{
numOne: 0,
},
{
numOne: 0,
},
{
numOne: 0,
}
]
},
])
const url: any = [
new URL(`@/assets/img/ZS.png`, import.meta.url),
new URL(`@/assets/img/SHTG.png`, import.meta.url),
new URL(`@/assets/img/SPZ.png`, import.meta.url),
new URL(`@/assets/img/DTJ.png`, import.meta.url),
new URL(`@/assets/img/YQX.png`, import.meta.url),
new URL(`@/assets/img/SHBTG.png`, import.meta.url)
]
const eliminate = (name: string) => {
echartMapList.value.options.series = []
EchartMap.value.GetEchar(name)
}
const selectSegment = (index) => {
selectedIndex.value = index;
}
onMounted(() => {
EchartMap.value.GetEchar('海南')
// EchartMap.value.GetEchar(dictData.state.area[0].areaName)
echartMapList.value = {
name: '',
title: {
text: ''
},
tooltip: {
trigger: 'item',
formatter: function (params) {
if (typeof (params.value)[2] == "undefined") {
return params.name + ' : ' + params.value;
} else {
return params.name + ' : ' + params.value[2];
}
}
},
legend: {
show: false
},
options: {
series: [
// {
// type: "map",
// geoIndex: 0,
// }
{
type: 'scatter',
coordinateSystem: 'geo',
symbol: 'pin',
symbolSize: [50, 50],
label: {
normal: {
show: true,
textStyle: {
color: '#fff',
fontSize: 9,
},
formatter(value) {
return value.data.value[2]
}
}
},
itemStyle: {
normal: {
color: '#f56c6c', //标志颜色
}
},
data: [
{
"name": "三亚",
"value": [
109.497863, 18.397384,
3
]
},
{
"name": "海口",
"value": [
110.440419, 19.886042,
6
]
},
{
"name": "文昌",
"value": [
110.754493, 19.688807,
4
]
},
],
showEffectOn: 'render',
rippleEffect: {
brushType: 'stroke'
},
hoverAnimation: true,
zlevel: 1
}
]
}
}
incidentCharts.value = {
title: {
text: '转换率',
bottom: '3%',
left: 'center',
textStyle: {
fontSize: 16
}
},
xAxis: {
show: false
},
yAxis: {
show: false
},
toolbox: {
feature: null
},
options: {
dataZoom: null,
series: [
{
//第二个球的填充
type: 'liquidFill',
radius: '75%',
center: ['50%', '45%'], //中心点
color: [
{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: '#2aa1e3'
}
],
globalCoord: false
}
],
data: [0.8, 0.8], // data个数代表波浪数
backgroundStyle: {
borderWidth: 1,
color: '#f7f8fc'
},
label: {
normal: {
formatter: () => {
return (0.8 * 100).toFixed(2) + '%'
},
textStyle: {
fontSize: 20,
color: '#000'
}
}
},
outline: {
// show: false
borderDistance: 0,
itemStyle: {
borderWidth: 2,
borderColor: '#fff'
}
}
}
]
}
}
incidentCharts1.value = {
title: {
text: '处置率',
bottom: '3%',
left: 'center',
textStyle: {
fontSize: 16
}
},
xAxis: {
show: false
},
yAxis: {
show: false
},
toolbox: {
feature: null
},
options: {
dataZoom: null,
series: [
{
//第二个球的填充
type: 'liquidFill',
radius: '75%',
center: ['50%', '45%'], //中心点
color: [
{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: '#2aa1e3'
}
],
globalCoord: false
}
],
data: [0.75, 0.75], // data个数代表波浪数
backgroundStyle: {
borderWidth: 1,
color: '#f7f8fc'
},
label: {
normal: {
formatter: () => {
return (0.75 * 100).toFixed(2) + '%'
},
textStyle: {
fontSize: 20,
color: '#000'
}
}
},
outline: {
// show: false
borderDistance: 0,
itemStyle: {
borderWidth: 2,
borderColor: '#fff'
}
}
}
]
}
}
})
</script>
<style lang="scss" scoped>
.HomePage {
display: flex;
.HomePage-left,
.HomePage-right {
padding: 10px;
flex: 1.2;
margin: 10px 10px 0;
box-shadow: var(--el-box-shadow-light);
position: relative
}
.HomePage-center {
margin: 10px 0 0;
padding: 10px;
flex: 1.5;
overflow: hidden;
position: relative;
box-shadow: var(--el-box-shadow-light);
// margin: 0 20px;
}
// .main_title {
// width: 180px;
// height: 35px;
// line-height: 33px;
// background-color: var(--el-color-primary);
// border-radius: 18px;
// position: absolute;
// top: 0px;
// // left: 50%;
// z-index: 999;
// left: 0px;
// // margin-left: -90px;
// color: #fff;
// font-size: 18px;
// font-weight: 600;
// box-sizing: border-box;
// padding-left: 45px;
// img {
// position: absolute;
// top: 8px;
// left: 20px;
// }
// }
}
.monitor {
display: flex;
.monitorBox {
flex: 1;
}
.monitorTop {
font-size: 16px;
text-align: center;
font-weight: 600;
}
.monitorCenter {
display: flex;
margin: 10px 5px 0;
height: 120px;
.Icon {
font-size: 16px;
line-height: 16px;
}
}
.left {
display: flex;
justify-content: center;
align-items: center;
font-size: 18px;
text-align: center;
// flex: 1;
width: 80px;
span {
font-weight: 600;
color: #32a5a6;
}
}
.right {
display: flex;
justify-content: space-around;
flex: 1.5;
flex-wrap: wrap;
flex-direction: column;
div {
display: flex;
justify-content: space-between;
padding: 0 20px;
width: 100%;
line-height: 18px;
span {
font-weight: 600;
color: #55bcb4;
}
}
}
}
.title {
// height: ;
// display: flex;
// justify-content: space-between;
font-size: 18px;
line-height: 23px;
padding-left: 5px;
width: 100%;
font-weight: 550;
display: flex;
align-items: center;
span:nth-child(1) {
cursor: pointer;
}
.info {
font-weight: normal;
display: flex;
font-size: 12px;
cursor: pointer;
color: #757575;
}
img {
height: 1.2rem;
width: 1.2rem;
margin-right: 5px;
}
}
:deep(.el-segmented__item) {
padding: 0px 20px;
}
.custom-style .el-segmented {
position: absolute;
top: 45px;
left: 50%;
transform: translate(-50%, 0);
z-index: 99;
--el-segmented-item-selected-color: #fff;
--el-segmented-item-selected-bg-color: var(--el-color-primary);
--el-border-radius-base: 5px;
font-size: 15px;
padding: 0 10px;
}
.evaluationData {
height: 33px;
margin: 10px 30px;
width: 90%;
box-shadow: 1px 1px 1px 1px #e8e3e3;
display: flex;
font-size: 18px;
line-height: 35px;
img {
height: 25px;
width: 25px;
margin: 4px 20px 0px 30px;
}
}
.vcl {
display: flex;
border-bottom: 2px solid #fff;
border-bottom: 1px solid rgb(204, 204, 204);
border-radius: 5px;
font-size: 14px;
p {
text-align: center;
margin: 6px;
line-height: 35px;
}
.numOne {
flex: 1;
font-weight: 550;
cursor: pointer;
font-size: 18px;
}
}
// 工单 转换率
.WorkOrder {
height: 47%;
width: 100%;
padding: 0px 10px;
.WorkOrderBox {
padding: 5px;
width: 100%;
height: 100%;
display: flex;
align-items: center;
position: relative;
h4 {
position: absolute;
top: 10px;
left: 0px;
}
.WorkContent {
font-size: 14px;
flex: 1;
display: flex;
flex-direction: column;
div {
display: inline-block;
// flex: 1;
text-align: center;
line-height: 30px;
.ITop {
font-size: 20px;
color: #54a092;
font-weight: 600;
}
.IBottom {
font-size: 20px;
color: #63d763;
font-weight: 600;
}
}
}
}
}
.segmented-controller {
width: 110px;
border-radius: 5px;
overflow: hidden;
background-color: #fff;
position: absolute;
bottom: 10px;
z-index: 99;
box-shadow: var(--el-box-shadow-light);
}
.segmented-button {
flex: 1;
padding: 10px;
text-align: center;
cursor: pointer;
user-select: none;
border-bottom: 1px solid #ccc;
transition: background-color 0.3s;
}
.segmented-button.active {
background-color: var(--el-color-primary);
color: white;
}
.segmented-button:not(.active):hover {
background-color: #e0e0e0;
}
</style>

View File

@@ -1,14 +1,18 @@
<template>
<div>
<TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<TableHeader datePicker nextFlag theCurrentTime showTimeAll showExport ref='TableHeaderRef'>
<template #select>
<el-form-item label='项目名称'>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' clearable maxlength="32"
show-word-limit></el-input>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称'></el-input>
</el-form-item>
<el-form-item label='所在地市'>
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'>
<el-option v-for='item in areaOptionList' :key='item.id' :label='item.name' :value='item.name'></el-option>
<el-option
v-for='item in areaOptionList'
:key='item.id'
:label='item.name'
:value='item.name'
></el-option>
</el-select>
</el-form-item>
</template>
@@ -16,39 +20,51 @@
<!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> -->
</template>
</TableHeader>
<Table ref='tableRef' />
<Table ref='tableRef'/>
</div>
<el-dialog title='干扰源用户详细信息' v-if='dialogVisible' v-model='dialogVisible' width='65%' :append-to-body='true'
:close-on-click-modal='false' draggable>
<el-dialog
title='干扰源用户详细信息'
v-if='dialogVisible'
v-model='dialogVisible'
width='65%'
:append-to-body='true'
:close-on-click-modal='false'
draggable
>
<BpmUserReportDetail :id='interId' ref='detailsRef'></BpmUserReportDetail>
</el-dialog>
<!-- 查看详情 detail 新增/修改 create-->
<addForm ref='addForms' @onSubmit='tableStore.index()' :update='update' :normalizedControl='true' openType='create'>
</addForm>
<addForm
ref='addForms'
@onSubmit='tableStore.index()'
:update='update'
:normalizedControl='true'
openType='create'
></addForm>
</template>
<script setup lang='ts'>
defineOptions({
name: 'supervision/interferenceUserTable'
})
import { ref, onMounted, provide, watch } from 'vue'
import {ref, onMounted, provide, watch} from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import {useDictData} from '@/stores/dictData'
import addForm from '@/views/pqs/supervise/interfere/components/undocumented/addForm.vue'
import { getUserReportById, getUserReportByFangAnId } from '@/api/supervision-boot/interfere'
import {getUserReportById, getUserReportByFangAnId} from '@/api/supervision-boot/interfere'
import BpmUserReportDetail from '../../components/undocumented/detail.vue'
import { useAdminInfo } from '@/stores/adminInfo'
import { ElMessage, ElMessageBox } from 'element-plus'
import { userReportRenewalCancel } from '@/api/process-boot/generalTest'
import {useAdminInfo} from '@/stores/adminInfo'
import {ElMessage, ElMessageBox} from 'element-plus'
import {userReportRenewalCancel} from '@/api/process-boot/generalTest'
const dictData = useDictData()
const flag = ref(false)
const areaOptionList = dictData
.getBasicData('jibei_area')
.filter(item => !(item.name == '超高压' || item.name == '风光储'))
.getBasicData('jibei_area')
.filter(item => !(item.name == '超高压' || item.name == '风光储'))
const statusSelect = dictData.statusSelect()
//获取登陆用户姓名和部门
const adminInfo = useAdminInfo()
@@ -57,31 +73,30 @@ const jb_dky = ref(false)
const update = ref(false)
const addForms = ref()
jb_pl.value =
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_pl'
}).length != 0
? true
: false
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_pl'
}).length != 0
? true
: false
jb_dky.value =
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_dky'
}).length != 0
? true
: false
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_dky'
}).length != 0
? true
: false
const { push, options, currentRoute } = useRouter()
const {push, options, currentRoute} = useRouter()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getNormalUserPage',
publicHeight: 65,
method: 'POST',
filename:'常态化干扰源用户管理',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
{title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'city', title: '所在地市', minWidth: 80 },
}},
{field: 'city', title: '所在地市', minWidth: 80},
{
field: 'substation',
title: '厂站名称',
@@ -91,7 +106,7 @@ const tableStore = new TableStore({
return row.cellValue
}
},
{ field: 'projectName', title: '项目名称', minWidth: 170 },
{field: 'projectName', title: '项目名称', minWidth: 170},
{
field: 'userType',
title: '用户性质',
@@ -101,7 +116,7 @@ const tableStore = new TableStore({
return getUserTypeName(userType)
}
},
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130},
{
field: 'userStatus',
title: '用户状态',
@@ -200,8 +215,8 @@ const tableStore = new TableStore({
render: 'basicButton',
showDisabled: row => {
return (
row.createBy != adminInfo.$state.id ||
!(row.status == 0 || row.status == 2 || row.status == null)
row.createBy != adminInfo.$state.id ||
!(row.status == 0 || row.status == 2 || row.status == null)
)
},
disabled: row => {
@@ -227,7 +242,7 @@ const tableStore = new TableStore({
return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
},
click: row => {
addForms.value.open({ title: '重新发起', row: row })
addForms.value.open({title: '重新发起', row: row})
}
},
{
@@ -290,7 +305,24 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName
}
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.userStatus =
item.userStatus == 0 ? '可研' : item.userStatus == 1 ? '建设' : item.userStatus == 2 ? '运行' : '退运'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
})
tableStore.table.params.city = ''
@@ -324,7 +356,7 @@ const handleAudit = (instanceId: string, historyInstanceId: string) => {
/**取消流程操作*/
const cancelLeave = async (row: any) => {
// 二次确认
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
const {value} = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputType: 'textarea',
@@ -353,10 +385,10 @@ const toFangAn = (row: any, typeNo: number) => {
if (res.data.userType == '0' || res.data.userType == '1') {
needGovernance.value = res.data.userReportProjectPO?.needGovernance
} else if (
res.data.userType == '2' ||
res.data.userType == '3' ||
res.data.userType == '4' ||
res.data.userType == '5'
res.data.userType == '2' ||
res.data.userType == '3' ||
res.data.userType == '4' ||
res.data.userType == '5'
) {
needGovernance.value = res.data.userReportSubstationPO?.needGovernance
} else if (res.data.userType == '6') {
@@ -383,10 +415,10 @@ const toFangAnById = (id: string, typeNo: number) => {
userId = res.data.userReportProjectPO?.id
needGovernance.value = res.data.userReportProjectPO?.needGovernance
} else if (
res.data.userType == '2' ||
res.data.userType == '3' ||
res.data.userType == '4' ||
res.data.userType == '5'
res.data.userType == '2' ||
res.data.userType == '3' ||
res.data.userType == '4' ||
res.data.userType == '5'
) {
userId = res.data.userReportSubstationPO?.id
needGovernance.value = res.data.userReportSubstationPO?.needGovernance
@@ -433,16 +465,16 @@ const getUserTypeName = (userType: any) => {
return '新建电网工程'
}
watch(
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
}
},
{
deep: true
}
},
{
deep: true
}
)
//初始进来时如果有id就直接打开重新发起
@@ -477,7 +509,7 @@ watch(() => props.id, async (newValue, oldValue) => {
})
}
}, { immediate: true })
}, {immediate: true})
</script>

View File

@@ -57,8 +57,8 @@
{{ detailData.evaluationConclusion }}
</el-descriptions-item>
<el-descriptions-item :label="detailData.userType == '4' || detailData.userType == '5'
? '非线性设备类型: '
: '非线性负荷类型:'
? '非线性设备类型: '
: '非线性负荷类型:'
" v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
@@ -286,72 +286,94 @@
</el-descriptions-item>
</el-descriptions>
<el-descriptions :column="1" border style="flex: 1" title="变更后">
<el-descriptions-item label="填报人">
<el-descriptions-item label="填报人" :label-class-name="changeTheField?.reporter ? 'my-content' : ''"
:class-name="changeTheField?.reporter ? 'my-content' : ''">
{{ detailData1.reporter }}
</el-descriptions-item>
<el-descriptions-item label="填报日期">
<el-descriptions-item label="填报日期" :label-class-name="changeTheField?.reportDate ? 'my-content' : ''"
:class-name="changeTheField?.reportDate ? 'my-content' : ''">
{{ formatDate(detailData1.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label="填报部门">
<el-descriptions-item label="填报部门" :label-class-name="changeTheField?.orgName ? 'my-content' : ''"
:class-name="changeTheField?.orgName ? 'my-content' : ''">
{{ detailData1.orgName }}
</el-descriptions-item>
<el-descriptions-item label="工程预期投产日期">
<el-descriptions-item label="工程预期投产日期"
:label-class-name="changeTheField?.expectedProductionDate ? 'my-content' : ''"
:class-name="changeTheField?.expectedProductionDate ? 'my-content' : ''">
{{ formatDate(detailData1.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label="用户性质">
<el-descriptions-item label="用户性质" :label-class-name="changeTheField?.userType ? 'my-content' : ''"
:class-name="changeTheField?.userType ? 'my-content' : ''">
{{
userTypeList.find(item => {
return item.value == detailData1.userType
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label="所在地市">
<el-descriptions-item label="所在地市" :label-class-name="changeTheField?.city ? 'my-content' : ''"
:class-name="changeTheField?.city ? 'my-content' : ''">
{{ detailData1.city }}
</el-descriptions-item>
<el-descriptions-item label="归口管理部门">
<el-descriptions-item label="归口管理部门"
:label-class-name="changeTheField?.responsibleDepartment ? 'my-content' : ''"
:class-name="changeTheField?.responsibleDepartment ? 'my-content' : ''">
{{ detailData1.responsibleDepartment }}
</el-descriptions-item>
<el-descriptions-item label="用户状态">
<el-descriptions-item label="用户状态" :label-class-name="changeTheField?.userStatus ? 'my-content' : ''"
:class-name="changeTheField?.userStatus ? 'my-content' : ''">
{{
userStateList.find(item => {
return item.value == detailData1.userStatus
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label="变电站">
<el-descriptions-item label="变电站" :label-class-name="changeTheField?.substation ? 'my-content' : ''"
:class-name="changeTheField?.substation ? 'my-content' : ''">
{{ detailData1.substation }}
</el-descriptions-item>
<el-descriptions-item label="工程名">
<el-descriptions-item label="工程名" :label-class-name="changeTheField?.projectName ? 'my-content' : ''"
:class-name="changeTheField?.projectName ? 'my-content' : ''">
{{ detailData1.projectName }}
</el-descriptions-item>
<el-descriptions-item label="电压等级">
<el-descriptions-item label="电压等级" :label-class-name="changeTheField?.voltageLevel ? 'my-content' : ''"
:class-name="changeTheField?.voltageLevel ? 'my-content' : ''">
{{
voltageLevelList.find(item => {
return item.id == detailData1.voltageLevel
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="非线性终端类型" v-if="detailData1.userType == 0 || detailData1.userType == 1">
<el-descriptions-item label="非线性终端类型" v-if="detailData1.userType == 0 || detailData1.userType == 1"
:label-class-name="changeTheField?.nonlinearDeviceType ? 'my-content' : ''"
:class-name="changeTheField?.nonlinearDeviceType ? 'my-content' : ''">
{{ proviteData1.nonlinearDeviceType ? proviteData1.nonlinearDeviceType : '-' }}
</el-descriptions-item>
<el-descriptions-item label="预测评估单位">
<el-descriptions-item label="预测评估单位"
:label-class-name="changeTheField?.evaluationDept ? 'my-content' : ''"
:class-name="changeTheField?.evaluationDept ? 'my-content' : ''">
{{ detailData1.evaluationDept }}
</el-descriptions-item>
<el-descriptions-item label="预测评估结论" :span="2">
<el-descriptions-item label="预测评估结论" :span="2"
:label-class-name="changeTheField?.evaluationConclusion ? 'my-content' : ''"
:class-name="changeTheField?.evaluationConclusion ? 'my-content' : ''">
{{ detailData1.evaluationConclusion }}
</el-descriptions-item>
<el-descriptions-item :label="detailData1.userType == '4' || detailData1.userType == '5'
? '非线性设备类型: '
: '非线性负荷类型:'
? '非线性设备类型: '
: '非线性负荷类型:'
" v-if="
detailData1.userType == '2' ||
detailData1.userType == '3' ||
detailData1.userType == '4' ||
detailData1.userType == '5'
">
" :label-class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''"
:class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''">
{{ proviteData1.nonlinearLoadType }}
</el-descriptions-item>
<el-descriptions-item label="是否需要治理">
<el-descriptions-item label="是否需要治理"
:label-class-name="changeTheField?.needGovernance ? 'my-content' : ''"
:class-name="changeTheField?.needGovernance ? 'my-content' : ''">
<span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.needGovernance == 0 ? '否' : '是' }}
</span>
@@ -365,7 +387,9 @@
</span>
<span v-if="detailData1.userType == 6">{{ proviteData1.needGovernance == 0 ? '否' : '是' }}</span>
</el-descriptions-item>
<el-descriptions-item label="是否开展背景测试">
<el-descriptions-item label="是否开展背景测试"
:label-class-name="changeTheField?.backgroundTestPerformed ? 'my-content' : ''"
:class-name="changeTheField?.backgroundTestPerformed ? 'my-content' : ''">
<span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span>
@@ -381,12 +405,16 @@
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span>
</el-descriptions-item>
<el-descriptions-item label="是否开展抗扰度测试" v-if="detailData1.userType == 6">
<el-descriptions-item label="是否开展抗扰度测试" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.antiInterferenceTest ? 'my-content' : ''"
:class-name="changeTheField?.antiInterferenceTest ? 'my-content' : ''">
<span>
{{ proviteData1.antiInterferenceTest == 0 ? '否' : '是' }}
</span>
</el-descriptions-item>
<el-descriptions-item label="用户协议容量MVA" v-if="detailData1.userType == 0 || detailData1.userType == 1">
<el-descriptions-item label="用户协议容量MVA" v-if="detailData1.userType == 0 || detailData1.userType == 1"
:label-class-name="changeTheField?.agreementCapacity ? 'my-content' : ''"
:class-name="changeTheField?.agreementCapacity ? 'my-content' : ''">
{{ proviteData1.agreementCapacity }}
</el-descriptions-item>
<el-descriptions-item label="PCC供电设备容量MVA" v-if="
@@ -394,7 +422,8 @@
detailData1.userType == '3' ||
detailData1.userType == '4' ||
detailData1.userType == '5'
">
" :label-class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''"
:class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''">
{{ proviteData1.pccEquipmentCapacity }}
</el-descriptions-item>
<el-descriptions-item label="基准短路容量MVA" v-if="
@@ -402,7 +431,8 @@
detailData1.userType == '3' ||
detailData1.userType == '4' ||
detailData1.userType == '5'
">
" :label-class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''"
:class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1.baseShortCircuitCapacity }}
</el-descriptions-item>
<el-descriptions-item label="系统最小短路容量MVA" v-if="
@@ -410,7 +440,8 @@
detailData1.userType == '3' ||
detailData1.userType == '4' ||
detailData1.userType == '5'
">
" :label-class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''"
:class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1?.minShortCircuitCapacity }}
</el-descriptions-item>
<el-descriptions-item label="用户用电协议容量MVA" v-if="
@@ -418,61 +449,84 @@
detailData1.userType == '3' ||
detailData1.userType == '4' ||
detailData1.userType == '5'
">
" :label-class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''"
:class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''">
{{ proviteData1?.userAgreementCapacity }}
</el-descriptions-item>
<el-descriptions-item label="PCC点" v-if="detailData1.userType != 0 && detailData1.userType != 1">
<el-descriptions-item label="PCC点" v-if="detailData1.userType != 0 && detailData1.userType != 1"
:label-class-name="changeTheField?.pccPoint ? 'my-content' : ''"
:class-name="changeTheField?.pccPoint ? 'my-content' : ''">
{{ proviteData1?.pccPoint }}
</el-descriptions-item>
<el-descriptions-item label="评估类型" v-if="detailData1.userType != 0 && detailData1.userType != 1">
<el-descriptions-item label="评估类型" v-if="detailData1.userType != 0 && detailData1.userType != 1"
:label-class-name="changeTheField?.evaluationType ? 'my-content' : ''"
:class-name="changeTheField?.evaluationType ? 'my-content' : ''">
{{
evaluationTypeList.find(item => {
return item.id == proviteData1?.evaluationType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="预测评估评审单位" v-if="detailData1.userType != 0 && detailData1.userType != 1">
<el-descriptions-item label="预测评估评审单位" v-if="detailData1.userType != 0 && detailData1.userType != 1"
:label-class-name="changeTheField?.evaluationChekDept ? 'my-content' : ''"
:class-name="changeTheField?.evaluationChekDept ? 'my-content' : ''">
{{ proviteData1?.evaluationChekDept }}
</el-descriptions-item>
<el-descriptions-item label="行业" v-if="detailData1.userType == 6">
<el-descriptions-item label="行业" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.industry ? 'my-content' : ''"
:class-name="changeTheField?.industry ? 'my-content' : ''">
{{
industryList.find(item => {
return item.id == proviteData1.industry
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="敏感终端名称" v-if="detailData1.userType == 6">
<el-descriptions-item label="敏感终端名称" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.deviceName ? 'my-content' : ''"
:class-name="changeTheField?.deviceName ? 'my-content' : ''">
{{ proviteData1.deviceName }}
</el-descriptions-item>
<!-- <el-descriptions-item label="供电电源数量" v-if="detailData1.userType == 6">-->
<!-- {{ proviteData1.powerSupplyCount }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="供电电源情况" v-if="detailData1.userType == 6">
<el-descriptions-item label="供电电源情况" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.powerSupplyInfo ? 'my-content' : ''"
:class-name="changeTheField?.powerSupplyInfo ? 'my-content' : ''">
{{
powerSupplyInfoOptionList.find(item => {
return item.id == proviteData1.powerSupplyInfo
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="供电电源" :span="2" v-if="detailData1.userType == 6">
<el-descriptions-item label="供电电源" :span="2" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.powerSupply ? 'my-content' : ''"
:class-name="changeTheField?.powerSupply ? 'my-content' : ''">
{{ proviteData1.powerSupply }}
</el-descriptions-item>
<el-descriptions-item label="负荷级别" v-if="detailData1.userType == 6">
<el-descriptions-item label="负荷级别" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.loadLevel ? 'my-content' : ''"
:class-name="changeTheField?.loadLevel ? 'my-content' : ''">
{{
loadLevelOptionList.find(item => {
return item.id == proviteData1.loadLevel
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="敏感电能质量指标" v-if="detailData1.userType == 6">
<el-descriptions-item label="敏感电能质量指标" v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.energyQualityIndex ? 'my-content' : ''"
:class-name="changeTheField?.energyQualityIndex ? 'my-content' : ''">
{{
energyQualityIndexList.find(item => {
return item.id == proviteData1.energyQualityIndex
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="可研报告">
<span v-if="detailData1.userType == 0 || detailData1.userType == 1">
<el-descriptions-item label="可研报告"
:label-class-name="changeTheField?.feasibilityReport ? 'my-content' : ''"
:class-name="changeTheField?.feasibilityReport ? 'my-content' : ''">
<span v-if="detailData1.userType == 0 || detailData1.userType == 1"
:label-class-name="changeTheField?.feasibilityReport ? 'my-content' : ''"
:class-name="changeTheField?.feasibilityReport ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon>
@@ -493,7 +547,9 @@
{{ proviteData1.feasibilityReport?.name }}
</a>
</span>
<span v-if="detailData1.userType == 6">
<span v-if="detailData1.userType == 6"
:label-class-name="changeTheField?.feasibilityReport ? 'my-content' : ''"
:class-name="changeTheField?.feasibilityReport ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon>
@@ -502,7 +558,9 @@
</a>
</span>
</el-descriptions-item>
<el-descriptions-item label="项目初步设计说明书">
<el-descriptions-item label="项目初步设计说明书"
:label-class-name="changeTheField?.preliminaryDesignDescription ? 'my-content' : ''"
:class-name="changeTheField?.preliminaryDesignDescription ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.preliminaryDesignDescription?.name">
<View @click="openFile(proviteData1?.preliminaryDesignDescription?.name)" />
</el-icon>
@@ -511,7 +569,9 @@
{{ proviteData1?.preliminaryDesignDescription?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="预测评估报告">
<el-descriptions-item label="预测评估报告"
:label-class-name="changeTheField?.predictionEvaluationReport ? 'my-content' : ''"
:class-name="changeTheField?.predictionEvaluationReport ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.predictionEvaluationReport?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReport?.name)" />
</el-icon>
@@ -519,7 +579,9 @@
{{ proviteData1?.predictionEvaluationReport?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="预测评估评审意见报告">
<el-descriptions-item label="预测评估评审意见报告"
:label-class-name="changeTheField?.predictionEvaluationReviewOpinions ? 'my-content' : ''"
:class-name="changeTheField?.predictionEvaluationReviewOpinions ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.predictionEvaluationReviewOpinions?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReviewOpinions?.name)" />
</el-icon>
@@ -527,7 +589,9 @@
{{ proviteData1?.predictionEvaluationReviewOpinions?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="用户接入变电站主接线示意图" v-if="detailData.userType != 0 && detailData.userType != 1">
<el-descriptions-item label="用户接入变电站主接线示意图" v-if="detailData.userType != 0 && detailData.userType != 1"
:label-class-name="changeTheField?.substationMainWiringDiagram ? 'my-content' : ''"
:class-name="changeTheField?.substationMainWiringDiagram ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.substationMainWiringDiagram?.name">
<View @click="openFile(proviteData1?.substationMainWiringDiagram?.name)" />
</el-icon>
@@ -535,7 +599,9 @@
{{ proviteData1?.substationMainWiringDiagram?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="主要敏感终端清单" v-if="detailData.userType == 6">
<el-descriptions-item label="主要敏感终端清单" v-if="detailData.userType == 6"
:label-class-name="changeTheField?.sensitiveDevices ? 'my-content' : ''"
:class-name="changeTheField?.sensitiveDevices ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.sensitiveDevices?.name">
<View @click="openFile(proviteData1?.sensitiveDevices?.name)" />
</el-icon>
@@ -543,7 +609,9 @@
{{ proviteData1?.sensitiveDevices?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="抗扰度测试报告" v-if="detailData.userType == 6">
<el-descriptions-item label="抗扰度测试报告" v-if="detailData.userType == 6"
:label-class-name="changeTheField?.antiInterferenceReport ? 'my-content' : ''"
:class-name="changeTheField?.antiInterferenceReport ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.antiInterferenceReport?.name">
<View @click="openFile(proviteData1?.antiInterferenceReport?.name)" />
</el-icon>
@@ -551,7 +619,9 @@
{{ proviteData1?.antiInterferenceReport?.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="背景电能质量测试报告" v-if="detailData.userType == 6">
<el-descriptions-item label="背景电能质量测试报告" v-if="detailData.userType == 6"
:label-class-name="changeTheField?.powerQualityReport ? 'my-content' : ''"
:class-name="changeTheField?.powerQualityReport ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.powerQualityReport?.name">
<View @click="openFile(proviteData1?.powerQualityReport?.name)" />
</el-icon>
@@ -560,7 +630,9 @@
</a>
</el-descriptions-item>
<el-descriptions-item label="其他附件"
v-if="proviteData1?.additionalAttachments && proviteData1?.additionalAttachments?.url">
v-if="proviteData1?.additionalAttachments && proviteData1?.additionalAttachments?.url"
:label-class-name="changeTheField?.additionalAttachments ? 'my-content' : ''"
:class-name="changeTheField?.additionalAttachments ? 'my-content' : ''">
<el-icon class="elView" v-if="proviteData1?.additionalAttachments?.name">
<View @click="openFile(proviteData1?.additionalAttachments?.name)" />
</el-icon>
@@ -652,6 +724,7 @@ const userStateList = reactive([
value: '3'
}
])
const dictData = useDictData()
//字典获取所在地市
const areaOptionList = dictData.getBasicData('jibei_area')
@@ -667,23 +740,80 @@ const evaluationTypeList = dictData.getBasicData('Evaluation_Type')
const evaluationDeptList = dictData.getBasicData('evaluation_dept')
const loadLevelOptionList = dictData.getBasicData('load_level')
const powerSupplyInfoOptionList = dictData.getBasicData('supply_condition')
const changeTheField: any = ref({})
/** 获得数据 */
const getInfo = async () => {
detailLoading.value = true
let obj1: any = {}
let obj2: any = {}
try {
await getUserReportUpdateById(props.id || queryId).then(res => {
detailData1.value = res.data.userReportMessageJson
obj1 = JSON.parse(JSON.stringify(res.data.userReportMessageJson))
detailData1.value = JSON.parse(JSON.stringify(res.data.userReportMessageJson))
getProviteData1()
})
await getUserReportById(props.id || queryId).then(res => {
detailData.value = res.data
obj2 = JSON.parse(JSON.stringify(res.data))
detailData.value = JSON.parse(JSON.stringify(res.data))
getProviteData()
})
} finally {
detailLoading.value = false
changeTheField.value = compareObjects({
...obj1, ...obj1.userReportProjectPO, ...obj1.userReportSensitivePO, ...obj1.userReportSubstationPO
}, { ...obj2, ...obj2.userReportProjectPO, ...obj2.userReportSensitivePO, ...obj2.userReportSubstationPO })
}
}
const compareObjects = (obj1: any, obj2: any) => {
const differences: any = {};
for (const key in obj1) {
if (obj1.hasOwnProperty(key)) {
if (obj1[key] !== obj2[key]) {
differences[key] = { obj1: obj1[key], obj2: obj2[key] };
}
}
}
for (const key in obj2) {
if (obj2.hasOwnProperty(key) && !obj1.hasOwnProperty(key)) {
differences[key] = { obj1: undefined, obj2: obj2[key] };
}
}
return differences;
}
// const compareObjects = (obj1: any, obj2: any) => {
// const differences: any = {};
// function findDifferences(o1, o2, path = '') {
// for (const key in o1) {
// if (o1.hasOwnProperty(key)) {
// const newPath = path ? `${path}.${key}` : key;
// if (typeof o1[key] === 'object' && o1[key] !== null && typeof o2[key] === 'object' && o2[key] !== null) {
// findDifferences(o1[key], o2[key], newPath);
// } else if (o1[key] !== o2[key]) {
// differences[newPath] = { obj1: o1[key], obj2: o2[key] };
// }
// }
// }
// for (const key in o2) {
// if (o2.hasOwnProperty(key) && !o1.hasOwnProperty(key)) {
// const newPath = path ? `${path}.${key}` : key;
// differences[newPath] = { obj1: undefined, obj2: o2[key] };
// }
// }
// }
// findDifferences(obj1, obj2);
// return differences;
// }
const proviteData = ref()
const proviteData1 = ref()
@@ -1001,3 +1131,8 @@ onMounted(() => {
margin-right: 10px;
}
</style>
<style scoped>
:deep(.my-content) {
background: var(--el-color-success-light-7) !important;
}
</style>

View File

@@ -16,26 +16,37 @@
</el-select>
</el-form-item>
</template>
<template #operation>
<template #operation>
<el-button icon='' type='primary' @click='toGoNet()'>{{ titleButton }}</el-button>
<el-button style='margin-left: 50px' :icon='Back' @click='go(-1)'>返回</el-button>
</template>
</TableHeader> -->
</TableHeader> -->
<div class="header_btn">
<el-button v-if="bussType == 0 && !(jb_pl || jb_dky)" icon="" type="primary" @click="toGoNet()">
{{ titleButton }}
</el-button>
<el-button v-if="bussType == 1 && needGovernance != '0' && !(jb_pl || jb_dky)" icon="" type="primary"
@click="toGoNet()">
<el-button
v-if="bussType == 1 && needGovernance != '0' && !(jb_pl || jb_dky)"
icon=""
type="primary"
@click="toGoNet()"
>
{{ titleButton }}
</el-button>
<el-button style="margin-left: 50px" :icon="Back" @click="go(-1)">返回</el-button>
</div>
<Table ref="tableRef" />
<Table ref="tableRef"/>
<addForm v-if="dialogVisible" ref="addForms" :id="bussId" :bussType="bussType" :title="titleButton1"
openType="detail" @onSubmit="tableStore.index()"></addForm>
<addForm
v-if="dialogVisible"
ref="addForms"
:id="bussId"
:bussType="bussType"
:title="titleButton1"
openType="detail"
@onSubmit="tableStore.index()"
></addForm>
</div>
</template>
@@ -44,20 +55,20 @@ defineOptions({
name: 'ProgramReview'
})
import { ref, onMounted, provide, nextTick, onUnmounted } from 'vue'
import {ref, onMounted, provide, nextTick, onUnmounted} from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import { cancel, userReportGoNetById } from '@/api/supervision-boot/interfere/index'
import { useDictData } from '@/stores/dictData'
import {cancel, userReportGoNetById} from '@/api/supervision-boot/interfere/index'
import {useDictData} from '@/stores/dictData'
import addForm from './addForm.vue'
import { useRouter, useRoute } from 'vue-router'
import { Back } from '@element-plus/icons-vue'
import { useAdminInfo } from '@/stores/adminInfo'
import {useRouter, useRoute} from 'vue-router'
import {Back} from '@element-plus/icons-vue'
import {useAdminInfo} from '@/stores/adminInfo'
const { go, currentRoute, push } = useRouter()
const { query } = useRoute() // 查询参数
import { ElMessage } from 'element-plus'
import { ElMessageBox } from 'element-plus/es'
const {go, currentRoute, push} = useRouter()
const {query} = useRoute() // 查询参数
import {ElMessage} from 'element-plus'
import {ElMessageBox} from 'element-plus/es'
const needGovernance = query.needGovernance as unknown as string // 从 URL 传递过来的 是否需要治理
const dictData = useDictData()
@@ -66,28 +77,26 @@ const adminInfo = useAdminInfo()
const jb_pl = ref(false)
const jb_dky = ref(false)
jb_pl.value =
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_pl'
}).length != 0
? true
: false
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_pl'
}).length != 0
? true
: false
jb_dky.value =
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_dky'
}).length != 0
? true
: false
adminInfo.$state.roleCode.filter(item => {
return item == 'jb_dky'
}).length != 0
? true
: false
const tableStore = new TableStore({
url: '/supervision-boot/userReportNormal/userReportGoNetPage',
method: 'POST',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
{title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'projectName', title: '用户名称', minWidth: 170 },
}},
{field: 'projectName', title: '用户名称', minWidth: 170},
{
field: 'userType',
title: '用户性质',
@@ -97,8 +106,8 @@ const tableStore = new TableStore({
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所在地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{field: 'city', title: '所在地市', minWidth: 80},
{field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130},
{
field: 'userStatus',
title: '用户状态',
@@ -117,7 +126,7 @@ const tableStore = new TableStore({
3: '退运'
}
},
{ field: 'substation', title: '厂站名称', minWidth: 100 },
{field: 'substation', title: '厂站名称', minWidth: 100},
{
field: 'status',
title: '流程状态',
@@ -146,7 +155,7 @@ const tableStore = new TableStore({
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
{ field: 'createTime', title: '创建时间', minWidth: 100 },
{field: 'createTime', title: '创建时间', minWidth: 100},
{
title: '操作',
minWidth: 180,
@@ -254,7 +263,7 @@ onMounted(async () => {
document.addEventListener('visibilitychange', handleVisibilityChange)
if (query.fangAnId) {
//根据id查询待编辑的数据
await userReportGoNetById({ id: query.fangAnId }).then(res => {
await userReportGoNetById({id: query.fangAnId}).then(res => {
if (res && res.code == 'A0000') {
dialogVisible.value = true
titleButton1.value = '重新发起'
@@ -274,7 +283,7 @@ onUnmounted(() => {
/**取消流程操作*/
const cancelLeave = async (row: any) => {
// 二次确认
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
const {value} = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputType: 'textarea',

View File

@@ -1,307 +1,303 @@
<template>
<el-dialog v-model='dialogFormVisible' :title='title' width='65%' :append-to-body='true' :before-close='close'
:close-on-click-modal='false' draggable>
<el-dialog v-model="dialogFormVisible" :title="title" width="65%" :append-to-body="true" :before-close="close"
:close-on-click-modal="false" draggable>
<!-- 用户档案录入 新建1 -->
<el-form :model='form' class='form-two' :validate-on-rule-change='false' :rules='rules' :scroll-to-error='true'
ref='ruleFormRef' label-width='auto'>
<el-form-item for='-' label='填报人:' prop='reporter'>
<el-input v-model.trim='form.reporter' autocomplete='off' :disabled='true' placeholder='请输入填报人' />
<el-form :model="form" class="form-two" :validate-on-rule-change="false" :rules="rules" :scroll-to-error="true"
ref="ruleFormRef" label-width="auto">
<el-form-item for="-" label="填报人:" prop="reporter">
<el-input v-model="form.reporter" autocomplete="off" :disabled="true" placeholder="请输入填报人" />
</el-form-item>
<el-form-item for='-' label='填报日期:' prop='reportDate'>
<el-date-picker :disabled='true' style='width: 100%' v-model='form.reportDate' type='date'
placeholder='请选择填报日期' />
<el-form-item for="-" label="填报日期:" prop="reportDate">
<el-date-picker :disabled="true" style="width: 100%" v-model="form.reportDate" type="date"
placeholder="请选择填报日期" />
</el-form-item>
<el-form-item for='-' label='填报部门:' prop='orgId'>
<el-input v-model.trim='form.orgId' :disabled='true' autocomplete='off' />
<el-form-item for="-" label="填报部门:" prop="orgId">
<el-input v-model="form.orgId" :disabled="true" autocomplete="off" />
</el-form-item>
<el-form-item for='-' label='工程预期投产日期:' prop='expectedProductionDate'>
<el-date-picker style='width: 100%' v-model='form.expectedProductionDate' type='date'
format='YYYY-MM-DD' value-format='YYYY-MM-DD' :disabled-date='disabledDate'
placeholder='请选择工程预期投产日期' />
<el-form-item for="-" label="工程预期投产日期:" prop="expectedProductionDate">
<el-date-picker style="width: 100%" v-model="form.expectedProductionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" :disabled-date="disabledDate"
placeholder="请选择工程预期投产日期" />
</el-form-item>
<el-form-item for='-' label='用户性质:' prop='userType'>
<el-form-item for="-" label="用户性质:" prop="userType">
<!-- :disabled="resendId != '' && title != '编辑'" -->
<el-select v-model='form.userType' placeholder='请选择用户性质'>
<el-option v-for='(item, index) in userTypeList' :label='item.label' :value='item.value'
:key='index' />
<el-select v-model="form.userType" placeholder="请选择用户性质">
<el-option v-for="(item, index) in userTypeList" :label="item.label" :value="item.value"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='所在地市:' prop='city'>
<el-select v-model='form.city' clearable placeholder='请选择所在地市'>
<el-option v-for='item in areaOptionList' :key='item.id' :label='item.name'
:value='item.name'></el-option>
<el-form-item for="-" label="所在地市:" prop="city">
<el-select v-model="form.city" clearable placeholder="请选择所在地市">
<el-option v-for="item in areaOptionList" :key="item.id" :label="item.name"
:value="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='归口管理部门:' prop='responsibleDepartment'>
<el-input v-model.trim='form.responsibleDepartment' autocomplete='off' placeholder='请输入归口管理部门'
maxlength='32' show-word-limit />
<el-form-item for="-" label="归口管理部门:" prop="responsibleDepartment">
<el-input v-model="form.responsibleDepartment" autocomplete="off" placeholder="请输入归口管理部门" />
</el-form-item>
<el-form-item for='-' label='项目名称:' prop='projectName'>
<el-input v-model.trim='form.projectName' autocomplete='off' placeholder='请输入项目名称' maxlength='64'
show-word-limit />
<el-form-item for="-" label="项目名称:" prop="projectName">
<el-input v-model="form.projectName" autocomplete="off" placeholder="请输入项目名称" />
</el-form-item>
<el-form-item for='-' label='用户状态:' prop='userStatus'>
<el-select v-model='form.userStatus' placeholder='请选择用户状态'>
<el-option v-for='(item, index) in userStateList' :label='item.label' :value='item.value'
:disabled='item.disabled' :key='index' />
<el-form-item for="-" label="用户状态:" prop="userStatus">
<el-select v-model="form.userStatus" placeholder="请选择用户状态">
<el-option v-for="(item, index) in userStateList" :label="item.label" :value="item.value"
:disabled="item.disabled" :key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='厂站名称:' prop='substation'>
<el-input v-model.trim='form.substation' autocomplete='off' placeholder='请输入厂站名称' maxlength='64'
show-word-limit />
<el-form-item for="-" label="厂站名称:" prop="substation">
<el-input v-model="form.substation" autocomplete="off" placeholder="请输入厂站名称" />
</el-form-item>
<el-form-item for='-' v-if="form.userType == '0' || form.userType == '1'" label='用户协议容量:'
prop='agreementCapacity'>
<el-input v-model.trim='form.agreementCapacity' oninput="value=value.replace(/[^\-?\d.]/g,'')
<el-form-item for="-" v-if="form.userType == '0' || form.userType == '1'" label="用户协议容量:"
prop="agreementCapacity">
<el-input v-model="form.agreementCapacity" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" autocomplete='off' placeholder='请输入用户协议容量' maxlength="6"
show-word-limit>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" autocomplete="off" placeholder="请输入用户协议容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' v-if="form.userType == '0' || form.userType == '1'" label='非线性终端类型:'
prop='nonlinearDeviceType'>
<el-tree-select accordion ref='treeRef' :default-expand-all='false' show-checkbox check-strictly
:highlight-current='true' readonly node-key='id' :props='defaultProps'
v-model='form.nonlinearDeviceType' :data='nonlinearDeviceTypeList' :render-after-expand='false' />
<el-form-item for="-" v-if="form.userType == '0' || form.userType == '1'" label="非线性终端类型:"
prop="nonlinearDeviceType">
<el-tree-select accordion ref="treeRef" :default-expand-all="false" show-checkbox check-strictly
:highlight-current="true" readonly node-key="id" :props="defaultProps"
v-model="form.nonlinearDeviceType" :data="nonlinearDeviceTypeList" :render-after-expand="false" />
</el-form-item>
<el-form-item for='-' label='电压等级:' prop='voltageLevel'>
<el-select v-model='form.voltageLevel' placeholder='请选择电压等级' node-key='id'>
<el-option v-for='(item, index) in voltageLevelList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" label="电压等级:" prop="voltageLevel">
<el-select v-model="form.voltageLevel" placeholder="请选择电压等级" node-key="id">
<el-option v-for="(item, index) in voltageLevelList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='预测评估单位:' prop='evaluationDept'>
<el-select v-model='form.evaluationDept' allow-create filterable placeholder='请选择预测评估单位'>
<el-option v-for='(item, index) in evaluationDeptList' :label='item.name' :value='item.name'
:key='index' />
<el-form-item for="-" label="预测评估单位:" prop="evaluationDept">
<el-select v-model="form.evaluationDept" allow-create filterable placeholder="请选择预测评估单位">
<el-option v-for="(item, index) in evaluationDeptList" :label="item.name" :value="item.name"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='是否需要治理:' prop='needGovernance'>
<el-radio-group v-model='form.needGovernance'>
<el-radio :value='1'></el-radio>
<el-radio :value='0'></el-radio>
<el-form-item for="-" label="是否需要治理:" prop="needGovernance">
<el-radio-group v-model="form.needGovernance">
<el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' label='是否开展背景测试:' prop='backgroundTestPerformed'>
<el-radio-group v-model='form.backgroundTestPerformed'>
<el-radio :value='1'></el-radio>
<el-radio :value='0'></el-radio>
<el-form-item for="-" label="是否开展背景测试:" prop="backgroundTestPerformed">
<el-radio-group v-model="form.backgroundTestPerformed">
<el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label='关联终端' prop='devId' v-if="props.openType != 'create'">
<el-select v-model='form.devId' filterable placeholder='请选择关联终端' @change='changeDevId'>
<el-option v-for='(item, index) in devIdList' :label='item.devName' :value='item.devId'
:key='index' />
<el-form-item label="关联终端" prop="devId" v-if="props.openType != 'create'">
<el-select v-model="form.devId" filterable placeholder="请选择关联终端" @change="changeDevId">
<el-option v-for="(item, index) in devIdList" :label="item.devName" :value="item.devId"
:key="index" />
</el-select>
</el-form-item>
<el-form-item label='关联监测点' prop='lineId' v-if="props.openType != 'create'">
<el-select v-model='form.lineId' placeholder='请选择关联监测点'>
<el-option v-for='(item, index) in lineIdList' :label='item.lineName' :value='item.lineId'
:key='index' />
<el-form-item label="关联监测点" prop="lineId" v-if="props.openType != 'create'">
<el-select v-model="form.lineId" placeholder="请选择关联监测点">
<el-option v-for="(item, index) in lineIdList" :label="item.lineName" :value="item.lineId"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' v-if="form.userType != '0' && form.userType != '1'" label='评估类型:'
prop='evaluationType'>
<el-select v-model='form.evaluationType' placeholder='请选择评估类型'>
<el-option v-for='(item, index) in evaluationTypeList' :key='index' :label='item.name'
:value='item.id' />
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="评估类型:"
prop="evaluationType">
<el-select v-model="form.evaluationType" placeholder="请选择评估类型">
<el-option v-for="(item, index) in evaluationTypeList" :key="index" :label="item.name"
:value="item.id" />
</el-select>
</el-form-item>
<el-form-item for='-' v-if="form.userType != '0' && form.userType != '1'" label='PCC点' prop='pccPoint'>
<el-input v-model.trim='form.pccPoint' autocomplete='off' placeholder='请输入PCC点' />
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="PCC点" prop="pccPoint">
<el-input v-model="form.pccPoint" autocomplete="off" placeholder="请输入PCC点" />
</el-form-item>
<el-form-item for='-'
<el-form-item for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
label='基准短路容量:' prop='baseShortCircuitCapacity'>
<el-input v-model.trim='form.baseShortCircuitCapacity' oninput="value=value.replace(/[^\-?\d.]/g,'')
label="基准短路容量:" prop="baseShortCircuitCapacity">
<el-input v-model="form.baseShortCircuitCapacity" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入基准短路容量'>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入基准短路容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-'
<el-form-item for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
label='系统最小短路容量:' prop='minShortCircuitCapacity'>
<el-input v-model.trim='form.minShortCircuitCapacity' oninput="value=value.replace(/[^\-?\d.]/g,'')
label="系统最小短路容量:" prop="minShortCircuitCapacity">
<el-input v-model="form.minShortCircuitCapacity" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" autocomplete='off' placeholder='请选择系统最小短路容量'>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" autocomplete="off" placeholder="请选择系统最小短路容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-'
<el-form-item for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
label='PCC供电设备容量' prop='pccEquipmentCapacity'>
<el-input v-model.trim='form.pccEquipmentCapacity' oninput="value=value.replace(/[^\-?\d.]/g,'')
label="PCC供电设备容量" prop="pccEquipmentCapacity">
<el-input v-model="form.pccEquipmentCapacity" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入PCC供电设备容量'>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入PCC供电设备容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-'
<el-form-item for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
label='用户用电协议容量:' prop='userAgreementCapacity'>
<el-input v-model.trim='form.userAgreementCapacity' autocomplete='off' oninput="value=value.replace(/[^\-?\d.]/g,'')
label="用户用电协议容量:" prop="userAgreementCapacity">
<el-input v-model="form.userAgreementCapacity" autocomplete="off" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入用户用电协议容量'>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入用户用电协议容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6'" label='行业:' prop='industry'>
<el-select v-model='form.industry' placeholder='请选择行业'>
<el-option v-for='(item, index) in industryList' :label='item.name' :value='item.id' :key='index' />
<el-form-item for="-" v-if="form.userType == '6'" label="行业:" prop="industry">
<el-select v-model="form.industry" placeholder="请选择行业">
<el-option v-for="(item, index) in industryList" :label="item.name" :value="item.id" :key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6'" label='敏感终端名称:' prop='deviceName'>
<el-input v-model.trim='form.deviceName' autocomplete='off' placeholder='请输入敏感终端名称' />
<el-form-item for="-" v-if="form.userType == '6'" label="敏感终端名称:" prop="deviceName">
<el-input v-model="form.deviceName" autocomplete="off" placeholder="请输入敏感终端名称" />
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6'" label='供电电源数量:' prop='powerSupplyCount'>
<el-input-number style='width: 100%' v-model='form.powerSupplyCount' :min='0' placeholder='请输入供电电源数量' />
<el-form-item for="-" v-if="form.userType == '6'" label="供电电源数量:" prop="powerSupplyCount">
<el-input-number style="width: 100%" v-model="form.powerSupplyCount" :min="0" placeholder="请输入供电电源数量" />
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6'" label='敏感电能质量指标:' prop='energyQualityIndex'>
<el-select v-model='form.energyQualityIndex' multiple collapse-tags collapse-tags-tooltip
placeholder='请选择敏感电能质量指标'>
<el-option v-for='(item, index) in energyQualityIndexList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" v-if="form.userType == '6'" label="敏感电能质量指标:" prop="energyQualityIndex">
<el-select v-model="form.energyQualityIndex" multiple collapse-tags collapse-tags-tooltip
placeholder="请选择敏感电能质量指标">
<el-option v-for="(item, index) in energyQualityIndexList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-'
<el-form-item for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
:label="form.userType == '4' || form.userType == '5' ? '非线性设备类型: ' : '非线性负荷类型:'"
prop='nonlinearLoadType'>
<el-tree-select accordion ref='treeRef' :default-expand-all='false' show-checkbox check-strictly
:highlight-current='true' readonly node-key='id' :props='defaultProps' filterable
v-model='form.nonlinearLoadType' :data='nonlinearDeviceTypeList' :render-after-expand='false'
placeholder='请选择' />
prop="nonlinearLoadType">
<el-tree-select accordion ref="treeRef" :default-expand-all="false" show-checkbox check-strictly
:highlight-current="true" readonly node-key="id" :props="defaultProps" filterable
v-model="form.nonlinearLoadType" :data="nonlinearDeviceTypeList" :render-after-expand="false"
placeholder="请选择" />
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6'" label='是否开展抗扰度测试:' prop='antiInterferenceTest'>
<el-radio-group v-model='form.antiInterferenceTest'>
<el-radio value='1'></el-radio>
<el-radio value='0'></el-radio>
<el-form-item for="-" v-if="form.userType == '6'" label="是否开展抗扰度测试:" prop="antiInterferenceTest">
<el-radio-group v-model="form.antiInterferenceTest">
<el-radio value="1"></el-radio>
<el-radio value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6' && isInterferencemanagement" label='负荷级别:'
prop='loadLevel'>
<el-select v-model='form.loadLevel' collapse-tags collapse-tags-tooltip placeholder='请选择负荷级别'>
<el-option v-for='(item, index) in loadLevelOptionList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" v-if="form.userType == '6' && isInterferencemanagement" label="负荷级别:"
prop="loadLevel">
<el-select v-model="form.loadLevel" collapse-tags collapse-tags-tooltip placeholder="请选择负荷级别">
<el-option v-for="(item, index) in loadLevelOptionList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' v-if="form.userType == '6' && isInterferencemanagement" label='供电电源情况:'
prop='powerSupplyInfo'>
<el-select v-model='form.powerSupplyInfo' collapse-tags collapse-tags-tooltip placeholder='请选择供电电源情况'>
<el-option v-for='(item, index) in powerSupplyInfoOptionList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" v-if="form.userType == '6' && isInterferencemanagement" label="供电电源情况:"
prop="powerSupplyInfo">
<el-select v-model="form.powerSupplyInfo" collapse-tags collapse-tags-tooltip placeholder="请选择供电电源情况">
<el-option v-for="(item, index) in powerSupplyInfoOptionList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' v-if="form.userType != '0' && form.userType != '1'" label='预测评估评审单位:'
prop='evaluationChekDept'>
<el-input v-model.trim='form.evaluationChekDept' autocomplete='off' placeholder='请输入预测评估评审单位' />
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="预测评估评审单位:"
prop="evaluationChekDept">
<el-input v-model="form.evaluationChekDept" autocomplete="off" placeholder="请输入预测评估评审单位" />
</el-form-item>
<el-form-item for='-' label='预测评估结论:' prop='evaluationConclusion' style='width: 100%'>
<el-input type='textarea' v-model.trim='form.evaluationConclusion' autocomplete='off'
placeholder='请输入预测评估结论' maxlength='300' show-word-limit />
<el-form-item for="-" label="预测评估结论:" prop="evaluationConclusion" style="width: 100%">
<el-input type="textarea" v-model="form.evaluationConclusion" autocomplete="off"
placeholder="请输入预测评估结论" />
</el-form-item>
<el-form-item class='uploadFile' for='-' label='可研报告:' prop='feasibilityReport'>
<el-upload v-model:file-list='form.feasibilityReport' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="可研报告:" prop="feasibilityReport">
<el-upload v-model:file-list="form.feasibilityReport" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('feasibilityReport')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' label='项目初步设计说明书:' prop='preliminaryDesignDescription'>
<el-upload v-model:file-list='form.preliminaryDesignDescription' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="项目初步设计说明书:" prop="preliminaryDesignDescription">
<el-upload v-model:file-list="form.preliminaryDesignDescription" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('preliminaryDesignDescription')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' label='预测评估报告:' prop='predictionEvaluationReport'>
<el-upload v-model:file-list='form.predictionEvaluationReport' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="预测评估报告:" prop="predictionEvaluationReport">
<el-upload v-model:file-list="form.predictionEvaluationReport" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('predictionEvaluationReport')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' label='预测评估评审意见报告:' prop='predictionEvaluationReviewOpinions'>
<el-upload v-model:file-list='form.predictionEvaluationReviewOpinions' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="预测评估评审意见报告:" prop="predictionEvaluationReviewOpinions">
<el-upload v-model:file-list="form.predictionEvaluationReviewOpinions" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('predictionEvaluationReviewOpinions')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' label='其他附件:' prop='additionalAttachments'>
<el-upload v-model:file-list='form.additionalAttachments' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="其他附件:" prop="additionalAttachments">
<el-upload v-model:file-list="form.additionalAttachments" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('additionalAttachments')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' class='uploadFile' v-if="form.userType != '0' && form.userType != '1'"
label='用户接入变电站主接线示意图:' prop='substationMainWiringDiagram'>
<el-upload v-model:file-list='form.substationMainWiringDiagram' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item for="-" class="uploadFile" v-if="form.userType != '0' && form.userType != '1'"
label="用户接入变电站主接线示意图:" prop="substationMainWiringDiagram">
<el-upload v-model:file-list="form.substationMainWiringDiagram" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('substationMainWiringDiagram')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' label='主要敏感终端清单:' v-if="form.userType == '6'"
prop='sensitiveDevices'>
<el-upload v-model:file-list='form.sensitiveDevices' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" label="主要敏感终端清单:" v-if="form.userType == '6'"
prop="sensitiveDevices">
<el-upload v-model:file-list="form.sensitiveDevices" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('sensitiveDevices')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' v-if="form.userType == '6'" label='抗扰度测试报告:'
prop='antiInterferenceReport'>
<el-upload v-model:file-list='form.antiInterferenceReport' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" v-if="form.userType == '6'" label="抗扰度测试报告:"
prop="antiInterferenceReport">
<el-upload v-model:file-list="form.antiInterferenceReport" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('antiInterferenceReport')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item class='uploadFile' for='-' v-if="form.userType == '6'" label='背景电能质量测试报告:'
prop='powerQualityReport'>
<el-upload v-model:file-list='form.powerQualityReport' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-change='choose' :auto-upload='false' :on-remove='removeFile'
<el-form-item class="uploadFile" for="-" v-if="form.userType == '6'" label="背景电能质量测试报告:"
prop="powerQualityReport">
<el-upload v-model:file-list="form.powerQualityReport" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-change="choose" :auto-upload="false" :on-remove="removeFile"
:on-progress="uploadFileName('powerQualityReport')">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<addUpload ref='addUploadRef' v-if="props.openType == 'sourcesOfInterference'" />
<addUpload ref="addUploadRef" v-if="props.openType == 'sourcesOfInterference'" />
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button @click='close()'>取消</el-button>
<el-button type='primary' @click='confirmForm(true)' :loading='loading'>保存</el-button>
<el-button type='primary' v-if='props.submissionControl' @click='confirmForm(false)' :loading='loading'>
<div class="dialog-footer">
<el-button @click="close()">取消</el-button>
<el-button type="primary" @click="confirmForm(true)" :loading="loading">保存</el-button>
<el-button type="primary" v-if="props.submissionControl" @click="confirmForm(false)" :loading="loading">
提交审批
</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang='ts' setup>
<script lang="ts" setup>
import { ref, onMounted, reactive, defineExpose, defineProps, defineEmits, watch, onUnmounted } from 'vue'
// import { upload, insertTerminal, updateTerminal } from '@/api/process-boot/terminal'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
@@ -322,7 +318,6 @@ import {
import { getUserReportUpdateById } from '@/api/supervision-boot/userReport/form'
import addUpload from './addUpload.vue'
import { useRoute } from 'vue-router'
const route = useRoute()
const isInterferencemanagement: any = ref(false)
if (route.path.includes('interferencemanagement')) {
@@ -623,8 +618,7 @@ const subForm: any = ref({
substationMainWiringDiagram: [] //用户接入变电站主接线示意图地址
}
})
// 特殊字符正则表达式
const specialCharRegex = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/
//定义校验规则
const rules = ref({
reporter: [{ required: true, message: '请输入填报人', trigger: 'blur' }],
@@ -633,58 +627,16 @@ const rules = ref({
expectedProductionDate: [{ required: true, message: '请选择工程预期投产日期', trigger: 'change' }],
userType: [{ required: true, message: '清选择用户性质', trigger: 'change' }],
city: [{ required: true, message: '请选择所在地市', trigger: 'change' }],
responsibleDepartment: [{ required: true, message: '请输入归口管理部门', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}],
responsibleDepartment: [{ required: true, message: '请输入归口管理部门', trigger: 'blur' }],
userStatus: [{ required: true, message: '请选择用户状态', trigger: 'change' }],
projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}],
substation: [{ required: true, message: '请输入厂站名称', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}],
projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
substation: [{ required: true, message: '请输入变电站', trigger: 'blur' }],
voltageLevel: [{ required: true, message: '请选择电压等级', trigger: 'change' }],
evaluationDept: [{ required: true, message: '请选择预测评估单位', trigger: 'change' }],
evaluationConclusion: [{ required: true, message: '请输入预测评估结论', trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}],
evaluationConclusion: [{ required: true, message: '请输入预测评估结论', trigger: 'blur' }],
devId: [{ required: true, message: '请选择关联终端', trigger: 'change' }],
lineId: [{ required: true, message: '请选择关联监测点', trigger: 'change' }],
agreementCapacity: [
{ required: true, message: '请选择用户协议容量', trigger: 'blur' }
],
agreementCapacity: [{ required: true, message: '请选择用户协议容量', trigger: 'blur' }],
nonlinearDeviceType: [{ required: true, message: '请选择非线性终端类型', trigger: 'change' }],
needGovernance: [{ required: true, message: '请选择是否需要治理', trigger: 'change' }],
backgroundTestPerformed: [{ required: true, message: '请选择是否开展背景测试', trigger: 'change' }],
@@ -832,8 +784,6 @@ watch(
deep: true
}
)
const resendId = ref('')
const status = ref('')
const open = async (row: any) => {
@@ -869,7 +819,6 @@ const open = async (row: any) => {
})
}, 10)
}
async function handleResponse(data: any) {
// userType logic is commented out; if needed, implement accordingly
if (data.userReportProjectPO) {
@@ -935,8 +884,7 @@ const close = () => {
emits('onSubmit')
resetForm()
}
onMounted(() => {
})
onMounted(() => { })
// 上传报告
const uploadRef = ref()
@@ -1259,8 +1207,8 @@ const confirmForm = async (flag: boolean) => {
resetForm()
close()
}).catch(() => {
loading.value = false
})
loading.value = false
})
} else {
confirmFormData.id = resendId.value
if (controFlag.value) confirmFormData.dataType = 1
@@ -1278,8 +1226,8 @@ const confirmForm = async (flag: boolean) => {
resetForm()
close()
}).catch(() => {
loading.value = false
})
loading.value = false
})
} else {
await resend(confirmFormData).then(res => {
ElMessage({
@@ -1290,8 +1238,8 @@ const confirmForm = async (flag: boolean) => {
resetForm()
close()
}).catch(() => {
loading.value = false
})
loading.value = false
})
}
} else {
await updateFormData(confirmFormData).then(res => {
@@ -1304,8 +1252,8 @@ const confirmForm = async (flag: boolean) => {
resetForm()
close()
}).catch(() => {
loading.value = false
})
loading.value = false
})
}
}
} else {
@@ -1332,7 +1280,7 @@ const setcontroFlag = () => {
}
defineExpose({ open, filterUsers, setcontroFlag })
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.el-form {}
.form-label-left-align {

View File

@@ -62,11 +62,11 @@
detailData.userType == '4' ||
detailData.userType == '5'
">
{{ proviteData.nonlinearLoadType }}
{{ proviteData?.nonlinearLoadType || '' }}
</el-descriptions-item>
<el-descriptions-item label="是否需要治理">
<span v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData.needGovernance == 0 ? '' : '' }}
{{ proviteData?.needGovernance == 1 ? '' : '' }}
</span>
<span v-if="
detailData.userType == 2 ||
@@ -74,13 +74,13 @@
detailData.userType == 4 ||
detailData.userType == 5
">
{{ proviteData.needGovernance == 0 ? '' : '' }}
{{ proviteData?.needGovernance == 1 ? '' : '' }}
</span>
<span v-if="detailData.userType == 6">{{ proviteData.needGovernance == 0 ? '' : '' }}</span>
<span v-if="detailData.userType == 6">{{ proviteData?.needGovernance == 1 ? '' : '' }}</span>
</el-descriptions-item>
<el-descriptions-item label="是否开展背景测试">
<span v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }}
</span>
<span v-if="
detailData.userType == 2 ||
@@ -88,10 +88,10 @@
detailData.userType == 4 ||
detailData.userType == 5
">
{{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }}
</span>
<span v-if="detailData.userType == 6">
{{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }}
</span>
</el-descriptions-item>
@@ -109,11 +109,11 @@
<el-descriptions-item label="是否开展抗扰度测试" v-if="detailData.userType == 6">
<span>
{{ proviteData.antiInterferenceTest == 0 ? '' : '' }}
{{ proviteData.antiInterferenceTest == 1 ? '' : '' }}
</span>
</el-descriptions-item>
<el-descriptions-item label="用户协议容量MVA" v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData.agreementCapacity }}
{{ proviteData?.agreementCapacity }}
</el-descriptions-item>
<el-descriptions-item label="PCC供电设备容量MVA" v-if="
detailData.userType == '2' ||
@@ -121,7 +121,7 @@
detailData.userType == '4' ||
detailData.userType == '5'
">
{{ proviteData.pccEquipmentCapacity }}
{{ proviteData?.pccEquipmentCapacity }}
</el-descriptions-item>
<el-descriptions-item label="基准短路容量MVA" v-if="
detailData.userType == '2' ||
@@ -129,7 +129,7 @@
detailData.userType == '4' ||
detailData.userType == '5'
">
{{ proviteData.baseShortCircuitCapacity }}
{{ proviteData?.baseShortCircuitCapacity }}
</el-descriptions-item>
<el-descriptions-item label="系统最小短路容量MVA" v-if="
detailData.userType == '2' ||
@@ -202,8 +202,8 @@
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon>
<a target="_blank" :href="proviteData.feasibilityReport?.url" rel="nofollow">
{{ proviteData.feasibilityReport?.name }}
<a target="_blank" :href="proviteData?.feasibilityReport?.url" rel="nofollow">
{{ proviteData?.feasibilityReport?.name }}
</a>
</span>
<span v-if="
@@ -215,16 +215,16 @@
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon>
<a target="_blank" :href="proviteData.feasibilityReport?.url">
{{ proviteData.feasibilityReport?.name }}
<a target="_blank" :href="proviteData?.feasibilityReport?.url">
{{ proviteData?.feasibilityReport?.name }}
</a>
</span>
<span v-if="detailData.userType == 6">
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon>
<a target="_blank" :href="proviteData.feasibilityReport?.url">
{{ proviteData.feasibilityReport?.name }}
<a target="_blank" :href="proviteData?.feasibilityReport?.url">
{{ proviteData?.feasibilityReport?.name }}
</a>
</span>
</el-descriptions-item>
@@ -573,7 +573,6 @@ const preview = (val: any, url: any) => {
}
//预测评估报告
if (val == 'predictionEvaluationReport') {
console.log(url, '9999999')
predictionEvaluationReportRef?.value.open(url)
}
//预测评估评审意见报告
@@ -626,59 +625,66 @@ const getProviteData = async () => {
) {
proviteData.value = detailData.value.userReportSubstationPO
//查询非线性负荷类型
await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => {
proviteData.value.nonlinearLoadType = res.data?.name
})
if (proviteData.value?.nonlinearLoadType != undefined) {
await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => {
proviteData.value.nonlinearLoadType = res.data?.name
})
}
} else {
proviteData.value = detailData.value.userReportSensitivePO
}
//可研报告
if (proviteData.value.feasibilityReport) {
if (proviteData.value?.feasibilityReport != undefined && proviteData.value?.feasibilityReport.length>7) {
await getFileNamePath(proviteData.value.feasibilityReport, 'feasibilityReport')
}
//项目初步设计说明书
if (proviteData.value.preliminaryDesignDescription) {
if (proviteData.value?.preliminaryDesignDescription != undefined && proviteData.value?.preliminaryDesignDescription.length>7) {
await getFileNamePath(proviteData.value.preliminaryDesignDescription, 'preliminaryDesignDescription')
}
//预测评估报告
if (proviteData.value.predictionEvaluationReport) {
if (proviteData.value?.predictionEvaluationReport != undefined && proviteData.value?.predictionEvaluationReport.length>7) {
await getFileNamePath(proviteData.value.predictionEvaluationReport, 'predictionEvaluationReport')
}
//预测评估评审意见报告
if (proviteData.value.predictionEvaluationReviewOpinions) {
if (proviteData.value?.predictionEvaluationReviewOpinions != undefined && proviteData.value?.predictionEvaluationReviewOpinions.length>7) {
await getFileNamePath(
proviteData.value.predictionEvaluationReviewOpinions,
'predictionEvaluationReviewOpinions'
)
}
//用户接入变电站主接线示意图
if (proviteData.value.substationMainWiringDiagram) {
if (proviteData.value?.substationMainWiringDiagram != undefined && proviteData.value?.substationMainWiringDiagram.length>7) {
await getFileNamePath(proviteData.value.substationMainWiringDiagram, 'substationMainWiringDiagram')
}
//主要敏感终端清单
if (proviteData.value.sensitiveDevices) {
if (proviteData.value?.sensitiveDevices != undefined && proviteData.value?.sensitiveDevices.length>7) {
await getFileNamePath(proviteData.value.sensitiveDevices, 'sensitiveDevices')
}
//抗扰度测试报告
if (proviteData.value.antiInterferenceReport) {
if (proviteData.value?.antiInterferenceReport != undefined && proviteData.value?.antiInterferenceReport.length>7) {
await getFileNamePath(proviteData.value.antiInterferenceReport, 'antiInterferenceReport')
}
//背景电能质量测试报告
if (proviteData.value.powerQualityReport) {
if (proviteData.value?.powerQualityReport != undefined && proviteData.value?.powerQualityReport.length>7) {
await getFileNamePath(proviteData.value.powerQualityReport, 'powerQualityReport')
}
//其他附件
if (proviteData.value.additionalAttachments) {
if (proviteData.value?.additionalAttachments != undefined && proviteData.value?.additionalAttachments.length>7) {
getFileNamePath(proviteData.value.additionalAttachments, 'additionalAttachments')
}
// 入网评估报告
if (detailData.value.netInReport.length > 0) {
if ( detailData.value.netInReport.length > 0 ) {
netInReportList.value = []
detailData.value.netInReport.forEach((item: any) => {
if (item != null) {

View File

@@ -1,37 +1,47 @@
<template>
<TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<template #select>
<el-form-item label='项目名称'>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' clearable maxlength="32" show-word-limit></el-input>
</el-form-item>
<el-form-item label='所在地市'>
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'>
<el-option v-for='item in areaOptionList' :key='item.id' :label='item.name' :value='item.name'></el-option>
</el-select>
</el-form-item>
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="项目名称">
<el-input v-model="tableStore.table.params.projectName" placeholder="请输入项目名称"></el-input>
</el-form-item>
<el-form-item label="所在地市">
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择所在地市">
<el-option
v-for="item in areaOptionList"
:key="item.id"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</el-form-item>
<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>
</template>
<template #operation>
<!-- <el-button icon="el-icon-Plus" type="primary" @click="addList">新增</el-button> -->
<el-button icon='el-icon-Plus' type='primary' @click='addFormModel'>新增</el-button>
<el-button icon='el-icon-Delete' type='primary' @click='deleteEven'>删除</el-button>
<!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
</template>
</TableHeader>
<Table ref='tableRef' :checkbox-config='checkboxConfig' />
<!-- 新增 -->
<Add ref='addRef' @onSubmit='tableStore.index()' />
<!-- 上传 -->
<Audit ref='AuditRef' @onSubmit='tableStore.index()' />
<!-- 查看详情 detail 新增/修改 create-->
<addForm ref='addForms' @onSubmit='tableStore.index()'></addForm>
<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>
</template>
<template #operation>
<!-- <el-button icon="el-icon-Plus" type="primary" @click="addList">新增</el-button> -->
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
<!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
</template>
</TableHeader>
<Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- 新增 -->
<Add ref="addRef" @onSubmit="tableStore.index()" />
<!-- 上传 -->
<Audit ref="AuditRef" @onSubmit="tableStore.index()" />
<!-- 查看详情 detail 新增/修改 create-->
<addForm ref="addForms" @onSubmit="tableStore.index()"></addForm>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { ref, onMounted, provide, watch, reactive } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
@@ -53,8 +63,8 @@ const { push, options, currentRoute } = useRouter()
const TableHeaderRef = ref()
const tableRef = ref()
const areaOptionList = dictData
.getBasicData('jibei_area')
.filter(item => !(item.name == '超高压' || item.name == '风光储'))
.getBasicData('jibei_area')
.filter(item => !(item.name == '超高压' || item.name == '风光储'))
const statusSelect = dictData.statusSelect()
const addRef = ref()
const AuditRef = ref()
@@ -63,169 +73,191 @@ const show: any = ref(false)
const fileList = ref([])
const flag = ref(false)
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getUserReport',
publicHeight: 65,
method: 'POST',
column: [
{
width: '60',
type: 'checkbox'
},
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'city',
title: '所在地市',
minWidth: 80
// formatter: (obj: any) => {
// return areaOptionList.filter(item => item.id == obj.row.city)[0]?.name
// }
},
{
field: 'substation',
title: '厂站名称',
minWidth: 100,
formatter: (row: any) => {
row.cellValue = row.cellValue ? row.cellValue : '/'
return row.cellValue
}
},
{ field: 'projectName', title: '项目名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{
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: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
url: '/supervision-boot/userReport/getUserReport',
publicHeight: 65,
method: 'POST',
filename:'未建档用户档案录入管理',
column: [
{
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)
}
width: '60',
type: 'checkbox'
},
{
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 => {
addForms.value.open({
title: '编辑',
row: row
})
}
title: '序号',
width: 80,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'city',
title: '所在地市',
minWidth: 80
// formatter: (obj: any) => {
// return areaOptionList.filter(item => item.id == obj.row.city)[0]?.name
// }
},
{
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 => {
addForms.value.open({
title: '重新发起',
row: row
})
}
field: 'substation',
title: '厂站名称',
minWidth: 100,
formatter: (row: any) => {
row.cellValue = row.cellValue ? row.cellValue : '/'
return row.cellValue
}
},
{ field: 'projectName', title: '项目名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{
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)
}
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: '操作',
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 => {
addForms.value.open({
title: '编辑',
row: 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 => {
addForms.value.open({
title: '重新发起',
row: 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: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName
}
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.userStatus =
item.userStatus == 0 ? '可研' : item.userStatus == 1 ? '建设' : item.userStatus == 2 ? '运行' : '退运'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
})
tableStore.table.params.city = ''
tableStore.table.params.projectName = ''
@@ -238,167 +270,162 @@ tableStore.table.params.status = ''
provide('tableStore', tableStore)
// 新增
const addList = () => {
addRef.value.open()
addRef.value.open()
}
// 禁止点击
const checkboxConfig = reactive({
checkMethod: ({ row }) => {
return adminInfo.roleCode.includes('delete_info')
? true
: row.createBy == adminInfo.$state.id && row.status == 0
}
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(() => {
deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
})
}
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
const addForms = ref()
const addFormModel = () => {
show.value = true
setTimeout(() => {
addForms.value.open({
title: '用户档案录入'
})
}, 0)
show.value = true
setTimeout(() => {
addForms.value.open({
title: '用户档案录入'
})
}, 0)
}
// 导出
const exportEvent = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
getLoadTypeUserList(form).then(res => {
tableRef.value.getRef().exportData({
filename: '未建档非线性用户', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
getLoadTypeUserList(form).then(res => {
tableRef.value.getRef().exportData({
filename: '未建档非线性用户', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
})
}
/**取消流程操作*/
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 cancelFormData(data)
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
// 二次确认
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 cancelFormData(data)
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
}
onMounted(() => {
tableStore.index()
tableStore.index()
})
watch(
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
() => currentRoute.value.path,
() => {
if (flag.value && options.history.state.forward?.split('/')[1] == 'bpm') {
tableStore.index()
flag.value = false
}
},
{
deep: true
}
},
{
deep: true
}
)
/** 处理审批按钮 */
const handleAudit = (instanceId: any, historyInstanceId: any) => {
push({
name: 'BpmProcessInstanceDetail',
state: {
id: instanceId,
historyInstanceId
}
})
push({
name: 'BpmProcessInstanceDetail',
state: {
id: instanceId,
historyInstanceId
}
})
}
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
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 getUserReportById(fullId).then(res => {
if (res && res.code == 'A0000') {
addForms.value.open({
title: '重新发起',
row: res.data
})
}
})
}, { immediate: true })
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 getUserReportById(fullId).then(res => {
if (res && res.code == 'A0000') {
addForms.value.open({
title: '重新发起',
row: res.data
})
}
})
},
{ immediate: true }
)
</script>
<style scoped lang='scss'></style>
<style scoped lang="scss"></style>

View File

@@ -1,17 +1,24 @@
<!--待办事项列表-->
<template>
<div>
<TableHeader date-picker nextFlag theCurrentTime>
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
<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-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 maxlength="32" show-word-limit></el-input>
<el-form-item label="搜索">
<el-input
v-model="tableStore.table.params.searchValue"
placeholder="输入变电站、监测点"
clearable
></el-input>
</el-form-item>
</template>
<template #operation>
@@ -54,13 +61,14 @@ const tableStore = new TableStore({
url: '/supervision-boot/quitRunningDevice/list',
method: 'POST',
publicHeight: 65,
filename:'监测点状态管理',
column: [
{
width: '60',
type: 'checkbox'
},
{
field: 'index',
title: '序号',
width: '80',
formatter: (row: any) => {
@@ -220,6 +228,49 @@ const tableStore = new TableStore({
// }
tableStore.table.params.deviceType = 2
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.devOriginalStatus =
item.devOriginalStatus == 0
? '运行'
: item.devOriginalStatus == 1
? '检修'
: item.devOriginalStatus == 2
? '停运'
: item.devOriginalStatus == 3
? '调试'
: item.devOriginalStatus == 4
? '退运'
: '/'
item.devStatus =
item.devStatus == 0
? '运行'
: item.devStatus == 1
? '检修'
: item.devStatus == 2
? '停运'
: item.devStatus == 3
? '调试'
: item.devStatus == 4
? '退运'
: '/'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消'
: item.status == 5
? '新增'
: '/'
return item
})
}
})
tableStore.table.params.searchValue = ''
@@ -250,19 +301,15 @@ const deleteEven = () => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
}).then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
/** 流程实例详情 */
@@ -316,16 +363,20 @@ watch(
)
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 })
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>

View File

@@ -1,16 +1,24 @@
<!--待办事项列表-->
<template>
<div>
<TableHeader date-picker nextFlag theCurrentTime>
<TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
<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-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 maxlength="32" show-word-limit></el-input>
<el-form-item label="搜索">
<el-input
v-model="tableStore.table.params.searchValue"
placeholder="输入变电站、终端"
clearable
></el-input>
</el-form-item>
</template>
<template #operation>
@@ -53,6 +61,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/quitRunningDevice/list',
method: 'POST',
publicHeight: 65,
filename:'终端状态管理',
column: [
{
width: '60',
@@ -216,6 +225,49 @@ const tableStore = new TableStore({
// }
// }
tableStore.table.params.deviceType = 1
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.devOriginalStatus =
item.devOriginalStatus == 0
? '运行'
: item.devOriginalStatus == 1
? '检修'
: item.devOriginalStatus == 2
? '停运'
: item.devOriginalStatus == 3
? '调试'
: item.devOriginalStatus == 4
? '退运'
: '/'
item.devStatus =
item.devStatus == 0
? '运行'
: item.devStatus == 1
? '检修'
: item.devStatus == 2
? '停运'
: item.devStatus == 3
? '调试'
: item.devStatus == 4
? '退运'
: '/'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消'
: item.status == 5
? '新增'
: '/'
return item
})
}
})
tableStore.table.params.status = ''
@@ -245,17 +297,15 @@ const deleteEven = () => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
}).then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
/** 流程实例详情 */
@@ -309,16 +359,20 @@ watch(
)
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 })
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>

View File

@@ -1,16 +1,20 @@
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<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-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-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">
<el-option label="未解决" value="0"></el-option>
<!-- <el-option label="全部" value="1"></el-option> -->
<!-- <el-option label="已解决" value="1"></el-option> -->
</el-select>
</el-form-item>
</template>
@@ -65,6 +69,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/warningLeaflet/alarmPageData',
publicHeight: 65,
method: 'POST',
filename:'告警单列表',
column: [
{
width: '60',
@@ -407,6 +412,34 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.dealState=item.dealState==0?'未解决':item.dealState==1?'已解决':'/'
item.problemType =
item.problemType == 1
? '技术监督计划'
: item.problemType == 2
? '在线监测超标问题'
: item.problemType == 3
? '用户投诉问题'
: '试运行监测点问题'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消'
: item.status == 5
? '新增'
: '/'
return item
})
}
})
// 禁止点击
@@ -428,19 +461,15 @@ const deleteEven = () => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
}).then(() => {
deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
/**取消流程操作*/
@@ -485,46 +514,48 @@ const handleAudit = (instanceId: any, historyInstanceId: any) => {
}
const props = defineProps(['id', 'businessKey'])
watch(() => props.id, async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let fullId = newValue.split('@')[0]
let nowTime = Date.now()
const routeTime = Number(newValue.split('@')[1])
watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let 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 || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => {
if (res && res.code == 'A0000') {
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => {
if (res && res.code == 'A0000') {
if (props.businessKey == '3') {
feedbackPopup.value.open(
'填报告警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.supervisionReport,
res.data.reformAdvice
)
} else {
feedbackPopup.value.open(
'重新填报告警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.supervisionReport,
res.data.reformAdvice,
res.data.takeStep,
res.data.reportPath,
res.data.reformAdvice
)
if (res && res.code == 'A0000') {
if (props.businessKey == '3') {
feedbackPopup.value.open(
'填报告警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.supervisionReport,
res.data.reformAdvice
)
} else {
feedbackPopup.value.open(
'重新填报告警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.supervisionReport,
res.data.reformAdvice,
res.data.takeStep,
res.data.reportPath,
res.data.reformAdvice
)
}
}
}
}
})
}, { immediate: true })
})
},
{ immediate: true }
)
</script>
<style scoped lang="scss"></style>

View File

@@ -1,5 +1,5 @@
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #operation>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
</template>
@@ -16,7 +16,7 @@ import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import FeedbackPopup from '@/views/pqs/supervise/technology/feedbackPopup.vue'
import { useRouter } from 'vue-router'
import {cancelFeedback, getById} from '@/api/supervision-boot/leaflet'
import { cancelFeedback, getById } from '@/api/supervision-boot/leaflet'
import { useAdminInfo } from '@/stores/adminInfo'
import { useDictData } from '@/stores/dictData'
import { deleteWarningLeaflet } from '@/api/supervision-boot/delete/index'
@@ -31,6 +31,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/warningLeaflet/warningPageData',
publicHeight: 65,
method: 'POST',
filename:'预警单列表',
column: [
{
width: '60',
@@ -38,7 +39,6 @@ const tableStore = new TableStore({
},
{
title: '序号',
align: 'center',
width: 80,
formatter: (row: any) => {
@@ -258,6 +258,33 @@ const tableStore = new TableStore({
],
beforeSearchFun: () => {
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.problemType =
item.problemType == 1
? '技术监督计划'
: item.problemType == 2
? '在线监测超标问题'
: item.problemType == 3
? '用户投诉问题'
: '试运行监测点问题'
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消'
: item.status == 5
? '新增'
: '/'
return item
})
}
})
@@ -281,13 +308,11 @@ const deleteEven = () => {
message: '请选择要删除的数据'
})
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
@@ -295,9 +320,7 @@ const deleteEven = () => {
})
tableStore.index()
})
})
}
}
/**取消流程操作*/
@@ -332,41 +355,45 @@ const handleAudit = (instanceId: any, historyInstanceId: any) => {
})
}
const props = defineProps(['id','businessKey'])
watch(() => props.id, async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let 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 || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => {
if (res && res.code == 'A0000') {
if(props.businessKey == '3'){
feedbackPopup.value.open(
'填报预警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.reportPath,
res.data.reformAdvice
)
}else{
feedbackPopup.value.open(
'重新填报预警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.reportPath,
res.data.reformAdvice,
res.data.takeStep,
res.data.reportPath
)
}
}
})
}, {immediate: true})
const props = defineProps(['id', 'businessKey'])
watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let 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 || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => {
if (res && res.code == 'A0000') {
if (props.businessKey == '3') {
feedbackPopup.value.open(
'填报预警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.reportPath,
res.data.reformAdvice
)
} else {
feedbackPopup.value.open(
'重新填报预警反馈单',
res.data.id,
res.data.status,
res.data.issueDetail,
res.data.problemPath,
res.data.reportPath,
res.data.reformAdvice,
res.data.takeStep,
res.data.reportPath
)
}
}
})
},
{ immediate: true }
)
</script>
<style scoped lang="scss"></style>

View File

@@ -219,7 +219,7 @@ const submit = async (flag: boolean) => {
ElMessage.success('重新发起成功')
tableStore.index()
dialogVisible.value = false
}).catch(() => { loading.value = false })
})
} else {
//此时该告警单处于待反馈状态
await addFeedback(subForm).then(res => {
@@ -227,7 +227,7 @@ const submit = async (flag: boolean) => {
ElMessage.success('申请成功')
tableStore.index()
dialogVisible.value = false
}).catch(() => { loading.value = false })
})
}
}
})
@@ -241,21 +241,10 @@ defineExpose({ open })
let uploadName = ref('')
const choose = (e: any) => {
const fileExtension = e.name.split('.')[1];
if (fileExtension === 'doc' || fileExtension === 'docx' || fileExtension === 'pdf') {
// 文件类型不符合要求,提示用户
uploadFile(e.raw, '/supervision/').then(res => {
reportFilePath.value = res.data.name
ElMessage.success('上传成功!');
// form.value.reportPath = res.data.name
})
} else {
uploadRef.value!.clearFiles()
ElMessage.error('请选择 .doc 或 .docx 或 .pdf 格式的文件!');
}
uploadFile(e.raw, '/supervision/').then(res => {
reportFilePath.value = res.data.name
// form.value.reportPath = res.data.name
})
}
const handleExceed: UploadProps['onExceed'] = files => {

View File

@@ -1,6 +1,6 @@
<template>
<div>
<TableHeader area ref='TableHeaderRef'>
<TableHeader area ref='TableHeaderRef' showExport>
<template #select>
<el-form-item label='运行状态'>
<el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态">
@@ -13,7 +13,7 @@
</el-select>
</el-form-item>
<el-form-item label='信息查询'>
<el-input style="width:200px;" placeholder="电站名称,终端编号,型号" v-model='tableStore.table.params.searchValue' maxlength="32" show-word-limit clearable></el-input>
<el-input style="width:200px;" placeholder="电站名称,终端编号,型号" v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
</template>
@@ -44,12 +44,11 @@ const tableStore = new TableStore({
url: '/device-boot/runManage/getDeviceLedger',
publicHeight: 65,
method: 'POST',
filename:'终端台账',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
{
field: 'areaName',
title: '省公司',

View File

@@ -1,10 +1,10 @@
<template>
<div>
<TableHeader ref="TableHeaderRef">
<TableHeader ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="项目名称">
<el-input style="width: 200px" placeholder="请输入项目名称" v-model="tableStore.table.params.projectName"
clearable maxlength="32" show-word-limit></el-input>
clearable></el-input>
</el-form-item>
<el-form-item label="所在地市">
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择所在地市">
@@ -16,8 +16,7 @@
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
<el-button icon="el-icon-Download" type="primary" @click="exportExcelTemplate"
:loading="loading">模板下载</el-button>
<el-button icon="el-icon-Download" type="primary" @click="exportExcelTemplate" :loading="loading">模板下载</el-button>
<el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button>
</template>
</TableHeader>
@@ -61,16 +60,15 @@ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage',
publicHeight: 65,
method: 'POST',
filename:'干扰源用户台账',
column: [
{
width: '60',
type: 'checkbox'
},
{
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
{ field: 'city', title: '所在地市', minWidth: 80 },
{ field: 'substation', title: '厂站名称', minWidth: 100 },
{ field: 'projectName', title: '项目名称', minWidth: 170 },
@@ -261,20 +259,20 @@ const deleteEven = () => {
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
})
}
}
@@ -346,9 +344,9 @@ const getUserTypeName = (userType: any) => {
return '新建电网工程'
}
//导出模板
const exportExcelTemplate = async () => {
const exportExcelTemplate = async() => {
loading.value = true
await downloadSensitiveReportTemplate().then((res: any) => {
await downloadSensitiveReportTemplate().then((res: any) => {
let blob = new Blob([res], {
type: 'application/vnd.ms-excel'
})
@@ -362,7 +360,7 @@ const exportExcelTemplate = async () => {
})
await setTimeout(() => {
loading.value = false
}, 0)
},0)
}
//批量导入用户数据

View File

@@ -1,17 +1,19 @@
<template>
<div>
<TableHeader area ref="TableHeaderRef">
<TableHeader area ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label='运行状态'>
<el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态">
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
<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="信息查询">
<el-input style="width:240px;" placeholder="电站名称,终端编号,监测点名称"
v-model="tableStore.table.params.searchValue" maxlength="32" show-word-limit
clearable></el-input>
<el-input style="width:240px;" placeholder="电站名称,终端编号,监测点名称" v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item>
</template>
@@ -43,12 +45,11 @@ const tableStore = new TableStore({
publicHeight: 65,
isWebPaging: true,
method: 'POST',
filename:'监测点台账',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
{
field: 'areaName',
@@ -136,7 +137,7 @@ const tableStore = new TableStore({
tableStore.table.params.serverName = 'harmonic-boot'
tableStore.table.params.runFlag = []
if (tableStore.table.params.runF != null) {
if(tableStore.table.params.runF!=null){
tableStore.table.params.runFlag = [tableStore.table.params.runF]
}
tableStore.table.params.comFlag = [0, 1]
@@ -147,12 +148,12 @@ const tableStore = new TableStore({
}
})
tableStore.table.params.runF = null
tableStore.table.params.runFlag = []
tableStore.table.params.searchValue = ''
tableStore.table.params.runF=null
tableStore.table.params.runFlag=[]
tableStore.table.params.searchValue=''
const runFlagList = [{ id: 0, name: '运行' }, { id: 1, name: '检修' }, { id: 2, name: '停运' }, { id: 3, name: '调试' }, { id: 4, name: '退运' }]
const runFlagList = [{id:0,name:'运行'},{id:1,name:'检修'},{id:2,name:'停运'},{id:3,name:'调试'},{id:4,name:'退运'}]
provide('tableStore', tableStore)
onMounted(() => {

View File

@@ -1,41 +1,41 @@
<template>
<el-dialog
draggable
class='cn-operate-dialog'
v-model='eventDataUploadVisible'
:title='title'
style='width: 415px'
top='25vh'
class="cn-operate-dialog"
v-model="eventDataUploadVisible"
:title="title"
style="width: 415px"
top="25vh"
>
<el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' ref='formRef'>
<el-form-item label='用户数据文件'>
<el-form :inline="false" :model="form" label-width="120px" ref="formRef">
<el-form-item label="用户数据文件">
<el-upload
v-model:file-list='fileList'
ref='uploadEventData'
action=''
:limit='1'
:on-exceed='handleExceed'
:auto-upload='false'
:on-change='choose'
v-model:file-list="fileList"
ref="uploadEventData"
action=""
:limit="1"
:on-exceed="handleExceed"
:auto-upload="false"
:on-change="choose"
>
<template #trigger>
<el-button type='primary'>选择数据文件</el-button>
<el-button type="primary">选择数据文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
</el-scrollbar>
<template #footer>
<span class='dialog-footer'>
<el-button @click='eventDataUploadVisible = false'>取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button>
<span class="dialog-footer">
<el-button @click="eventDataUploadVisible = false">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang='ts'>
<script setup lang="ts">
import { ref, reactive, inject } from 'vue'
import TableStore from '@/utils/tableStore'
import { ElMessage } from 'element-plus'
@@ -95,11 +95,6 @@ const submit = async () => {
if (valid) {
let data = new FormData()
data.append('file', form.file)
const allowedTypes = ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']
if (!allowedTypes.includes(form.file.type)) {
return ElMessage.warning('只能上传 Excel 文件 (.xls 或 .xlsx)!')
}
if (title.value === '导入干扰源用户') {
await importSensitiveReportData(data)
.then(res => handleImportResponse(title.value, res))

View File

@@ -1,10 +1,10 @@
<template>
<div>
<TableHeader ref="TableHeaderRef">
<TableHeader ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="项目名称">
<el-input style="width: 200px" placeholder="请输入项目名称" v-model="tableStore.table.params.projectName"
clearable maxlength="32" show-word-limit></el-input>
clearable></el-input>
</el-form-item>
<el-form-item label="所在地市">
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择所在地市">
@@ -56,6 +56,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getSensitiveUserPage',
publicHeight: 65,
method: 'POST',
filename:'敏感及重要用户台账',
column: [
{
width: '60',

View File

@@ -1,6 +1,6 @@
<template>
<div>
<TableHeader datePicker area nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader datePicker area nextFlag theCurrentTime ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="信息查询">
<el-input
@@ -8,7 +8,6 @@
placeholder="请输入变电站/监测点名称"
v-model="tableStore.table.params.searchValue"
clearable
maxlength="32" show-word-limit
></el-input>
</el-form-item>
</template>
@@ -33,12 +32,8 @@ const tableStore = new TableStore({
method: 'POST',
isWebPaging: true,
paramsPOST: true,
filename:'变电站台账',
column: [
{
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'deptName', title: '所在地市', minWidth: 100 },
{ field: 'substationName', title: '变电站名称', minWidth: 100 },
@@ -47,7 +42,7 @@ const tableStore = new TableStore({
title: '电网侧监测点名称',
minWidth: 150,
formatter: (obj: any) => {
return obj.cellValue.length == 0 ? '/' : obj.cellValue.join('\n')
return obj.cellValue.length == 0 ? '/' : obj.cellValue.join('\n ')
}
},
{
@@ -55,7 +50,7 @@ const tableStore = new TableStore({
title: '非电网侧监测点名称',
minWidth: 150,
formatter: (obj: any) => {
return obj.cellValue.length == 0 ? '/' : obj.cellValue.join('\n')
return obj.cellValue.length == 0 ? '/' : obj.cellValue.join('\n ')
}
},
{ field: 'alarmFreq', title: '告警频次', minWidth: 80 },

View File

@@ -1,12 +1,12 @@
<!---终端入网检测-->
<template>
<TableHeader area ref='TableHeaderRef'>
<TableHeader area ref='TableHeaderRef' showExport>
<template #select>
<el-form-item label='搜索'>
<el-input
v-model='tableStore.table.params.searchValue'
placeholder='输入变电站.终端名称'
clearable maxlength="32" show-word-limit
clearable
></el-input>
</el-form-item>
<el-form-item label='流程状态'>
@@ -74,8 +74,9 @@ const tableStore = new TableStore({
url: '/supervision-boot/checkDevice/list',
publicHeight: 65,
method: 'POST',
filename:'终端周期检测',
column: [
{ title: '序号', width: 80,formatter: (row: any) => {
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
{ field: 'substation', title: '变电站' },
@@ -217,7 +218,24 @@ const tableStore = new TableStore({
tableStore.table.params.deptId = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消':item.status == 5
? '同步台账成功':'/'
return item
})
}
})
tableStore.table.params.status = ''
tableStore.table.params.state = ''

View File

@@ -1,10 +1,10 @@
<!---终端入网检测-->
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll showExport ref="TableHeaderRef">
<template #select>
<el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端、监测点名称"
clearable maxlength="32" show-word-limit style="width: 230px"></el-input>
clearable style="width: 230px"></el-input>
</el-form-item>
<el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -53,6 +53,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/tempLinedebug/list',
publicHeight: 65,
method: 'POST',
filename:'监测点联调列表',
column: [
{
width: '60',
@@ -218,6 +219,23 @@ const tableStore = new TableStore({
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: item.status == 4
? '已取消':item.status == 5
? '同步台账成功':'/'
return item
})
}
})
tableStore.table.params.status = ''

View File

@@ -1,213 +1,203 @@
<template>
<el-dialog v-model='dialogFormVisible' :title='title' width='65%' :append-to-body='true' :before-close='close'
:close-on-click-modal='false' :lazy='true' draggable>
<el-dialog v-model="dialogFormVisible" :title="title" width="65%" :append-to-body="true" :before-close="close"
:close-on-click-modal="false" :lazy="true" draggable>
<!--监测点信息录入 基础信息+监测点信息 监测点信息要有用户名称用户状态 -->
<el-form :model='form' :validate-on-rule-change='false' :scroll-to-error='true' :rules='rules' ref='ruleFormRef'
label-width='auto' label-position='right' class='form-two'>
<div class='fixed_upload' v-if='false'>
<el-upload v-model:file-list='form.lineFilePath' ref='uploadRef' action='' accept='.xls,.xlsx'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('lineFilePath')" :on-remove='removeFile'>
<el-form :model="form" :validate-on-rule-change="false" :scroll-to-error="true" :rules="rules" ref="ruleFormRef"
label-width="auto" label-position="right" class="form-two">
<div class="fixed_upload" v-if="false">
<el-upload v-model:file-list="form.lineFilePath" ref="uploadRef" action="" accept=".xls,.xlsx"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('lineFilePath')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>监测点台账信息</el-button>
<el-button type="primary">监测点台账信息</el-button>
</template>
</el-upload>
</div>
<!-- 基础信息 -->
<el-form-item v-if='false' for='-' label='填报人:' prop='reporterName'>
<el-input v-model.trim='form.reporterName' autocomplete='off' placeholder='请输入填报人'
:disabled='true' />
<el-form-item v-if="false" for="-" label="填报人:" prop="reporterName">
<el-input v-model="form.reporterName" autocomplete="off" placeholder="请输入填报人" :disabled="true" />
</el-form-item>
<el-form-item v-if='false' for='-' label='填报日期:' prop='reportDate'>
<el-date-picker style='width: 100%' v-model='form.reportDate' :disabled='true' type='date'
format='YYYY-MM-DD' value-format='YYYY-MM-DD' placeholder='请选择填报日期' />
<el-form-item v-if="false" for="-" label="填报日期:" prop="reportDate">
<el-date-picker style="width: 100%" v-model="form.reportDate" :disabled="true" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择填报日期" />
</el-form-item>
<el-form-item v-if='false' for='-' label='填报部门:' prop='orgId'>
<el-input v-model.trim='form.orgName' :disabled='true' autocomplete='off' />
<el-form-item v-if="false" for="-" label="填报部门:" prop="orgId">
<el-input v-model="form.orgName" :disabled="true" autocomplete="off" />
</el-form-item>
<el-form-item v-if='false' for='-' label='工程投产日期:' prop='expectedProductionDate'>
<el-date-picker style='width: 100%' v-model='form.expectedProductionDate' type='date'
format='YYYY-MM-DD' value-format='YYYY-MM-DD' :disabled='true'
:disabled-date='disabledDate'
placeholder='请选择工程投产日期' />
<el-form-item v-if="false" for="-" label="工程投产日期:" prop="expectedProductionDate">
<el-date-picker style="width: 100%" v-model="form.expectedProductionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" :disabled="true" :disabled-date="disabledDate"
placeholder="请选择工程投产日期" />
</el-form-item>
<el-form-item v-if='false' for='-' label='所在地市:' prop='city'>
<el-select v-model='form.city' clearable style='width: 100%' :disabled='true'
placeholder='请选择所在地市'>
<el-option v-for='item in areaOptionList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item v-if="false" for="-" label="所在地市:" prop="city">
<el-select v-model="form.city" clearable style="width: 100%" :disabled="true" placeholder="请选择所在地市">
<el-option v-for="item in areaOptionList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if='false' for='-' label='用户状态:' prop='userStatus'>
<el-select v-model='form.userStatus' placeholder='请选择用户状态' :disabled='true' style='width: 100%'>
<el-option v-for='(item, index) in userStateList' :label='item.name' :value='item.id'
:disabled="item.name != '建设'" :key='index' />
<el-form-item v-if="false" for="-" label="用户状态:" prop="userStatus">
<el-select v-model="form.userStatus" placeholder="请选择用户状态" :disabled="true" style="width: 100%">
<el-option v-for="(item, index) in userStateList" :label="item.name" :value="item.id"
:disabled="item.name != '建设'" :key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='关联干扰源:' prop='userName'>
<el-select v-model='form.userName' clearable style='width: 100%' placeholder='请选择关联干扰源'
@change='changeUserName'>
<el-option v-for='(item, index) in userNameList' :key='index' :label='item.projectName'
:value='item.id'></el-option>
<el-form-item for="-" label="关联干扰源:" prop="userName">
<el-select v-model="form.userName" clearable style="width: 100%" placeholder="请选择关联干扰源"
@change="changeUserName">
<el-option v-for="(item, index) in userNameList" :key="index" :label="item.projectName"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='关联终端:' prop='monitoringTerminalCode'>
<el-select v-model='form.monitoringTerminalCode' clearable style='width: 100%' filterable
placeholder='请选择关联终端' @change='changeDevice'>
<el-option v-for='(item, index) in monitoringTerminalList' :key='index'
:label='item.monitoringTerminalCode' :value='item.id'></el-option>
<el-form-item for="-" label="关联终端:" prop="monitoringTerminalCode">
<el-select v-model="form.monitoringTerminalCode" clearable style="width: 100%" filterable
placeholder="请选择关联终端" @change="changeDevice">
<el-option v-for="(item, index) in monitoringTerminalList" :key="index"
:label="item.monitoringTerminalCode" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='接入母线:' prop='connectedBus'>
<el-input v-model.trim='form.connectedBus' autocomplete='off' placeholder='请输入接入母线 如110kV4母线'
maxlength='32' show-word-limit />
<el-form-item for="-" label="接入母线:" prop="connectedBus">
<el-input v-model="form.connectedBus" autocomplete="off" placeholder="请输入接入母线 如110kV4母线" />
</el-form-item>
<el-form-item for='-' label='监测点运行状态:' prop='operationStatus'>
<el-select v-model='form.operationStatus' placeholder='请选择运行状态'>
<el-option v-for='(item, index) in operationStatusList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" label="监测点运行状态:" prop="operationStatus">
<el-select v-model="form.operationStatus" placeholder="请选择运行状态">
<el-option v-for="(item, index) in operationStatusList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='监测点名称:' prop='lineName'>
<el-input v-model.trim='form.lineName' autocomplete='off' placeholder='请输入监测点名称' maxlength='32'
show-word-limit />
<el-form-item for="-" label="监测点名称:" prop="lineName">
<el-input v-model="form.lineName" autocomplete="off" placeholder="请输入监测点名称" />
</el-form-item>
<!-- {{ voltageLevelList[2].value * 10 }}:{{ 1 }} -->
<el-form-item for='-' label='监测点电压等级:' prop='voltageLevel'>
<el-select v-model='form.voltageLevel' clearable style='width: 100%' placeholder='请选择监测点电压等级'
filterable
@change='changevoltageDeviationLimit'>
<el-option v-for='item in voltageLevelList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="监测点电压等级:" prop="voltageLevel">
<el-select v-model="form.voltageLevel" clearable style="width: 100%" placeholder="请选择监测点电压等级" filterable
@change="changevoltageDeviationLimit">
<el-option v-for="item in voltageLevelList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='PT变比' prop='pt1'>
<el-input style='width: 48%' v-model.trim='form.pt1' autocomplete='off' placeholder='请输入PT变比'
oninput="value=value.replace(/[^0-9.]/g,'')" maxlength='8' show-word-limit />
<el-input style='width: 48%' v-model.trim='form.pt2' autocomplete='off' placeholder='请输入PT变比'
oninput="value=value.replace(/[^0-9.]/g,'')" maxlength='8' show-word-limit />
<el-form-item for="-" label="PT变比" prop="pt1">
<el-input style="width: 48%" v-model="form.pt1" autocomplete="off" placeholder="请输入PT变比"
oninput="value=value.replace(/[^0-9.]/g,'')" />
<el-input style="width: 48%" v-model="form.pt2" autocomplete="off" placeholder="请输入PT变比"
oninput="value=value.replace(/[^0-9.]/g,'')" />
</el-form-item>
<el-form-item for='-' label='CT变比' prop='ct1'>
<el-input v-model.trim='form.ct1' style='width: 48%' autocomplete='off'
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder='请输入CT变比' maxlength='8'
show-word-limit />
<el-input v-model.trim='form.ct2' style='width: 48%' autocomplete='off'
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder='请输入CT变比' maxlength='8'
show-word-limit />
<el-form-item for="-" label="CT变比" prop="ct1">
<el-input v-model="form.ct1" style="width: 48%" autocomplete="off"
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="请输入CT变比" />
<el-input v-model="form.ct2" style="width: 48%" autocomplete="off"
oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="请输入CT变比" />
</el-form-item>
<el-form-item for='-' label='短路容量:' prop='shortCapacity'>
<el-input v-model.trim='form.shortCapacity' autocomplete='off' oninput="value=value.replace(/[^\-?\d.]/g,'')
<el-form-item for="-" label="短路容量:" prop="shortCapacity">
<el-input v-model="form.shortCapacity" autocomplete="off" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入短路容量' maxlength='6' show-word-limit>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入短路容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' label='协议容量:' prop='dealCapacity'>
<el-input v-model.trim='form.dealCapacity' autocomplete='off' oninput="value=value.replace(/[^\-?\d.]/g,'')
<el-form-item for="-" label="协议容量:" prop="dealCapacity">
<el-input v-model="form.dealCapacity" autocomplete="off" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入协议容量' maxlength='6' show-word-limit>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入协议容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' label='终端容量:' prop='devCapacity'>
<el-input v-model.trim='form.devCapacity' autocomplete='off' oninput="value=value.replace(/[^\-?\d.]/g,'')
<el-form-item for="-" label="终端容量:" prop="devCapacity">
<el-input v-model="form.devCapacity" autocomplete="off" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入终端容量' maxlength='6' show-word-limit>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入终端容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' label='基准容量:' prop='standardCapacity'>
<el-input v-model.trim='form.standardCapacity' autocomplete='off' oninput="value=value.replace(/[^\-?\d.]/g,'')
<el-form-item for="-" label="基准容量:" prop="standardCapacity">
<el-input v-model="form.standardCapacity" autocomplete="off" oninput="value=value.replace(/[^\-?\d.]/g,'')
.replace(/^\./g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder='请输入基准容量' maxlength='6' show-word-limit>
.replace('-','$#$').replace(/\-/g,'').replace('$#$','-')" placeholder="请输入基准容量">
<template #append>MVA</template>
</el-input>
</el-form-item>
<el-form-item for='-' label='干扰源类型:' prop='loadType'>
<el-select v-model='form.loadType' style='width: 100%' placeholder='请选择干扰源类型'
@change='changeLoadType'>
<el-option v-for='item in loadTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="干扰源类型:" prop="loadType">
<el-select v-model="form.loadType" style="width: 100%" placeholder="请选择干扰源类型" @change="changeLoadType">
<el-option v-for="item in loadTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='干扰源类别:' prop='businessType'>
<el-select v-model='form.businessType' style='width: 100%' placeholder='请选择干扰源类别'>
<el-option v-for='item in businessTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="干扰源类别:" prop="businessType">
<el-select v-model="form.businessType" style="width: 100%" placeholder="请选择干扰源类别">
<el-option v-for="item in businessTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='接线方式:'>
<el-select v-model='form.ptType' clearable style='width: 100%' placeholder='请选择接线方式'>
<el-option v-for='item in ptTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="接线方式:">
<el-select v-model="form.ptType" clearable style="width: 100%" placeholder="请选择接线方式">
<el-option v-for="item in ptTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='线路号:'>
<el-select v-model='form.num' clearable style='width: 100%' placeholder='请选择线路号'>
<el-option v-for='item in numList' :key='item.id' :label='item.name' :value='item.id'></el-option>
<el-form-item for="-" label="线路号:">
<el-select v-model="form.num" clearable style="width: 100%" placeholder="请选择线路号">
<el-option v-for="item in numList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='电压偏差上限:' prop='voltageDeviationUpperLimit'>
<el-input-number style='width: 100%' v-model='form.voltageDeviationUpperLimit' />
<el-form-item for="-" label="电压偏差上限:" prop="voltageDeviationUpperLimit">
<el-input-number style="width: 100%" v-model="form.voltageDeviationUpperLimit" />
</el-form-item>
<el-form-item for='-' label='电压偏差下限:' prop='voltageDeviationLowerLimit'>
<el-input-number style='width: 100%' v-model='form.voltageDeviationLowerLimit' />
<el-form-item for="-" label="电压偏差下限:" prop="voltageDeviationLowerLimit">
<el-input-number style="width: 100%" v-model="form.voltageDeviationLowerLimit" />
</el-form-item>
<el-form-item for='-' label='测量间隔:' prop='timeInterval'>
<el-select v-model='form.timeInterval' placeholder='请选择测量间隔'>
<el-option v-for='(item, index) in timeIntervalList' :label='item.name' :value='item.id'
:key='index' />
<el-form-item for="-" label="测量间隔:" prop="timeInterval">
<el-select v-model="form.timeInterval" placeholder="请选择测量间隔">
<el-option v-for="(item, index) in timeIntervalList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<!-- <el-form-item for="-" label="上送网公司编码:">
<el-form-item for="-" label="上送网公司编码:">
<el-input v-model="form.lineId" autocomplete="off" placeholder="请输入上送网公司编码" />
</el-form-item> -->
<el-form-item for='-' label='监测点性质:' prop='pointNature'>
<el-select v-model='form.pointNature' placeholder='请选择监测点性质'>
<el-option v-for='(item, index) in pointNatureList' :label='item.name' :value='item.id'
:key='index' />
</el-form-item>
<el-form-item for="-" label="监测点性质:" prop="pointNature">
<el-select v-model="form.pointNature" placeholder="请选择监测点性质">
<el-option v-for="(item, index) in pointNatureList" :label="item.name" :value="item.id"
:key="index" />
</el-select>
</el-form-item>
<el-form-item for='-' label='是否参与统计:' prop='isStatistical'>
<el-radio-group v-model='form.isStatistical'>
<el-radio :value='1'></el-radio>
<el-radio :value='0'></el-radio>
<el-form-item for="-" label="是否参与统计:" prop="isStatistical">
<el-radio-group v-model="form.isStatistical">
<el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio>
</el-radio-group>
</el-form-item>
<!-- <el-form-item for="-" label="对象名称(对端)" prop="objName">
<el-input v-model="form.objName" autocomplete="off" placeholder="请输入监测点对象名称" />
</el-form-item> -->
<el-form-item for='-' label='电网侧变电站:' prop='powerSubstationName'>
<el-input v-model.trim='form.powerSubstationName' autocomplete='off' placeholder='请输入电网侧变电站'
maxlength='32' show-word-limit />
<el-form-item for="-" label="电网侧变电站:" prop="powerSubstationName">
<el-input v-model="form.powerSubstationName" autocomplete="off" placeholder="请输入电网侧变电站" />
</el-form-item>
<el-form-item for='-' label='是否并网点:' prop='isGridConnectionPoint'>
<el-radio-group v-model='form.isGridConnectionPoint'>
<el-radio :value='1'></el-radio>
<el-radio :value='0'></el-radio>
<el-form-item for="-" label="是否并网点:" prop="isGridConnectionPoint">
<el-radio-group v-model="form.isGridConnectionPoint">
<el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' label='主接线图:' prop='mainWiringDiagram' class='uploadFile'>
<el-upload v-model:file-list='form.mainWiringDiagram' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('mainWiringDiagram')" :on-remove='removeFile'>
<el-form-item for="-" label="主接线图:" prop="mainWiringDiagram" class="uploadFile">
<el-upload v-model:file-list="form.mainWiringDiagram" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('mainWiringDiagram')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button @click='close()'>取消</el-button>
<el-button type='primary' @click='confirmForm(true)' :loading='loading'>保存</el-button>
<el-button type='primary' @click='confirmForm(false)' :loading='loading'>提交审批</el-button>
<div class="dialog-footer">
<el-button @click="close()">取消</el-button>
<el-button type="primary" @click="confirmForm(true)" :loading="loading">保存</el-button>
<el-button type="primary" @click="confirmForm(false)" :loading="loading">提交审批</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang='ts' setup>
<script lang="ts" setup>
import { ref, onMounted, reactive, defineExpose, nextTick, defineEmits, watch, onUnmounted } from 'vue'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
import { genFileId, ElMessage } from 'element-plus'
@@ -220,7 +210,6 @@ import { addMointorPointFormData, getList, updateMointorPointFormData } from '@/
import { queryByAllCode } from '@/api/system-boot/dictTree'
import { getUserReportById } from '@/api/supervision-boot/userReport/form'
import { getDictTreeById } from '@/api/system-boot/dictTree'
const emits = defineEmits(['onSubmit'])
const dictData = useDictData()
const dialogFormVisible = ref(false)
@@ -418,7 +407,7 @@ const resetForm = async () => {
devCapacity: 10, //终端容量
standardCapacity: 10, //基准容量
isGridConnectionPoint: 0, //是否并网点
isStatistical: 1, // 是否参与统计
isStatistical: 0, // 是否参与统计
lineId: '', // 监测点编码
lineName: '', // 监测点名称
loadType: '', //干扰源类型
@@ -614,8 +603,6 @@ const getDictTree = (e?: string) => {
businessTypeList.value = []
}
}
// 特殊字符正则表达式
const specialCharRegex = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/
//定义校验规则
const rules = ref({
//基础信息
@@ -681,16 +668,6 @@ const rules = ref({
required: true,
message: '请输入监测点名称',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}
],
voltageLevel: [
@@ -703,17 +680,7 @@ const rules = ref({
connectedBus: [
{
required: true,
message: '请输入接入母线',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
message: '请选择接入母线',
trigger: 'blur'
}
],
@@ -811,18 +778,8 @@ const rules = ref({
powerSubstationName: [
{
required: true,
message: '请输入电网侧变电站',
message: '请选择电网侧变电站',
trigger: 'change'
},
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}
],
isGridConnectionPoint: [
@@ -904,8 +861,7 @@ const close = () => {
dialogFormVisible.value = false
emits('onSubmit')
}
onMounted(() => {
})
onMounted(() => { })
watch(
() => projectList.value,
@@ -1041,8 +997,8 @@ const confirmForm = async (flag: boolean) => {
resetForm()
close()
}).catch(() => {
loading.value = false
})
loading.value = false
})
} else {
confirmFormData.id = resendId.value
await updateMointorPointFormData(confirmFormData).then(res => {
@@ -1056,8 +1012,8 @@ const confirmForm = async (flag: boolean) => {
close()
}
}).catch(() => {
loading.value = false
})
loading.value = false
})
}
} else {
// // console.log('表单验证失败')
@@ -1071,7 +1027,7 @@ const confirmForm = async (flag: boolean) => {
}
defineExpose({ open })
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.fixed_upload {
width: 100%;
height: auto;

View File

@@ -30,7 +30,7 @@
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label="接入场站">
<el-descriptions-item label="关联干扰源">
{{ detailData.userName }}
</el-descriptions-item>
<el-descriptions-item label="关联终端">

View File

@@ -1,10 +1,10 @@
<!---终端入网检测-->
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select>
<el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端、监测点名称"
clearable maxlength="32" show-word-limit style="width: 230px"></el-input>
clearable style="width: 230px"></el-input>
</el-form-item>
<el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -56,6 +56,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/tempLine/list',
publicHeight: 65,
method: 'POST',
filename:'监测点台账录入',
column: [
{
width: '60',
@@ -181,6 +182,21 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
})
tableStore.table.params.status = ''

View File

@@ -1,35 +1,35 @@
<template>
<el-dialog v-model='dialogFormVisible' :title='title' width='65%' :append-to-body='true' :before-close='close'
:close-on-click-modal='false' :lazy='true' draggable>
<el-dialog v-model="dialogFormVisible" :title="title" width="65%" :append-to-body="true" :before-close="close"
:close-on-click-modal="false" :lazy="true" draggable>
<!-- <el-anchor :container="containerRef" direction="vertical" type="default" :offset="30" @click="handleClick">
<el-anchor-link href="#part1" title="基础信息" />
<el-anchor-link href="#part2" title="终端信息" />
<el-anchor-link href="#part3" title="附件材料" />
</el-anchor> -->
<!--终端信息录入 基础信息+终端信息+附件材料 -->
<el-form :model='form' :validate-on-rule-change='false' :scroll-to-error='true' :rules='rules' ref='ruleFormRef'
label-width='auto' class='form-two'>
<el-form :model="form" :validate-on-rule-change="false" :scroll-to-error="true" :rules="rules" ref="ruleFormRef"
label-width="auto" class="form-two">
<!-- <el-tabs tab-position="left" class="tabs_form" v-model="activeName"> -->
<el-divider content-position='left'>基础信息</el-divider>
<el-divider content-position="left">基础信息</el-divider>
<!-- <div id="part1" class="form-two"> -->
<el-form-item for='-' label='填报人:' prop='reporter'>
<el-input v-model.trim='form.reporter' autocomplete='off' placeholder='请输入填报人' :disabled='true' />
<el-form-item for="-" label="填报人:" prop="reporter">
<el-input v-model="form.reporter" autocomplete="off" placeholder="请输入填报人" :disabled="true" />
</el-form-item>
<el-form-item for='-' label='填报日期:' prop='reportDate'>
<el-date-picker :disabled='true' style='width: 100%' v-model='form.reportDate' type='date'
placeholder='请选择填报日期' />
<el-form-item for="-" label="填报日期:" prop="reportDate">
<el-date-picker :disabled="true" style="width: 100%" v-model="form.reportDate" type="date"
placeholder="请选择填报日期" />
</el-form-item>
<el-form-item for='-' label='填报部门:' prop='orgId'>
<el-input v-model.trim='form.orgId' :disabled='true' autocomplete='off' />
<el-form-item for="-" label="填报部门:" prop="orgId">
<el-input v-model="form.orgId" :disabled="true" autocomplete="off" />
</el-form-item>
<el-form-item for='-' label='工程投产日期:' prop='expectedProductionDate'>
<el-date-picker style='width: 100%' v-model='form.expectedProductionDate' type='date'
format='YYYY-MM-DD' value-format='YYYY-MM-DD' placeholder='请选择工程投产日期' />
<el-form-item for="-" label="工程投产日期:" prop="expectedProductionDate">
<el-date-picker style="width: 100%" v-model="form.expectedProductionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择工程投产日期" />
</el-form-item>
<el-form-item for='-' label='所在地市:' prop='city'>
<el-select v-model='form.city' clearable style='width: 100%' placeholder='请选择所在地市'>
<el-option v-for='item in areaOptionList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="所在地市:" prop="city">
<el-select v-model="form.city" clearable style="width: 100%" placeholder="请选择所在地市">
<el-option v-for="item in areaOptionList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<!-- <el-col :span="12">
@@ -67,301 +67,279 @@
</el-form-item>
-->
<!-- </div> -->
<el-divider content-position='left'>终端信息</el-divider>
<el-divider content-position="left">终端信息</el-divider>
<!-- <div id="part2" class="form-two"> -->
<div class='fixed_upload' v-if='false'>
<el-upload v-model:file-list='form.deviceFilePath' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('deviceFilePath')" :on-remove='removeFile'>
<div class="fixed_upload" v-if="false">
<el-upload v-model:file-list="form.deviceFilePath" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>终端台账信息</el-button>
<el-button type="primary">终端台账信息</el-button>
</template>
</el-upload>
</div>
<el-form-item for='-' label='系统电站:' prop='customSubstationFlag'>
<el-form-item for="-" label="系统电站:" prop="customSubstationFlag">
<!-- 默认值 开启 -->
<el-radio-group v-model='form.customSubstationFlag' @change='changeSubstationFlag'>
<el-radio :value='0'></el-radio>
<el-radio :value='1'></el-radio>
<el-radio-group v-model="form.customSubstationFlag" @change="changeSubstationFlag">
<el-radio :value="0"></el-radio>
<el-radio :value="1"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' label='所属供电公司:' prop='powerCompany'>
<el-select v-model='form.powerCompany' clearable style='width: 100%' placeholder='请选择所属供电公司'
@change='findSubstationVoltageLevel'>
<el-option v-for='item in powerCompanyList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="所属供电公司:" prop="powerCompany">
<el-select v-model="form.powerCompany" clearable style="width: 100%" placeholder="请选择所属供电公司"
@change="findSubstationVoltageLevel">
<el-option v-for="item in powerCompanyList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' v-if='form.customSubstationFlag == 0' label='并网变电站:' prop='substation'>
<el-select v-model='form.substation' clearable style='width: 100%' placeholder='请选择并网变电站'
filterable
@change='changeSubstation'>
<el-option v-for='item in substationList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" v-if="form.customSubstationFlag == 0" label="并网变电站:" prop="substation">
<el-select v-model="form.substation" clearable style="width: 100%" placeholder="请选择并网变电站" filterable
@change="changeSubstation">
<el-option v-for="item in substationList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' v-if='form.customSubstationFlag == 1' label='并网变电站:' prop='substationName'>
<el-input v-model.trim='form.substationName' autocomplete='off' placeholder='请输入并网变电站' />
<el-form-item for="-" v-if="form.customSubstationFlag == 1" label="并网变电站:" prop="substationName">
<el-input v-model="form.substationName" autocomplete="off" placeholder="请输入并网变电站" />
</el-form-item>
<el-form-item for='-' label='变电站电压等级:' prop='substationVoltageLevel'>
<el-select v-model='form.substationVoltageLevel' clearable style='width: 100%'
placeholder='请选择变压站电压等级'>
<el-option v-for='item in voltageLevelList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="变电站电压等级:" prop="substationVoltageLevel">
<el-select v-model="form.substationVoltageLevel" clearable style="width: 100%" placeholder="请选择变压站电压等级">
<el-option v-for="item in voltageLevelList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='经度:' prop='longitude'>
<el-input v-model.trim='form.longitude' :disabled='form.customSubstationFlag == 0' type='text'
placeholder='请输入经度' />
<el-form-item for="-" label="经度:" prop="longitude">
<el-input v-model="form.longitude" :disabled="form.customSubstationFlag == 0" type="text"
placeholder="请输入经度" />
</el-form-item>
<el-form-item for='-' label='纬度:' prop='latitude'>
<el-input v-model.trim='form.latitude' :disabled='form.customSubstationFlag == 0' type='text'
placeholder='请输入纬度' />
<el-form-item for="-" label="纬度:" prop="latitude">
<el-input v-model="form.latitude" :disabled="form.customSubstationFlag == 0" type="text"
placeholder="请输入纬度" />
</el-form-item>
<el-form-item for='-' label='终端编码:' prop='monitoringTerminalCode'>
<el-input v-model.trim='form.monitoringTerminalCode' autocomplete='off' placeholder='请输入终端编码'
@input='encode' maxlength='32' show-word-limit />
</el-form-item>
<el-form-item for='-' label='终端名称:' prop='monitoringTerminalName'>
<el-input v-model.trim='form.monitoringTerminalName' autocomplete='off' placeholder='请输入终端名称'
maxlength='32' show-word-limit />
</el-form-item>
<el-form-item for='-' label='终端型号:' prop='terminalType'>
<el-select v-model='form.terminalType' filterable clearable style='width: 100%'
placeholder='请选择终端型号'>
<el-option v-for='item in terminalTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='通讯类型:'>
<el-select v-model='form.frontType' clearable style='width: 100%' placeholder='请选择通讯类型'>
<el-option v-for='item in frontTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="终端型号:" prop="terminalType">
<el-select v-model="form.terminalType" filterable clearable style="width: 100%" placeholder="请选择终端型号">
<el-option v-for="item in terminalTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if='false' for='-' label='通讯状态:' prop='communicationStatus'>
<el-select v-model='form.communicationStatus' clearable style='width: 100%' placeholder='请选择通讯状态'
:disabled='true'>
<el-option v-for='item in communicationStatusList' :key='item.id' :label='item.name'
:value='item.id' :disabled="item.id == '1'"></el-option>
<el-form-item for="-" label="终端名称:" prop="monitoringTerminalName">
<el-input v-model="form.monitoringTerminalName" autocomplete="off" placeholder="请输入终端名称" />
</el-form-item>
<el-form-item for="-" label="通讯类型:">
<el-select v-model="form.frontType" clearable style="width: 100%" placeholder="请选择通讯类型">
<el-option v-for="item in frontTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='终端IP' prop='terminalIp'>
<el-input oninput="value=value.replace(/[^0-9.]/g,'')" v-model.trim='form.terminalIp' autocomplete='off'
placeholder='请输入终端IP' />
<el-form-item for="-" label="终端编码:" prop="monitoringTerminalCode">
<el-input v-model="form.monitoringTerminalCode" autocomplete="off" placeholder="请输入终端编码"
@change="encode" />
</el-form-item>
<el-form-item for='-' label='端口:' prop='terminalPort'>
<el-input oninput="value=value.replace(/[^0-9.]/g,'')" v-model.trim='form.terminalPort'
autocomplete='off'
placeholder='请输入端口' maxlength='5' show-word-limit />
</el-form-item>
<el-form-item for='-' label='投运时间:' prop='commissioningTime'>
<el-date-picker style='width: 100%' v-model='form.commissioningTime' type='datetime'
format='YYYY/MM/DD hh:mm:ss' value-format='YYYY-MM-DD hh:mm:ss'
placeholder='请选择投运时间' />
</el-form-item>
<el-form-item for='-' label='数据更新时间:' prop='dataUpdateTime'>
<el-date-picker :disabled='true' style='width: 100%' v-model='form.dataUpdateTime' type='datetime'
placeholder='请选择数据更新时间' />
</el-form-item>
<el-form-item for='-' label='所属前置机:' prop='frontEndMachine'>
<el-select v-model='form.frontEndMachine' clearable style='width: 100%' placeholder='请选择所属前置机'>
<el-option v-for='item in frontEndMachineList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item v-if="false" for="-" label="通讯状态:" prop="communicationStatus">
<el-select v-model="form.communicationStatus" clearable style="width: 100%" placeholder="请选择通讯状态"
:disabled="true">
<el-option v-for="item in communicationStatusList" :key="item.id" :label="item.name"
:value="item.id" :disabled="item.id == '1'"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='监测终端安装位置:' prop='monitoringDeviceInstallationPosition'
class='label_over_warp'>
<el-form-item for="-" label="终端IP" prop="terminalIp">
<el-input oninput="value=value.replace(/[^0-9.]/g,'')" v-model="form.terminalIp" autocomplete="off"
placeholder="请输入终端IP" />
</el-form-item>
<el-form-item for="-" label="端口:" prop="terminalPort">
<el-input oninput="value=value.replace(/[^0-9.]/g,'')" v-model="form.terminalPort" autocomplete="off"
placeholder="请输入端口" />
</el-form-item>
<el-form-item for="-" label="投运时间:" prop="commissioningTime">
<el-date-picker style="width: 100%" v-model="form.commissioningTime" type="datetime"
format="YYYY/MM/DD hh:mm:ss" value-format="YYYY-MM-DD hh:mm:ss" placeholder="请选择投运时间" />
</el-form-item>
<el-form-item for="-" label="数据更新时间:" prop="dataUpdateTime">
<el-date-picker :disabled="true" style="width: 100%" v-model="form.dataUpdateTime" type="datetime"
placeholder="请选择数据更新时间" />
</el-form-item>
<el-form-item for="-" label="所属前置机:" prop="frontEndMachine">
<el-select v-model="form.frontEndMachine" clearable style="width: 100%" placeholder="请选择所属前置机">
<el-option v-for="item in frontEndMachineList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for="-" label="监测终端安装位置:" prop="monitoringDeviceInstallationPosition" class="label_over_warp">
<!-- 电网侧用户侧 -->
<el-select v-model='form.monitoringDeviceInstallationPosition' clearable style='width: 100%'
placeholder='请选择监测终端安装位置'>
<el-option v-for='item in monitoringDeviceInstallationPositionList' :key='item.id'
:label='item.name' :value='item.id'></el-option>
<el-select v-model="form.monitoringDeviceInstallationPosition" clearable style="width: 100%"
placeholder="请选择监测终端安装位置">
<el-option v-for="item in monitoringDeviceInstallationPositionList" :key="item.id"
:label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='识别码:' prop='identificationCode'>
<el-input v-model.trim='form.identificationCode' autocomplete='off' placeholder='请输入识别码'
maxlength='64' show-word-limit />
<el-form-item for="-" label="识别码:" prop="identificationCode">
<el-input v-model="form.identificationCode" autocomplete="off" placeholder="请输入识别码" />
</el-form-item>
<el-form-item for='-' label='终端秘钥:' prop='terminalSecretKey'>
<el-input v-model.trim='form.terminalSecretKey' autocomplete='off' placeholder='请输入终端秘钥'
maxlength='64' show-word-limit />
<el-form-item for="-" label="终端秘钥:" prop="terminalSecretKey">
<el-input v-model="form.terminalSecretKey" autocomplete="off" placeholder="请输入终端秘钥" />
</el-form-item>
<el-form-item for='-' label='终端模型:' prop='terminalModel'>
<el-select v-model='form.terminalModel' clearable style='width: 100%' placeholder='请选择终端模型'>
<el-option v-for='item in terminalModelList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="终端模型:" prop="terminalModel">
<el-select v-model="form.terminalModel" clearable style="width: 100%" placeholder="请选择终端模型">
<el-option v-for="item in terminalModelList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='数据类型:' prop='dataType'>
<el-select v-model='form.dataType' clearable style='width: 100%' placeholder='请选择数据类型'>
<el-option v-for='item in dataTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="数据类型:" prop="dataType">
<el-select v-model="form.dataType" clearable style="width: 100%" placeholder="请选择数据类型">
<el-option v-for="item in dataTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='终端接线方式类型:' prop='terminalWiringMethodType' class='label_over_warp'>
<el-select v-model='form.terminalWiringMethodType' clearable style='width: 100%'
placeholder='请选择终端接线方式类型'>
<el-option v-for='item in terminalWiringMethodTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="终端接线方式类型:" prop="terminalWiringMethodType" class="label_over_warp">
<el-select v-model="form.terminalWiringMethodType" clearable style="width: 100%"
placeholder="请选择终端接线方式类型">
<el-option v-for="item in terminalWiringMethodTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='厂家:' prop='manufacturer'>
<el-select v-model='form.manufacturer' clearable style='width: 100%' placeholder='请选择厂家'>
<el-option v-for='item in manufacturerList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="厂家:" prop="manufacturer">
<el-select v-model="form.manufacturer" clearable style="width: 100%" placeholder="请选择厂家">
<el-option v-for="item in manufacturerList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='本次终端检测时间:' prop='currentTerminalDetectionTime' class='label_over_warp'>
<el-date-picker style='width: 100%' v-model='form.currentTerminalDetectionTime' type='datetime'
placeholder='请选择本次终端检测时间' :disabled-date='disableStartDate' />
<el-form-item for="-" label="本次终端检测时间:" prop="currentTerminalDetectionTime" class="label_over_warp">
<el-date-picker style="width: 100%" v-model="form.currentTerminalDetectionTime" type="datetime"
placeholder="请选择本次终端检测时间" :disabled-date="disableStartDate" />
</el-form-item>
<el-form-item for='-' label='下次终端定检时间:' prop='nextTerminalInspectionTime' class='label_over_warp'>
<el-date-picker style='width: 100%' v-model='form.nextTerminalInspectionTime' type='datetime'
placeholder='请选择下次终端定检时间' :disabled-date='disableEndDate' />
<el-form-item for="-" label="下次终端定检时间:" prop="nextTerminalInspectionTime" class="label_over_warp">
<el-date-picker style="width: 100%" v-model="form.nextTerminalInspectionTime" type="datetime"
placeholder="请选择下次终端定检时间" :disabled-date="disableEndDate" />
</el-form-item>
<el-form-item for='-' label='电压互感器类型:' prop='voltageTransformerType'>
<el-select v-model='form.voltageTransformerType' clearable style='width: 100%'
placeholder='请选择电压互感器类型'>
<el-option v-for='item in voltageTransformerTypeList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="电压互感器类型:" prop="voltageTransformerType">
<el-select v-model="form.voltageTransformerType" clearable style="width: 100%" placeholder="请选择电压互感器类型">
<el-option v-for="item in voltageTransformerTypeList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='中性点接线方式:' prop='neutralPointWiringMethod'>
<el-select v-model='form.neutralPointWiringMethod' clearable style='width: 100%'
placeholder='请选择中性点接线方式'>
<el-option v-for='item in neutralPointWiringMethodList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="中性点接线方式:" prop="neutralPointWiringMethod">
<el-select v-model="form.neutralPointWiringMethod" clearable style="width: 100%"
placeholder="请选择中性点接线方式">
<el-option v-for="item in neutralPointWiringMethodList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='厂家终端编号:' prop='manufacturerDeviceNumber'>
<el-input v-model.trim='form.manufacturerDeviceNumber' autocomplete='off'
placeholder='请输入厂家终端编号' maxlength='64' show-word-limit />
<el-form-item for="-" label="厂家终端编号:" prop="manufacturerDeviceNumber">
<el-input v-model="form.manufacturerDeviceNumber" autocomplete="off" placeholder="请输入厂家终端编号" />
</el-form-item>
<el-form-item for='-' label='SIM卡号' prop='simCardNumber'>
<el-input v-model.trim='form.simCardNumber' autocomplete='off' placeholder='请输入SIM卡号'
maxlength='128' show-word-limit />
<el-form-item for="-" label="SIM卡号" prop="simCardNumber">
<el-input v-model="form.simCardNumber" autocomplete="off" placeholder="请输入SIM卡号" />
</el-form-item>
<el-form-item for='-' label='对时功能:' prop='timeSyncFunction'>
<el-form-item for="-" label="对时功能:" prop="timeSyncFunction">
<!-- 默认值 开启 -->
<el-radio-group v-model='form.timeSyncFunction'>
<el-radio :value='1'>开启</el-radio>
<el-radio :value='0'>关闭</el-radio>
<el-radio-group v-model="form.timeSyncFunction">
<el-radio :value="1">开启</el-radio>
<el-radio :value="0">关闭</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' label='电镀功能:' prop='electroplatingFunction'>
<el-form-item for="-" label="电镀功能:" prop="electroplatingFunction">
<!-- 默认 关闭 下拉框 -->
<el-select v-model='form.electroplatingFunction' clearable style='width: 100%'
placeholder='请选择电镀功能'>
<el-option v-for='item in electroplatingFunctionList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-select v-model="form.electroplatingFunction" clearable style="width: 100%" placeholder="请选择电镀功能">
<el-option v-for="item in electroplatingFunctionList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='召唤标志:' prop='summonFlag'>
<el-select v-model='form.summonFlag' clearable style='width: 100%' placeholder='请选择召唤标志'>
<el-option v-for='item in summonFlagList' :key='item.id' :label='item.name'
:value='item.id'></el-option>
<el-form-item for="-" label="召唤标志:" prop="summonFlag">
<el-select v-model="form.summonFlag" clearable style="width: 100%" placeholder="请选择召唤标志">
<el-option v-for="item in summonFlagList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item for='-' label='告警功能:' prop='alarmFunction'>
<el-radio-group v-model='form.alarmFunction'>
<el-radio value='1'></el-radio>
<el-radio value='0'></el-radio>
<el-form-item for="-" label="告警功能:" prop="alarmFunction">
<el-radio-group v-model="form.alarmFunction">
<el-radio value="1"></el-radio>
<el-radio value="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item for='-' label='合同号:' prop='contractNumber'>
<el-input v-model.trim='form.contractNumber' autocomplete='off' placeholder='请输入合同号'
maxlength='64' show-word-limit />
<el-form-item for="-" label="合同号:" prop="contractNumber">
<el-input v-model="form.contractNumber" autocomplete="off" placeholder="请输入合同号" />
</el-form-item>
<!-- </div> -->
<el-divider content-position='left'>附件材料</el-divider>
<el-form-item for='-' label='信息安全检测报告:' class='uploadFile'>
<el-upload v-model:file-list='form.informationSecurityTestReport' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-exceed='handleExceed' :on-change='choose'
:auto-upload='false'
:on-progress="uploadFileName('informationSecurityTestReport')" :on-remove='removeFile'>
<el-divider content-position="left">附件材料</el-divider>
<el-form-item for="-" label="信息安全检测报告:" class="uploadFile" prop="informationSecurityTestReport">
<el-upload v-model:file-list="form.informationSecurityTestReport" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('informationSecurityTestReport')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item v-if='false' for='-' label='验收检验报告单:' class='uploadFile'
prop='acceptanceInspectionReportSingle'>
<el-upload v-model:file-list='form.acceptanceInspectionReportSingle' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-exceed='handleExceed' :on-change='choose'
:auto-upload='false'
:on-progress="uploadFileName('acceptanceInspectionReportSingle')" :on-remove='removeFile'>
<el-form-item v-if="false" for="-" label="验收检验报告单:" class="uploadFile"
prop="acceptanceInspectionReportSingle">
<el-upload v-model:file-list="form.acceptanceInspectionReportSingle" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('acceptanceInspectionReportSingle')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' label='验收检验报告:' class='uploadFile' prop='acceptanceInspectionReport'>
<el-upload v-model:file-list='form.acceptanceInspectionReport' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-exceed='handleExceed' :on-change='choose'
:auto-upload='false'
:on-progress="uploadFileName('acceptanceInspectionReport')" :on-remove='removeFile'>
<el-form-item for="-" label="验收检验报告:" class="uploadFile" prop="acceptanceInspectionReport">
<el-upload v-model:file-list="form.acceptanceInspectionReport" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('acceptanceInspectionReport')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' label='型式实验报告:' class='uploadFile'>
<el-upload v-model:file-list='form.typeExperimentReport' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('typeExperimentReport')" :on-remove='removeFile'>
<el-form-item for="-" label="型式实验报告:" class="uploadFile" prop="typeExperimentReport">
<el-upload v-model:file-list="form.typeExperimentReport" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('typeExperimentReport')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' label='出厂检验报告:' class='uploadFile'>
<el-upload v-model:file-list='form.factoryInspectionReport' ref='uploadRef' action=''
:accept='acceptType' :limit='1' :on-exceed='handleExceed' :on-change='choose'
:auto-upload='false'
:on-progress="uploadFileName('factoryInspectionReport')" :on-remove='removeFile'>
<el-form-item for="-" label="出厂检验报告:" class="uploadFile" prop="factoryInspectionReport">
<el-upload v-model:file-list="form.factoryInspectionReport" ref="uploadRef" action=""
:accept="acceptType" :limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('factoryInspectionReport')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' label='性能检测报告:' class='uploadFile'>
<el-upload v-model:file-list='form.performanceTestReport' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('performanceTestReport')" :on-remove='removeFile'>
<el-form-item for="-" label="性能检测报告:" class="uploadFile" prop="performanceTestReport">
<el-upload v-model:file-list="form.performanceTestReport" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('performanceTestReport')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
<el-form-item for='-' label='其他附件:' class='uploadFile'>
<el-upload v-model:file-list='form.otherAttachments' ref='uploadRef' action='' :accept='acceptType'
:limit='1' :on-exceed='handleExceed' :on-change='choose' :auto-upload='false'
:on-progress="uploadFileName('otherAttachments')" :on-remove='removeFile'>
<el-form-item for="-" label="其他附件:" class="uploadFile" prop="otherAttachments">
<el-upload v-model:file-list="form.otherAttachments" ref="uploadRef" action="" :accept="acceptType"
:limit="1" :on-exceed="handleExceed" :on-change="choose" :auto-upload="false"
:on-progress="uploadFileName('otherAttachments')" :on-remove="removeFile">
<template #trigger>
<el-button type='primary'>上传文件</el-button>
<el-button type="primary">上传文件</el-button>
</template>
</el-upload>
</el-form-item>
</el-form>
<template #footer>
<div class='dialog-footer'>
<el-button @click='close()'>取消</el-button>
<el-button type='primary' @click='confirmForm(true)' :loading='loading'>保存</el-button>
<el-button type='primary' @click='confirmForm(false)' :loading='loading'
v-if='importType != 1'>提交审批
</el-button>
<div class="dialog-footer">
<el-button @click="close()">取消</el-button>
<el-button type="primary" @click="confirmForm(true)" :loading="loading">保存</el-button>
<el-button type="primary" @click="confirmForm(false)" :loading="loading"
v-if="importType != 1">提交审批</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang='ts' setup>
<script lang="ts" setup>
import { ref, onMounted, reactive, defineExpose, defineProps, defineEmits, watch, onUnmounted } from 'vue'
// import { upload, insertTerminal, updateTerminal } from '@/api/process-boot/terminal'
import type { UploadInstance, UploadProps, UploadRawFile } from 'element-plus'
@@ -379,7 +357,6 @@ import {
import { getAllDeptList } from '@/api/common'
import { getTerminalDetailsById } from '@/api/supervision-boot/terminal/index'
import { nodeAllList } from '@/api/device-boot/Business'
const emits = defineEmits(['onSubmit'])
const dictData = useDictData()
const dialogFormVisible = ref(false)
@@ -455,7 +432,7 @@ const terminalModelList = [
const substationList: any = ref([])
//字典获取通讯类型
const frontTypeList = dictData.getBasicData('Front_Type', ['CLD', '61850'])
console.log('🚀 ~ frontTypeList:', frontTypeList)
console.log("🚀 ~ frontTypeList:", frontTypeList)
//定义通讯状态下拉框数据
const communicationStatusList = [
{
@@ -718,9 +695,6 @@ const longitudeReg = /^[-+]?((180(\.0{1,10})?)|(1[0-7][0-9](\.\d{1,10})?)|([1-9]
// 纬度正则表达式
const latitudeReg = /^[-+]?((90(\.0{1,10})?)|([1-8]?\d(\.\d{1,10})?)|(0(\.\d{1,10})?))$/
// 特殊字符正则表达式
const specialCharRegex = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/
//定义校验规则
const rules = ref({
//基础信息
@@ -814,16 +788,6 @@ const rules = ref({
required: true,
message: '请输入终端编码',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}
],
monitoringTerminalName: [
@@ -831,16 +795,6 @@ const rules = ref({
required: true,
message: '请输入监测名称',
trigger: 'blur'
},
{
validator: (rule, value, callback) => {
if (specialCharRegex.test(value)) {
callback(new Error('输入包含不允许的特殊字符'))
} else {
callback()
}
},
trigger: 'blur'
}
],
voltageTransformerType: [
@@ -1175,10 +1129,10 @@ const choose = (e: any) => {
if (uploadName.value == 'deviceFilePath') {
deviceFilePath.value = res.data.name
}
//验收检验报告单
// else if (uploadName.value == 'acceptanceInspectionReportSingle') {
// acceptanceInspectionReportSingle.value = res.data.name
// }
//验收检验报告单
// else if (uploadName.value == 'acceptanceInspectionReportSingle') {
// acceptanceInspectionReportSingle.value = res.data.name
// }
//验收检验报告
else if (uploadName.value == 'acceptanceInspectionReport') {
acceptanceInspectionReport.value = res.data.name
@@ -1212,7 +1166,7 @@ const disabledDate = time => {
const importType = ref(null)
const resendId = ref('')
const open = async (row: any) => {
console.log('🚀 ~ open ~ row:', row.row)
let flag = row.row ? true : false
importType.value = null
if (!flag) await getPowerCompanyList(false)
@@ -1359,8 +1313,8 @@ const confirmForm = async (flag: boolean) => {
close()
}
}).catch(() => {
loading.value = false
})
loading.value = false
})
} else {
confirmFormData.reporter = adminInfo.$state.id
confirmFormData.orgId = adminInfo.$state.deptId
@@ -1378,8 +1332,8 @@ const confirmForm = async (flag: boolean) => {
close()
}
}).catch(() => {
loading.value = false
})
loading.value = false
})
}
} else {
console.log('表单验证失败')
@@ -1397,7 +1351,7 @@ const encode = (e: string) => {
}
defineExpose({ open })
</script>
<style lang='scss' scoped>
<style lang="scss" scoped>
.fixed_upload {
width: 100%;
height: auto;

View File

@@ -1,9 +1,9 @@
<template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll showExport ref="TableHeaderRef">
<template #select>
<el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端名称"
clearable maxlength="32" show-word-limit style="width: 180px"></el-input>
clearable style="width: 180px"></el-input>
</el-form-item>
<el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -69,12 +69,13 @@ const tableStore = new TableStore({
url: '/supervision-boot/deVReport/list',
publicHeight: 65,
method: 'POST',
filename:'终端入网检测',
column: [
{
width: '60',
type: 'checkbox'
},
{ title: '序号', width: 80,formatter: (row: any) => {
{ title: '序号', width: 80,formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} },
{
@@ -217,6 +218,21 @@ const tableStore = new TableStore({
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName
},
exportProcessingData: () => {
tableStore.table.allData = tableStore.table.allData.filter(item => {
item.status =
item.status == 0
? '待提交审批'
: item.status == 1
? '审批中'
: item.status == 2
? '审批通过'
: item.status == 3
? '审批不通过'
: '已取消'
return item
})
}
})
tableStore.table.params.status = ''

View File

@@ -96,15 +96,11 @@ const submit = async () => {
let data = new FormData()
data.append('file', form.file)
await deVReportImportSensitive(data)
.then(res =>{
handleImportResponse(title.value, res)
.then(res => handleImportResponse(title.value, res))
.finally(() => {
tableStore.index()
eventDataUploadVisible.value = false
ElMessage.success('导入成功!')
}).catch(() => {
ElMessage.warning('导入失败!')
})
}
})
} else {

View File

@@ -4,12 +4,12 @@
<el-tab-pane label="终端入网检测" name="1">
<terminal :id="id" v-if="activeName == '1'" />
</el-tab-pane>
<!-- <el-tab-pane label="监测点台账录入" name="2">
<el-tab-pane label="监测点台账录入" name="2">
<monitorpoint :id="id" v-if="activeName == '2'" />
</el-tab-pane>
<el-tab-pane label="监测点联调列表" name="3">
<jointDebugList :id="id" v-if="activeName == '3'" />
</el-tab-pane> -->
</el-tab-pane>
<el-tab-pane label="终端周期检测" name="4">
<cycleDetection :id="id" :businessKey='key' v-if="activeName == '4'" />
</el-tab-pane>

View File

@@ -1,71 +1,452 @@
<!---试运行列表-->
<template>
<div class="default-main">
<el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="监测点台账录入" name="1">
<monitorpoint :id="id" v-if="activeName == '1'" />
</el-tab-pane>
<el-tab-pane label="监测点联调列表" name="2">
<jointDebugList :id="id" v-if="activeName == '2'" />
</el-tab-pane>
<el-tab-pane label="试运行评估" name="3">
<testRun :id="id" v-if="activeName == '3'" />
</el-tab-pane>
</el-tabs>
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef">
<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>
</template>
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="startRunTest">试运行</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
</template>
</TableHeader>
<Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- <el-dialog
v-model='timeDialog'
width='500px'
append-to-body
destroy-on-close>
<div class='block'>
<span class="demonstration">试运行时间</span>
<el-date-picker
:popper-append-to-body="false"
:v-model="dateValue"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetimerange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
<div class='block' style='text-align: center'>
<el-button type='primary' style='margin-top: 50px' @click='runTestSubmit'>确认</el-button>
</div>
</el-dialog>-->
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue'
</template>
<script setup lang="ts">
import { ref, onMounted, provide, reactive } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useRoute, useRouter } from 'vue-router'
import { useDictData } from '@/stores/dictData'
import { ElMessage, ElMessageBox } from 'element-plus'
import { addRunTest, update, cancel } from '@/api/supervision-boot/lineRunTest'
import { formatDate } from '@/utils/formatTime'
import { VxeTablePropTypes } from 'vxe-table'
import { useAdminInfo } from '@/stores/adminInfo'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import { deleteTempLineRunTestReport } from '@/api/supervision-boot/delete/index'
const dictData = useDictData()
const statusSelect = dictData.statusSelect()
const { push } = useRouter()
const adminInfo = useAdminInfo()
const TableHeaderRef = ref()
const tableRef = ref()
import { mainHeight } from '@/utils/layout'
import monitorpoint from '@/views/pqs/supervise/terminalNetworkDetection/components/monitorpoint/index.vue'
import jointDebugList from '@/views/pqs/supervise/terminalNetworkDetection/components/jointDebugList/index.vue'
import testRun from './testRun.vue'
const tableStore = new TableStore({
url: '/supervision-boot/tempLinedebug/pageHasDebug',
method: 'POST',
// publicHeight: 65,
column: [
{ title: '', type: 'checkbox', width: 40 },
{ field: 'lineName', title: '监测点名称', minWidth: 160 },
{ field: 'connectedBus', title: '接入母线', minWidth: 160 },
// { field: 'monitoringTerminalCode', title: '终端编号', minWidth: 140 },
{ field: 'monitoringTerminalName', title: '终端名称', minWidth: 140 },
{ field: 'powerSubstationName', title: '变电站', minWidth: 160 },
{ field: 'reason', title: '调试原因', minWidth: 160 },
{
field: 'testRunState',
title: '试运行状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
2: 'success',
3: 'danger',
1: 'warning'
},
replaceValue: {
0: '待试运行',
1: '试运行中',
2: '试运行成功',
3: '试运行失败',
null: '待试运行'
}
},
{
field: 'testRunTime',
title: '试运行时间范围',
minWidth: 200,
formatter: row => {
return row.cellValue ? row.cellValue : '/'
}
},
{
field: 'status',
title: '流程状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'warning',
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
0: '待提交审批',
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消',
null: '/',
9: '/'
}
},
{
field: 'createBy',
title: '填报人',
minWidth: 100,
formatter: (row: any) => {
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
{
title: '操作',
minWidth: 230,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '查看报告',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
disabled: row => {
return row.testRunReport == null || row.testRunReport.length == 0
},
click: row => {
// const match = row.filePath.match(/excelreport(\/[^?#]*)/)
import { useRoute } from "vue-router";
defineOptions({
name: 'terminalNetwotk'
})
const activeName = ref('1')
const route = useRoute()
const id = ref('')
const key = ref('')
watch(() => route.query.t, async (newValue, oldValue) => {
if (route.fullPath.includes('terminalNetwotk')) {
let type = (route.query.type as string) || 'null'
if (type == 'null') { }
else if (type == '1') {
activeName.value = '1'
} else if (type == '2') {
activeName.value = '2'
} else if (type == '3') {
activeName.value = '3'
} else {
activeName.value = '4'
}
id.value = (route.query.id as string) || 'null'
key.value = (route.query.key as string) || 'null'
id.value = id.value + '@' + route.query.t
window.open(window.location.origin + '/#/previewFile?' + row.testRunReport)
}
},
{
name: 'productSetting',
title: '下载报告',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
downloadTheReport(row.testRunReport)
},
disabled: row => {
return row.testRunReport == null || row.testRunReport.length == 0
}
},
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
handleAudit(row.processInstanceId, row.historyInstanceId)
},
disabled: row => {
return !row.processInstanceId
}
},
{
name: 'productSetting',
title: '重新试运行',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
monitorIds = []
monitorIds.push(row.id)
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: 1,
id: row.id
}
update(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
},
disabled: row => {
return !(row.status == 3 || row.status == 4)
}
},
{
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: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
}, { deep: true, immediate: true })
const layout = mainHeight(63) as any
</script>
<style lang="scss" scoped>
.bars_w {
width: 100%;
height: 500px;
}
:deep(.el-tabs__content) {
height: v-bind('layout.height');
overflow-y: auto;
}
</style>
})
tableStore.table.params.status = ''
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig>({
labelField: '',
checkMethod: ({ row }) => {
return adminInfo.roleCode.includes('delete_info') || !(row.testRunState == 1 || row.testRunState == 2)
}
})
const deleteEven = () => {
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
let createBy = tableStore.table.selection.map(item => item.createBy)
let status = tableStore.table.selection.map(item => item.status)
if (adminInfo.roleCode.includes('delete_info')) {
deleteList()
} else if (createBy.includes(adminInfo.$state.id) && status.includes(0)) {
deleteList()
} else {
ElMessage({
type: 'warning',
message: '只能删除自己填报的数据!!!'
})
}
})
}
}
const deleteList = () => {
deleteTempLineRunTestReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
}
/** 处理审批按钮 */
const handleAudit = (instanceId: any, historyInstanceId: any) => {
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 cancel(data).then(res => {
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
})
}
//试运行
let monitorIds: any = []
const startRunTest = () => {
monitorIds = []
let flag = true
if (tableStore.table.selection.length === 0) {
return ElMessage({
message: '请至少选择一个监测点进行试运行',
type: 'warning'
})
}
tableStore.table.selection.forEach(item => {
if (item.testRunState != 0) {
flag = false
}
if (item.testRunState == 0) {
monitorIds.push(item.id)
}
})
if (!flag) {
return ElMessage({
message: '请选择未试运行的监测点进行试运行',
type: 'warning'
})
return
}
ElMessageBox.confirm('是否确认执行72小时监测点试运行', '试运行', {
confirmButtonText: '确 认',
cancelButtonText: '取 消'
})
.then(() => {
runTestSubmit(0)
})
.catch(() => console.info('操作取消'))
}
// 下载报告
const downloadTheReport = (url: string) => {
getFileNameAndFilePath({ filePath: url }).then((res: any) => {
console.log(res.data.url, 'res')
const link = document.createElement('a')
link.href = res.data.url
link.download = res.data.name
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
}
const runTestSubmit = (type: number) => {
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: type
}
addRunTest(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
}
const route = useRoute()
watch(() => route.query.t, async (newValue, oldValue) => {
let nowTime = Date.now()
let routeTime = route.query.t as number || 1
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return // 路由时间超过500ms则不执行
if (route.fullPath.includes('/testRun')) {
let id = (route.query.id as string) || 'null'
if (id != 'null') {
monitorIds = []
monitorIds.push(id)
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: 1,
id
}
update(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
}
}
}, { deep: true, immediate: true })
</script>
<style scoped lang="scss"></style>

View File

@@ -1,457 +1,71 @@
<!---试运行列表-->
<template>
<div >
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<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>
</template>
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="startRunTest">试运行</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">删除</el-button>
</template>
</TableHeader>
<Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- <el-dialog
v-model='timeDialog'
width='500px'
append-to-body
destroy-on-close>
<div class='block'>
<span class="demonstration">试运行时间</span>
<el-date-picker
:popper-append-to-body="false"
:v-model="dateValue"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetimerange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</div>
<div class='block' style='text-align: center'>
<el-button type='primary' style='margin-top: 50px' @click='runTestSubmit'>确认</el-button>
</div>
</el-dialog>-->
<div class="default-main">
<el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="监测点台账录入" name="1">
<monitorpoint :id="id" v-if="activeName == '1'" />
</el-tab-pane>
<el-tab-pane label="监测点联调列表" name="2">
<jointDebugList :id="id" v-if="activeName == '2'" />
</el-tab-pane>
<el-tab-pane label="试运行评估" name="3">
<testRun :id="id" v-if="activeName == '3'" />
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, reactive } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useRoute, useRouter } from 'vue-router'
import { useDictData } from '@/stores/dictData'
import { ElMessage, ElMessageBox } from 'element-plus'
import { addRunTest, update, cancel } from '@/api/supervision-boot/lineRunTest'
import { formatDate } from '@/utils/formatTime'
import { VxeTablePropTypes } from 'vxe-table'
import { useAdminInfo } from '@/stores/adminInfo'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import { deleteTempLineRunTestReport } from '@/api/supervision-boot/delete/index'
const dictData = useDictData()
const statusSelect = dictData.statusSelect()
const { push } = useRouter()
const adminInfo = useAdminInfo()
const TableHeaderRef = ref()
const tableRef = ref()
</template>
<script setup lang="ts">
import { ref } from 'vue'
const tableStore = new TableStore({
url: '/supervision-boot/tempLinedebug/pageHasDebug',
method: 'POST',
publicHeight: 65,
column: [
{ title: '', type: 'checkbox', width: 40 },
{
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'lineName', title: '监测点名称', minWidth: 160 },
{ field: 'connectedBus', title: '接入母线', minWidth: 160 },
// { field: 'monitoringTerminalCode', title: '终端编号', minWidth: 140 },
{ field: 'monitoringTerminalName', title: '终端名称', minWidth: 140 },
{ field: 'powerSubstationName', title: '变电站', minWidth: 160 },
{ field: 'reason', title: '调试原因', minWidth: 160 },
{
field: 'testRunState',
title: '试运行状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
2: 'success',
3: 'danger',
1: 'warning'
},
replaceValue: {
0: '待试运行',
1: '试运行中',
2: '试运行成功',
3: '试运行失败',
null: '待试运行'
}
},
{
field: 'testRunTime',
title: '试运行时间范围',
minWidth: 200,
formatter: row => {
return row.cellValue ? row.cellValue : '/'
}
},
{
field: 'status',
title: '流程状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'warning',
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
0: '待提交审批',
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消',
null: '/',
9: '/'
}
},
{
field: 'createBy',
title: '填报人',
minWidth: 100,
formatter: (row: any) => {
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
{
title: '操作',
minWidth: 230,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '查看报告',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
disabled: row => {
return row.testRunReport == null || row.testRunReport.length == 0
},
click: row => {
// const match = row.filePath.match(/excelreport(\/[^?#]*)/)
import { mainHeight } from '@/utils/layout'
import monitorpoint from '@/views/pqs/supervise/terminalNetworkDetection/components/monitorpoint/index.vue'
import jointDebugList from '@/views/pqs/supervise/terminalNetworkDetection/components/jointDebugList/index.vue'
import testRun from './testRun.vue'
window.open(window.location.origin + '/#/previewFile?' + row.testRunReport)
}
},
{
name: 'productSetting',
title: '下载报告',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
downloadTheReport(row.testRunReport)
},
disabled: row => {
return row.testRunReport == null || row.testRunReport.length == 0
}
},
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
handleAudit(row.processInstanceId, row.historyInstanceId)
},
disabled: row => {
return !row.processInstanceId
}
},
{
name: 'productSetting',
title: '重新试运行',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
monitorIds = []
monitorIds.push(row.id)
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: 1,
id: row.id
}
update(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
},
disabled: row => {
return !(row.status == 3 || row.status == 4)
}
},
{
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: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
import { useRoute } from "vue-router";
defineOptions({
name: 'terminalNetwotk'
})
const activeName = ref('1')
const route = useRoute()
const id = ref('')
const key = ref('')
watch(() => route.query.t, async (newValue, oldValue) => {
if (route.fullPath.includes('terminalNetwotk')) {
let type = (route.query.type as string) || 'null'
if (type == 'null') { }
else if (type == '1') {
activeName.value = '1'
} else if (type == '2') {
activeName.value = '2'
} else if (type == '3') {
activeName.value = '3'
} else {
activeName.value = '4'
}
id.value = (route.query.id as string) || 'null'
key.value = (route.query.key as string) || 'null'
id.value = id.value + '@' + route.query.t
}
})
tableStore.table.params.status = ''
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig>({
labelField: '',
checkMethod: ({ row }) => {
return adminInfo.roleCode.includes('delete_info') || !(row.testRunState == 1 || row.testRunState == 2)
}
})
const deleteEven = () => {
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
} else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
let createBy = tableStore.table.selection.map(item => item.createBy)
let status = tableStore.table.selection.map(item => item.status)
if (adminInfo.roleCode.includes('delete_info')) {
deleteList()
} else if (createBy.includes(adminInfo.$state.id) && status.includes(0)) {
deleteList()
} else {
ElMessage({
type: 'warning',
message: '只能删除自己填报的数据!!!'
})
}
})
}
}
const deleteList = () => {
deleteTempLineRunTestReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({
type: 'success',
message: '删除成功!'
})
tableStore.index()
})
}
/** 处理审批按钮 */
const handleAudit = (instanceId: any, historyInstanceId: any) => {
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 cancel(data).then(res => {
ElMessage.success('取消成功')
// 加载数据
tableStore.index()
})
}
//试运行
let monitorIds: any = []
const startRunTest = () => {
monitorIds = []
let flag = true
if (tableStore.table.selection.length === 0) {
return ElMessage({
message: '请至少选择一个监测点进行试运行',
type: 'warning'
})
}
tableStore.table.selection.forEach(item => {
if (item.testRunState != 0) {
flag = false
}
if (item.testRunState == 0) {
monitorIds.push(item.id)
}
})
if (!flag) {
return ElMessage({
message: '请选择未试运行的监测点进行试运行',
type: 'warning'
})
return
}
ElMessageBox.confirm('是否确认执行72小时监测点试运行', '试运行', {
confirmButtonText: '确 认',
cancelButtonText: '取 消'
})
.then(() => {
runTestSubmit(0)
})
.catch(() => console.info('操作取消'))
}
// 下载报告
const downloadTheReport = (url: string) => {
getFileNameAndFilePath({ filePath: url }).then((res: any) => {
console.log(res.data.url, 'res')
const link = document.createElement('a')
link.href = res.data.url
link.download = res.data.name
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
}
const runTestSubmit = (type: number) => {
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: type
}
addRunTest(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
}
const route = useRoute()
watch(() => route.query.t, async (newValue, oldValue) => {
let nowTime = Date.now()
let routeTime = route.query.t as number || 1
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return // 路由时间超过500ms则不执行
if (route.fullPath.includes('/testRun')) {
let id = (route.query.id as string) || 'null'
if (id != 'null') {
monitorIds = []
monitorIds.push(id)
const start = new Date()
start.setDate(start.getDate() + 1)
start.setHours(0, 0, 0)
const end = new Date()
end.setDate(end.getDate() + 3)
end.setHours(23, 59, 59)
const startString = formatDate(start, 'YYYY-MM-DD') // 转换为 YYYY-MM-DD 格式
const endString = formatDate(end, 'YYYY-MM-DD')
const data = {
startTime: startString,
endTime: endString,
lineIds: monitorIds,
operateType: 1,
id
}
update(data).then((res: any) => {
if (res.code === 'A0000') {
ElMessage({
message: '发起试运行成功',
type: 'success'
})
tableStore.index()
}
})
}
}
}, { deep: true, immediate: true })
</script>
<style scoped lang="scss"></style>
}, { deep: true, immediate: true })
const layout = mainHeight(63) as any
</script>
<style lang="scss" scoped>
.bars_w {
width: 100%;
height: 500px;
}
:deep(.el-tabs__content) {
height: v-bind('layout.height');
overflow-y: auto;
}
</style>