Files
admin-sjzx/src/views/pqs/supervise/electricalEnergy/components/NewlyAdd.vue
2024-06-13 13:32:50 +08:00

534 lines
22 KiB
Vue

<template>
<el-dialog draggable v-model="add" title="问题新增" width="400px" :before-close="handleClose">
<el-divider content-position="left">第一步 基本信息填报</el-divider>
<el-form :inline="true" ref="ruleForm" :rules="rules" label-width="auto" class="form-one" :model="addData">
<el-form-item label="所属单位">
<Area ref="areaRef" v-model="addData.orgNo" disabled />
</el-form-item>
<el-form-item label="问题来源" prop="problemSources">
<el-select v-model="addData.problemSources" clearable placeholder="请选择问题来源">
<el-option
v-for="item in problemData"
:key="item.code"
:label="item.name"
:value="item.code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="问题名称" prop="problemName">
<el-input v-model="addData.problemName" clearable placeholder="请填写问题名称"></el-input>
</el-form-item>
</el-form>
<template #footer>
<div>
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="nextStep">下一步</el-button>
</div>
</template>
</el-dialog>
<!-- 新增第二步(在线监测超标问题新增) -->
<el-dialog draggable title="在线监测超标问题新增" v-model="onlineAdd" width="1500px" :before-close="handleClose">
<el-divider content-position="left">第二步 选择问题测点</el-divider>
<el-form :inline="true" class="form">
<el-form-item label="告警时间">
<DatePicker ref="DateRef" />
</el-form-item>
<el-form-item label="稳态指标">
<el-select v-model="harmonicTypes" multiple collapse-tags placeholder="请选择稳态指标">
<el-option v-for="item in harmonicTypesList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="越线天数占比(%)">
<el-input-number v-model="rate" :min="0" :max="100" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-Search" @click="searchOnLine">查询</el-button>
</el-form-item>
</el-form>
<vxe-table v-bind="defaultAttribute" v-loading="isLoading1" height="350" ref="xTable1Ref" :data="onlineAddData">
<vxe-column type="radio" width="60"></vxe-column>
<vxe-column field="sustationName" title="变电站"></vxe-column>
<vxe-column field="barName" title="母线"></vxe-column>
<vxe-column field="measurementPointName" title="监测点名称"></vxe-column>
<vxe-column field=" " title="监测点编号"></vxe-column>
<vxe-column field="loadType" title="监测对象类型"></vxe-column>
<vxe-column field="objName" title="监测对象"></vxe-column>
<vxe-column field="voltageLevel" title="电压等级"></vxe-column>
<vxe-column field="harmonicType" title="告警类型" :formatter="formatter"></vxe-column>
<vxe-column field="overLimitrate" title="越线天数占比">
<template #default="{ row }">
<el-dropdown>
<span class="el-dropdown-link">
{{ row.overLimitrate.toFixed(3) }}
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="item in row?.dateList">{{ item }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</vxe-column>
</vxe-table>
<div style="display: flex; justify-content: center; margin-top: 10px">
<el-button type="primary" class="ml20" @click="previouStep">上一步</el-button>
<el-button type="primary" class="ml20" @click="OnlineMonitoring">生成问题</el-button>
<el-button type="primary" class="ml20" @click="handleClose">取消</el-button>
</div>
</el-dialog>
<!-- 新增第二步(普测超标问题新增) -->
<el-dialog draggable title="普测超标问题新增" v-model="ordinaryAdd" width="1200px" :before-close="handleClose">
<el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider>
<el-form :model="ordinaryA" :inline="true" class="form">
<el-form-item>
<Area v-model="ordinaryA.orgNo"></Area>
</el-form-item>
<el-form-item label="普测结果上传时间">
<el-date-picker
v-model="ordinaryA.planStartTime"
type="month"
format="YYYY-MM"
value-format="YYYY-MM-DD"
placeholder="选择月"
@change="queryPlanName"
></el-date-picker>
</el-form-item>
<el-form-item label="普测计划名称">
<el-select v-model="ordinaryA.planName" clearable placeholder="请选择">
<el-option
v-for="item in planNameList"
:key="item.planName"
:label="item.planName"
:value="item.planName"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-Search" @click="searchFnExcessive">查询</el-button>
</el-form-item>
</el-form>
<vxe-table
v-bind="defaultAttribute"
v-loading="isLoading2"
height="350"
ref="xTable2Ref"
:data="ordinaryAddData"
>
<vxe-column type="radio" width="60"></vxe-column>
<vxe-column field="subName" title="变电站名称"></vxe-column>
<vxe-column field="voltageLevelName" title="变电站电压等级"></vxe-column>
</vxe-table>
<el-divider content-position="left">第三步 选择问题指标</el-divider>
<el-form :model="ordinaryA" :rules="rules" ref="ordinaryARef" :inline="true" class="form">
<el-form-item label="稳态指标" prop="steadyState">
<el-checkbox-group v-model="ordinaryA.steadyState">
<el-checkbox v-for="(item, ind) in steadyStateList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="暂态指标" prop="transientIndicators">
<el-checkbox-group v-model="ordinaryA.transientIndicators">
<el-checkbox v-for="(item, ind) in transientIndicatorsList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<div style="display: flex; justify-content: center; margin-top: 10px">
<el-button type="primary" class="ml20" @click="previouStep">上一步</el-button>
<el-button type="primary" class="ml20" @click="GeneralSurvey">生成问题</el-button>
<el-button type="primary" class="ml20" @click="handleClose">取消</el-button>
</div>
</el-dialog>
<!-- 新增第二步(运维异常问题新增) -->
<el-dialog draggable title="运维异常问题新增" v-model="operationAdd" width="1200px" :before-close="handleClose">
<el-divider content-position="left">第二步 选择普测计划及问题类型</el-divider>
<el-form :model="operationAdddata" ref="operationAddRef" :inline="true" :rules="rules">
<el-form-item label="异常终端名称:" prop="abnormalDevName">
<el-input
v-model="operationAdddata.abnormalDevName"
clearable
placeholder="请填写异常终端名称"
></el-input>
</el-form-item>
<el-form-item label="发现异常时间:" prop="abnormalDevTime">
<el-date-picker
v-model="operationAdddata.abnormalDevTime"
type="date"
placeholder="请选择发现异常时间"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
<br />
<el-form-item label="终端异常描述:" style="margin-top: 10px" prop="eventDescription">
<el-input
type="textarea"
style="width: 400px"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请填写终端异常描述"
v-model="operationAdddata.eventDescription"
></el-input>
</el-form-item>
<el-divider content-position="left">第三步 选择问题指标</el-divider>
<el-form-item label="稳态指标:" prop="steadyState">
<el-checkbox-group v-model="operationAdddata.steadyState">
<el-checkbox v-for="(item, ind) in steadyStateList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="暂态指标:" prop="transientIndicators">
<el-checkbox-group v-model="operationAdddata.transientIndicators">
<el-checkbox v-for="(item, ind) in transientIndicatorsList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<div style="display: flex; justify-content: center; margin-top: 10px">
<el-button type="primary" class="ml20" @click="previouStep">上一步</el-button>
<el-button type="primary" class="ml20" @click="generateAbnormal">生成问题</el-button>
<el-button type="primary" class="ml20" @click="handleClose">取消</el-button>
</div>
</el-dialog>
<!-- 新增第二步(用户投诉问题新增) -->
<el-dialog draggable title="用户投诉问题新增" v-model="userAdd" width="1200px" :before-close="handleClose">
<el-divider content-position="left">第二步 选择投诉用户</el-divider>
<el-form :model="userAdddata" :inline="true" ref="userAddRef" :rules="rules">
<el-form-item label="用户名称:" prop="userName">
<el-input v-model="userAdddata.userName" clearable placeholder="请输入用户名称"></el-input>
</el-form-item>
<el-form-item label="用户编号:" prop="userNo">
<el-input v-model="userAdddata.userNo" clearable placeholder="请输入用户编号"></el-input>
</el-form-item>
<el-divider content-position="left">第三步 填写投诉详情</el-divider>
<el-form-item label="投诉内容:" style="margin-top: 10px" prop="complaintContent">
<el-input
type="textarea"
style="width: 400px"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入内容"
v-model="userAdddata.complaintContent"
></el-input>
</el-form-item>
<br />
<el-form-item label="投诉时间:" style="margin-top: 10px" prop="complaintTime">
<el-date-picker
v-model="userAdddata.complaintTime"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
<el-divider content-position="left">第四步 选择问题指标</el-divider>
<el-form-item label="稳态指标:" prop="steadyState">
<el-checkbox-group v-model="userAdddata.steadyState">
<el-checkbox v-for="(item, ind) in steadyStateList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="暂态指标:" prop="transientIndicators">
<el-checkbox-group v-model="userAdddata.transientIndicators">
<el-checkbox v-for="(item, ind) in transientIndicatorsList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<div style="display: flex; justify-content: center; margin-top: 10px">
<el-button type="primary" class="ml20" @click="previouStep">上一步</el-button>
<el-button type="primary" class="ml20" @click="userAddProblem">生成问题</el-button>
<el-button type="primary" class="ml20" @click="handleClose">取消</el-button>
</div>
</el-dialog>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { useDictData } from '@/stores/dictData'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import Area from '@/components/form/area/index.vue'
import DatePicker from '@/components/form/datePicker/index.vue'
import { ArrowDown } from '@element-plus/icons-vue'
const emit = defineEmits(['handleClose', 'onSubmit'])
const dictData = useDictData()
const problemData = dictData.getBasicData('Problem_Sources')
const alarmList = dictData.getBasicData('alarm_Type')
const Voltage = dictData.getBasicData('Dev_Voltage')
const userTypeData = dictData.getBasicData('User_Category')
import {
getRMpPartHarmonicDetail,
querySurveyPlanName,
querySurveyPlanOnQuestion,
addAbnormalIssues,
addComplaintIssues,
addGeneralSurveyIssues,
addExcessiveIssues
} from '@/api/process-boot/electricitymanagement'
import { ElMessage } from 'element-plus'
const steadyStateList = dictData.getBasicData('Steady_Indicator')
const transientIndicatorsList = dictData.getBasicData('Transient_Indicators')
const add = ref(true)
const onlineAdd = ref(false)
const isLoading1 = ref(false)
const isLoading2 = ref(false)
const ordinaryAdd = ref(false)
const userAdd = ref(false)
const operationAdd = ref(false)
const ruleForm = ref()
const DateRef = ref()
const userAddRef = ref()
const operationAddRef = ref()
const ordinaryARef = ref()
const xTable1Ref = ref()
const xTable2Ref = ref()
const harmonicTypes = ref([]) //稳态指标id集合
const harmonicTypesList = dictData.getBasicData('Indicator_Type')
const rate = ref(60) //越线天数占比(一个月)
const addData = ref({
orgName: '',
problemSources: '',
problemName: '',
orgNo: dictData.state.area[0].id
})
const ordinaryA = ref({
orgNo: '',
orgName: '',
planName: '',
planStartTime: '',
uploadTime: '',
name: '',
steadyState: [],
transientIndicators: []
})
const operationAdddata = ref({
abnormalDevName: '',
eventDescription: '',
abnormalDevTime: '',
steadyState: [],
transientIndicators: []
})
const userA = ref({
userType: 'Elec_User',
id: ''
})
const userAdddata = ref({
complaintContent: '',
complaintTime: '',
steadyState: [],
userName: '',
userNo: '',
transientIndicators: []
})
const planNameList: any = ref([])
const onlineAddData = ref([])
const ordinaryAddData = ref([])
const rules = {
problemName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }],
userName: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
userNo: [{ required: true, message: '请输入用户编号', trigger: 'blur' }],
complaintContent: [{ required: true, message: '请输入投诉内容', trigger: 'blur' }],
complaintTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
problemSources: [{ required: true, message: '情选择问题来源', trigger: 'change' }],
abnormalDevTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
transientIndicators: [{ required: true, message: '请选择暂态指标', trigger: 'change' }],
steadyState: [{ required: true, message: '请选择稳态指标', trigger: 'change' }],
eventDescription: [{ required: true, message: '请输入终端异常描述', trigger: 'blur' }],
abnormalDevName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }]
}
// 关闭
const handleClose = () => {
emit('handleClose')
emit('onSubmit')
}
// 下一步
const nextStep = () => {
ruleForm.value.validate((valid: any) => {
if (valid) {
if (addData.value.problemSources == 'Online') {
add.value = false
onlineAdd.value = true
setTimeout(() => {
DateRef.value.setTimeOptions([{ label: '月份', value: 3 }])
searchOnLine()
}, 0)
} else if (addData.value.problemSources == 'General') {
ordinaryA.value.orgNo = dictData.state.area[0].id
ordinaryA.value.orgName = dictData.state.area[0].name
add.value = false
ordinaryAdd.value = true
ordinaryA.value.planStartTime = window.XEUtils.toDateString(new Date().getTime(), 'yyyy-MM') + '-01'
queryPlanName()
setTimeout(() => {
searchFnExcessive()
}, 0)
} else if (addData.value.problemSources == 'User_Complaints') {
add.value = false
userAdd.value = true
} else if (addData.value.problemSources == 'Dev_Exception') {
add.value = false
operationAdd.value = true
}
}
})
}
// 上一步
const previouStep = () => {
onlineAdd.value = false
ordinaryAdd.value = false
userAdd.value = false
operationAdd.value = false
add.value = true
}
// 在线监测超标问题新增
const OnlineMonitoring = () => {
if (xTable1Ref.value.getRadioRecord() == null) {
return ElMessage.warning('请选择变电站')
} else {
addExcessiveIssues({
warnTarget:xTable1Ref.value.getRadioRecord().harmonicType,
...xTable1Ref.value.getRadioRecord(),
...addData.value
}).then((res: any) => {
ElMessage.success('新增成功!')
emit('handleClose')
emit('onSubmit')
})
}
}
// 在线监测告警查询
const searchOnLine = () => {
isLoading1.value = true
getRMpPartHarmonicDetail({
harmonicTypes: harmonicTypes.value,
rate: rate.value * 0.01,
startTime: DateRef.value.timeValue[0],
endTime: DateRef.value.timeValue[1]
}).then(res => {
isLoading1.value = false
onlineAddData.value = res.data
})
}
// 普通监测超标问题新增
const queryPlanName = () => {
querySurveyPlanName({
orgNo: ordinaryA.value.orgNo,
planStartTime: ordinaryA.value.planStartTime
}).then(res => {
planNameList.value = res.data
})
}
const searchFnExcessive = () => {
isLoading2.value = true
querySurveyPlanOnQuestion(ordinaryA.value).then(res => {
isLoading2.value = false
ordinaryAddData.value = res.data
})
}
// 普测超标生成问题
const GeneralSurvey = () => {
if (xTable2Ref.value.getRadioRecord() == null) {
return ElMessage.warning('请选择变电站')
} else {
ordinaryARef.value.validate((valid: any) => {
if (valid) {
addGeneralSurveyIssues({
substationId: xTable2Ref.value.getRadioRecord().subId,
...xTable2Ref.value.getRadioRecord(),
...ordinaryA.value,
...addData.value
}).then((res: any) => {
ElMessage.success('新增成功!')
emit('handleClose')
emit('onSubmit')
})
}
})
}
}
const formatter = (row: any) => {
if (row.column.field == 'harmonicType') {
return harmonicTypesList.filter((item: any) => item.id == row.cellValue)[0]?.name
} else if (row.column.field == 'voltageLevel') {
return Voltage.filter((item: any) => item.id == row.cellValue)[0]?.name
} else if (row.column.field == 'electricityType') {
return dictData.getBasicData('Ele_Class').filter((item: any) => item.id == row.cellValue)[0]?.name
} else {
return row.cellValue
}
}
// 运维异常问题新增
const generateAbnormal = () => {
operationAddRef.value.validate((valid: any) => {
if (valid) {
addAbnormalIssues({
...operationAdddata.value,
...addData.value
}).then((res: any) => {
ElMessage.success('新增成功!')
emit('handleClose')
emit('onSubmit')
})
}
})
}
// 用户投诉新增
const userAddProblem = () => {
userAddRef.value.validate((valid: any) => {
if (valid) {
addComplaintIssues({
...userAdddata.value,
...addData.value
}).then((res: any) => {
ElMessage.success('新增成功!')
emit('handleClose')
emit('onSubmit')
})
}
})
}
onMounted(() => {})
</script>
<style lang="scss" scoped>
.el-dropdown-link {
cursor: pointer;
color: var(--el-color-primary) !important;
display: flex;
align-items: center;
}
</style>