模板管理
							parent
							
								
									20a20f8d5e
								
							
						
					
					
						commit
						88bcff5741
					
				| 
						 | 
				
			
			@ -6,7 +6,7 @@ const infoApi = {
 | 
			
		|||
  getSys() {
 | 
			
		||||
    return postPBRequest("/info", null, 51000);
 | 
			
		||||
  },
 | 
			
		||||
  //   // 获取网络信息
 | 
			
		||||
  // 获取网络信息
 | 
			
		||||
  getNet(params) {
 | 
			
		||||
    return postPBRequest("/net", params, 52000);
 | 
			
		||||
  },
 | 
			
		||||
| 
						 | 
				
			
			@ -31,7 +31,7 @@ const infoApi = {
 | 
			
		|||
  //   },
 | 
			
		||||
  // 获取支持的通讯驱动
 | 
			
		||||
  getTxSupport() {
 | 
			
		||||
    return postPBRequest('/driver', null,53001)
 | 
			
		||||
    return postPBRequest('/driver', null, 53001)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  //   // 获取所有串口列表api/com
 | 
			
		||||
| 
						 | 
				
			
			@ -53,26 +53,26 @@ const infoApi = {
 | 
			
		|||
  //   delTc(params) {
 | 
			
		||||
  //     return deleteRequest("/tc", params);
 | 
			
		||||
  //   },
 | 
			
		||||
  //   // 模板列表
 | 
			
		||||
  //   getMb(params) {
 | 
			
		||||
  //     return getRequest('/tx/mb/list', params)
 | 
			
		||||
  //   },
 | 
			
		||||
  //   // 新增模板
 | 
			
		||||
  //   addMb(params) {
 | 
			
		||||
  //     return postJsonRequest('/tx/mb', params)
 | 
			
		||||
  //   },
 | 
			
		||||
  //   // 编辑模板
 | 
			
		||||
  //   editMb(params) {
 | 
			
		||||
  //     return putRequest('/tx/mb', params)
 | 
			
		||||
  //   },
 | 
			
		||||
  //   // 删除模板
 | 
			
		||||
  //   delMb(params) {
 | 
			
		||||
  //     return deleteRequest('/tx/mb', params)
 | 
			
		||||
  //   },
 | 
			
		||||
  //   // 新增点位
 | 
			
		||||
  //   addP(params) {
 | 
			
		||||
  //     return putRequest('/tx/mb', params)
 | 
			
		||||
  //   },
 | 
			
		||||
  // 模板列表
 | 
			
		||||
  getMb(params) {
 | 
			
		||||
    return postPBRequest('/template', params, 54000)
 | 
			
		||||
  },
 | 
			
		||||
  // 新增模板
 | 
			
		||||
  addMb(params) {
 | 
			
		||||
    return postPBRequest('/template', params, 54100)
 | 
			
		||||
  },
 | 
			
		||||
  // 编辑模板
 | 
			
		||||
  editMb(params) {
 | 
			
		||||
    return postPBRequest('/template', params, 54200)
 | 
			
		||||
  },
 | 
			
		||||
  // 删除模板
 | 
			
		||||
  delMb(params) {
 | 
			
		||||
    return postPBRequest('/template', params, 54300)
 | 
			
		||||
  },
 | 
			
		||||
  // 新增点位
 | 
			
		||||
  addP(params) {
 | 
			
		||||
    return postPBRequest('/tx/mb', params)
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  //   // 获取点位
 | 
			
		||||
  //   getP(params) {
 | 
			
		||||
| 
						 | 
				
			
			@ -86,14 +86,22 @@ const infoApi = {
 | 
			
		|||
  //    addSet(params) {
 | 
			
		||||
  //     return putRequest('/tx/device', params)
 | 
			
		||||
  //   },
 | 
			
		||||
    // 通讯列表
 | 
			
		||||
  // 驱动列表查询
 | 
			
		||||
  getTx(params) {
 | 
			
		||||
    return postPBRequest('/driver', params, 53000)
 | 
			
		||||
  },
 | 
			
		||||
  //   // 新增通讯列表
 | 
			
		||||
  //   saveTx(params) {
 | 
			
		||||
  //     return postJsonRequest("/tx", params);
 | 
			
		||||
  //   },
 | 
			
		||||
  // 添加查询
 | 
			
		||||
  saveTx(params) {
 | 
			
		||||
    return postPBRequest("/driver", params, 53100);
 | 
			
		||||
  },
 | 
			
		||||
  // 查询支持的驱动列表
 | 
			
		||||
  getSupportTx(params) {
 | 
			
		||||
    return postPBRequest("/driver", params, 53001);
 | 
			
		||||
  },
 | 
			
		||||
  // 查询驱动配置项
 | 
			
		||||
  getTxConfig(params) {
 | 
			
		||||
    return postPBRequest("/driver", params, 53002);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  //   // 通讯服务启用,停用
 | 
			
		||||
  //   changeStatus(params) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -206,7 +206,7 @@ export default {
 | 
			
		|||
      stop_bits_select: [1, 2],
 | 
			
		||||
      timeout_select: [0, 100, 200, 500, 1000, 2000],
 | 
			
		||||
      rules: {
 | 
			
		||||
        name: [
 | 
			
		||||
        index: [
 | 
			
		||||
          { required: true, message: "请输入通讯名称", trigger: "blur" },
 | 
			
		||||
          { required: true, validator: validName, trigger: "blur" },
 | 
			
		||||
        ],
 | 
			
		||||
| 
						 | 
				
			
			@ -319,10 +319,8 @@ export default {
 | 
			
		|||
    // 获取com
 | 
			
		||||
    const getCom = async () => {
 | 
			
		||||
      const res = await infoApi.getCom();
 | 
			
		||||
      const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
      if (ret.code == 0) {
 | 
			
		||||
        const infodata = com_list.decode(ret.data);
 | 
			
		||||
        state.comArr = infodata.com;
 | 
			
		||||
      if (res.code == 0) {
 | 
			
		||||
        state.comArr = res.data.com;
 | 
			
		||||
        console.log('comlist',state.comArr)
 | 
			
		||||
        state.com_select = [];
 | 
			
		||||
        infodata.com.forEach(e => {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,36 +1,17 @@
 | 
			
		|||
<template>
 | 
			
		||||
  <el-dialog
 | 
			
		||||
    v-model="visible"
 | 
			
		||||
    :title="type === 'I' ? '新增模板': '编辑模板'"
 | 
			
		||||
    width="30%"
 | 
			
		||||
    :before-close="closeDialog"
 | 
			
		||||
  >
 | 
			
		||||
    <el-form
 | 
			
		||||
      :model="addForm"
 | 
			
		||||
      label-width="100px"
 | 
			
		||||
      :rules="rules"
 | 
			
		||||
      ref="ruleFormRef"
 | 
			
		||||
    >
 | 
			
		||||
  <el-dialog v-model="visible" :title="type === 'I' ? '新增模板' : '编辑模板'" width="30%" :before-close="closeDialog">
 | 
			
		||||
    <el-form :model="addForm" label-width="100px" :rules="rules" ref="ruleFormRef">
 | 
			
		||||
      <el-form-item label="模板名称:" prop="name">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="addForm.name"
 | 
			
		||||
          placeholder="请输入模板名称"
 | 
			
		||||
          clearable
 | 
			
		||||
          :disabled="type === 'I' ? false: true"
 | 
			
		||||
        />
 | 
			
		||||
        <el-input v-model="addForm.name" placeholder="请输入模板名称" clearable :disabled="type === 'I' ? false : true" />
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="模板描述:" prop="description">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="addForm.description"
 | 
			
		||||
          placeholder="请输入模板描述"
 | 
			
		||||
          clearable
 | 
			
		||||
        />
 | 
			
		||||
        <el-input v-model="addForm.description" placeholder="请输入模板描述" clearable />
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
      <el-form-item label="模板类型:" prop="type">
 | 
			
		||||
        <el-input
 | 
			
		||||
          v-model="addForm.type"
 | 
			
		||||
          disabled
 | 
			
		||||
        />
 | 
			
		||||
 | 
			
		||||
        <el-select v-model="addForm.type" clearable placeholder="请选择模板类型" @change="driveChange" :disabled="type!=='I'">
 | 
			
		||||
          <el-option v-for="(item, index) of typeOptions" :key="index" :label="item.name" :value="item.key" />
 | 
			
		||||
        </el-select>
 | 
			
		||||
      </el-form-item>
 | 
			
		||||
    </el-form>
 | 
			
		||||
    <template #footer>
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +26,7 @@
 | 
			
		|||
import { onMounted, reactive, ref, toRefs, computed, nextTick } from "vue";
 | 
			
		||||
import infoApi from "@/api/infoApi.js";
 | 
			
		||||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import { mb_list, mb_info, response} from '../proto/data/pd'
 | 
			
		||||
// import { mb_list, mb_info, response} from '../proto/data/pd'
 | 
			
		||||
export default {
 | 
			
		||||
  props: ["formData", "dialogVisible", "type"],
 | 
			
		||||
  emits: ["dialogClose", "dialogSuccess"],
 | 
			
		||||
| 
						 | 
				
			
			@ -64,6 +45,16 @@ export default {
 | 
			
		|||
          { required: true, message: "请选择类型", trigger: "blur" }
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      typeOptions: [
 | 
			
		||||
        {
 | 
			
		||||
          key: 1,
 | 
			
		||||
          name: 'MODBUS'
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
          key: 2,
 | 
			
		||||
          name: 'PLC'
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    });
 | 
			
		||||
    const visible = computed(() => {
 | 
			
		||||
      return props.dialogVisible;
 | 
			
		||||
| 
						 | 
				
			
			@ -79,28 +70,21 @@ export default {
 | 
			
		|||
      ctx.emit("dialogClose");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const importData = () => {};
 | 
			
		||||
    const importData = () => { };
 | 
			
		||||
 | 
			
		||||
    const exoportData = () => {};
 | 
			
		||||
    const exoportData = () => { };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    const saveFormData = () => {
 | 
			
		||||
      ruleFormRef.value.validate(async (valid) => {
 | 
			
		||||
        if (valid) {
 | 
			
		||||
          const req_databuf = mb_info.encode(state.addForm).finish();
 | 
			
		||||
          // 截取有效长度
 | 
			
		||||
          const req_data = req_databuf.slice(0, req_databuf.length);
 | 
			
		||||
          const res = props.type === 'I' ? await infoApi.addMb(req_data) : await infoApi.editMb(req_data);
 | 
			
		||||
          console.log(555, res)
 | 
			
		||||
          const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
          if (ret.code == 0) {
 | 
			
		||||
              // 获取数据
 | 
			
		||||
              console.log(new TextDecoder().decode(ret.data));
 | 
			
		||||
              ElMessage.success(new TextDecoder().decode(ret.data) || "请求成功");
 | 
			
		||||
          const res = props.type === 'I' ? await infoApi.addMb(state.addForm) : await infoApi.editMb(state.addForm);
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            ElMessage.success(res.message || "请求成功");
 | 
			
		||||
            // 关闭弹框
 | 
			
		||||
            ctx.emit("dialogSuccess");
 | 
			
		||||
          } else {
 | 
			
		||||
              console.log(res);
 | 
			
		||||
            ElMessage.error(res.message);
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          console.log("error submit!");
 | 
			
		||||
| 
						 | 
				
			
			@ -126,42 +110,50 @@ export default {
 | 
			
		|||
  line-height: 40px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
 | 
			
		||||
  > div {
 | 
			
		||||
  >div {
 | 
			
		||||
    width: 15%;
 | 
			
		||||
 | 
			
		||||
    span {
 | 
			
		||||
      margin-right: 10px;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tree-div {
 | 
			
		||||
  height: 780px;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
  .tree {
 | 
			
		||||
    width: 20%;
 | 
			
		||||
    border: 1px solid #f2f2f2;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .table {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    width: 79%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
 | 
			
		||||
    .point-table {
 | 
			
		||||
      border: 1px solid #f2f2f2;
 | 
			
		||||
      padding: 10px;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    .propertie-table {
 | 
			
		||||
      padding: 10px;
 | 
			
		||||
      border: 1px solid #f2f2f2;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .custom-tree-node {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
 | 
			
		||||
    .add-icon {
 | 
			
		||||
      padding-right: 15px;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,14 +1,9 @@
 | 
			
		|||
<template>
 | 
			
		||||
   <el-dialog
 | 
			
		||||
    v-model="visible"
 | 
			
		||||
    title="点位管理"
 | 
			
		||||
    width="60%"
 | 
			
		||||
    :before-close="closeDialog"
 | 
			
		||||
  >
 | 
			
		||||
  <el-dialog v-model="visible" title="点位管理" width="60%" :before-close="closeDialog">
 | 
			
		||||
    <el-card class="top-title">
 | 
			
		||||
      <span>模板名称:{{ addForm.name }}</span>
 | 
			
		||||
      <span>模板描述:{{ addForm.description }}</span>
 | 
			
		||||
      <span>模板类型:{{ addForm.type }}</span>
 | 
			
		||||
      <span>模板类型:{{ addForm.type == 1 ? 'MODBUS' : 'PLC' }}</span>
 | 
			
		||||
    </el-card>
 | 
			
		||||
    <div class="btns">
 | 
			
		||||
      <div>
 | 
			
		||||
| 
						 | 
				
			
			@ -21,112 +16,46 @@
 | 
			
		|||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div>
 | 
			
		||||
      <el-table
 | 
			
		||||
        :data="propertiesData"
 | 
			
		||||
        height="230"
 | 
			
		||||
        style="width: 100%"
 | 
			
		||||
        border
 | 
			
		||||
        stripe
 | 
			
		||||
        :header-cell-style="{ background: '#F6F7FC' }"
 | 
			
		||||
      >
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="name"
 | 
			
		||||
          label="点位名称"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
      <el-table :data="propertiesData" height="230" style="width: 100%" border stripe
 | 
			
		||||
        :header-cell-style="{ background: '#F6F7FC' }">
 | 
			
		||||
        <el-table-column prop="name" label="点位名称" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model="scope.row.name"
 | 
			
		||||
              clearable
 | 
			
		||||
            />
 | 
			
		||||
            <el-input v-model="scope.row.name" clearable />
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="address"
 | 
			
		||||
          label="点位地址"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="address" label="点位地址" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model="scope.row.address"
 | 
			
		||||
              clearable
 | 
			
		||||
            />
 | 
			
		||||
            <el-input v-model="scope.row.address" clearable />
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="datatype"
 | 
			
		||||
          label="点位类型"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="datatype" label="点位类型" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-select v-model="scope.row.datatype" size="mini">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in datatypeArr"
 | 
			
		||||
                :key="item.value"
 | 
			
		||||
                :label="item.label"
 | 
			
		||||
                :value="item.value"
 | 
			
		||||
              />
 | 
			
		||||
              <el-option v-for="item in datatypeArr" :key="item.value" :label="item.label" :value="item.value" />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="byteorder"
 | 
			
		||||
          label="字节顺序"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="byteorder" label="字节顺序" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-select v-model="scope.row.byteorder" size="mini">
 | 
			
		||||
              <el-option
 | 
			
		||||
                v-for="item in byteorderArr"
 | 
			
		||||
                :key="item.value"
 | 
			
		||||
                :label="item.label"
 | 
			
		||||
                :value="item.value"
 | 
			
		||||
              />
 | 
			
		||||
              <el-option v-for="item in byteorderArr" :key="item.value" :label="item.label" :value="item.value" />
 | 
			
		||||
            </el-select>
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="multplier"
 | 
			
		||||
          label="缩放系数"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="multplier" label="缩放系数" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model="scope.row.multplier"
 | 
			
		||||
              clearable
 | 
			
		||||
            />
 | 
			
		||||
            <el-input v-model="scope.row.multplier" clearable />
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="unit"
 | 
			
		||||
          label="点位单位"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="unit" label="点位单位" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model="scope.row.unit"
 | 
			
		||||
              clearable
 | 
			
		||||
            />
 | 
			
		||||
            <el-input v-model="scope.row.unit" clearable />
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="description"
 | 
			
		||||
          label="点位描述"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        >
 | 
			
		||||
        <el-table-column prop="description" label="点位描述" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-input
 | 
			
		||||
              v-model="scope.row.description"
 | 
			
		||||
              clearable
 | 
			
		||||
            />
 | 
			
		||||
            <el-input v-model="scope.row.description" clearable />
 | 
			
		||||
          </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column label="操作" align="center" show-overflow-tooltip>
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +76,7 @@
 | 
			
		|||
import { onMounted, reactive, ref, toRefs, computed, nextTick } from "vue";
 | 
			
		||||
import infoApi from "@/api/infoApi.js";
 | 
			
		||||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import { m_point, m_properties, mb_info, response} from '../proto/data/pd'
 | 
			
		||||
// import { m_point, m_properties, mb_info, response} from '../proto/data/pd'
 | 
			
		||||
export default {
 | 
			
		||||
  props: ["formData", "dialogVisible"],
 | 
			
		||||
  emits: ["dialogClose", "dialogSuccess"],
 | 
			
		||||
| 
						 | 
				
			
			@ -158,44 +87,44 @@ export default {
 | 
			
		|||
      datatypeArr: [{
 | 
			
		||||
        label: 'bool',
 | 
			
		||||
        value: 'bool'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'int16',
 | 
			
		||||
        value: 'int16'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'int32',
 | 
			
		||||
        value: 'int32'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'unit16',
 | 
			
		||||
        value: 'unit16'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'unit32',
 | 
			
		||||
        value: 'unit32'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'float32',
 | 
			
		||||
        value: 'float32'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'float64',
 | 
			
		||||
        value: 'float64'
 | 
			
		||||
      }],
 | 
			
		||||
      byteorderArr: [{
 | 
			
		||||
        label: 'null',
 | 
			
		||||
        value: 'null'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: '12',
 | 
			
		||||
        value: '12'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: '21',
 | 
			
		||||
        value: '21'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: '1234',
 | 
			
		||||
        value: '1234'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: '4321',
 | 
			
		||||
        value: '4321'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'ABCD',
 | 
			
		||||
        value: 'ABCD'
 | 
			
		||||
      },{
 | 
			
		||||
      }, {
 | 
			
		||||
        label: 'DCBA',
 | 
			
		||||
        value: 'DCBA'
 | 
			
		||||
      }]
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +139,7 @@ export default {
 | 
			
		|||
      // 获取点位列表
 | 
			
		||||
      getPointList();
 | 
			
		||||
    });
 | 
			
		||||
    const getPointList = async() => {
 | 
			
		||||
    const getPointList = async () => {
 | 
			
		||||
      const parm = mb_info.encode({
 | 
			
		||||
        name: state.addForm.name
 | 
			
		||||
      }).finish();
 | 
			
		||||
| 
						 | 
				
			
			@ -240,12 +169,12 @@ export default {
 | 
			
		|||
      ctx.emit("dialogClose");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const importData = () => {};
 | 
			
		||||
    const importData = () => { };
 | 
			
		||||
 | 
			
		||||
    const exportData = () => {};
 | 
			
		||||
    const exportData = () => { };
 | 
			
		||||
 | 
			
		||||
    const saveP = async () => {
 | 
			
		||||
      if (state.propertiesData.length<1) {
 | 
			
		||||
      if (state.propertiesData.length < 1) {
 | 
			
		||||
        return ElMessage.error("请添加一条点位");
 | 
			
		||||
      }
 | 
			
		||||
      const newArr = [];
 | 
			
		||||
| 
						 | 
				
			
			@ -254,42 +183,40 @@ export default {
 | 
			
		|||
          name: item.name,
 | 
			
		||||
          properties: [
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'address',value:item.address
 | 
			
		||||
              name: 'address', value: item.address
 | 
			
		||||
            }),
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'datatype',value:item.datatype
 | 
			
		||||
              name: 'datatype', value: item.datatype
 | 
			
		||||
            }),
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'byteorder',value:item.byteorder
 | 
			
		||||
              name: 'byteorder', value: item.byteorder
 | 
			
		||||
            }),
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'multplier',value:item.multplier
 | 
			
		||||
              name: 'multplier', value: item.multplier
 | 
			
		||||
            }),
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'unit',value:item.unit
 | 
			
		||||
              name: 'unit', value: item.unit
 | 
			
		||||
            }),
 | 
			
		||||
            m_properties.create({
 | 
			
		||||
              name: 'description',value:item.description
 | 
			
		||||
              name: 'description', value: item.description
 | 
			
		||||
            })
 | 
			
		||||
          ]
 | 
			
		||||
        }))
 | 
			
		||||
      })
 | 
			
		||||
      console.log(123, newArr)
 | 
			
		||||
      const req_databuf = mb_info.encode({
 | 
			
		||||
      const param = {
 | 
			
		||||
        name: state.addForm.name,
 | 
			
		||||
        type: state.addForm.type,
 | 
			
		||||
        description: state.addForm.description,
 | 
			
		||||
        points: newArr
 | 
			
		||||
      }).finish();
 | 
			
		||||
      // 截取有效长度
 | 
			
		||||
      const req_data = req_databuf.slice(0, req_databuf.length);
 | 
			
		||||
      const res = await infoApi.addP(req_data);
 | 
			
		||||
      const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
      if (ret.code == 0) {
 | 
			
		||||
        console.log(new TextDecoder().decode(ret.data));
 | 
			
		||||
        ElMessage.success(new TextDecoder().decode(ret.data) || "请求成功");
 | 
			
		||||
      }
 | 
			
		||||
      const res = await infoApi.addP(param);
 | 
			
		||||
      if (res.code == 0) {
 | 
			
		||||
        ElMessage.success(res.message || "请求成功");
 | 
			
		||||
        // 获取数据
 | 
			
		||||
        getPointList();
 | 
			
		||||
      } else {
 | 
			
		||||
        ElMessage.error(res.message);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			@ -324,6 +251,7 @@ export default {
 | 
			
		|||
<style lang="scss" scoped>
 | 
			
		||||
.top-title {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
 | 
			
		||||
  ::v-deep .el-card__body {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
| 
						 | 
				
			
			@ -332,12 +260,14 @@ export default {
 | 
			
		|||
    font-size: 16px;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.btns {
 | 
			
		||||
  padding: 15px 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: space-between;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.flex-center {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: center;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ export default {
 | 
			
		|||
            },
 | 
			
		||||
            {
 | 
			
		||||
              id: 3 - 2,
 | 
			
		||||
              name: "通讯管理",
 | 
			
		||||
              name: "驱动管理",
 | 
			
		||||
              index: "/page",
 | 
			
		||||
            },
 | 
			
		||||
            // {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,26 +32,26 @@ const router = createRouter({
 | 
			
		|||
      name: 'page',
 | 
			
		||||
      component: () => import('../views/Page.vue')
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      path: '/data',
 | 
			
		||||
      name: 'data',
 | 
			
		||||
      component: () => import('../views/Data.vue')
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      path: '/report',
 | 
			
		||||
      name: 'report',
 | 
			
		||||
      component: () => import('../views/Report.vue')
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      path: '/transparent',
 | 
			
		||||
      name: 'transparent',
 | 
			
		||||
      component: () => import('../views/Transparent.vue')
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      path: '/rules',
 | 
			
		||||
      name: 'rules',
 | 
			
		||||
      component: () => import('../views/Rules.vue')
 | 
			
		||||
    }
 | 
			
		||||
    // {
 | 
			
		||||
    //   path: '/data',
 | 
			
		||||
    //   name: 'data',
 | 
			
		||||
    //   component: () => import('../views/Data.vue')
 | 
			
		||||
    // },
 | 
			
		||||
    // {
 | 
			
		||||
    //   path: '/report',
 | 
			
		||||
    //   name: 'report',
 | 
			
		||||
    //   component: () => import('../views/Report.vue')
 | 
			
		||||
    // },
 | 
			
		||||
    // {
 | 
			
		||||
    //   path: '/transparent',
 | 
			
		||||
    //   name: 'transparent',
 | 
			
		||||
    //   component: () => import('../views/Transparent.vue')
 | 
			
		||||
    // },
 | 
			
		||||
    // {
 | 
			
		||||
    //   path: '/rules',
 | 
			
		||||
    //   name: 'rules',
 | 
			
		||||
    //   component: () => import('../views/Rules.vue')
 | 
			
		||||
    // }
 | 
			
		||||
  ]
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,7 +48,7 @@ axios.interceptors.response.use(
 | 
			
		|||
  },
 | 
			
		||||
  (error) => {
 | 
			
		||||
    ElMessage.closeAll();
 | 
			
		||||
    ElMessage.error(error);
 | 
			
		||||
    ElMessage.error("请求错误");
 | 
			
		||||
    // router.push({
 | 
			
		||||
    //   path: "/login"
 | 
			
		||||
    // });
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,36 +4,16 @@
 | 
			
		|||
      <div class="top-div">
 | 
			
		||||
        <el-button type="primary" @click="addData">新增</el-button>
 | 
			
		||||
      </div>
 | 
			
		||||
      <el-table
 | 
			
		||||
        :data="tableData"
 | 
			
		||||
        height="730"
 | 
			
		||||
        style="width: 100%"
 | 
			
		||||
        border
 | 
			
		||||
        stripe
 | 
			
		||||
        :header-cell-style="{ background: '#F6F7FC' }"
 | 
			
		||||
      >
 | 
			
		||||
      <el-table :data="tableData" height="730" style="width: 100%" border stripe
 | 
			
		||||
        :header-cell-style="{ background: '#F6F7FC' }">
 | 
			
		||||
        <el-table-column type="index" label="序号" width="80" align="center" />
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="name"
 | 
			
		||||
          label="模板名称"
 | 
			
		||||
          width="200"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        />
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="type"
 | 
			
		||||
          label="模板类型"
 | 
			
		||||
          width="200"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        />
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="description"
 | 
			
		||||
          label="模板描述"
 | 
			
		||||
          width="200"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        /> 
 | 
			
		||||
        <el-table-column prop="name" label="模板名称" width="240" align="center" show-overflow-tooltip />
 | 
			
		||||
        <el-table-column prop="type" label="模板类型" width="240" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <span>{{ scope.row.type === 1 ? 'MODBUS' : 'PLC' }}</span>
 | 
			
		||||
          </template>
 | 
			
		||||
          </el-table-column>
 | 
			
		||||
        <el-table-column prop="description" label="模板描述" width="600" align="center" show-overflow-tooltip />
 | 
			
		||||
        <el-table-column label="模板管理" align="center" show-overflow-tooltip>
 | 
			
		||||
          <template #default="scope">
 | 
			
		||||
            <el-button type="info" @click="manageData(scope.row)">
 | 
			
		||||
| 
						 | 
				
			
			@ -49,22 +29,11 @@
 | 
			
		|||
        </el-table-column>
 | 
			
		||||
      </el-table>
 | 
			
		||||
    </div>
 | 
			
		||||
    <AddMb
 | 
			
		||||
      :type="type"
 | 
			
		||||
      :formData="formData"
 | 
			
		||||
      :dialogVisible="dialogVisible"
 | 
			
		||||
      v-if="dialogVisible"
 | 
			
		||||
      @dialogClose="dialogClose"
 | 
			
		||||
      @dialogSuccess="dialogSuccess"
 | 
			
		||||
    >
 | 
			
		||||
    <AddMb :type="type" :formData="formData" :dialogVisible="dialogVisible" v-if="dialogVisible"
 | 
			
		||||
      @dialogClose="dialogClose" @dialogSuccess="dialogSuccess">
 | 
			
		||||
    </AddMb>
 | 
			
		||||
    <AddPoint
 | 
			
		||||
      :formData="formData1"
 | 
			
		||||
      :dialogVisible="dialogVisible1"
 | 
			
		||||
      v-if="dialogVisible1"
 | 
			
		||||
      @dialogClose="dialogClose"
 | 
			
		||||
      @dialogSuccess="dialogSuccess"
 | 
			
		||||
    >
 | 
			
		||||
    <AddPoint :formData="formData1" :dialogVisible="dialogVisible1" v-if="dialogVisible1" @dialogClose="dialogClose"
 | 
			
		||||
      @dialogSuccess="dialogSuccess">
 | 
			
		||||
    </AddPoint>
 | 
			
		||||
  </el-card>
 | 
			
		||||
</template>
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +43,7 @@ import { onMounted, reactive, ref, toRefs } from "vue";
 | 
			
		|||
import { ElMessage, ElMessageBox } from "element-plus";
 | 
			
		||||
import AddMb from "@/components/AddMb.vue";
 | 
			
		||||
import infoApi from "@/api/infoApi.js";
 | 
			
		||||
import { response, mb_info, mb_list } from '../proto/data/pd'
 | 
			
		||||
// import { response, mb_info, mb_list } from '../proto/data/pd'
 | 
			
		||||
import AddPoint from "@/components/AddPoint.vue";
 | 
			
		||||
export default {
 | 
			
		||||
  name: "model",
 | 
			
		||||
| 
						 | 
				
			
			@ -101,12 +70,9 @@ export default {
 | 
			
		|||
    });
 | 
			
		||||
    const getTableData = async () => {
 | 
			
		||||
      const res = await infoApi.getMb();
 | 
			
		||||
      const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
      
 | 
			
		||||
      if (ret.code == 0) {
 | 
			
		||||
      if (res.code == 0) {
 | 
			
		||||
        // 获取数据
 | 
			
		||||
          state.tableData = mb_list.decode(ret.data).mb;
 | 
			
		||||
          console.log(mb_list.decode(ret.data).mb);
 | 
			
		||||
        state.tableData = res.data;
 | 
			
		||||
      } else {
 | 
			
		||||
        console.log(res);
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -124,19 +90,12 @@ export default {
 | 
			
		|||
        type: "warning",
 | 
			
		||||
      })
 | 
			
		||||
        .then(async () => {
 | 
			
		||||
          const req_databuf = mb_info.encode({
 | 
			
		||||
              name: item.name,
 | 
			
		||||
          }).finish();
 | 
			
		||||
          // 截取有效长度
 | 
			
		||||
          const req_data = req_databuf.slice(0, req_databuf.length);
 | 
			
		||||
 
 | 
			
		||||
          const res = await infoApi.delMb(req_data);
 | 
			
		||||
          const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
          if (ret.code == 0) {
 | 
			
		||||
            ElMessage.success(res.msg || "请求成功");
 | 
			
		||||
          const res = await infoApi.delMb(item);
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            ElMessage.success(res.message || "请求成功");
 | 
			
		||||
            getTableData();
 | 
			
		||||
          } else {
 | 
			
		||||
            ElMessage.error(res.msg);
 | 
			
		||||
            ElMessage.error(res.message);
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        .catch(() => {
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +109,7 @@ export default {
 | 
			
		|||
      state.formData = {
 | 
			
		||||
        name: '',
 | 
			
		||||
        description: '',
 | 
			
		||||
        type: 'modbus'
 | 
			
		||||
        type: 1
 | 
			
		||||
      }
 | 
			
		||||
      state.type = 'I';
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			@ -187,6 +146,7 @@ export default {
 | 
			
		|||
  display: flex;
 | 
			
		||||
  flex-direction: column;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.top-div {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  justify-content: flex-end;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,11 @@
 | 
			
		|||
          width="200"
 | 
			
		||||
          align="center"
 | 
			
		||||
          show-overflow-tooltip
 | 
			
		||||
        />
 | 
			
		||||
        >
 | 
			
		||||
        <template #default="scope">
 | 
			
		||||
          <span>{{ qudongOptions[scope.row.type]}}</span>
 | 
			
		||||
        </template>
 | 
			
		||||
        </el-table-column>
 | 
			
		||||
        <el-table-column
 | 
			
		||||
          prop="host"
 | 
			
		||||
          label="主机地址"
 | 
			
		||||
| 
						 | 
				
			
			@ -200,18 +204,15 @@ export default {
 | 
			
		|||
        type: "warning",
 | 
			
		||||
      })
 | 
			
		||||
        .then(async () => {
 | 
			
		||||
          const req_databuf = tx_info.encode({
 | 
			
		||||
              name: state.formData.name,
 | 
			
		||||
          }).finish();
 | 
			
		||||
          // 截取有效长度
 | 
			
		||||
          const req_data = req_databuf.slice(0, req_databuf.length);
 | 
			
		||||
          const res = await infoApi.delTx(req_data);
 | 
			
		||||
          const ret = response.decode(new Uint8Array(res));
 | 
			
		||||
          if (ret.code == 0) {
 | 
			
		||||
            ElMessage.success(res.msg || "删除成功");
 | 
			
		||||
          let param = {
 | 
			
		||||
            name: state.formData.name
 | 
			
		||||
          }
 | 
			
		||||
          const res = await infoApi.delTx(param);
 | 
			
		||||
          if (res.code == 0) {
 | 
			
		||||
            ElMessage.success(res.message || "删除成功");
 | 
			
		||||
            getTableData();
 | 
			
		||||
          } else {
 | 
			
		||||
            ElMessage.error(res.msg | "删除失败");
 | 
			
		||||
            ElMessage.error(res.message | "删除失败");
 | 
			
		||||
          }
 | 
			
		||||
        })
 | 
			
		||||
        .catch(() => {
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +250,7 @@ export default {
 | 
			
		|||
      dialogSuccess,
 | 
			
		||||
      changeStatus,
 | 
			
		||||
      dialogClose1,
 | 
			
		||||
      dialogSuccess1,
 | 
			
		||||
      dialogSuccess1
 | 
			
		||||
    };
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue