|
@@ -120,6 +120,7 @@
|
|
|
v-model="scope.row.offset"
|
|
|
class="table-column-input"
|
|
|
type="number"
|
|
|
+ oninput="if(value.length>5) value=value.slice(0,5)"
|
|
|
:disabled="Boolean(scope.row.id)"
|
|
|
/>
|
|
|
</template>
|
|
@@ -225,7 +226,7 @@
|
|
|
</template>
|
|
|
</el-form-item>
|
|
|
<el-form-item label="*点号" :label-width="formLabelWidth">
|
|
|
- <el-input v-model="form.offset" maxlength="6" />
|
|
|
+ <el-input v-model="form.offset" disabled maxlength="6" />
|
|
|
</el-form-item>
|
|
|
<el-form-item v-if="false" label="关联遥信点号 (仅遥控可关联)" :label-width="formLabelWidth">
|
|
|
<el-input v-if="form.range=='COIL_STATUS'" v-model="form.relationTag" maxlength="6" placeholder="请输入遥信点号" />
|
|
@@ -236,10 +237,10 @@
|
|
|
<el-input v-else v-model="form.relationTag" disabled />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="倍率" :label-width="formLabelWidth">
|
|
|
- <el-input v-model="form.scaling" maxlength="5" />
|
|
|
+ <el-input v-model="form.scaling" type="number" maxlength="5" oninput="if(value.length>5)value=value.slice(0,5)" />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="偏移量" :label-width="formLabelWidth">
|
|
|
- <el-input v-model="form.adjust" maxlength="6" />
|
|
|
+ <el-input v-model="form.adjust" type="number" maxlength="6" oninput="if(value.length>6)value=value.slice(0,6)" />
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
@@ -303,7 +304,7 @@ export default {
|
|
|
tmpCheckPointId: 0,
|
|
|
tmpTableData: [],
|
|
|
// 每页显示多少条
|
|
|
- pageLimit: 20,
|
|
|
+ pageLimit: 50,
|
|
|
paginationNumber: 1,
|
|
|
// 一共多少条
|
|
|
paginationTotalElements: 0,
|
|
@@ -329,7 +330,9 @@ export default {
|
|
|
stepIndex: '',
|
|
|
tableHeight: '',
|
|
|
// 多选框选中数据
|
|
|
- multipleSelection: ''
|
|
|
+ multipleSelection: '',
|
|
|
+ // 数据提交状态
|
|
|
+ iscommitstate: false
|
|
|
}
|
|
|
},
|
|
|
watch: {
|
|
@@ -360,6 +363,7 @@ export default {
|
|
|
this.tableHeight = window.innerHeight - marginBottom
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.initFunctions()
|
|
|
this.$nextTick(() => {
|
|
|
// 网页加载完成后执行
|
|
|
this.importCsvActionStr = `/product/model/0/models.csv`
|
|
@@ -368,7 +372,6 @@ export default {
|
|
|
this.getPlanCheckPoint()
|
|
|
this.importCsvActionStr = `/product/model/${this.currentPlanData.product}/models.csv`
|
|
|
}
|
|
|
- this.initFunctions()
|
|
|
})
|
|
|
},
|
|
|
methods: {
|
|
@@ -455,6 +458,9 @@ export default {
|
|
|
// console.log('planClear 清除')
|
|
|
this.tableData = []
|
|
|
},
|
|
|
+ checkNotSavePoint() {
|
|
|
+ return true
|
|
|
+ },
|
|
|
// 获取测点表格数据
|
|
|
async getPlanCheckPoint(pageObj) {
|
|
|
this.vloading = true
|
|
@@ -506,6 +512,8 @@ export default {
|
|
|
this.paginationTotalPages = response.totalPages
|
|
|
this.paginationTotalElements = parseInt(response.totalElements)
|
|
|
this.paginationNumber = response.number * 1 + 1
|
|
|
+ }).catch((res) => {
|
|
|
+ this.vloading = false
|
|
|
})
|
|
|
},
|
|
|
// 表格重排
|
|
@@ -527,7 +535,7 @@ export default {
|
|
|
// // editRow(editPath, editData)
|
|
|
|
|
|
// },
|
|
|
- async saveClick(row, index) {
|
|
|
+ async saveClick(row, index, ishint) {
|
|
|
// if (row.offset > 65535) {
|
|
|
// this.$message({
|
|
|
// type: 'error',
|
|
@@ -547,15 +555,43 @@ export default {
|
|
|
if (v === '') {
|
|
|
isNotPassMesage = '必填项(测点名称)不能为空'
|
|
|
}
|
|
|
- v = editData.range == null ? '' : editData.range
|
|
|
- v = v.toString().replace(/ /gi, '')
|
|
|
- if (v === '') {
|
|
|
- isNotPassMesage = '必填项(点号类型)不能为空'
|
|
|
+ const names = {}
|
|
|
+ for (let i = 0; i < this.tableData.length; i++) {
|
|
|
+ const v = this.tableData[i].name
|
|
|
+ if (names[v] != null) {
|
|
|
+ isNotPassMesage = '测点名称' + v + '已经存在'
|
|
|
+ break
|
|
|
+ }
|
|
|
+ names[v] = this.tableData[i]
|
|
|
}
|
|
|
- v = editData.offset == null ? '' : editData.offset
|
|
|
- v = v.toString().replace(/ /gi, '')
|
|
|
- if (v === '') {
|
|
|
- isNotPassMesage = '必填项(点号)不能为空'
|
|
|
+ // const has = this.tableData.filter((item) => { if (item.name === v && row.id !== item.id) { return true } })
|
|
|
+ if (isNotPassMesage !== '') {
|
|
|
+ row.name = ''
|
|
|
+ } else {
|
|
|
+ v = editData.range == null ? '' : editData.range
|
|
|
+ v = v.toString().replace(/ /gi, '')
|
|
|
+ if (v === '') {
|
|
|
+ isNotPassMesage = '必填项(点号类型)不能为空'
|
|
|
+ }
|
|
|
+ v = editData.offset == null ? '' : editData.offset
|
|
|
+ v = v.toString().replace(/ /gi, '')
|
|
|
+ if (v === '') {
|
|
|
+ isNotPassMesage = '必填项(点号)不能为空'
|
|
|
+ } else {
|
|
|
+ const offsets = {}
|
|
|
+ for (let i = 0; i < this.tableData.length; i++) {
|
|
|
+ const v = this.tableData[i].range + ':' + this.tableData[i].offset
|
|
|
+ if (offsets[v] != null) {
|
|
|
+ isNotPassMesage = '点号' + v + '已经存在'
|
|
|
+ break
|
|
|
+ }
|
|
|
+ offsets[v] = this.tableData[i]
|
|
|
+ }
|
|
|
+ // const has2 = this.tableData.filter((item) => { if (item.offset === (v * 1) && row.id !== item.id) { return true } })
|
|
|
+ if (isNotPassMesage !== '') {
|
|
|
+ row.offset = ''
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if (isNotPassMesage !== '') {
|
|
|
this.$message({
|
|
@@ -563,10 +599,10 @@ export default {
|
|
|
message: isNotPassMesage,
|
|
|
offset: window.screen.height / 3
|
|
|
})
|
|
|
- return
|
|
|
+ return null
|
|
|
}
|
|
|
const res = await editRow(editPath, editData)
|
|
|
- if (res) {
|
|
|
+ if (res && ishint !== 'nohint') {
|
|
|
this.$set(this.tableData[index], 'id', res.id)
|
|
|
this.$set(this.tableData[index], 'modbus', res.modbus)
|
|
|
this.$set(this.tableData[index], 'iec104', res.iec104)
|
|
@@ -576,6 +612,7 @@ export default {
|
|
|
offset: window.screen.height / 3
|
|
|
})
|
|
|
}
|
|
|
+ return res.id
|
|
|
},
|
|
|
delClick(row) {
|
|
|
// return
|
|
@@ -594,8 +631,9 @@ export default {
|
|
|
// 后端成功执行后,前端再删除选中行
|
|
|
// this.tableData.splice(index, 1)
|
|
|
// this.tableData = this.tableData.filter(item => item.id !== row.id)
|
|
|
- const newData = this.tableData.filter(item => item.id !== row.id)
|
|
|
- this.tableData = [...newData]
|
|
|
+ // const newData = this.tableData.filter(item => item.id !== row.id)
|
|
|
+ // this.tableData = [...newData]
|
|
|
+ this.getPlanCheckPoint()
|
|
|
})
|
|
|
} else {
|
|
|
// 如果是新增的临时行,直接删除选中行
|
|
@@ -620,7 +658,11 @@ export default {
|
|
|
},
|
|
|
// 提交
|
|
|
// 提交 下一步
|
|
|
- submitPlan() {
|
|
|
+ async submitPlan() {
|
|
|
+ if (this.iscommitstate) {
|
|
|
+ // 数据正在提交中
|
|
|
+ return
|
|
|
+ }
|
|
|
// console.log(`this.tmpTableData=`, this.tmpTableData)
|
|
|
let currentStep = this.currentStep
|
|
|
const noName = this.tableData.some(item => ((!item.name) || (!item.range) || (!item.offset.toString())))
|
|
@@ -640,22 +682,27 @@ export default {
|
|
|
this.$emit('changeStep', currentStep)
|
|
|
return
|
|
|
}
|
|
|
+ this.iscommitstate = true
|
|
|
// 不接受数组提交,只能单条提交,所以使用遍历提交
|
|
|
- this.tableData.forEach((item, index) => {
|
|
|
+ let iserror = false
|
|
|
+ for (let index = 0; index < this.tableData.length; index++) {
|
|
|
+ const item = this.tableData[index]
|
|
|
const tableRowData = this.getSubmitTableRowData(item)
|
|
|
-
|
|
|
- // 保存步骤
|
|
|
- const editPath = `/product/model/${this.currentPlanData.product}`
|
|
|
- editRow(editPath, tableRowData).then(res => {
|
|
|
- // console.log('PlanCheckPoint submitPlan currentStep=', currentStep)
|
|
|
- // console.log('PlanCheckPoint submitPlan index=', index)
|
|
|
- if (index === this.tableData.length - 1) {
|
|
|
+ await this.saveClick(tableRowData, index, 'nohint').then((res) => {
|
|
|
+ if (res == null) {
|
|
|
+ iserror = true
|
|
|
+ }
|
|
|
+ if (!iserror && index === this.tableData.length - 1) {
|
|
|
// 如果是最后一条数据 提交成功,下一步
|
|
|
currentStep = currentStep + 1
|
|
|
this.$emit('changeStep', currentStep)
|
|
|
}
|
|
|
})
|
|
|
- })
|
|
|
+ if (iserror) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ this.iscommitstate = false
|
|
|
} else {
|
|
|
// 已经是最后一步了
|
|
|
}
|
|
@@ -708,19 +755,9 @@ export default {
|
|
|
},
|
|
|
// 批量删除
|
|
|
async multDelete() {
|
|
|
- /* const delUrl = `/product/model/${this.currentPlanData.product}/${item.id}`
|
|
|
- delRecord(delUrl).then((response) => {
|
|
|
- console.log('delRecord rs=', response)
|
|
|
- // 后端成功执行后,前端再删除选中行
|
|
|
- // this.tableData.splice(index, 1)
|
|
|
- // this.tableData = this.tableData.filter(item => item.id !== row.id)
|
|
|
- const newData = this.tableData.filter(par => par.id !== item.id)
|
|
|
- this.tableData = [...newData]
|
|
|
- }).catch((err) => {
|
|
|
- console.log('delRecord err rs=', err)
|
|
|
- }) */
|
|
|
// 后端执行完成后,开始前端操作
|
|
|
// 遍历 `tableData` 数组
|
|
|
+ let isDelCount = false
|
|
|
for (let i = 0; i < this.tableData.length; i++) {
|
|
|
const item = this.tableData[i]
|
|
|
// 判断当前行数据是否被选中
|
|
@@ -732,8 +769,9 @@ export default {
|
|
|
const delUrl = `/product/model/${this.currentPlanData.product}/${item.id}`
|
|
|
await delRecord(delUrl).then((response) => {
|
|
|
// 后端成功执行后,前端再删除选中行
|
|
|
- this.tableData.splice(i, 1)
|
|
|
- i-- // 因为 `splice` 方法会修改数组长度,所以需要将 `i` 减去 1,避免漏删下一个元素
|
|
|
+ // this.tableData.splice(i, 1)
|
|
|
+ // i-- // 因为 `splice` 方法会修改数组长度,所以需要将 `i` 减去 1,避免漏删下一个元素
|
|
|
+ isDelCount++
|
|
|
})
|
|
|
} else {
|
|
|
// 如果是新增未保存过的数据,直接删除
|
|
@@ -742,6 +780,7 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ if (isDelCount) this.getPlanCheckPoint()
|
|
|
// this.showDel = false
|
|
|
},
|
|
|
// 多选按钮状态改变 handleSelectionChange
|
|
@@ -780,16 +819,29 @@ export default {
|
|
|
v = v.toString().replace(/ /gi, '')
|
|
|
if (v === '') {
|
|
|
isNotPassMesage = '必填项(测点名称)不能为空'
|
|
|
- }
|
|
|
- v = this.form.range || ''
|
|
|
- v = v.toString().replace(/ /gi, '')
|
|
|
- if (v === '') {
|
|
|
- isNotPassMesage = '必填项(点号类型)不能为空'
|
|
|
- }
|
|
|
- v = this.form.offset == null ? '' : this.form.offset
|
|
|
- v = v.toString().replace(/ /gi, '')
|
|
|
- if (v === '') {
|
|
|
- isNotPassMesage = '必填项(点号)不能为空'
|
|
|
+ } else {
|
|
|
+ const has = this.tableData.filter((item) => { if (item.name === v && this.form.id !== item.id) { return true } })
|
|
|
+ if (has !== null && has.length > 0) {
|
|
|
+ this.form.name = ''
|
|
|
+ isNotPassMesage = '测点名称' + v + '已经存在'
|
|
|
+ } else {
|
|
|
+ v = this.form.range || ''
|
|
|
+ v = v.toString().replace(/ /gi, '')
|
|
|
+ if (v === '') {
|
|
|
+ isNotPassMesage = '必填项(点号类型)不能为空'
|
|
|
+ }
|
|
|
+ v = this.form.offset == null ? '' : this.form.offset
|
|
|
+ v = v.toString().replace(/ /gi, '')
|
|
|
+ if (v === '') {
|
|
|
+ isNotPassMesage = '必填项(点号)不能为空'
|
|
|
+ } else {
|
|
|
+ const has2 = this.tableData.filter((item) => { if (item.range === this.form.range && item.offset === (v * 1) && this.form.id !== item.id) { return true } })
|
|
|
+ if (has2 !== null && has2.length > 0) {
|
|
|
+ this.form.offset = ''
|
|
|
+ isNotPassMesage = '点号' + this.form.range + ':' + v + '已经存在'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
if (isNotPassMesage !== '') {
|
|
|
this.$message({
|