123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915 |
- <!-- 步骤2 -->
- <template>
- <div v-show="currentStep == 1" :class="className">
- <div class="title">测点导入</div>
- <div class="buttons">
- <div class="left">
- <!-- 批量删除 -->
- <div class="clear item">
- <el-button
- class="dark-button"
- icon="el-icon-delete"
- :disabled="!showDel"
- @click="multDelete()"
- >批量删除</el-button>
- </div>
- </div>
- <div class="right">
- <div class="item">
- <!-- 添加新测点 -->
- <el-button
- class="light-button"
- icon="el-icon-refresh-right"
- @click="updataTableData()"
- >刷新</el-button>
- </div>
- <div class="item">
- <!-- 导入即是上传文件 -->
- <el-upload
- ref="upload"
- :action="importCsvActionStr"
- :show-file-list="false"
- :auto-upload="false"
- accept=".csv"
- :on-change="submitUpload"
- >
- <el-button
- class="light-button"
- icon="el-icon-upload2"
- >导入</el-button>
- </el-upload>
- </div>
- <div class="export item">
- <el-button
- class="light-button"
- icon="el-icon-download"
- @click="getPlanExport()"
- >导出</el-button>
- </div>
- <div class="item">
- <!-- 添加新测点 -->
- <el-button
- class="dark-button"
- icon="el-icon-plus"
- @click="addCheckPoint()"
- >添加</el-button>
- </div>
- </div>
- </div>
- <div class="table-container">
- <el-table ref="multipleTable" v-loading="vloading" class="table-fixed" type="index" :data="tableData" :height="tableHeight" stripe @selection-change="handleSelectionChange">
- <el-table-column
- type="selection"
- />
- <!-- <el-table-column prop="id" label="序号" width="100" /> -->
- <el-table-column prop="iec104" label="104点号" width="100">
- <!-- rs.offset -->
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.iec104"
- class="table-column-input"
- type="number"
- disabled
- />
- </template>
- </el-table-column>
- <el-table-column prop="name" label="* 测点名称" width="200">
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.name"
- class="table-column-input"
- clearable
- placeholder="请输入名称"
- maxlength="32"
- />
- </template>
- </el-table-column>
- <el-table-column prop="name" label="* 设备名称" width="200">
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.groupingName"
- class="table-column-input"
- clearable
- placeholder="请输入设备名称"
- maxlength="32"
- />
- </template>
- </el-table-column>
- <el-table-column prop="range" label="* 点号类型">
- <!-- rs.range -->
- <template slot-scope="scope">
- <el-select
- v-model="scope.row.range"
- class="table-column-input"
- placeholder=""
- :disabled="Boolean(scope.row.id)"
- >
- <el-option
- v-for="item in checkPointFuctionOptions"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </template>
- </el-table-column>
- <el-table-column prop="offset" label="* 点号">
- <!-- rs.offset -->
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.offset"
- class="table-column-input"
- type="number"
- :disabled="Boolean(scope.row.id)"
- />
- </template>
- </el-table-column>
- <el-table-column prop="offset" label="关联遥信点号(仅遥控可关联)">
- <!-- rs.offset -->
- <template slot-scope="scope">
- <el-input
- v-if="scope.row.range=='COIL_STATUS'"
- v-model="scope.row.relationTag"
- class="table-column-input"
- placeholder="请输入遥信点号"
- type="number"
- />
- </template>
- </el-table-column>
- <el-table-column prop="offset" label="关联遥测点号(仅遥调可关联)">
- <!-- rs.offset -->
- <template slot-scope="scope">
- <el-input
- v-if="scope.row.range=='HOLDING_REGISTER'"
- v-model="scope.row.relationTag"
- class="table-column-input"
- placeholder="请输入遥测点号"
- type="number"
- />
- </template>
- </el-table-column>
- <el-table-column prop="scaling" label="倍率" width="80">
- <!-- scaling -->
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.scaling"
- class="table-column-input"
- clearable
- type="number"
- maxlength="32"
- />
- </template>
- </el-table-column>
- <el-table-column prop="adjust" label="偏移量" width="80">
- <template slot-scope="scope">
- <el-input
- v-model="scope.row.adjust"
- class="table-column-input"
- clearable
- type="number"
- maxlength="32"
- />
- </template>
- </el-table-column>
- <el-table-column label="操作" width="180" fixed="right">
- <template slot-scope="scope">
- <el-button
- class="table-act"
- type="text"
- icon="el-icon-edit"
- size="small"
- @click="editClick(scope.row, scope.$index)"
- >
- 编辑
- </el-button>
- <el-button
- class="table-act"
- type="text"
- icon="el-icon-s-order"
- size="small"
- @click="saveClick(scope.row,scope.$index)"
- >保存</el-button>
- <el-button
- class="table-act"
- type="text"
- icon="el-icon-delete"
- size="small"
- @click="delClick(scope.row, scope.$index)"
- >删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <!-- 编辑弹出的模态框套表单 -->
- <el-dialog title="测点信息" :close-on-click-modal="false" :visible.sync="dialogFormVisible">
- <el-form ref="form" :model="form">
- <el-form-item label="*测点名称" :label-width="formLabelWidth">
- <el-input v-model="form.name" autocomplete="off" maxlength="32" placeholder="请输入测点名称" />
- </el-form-item>
- <el-form-item label="*设备名称" :label-width="formLabelWidth">
- <el-input v-model="form.groupingName" maxlength="20" placeholder="请输入设备名称" />
- </el-form-item>
- <el-form-item class="modelInput" label="*测点类型" :label-width="formLabelWidth">
- <template slot-scope="scope">
- <el-select
- :key="toString(scope.row)"
- v-model="form.range"
- clearable
- placeholder=""
- >
- <el-option
- v-for="item in checkPointFuctionOptions"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </template>
- </el-form-item>
- <el-form-item label="*点号" :label-width="formLabelWidth">
- <el-input v-model="form.offset" maxlength="6" />
- </el-form-item>
- <el-form-item label="关联遥信点号 (仅遥控可关联)" :label-width="formLabelWidth">
- <el-input v-if="form.range=='COIL_STATUS'" v-model="form.relationTag" maxlength="6" placeholder="请输入遥信点号" />
- <el-input v-else v-model="form.relationTag" disabled />
- </el-form-item>
- <el-form-item label="关联遥测点号 (仅遥调可关联)" :label-width="formLabelWidth">
- <el-input v-if="form.range=='HOLDING_REGISTER'" v-model="form.relationTag" maxlength="6" placeholder="请输入遥测点号" />
- <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-form-item>
- <el-form-item label="偏移量" :label-width="formLabelWidth">
- <el-input v-model="form.adjust" maxlength="6" />
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="dialogFormVisible = false">取 消</el-button>
- <el-button type="primary" @click="saveForm">确 定</el-button>
- </div>
- </el-dialog>
- <!-- 分页 -->
- <pagination
- background
- layout="pager"
- :limit="pageLimit"
- :total="paginationTotalElements"
- :current-page.sync="paginationNumber"
- :page="paginationNumber"
- @pagination="getPlanCheckPoint"
- />
- <!-- 底部按钮 -->
- <div class="bottom-button">
- <div class="cancel-plan">
- <el-button class="light-button" @click="backStep">上一步</el-button>
- </div>
- <div class="save-plan">
- <el-button class="dark-button" @click="submitPlan()">下一步</el-button>
- </div>
- </div>
- <!-- 检查本地存储是否成功 -->
- <!-- <el-button @click="checkStore()">checkStore</el-button> -->
- </div>
- </template>
- <script>
- import { planExport } from '@/api/plan'
- import { dictOptions } from '@/api/dict'
- import Pagination from '@/components/Pagination'
- import { delRecord, editRow, httpGet, putData } from '@/api/common-action'
- export default {
- components: { Pagination },
- props: {
- className: {
- type: String,
- default: 'steps-bar-default'
- },
- currentStep: {
- type: Number,
- default: 1
- },
- currentPlanData: {
- type: Object,
- default: function() {
- return
- }
- }
- },
- data() {
- return {
- vloading: true,
- // 表格默认数据
- tableData: [],
- tmpCheckPointId: 0,
- tmpTableData: [],
- // 每页显示多少条
- pageLimit: 20,
- paginationNumber: 1,
- // 一共多少条
- paginationTotalElements: 0,
- // 一共多少页
- // paginationTotalPages: 1,
- // 导入csv 请求参数
- importCsvActionStr: '#',
- // 功能码选项
- checkPointFuctionOptions: [],
- // 值类型列表
- valueTypeVale: '',
- valueTypeOptions: [],
- // 批量删除显示控制
- showDel: false,
- // 选中的arr
- delarr: [],
- dialogFormVisible: false,
- // 模态框内表单
- form: {},
- formLabelWidth: '120px',
- // 模态框表单内数据
- modalFromArr: [],
- stepIndex: '',
- tableHeight: '',
- // 多选框选中数据
- multipleSelection: ''
- }
- },
- watch: {
- multipleSelection(nv, ov) {
- if (nv.length === 0) {
- // console.log('nv = ', nv)
- this.showDel = false
- }
- },
- 'tableData': {
- handler() {
- this.$nextTick(() => {
- this.$refs.multipleTable.doLayout()
- })
- true
- },
- deep: true
- }
- },
- // computed: {
- // totalOfEle: () => {
- // console.log(this.tableData)
- // return this.tableData.length
- // }
- // },
- created() {
- const marginBottom = 500
- this.tableHeight = window.innerHeight - marginBottom
- },
- mounted() {
- this.$nextTick(() => {
- const envUrl = process.env.VUE_APP_BASE_API
- // 网页加载完成后执行
- this.importCsvActionStr = envUrl + `/product/model/0/models.csv`
- if (this.currentPlanData.id > 0) {
- // 如果获取到了PlanId再加载详细信息
- this.getPlanCheckPoint()
- this.importCsvActionStr = envUrl + `/product/model/${this.currentPlanData.product}/models.csv`
- }
- this.initFunctions()
- })
- },
- methods: {
- // 检查本地存储是否成功
- // checkStore() {
- // console.log('checkStore start ')
- // const planFromDataStorage = localStorage.getItem('planFromData')
- // console.log('planFromData=',planFromDataStorage)
- // }
- // 文件限制
- // handleExceed(files, fileList) {
- // this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
- // },
- // 初始化
- async initFunctions() {
- // 获取当前
- // 获取功能码选项 131
- let res = await dictOptions('131')
- this.checkPointFuctionOptions = res
- // 获取值类型列表
- res = await dictOptions('132')
- this.valueTypeOptions = res
- // console.log('获取值类型列表 this.valueTypeOptions=', this.valueTypeOptions)
- this.valueTypeVale = this.valueTypeOptions[0]
- },
- // 上一步
- backStep() {
- let currentStep = this.currentStep
- currentStep--
- this.$emit('changeStep', currentStep)
- },
- // 新加测试点
- addCheckPoint() {
- // console.log('addCheckPoint 新加测试点', this.valueTypeOptions)
- this.tmpCheckPointId++
- const newTable = {
- tmpCheckPointId: this.tmpCheckPointId,
- name: '',
- groupingName: '',
- relationTag: '',
- range: this.checkPointFuctionOptions[0].id,
- offset: 0,
- dataType: this.valueTypeOptions[0].id,
- swapByte: false,
- swapWord: false,
- scaling: 1,
- adjust: 0,
- value: 0,
- // point104: 0,
- id: null
- }
- this.tableData.unshift(newTable)
- // 保存到临时表格数据中
- this.tmpTableData.push(newTable)
- this.tmpTableData.forEach((element) => {
- // console.log(`this.tmpTableData element=${element.tmpCheckPointId}`)
- })
- },
- // 导入
- submitUpload() {
- this.$refs.upload.submit()
- // 上传之后刷新页面查看上传结果
- this.getPlanCheckPoint()
- },
- // 导出
- async getPlanExport() {
- // /product/model/:product/models.csv
- planExport(this.currentPlanData.product).then((response) => {
- const link = document.createElement('a')
- const blob = new Blob([response], {
- type: 'application/vnd.ms-excel;charset=utf-8'
- })
- link.style.display = 'none'
- link.href = URL.createObjectURL(blob)
- link.setAttribute('download', `导出数据.csv`)
- document.body.appendChild(link)
- link.click()
- document.body.removeChild(link)
- // this.msgSuccess('导出成功')
- })
- },
- // 清除
- planClear() {
- // console.log('planClear 清除')
- this.tableData = []
- },
- // 获取测点表格数据
- async getPlanCheckPoint(pageObj) {
- this.vloading = true
- // 翻页时pageObj对象才会有值,属性分别为page和limit
- if (pageObj == null) {
- pageObj = {
- page: 0,
- limit: this.pageLimit
- }
- this.paginationNumber = 0
- } else {
- this.pageLimit = pageObj.limit
- }
- // 返回值
- /* {
- adjust:0 //偏移量
- dataType:null //值类型
- id:null //
- name:"中文" //测点名称
- offset:0 //104点号
- range:null //测点类型
- scaling:1 //倍率
- swapByte: 0, //字内交换
- swapWord: 0, //字节交换
- value:0 //先不用管- 测点查询
- "manual": null, //先不用管 -单测点查询
- "stepSeconds": 0, //先不用管 -单测点查询
- "pollingCycle": 0, //先不用管 -单测点查询
- "disable": null //先不用管 -单测点查询
- }
- totalPages 总页数
- number 第几页
- 删除默认 tableData数据 */
- const getUrl = `product/model/${this.currentPlanData.product}/paging?page=${pageObj.page}&size=${pageObj.limit}`
- httpGet(getUrl).then((response) => {
- this.vloading = false
- if (response == null || response.content == null || response.content.length === 0) {
- this.tableData = []
- this.paginationNumber = 0
- this.paginationTotalPages = 0
- this.paginationTotalElements = 0
- return
- }
- // 计算104点号
- // response.content.map((item, index) => {
- // item.point104 = this.calPoint104(item.range, item.offset)
- // })
- this.tableData = response.content
- this.paginationTotalPages = response.totalPages
- this.paginationTotalElements = parseInt(response.totalElements)
- this.paginationNumber = response.number * 1 + 1
- })
- },
- // 表格重排
- tableLayout() {
- this.$nextTick(() => {
- this.$refs.multipleTable.doLayout()
- })
- },
- // input失焦 添加数据
- // inputBlur(inputBlurData) {
- // // 2023-05-29 应后端要求,取消失焦保存
- // // console.log('inputBlur inputBlurData=', inputBlurData)
- // // // 后端不支持多条数据一起添加,所以这里失焦就添加数据,不需要再判断是否是临时添加数据
- // // // 此处 // /product/model/:product 中的 :product 是上一步添加方案时返回的 product 的值
- // // const editPath = `/product/model/${this.currentPlanData.product}`
- // // const editData = this.getSubmitTableRowData(inputBlurData)
- // // console.log('inputBlur editData=', editData)
- // // editRow(editPath, editData)
- // },
- async saveClick(row, index) {
- // if (row.offset > 65535) {
- // this.$message({
- // type: 'error',
- // message: `寄存器地址不能大于65535`,
- // offset: window.screen.height / 3
- // })
- // return
- // }
- const editPath = `/product/model/${this.currentPlanData.product}`
- const editData = row
- // const editData = this.getSubmitTableRowData(row)
- // console.log('saveClick editData=', editData)
- // 校验必填项目
- let isNotPassMesage = ''
- let v = editData.name || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(测点名称)不能为空'
- }
- v = editData.groupingName || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(设备名称)不能为空'
- }
- v = editData.range || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(点号类型)不能为空'
- }
- v = editData.offset || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(点号)不能为空'
- }
- if (isNotPassMesage !== '') {
- this.$message({
- type: 'error',
- message: isNotPassMesage,
- offset: window.screen.height / 3
- })
- return
- }
- const res = await editRow(editPath, editData)
- if (res) {
- this.$set(this.tableData[index], 'id', res.id)
- this.$set(this.tableData[index], 'modbus', res.modbus)
- this.$set(this.tableData[index], 'iec104', res.iec104)
- this.$message({
- type: 'success',
- message: `${res.name} 保存成功.`,
- offset: window.screen.height / 3
- })
- }
- },
- delClick(row) {
- // return
- this.$confirm('此操作将永久删除该记录, 是否继续?', `删除:${row.name}`, {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(async() => {
- if (row.id != null && row.id > 0) {
- // // :product 产品名称
- // // :tag 标签编号
- const delUrl = `/product/model/${this.currentPlanData.product}/${row.id}`
- await 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(item => item.id !== row.id)
- this.tableData = [...newData]
- })
- } else {
- // 如果是新增的临时行,直接删除选中行
- // this.tableData.splice(index, 1)
- // this.tableData = this.tableData.filter(item => item.tmpCheckPointId !== row.tmpCheckPointId)
- const newData = this.tableData.filter(item => item.tmpCheckPointId !== row.tmpCheckPointId)
- // console.log('newData=', newData)
- this.tableData = [...newData]
- }
- }).catch(() => {
- this.$message({
- type: 'info',
- message: '已取消删除',
- offset: window.screen.height / 3
- })
- })
- },
- // 刷新
- updataTableData() {
- this.planClear()
- this.getPlanCheckPoint()
- },
- // 提交
- // 提交 下一步
- submitPlan() {
- // console.log(`this.tmpTableData=`, this.tmpTableData)
- let currentStep = this.currentStep
- const noName = this.tableData.some(item => (!item.groupingName) || (!item.name) || (!item.range) || (!item.offset.toString()))
- if (noName) {
- this.$message({
- type: 'error',
- message: '必填项不能为空',
- offset: window.screen.height / 3
- })
- return
- }
- if (currentStep < 3) {
- // 如果没有数据
- if (!this.tableData.length) {
- currentStep = currentStep + 1
- this.$emit('changeStep', currentStep)
- return
- }
- // 不接受数组提交,只能单条提交,所以使用遍历提交
- this.tableData.forEach((item, 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) {
- // 如果是最后一条数据 提交成功,下一步
- currentStep = currentStep + 1
- this.$emit('changeStep', currentStep)
- }
- })
- })
- } else {
- // 已经是最后一步了
- }
- },
- // 公用函数
- // 获取提交的行数据
- getSubmitTableRowData(rowData) {
- if (rowData.id > 0 || rowData.tmpCheckPointId > 0) {
- let submitRowData = []
- // {
- // adjust:0 //偏移量
- // dataType:null //值类型
- // id:null //
- // name:"中文" //测点名称
- // offset:0 //寄存器地址
- // range:null //功能码
- // scaling:1 //倍率
- // swapByte: 0, //字内交换
- // swapWord: 0, //字节交换
- // value:0 //先不用管- 测点查询
- // "manual": null, //先不用管 -单测点查询
- // "stepSeconds": 0, //先不用管 -单测点查询
- // "pollingCycle": 0, //先不用管 -单测点查询
- // "disable": null //先不用管 -单测点查询
- // }
- if (!rowData.id) {
- rowData.id = null
- }
- // 组织出待提交数据
- // {"tmpCheckPointId":2,"name":"","range":"COIL_STATUS","offset":0,"dataType":"BOOL","swapByte":false,"swapWord":false,"scaling":1,"adjust":0,"value":0,"id":null}
- submitRowData = {
- id: rowData.id,
- groupingName: rowData.groupingName,
- relationTag: rowData.relationTag,
- name: rowData.name,
- range: rowData.range,
- offset: rowData.offset,
- dataType: rowData.dataType,
- swapByte: rowData.swapByte,
- swapWord: rowData.swapWord,
- scaling: rowData.scaling,
- adjust: rowData.adjust,
- value: rowData.value
- }
- return submitRowData
- } else {
- return []
- }
- },
- // 批量删除
- 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` 数组
- for (let i = 0; i < this.tableData.length; i++) {
- const item = this.tableData[i]
- // 判断当前行数据是否被选中
- if (this.multipleSelection.includes(item)) {
- // 如果选中,则从 开始删除
- if (item.id > 0) {
- // 如果 id > 0 则表示 是已经保存在后端的数据了,需要向后端发送删除请求
- const delUrl = `/product/model/${this.currentPlanData.product}/${item.id}`
- await delRecord(delUrl).then((response) => {
- // 后端成功执行后,前端再删除选中行
- this.tableData.splice(i, 1)
- i-- // 因为 `splice` 方法会修改数组长度,所以需要将 `i` 减去 1,避免漏删下一个元素
- })
- } else {
- // 如果是新增未保存过的数据,直接删除
- this.tableData.splice(i, 1)
- i-- // 因为 `splice` 方法会修改数组长度,所以需要将 `i` 减去 1,避免漏删下一个元素
- }
- }
- }
- // this.showDel = false
- },
- // 多选按钮状态改变 handleSelectionChange
- handleSelectionChange(val) {
- // 选中行存入临时变量中
- this.multipleSelection = val
- // console.log('handleSelectionChange val', val)
- // 批量删除按钮激活
- this.showDel = true
- },
- editClick(row, index) {
- // 单测点查询接口 /product/model/:product/:tag
- // 获取测点详细信息
- if (row.id) {
- const getUrl = `/product/model/${this.currentPlanData.product}/${row.id}`
- // console.log('PlanCheckPoint editClick getUrl=', getUrl)
- httpGet(getUrl).then(res => {
- this.form = res
- // this.form.swapByte = Boolean(res.swapByte)
- // this.form.swapWord = Boolean(res.swapWord)
- // console.log('PlanCheckPoint editClick this.form=', this.form)
- })
- } else {
- this.form = this.tableData[index]
- }
- this.stepIndex = index
- this.dialogFormVisible = true
- },
- saveForm() {
- // 修改测点接口 /product/model/:product
- if (this.form.id) {
- let isNotPassMesage = ''
- let v = this.form.name || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(测点名称)不能为空'
- }
- v = this.form.groupingName || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(设备名称)不能为空'
- }
- v = this.form.range || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(点号类型)不能为空'
- }
- v = this.form.offset || ''
- v = v.toString().replace(/ /gi, '')
- if (v === '') {
- isNotPassMesage = '必填项(点号)不能为空'
- }
- if (isNotPassMesage !== '') {
- this.$message({
- type: 'error',
- message: isNotPassMesage,
- offset: window.screen.height / 3
- })
- return
- }
- const putUrl = `/product/model/${this.currentPlanData.product}`
- putData(putUrl, this.form).then(res => {
- // 保存表单
- // console.log('saveForm putData 1 tableData=', this.tableData)
- if (res == null) {
- return
- }
- // res.point104 = this.calPoint104(res.range, res.offset)
- this.$set(this.tableData, this.stepIndex, res)
- this.dialogFormVisible = false
- })
- } else {
- this.$set(this.tableData, this.stepIndex, this.form)
- this.dialogFormVisible = false
- }
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .plan-check-point {
- // border: 1px #f00 solid;
- text-align: center;
- font-size: 16px;
- width: 100%;
- padding:0 20px;
- .title {
- font-size: 20px;
- font-weight: bold;
- padding: 10px 0 10px 0;
- }
- .buttons {
- display: flex;
- justify-content: space-between;
- text-align: left;
- padding-bottom: 20px;
- .left,.right {
- width: 50%;
- }
- .right{
- display: flex;
- justify-content: right;
- }
- .item {
- margin: 0 10px;
- }
- }
- .modelInput{
- text-align: left;
- }
- // 分页
- .page-bar {
- display: flex;
- justify-content: center;
- // padding: 20px;
- .el-pagination.is-background {
- .el-pager {
- .number {
- color: #00706b;
- border: 1px #00706b solid;
- background-color: #fff;
- }
- }
- }
- }
- // 底部步骤按钮
- .bottom-button{
- margin-top: 20px;
- }
- .table-container{
- height: 100%;
- }
- // ::v-deep .pagination-container{
- // margin-top: 0;
- // }
- ::v-deep {
- // 表格输入框
- .table-column-input {
- .el-input__inner {
- border: none;
- background: transparent;
- padding-left: 0;
- }
- .el-input__inner:focus {
- border: 1px #00706b solid;
- }
- }
- }
- }
- ::v-deep input::-webkit-outer-spin-button,
- ::v-deep input::-webkit-inner-spin-button {
- -webkit-appearance: none !important;
- }
- ::v-deep input[type='number'] {
- -moz-appearance: textfield !important;
- }
- </style>
|