123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471 |
- <template>
- <vxe-modal
- ref="multiAdd"
- v-model="show"
- :title="'批量添加'"
- width="900"
- height="auto"
- resize
- destroy-on-close
- @close="cancelButtonClick"
- >
- <p style="color: red;padding-left:20px">批量生成的点位将按序排在通道末尾的点位后</p>
- <vxe-form
- ref="form"
- :data="formData"
- :rules="formRules"
- title-align="center"
- title-width="100"
- >
- <vxe-form-item title="数据源" field="dataSource" span="6">
- <vxe-select v-model="formData.dataSource" placeholder="数据来源" size="big">
- <vxe-option
- v-for="item in enums.senderDataSourceEnum"
- :key="item.value"
- :value="item.value"
- :label="item.label"
- />
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item title="使用通道" field="tunnelId" span="8">
- <vxe-select
- v-model="formData.tunnelId"
- placeholder="请选择使用通道"
- size="medium"
- @change="tunnelChange"
- >
- <vxe-option v-for="item in tunnelList" :key="item.id" :value="item.id" :label="item.tunnelName"/>
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item title="通道数据类型" field="protocolPointType" span="9" title-width="150px">
- <vxe-select v-model="formData.protocolPointType" placeholder="请选择通道数据类型" size="medium">
- <vxe-option
- v-for="item in protocolDataType"
- :key="item.value"
- :value="item.value"
- :label="item.label"
- />
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item v-show="formData.dataSource=='GATHER'" title="设备类型" field="eqType" span="6">
- <vxe-select v-model="formData.eqType" placeholder="请选择设备类型" size="medium"
- @change="flushEqsOfSelectEqType">
- <vxe-option
- v-for="item in enums.equipmentTypeEnum"
- :key="item.value"
- :value="item.value"
- :label="item.label"
- />
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item v-show="formData.dataSource=='GATHER'" title="设备名" field="equipmentId" span="10">
- <vxe-select v-model="formData.equipmentId" placeholder="请选择设备名" size="medium"
- @change="flushAttrsOfSelectEq">
- <vxe-option v-for="(item,index) in eqsOfSelectEqType" :key="index" :value="item.id" :label="item.name"/>
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item v-show="formData.dataSource=='GATHER'" title="设备属性" field="equipmentAttrs" span="14">
- <el-select v-model="formData.equipmentAttrs" multiple collapse-tags placeholder="请选择设备属性" size="small">
- <el-option
- v-for="item in attrsOfSelectEq"
- :value="item.id"
- :label="item.equipmentAttribute.explanation"
- />
- </el-select>
- </vxe-form-item>
- <vxe-form-item
- v-show="formData.dataSource=='FORECAST'"
- title="预测数据属性"
- field="forecastType"
- span="10"
- title-width="120"
- >
- <vxe-select v-model="formData.forecastType" placeholder="请选择预测数据属性" @change="forecastDayChange">
- <vxe-option v-for="item in enums.forecastType" :key="item.value" :value="item.value" :label="item.label"/>
- </vxe-select>
- </vxe-form-item>
- <vxe-form-item v-show="formData.dataSource=='FORECAST'" title="预测天数" span="10" field="forecastNode">
- <el-select
- v-model="formData.forecastNode"
- multiple
- collapse-tags
- placeholder="请选择预测天数"
- size="small"
- @change="forecastNodeChangeEvent"
- >
- <el-option v-for="item in forecastDay" :key="item.value" :value="item.value" :label="item.label"/>
- </el-select>
- </vxe-form-item>
- <vxe-form-item v-show="formData.dataSource=='FORECAST'" title="预测点位" span="10" field="forecastPointNumber">
- <el-select v-model="formData.forecastPointNumber" multiple collapse-tags placeholder="请选择预测点数"
- size="small">
- <el-option v-for="item in forecastAttributeList" :value="item.pointNumber" :label="item.pointNumber"/>
- </el-select>
- </vxe-form-item>
- <!--占地方用的-->
- <div style="height: 300px"/>
- <vxe-form-item align="center" span="24">
- <vxe-button type="submit" status="primary" :disabled="saveButDisable" @click="submitForm">保存</vxe-button>
- <vxe-button @click="cancelButtonClick()">取消</vxe-button>
- </vxe-form-item>
- </vxe-form>
- </vxe-modal>
- </template>
- <script>
- import enumerations from '../../enumeration'
- export default {
- name: 'MultiAddVue',
- props: {
- show: {
- type: Boolean,
- default: false
- }
- },
- data() {
- return {
- eqsOfSelectEqType: [],
- attrsOfSelectEq: [],
- forecastDay: [],
- forecastAttributeList: [],
- saveButDisable: false,
- formData: {
- eqType: '',
- dataSource: 'GATHER',
- tunnelId: '',
- protocolPointType: '',
- equipmentId: '',
- forecastType: '',
- forecastNode: [],
- forecastPointNumber: [],
- equipmentAttrs: []
- },
- tunnelList: [],
- formRules: {
- dataSource: [{required: true, message: '请选择数据源'}],
- tunnelId: [{required: true, message: '请选择通道'}],
- protocolPointType: [{required: true, message: '请选择数据类型'}]
- },
- enums: enumerations,
- protocolDataType: enumerations.ProtocolDataType
- }
- },
- mounted() {
- this.buildTunnelSelectData()
- },
- methods: {
- /**
- * 点击取消或关闭按钮时通知父组件修改值
- */
- cancelButtonClick() {
- this.saveButDisable = false
- this.resetForm()
- this.$emit('close')
- },
- /**
- * 当所选设备类型发生改变时 刷新设备属性下拉框对应的设备名下拉
- */
- flushEqsOfSelectEqType() {
- this.attrsOfSelectEq = []
- this.formData.equipmentAttrs = []
- this.formData.equipmentId = null
- this.resultHandler(this.getEqsByEqTypeCode(this.formData.eqType)).then(res => {
- if (res != null) {
- this.eqsOfSelectEqType = res
- }
- })
- },
- /**
- * 提交表单
- */
- submitForm() {
- const _this = this
- _this.saveButDisable = true
- this.$refs.form.validate().then(async res => {
- let max = 0
- max = await this.resultHandler(_this.$axios.get('/dataExchange/senderProtocolDataPoint/maxProtocolNoInTunnel', {params: {tunnelId: _this.formData.tunnelId}})).then(res => {
- return res == null ? 0 : res
- })
- if (this.formData.dataSource == 'GATHER') {
- if (this.formData.equipmentAttrs.length == 0) {
- _this.$XModal.message({message: '并未选择需要添加的属性'})
- return
- }
- let str = '将'
- this.eqsOfSelectEqType.forEach(function (currentValue, index, arr) {
- if (currentValue.id == _this.formData.equipmentId) {
- str += currentValue.name + '的-'
- return false
- }
- })
- const name = new Array()
- let i = 0
- this.attrsOfSelectEq.forEach(function (currentValue, index, arr) {
- i = _this.formData.equipmentAttrs.indexOf(currentValue.id)
- if (i >= 0) {
- name[i] = currentValue.equipmentAttribute.explanation
- }
- })
- for (const j in name) {
- str += '[' + name[j] + ':' + (max * 1 + j * 1 + 1) + ']-'
- }
- str += name.length + '个状态点依次添加到'
- this.tunnelList.forEach(function (currentValue, index, arr) {
- if (currentValue.id == _this.formData.tunnelId) {
- str += currentValue.tunnelName
- return false
- }
- })
- str += '通道的末端(' + (max * 1 + 1) + ')'
- this.$XModal.confirm(str).then(type => {
- if (type == 'confirm') {
- for (const i in _this.formData.equipmentAttrs) {
- const param = {
- dataSource: _this.formData.dataSource,
- tunnelId: _this.formData.tunnelId,
- protocolPointType: _this.formData.protocolPointType,
- magnification: 1
- }
- param.gatherPoint = _this.formData.equipmentAttrs[i]
- param.protocolPointNo = max * 1 + i * 1 + 1
- _this.$axios.post('/dataExchange/senderProtocolDataPoint/saveDataPoint', param).then(res => {
- if (res.code == 0) {
- _this.$XModal.message({message: '保存转发点位成功'})
- _this.saveButDisable = false
- } else {
- _this.$XModal.message({message: '保存转发点位失败'})
- _this.saveButDisable = false
- }
- })
- }
- } else {
- _this.saveButDisable = false
- }
- })
- } else if (this.formData.dataSource == 'FORECAST') {
- if (this.formData.forecastPointNumber.length == 0) {
- _this.$XModal.message({message: '并未选择需要添加的预测属性'})
- return
- }
- let str = '将'
- this.enums.forecastType.forEach(function (currentValue, index, arr) {
- if (currentValue.value == _this.formData.forecastType) {
- str += currentValue.label + '的-'
- return false
- }
- })
- const days = []
- this.forecastDay.forEach(function (currentValue, index, arr) {
- var index = _this.formData.forecastNode.indexOf(currentValue.value)
- if (index >= 0) {
- days[index] = currentValue.label
- }
- })
- for (const j in days) {
- str += '[第' + days[j] + ']-'
- }
- str += '每天' + _this.formData.forecastPointNumber.length + '个预测数据依次添加到'
- this.tunnelList.forEach(function (currentValue, index, arr) {
- if (currentValue.id == _this.formData.tunnelId) {
- str += currentValue.tunnelName
- return false
- }
- })
- str += '通道的末端(' + (max * 1 + 1) + ')'
- this.$XModal.confirm(str).then(type => {
- if (type == 'confirm') {
- const param = {
- tunnelId: _this.formData.tunnelId,
- protocolPointType: _this.formData.protocolPointType,
- forecastType: _this.formData.forecastType,
- forecastNodes: _this.formData.forecastNode,
- pointNumbers: _this.formData.forecastPointNumber
- }
- _this.$axios.post('/dataExchange/senderProtocolDataPoint/batchSaveForecastPoint', param).then(res => {
- if (res.code == 0) {
- _this.$XModal.message({message: '保存转发点位成功'})
- _this.saveButDisable = false
- } else {
- _this.$XModal.message({message: '保存转发点位失败'})
- _this.saveButDisable = false
- }
- })
- }
- })
- }
- })
- },
- /**
- * 预测天数多选下拉框值发生变化时 补充预测点位下拉框的值
- */
- forecastNodeChangeEvent() {
- if (this.formData.forecastNode.length == 1) {
- this.formData.forecastPointNumber = []
- for (const i in this.forecastAttributeList) {
- this.formData.forecastPointNumber.push(this.forecastAttributeList[i].pointNumber)
- }
- } else if (this.formData.forecastNode.length == 0) {
- this.formData.forecastPointNumber = []
- }
- },
- /**
- * 当所选设备发生改变时 刷新该设备下对应的点位
- */
- flushAttrsOfSelectEq() {
- this.formData.equipmentAttrs = []
- const params = {
- equipmentType: this.formData.eqType,
- equipmentId: this.formData.equipmentId
- }
- if (this.formData.eqType == 'POWERSTATION') {
- params.equipmentId = null
- }
- this.resultHandler(this.$axios.get('/dataExchange/protocolDataPoint/gatherDataPoint', {params: params})).then(res => {
- this.attrsOfSelectEq = res
- })
- },
- /**
- *根据设备类型获取该类型下的设备属性
- * 可以传设备类型的ID 或NAME 即 可以传0 或 POWERSTATION
- * @param code
- * @returns {*}
- */
- getEqsByEqTypeCode(typeCode) {
- const axios = this.$axios
- if (typeCode === 0 || typeCode === 'POWERSTATION') {
- // 当设备类型是电站时对数数据进行处理后返回
- return new Promise(function (resolve, reject) {
- axios.get('/electricField/').then(res => {
- if (res.code == 0) {
- const eqs = []
- res.data.id = res.data.stationCode
- eqs.push(res.data)
- res.data = eqs
- }
- resolve(res)
- }).catch(error => {
- reject(error)
- })
- })
- } else {
- return axios.get('/dataExchange/equipmentInfo/' + typeCode)
- }
- },
- /**
- *针对于后台返回的信息进行二次处理的方法
- * @param promise Promise
- * @returns {Promise}
- */
- resultHandler(promise) {
- const message = this.$message
- return new Promise(function (resolve, reject) {
- promise.then(res => {
- if (res.code == 200) {
- resolve(res.data)
- } else {
- message.error(res.msg)
- reject(new Error(res.msg))
- }
- }).catch(error => {
- message.error('请求后台时发生异常')
- reject(error)
- })
- })
- },
- /**
- * 查询到所有采集通道
- * @returns {*}
- */
- getAllSenderTunnel() {
- return this.$axios.get('/TunnelInfo/getTunnel/Slave')
- },
- /**
- * 预测属性变化时 天数或者小时数随之变化
- */
- forecastDayChange() {
- this.formData.forecastNode = ''
- this.forecastAttributeList = []
- if (this.formData.forecastType === 'ULTRA_SHORT_AVAILABLE' || this.formData.forecastType === 'ULTRA_SHORT_THEORETICAL') {
- this.forecastDay = [{label: '第1小时', value: 0},
- {label: '第2小时', value: 1},
- {label: '第3小时', value: 2},
- {label: '第4小时', value: 3}]
- } else {
- this.forecastDay = [{label: '第1天', value: 0}, {label: '第2天', value: 1}, {
- label: '第3天',
- value: 2
- }, {label: '第4天', value: 3}, {label: '第5天', value: 4},
- {label: '第6天', value: 5}, {label: '第7天', value: 6}, {label: '第8天', value: 7}, {
- label: '第9天',
- value: 8
- }, {label: '第10天', value: 9}, {label: '第11天', value: 10}]
- }
- this.forecastAttributeList = []
- this.resultHandler(this.$axios.get('/dataExchange/ForecastForSendAttribute/' + 0 + '/' + this.formData.forecastType)).then(res => {
- this.forecastAttributeList = res
- })
- },
- /**
- * 根据所有通道信息构建通道下拉框的 展示数据
- */
- buildTunnelSelectData() {
- this.resultHandler(this.getAllSenderTunnel()).then(res => {
- if (res !== null) {
- this.tunnelList = res
- }
- })
- },
- /**
- *对form表单内的数据进行重置
- */
- resetForm() {
- this.formData = {
- eqType: '',
- dataSource: 'GATHER',
- tunnelId: '',
- protocolPointType: '',
- equipmentId: '',
- forecastType: '',
- forecastNode: [],
- forecastPointNumber: [],
- equipmentAttrs: []
- }
- this.protocolDataType = this.enums.ProtocolDataType
- },
- tunnelChange() {
- this.protocolDataType = []
- this.formData.protocolPointType = ''
- for (let i = 0; i < this.tunnelList.length; i++) {
- if (this.formData.tunnelId === this.tunnelList[i].id) {
- if (this.tunnelList[i].tunnelType.substring(0, 3) === 'IEC' || this.tunnelList[i].tunnelType.substring(0, 3) === 'FIL') {
- this.protocolDataType = [{label: '遥信开关量', value: 'A', key: 0}, {label: 'ABCD', value: 'ABCD', key: 9}]
- } else if (this.tunnelList[i].tunnelType.substring(0, 3) === 'CDT') {
- this.protocolDataType = [{label: '遥信开关量', value: 'A', key: 0}, {label: '+AB', value: 'P_AB', key: 1}]
- } else {
- this.protocolDataType = this.enums.ProtocolDataType
- }
- }
- }
- }
- }
- }
- </script>
- <style scoped>
- </style>
|