whychdw
2025-05-13 07d36c1f6f0398f56769ce88c89dc2a87f03fa8a
src/views/dataMager/components/EditBattGroup.vue
@@ -158,6 +158,22 @@
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电路图类型" prop="topologyMapType">
            <el-select
              v-model="params.topologyMapType"
              placeholder="请选择电池类型"
              @change="handleMapTypeChange"
            >
              <el-option
                v-for="item in pictureTypes"
                :key="item.value"
                :label="item.label"
                :value="item.key"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池组名称" prop="battGroupName">
            <el-input v-model="params.battGroupName"></el-input>
          </el-form-item>
@@ -254,7 +270,7 @@
          <el-form-item label="电池生产日期" prop="battProductDate">
            <el-date-picker
              v-model="params.battProductDate"
              size="small"
              size="mini"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
@@ -265,7 +281,7 @@
          <el-form-item label="投入使用日期" prop="battInUseDate">
            <el-date-picker
              v-model="params.battInUseDate"
              size="small"
              size="mini"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
@@ -289,12 +305,89 @@
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="基站号码">
            <el-input v-model="params.stationPhone"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="验签格式">
            <el-select size="mini" v-model="params.signType" placeholder="请选择">
              <el-option
                v-for="item in signTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              >
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="通信端口号">
            <el-input size="mini" v-model="params.commPort"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isDfBms">
          <el-form-item label="BMS设备ID">
            <el-select size="mini" v-model="params.deviceId">
              <el-option
                v-for="(item, key) in bmsList" :key="'key'+key"
                :label="item.label" :value="item.id"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="交直流监控屏启用">
            <el-switch
              v-model="acdcSecuityFlag"
              size="mini"
              active-color="#13ce66"
              inactive-color="#aaa"
              active-text="启用"
              inactive-text="关闭"
            >
            </el-switch>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isSzdt">
          <el-form-item label="地铁线路">
            <el-select size="mini" v-model="params.stationName9" @change="subwayLineChange">
              <el-option label="无" value=""></el-option>
              <el-option
                v-for="(item, key) in subwayLines" :key="'key'+key"
                :label="item.label" :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isSzdt">
          <el-form-item label="地铁站点名称">
            <el-select size="mini" v-model="params.stationName8">
              <el-option label="无" value=""></el-option>
              <el-option
                v-for="(item, key) in subwayStations" :key="'key'+key"
                :label="item.label" :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="16" v-if="tabList.length">
          <el-form-item label="实时监控标签">
            <el-select v-model="tabValue" multiple placeholder="请选择">
              <el-option
                v-for="item in tabList"
                :key="item.name"
                :label="item.label"
                :value="item.name">
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <three-btn @click="autoComputeIp" v-if="isDcDcBts"
          >自动计算IP</three-btn
        >
        <three-btn @click="submitFrom">确定</three-btn>
        <three-btn @click="showReason">确定</three-btn>
      </div>
    </el-form>
    <!-- 省 -->
@@ -421,6 +514,31 @@
        >
      </div>
    </el-dialog>
    <!-- 编辑原因 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请输入修改原因"
      :visible.sync="reasonVisible"
      width="280px"
      append-to-body
    >
      <el-form size="small">
        <el-form-item label="修改原因">
          <el-input
            type="textarea"
            placeholder="必填"
            v-model="updateReason"
          ></el-input>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="submitFrom"
          >确定</el-button
        >
        <el-button size="mini" @click="submitCancel">取消</el-button>
      </div>
    </el-dialog>
  </div>
</template>
@@ -431,13 +549,17 @@
  const_province_city_county,
  const_battGroup,
  const_battery_type,
  const_61850,
  const_devType,
} from "@/assets/js/const";
import systemConfig from '@/assets/js/config';
import { searchProvince, searchCity, searchCounty } from "@/assets/js/api.js";
import { searchTplAll } from "../js/eletmp";
import { searchBattProducer, edit } from "../js/battGroupMager";
import const_rules from "@/assets/js/const/const_rules";
import getDevIp from "@/assets/js/tools/getDevIp";
import getTabList from "@/assets/js/tools/getTabList";
export default {
  props: {
@@ -449,6 +571,7 @@
  data() {
    let rules = const_battGroup.rules;
    let constRules = const_rules;
    let pictureTypes = const_devType.pictureTypes;
    let batteryTypes = const_battery_type.types;
    const subRules = {
      validator(rule, value, callback) {
@@ -457,8 +580,15 @@
      trigger: "change",
    };
    return {
      clientName: systemConfig.clientName.name,
      jsonData: {},
      bmsList: [],
      tabValue: [],
      tabList: [],
      reasonVisible: false,
      updateReason: "",
      layout: {
        span: 8,
        span: 6,
        gutter: 16,
      },
      params: {
@@ -491,7 +621,7 @@
        monVolLowToAvg: "0.05", // 单体电压次低偏移量(V)
        loadCurr: "15", // 负载电流(A)
        disCurrMax: "0", // 最大核容电流(A)
        stationPhone: "123456", // 基站号码
        stationPhone: "", // 基站号码
        battProducer: "", // 电池品牌
        battModel: "", // 电池型号
        battProductDate: "2000-01-01", // 电池生产日期
@@ -517,7 +647,15 @@
        remotemonitor: "", // 是否实现远程监控
        batttIndependentPlaced: "", // 是否独立蓄电池室放置
        junChargeVoltageValue: 0, // 均充电压设定值
        signType: 0, // 验签格式
        topologyMapType: 0, // 拓扑图类型
        commPort: 102,    // 连接端口
        labelCfg: '',     // 实时监控的标签,使用,分隔的字符串
        deviceId: '',     // BMS设备ID
        stationName9: '',       // 地铁线路名称
        stationName8: '',       // 地铁站点名称
      },
      signTypes: const_61850.signTypes,
      rules: {
        stationName1: [
          {
@@ -815,6 +953,8 @@
          value: 1,
        },
      ],
      pictureTypes: pictureTypes,
      acdcSecuityFlag: false,
    };
  },
  watch: {
@@ -823,6 +963,59 @@
    },
  },
  methods: {
    async getJson() {
      const dynamicPath = `mapJson/subway/suzhou1.json`;
      try {
        const response = await fetch(dynamicPath);
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const data = await response.json();
        // console.log("data", data, "=============");
        // this.defaultData = data.l;
        return data;
      } catch (error) {
        console.error("加载 JSON 出错:", error);
      }
    },
    subwayLineChange() {
      this.params.stationName8 = "";
    },
    sortTabList(tabValue, tabList) {
      let result = [];
      for(let i=0; i<tabList.length; i++) {
        for(let j=0; j<tabValue.length;j++) {
          if(tabList[i].name === tabValue[j]) {
            result.push(tabValue[j]);
            break;
          }
        }
      }
      return result;
    },
    handleDevTypeChange() {
      let tabList = getTabList(this.params.fbsdeviceId);
      this.tabList = tabList;
      this.tabValue = [];
      if(this.params.labelCfg) {
        let tabValue = this.params.labelCfg.split(',');
        this.tabValue = this.sortTabList(tabValue, tabList);
      }else {
        tabList.forEach(item=>{
          this.tabValue.push(item.name);
        });
      }
    },
    handleMapTypeChange() {
      // 对于假负载带母联进行特殊处理
      if (this.params.topologyMapType === 11) {
        this.params.buscoupleState = 1;
      } else {
        this.params.buscoupleState = 0;
      }
    },
    searchProvince() {
      // 省
      // 查询后台
@@ -864,7 +1057,11 @@
      }
    },
    battProducerOk() {
      var value = this.battProducer.value;
      var value = this.battProducer.value.trim();
      if (!value) {
        this.$message.error("不能为空");
        return false;
      }
      // 获取选择的值
      this.params.battProducer = value;
      // 记录选择的内容
@@ -876,31 +1073,48 @@
      this.battProducer.dialogVisible = false;
    },
    // 提交表单设置参数
    submitFrom() {
    showReason() {
      this.$refs.ruleForm.validate((valid) => {
        // 校验通过
        if (valid) {
          var tmp = {};
          Object.keys(this.params).forEach((key, value) => {
            tmp[key] = this.params[key];
          });
          tmp.stationName =
            tmp.stationName1 +
            "-" +
            tmp.stationName2 +
            "-" +
            tmp.stationName5 +
            "-" +
            tmp.stationName3 +
            "-" +
            tmp.stationName4;
          // 编辑机房
          this.editHome(tmp);
          this.reasonVisible = true;
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          return false;
        }
      });
    },
    submitCancel() {
      this.updateReason = "";
      this.reasonVisible = false;
    },
    submitFrom() {
      let { updateReason } = this;
      if ("" == updateReason.trim()) {
        this.$message.error("请填写修改原因");
        return false;
      }
      var tmp = {};
      Object.keys(this.params).forEach((key, value) => {
        tmp[key] = this.params[key];
      });
      tmp.stationName =
        tmp.stationName1 +
        "-" +
        tmp.stationName2 +
        "-" +
        tmp.stationName5 +
        "-" +
        tmp.stationName3 +
        "-" +
        tmp.stationName4;
      tmp.updateReason = updateReason;
      tmp.acdcSecuityFlag = this.acdcSecuityFlag * 1;
      let tabValue = this.sortTabList(this.tabValue, this.tabList);
      tmp.labelCfg = this.tabList.length !== 0?tabValue.join(','):'';
      // 编辑机房
      this.editHome(tmp);
    },
    // 编辑机房
    editHome(batt) {
@@ -914,6 +1128,8 @@
              type: "success",
              message: "修改" + batt.stationName + "成功!",
            });
            this.updateReason = "";
            this.reasonVisible = false;
            // 触发事件
            this.$emit("success");
          } else {
@@ -932,7 +1148,7 @@
            message: "修改" + batt.stationName + "失败!",
          });
          // 触发事件
          this.$emit("success");
          // this.$emit("success");
          // 关闭加载框
          this.$layer.close(loading);
        });
@@ -1120,10 +1336,9 @@
      this.county.dialogVisible = false;
    },
    searchTplAll() {
      this.$apis.dcdc
        .searchTplAll()
      searchTplAll()
        .then((res) => {
          let rs = JSON.parse(res.data.result);
          let rs = res.data;
          let data = [];
          if (rs.code == 1) {
            data = rs.data;
@@ -1133,7 +1348,7 @@
          this.tmpList = data.map((item) => {
            item.key = item.tmpId;
            item.value = item.tmpId;
            item.label = item.tmp_name;
            item.label = item.tmpName;
            return item;
          });
@@ -1170,6 +1385,40 @@
    },
  },
  computed: {
    isSzdt() {
      return this.clientName === "szdt";
    },
    subwayLines() {
      let jsonData = this.jsonData;
      let list = [];
      if(jsonData.l) {
        list = jsonData.l.map(item=>{
          return {
            label: item.ln,
            value: item.ln,
          }
        })
      }
      return list;
    },
    subwayStations() {
      let list = [];
      let jsonData = this.jsonData;
      if(jsonData.l) {
        for(let i=0; i<jsonData.l.length; i++) {
          let itemData = jsonData.l[i];
          if(itemData.ln === this.params.stationName9) {
            list = itemData.st.map(item=>{
              return {
                label: item.n,
                value: item.n
              }
            })
          }
        }
      }
      return list;
    },
    isInversion() {
      let dev_id = this.params.fbsdeviceId;
      return regEquipType(dev_id, "BTS9120");
@@ -1177,7 +1426,7 @@
    isLithium() {
      // 锂电BTS
      let dev_id = this.params.fbsdeviceId;
      return regEquipType(dev_id, ["lithium"]);
      return regEquipType(dev_id, ["lithium", "li9132", "kgdy"]);
    },
    isLithiumPack() {
      // 锂电池包
@@ -1193,8 +1442,13 @@
      let isLithiumPack = this.isLithiumPack;
      return isLithiumPack ? "锂电池包单体个数" : "单体个数";
    },
    isDfBms() {
      // BMS
      let dev_id = this.params.fbsdeviceId;
      return regEquipType(dev_id, ["dfBms"]);
    },
  },
  mounted() {
  async mounted() {
    // 设置省市区县的数据
    this.linkagePlus.setData(const_province_city_county);
@@ -1205,9 +1459,14 @@
    this.searchbattProducer();
    this.params = extend({}, this.batt);
    this.acdcSecuityFlag = !!this.batt.acdcSecuityFlag;
    // 查询所有的电价分布图模板
    this.searchTplAll();
    this.handleDevTypeChange();
    this.jsonData = await this.getJson();
  },
};
</script>
@@ -1227,4 +1486,4 @@
.form-footer .three-btn {
  margin-left: 12px;
}
</style>
</style>