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

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

@@ -12,11 +12,12 @@
}, },
"dependencies": { "dependencies": {
"@ant-design/colors": "^7.0.2", "@ant-design/colors": "^7.0.2",
"@dataview/datav-vue3": "0.0.0-test.1672506674342",
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.1",
"@form-create/designer": "^3.1.3", "@form-create/designer": "^3.1.3",
"@form-create/element-ui": "^3.1.24", "@form-create/element-ui": "^3.1.24",
"@fortawesome/fontawesome-free": "^6.5.1", "@fortawesome/fontawesome-free": "^6.5.1",
"@kjgl77/datav-vue3": "^1.7.4",
"@vue-office/docx": "^1.6.2", "@vue-office/docx": "^1.6.2",
"@vue-office/excel": "^1.7.8", "@vue-office/excel": "^1.7.8",
"@vue-office/pdf": "^2.0.2", "@vue-office/pdf": "^2.0.2",

View File

@@ -67,6 +67,16 @@ export const downloadSensitiveReportTemplate = () => {
responseType: 'blob' responseType: 'blob'
}) })
} }
/**
* 下载技术监督模版
*/
export const downloadPlanTemplate = () => {
return createAxios({
url: '/supervision-boot/surveyPlan/downloadPlanTemplate',
method: 'GET',
responseType: 'blob'
})
}
/** /**
* 导入敏感及重要用户数据 * 导入敏感及重要用户数据
@@ -90,6 +100,17 @@ export const importSensitiveReportData = (data: any) => {
responseType: 'blob' responseType: 'blob'
}) })
} }
/**
* 批量导入技术监督数据
*/
export const importPlanData = (data: any) => {
return createAxios({
url: '/supervision-boot/surveyPlan/importPlanData',
method: 'POST',
data: data,
responseType: 'blob'
})
}
/** /**
* 批量导入终端台账入网 * 批量导入终端台账入网

View File

@@ -63,7 +63,7 @@ interface Props {
showSearch?: boolean showSearch?: boolean
nextFlag?: boolean //控制时间是否可以往后推 nextFlag?: boolean //控制时间是否可以往后推
theCurrentTime?: boolean //控制时间前3天展示上个月时间 theCurrentTime?: boolean //控制时间前3天展示上个月时间
showReset?: boolean //控制时间前3天展示上个月时间 showReset?: boolean //是否显示重置按钮
showExport?: boolean //导出控制 showExport?: boolean //导出控制
showTimeAll?: boolean //控制时间是否显示 showTimeAll?: boolean //控制时间是否显示

View File

@@ -117,7 +117,7 @@ watch(
if (tableStore.table.allFlag) { if (tableStore.table.allFlag) {
tableRef.value?.exportData({ tableRef.value?.exportData({
filename: document.querySelectorAll('.ba-nav-tab.active')[0].textContent || '', // 文件名字 filename:tableStore.table.filename|| document.querySelectorAll('.ba-nav-tab.active')[0].textContent || '', // 文件名字
sheetName: 'Sheet1', sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true, useStyle: true,

View File

@@ -24,24 +24,31 @@ const info = (id: any) => {
if (VITE_FLAG) { if (VITE_FLAG) {
res.data.forEach((item: any) => { res.data.forEach((item: any) => {
item.icon = 'el-icon-Menu' item.icon = 'el-icon-Menu'
item.plevel = item.level
item.level = 0 item.level = 0
item.children.forEach((item2: any) => { item.children.forEach((item2: any) => {
item2.icon = 'el-icon-HomeFilled' item2.icon = 'el-icon-HomeFilled'
item2.plevel = item2.level
item2.level = 100 item2.level = 100
expanded.value.push(item2.id) expanded.value.push(item2.id)
item2.children.forEach((item3: any) => { item2.children.forEach((item3: any) => {
item3.icon = 'el-icon-CollectionTag' item3.icon = 'el-icon-CollectionTag'
item3.plevel = item3.level
item3.level = 200 item3.level = 200
item3.children.forEach((item4: any) => { item3.children.forEach((item4: any) => {
item4.icon = 'el-icon-Flag' item4.icon = 'el-icon-Flag'
item4.plevel = item4.level
item4.level = 300 item4.level = 300
// arr.push(item4) // arr.push(item4)
item4.children.forEach((item5: any) => { item4.children.forEach((item5: any) => {
item5.icon = 'el-icon-OfficeBuilding' item5.icon = 'el-icon-OfficeBuilding'
item5.plevel = item5.level
item5.level = 300 item5.level = 300
// item5.id = item4.id // item5.id = item4.id
item5.children.forEach((item6: any) => { item5.children.forEach((item6: any) => {
item6.icon = 'el-icon-HelpFilled' item6.icon = 'el-icon-HelpFilled'
item6.plevel = 4
if (item6.name == '电网侧' && item6.children.length == 0) { if (item6.name == '电网侧' && item6.children.length == 0) {
item6.level = 400 item6.level = 400
} else { } else {
@@ -49,15 +56,19 @@ const info = (id: any) => {
} }
item6.children.forEach((item7: any) => { item6.children.forEach((item7: any) => {
item7.icon = 'el-icon-Film' item7.icon = 'el-icon-Film'
item7.plevel = item7.level
item7.level = 400 item7.level = 400
item7.children.forEach((item8: any) => { item7.children.forEach((item8: any) => {
item8.icon = 'el-icon-Collection' item8.icon = 'el-icon-Collection'
item8.plevel = item8.level
item8.level = 500 item8.level = 500
item8.children.forEach((item9: any) => { item8.children.forEach((item9: any) => {
item9.icon = 'el-icon-Share' item9.icon = 'el-icon-Share'
item9.plevel = item9.level
item9.level = 600 item9.level = 600
item9.children.forEach((item10: any) => { item9.children.forEach((item10: any) => {
item10.icon = 'el-icon-Location' item10.icon = 'el-icon-Location'
item10.plevel = item10.level
item10.level = 700 item10.level = 700
}) })
}) })
@@ -90,7 +101,7 @@ const info = (id: any) => {
item4.children.forEach((item5: any) => { item4.children.forEach((item5: any) => {
item5.icon = 'el-icon-OfficeBuilding' item5.icon = 'el-icon-OfficeBuilding'
item5.plevel = item5.level item5.plevel = item5.level
item5.level = (item5.level == 7 ? 4 : item5.level+1) * 100 item5.level = (item5.level == 7 ? 4 : item5.level + 1) * 100
item5.children.forEach((item6: any) => { item5.children.forEach((item6: any) => {
item6.icon = 'el-icon-Film' item6.icon = 'el-icon-Film'
item6.plevel = item6.level item6.plevel = item6.level

View File

@@ -3,9 +3,50 @@ const dataProcessing = (arr: any[]) => {
.filter(item => typeof item === 'number' || (typeof item === 'string' && !isNaN(parseFloat(item)))) .filter(item => typeof item === 'number' || (typeof item === 'string' && !isNaN(parseFloat(item))))
.map(item => (typeof item === 'number' ? item : parseFloat(item))) .map(item => (typeof item === 'number' ? item : parseFloat(item)))
} }
const calculateValue = (o:number,value: number, num: number, isMin: boolean) => {
if (value === 0) {
return 0
}else if(value>0&& Math.abs(value)<1 && isMin==true){
return 0
}else if(value>-1&& value<0 && isMin==false){
return 0
}
let base
if (Math.abs(o) >= 100) {
base = 100
} else if (Math.abs(o) >= 10) {
base = 10
} else if (Math.abs(o) >= 1) {
base = 1
} else {
base = 0.1
}
let calculatedValue
if (isMin) {
if (value < 0) {
calculatedValue = value + num * value
} else {
calculatedValue = value - num * value
}
} else {
if (value < 0) {
calculatedValue = value - num * value
} else {
calculatedValue = value + num * value
}
}
if (base === 0.1) {
return parseFloat(calculatedValue.toFixed(1))
} else if (isMin) {
return Math.floor(calculatedValue / base) * base
} else {
return Math.ceil(calculatedValue / base) * base
}
}
// 处理y轴最大最小值 // 处理y轴最大最小值
export const yMethod = (arr: any) => { export const yMethod = (arr: any) => {
let num = 0.2
let numList = dataProcessing(arr) let numList = dataProcessing(arr)
let maxValue = 0 let maxValue = 0
let minValue = 0 let minValue = 0
@@ -13,32 +54,76 @@ export const yMethod = (arr: any) => {
let min = 0 let min = 0
maxValue = Math.max(...numList) maxValue = Math.max(...numList)
minValue = Math.min(...numList) minValue = Math.min(...numList)
if (maxValue > 1000 || minValue < -1000) { const o=maxValue-minValue
max = Math.ceil(maxValue / 100) * 100 min = calculateValue( o,minValue, num, true)
if (minValue == 0) { max = calculateValue(o,maxValue, num, false)
min = 0 // if (-100 >= minValue) {
} else { // min = Math.floor((minValue + num * minValue) / 100) * 100
min = Math.floor(minValue / 100) * 100 // } else if (-10 >= minValue && minValue > -100) {
} // min = Math.floor((minValue + num * minValue) / 10) * 10
} else if (maxValue < 60 && minValue > 40) { // } else if (-1 >= minValue && minValue > -10) {
max = 60 // min = Math.floor(minValue + num * minValue)
min = 40 // } else if (0 > minValue && minValue > -1) {
} else if (maxValue == minValue && maxValue < 10 && minValue > 0) { // min = parseFloat((minValue + num * minValue).toFixed(1))
max = Math.ceil(maxValue / 10) * 10 // } else if (minValue == 0) {
min = Math.floor(minValue / 10) * 10 // min = 0
} else if (maxValue == minValue && maxValue != 0 && minValue != 0) { // } else if (0 < minValue && minValue < 1) {
max = Math.ceil(maxValue / 10 + 1) * 10 // min = parseFloat((minValue - num * minValue).toFixed(1))
min = Math.floor(minValue / 10 - 1) * 10 // } else if (1 <= minValue && minValue < 10) {
} else { // min = Math.floor(minValue - num * minValue)
max = Math.ceil(maxValue / 10) * 10 // } else if (10 <= minValue && minValue < 100) {
min = Math.floor(minValue / 10) * 10 // min = Math.floor((minValue - num * minValue) / 10) * 10
} // } else if (100 <= minValue) {
// min = Math.floor((minValue - num * minValue) / 100) * 100
// }
// if (-100 >= maxValue) {
// max = Math.ceil((maxValue - num * maxValue) / 100) * 100
// } else if (-10 >= maxValue && maxValue > -100) {
// max = Math.ceil((maxValue - num * maxValue) / 10) * 10
// } else if (-1 >= maxValue && maxValue > -10) {
// max = Math.ceil(maxValue - num * maxValue)
// } else if (0 > maxValue && maxValue > -1) {
// max = parseFloat((maxValue - num * maxValue).toFixed(1))
// } else if (maxValue == 0) {
// max = 0
// } else if (0 < maxValue && maxValue < 1) {
// max = parseFloat((maxValue + num * maxValue).toFixed(1))
// } else if (1 <= maxValue && maxValue < 10) {
// max = Math.ceil(maxValue + num * maxValue)
// } else if (10 <= maxValue && maxValue < 100) {
// max = Math.ceil((maxValue + num * maxValue) / 10) * 10
// } else if (100 <= maxValue) {
// max = Math.ceil((maxValue + num * maxValue) / 100) * 100
// }
// if (maxValue > 1000 || minValue < -1000) {
// max = Math.ceil(maxValue / 100) * 100
// if (minValue == 0) {
// min = 0
// } else {
// min = Math.floor(minValue / 100) * 100
// }
// } else if (maxValue < 60 && minValue > 40) {
// max = 60
// min = 40
// } else if (maxValue == minValue && maxValue < 10 && minValue > 0) {
// max = Math.ceil(maxValue / 10) * 10
// min = Math.floor(minValue / 10) * 10
// } else if (maxValue == minValue && maxValue != 0 && minValue != 0) {
// max = Math.ceil(maxValue / 10 + 1) * 10
// min = Math.floor(minValue / 10 - 1) * 10
// } else {
// max = Math.ceil(maxValue / 10) * 10
// min = Math.floor(minValue / 10) * 10
// }
// if (maxValue > 0 && maxValue < 1) {
// max = 1
// } else if (max == 0 && minValue > -1 && minValue < 0) {
// min = -1
// }
if (maxValue > 0 && maxValue < 1) {
max = 1
} else if (max == 0 && minValue > -1 && minValue < 0) {
min = -1
}
return [min, max] return [min, max]
} }

View File

@@ -8,6 +8,7 @@ import { filtration } from './tableMethod'
interface TableStoreParams { interface TableStoreParams {
url: string // 请求地址 url: string // 请求地址
pk?: string pk?: string
filename?: any // 导出文件名
column: TableColumn[] column: TableColumn[]
params?: anyObj params?: anyObj
method?: Method // 请求方式 method?: Method // 请求方式
@@ -18,12 +19,14 @@ interface TableStoreParams {
publicHeight?: number //计算高度 publicHeight?: number //计算高度
resetCallback?: () => void // 重置 resetCallback?: () => void // 重置
loadCallback?: () => void // 接口调用后的回调 loadCallback?: () => void // 接口调用后的回调
exportProcessingData?:() => void //导出处理数据
beforeSearchFun?: () => void // 接口调用前的回调 beforeSearchFun?: () => void // 接口调用前的回调
} }
export default class TableStore { export default class TableStore {
public url public url
public pk public pk
public filename: any = null
public method: Method public method: Method
public initData: any = null public initData: any = null
public isWebPaging = false public isWebPaging = false
@@ -42,9 +45,11 @@ export default class TableStore {
pageNum: 1, pageNum: 1,
pageSize: 20 pageSize: 20
}, },
filename:null,
loading: true, loading: true,
column: [], column: [],
loadCallback: null, loadCallback: null,
exportProcessingData: null,
resetCallback: null, resetCallback: null,
beforeSearchFun: null, beforeSearchFun: null,
height: '', height: '',
@@ -57,12 +62,14 @@ export default class TableStore {
this.paramsPOST = options.paramsPOST || false this.paramsPOST = options.paramsPOST || false
this.isWebPaging = options.isWebPaging || false this.isWebPaging = options.isWebPaging || false
this.method = options.method || 'GET' this.method = options.method || 'GET'
this.table.filename = options.filename || null
this.table.column = options.column this.table.column = options.column
this.showPage = options.showPage !== false this.showPage = options.showPage !== false
this.table.publicHeight = options.publicHeight || 0 this.table.publicHeight = options.publicHeight || 0
this.table.resetCallback = options.resetCallback || null this.table.resetCallback = options.resetCallback || null
this.table.loadCallback = options.loadCallback || null this.table.loadCallback = options.loadCallback || null
this.table.exportProcessingData = options.exportProcessingData || null
this.table.beforeSearchFun = options.beforeSearchFun || null this.table.beforeSearchFun = options.beforeSearchFun || null
Object.assign(this.table.params, options.params) Object.assign(this.table.params, options.params)
this.table.height = mainHeight(20 + (this.showPage ? 58 : 0) + this.table.publicHeight).height as string this.table.height = mainHeight(20 + (this.showPage ? 58 : 0) + this.table.publicHeight).height as string
@@ -206,6 +213,7 @@ export default class TableStore {
) )
).then(res => { ).then(res => {
this.table.allData = filtration(res.data.records || res.data) this.table.allData = filtration(res.data.records || res.data)
this.table.exportProcessingData && this.table.exportProcessingData()
this.table.allFlag = data.showAllFlag || true this.table.allFlag = data.showAllFlag || true
}) })
} }

View File

@@ -1318,7 +1318,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="form-item" class="form-item"
label="用户大类:" label="对象大类:"
:prop=" :prop="
'deviceParam.' + 'deviceParam.' +
[deviceIndex] + [deviceIndex] +
@@ -1328,12 +1328,12 @@
lIndex + lIndex +
'.bigObjType' '.bigObjType'
" "
:rules="{ required: true, message: '请选择用户大类', trigger: 'blur' }" :rules="{ required: true, message: '请选择对象大类', trigger: 'blur' }"
> >
<el-select <el-select
filterable filterable
v-model="lineItem.bigObjType" v-model="lineItem.bigObjType"
placeholder="请选择用户大类" placeholder="请选择对象大类"
:disabled="pageStatus == 1" :disabled="pageStatus == 1"
@change="lineItem.smallObjType = ''" @change="lineItem.smallObjType = ''"
> >
@@ -1347,7 +1347,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
class="form-item" class="form-item"
label="用户小类:" label="对象小类:"
:prop=" :prop="
'deviceParam.' + 'deviceParam.' +
[deviceIndex] + [deviceIndex] +
@@ -1357,12 +1357,12 @@
lIndex + lIndex +
'.smallObjType' '.smallObjType'
" "
:rules="{ required: true, message: '请选择用户小类', trigger: 'blur' }" :rules="{ required: true, message: '请选择对象小类', trigger: 'blur' }"
> >
<el-select <el-select
filterable filterable
v-model="lineItem.smallObjType" v-model="lineItem.smallObjType"
placeholder="请选择用户小类" placeholder="请选择对象小类"
:disabled="pageStatus == 1" :disabled="pageStatus == 1"
> >
<el-option <el-option
@@ -1777,9 +1777,9 @@ const busBarDetail = ref({
}) })
/**监测点详情 */ /**监测点详情 */
const monitorPointDetail: any = ref({ const monitorPointDetail: any = ref({
/**用户大类 */ /**对象大类 */
bigObjType: '', bigObjType: '',
/**用户小类 */ /**对象小类 */
smallObjType: '', smallObjType: '',
/**行业类型 */ /**行业类型 */
businessType: '', businessType: '',

View File

@@ -8,10 +8,12 @@
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { yMethod } from '@/utils/echartMethod'
defineOptions({ defineOptions({
name: 'runManage/assessment' name: 'runManage/assessment'
}) })
import User from '@/views/pqs/runManage/assessment/components/uese/index.vue' import User from '@/views/pqs/runManage/assessment/components/uese/index.vue'
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
console.log("🚀 ~ reactive:", yMethod([3.2,3.2]))
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@@ -1,9 +1,8 @@
<template> <template>
<div class="default-main"> <div class="default-main">
<el-tabs type="border-card"> <el-tabs type="border-card">
<el-tab-pane label="异常数据清洗"><abnormal/></el-tab-pane> <el-tab-pane label="异常数据清洗"><abnormal /></el-tab-pane>
<el-tab-pane label="稳态告警统计"><alarm/></el-tab-pane> <el-tab-pane label="稳态告警统计"><alarm /></el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>

View File

@@ -19,12 +19,22 @@
</el-form-item> </el-form-item>
</template> </template>
<template v-slot:operation></template> <template v-slot:operation>
<el-button type="primary" class="ml10" @click="toggle" :icon="leftVisible ? 'el-icon-Hide' : 'el-icon-View'">
{{ leftVisible ? '隐藏' : '显示' }}
</el-button>
</template>
</TableHeader> </TableHeader>
<Map /> <Map />
<div class="left" :style="height"> <transition name="slide-left">
<BorderBox13 :color="[color[0], color[0]]" class="box" :backgroundColor="`${color[0]}24`" title="终端统计"> <div class="left" :style="height" v-if="leftVisible">
<BorderBox13
:color="[color[0], color[0]]"
class="box"
:backgroundColor="`${color[0]}24`"
title="终端统计"
>
<div class="title"> <div class="title">
<span class="iconfont icon-zhongduantongji-xian"></span> <span class="iconfont icon-zhongduantongji-xian"></span>
终端统计 终端统计
@@ -36,7 +46,10 @@
:backgroundColor="`${color[0]}24`" :backgroundColor="`${color[0]}24`"
title="终端运行评价" title="终端运行评价"
> >
<div class="title"> <span class="iconfont icon-daipingjia"></span>终端运行评价</div> <div class="title">
<span class="iconfont icon-daipingjia"></span>
终端运行评价
</div>
</BorderBox13> </BorderBox13>
<BorderBox13 <BorderBox13
:color="[color[0], color[0]]" :color="[color[0], color[0]]"
@@ -44,27 +57,26 @@
:backgroundColor="`${color[0]}24`" :backgroundColor="`${color[0]}24`"
title="最近一周终端评价趋势" title="最近一周终端评价趋势"
> >
<div class="title"> <span class="iconfont icon-a-qushi1"></span>最近一周终端评价趋势</div> <div class="title">
<span class="iconfont icon-a-qushi1"></span>
最近一周终端评价趋势
</div>
</BorderBox13> </BorderBox13>
</div> </div>
<div class="center" :style="height3"> </transition>
<BorderBox13
:color="[color[0], color[0]]" <transition name="slide-right">
class="box" <div class="right" :style="height" v-if="rightVisible">
:backgroundColor="`${color[0]}24`"
title="异常终端详情"
>
<div class="title"> <span class="iconfont icon-yichangxiangqing-xian"></span>异常终端详情</div>
</BorderBox13>
</div>
<div class="right" :style="height">
<BorderBox13 <BorderBox13
:color="[color[0], color[0]]" :color="[color[0], color[0]]"
class="box box-2" class="box box-2"
:backgroundColor="`${color[0]}24`" :backgroundColor="`${color[0]}24`"
title="区域终端运行评价" title="区域终端运行评价"
> >
<div class="title"> <span class="iconfont icon-a-ziyuan118"></span>区域终端运行评价</div> <div class="title">
<span class="iconfont icon-a-ziyuan118"></span>
区域终端运行评价
</div>
</BorderBox13> </BorderBox13>
<BorderBox13 <BorderBox13
:color="[color[0], color[0]]" :color="[color[0], color[0]]"
@@ -72,63 +84,39 @@
:backgroundColor="`${color[0]}24`" :backgroundColor="`${color[0]}24`"
title="终端运行评价详情" title="终端运行评价详情"
> >
<div class="title"> <span class="iconfont icon-yunhangxiangqing"></span>终端运行评价详情</div> <div class="title">
<span class="iconfont icon-yunhangxiangqing"></span>
终端运行评价详情
</div>
</BorderBox13> </BorderBox13>
</div> </div>
<!-- <div class="container pt10 pl10" :style="height"> </transition>
<div class="left">
<el-card class="box"> <transition name="slide-bottom">
<template #header> <div class="center" :style="height3" v-if="centerVisible">
<div></div> <BorderBox13
<span>终端统计</span> :color="[color[0], color[0]]"
</template> class="box"
</el-card> :backgroundColor="`${color[0]}24`"
<el-card class="box"> title="异常终端详情"
<template #header> >
<div></div><span>终端运行评价</span> <div class="title">
</template> <span class="iconfont icon-yichangxiangqing-xian"></span>
</el-card> 异常终端详情
<el-card class="box">
<template #header>
<div></div><span>最近一周终端评价趋势</span>
</template>
</el-card>
</div> </div>
<div class="center"> </BorderBox13>
<el-card class="box box-2">
<template #header>
<div></div><span>异常详情统计</span>
</template>
</el-card>
<el-card class="box">
<template #header>
<div></div><span>异常终端详情</span>
</template>
</el-card>
</div> </div>
<div class="right"> </transition>
<el-card class="box box-2">
<template #header>
<div></div><span>区域终端运行评价</span>
</template>
</el-card>
<el-card class="box">
<template #header>
<div></div><span>终端运行评价详情</span>
</template>
</el-card>
</div>
</div> -->
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive } from 'vue' import { ref, reactive, onMounted, provide } from 'vue'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import Map from './components/map.vue' import Map from './components/map.vue'
import { BorderBox13 } from '@dataview/datav-vue3' import { BorderBox13 } from '@kjgl77/datav-vue3'
import { useConfig } from '@/stores/config' import { useConfig } from '@/stores/config'
const config = useConfig() const config = useConfig()
const color = config.layout.elementUiPrimary const color = config.layout.elementUiPrimary
@@ -145,11 +133,9 @@ const tableStore = new TableStore({
publicHeight: 480, publicHeight: 480,
column: [ column: [
{ title: '序号', width: 80 }, { title: '序号', width: 80 },
{ title: '监测对象类型', field: 'name3' }, { title: '监测对象类型', field: 'name3' },
{ title: '监测对象名称', field: 'name4' }, { title: '监测对象名称', field: 'name4' },
{ title: '电压等级', field: 'name5' }, { title: '电压等级', field: 'name5' },
{ {
title: '操作', title: '操作',
width: '120', width: '120',
@@ -171,51 +157,31 @@ const tableStore = new TableStore({
} }
}) })
provide('tableStore', tableStore) provide('tableStore', tableStore)
const leftVisible = ref(true)
const rightVisible = ref(true)
const centerVisible = ref(true)
const toggle = () => {
leftVisible.value = !leftVisible.value
rightVisible.value = !rightVisible.value
centerVisible.value = !centerVisible.value
}
onMounted(() => { onMounted(() => {
// 加载数据 // 加载数据
tableStore.index() tableStore.index()
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
// .container {
// display: flex;
// position: absolute;
// top: 70px;
// left: 10px;
// width: 100%;
// z-index: 999;
// .left,
// .center,
// .right {
// display: flex;
// flex-direction: column;
// // background: linear-gradient(to right, #cce5e5, #ffffff00);
// }
// .center {
// flex: 1.5;
// }
// .box {
// width: 500px;
// height: 100%;
// }
// .box-2 {
// flex: 2; /* 占2份高度 */
// }
// }
.left, .left,
.right { .right {
display: flex; display: flex;
position: absolute; position: absolute;
top: 80px; top: 80px;
width: 25%; width: 25%;
min-width: 480px;
flex-direction: column; flex-direction: column;
z-index: 99; z-index: 99;
transition: all 0.3s ease;
} }
.left { .left {
left: 15px; left: 15px;
@@ -235,14 +201,15 @@ onMounted(() => {
.center { .center {
position: absolute; position: absolute;
bottom: 16px; bottom: 16px;
left: 50%; left: 26%;
transform: translateX(-50%); // transform: translateX(-50%);
width: 48%; width: 48%;
min-width: 480px; min-width: 480px;
.box { .box {
flex: 1; /* 占2份高度 */ flex: 1; /* 占2份高度 */
padding: 20px 10px 10px; padding: 20px 10px 10px;
} }
transition: all 0.3s ease;
} }
.title { .title {
// padding: 5px 5px 5px 10px; // padding: 5px 5px 5px 10px;
@@ -257,4 +224,37 @@ onMounted(() => {
margin: 0 5px 0 10px; margin: 0 5px 0 10px;
} }
} }
.toggle-btn {
position: absolute;
z-index: 100;
padding: 5px 10px;
cursor: pointer;
}
.slide-left-enter-active,
.slide-left-leave-active {
transition: all 0.3s ease;
}
.slide-left-enter-from,
.slide-left-leave-to {
transform: translateX(-100%);
opacity: 0;
}
.slide-right-enter-active,
.slide-right-leave-active {
transition: all 0.3s ease;
}
.slide-right-enter-from,
.slide-right-leave-to {
transform: translateX(100%);
opacity: 0;
}
.slide-bottom-enter-active,
.slide-bottom-leave-active {
transition: all 0.3s ease;
}
.slide-bottom-enter-from,
.slide-bottom-leave-to {
transform: translateY(100%);
opacity: 0;
}
</style> </style>

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,7 @@
<!---试运行列表--> <!---试运行列表-->
<template> <template>
<div> <div>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -54,6 +54,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/lineRunTestProblem/pageProblem', url: '/supervision-boot/lineRunTestProblem/pageProblem',
method: 'POST', method: 'POST',
publicHeight: 65, publicHeight: 65,
filename:'试运行评估问题',
column: [ column: [
{ {
title: '序号', width: 80, formatter: (row: any) => { title: '序号', width: 80, formatter: (row: any) => {
@@ -233,6 +234,13 @@ const tableStore = new TableStore({
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2] tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName // 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.status = ''

View File

@@ -64,7 +64,7 @@
</el-form-item> </el-form-item>
<el-form-item for="-" label="关联电站:" :key="key" v-if="form.customSubstationFlag == 1" :prop="dynamicProp"> <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-item>
<!-- <el-form :model="form" label-width="auto"> --> <!-- <el-form :model="form" label-width="auto"> -->
<!-- <el-form-item for="-" class="uploadFile" label="普测报告:" prop="fileList"> <!-- <el-form-item for="-" class="uploadFile" label="普测报告:" prop="fileList">
@@ -104,7 +104,7 @@
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancelFn">取消</el-button> <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> <el-button type="primary" @click="submitFn(false)" :loading="loading">提交审批</el-button>
</div> </div>
</template> </template>
@@ -213,12 +213,12 @@ const treeData = ref()
const loadData = () => { const loadData = () => {
initDetpStataionTree({ orgId: dictData.state.area[0].id }).then(res => { initDetpStataionTree({ orgId: dictData.state.area[0].id }).then(res => {
treeList.value = res.data treeList.value = res.data
// initDetpStataionTree({ orgId: '02d1b4e1680413eb72f3fa63d46c496c' }).then(res => { initDetpStataionTree({ orgId: 'a3069759b0b6072c99cf9a7af6c162e9' }).then(res => {
// treeListCgy.value = res.data treeListCgy.value = res.data
setTimeout(() => { setTimeout(() => {
changeArea() changeArea()
}, 10) }, 10)
// }) })
}) })
} }
@@ -283,30 +283,14 @@ const changeArea = () => {
treeList.value.forEach((item: any) => { treeList.value.forEach((item: any) => {
if (item.id == form.value.deptId) { if (item.id == form.value.deptId) {
list.push(item) list.push(item)
if (item.id != treeListCgy.value[0].id && item.name != '冀北电力有限公司' && item.name != '超高压') {
} else { list.push(...treeListCgy.value)
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 { } else {
list.push(item.children.filter((v: any) => v.id == form.value.deptId)[0]) 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 treeData.value = list

View File

@@ -1,25 +1,39 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label="监督类型"> <el-form-item label="监督类型">
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型"> <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-option
v-for="item in supvTypeOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <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-select>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增计划</el-button> <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-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> </template>
</TableHeader> </TableHeader>
<Table ref="tableRef" :checkbox-config="checkboxConfig" /> <Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- 新增 --> <!-- 新增 -->
<planAdd ref="planAddRef" @onsubmit="tableStore.index()" :openType="openType" /> <planAdd ref="planAddRef" @onsubmit="tableStore.index()" :openType="openType" />
<!-- 批量导入 -->
<sensitive-user-popup ref="sensitiveUserPopup" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
@@ -33,12 +47,14 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { cancel, getById } from '@/api/process-boot/generalTest' import { cancel, getById } from '@/api/process-boot/generalTest'
import planAdd from './planAdd.vue' import planAdd from './planAdd.vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import SensitiveUserPopup from './sensitiveUserPopup.vue'
import { queryPlan, removeSurvey } from '@/api/process-boot/generalTest' import { queryPlan, removeSurvey } from '@/api/process-boot/generalTest'
import { getUserByRoleType } from '@/api/user-boot/user' import { getUserByRoleType } from '@/api/user-boot/user'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { deleteSurveyPlan } from '@/api/supervision-boot/delete/index' 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 dictData = useDictData()
const supvTypeOptionList = dictData.getBasicData('supv_type') const supvTypeOptionList = dictData.getBasicData('supv_type')
const statusSelect = dictData.statusSelect() const statusSelect = dictData.statusSelect()
@@ -55,6 +71,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/surveyPlan/surveyPlanPage', url: '/supervision-boot/surveyPlan/surveyPlanPage',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename: '技术监督计划管理',
column: [ column: [
{ {
width: '60', width: '60',
@@ -198,9 +215,24 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum 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
})
} }
}) })
const sensitiveUserPopup = ref()
tableStore.table.params.status = '' tableStore.table.params.status = ''
tableStore.table.params.supvType = '' tableStore.table.params.supvType = ''
provide('tableStore', tableStore) provide('tableStore', tableStore)
@@ -224,13 +256,11 @@ const deleteEven = () => {
message: '请选择要删除的数据' message: '请选择要删除的数据'
}) })
} else { } else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', { ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteSurveyPlan(tableStore.table.selection.map(item => item.id)).then(res => { deleteSurveyPlan(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -239,8 +269,6 @@ const deleteEven = () => {
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
const exportFn = () => { const exportFn = () => {
@@ -260,7 +288,25 @@ const exportFn = () => {
}) })
}) })
} }
//导出模板
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 cancelLeave = async (row: any) => {
// 二次确认 // 二次确认
@@ -287,7 +333,10 @@ const handleClose = () => {
dialogVisible.value = false dialogVisible.value = false
auditUser.value = '' auditUser.value = ''
} }
//批量导入用户数据
const importUserData = () => {
sensitiveUserPopup.value.open('技术监督计划管理')
}
/** 处理审批按钮 */ /** 处理审批按钮 */
const handleAudit = (instanceId: string, historyInstanceId: string) => { const handleAudit = (instanceId: string, historyInstanceId: string) => {
push({ push({
@@ -319,9 +368,10 @@ watch(
} }
) )
const props = defineProps({ id: { type: String, default: 'null' } }) const props = defineProps({ id: { type: String, default: 'null' } })
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
const fullId = newValue.split('@')[0] const fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -330,7 +380,9 @@ watch(() => props.id, async (newValue, oldValue) => {
nextTick(() => { nextTick(() => {
planAddRef.value.open('重新发起计划', fullId, false) planAddRef.value.open('重新发起计划', fullId, false)
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>
<style scoped lang="scss"></style> <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> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref='TableHeaderRef'> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template v-slot:select> <template v-slot:select>
<el-form-item label='监督类型'> <el-form-item label="监督类型">
<el-select v-model='tableStore.table.params.supvType' clearable placeholder='请选择监督类型'> <el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">
<el-option v-for='item in supvTypeOptionList' :key='item.id' :label='item.name' <el-option
:value='item.id'></el-option> v-for="item in supvTypeOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='流程状态'> <el-form-item label="流程状态">
<el-select v-model='tableStore.table.params.status' clearable placeholder='请选择流程状态'> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
<el-option v-for='item in statusSelect' :key='item.id' :label='item.name' <el-option
:value='item.id'></el-option> v-for="item in statusSelect"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <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> </template>
</TableHeader> </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> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, onMounted, provide, watch, nextTick } from 'vue' import { ref, onMounted, provide, watch, nextTick } from 'vue'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
//获取登陆用户姓名和部门 //获取登陆用户姓名和部门
@@ -54,6 +62,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/surveyTest/surveyTestPage', url: '/supervision-boot/surveyTest/surveyTestPage',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename: '技术监督测试管理',
column: [ column: [
{ {
width: '60', width: '60',
@@ -213,6 +222,22 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum 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,13 +264,11 @@ const deleteEven = () => {
message: '请选择要删除的数据' message: '请选择要删除的数据'
}) })
} else { } else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', { ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteSurveyPlanTest(tableStore.table.selection.map(item => item.id)).then(res => { deleteSurveyPlanTest(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -254,10 +277,6 @@ const deleteEven = () => {
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
const exportFn = () => { const exportFn = () => {
@@ -320,7 +339,9 @@ onMounted(() => {
}) })
const props = defineProps(['id', 'businessKey']) const props = defineProps(['id', 'businessKey'])
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
const fullId = newValue.split('@')[0] const fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -333,7 +354,9 @@ watch(() => props.id, async (newValue, oldValue) => {
planTestRef.value.open('重新发起计划测试', fullId, false) planTestRef.value.open('重新发起计划测试', fullId, false)
} }
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>
<style scoped lang='scss'></style> <style scoped lang="scss"></style>

View File

@@ -1,14 +1,18 @@
<template> <template>
<div> <div>
<TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'> <TableHeader datePicker nextFlag theCurrentTime showTimeAll showExport ref='TableHeaderRef'>
<template #select> <template #select>
<el-form-item label='项目名称'> <el-form-item label='项目名称'>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' clearable maxlength="32" <el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称'></el-input>
show-word-limit></el-input>
</el-form-item> </el-form-item>
<el-form-item label='所在地市'> <el-form-item label='所在地市'>
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'> <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-select>
</el-form-item> </el-form-item>
</template> </template>
@@ -16,33 +20,45 @@
<!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> --> <!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> -->
</template> </template>
</TableHeader> </TableHeader>
<Table ref='tableRef' /> <Table ref='tableRef'/>
</div> </div>
<el-dialog title='干扰源用户详细信息' v-if='dialogVisible' v-model='dialogVisible' width='65%' :append-to-body='true' <el-dialog
:close-on-click-modal='false' draggable> 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> <BpmUserReportDetail :id='interId' ref='detailsRef'></BpmUserReportDetail>
</el-dialog> </el-dialog>
<!-- 查看详情 detail 新增/修改 create--> <!-- 查看详情 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> </template>
<script setup lang='ts'> <script setup lang='ts'>
defineOptions({ defineOptions({
name: 'supervision/interferenceUserTable' name: 'supervision/interferenceUserTable'
}) })
import { ref, onMounted, provide, watch } from 'vue' import {ref, onMounted, provide, watch} from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/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 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 BpmUserReportDetail from '../../components/undocumented/detail.vue'
import { useAdminInfo } from '@/stores/adminInfo' import {useAdminInfo} from '@/stores/adminInfo'
import { ElMessage, ElMessageBox } from 'element-plus' import {ElMessage, ElMessageBox} from 'element-plus'
import { userReportRenewalCancel } from '@/api/process-boot/generalTest' import {userReportRenewalCancel} from '@/api/process-boot/generalTest'
const dictData = useDictData() const dictData = useDictData()
const flag = ref(false) const flag = ref(false)
@@ -69,19 +85,18 @@ jb_dky.value =
? true ? true
: false : false
const { push, options, currentRoute } = useRouter() const {push, options, currentRoute} = useRouter()
const TableHeaderRef = ref() const TableHeaderRef = ref()
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getNormalUserPage', url: '/supervision-boot/userReport/getNormalUserPage',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'常态化干扰源用户管理',
column: [ 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 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', field: 'substation',
title: '厂站名称', title: '厂站名称',
@@ -91,7 +106,7 @@ const tableStore = new TableStore({
return row.cellValue return row.cellValue
} }
}, },
{ field: 'projectName', title: '项目名称', minWidth: 170 }, {field: 'projectName', title: '项目名称', minWidth: 170},
{ {
field: 'userType', field: 'userType',
title: '用户性质', title: '用户性质',
@@ -101,7 +116,7 @@ const tableStore = new TableStore({
return getUserTypeName(userType) return getUserTypeName(userType)
} }
}, },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 }, {field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130},
{ {
field: 'userStatus', field: 'userStatus',
title: '用户状态', title: '用户状态',
@@ -227,7 +242,7 @@ const tableStore = new TableStore({
return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4) return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
}, },
click: row => { click: row => {
addForms.value.open({ title: '重新发起', row: row }) addForms.value.open({title: '重新发起', row: row})
} }
}, },
{ {
@@ -290,6 +305,23 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName 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
})
} }
}) })
@@ -324,7 +356,7 @@ const handleAudit = (instanceId: string, historyInstanceId: string) => {
/**取消流程操作*/ /**取消流程操作*/
const cancelLeave = async (row: any) => { const cancelLeave = async (row: any) => {
// 二次确认 // 二次确认
const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', { const {value} = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputType: 'textarea', inputType: 'textarea',
@@ -477,7 +509,7 @@ watch(() => props.id, async (newValue, oldValue) => {
}) })
} }
}, { immediate: true }) }, {immediate: true})
</script> </script>

View File

@@ -286,58 +286,77 @@
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-descriptions :column="1" border style="flex: 1" title="变更后"> <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 }} {{ detailData1.reporter }}
</el-descriptions-item> </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') }} {{ formatDate(detailData1.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item> </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 }} {{ detailData1.orgName }}
</el-descriptions-item> </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') }} {{ formatDate(detailData1.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item> </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 => { userTypeList.find(item => {
return item.value == detailData1.userType return item.value == detailData1.userType
})?.label })?.label
}} }}
</el-descriptions-item> </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 }} {{ detailData1.city }}
</el-descriptions-item> </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 }} {{ detailData1.responsibleDepartment }}
</el-descriptions-item> </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 => { userStateList.find(item => {
return item.value == detailData1.userStatus return item.value == detailData1.userStatus
})?.label })?.label
}} }}
</el-descriptions-item> </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 }} {{ detailData1.substation }}
</el-descriptions-item> </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 }} {{ detailData1.projectName }}
</el-descriptions-item> </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 => { voltageLevelList.find(item => {
return item.id == detailData1.voltageLevel return item.id == detailData1.voltageLevel
})?.name })?.name
}} }}
</el-descriptions-item> </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 : '-' }} {{ proviteData1.nonlinearDeviceType ? proviteData1.nonlinearDeviceType : '-' }}
</el-descriptions-item> </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 }} {{ detailData1.evaluationDept }}
</el-descriptions-item> </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 }} {{ detailData1.evaluationConclusion }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="detailData1.userType == '4' || detailData1.userType == '5' <el-descriptions-item :label="detailData1.userType == '4' || detailData1.userType == '5'
@@ -348,10 +367,13 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
"> " :label-class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''"
:class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''">
{{ proviteData1.nonlinearLoadType }} {{ proviteData1.nonlinearLoadType }}
</el-descriptions-item> </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"> <span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.needGovernance == 0 ? '否' : '是' }} {{ proviteData1.needGovernance == 0 ? '否' : '是' }}
</span> </span>
@@ -365,7 +387,9 @@
</span> </span>
<span v-if="detailData1.userType == 6">{{ proviteData1.needGovernance == 0 ? '否' : '是' }}</span> <span v-if="detailData1.userType == 6">{{ proviteData1.needGovernance == 0 ? '否' : '是' }}</span>
</el-descriptions-item> </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"> <span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }} {{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span> </span>
@@ -381,12 +405,16 @@
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }} {{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span> </span>
</el-descriptions-item> </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> <span>
{{ proviteData1.antiInterferenceTest == 0 ? '否' : '是' }} {{ proviteData1.antiInterferenceTest == 0 ? '否' : '是' }}
</span> </span>
</el-descriptions-item> </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 }} {{ proviteData1.agreementCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="PCC供电设备容量MVA" v-if=" <el-descriptions-item label="PCC供电设备容量MVA" v-if="
@@ -394,7 +422,8 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
"> " :label-class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''"
:class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''">
{{ proviteData1.pccEquipmentCapacity }} {{ proviteData1.pccEquipmentCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="基准短路容量MVA" v-if=" <el-descriptions-item label="基准短路容量MVA" v-if="
@@ -402,7 +431,8 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
"> " :label-class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''"
:class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1.baseShortCircuitCapacity }} {{ proviteData1.baseShortCircuitCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="系统最小短路容量MVA" v-if=" <el-descriptions-item label="系统最小短路容量MVA" v-if="
@@ -410,7 +440,8 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
"> " :label-class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''"
:class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1?.minShortCircuitCapacity }} {{ proviteData1?.minShortCircuitCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="用户用电协议容量MVA" v-if=" <el-descriptions-item label="用户用电协议容量MVA" v-if="
@@ -418,61 +449,84 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
"> " :label-class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''"
:class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''">
{{ proviteData1?.userAgreementCapacity }} {{ proviteData1?.userAgreementCapacity }}
</el-descriptions-item> </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 }} {{ proviteData1?.pccPoint }}
</el-descriptions-item> </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 => { evaluationTypeList.find(item => {
return item.id == proviteData1?.evaluationType return item.id == proviteData1?.evaluationType
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1?.evaluationChekDept }}
</el-descriptions-item> </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 => { industryList.find(item => {
return item.id == proviteData1.industry return item.id == proviteData1.industry
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1.deviceName }}
</el-descriptions-item> </el-descriptions-item>
<!-- <el-descriptions-item label="供电电源数量" v-if="detailData1.userType == 6">--> <!-- <el-descriptions-item label="供电电源数量" v-if="detailData1.userType == 6">-->
<!-- {{ proviteData1.powerSupplyCount }}--> <!-- {{ proviteData1.powerSupplyCount }}-->
<!-- </el-descriptions-item>--> <!-- </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 => { powerSupplyInfoOptionList.find(item => {
return item.id == proviteData1.powerSupplyInfo return item.id == proviteData1.powerSupplyInfo
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1.powerSupply }}
</el-descriptions-item> </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 => { loadLevelOptionList.find(item => {
return item.id == proviteData1.loadLevel return item.id == proviteData1.loadLevel
})?.name })?.name
}} }}
</el-descriptions-item> </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 => { energyQualityIndexList.find(item => {
return item.id == proviteData1.energyQualityIndex return item.id == proviteData1.energyQualityIndex
})?.name })?.name
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="可研报告"> <el-descriptions-item label="可研报告"
<span v-if="detailData1.userType == 0 || detailData1.userType == 1"> :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"> <el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" /> <View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon> </el-icon>
@@ -493,7 +547,9 @@
{{ proviteData1.feasibilityReport?.name }} {{ proviteData1.feasibilityReport?.name }}
</a> </a>
</span> </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"> <el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" /> <View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon> </el-icon>
@@ -502,7 +558,9 @@
</a> </a>
</span> </span>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.preliminaryDesignDescription?.name">
<View @click="openFile(proviteData1?.preliminaryDesignDescription?.name)" /> <View @click="openFile(proviteData1?.preliminaryDesignDescription?.name)" />
</el-icon> </el-icon>
@@ -511,7 +569,9 @@
{{ proviteData1?.preliminaryDesignDescription?.name }} {{ proviteData1?.preliminaryDesignDescription?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.predictionEvaluationReport?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReport?.name)" /> <View @click="openFile(proviteData1?.predictionEvaluationReport?.name)" />
</el-icon> </el-icon>
@@ -519,7 +579,9 @@
{{ proviteData1?.predictionEvaluationReport?.name }} {{ proviteData1?.predictionEvaluationReport?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.predictionEvaluationReviewOpinions?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReviewOpinions?.name)" /> <View @click="openFile(proviteData1?.predictionEvaluationReviewOpinions?.name)" />
</el-icon> </el-icon>
@@ -527,7 +589,9 @@
{{ proviteData1?.predictionEvaluationReviewOpinions?.name }} {{ proviteData1?.predictionEvaluationReviewOpinions?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.substationMainWiringDiagram?.name">
<View @click="openFile(proviteData1?.substationMainWiringDiagram?.name)" /> <View @click="openFile(proviteData1?.substationMainWiringDiagram?.name)" />
</el-icon> </el-icon>
@@ -535,7 +599,9 @@
{{ proviteData1?.substationMainWiringDiagram?.name }} {{ proviteData1?.substationMainWiringDiagram?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.sensitiveDevices?.name">
<View @click="openFile(proviteData1?.sensitiveDevices?.name)" /> <View @click="openFile(proviteData1?.sensitiveDevices?.name)" />
</el-icon> </el-icon>
@@ -543,7 +609,9 @@
{{ proviteData1?.sensitiveDevices?.name }} {{ proviteData1?.sensitiveDevices?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.antiInterferenceReport?.name">
<View @click="openFile(proviteData1?.antiInterferenceReport?.name)" /> <View @click="openFile(proviteData1?.antiInterferenceReport?.name)" />
</el-icon> </el-icon>
@@ -551,7 +619,9 @@
{{ proviteData1?.antiInterferenceReport?.name }} {{ proviteData1?.antiInterferenceReport?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.powerQualityReport?.name">
<View @click="openFile(proviteData1?.powerQualityReport?.name)" /> <View @click="openFile(proviteData1?.powerQualityReport?.name)" />
</el-icon> </el-icon>
@@ -560,7 +630,9 @@
</a> </a>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="其他附件" <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"> <el-icon class="elView" v-if="proviteData1?.additionalAttachments?.name">
<View @click="openFile(proviteData1?.additionalAttachments?.name)" /> <View @click="openFile(proviteData1?.additionalAttachments?.name)" />
</el-icon> </el-icon>
@@ -652,6 +724,7 @@ const userStateList = reactive([
value: '3' value: '3'
} }
]) ])
const dictData = useDictData() const dictData = useDictData()
//字典获取所在地市 //字典获取所在地市
const areaOptionList = dictData.getBasicData('jibei_area') const areaOptionList = dictData.getBasicData('jibei_area')
@@ -667,23 +740,80 @@ const evaluationTypeList = dictData.getBasicData('Evaluation_Type')
const evaluationDeptList = dictData.getBasicData('evaluation_dept') const evaluationDeptList = dictData.getBasicData('evaluation_dept')
const loadLevelOptionList = dictData.getBasicData('load_level') const loadLevelOptionList = dictData.getBasicData('load_level')
const powerSupplyInfoOptionList = dictData.getBasicData('supply_condition') const powerSupplyInfoOptionList = dictData.getBasicData('supply_condition')
const changeTheField: any = ref({})
/** 获得数据 */ /** 获得数据 */
const getInfo = async () => { const getInfo = async () => {
detailLoading.value = true detailLoading.value = true
let obj1: any = {}
let obj2: any = {}
try { try {
await getUserReportUpdateById(props.id || queryId).then(res => { 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() getProviteData1()
}) })
await getUserReportById(props.id || queryId).then(res => { 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() getProviteData()
}) })
} finally { } finally {
detailLoading.value = false 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 proviteData = ref()
const proviteData1 = ref() const proviteData1 = ref()
@@ -1001,3 +1131,8 @@ onMounted(() => {
margin-right: 10px; margin-right: 10px;
} }
</style> </style>
<style scoped>
:deep(.my-content) {
background: var(--el-color-success-light-7) !important;
}
</style>

View File

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

View File

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

View File

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

View File

@@ -1,37 +1,47 @@
<template> <template>
<TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'> <TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label='项目名称'> <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>
<el-form-item label='所在地市'> <el-form-item label="所在地市">
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'> <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-select>
</el-form-item> </el-form-item>
<el-form-item label='流程状态'> <el-form-item label="流程状态">
<el-select v-model='tableStore.table.params.status' clearable placeholder='请选择流程状态'> <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-select>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
<!-- <el-button icon="el-icon-Plus" type="primary" @click="addList">新增</el-button> --> <!-- <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-Plus" type="primary" @click="addFormModel">新增</el-button>
<el-button icon='el-icon-Delete' type='primary' @click='deleteEven'>删除</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> --> <!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
</template> </template>
</TableHeader> </TableHeader>
<Table ref='tableRef' :checkbox-config='checkboxConfig' /> <Table ref="tableRef" :checkbox-config="checkboxConfig" />
<!-- 新增 --> <!-- 新增 -->
<Add ref='addRef' @onSubmit='tableStore.index()' /> <Add ref="addRef" @onSubmit="tableStore.index()" />
<!-- 上传 --> <!-- 上传 -->
<Audit ref='AuditRef' @onSubmit='tableStore.index()' /> <Audit ref="AuditRef" @onSubmit="tableStore.index()" />
<!-- 查看详情 detail 新增/修改 create--> <!-- 查看详情 detail 新增/修改 create-->
<addForm ref='addForms' @onSubmit='tableStore.index()'></addForm> <addForm ref="addForms" @onSubmit="tableStore.index()"></addForm>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, onMounted, provide, watch, reactive } from 'vue' import { ref, onMounted, provide, watch, reactive } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
@@ -66,14 +76,19 @@ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getUserReport', url: '/supervision-boot/userReport/getUserReport',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'未建档用户档案录入管理',
column: [ column: [
{ {
width: '60', width: '60',
type: 'checkbox' 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 return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} }, }
},
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 }, // { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{ {
field: 'city', field: 'city',
@@ -225,6 +240,23 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName 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.city = ''
@@ -259,9 +291,7 @@ const deleteEven = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => { deleteUserReport(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -269,12 +299,7 @@ const deleteEven = () => {
}) })
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
@@ -381,9 +406,10 @@ const getUserTypeName = (userType: any) => {
return '新建电网工程' return '新建电网工程'
} }
const props = defineProps({ id: { type: String, default: 'null' } }) const props = defineProps({ id: { type: String, default: 'null' } })
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
const fullId = newValue.split('@')[0] const fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -397,8 +423,9 @@ watch(() => props.id, async (newValue, oldValue) => {
}) })
} }
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>
<style scoped lang='scss'></style> <style scoped lang="scss"></style>

View File

@@ -1,17 +1,24 @@
<!--待办事项列表--> <!--待办事项列表-->
<template> <template>
<div> <div>
<TableHeader date-picker nextFlag theCurrentTime> <TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
<template #select> <template #select>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name" <el-option
:value="item.id"></el-option> v-for="item in statusSelect"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字" <el-input
clearable maxlength="32" show-word-limit></el-input> v-model="tableStore.table.params.searchValue"
placeholder="输入变电站、监测点"
clearable
></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
@@ -54,13 +61,14 @@ const tableStore = new TableStore({
url: '/supervision-boot/quitRunningDevice/list', url: '/supervision-boot/quitRunningDevice/list',
method: 'POST', method: 'POST',
publicHeight: 65, publicHeight: 65,
filename:'监测点状态管理',
column: [ column: [
{ {
width: '60', width: '60',
type: 'checkbox' type: 'checkbox'
}, },
{ {
field: 'index',
title: '序号', title: '序号',
width: '80', width: '80',
formatter: (row: any) => { formatter: (row: any) => {
@@ -220,6 +228,49 @@ const tableStore = new TableStore({
// } // }
tableStore.table.params.deviceType = 2 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 = '' tableStore.table.params.searchValue = ''
@@ -250,8 +301,7 @@ const deleteEven = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => { deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -260,9 +310,6 @@ const deleteEven = () => {
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
/** 流程实例详情 */ /** 流程实例详情 */
@@ -316,7 +363,9 @@ watch(
) )
const props = defineProps({ id: { type: String, default: 'null' } }) const props = defineProps({ id: { type: String, default: 'null' } })
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
const fullId = newValue.split('@')[0] const fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -327,5 +376,7 @@ watch(() => props.id, async (newValue, oldValue) => {
deviceQuitPopup.value.open('重新发起', res.data) deviceQuitPopup.value.open('重新发起', res.data)
} }
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>

View File

@@ -1,16 +1,24 @@
<!--待办事项列表--> <!--待办事项列表-->
<template> <template>
<div> <div>
<TableHeader date-picker nextFlag theCurrentTime> <TableHeader date-picker nextFlag theCurrentTime showTimeAll showExport>
<template v-slot:select> <template v-slot:select>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name" <el-option
:value="item.id"></el-option> v-for="item in statusSelect"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="筛选"> <el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="请输入关键字" clearable maxlength="32" show-word-limit></el-input> <el-input
v-model="tableStore.table.params.searchValue"
placeholder="输入变电站、终端"
clearable
></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
@@ -53,6 +61,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/quitRunningDevice/list', url: '/supervision-boot/quitRunningDevice/list',
method: 'POST', method: 'POST',
publicHeight: 65, publicHeight: 65,
filename:'终端状态管理',
column: [ column: [
{ {
width: '60', width: '60',
@@ -216,6 +225,49 @@ const tableStore = new TableStore({
// } // }
// } // }
tableStore.table.params.deviceType = 1 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 = '' tableStore.table.params.status = ''
@@ -245,8 +297,7 @@ const deleteEven = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => { deleteQuitRunningDevice(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -255,7 +306,6 @@ const deleteEven = () => {
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
/** 流程实例详情 */ /** 流程实例详情 */
@@ -309,7 +359,9 @@ watch(
) )
const props = defineProps({ id: { type: String, default: 'null' } }) const props = defineProps({ id: { type: String, default: 'null' } })
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
const fullId = newValue.split('@')[0] const fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -320,5 +372,7 @@ watch(() => props.id, async (newValue, oldValue) => {
deviceQuitPopup.value.open('重新发起', res.data) deviceQuitPopup.value.open('重新发起', res.data)
} }
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>

View File

@@ -1,16 +1,20 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name" <el-option
:value="item.id"></el-option> v-for="item in statusSelect"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="是否解决"> <el-form-item label="是否解决">
<el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决"> <el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">
<el-option label="未解决" value="0"></el-option> <el-option label="未解决" value="0"></el-option>
<!-- <el-option label="全部" value="1"></el-option> --> <!-- <el-option label="已解决" value="1"></el-option> -->
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
@@ -65,6 +69,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/warningLeaflet/alarmPageData', url: '/supervision-boot/warningLeaflet/alarmPageData',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'告警单列表',
column: [ column: [
{ {
width: '60', width: '60',
@@ -407,6 +412,34 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum 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,8 +461,7 @@ const deleteEven = () => {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => { deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -437,10 +469,7 @@ const deleteEven = () => {
}) })
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
/**取消流程操作*/ /**取消流程操作*/
@@ -485,13 +514,14 @@ const handleAudit = (instanceId: any, historyInstanceId: any) => {
} }
const props = defineProps(['id', 'businessKey']) const props = defineProps(['id', 'businessKey'])
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let fullId = newValue.split('@')[0] let fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
const routeTime = Number(newValue.split('@')[1]) const routeTime = Number(newValue.split('@')[1])
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT || fullId == 'null') return // 路由时间超过500ms则不执行 if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => { await getById(fullId).then(res => {
if (res && res.code == 'A0000') { if (res && res.code == 'A0000') {
@@ -521,10 +551,11 @@ watch(() => props.id, async (newValue, oldValue) => {
) )
} }
} }
} }
}) })
}, { immediate: true }) },
{ immediate: true }
)
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@@ -1,5 +1,5 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #operation> <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> </template>
@@ -16,7 +16,7 @@ import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import FeedbackPopup from '@/views/pqs/supervise/technology/feedbackPopup.vue' import FeedbackPopup from '@/views/pqs/supervise/technology/feedbackPopup.vue'
import { useRouter } from 'vue-router' 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 { useAdminInfo } from '@/stores/adminInfo'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { deleteWarningLeaflet } from '@/api/supervision-boot/delete/index' import { deleteWarningLeaflet } from '@/api/supervision-boot/delete/index'
@@ -31,6 +31,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/warningLeaflet/warningPageData', url: '/supervision-boot/warningLeaflet/warningPageData',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'预警单列表',
column: [ column: [
{ {
width: '60', width: '60',
@@ -38,7 +39,6 @@ const tableStore = new TableStore({
}, },
{ {
title: '序号', title: '序号',
align: 'center', align: 'center',
width: 80, width: 80,
formatter: (row: any) => { formatter: (row: any) => {
@@ -258,6 +258,33 @@ const tableStore = new TableStore({
], ],
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.currentPage = tableStore.table.params.pageNum 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: '请选择要删除的数据' message: '请选择要删除的数据'
}) })
} else { } else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', { ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}) }).then(() => {
.then(() => {
deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => { deleteWarningLeaflet(tableStore.table.selection.map(item => item.id)).then(res => {
ElMessage({ ElMessage({
type: 'success', type: 'success',
@@ -295,9 +320,7 @@ const deleteEven = () => {
}) })
tableStore.index() tableStore.index()
}) })
}) })
} }
} }
/**取消流程操作*/ /**取消流程操作*/
@@ -332,8 +355,10 @@ const handleAudit = (instanceId: any, historyInstanceId: any) => {
}) })
} }
const props = defineProps(['id','businessKey']) const props = defineProps(['id', 'businessKey'])
watch(() => props.id, async (newValue, oldValue) => { watch(
() => props.id,
async (newValue, oldValue) => {
if (newValue === 'null') return // 直接返回,避免后续逻辑执行 if (newValue === 'null') return // 直接返回,避免后续逻辑执行
let fullId = newValue.split('@')[0] let fullId = newValue.split('@')[0]
let nowTime = Date.now() let nowTime = Date.now()
@@ -341,7 +366,7 @@ watch(() => props.id, async (newValue, oldValue) => {
if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT || fullId == 'null') return // 路由时间超过500ms则不执行 if (isNaN(routeTime) || nowTime - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT || fullId == 'null') return // 路由时间超过500ms则不执行
await getById(fullId).then(res => { await getById(fullId).then(res => {
if (res && res.code == 'A0000') { if (res && res.code == 'A0000') {
if(props.businessKey == '3'){ if (props.businessKey == '3') {
feedbackPopup.value.open( feedbackPopup.value.open(
'填报预警反馈单', '填报预警反馈单',
res.data.id, res.data.id,
@@ -351,7 +376,7 @@ watch(() => props.id, async (newValue, oldValue) => {
res.data.reportPath, res.data.reportPath,
res.data.reformAdvice res.data.reformAdvice
) )
}else{ } else {
feedbackPopup.value.open( feedbackPopup.value.open(
'重新填报预警反馈单', '重新填报预警反馈单',
res.data.id, res.data.id,
@@ -366,7 +391,9 @@ watch(() => props.id, async (newValue, oldValue) => {
} }
} }
}) })
}, {immediate: true}) },
{ immediate: true }
)
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

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

View File

@@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<TableHeader area ref='TableHeaderRef'> <TableHeader area ref='TableHeaderRef' showExport>
<template #select> <template #select>
<el-form-item label='运行状态'> <el-form-item label='运行状态'>
<el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态"> <el-select v-model="tableStore.table.params.runF" clearable placeholder="请选择运行状态">
@@ -13,7 +13,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='信息查询'> <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> </el-form-item>
</template> </template>
@@ -44,12 +44,11 @@ const tableStore = new TableStore({
url: '/device-boot/runManage/getDeviceLedger', url: '/device-boot/runManage/getDeviceLedger',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'终端台账',
column: [ 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 return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} } },
},
{ {
field: 'areaName', field: 'areaName',
title: '省公司', title: '省公司',

View File

@@ -1,10 +1,10 @@
<template> <template>
<div> <div>
<TableHeader ref="TableHeaderRef"> <TableHeader ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label="项目名称"> <el-form-item label="项目名称">
<el-input style="width: 200px" placeholder="请输入项目名称" v-model="tableStore.table.params.projectName" <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>
<el-form-item label="所在地市"> <el-form-item label="所在地市">
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择所在地市"> <el-select v-model="tableStore.table.params.city" clearable placeholder="请选择所在地市">
@@ -16,8 +16,7 @@
<template #operation> <template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</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-Delete" type="primary" @click="deleteEven">删除</el-button>
<el-button icon="el-icon-Download" type="primary" @click="exportExcelTemplate" <el-button icon="el-icon-Download" type="primary" @click="exportExcelTemplate" :loading="loading">模板下载</el-button>
:loading="loading">模板下载</el-button>
<el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button> <el-button icon="el-icon-Upload" type="primary" @click="importUserData">批量导入</el-button>
</template> </template>
</TableHeader> </TableHeader>
@@ -61,16 +60,15 @@ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage', url: '/supervision-boot/userReport/getInterferenceUserPage',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'干扰源用户台账',
column: [ column: [
{ {
width: '60', width: '60',
type: 'checkbox' 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 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: '厂站名称', minWidth: 100 }, { field: 'substation', title: '厂站名称', minWidth: 100 },
{ field: 'projectName', title: '项目名称', minWidth: 170 }, { field: 'projectName', title: '项目名称', minWidth: 170 },
@@ -346,7 +344,7 @@ const getUserTypeName = (userType: any) => {
return '新建电网工程' return '新建电网工程'
} }
//导出模板 //导出模板
const exportExcelTemplate = async () => { const exportExcelTemplate = async() => {
loading.value = true loading.value = true
await downloadSensitiveReportTemplate().then((res: any) => { await downloadSensitiveReportTemplate().then((res: any) => {
let blob = new Blob([res], { let blob = new Blob([res], {
@@ -362,7 +360,7 @@ const exportExcelTemplate = async () => {
}) })
await setTimeout(() => { await setTimeout(() => {
loading.value = false loading.value = false
}, 0) },0)
} }
//批量导入用户数据 //批量导入用户数据

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,12 +1,12 @@
<!---终端入网检测--> <!---终端入网检测-->
<template> <template>
<TableHeader area ref='TableHeaderRef'> <TableHeader area ref='TableHeaderRef' showExport>
<template #select> <template #select>
<el-form-item label='搜索'> <el-form-item label='搜索'>
<el-input <el-input
v-model='tableStore.table.params.searchValue' v-model='tableStore.table.params.searchValue'
placeholder='输入变电站.终端名称' placeholder='输入变电站.终端名称'
clearable maxlength="32" show-word-limit clearable
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label='流程状态'> <el-form-item label='流程状态'>
@@ -74,6 +74,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/checkDevice/list', url: '/supervision-boot/checkDevice/list',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'终端周期检测',
column: [ 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 return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
@@ -217,6 +218,23 @@ const tableStore = new TableStore({
tableStore.table.params.deptId = tableStore.table.params.deptIndex tableStore.table.params.deptId = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2] tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName // 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.status = ''

View File

@@ -1,10 +1,10 @@
<!---终端入网检测--> <!---终端入网检测-->
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll showExport ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="搜索"> <el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端、监测点名称" <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>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -53,6 +53,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/tempLinedebug/list', url: '/supervision-boot/tempLinedebug/list',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'监测点联调列表',
column: [ column: [
{ {
width: '60', width: '60',
@@ -218,6 +219,23 @@ const tableStore = new TableStore({
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.statveList = [2] tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName // 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.status = ''

View File

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

View File

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

View File

@@ -1,10 +1,10 @@
<!---终端入网检测--> <!---终端入网检测-->
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef" showExport>
<template #select> <template #select>
<el-form-item label="搜索"> <el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端、监测点名称" <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>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -56,6 +56,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/tempLine/list', url: '/supervision-boot/tempLine/list',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'监测点台账录入',
column: [ column: [
{ {
width: '60', width: '60',
@@ -181,6 +182,21 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName // 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 = '' tableStore.table.params.status = ''

View File

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

View File

@@ -1,9 +1,9 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll showExport ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="搜索"> <el-form-item label="搜索">
<el-input v-model="tableStore.table.params.searchValue" placeholder="输入变电站、终端名称" <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>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
@@ -69,6 +69,7 @@ const tableStore = new TableStore({
url: '/supervision-boot/deVReport/list', url: '/supervision-boot/deVReport/list',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
filename:'终端入网检测',
column: [ column: [
{ {
width: '60', width: '60',
@@ -217,6 +218,21 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName // 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 = '' tableStore.table.params.status = ''

View File

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

View File

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

View File

@@ -1,71 +1,452 @@
<!---试运行列表-->
<template> <template>
<div class="default-main"> <div class="default-main">
<el-tabs v-model="activeName" type="border-card"> <TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef">
<template #select>
<el-tab-pane label="监测点台账录入" name="1"> <el-form-item label="流程状态">
<monitorpoint :id="id" v-if="activeName == '1'" /> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">
</el-tab-pane> <el-option v-for="item in statusSelect" :key="item.id" :label="item.name"
<el-tab-pane label="监测点联调列表" name="2"> :value="item.id"></el-option>
<jointDebugList :id="id" v-if="activeName == '2'" /> </el-select>
</el-tab-pane> </el-form-item>
<el-tab-pane label="试运行评估" name="3">
<testRun :id="id" v-if="activeName == '3'" />
</el-tab-pane>
</el-tabs>
</div>
</template> </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" />
<script setup lang="ts"> <!-- <el-dialog
import { ref } from 'vue' 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>
import { mainHeight } from '@/utils/layout' </div>
import monitorpoint from '@/views/pqs/supervise/terminalNetworkDetection/components/monitorpoint/index.vue' <div class='block' style='text-align: center'>
import jointDebugList from '@/views/pqs/supervise/terminalNetworkDetection/components/jointDebugList/index.vue' <el-button type='primary' style='margin-top: 50px' @click='runTestSubmit'>确认</el-button>
import testRun from './testRun.vue' </div>
</el-dialog>-->
</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()
import { useRoute } from "vue-router"; 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(\/[^?#]*)/)
defineOptions({ window.open(window.location.origin + '/#/previewFile?' + row.testRunReport)
name: 'terminalNetwotk' }
},
{
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'
}) })
const activeName = ref('1') 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)
}
}
]
}
],
const route = useRoute() beforeSearchFun: () => {
const id = ref('') tableStore.table.params.orgNo = tableStore.table.params.deptIndex
const key = ref('') tableStore.table.params.statveList = [2]
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
})
tableStore.table.params.status = ''
watch(() => route.query.t, async (newValue, oldValue) => { provide('tableStore', tableStore)
if (route.fullPath.includes('terminalNetwotk')) {
let type = (route.query.type as string) || 'null' onMounted(() => {
if (type == 'null') { } tableStore.index()
else if (type == '1') { })
activeName.value = '1' const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig>({
} else if (type == '2') { labelField: '',
activeName.value = '2' checkMethod: ({ row }) => {
} else if (type == '3') { return adminInfo.roleCode.includes('delete_info') || !(row.testRunState == 1 || row.testRunState == 2)
activeName.value = '3' }
})
const deleteEven = () => {
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
} else { } else {
activeName.value = '4' ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', {
} confirmButtonText: '确定',
id.value = (route.query.id as string) || 'null' cancelButtonText: '取消',
key.value = (route.query.key as string) || 'null' type: 'warning'
id.value = id.value + '@' + route.query.t })
} .then(() => {
}, { deep: true, immediate: true }) let createBy = tableStore.table.selection.map(item => item.createBy)
let status = tableStore.table.selection.map(item => item.status)
if (adminInfo.roleCode.includes('delete_info')) {
const layout = mainHeight(63) as any deleteList()
</script> } else if (createBy.includes(adminInfo.$state.id) && status.includes(0)) {
deleteList()
<style lang="scss" scoped> } else {
.bars_w { ElMessage({
width: 100%; type: 'warning',
height: 500px; message: '只能删除自己填报的数据!!!'
})
} }
:deep(.el-tabs__content) { })
height: v-bind('layout.height');
overflow-y: auto;
}
</style>
}
}
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> <template>
<div > <div class="default-main">
<TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef"> <el-tabs v-model="activeName" type="border-card">
<template #select>
<el-form-item label="流程状态"> <el-tab-pane label="监测点台账录入" name="1">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <monitorpoint :id="id" v-if="activeName == '1'" />
<el-option v-for="item in statusSelect" :key="item.id" :label="item.name" </el-tab-pane>
:value="item.id"></el-option> <el-tab-pane label="监测点联调列表" name="2">
</el-select> <jointDebugList :id="id" v-if="activeName == '2'" />
</el-form-item> </el-tab-pane>
<el-tab-pane label="试运行评估" name="3">
<testRun :id="id" v-if="activeName == '3'" />
</el-tab-pane>
</el-tabs>
</div>
</template> </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 <script setup lang="ts">
v-model='timeDialog' import { ref } from 'vue'
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> import { mainHeight } from '@/utils/layout'
<div class='block' style='text-align: center'> import monitorpoint from '@/views/pqs/supervise/terminalNetworkDetection/components/monitorpoint/index.vue'
<el-button type='primary' style='margin-top: 50px' @click='runTestSubmit'>确认</el-button> import jointDebugList from '@/views/pqs/supervise/terminalNetworkDetection/components/jointDebugList/index.vue'
</div> import testRun from './testRun.vue'
</el-dialog>-->
</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()
const tableStore = new TableStore({ import { useRoute } from "vue-router";
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(\/[^?#]*)/)
window.open(window.location.origin + '/#/previewFile?' + row.testRunReport) defineOptions({
} name: 'terminalNetwotk'
},
{
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() const activeName = ref('1')
}
})
},
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: () => { const route = useRoute()
tableStore.table.params.orgNo = tableStore.table.params.deptIndex const id = ref('')
tableStore.table.params.statveList = [2] const key = ref('')
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
})
tableStore.table.params.status = ''
provide('tableStore', tableStore) watch(() => route.query.t, async (newValue, oldValue) => {
if (route.fullPath.includes('terminalNetwotk')) {
onMounted(() => { let type = (route.query.type as string) || 'null'
tableStore.index() if (type == 'null') { }
}) else if (type == '1') {
const checkboxConfig = reactive<VxeTablePropTypes.CheckboxConfig>({ activeName.value = '1'
labelField: '', } else if (type == '2') {
checkMethod: ({ row }) => { activeName.value = '2'
return adminInfo.roleCode.includes('delete_info') || !(row.testRunState == 1 || row.testRunState == 2) } else if (type == '3') {
} activeName.value = '3'
})
const deleteEven = () => {
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的数据'
})
} else { } else {
ElMessageBox.confirm('此操作将永久删除, 是否继续?', '提示', { activeName.value = '4'
confirmButtonText: '确定', }
cancelButtonText: '取消', id.value = (route.query.id as string) || 'null'
type: 'warning' key.value = (route.query.key as string) || 'null'
}) id.value = id.value + '@' + route.query.t
.then(() => { }
let createBy = tableStore.table.selection.map(item => item.createBy) }, { deep: true, immediate: true })
let status = tableStore.table.selection.map(item => item.status)
if (adminInfo.roleCode.includes('delete_info')) {
deleteList() const layout = mainHeight(63) as any
} else if (createBy.includes(adminInfo.$state.id) && status.includes(0)) { </script>
deleteList()
} else { <style lang="scss" scoped>
ElMessage({ .bars_w {
type: 'warning', width: 100%;
message: '只能删除自己填报的数据!!!' height: 500px;
})
} }
}) :deep(.el-tabs__content) {
height: v-bind('layout.height');
overflow-y: auto;
} }
} </style>
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

@@ -2,7 +2,7 @@
<!-- 用户投诉 --> <!-- 用户投诉 -->
<!-- 2 有新增 发起 预警单 --> <!-- 2 有新增 发起 预警单 -->
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="是否解决"> <el-form-item label="是否解决">
<el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决"> <el-select v-model="tableStore.table.params.dealState" clearable placeholder="请选择是否解决">

View File

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

View File

@@ -1,7 +1,7 @@
<template> <template>
<!-- <div>1 监测点信息 发起预告警单 </div> --> <!-- <div>1 监测点信息 发起预告警单 </div> -->
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef"> <TableHeader datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="区域"> <el-form-item label="区域">
<Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea"/> <Area ref="areaRef" v-model="tableStore.table.params.deptId" @changeValue="changeArea"/>
@@ -62,10 +62,10 @@
</el-form-item> --> </el-form-item> -->
</template> </template>
<template #operation> <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>
<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>
</template> </template>
@@ -328,7 +328,7 @@ tableStore.table.params.dataType = '1'
tableStore.table.params.deptId = dictData.state.area[0].id tableStore.table.params.deptId = dictData.state.area[0].id
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
// TableHeaderRef.value.setDatePicker([{label: '', value: 3}]) TableHeaderRef.value.setDatePicker([{label: '月', value: 3}])
tableStore.index() tableStore.index()
setTimeout(() => { setTimeout(() => {

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- <div> 普测结果 发起预告警单</div> --> <!-- <div> 普测结果 发起预告警单</div> -->
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template v-slot:select> <template v-slot:select>
<el-form-item label="计划名称"> <el-form-item label="计划名称">
<el-input style="width: 200px" v-model="tableStore.table.params.searchValue" clearable <el-input style="width: 200px" v-model="tableStore.table.params.searchValue" clearable

View File

@@ -1,7 +1,7 @@
<!---试运行列表--> <!---试运行列表-->
<template> <template>
<div> <div>
<TableHeader area nextFlag theCurrentTime showTimeAll ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="流程状态"> <el-form-item label="流程状态">
<el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态"> <el-select v-model="tableStore.table.params.status" clearable placeholder="请选择流程状态">

View File

@@ -104,7 +104,7 @@
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="cancelFn">取消</el-button> <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> <el-button type="primary" @click="submitFn(false)" :loading="loading">提交审批</el-button>
</div> </div>
</template> </template>
@@ -213,12 +213,12 @@ const treeData = ref()
const loadData = () => { const loadData = () => {
initDetpStataionTree({ orgId: dictData.state.area[0].id }).then(res => { initDetpStataionTree({ orgId: dictData.state.area[0].id }).then(res => {
treeList.value = res.data treeList.value = res.data
initDetpStataionTree({ orgId: 'a3069759b0b6072c99cf9a7af6c162e9' }).then(res => { // initDetpStataionTree({ orgId: '02d1b4e1680413eb72f3fa63d46c496c' }).then(res => {
treeListCgy.value = res.data // treeListCgy.value = res.data
setTimeout(() => { setTimeout(() => {
changeArea() changeArea()
}, 10) }, 10)
}) // })
}) })
} }
@@ -283,14 +283,30 @@ const changeArea = () => {
treeList.value.forEach((item: any) => { treeList.value.forEach((item: any) => {
if (item.id == form.value.deptId) { if (item.id == form.value.deptId) {
list.push(item) list.push(item)
if (item.id != treeListCgy.value[0].id && item.name != '冀北电力有限公司' && item.name != '超高压') {
list.push(...treeListCgy.value) } 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 { } else {
list.push(item.children.filter((v: any) => v.id == form.value.deptId)[0]) 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 treeData.value = list

View File

@@ -1,5 +1,5 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref="TableHeaderRef"> <TableHeader area datePicker nextFlag theCurrentTime ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label="监督类型"> <el-form-item label="监督类型">
<el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型"> <el-select v-model="tableStore.table.params.supvType" clearable placeholder="请选择监督类型">

View File

@@ -1,5 +1,5 @@
<template> <template>
<TableHeader area datePicker nextFlag theCurrentTime showTimeAll ref='TableHeaderRef'> <TableHeader area datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<template v-slot:select> <template v-slot:select>
<el-form-item label='监督类型'> <el-form-item label='监督类型'>
<el-select v-model='tableStore.table.params.supvType' clearable placeholder='请选择监督类型'> <el-select v-model='tableStore.table.params.supvType' clearable placeholder='请选择监督类型'>

View File

@@ -1,18 +1,14 @@
<template> <template>
<div> <div>
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref='TableHeaderRef'> <TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<template #select> <template #select>
<el-form-item label='项目名称'> <el-form-item label='项目名称'>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称'></el-input> <el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' clearable maxlength="32"
show-word-limit></el-input>
</el-form-item> </el-form-item>
<el-form-item label='所在地市'> <el-form-item label='所在地市'>
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'> <el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'>
<el-option <el-option v-for='item in areaOptionList' :key='item.id' :label='item.name' :value='item.name'></el-option>
v-for='item in areaOptionList'
:key='item.id'
:label='item.name'
:value='item.name'
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template>
@@ -20,45 +16,33 @@
<!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> --> <!-- <el-button icon='el-icon-Download' type='primary'>导出</el-button> -->
</template> </template>
</TableHeader> </TableHeader>
<Table ref='tableRef'/> <Table ref='tableRef' />
</div> </div>
<el-dialog <el-dialog title='干扰源用户详细信息' v-if='dialogVisible' v-model='dialogVisible' width='65%' :append-to-body='true'
title='干扰源用户详细信息' :close-on-click-modal='false' draggable>
v-if='dialogVisible'
v-model='dialogVisible'
width='65%'
:append-to-body='true'
:close-on-click-modal='false'
draggable
>
<BpmUserReportDetail :id='interId' ref='detailsRef'></BpmUserReportDetail> <BpmUserReportDetail :id='interId' ref='detailsRef'></BpmUserReportDetail>
</el-dialog> </el-dialog>
<!-- 查看详情 detail 新增/修改 create--> <!-- 查看详情 detail 新增/修改 create-->
<addForm <addForm ref='addForms' @onSubmit='tableStore.index()' :update='update' :normalizedControl='true' openType='create'>
ref='addForms' </addForm>
@onSubmit='tableStore.index()'
:update='update'
:normalizedControl='true'
openType='create'
></addForm>
</template> </template>
<script setup lang='ts'> <script setup lang='ts'>
defineOptions({ defineOptions({
name: 'supervision/interferenceUserTable' name: 'supervision/interferenceUserTable'
}) })
import {ref, onMounted, provide, watch} from 'vue' import { ref, onMounted, provide, watch } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/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 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 BpmUserReportDetail from '../../components/undocumented/detail.vue'
import {useAdminInfo} from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
import {ElMessage, ElMessageBox} from 'element-plus' import { ElMessage, ElMessageBox } from 'element-plus'
import {userReportRenewalCancel} from '@/api/process-boot/generalTest' import { userReportRenewalCancel } from '@/api/process-boot/generalTest'
const dictData = useDictData() const dictData = useDictData()
const flag = ref(false) const flag = ref(false)
@@ -85,17 +69,19 @@ jb_dky.value =
? true ? true
: false : false
const {push, options, currentRoute} = useRouter() const { push, options, currentRoute } = useRouter()
const TableHeaderRef = ref() const TableHeaderRef = ref()
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getNormalUserPage', url: '/supervision-boot/userReport/getNormalUserPage',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
column: [ 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 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', field: 'substation',
title: '厂站名称', title: '厂站名称',
@@ -105,7 +91,7 @@ const tableStore = new TableStore({
return row.cellValue return row.cellValue
} }
}, },
{field: 'projectName', title: '项目名称', minWidth: 170}, { field: 'projectName', title: '项目名称', minWidth: 170 },
{ {
field: 'userType', field: 'userType',
title: '用户性质', title: '用户性质',
@@ -115,7 +101,7 @@ const tableStore = new TableStore({
return getUserTypeName(userType) return getUserTypeName(userType)
} }
}, },
{field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130}, { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{ {
field: 'userStatus', field: 'userStatus',
title: '用户状态', title: '用户状态',
@@ -241,7 +227,7 @@ const tableStore = new TableStore({
return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4) return row.createBy != adminInfo.$state.id || !(row.status == 3 || row.status == 4)
}, },
click: row => { click: row => {
addForms.value.open({title: '重新发起', row: row}) addForms.value.open({ title: '重新发起', row: row })
} }
}, },
{ {
@@ -338,7 +324,7 @@ const handleAudit = (instanceId: string, historyInstanceId: string) => {
/**取消流程操作*/ /**取消流程操作*/
const cancelLeave = async (row: any) => { const cancelLeave = async (row: any) => {
// //
const {value} = await ElMessageBox.prompt('请输入取消原因', '取消流程', { const { value } = await ElMessageBox.prompt('请输入取消原因', '取消流程', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
inputType: 'textarea', inputType: 'textarea',
@@ -491,7 +477,7 @@ watch(() => props.id, async (newValue, oldValue) => {
}) })
} }
}, {immediate: true}) }, { immediate: true })
</script> </script>

View File

@@ -286,77 +286,58 @@
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-descriptions :column="1" border style="flex: 1" title="变更后"> <el-descriptions :column="1" border style="flex: 1" title="变更后">
<el-descriptions-item label="填报人" :label-class-name="changeTheField?.reporter ? 'my-content' : ''" <el-descriptions-item label="填报人">
:class-name="changeTheField?.reporter ? 'my-content' : ''">
{{ detailData1.reporter }} {{ detailData1.reporter }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="填报日期" :label-class-name="changeTheField?.reportDate ? 'my-content' : ''" <el-descriptions-item label="填报日期">
:class-name="changeTheField?.reportDate ? 'my-content' : ''">
{{ formatDate(detailData1.reportDate, 'YYYY-MM-DD') }} {{ formatDate(detailData1.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="填报部门" :label-class-name="changeTheField?.orgName ? 'my-content' : ''" <el-descriptions-item label="填报部门">
:class-name="changeTheField?.orgName ? 'my-content' : ''">
{{ detailData1.orgName }} {{ detailData1.orgName }}
</el-descriptions-item> </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') }} {{ formatDate(detailData1.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="用户性质" :label-class-name="changeTheField?.userType ? 'my-content' : ''" <el-descriptions-item label="用户性质">
:class-name="changeTheField?.userType ? 'my-content' : ''">
{{ {{
userTypeList.find(item => { userTypeList.find(item => {
return item.value == detailData1.userType return item.value == detailData1.userType
})?.label })?.label
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="所在地市" :label-class-name="changeTheField?.city ? 'my-content' : ''" <el-descriptions-item label="所在地市">
:class-name="changeTheField?.city ? 'my-content' : ''">
{{ detailData1.city }} {{ detailData1.city }}
</el-descriptions-item> </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 }} {{ detailData1.responsibleDepartment }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="用户状态" :label-class-name="changeTheField?.userStatus ? 'my-content' : ''" <el-descriptions-item label="用户状态">
:class-name="changeTheField?.userStatus ? 'my-content' : ''">
{{ {{
userStateList.find(item => { userStateList.find(item => {
return item.value == detailData1.userStatus return item.value == detailData1.userStatus
})?.label })?.label
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="变电站" :label-class-name="changeTheField?.substation ? 'my-content' : ''" <el-descriptions-item label="变电站">
:class-name="changeTheField?.substation ? 'my-content' : ''">
{{ detailData1.substation }} {{ detailData1.substation }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="工程名" :label-class-name="changeTheField?.projectName ? 'my-content' : ''" <el-descriptions-item label="工程名">
:class-name="changeTheField?.projectName ? 'my-content' : ''">
{{ detailData1.projectName }} {{ detailData1.projectName }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="电压等级" :label-class-name="changeTheField?.voltageLevel ? 'my-content' : ''" <el-descriptions-item label="电压等级">
:class-name="changeTheField?.voltageLevel ? 'my-content' : ''">
{{ {{
voltageLevelList.find(item => { voltageLevelList.find(item => {
return item.id == detailData1.voltageLevel return item.id == detailData1.voltageLevel
})?.name })?.name
}} }}
</el-descriptions-item> </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 : '-' }} {{ proviteData1.nonlinearDeviceType ? proviteData1.nonlinearDeviceType : '-' }}
</el-descriptions-item> </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 }} {{ detailData1.evaluationDept }}
</el-descriptions-item> </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 }} {{ detailData1.evaluationConclusion }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item :label="detailData1.userType == '4' || detailData1.userType == '5' <el-descriptions-item :label="detailData1.userType == '4' || detailData1.userType == '5'
@@ -367,13 +348,10 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
" :label-class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''" ">
:class-name="changeTheField?.nonlinearLoadType ? 'my-content' : ''">
{{ proviteData1.nonlinearLoadType }} {{ proviteData1.nonlinearLoadType }}
</el-descriptions-item> </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"> <span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.needGovernance == 0 ? '否' : '是' }} {{ proviteData1.needGovernance == 0 ? '否' : '是' }}
</span> </span>
@@ -387,9 +365,7 @@
</span> </span>
<span v-if="detailData1.userType == 6">{{ proviteData1.needGovernance == 0 ? '' : '' }}</span> <span v-if="detailData1.userType == 6">{{ proviteData1.needGovernance == 0 ? '' : '' }}</span>
</el-descriptions-item> </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"> <span v-if="detailData1.userType == 0 || detailData1.userType == 1">
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }} {{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span> </span>
@@ -405,16 +381,12 @@
{{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }} {{ proviteData1.backgroundTestPerformed == 0 ? '否' : '是' }}
</span> </span>
</el-descriptions-item> </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> <span>
{{ proviteData1.antiInterferenceTest == 0 ? '否' : '是' }} {{ proviteData1.antiInterferenceTest == 0 ? '否' : '是' }}
</span> </span>
</el-descriptions-item> </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 }} {{ proviteData1.agreementCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="PCC供电设备容量MVA" v-if=" <el-descriptions-item label="PCC供电设备容量MVA" v-if="
@@ -422,8 +394,7 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
" :label-class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''" ">
:class-name="changeTheField?.pccEquipmentCapacity ? 'my-content' : ''">
{{ proviteData1.pccEquipmentCapacity }} {{ proviteData1.pccEquipmentCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="基准短路容量MVA" v-if=" <el-descriptions-item label="基准短路容量MVA" v-if="
@@ -431,8 +402,7 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
" :label-class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''" ">
:class-name="changeTheField?.baseShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1.baseShortCircuitCapacity }} {{ proviteData1.baseShortCircuitCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="系统最小短路容量MVA" v-if=" <el-descriptions-item label="系统最小短路容量MVA" v-if="
@@ -440,8 +410,7 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
" :label-class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''" ">
:class-name="changeTheField?.minShortCircuitCapacity ? 'my-content' : ''">
{{ proviteData1?.minShortCircuitCapacity }} {{ proviteData1?.minShortCircuitCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="用户用电协议容量MVA" v-if=" <el-descriptions-item label="用户用电协议容量MVA" v-if="
@@ -449,84 +418,61 @@
detailData1.userType == '3' || detailData1.userType == '3' ||
detailData1.userType == '4' || detailData1.userType == '4' ||
detailData1.userType == '5' detailData1.userType == '5'
" :label-class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''" ">
:class-name="changeTheField?.userAgreementCapacity ? 'my-content' : ''">
{{ proviteData1?.userAgreementCapacity }} {{ proviteData1?.userAgreementCapacity }}
</el-descriptions-item> </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 }} {{ proviteData1?.pccPoint }}
</el-descriptions-item> </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 => { evaluationTypeList.find(item => {
return item.id == proviteData1?.evaluationType return item.id == proviteData1?.evaluationType
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1?.evaluationChekDept }}
</el-descriptions-item> </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 => { industryList.find(item => {
return item.id == proviteData1.industry return item.id == proviteData1.industry
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1.deviceName }}
</el-descriptions-item> </el-descriptions-item>
<!-- <el-descriptions-item label="供电电源数量" v-if="detailData1.userType == 6">--> <!-- <el-descriptions-item label="供电电源数量" v-if="detailData1.userType == 6">-->
<!-- {{ proviteData1.powerSupplyCount }}--> <!-- {{ proviteData1.powerSupplyCount }}-->
<!-- </el-descriptions-item>--> <!-- </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 => { powerSupplyInfoOptionList.find(item => {
return item.id == proviteData1.powerSupplyInfo return item.id == proviteData1.powerSupplyInfo
})?.name })?.name
}} }}
</el-descriptions-item> </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 }} {{ proviteData1.powerSupply }}
</el-descriptions-item> </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 => { loadLevelOptionList.find(item => {
return item.id == proviteData1.loadLevel return item.id == proviteData1.loadLevel
})?.name })?.name
}} }}
</el-descriptions-item> </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 => { energyQualityIndexList.find(item => {
return item.id == proviteData1.energyQualityIndex return item.id == proviteData1.energyQualityIndex
})?.name })?.name
}} }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="可研报告" <el-descriptions-item label="可研报告">
:label-class-name="changeTheField?.feasibilityReport ? 'my-content' : ''" <span v-if="detailData1.userType == 0 || detailData1.userType == 1">
: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"> <el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" /> <View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon> </el-icon>
@@ -547,9 +493,7 @@
{{ proviteData1.feasibilityReport?.name }} {{ proviteData1.feasibilityReport?.name }}
</a> </a>
</span> </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"> <el-icon class="elView" v-if="proviteData1?.feasibilityReport?.name">
<View @click="openFile(proviteData1?.feasibilityReport?.name)" /> <View @click="openFile(proviteData1?.feasibilityReport?.name)" />
</el-icon> </el-icon>
@@ -558,9 +502,7 @@
</a> </a>
</span> </span>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.preliminaryDesignDescription?.name">
<View @click="openFile(proviteData1?.preliminaryDesignDescription?.name)" /> <View @click="openFile(proviteData1?.preliminaryDesignDescription?.name)" />
</el-icon> </el-icon>
@@ -569,9 +511,7 @@
{{ proviteData1?.preliminaryDesignDescription?.name }} {{ proviteData1?.preliminaryDesignDescription?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.predictionEvaluationReport?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReport?.name)" /> <View @click="openFile(proviteData1?.predictionEvaluationReport?.name)" />
</el-icon> </el-icon>
@@ -579,9 +519,7 @@
{{ proviteData1?.predictionEvaluationReport?.name }} {{ proviteData1?.predictionEvaluationReport?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.predictionEvaluationReviewOpinions?.name">
<View @click="openFile(proviteData1?.predictionEvaluationReviewOpinions?.name)" /> <View @click="openFile(proviteData1?.predictionEvaluationReviewOpinions?.name)" />
</el-icon> </el-icon>
@@ -589,9 +527,7 @@
{{ proviteData1?.predictionEvaluationReviewOpinions?.name }} {{ proviteData1?.predictionEvaluationReviewOpinions?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.substationMainWiringDiagram?.name">
<View @click="openFile(proviteData1?.substationMainWiringDiagram?.name)" /> <View @click="openFile(proviteData1?.substationMainWiringDiagram?.name)" />
</el-icon> </el-icon>
@@ -599,9 +535,7 @@
{{ proviteData1?.substationMainWiringDiagram?.name }} {{ proviteData1?.substationMainWiringDiagram?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.sensitiveDevices?.name">
<View @click="openFile(proviteData1?.sensitiveDevices?.name)" /> <View @click="openFile(proviteData1?.sensitiveDevices?.name)" />
</el-icon> </el-icon>
@@ -609,9 +543,7 @@
{{ proviteData1?.sensitiveDevices?.name }} {{ proviteData1?.sensitiveDevices?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.antiInterferenceReport?.name">
<View @click="openFile(proviteData1?.antiInterferenceReport?.name)" /> <View @click="openFile(proviteData1?.antiInterferenceReport?.name)" />
</el-icon> </el-icon>
@@ -619,9 +551,7 @@
{{ proviteData1?.antiInterferenceReport?.name }} {{ proviteData1?.antiInterferenceReport?.name }}
</a> </a>
</el-descriptions-item> </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"> <el-icon class="elView" v-if="proviteData1?.powerQualityReport?.name">
<View @click="openFile(proviteData1?.powerQualityReport?.name)" /> <View @click="openFile(proviteData1?.powerQualityReport?.name)" />
</el-icon> </el-icon>
@@ -630,9 +560,7 @@
</a> </a>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="其他附件" <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"> <el-icon class="elView" v-if="proviteData1?.additionalAttachments?.name">
<View @click="openFile(proviteData1?.additionalAttachments?.name)" /> <View @click="openFile(proviteData1?.additionalAttachments?.name)" />
</el-icon> </el-icon>
@@ -724,7 +652,6 @@ const userStateList = reactive([
value: '3' value: '3'
} }
]) ])
const dictData = useDictData() const dictData = useDictData()
// //
const areaOptionList = dictData.getBasicData('jibei_area') const areaOptionList = dictData.getBasicData('jibei_area')
@@ -740,80 +667,23 @@ const evaluationTypeList = dictData.getBasicData('Evaluation_Type')
const evaluationDeptList = dictData.getBasicData('evaluation_dept') const evaluationDeptList = dictData.getBasicData('evaluation_dept')
const loadLevelOptionList = dictData.getBasicData('load_level') const loadLevelOptionList = dictData.getBasicData('load_level')
const powerSupplyInfoOptionList = dictData.getBasicData('supply_condition') const powerSupplyInfoOptionList = dictData.getBasicData('supply_condition')
const changeTheField: any = ref({})
/** 获得数据 */ /** 获得数据 */
const getInfo = async () => { const getInfo = async () => {
detailLoading.value = true detailLoading.value = true
let obj1: any = {}
let obj2: any = {}
try { try {
await getUserReportUpdateById(props.id || queryId).then(res => { await getUserReportUpdateById(props.id || queryId).then(res => {
obj1 = JSON.parse(JSON.stringify(res.data.userReportMessageJson)) detailData1.value = res.data.userReportMessageJson
detailData1.value = JSON.parse(JSON.stringify(res.data.userReportMessageJson))
getProviteData1() getProviteData1()
}) })
await getUserReportById(props.id || queryId).then(res => { await getUserReportById(props.id || queryId).then(res => {
obj2 = JSON.parse(JSON.stringify(res.data)) detailData.value = res.data
detailData.value = JSON.parse(JSON.stringify(res.data))
getProviteData() getProviteData()
}) })
} finally { } finally {
detailLoading.value = false 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 proviteData = ref()
const proviteData1 = ref() const proviteData1 = ref()
@@ -1131,8 +1001,3 @@ onMounted(() => {
margin-right: 10px; margin-right: 10px;
} }
</style> </style>
<style scoped>
:deep(.my-content) {
background: var(--el-color-success-light-7) !important;
}
</style>

View File

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

View File

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

View File

@@ -62,11 +62,11 @@
detailData.userType == '4' || detailData.userType == '4' ||
detailData.userType == '5' detailData.userType == '5'
"> ">
{{ proviteData?.nonlinearLoadType || '' }} {{ proviteData.nonlinearLoadType }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="是否需要治理"> <el-descriptions-item label="是否需要治理">
<span v-if="detailData.userType == 0 || detailData.userType == 1"> <span v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData?.needGovernance == 1 ? '' : '' }} {{ proviteData.needGovernance == 0 ? '' : '' }}
</span> </span>
<span v-if=" <span v-if="
detailData.userType == 2 || detailData.userType == 2 ||
@@ -74,13 +74,13 @@
detailData.userType == 4 || detailData.userType == 4 ||
detailData.userType == 5 detailData.userType == 5
"> ">
{{ proviteData?.needGovernance == 1 ? '' : '' }} {{ proviteData.needGovernance == 0 ? '' : '' }}
</span> </span>
<span v-if="detailData.userType == 6">{{ proviteData?.needGovernance == 1 ? '' : '' }}</span> <span v-if="detailData.userType == 6">{{ proviteData.needGovernance == 0 ? '' : '' }}</span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="是否开展背景测试"> <el-descriptions-item label="是否开展背景测试">
<span v-if="detailData.userType == 0 || detailData.userType == 1"> <span v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }} {{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
</span> </span>
<span v-if=" <span v-if="
detailData.userType == 2 || detailData.userType == 2 ||
@@ -88,10 +88,10 @@
detailData.userType == 4 || detailData.userType == 4 ||
detailData.userType == 5 detailData.userType == 5
"> ">
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }} {{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
</span> </span>
<span v-if="detailData.userType == 6"> <span v-if="detailData.userType == 6">
{{ proviteData?.backgroundTestPerformed == 1 ? '' : '' }} {{ proviteData.backgroundTestPerformed == 0 ? '' : '' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
@@ -109,11 +109,11 @@
<el-descriptions-item label="是否开展抗扰度测试" v-if="detailData.userType == 6"> <el-descriptions-item label="是否开展抗扰度测试" v-if="detailData.userType == 6">
<span> <span>
{{ proviteData.antiInterferenceTest == 1 ? '' : '' }} {{ proviteData.antiInterferenceTest == 0 ? '' : '' }}
</span> </span>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="用户协议容量MVA" v-if="detailData.userType == 0 || detailData.userType == 1"> <el-descriptions-item label="用户协议容量MVA" v-if="detailData.userType == 0 || detailData.userType == 1">
{{ proviteData?.agreementCapacity }} {{ proviteData.agreementCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="PCC供电设备容量MVA" v-if=" <el-descriptions-item label="PCC供电设备容量MVA" v-if="
detailData.userType == '2' || detailData.userType == '2' ||
@@ -121,7 +121,7 @@
detailData.userType == '4' || detailData.userType == '4' ||
detailData.userType == '5' detailData.userType == '5'
"> ">
{{ proviteData?.pccEquipmentCapacity }} {{ proviteData.pccEquipmentCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="基准短路容量MVA" v-if=" <el-descriptions-item label="基准短路容量MVA" v-if="
detailData.userType == '2' || detailData.userType == '2' ||
@@ -129,7 +129,7 @@
detailData.userType == '4' || detailData.userType == '4' ||
detailData.userType == '5' detailData.userType == '5'
"> ">
{{ proviteData?.baseShortCircuitCapacity }} {{ proviteData.baseShortCircuitCapacity }}
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="系统最小短路容量MVA" v-if=" <el-descriptions-item label="系统最小短路容量MVA" v-if="
detailData.userType == '2' || detailData.userType == '2' ||
@@ -202,8 +202,8 @@
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name"> <el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" /> <View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon> </el-icon>
<a target="_blank" :href="proviteData?.feasibilityReport?.url" rel="nofollow"> <a target="_blank" :href="proviteData.feasibilityReport?.url" rel="nofollow">
{{ proviteData?.feasibilityReport?.name }} {{ proviteData.feasibilityReport?.name }}
</a> </a>
</span> </span>
<span v-if=" <span v-if="
@@ -215,16 +215,16 @@
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name"> <el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" /> <View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon> </el-icon>
<a target="_blank" :href="proviteData?.feasibilityReport?.url"> <a target="_blank" :href="proviteData.feasibilityReport?.url">
{{ proviteData?.feasibilityReport?.name }} {{ proviteData.feasibilityReport?.name }}
</a> </a>
</span> </span>
<span v-if="detailData.userType == 6"> <span v-if="detailData.userType == 6">
<el-icon class="elView" v-if="proviteData?.feasibilityReport?.name"> <el-icon class="elView" v-if="proviteData?.feasibilityReport?.name">
<View @click="openFile(proviteData?.feasibilityReport?.name)" /> <View @click="openFile(proviteData?.feasibilityReport?.name)" />
</el-icon> </el-icon>
<a target="_blank" :href="proviteData?.feasibilityReport?.url"> <a target="_blank" :href="proviteData.feasibilityReport?.url">
{{ proviteData?.feasibilityReport?.name }} {{ proviteData.feasibilityReport?.name }}
</a> </a>
</span> </span>
</el-descriptions-item> </el-descriptions-item>
@@ -573,6 +573,7 @@ const preview = (val: any, url: any) => {
} }
// //
if (val == 'predictionEvaluationReport') { if (val == 'predictionEvaluationReport') {
console.log(url, '9999999')
predictionEvaluationReportRef?.value.open(url) predictionEvaluationReportRef?.value.open(url)
} }
// //
@@ -625,66 +626,59 @@ const getProviteData = async () => {
) { ) {
proviteData.value = detailData.value.userReportSubstationPO proviteData.value = detailData.value.userReportSubstationPO
//线 //线
if (proviteData.value?.nonlinearLoadType != undefined) {
await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => { await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => {
proviteData.value.nonlinearLoadType = res.data?.name proviteData.value.nonlinearLoadType = res.data?.name
}) })
}
} else { } else {
proviteData.value = detailData.value.userReportSensitivePO proviteData.value = detailData.value.userReportSensitivePO
} }
// //
if (proviteData.value?.feasibilityReport != undefined && proviteData.value?.feasibilityReport.length>7) { if (proviteData.value.feasibilityReport) {
await getFileNamePath(proviteData.value.feasibilityReport, 'feasibilityReport') await getFileNamePath(proviteData.value.feasibilityReport, 'feasibilityReport')
} }
// //
if (proviteData.value?.preliminaryDesignDescription != undefined && proviteData.value?.preliminaryDesignDescription.length>7) { if (proviteData.value.preliminaryDesignDescription) {
await getFileNamePath(proviteData.value.preliminaryDesignDescription, 'preliminaryDesignDescription') await getFileNamePath(proviteData.value.preliminaryDesignDescription, 'preliminaryDesignDescription')
} }
// //
if (proviteData.value?.predictionEvaluationReport != undefined && proviteData.value?.predictionEvaluationReport.length>7) { if (proviteData.value.predictionEvaluationReport) {
await getFileNamePath(proviteData.value.predictionEvaluationReport, 'predictionEvaluationReport') await getFileNamePath(proviteData.value.predictionEvaluationReport, 'predictionEvaluationReport')
} }
// //
if (proviteData.value?.predictionEvaluationReviewOpinions != undefined && proviteData.value?.predictionEvaluationReviewOpinions.length>7) { if (proviteData.value.predictionEvaluationReviewOpinions) {
await getFileNamePath( await getFileNamePath(
proviteData.value.predictionEvaluationReviewOpinions, proviteData.value.predictionEvaluationReviewOpinions,
'predictionEvaluationReviewOpinions' 'predictionEvaluationReviewOpinions'
) )
} }
//线 //线
if (proviteData.value?.substationMainWiringDiagram != undefined && proviteData.value?.substationMainWiringDiagram.length>7) { if (proviteData.value.substationMainWiringDiagram) {
await getFileNamePath(proviteData.value.substationMainWiringDiagram, 'substationMainWiringDiagram') await getFileNamePath(proviteData.value.substationMainWiringDiagram, 'substationMainWiringDiagram')
} }
// //
if (proviteData.value?.sensitiveDevices != undefined && proviteData.value?.sensitiveDevices.length>7) { if (proviteData.value.sensitiveDevices) {
await getFileNamePath(proviteData.value.sensitiveDevices, 'sensitiveDevices') await getFileNamePath(proviteData.value.sensitiveDevices, 'sensitiveDevices')
} }
// //
if (proviteData.value?.antiInterferenceReport != undefined && proviteData.value?.antiInterferenceReport.length>7) { if (proviteData.value.antiInterferenceReport) {
await getFileNamePath(proviteData.value.antiInterferenceReport, 'antiInterferenceReport') await getFileNamePath(proviteData.value.antiInterferenceReport, 'antiInterferenceReport')
} }
// //
if (proviteData.value?.powerQualityReport != undefined && proviteData.value?.powerQualityReport.length>7) { if (proviteData.value.powerQualityReport) {
await getFileNamePath(proviteData.value.powerQualityReport, 'powerQualityReport') await getFileNamePath(proviteData.value.powerQualityReport, 'powerQualityReport')
} }
// //
if (proviteData.value?.additionalAttachments != undefined && proviteData.value?.additionalAttachments.length>7) { if (proviteData.value.additionalAttachments) {
getFileNamePath(proviteData.value.additionalAttachments, 'additionalAttachments') getFileNamePath(proviteData.value.additionalAttachments, 'additionalAttachments')
} }
// //
if ( detailData.value.netInReport.length > 0 ) { if (detailData.value.netInReport.length > 0) {
netInReportList.value = [] netInReportList.value = []
detailData.value.netInReport.forEach((item: any) => { detailData.value.netInReport.forEach((item: any) => {
if (item != null) { if (item != null) {

View File

@@ -1,8 +1,8 @@
<template> <template>
<TableHeader datePicker nextFlag theCurrentTime showTimeAll ref='TableHeaderRef'> <TableHeader datePicker nextFlag theCurrentTime ref='TableHeaderRef'>
<template #select> <template #select>
<el-form-item label='项目名称'> <el-form-item label='项目名称'>
<el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称'></el-input> <el-input v-model='tableStore.table.params.projectName' placeholder='请输入项目名称' clearable maxlength="32" show-word-limit></el-input>
</el-form-item> </el-form-item>
<el-form-item label='所在地市'> <el-form-item label='所在地市'>
<el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'> <el-select v-model='tableStore.table.params.city' clearable placeholder='请选择所在地市'>

Some files were not shown because too many files have changed in this diff Show More