he wei
2023-04-23 c1ef35766a8a9887b21696584adbe9eb522a83bb
UA 机房信息管理 电池信息管理 国际化
16个文件已修改
10个文件已添加
4110 ■■■■ 已修改文件
src/assets/js/const/const_battery_type.js 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/const/const_changeIp.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/const_battGroup.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/const_battery_type.js 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/const_changeIp.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/i18n/const_rules.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/battGroupMager.vue 414 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/AddBattGroup.vue 521 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/ChangeIpParams.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/EditBattGroup.vue 501 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/nodeManage.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/stationManage.vue 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/updateStation.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/components/updateStationName.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/i18n/battGroupMager.js 164 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/i18n/stationManage.js 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/i18n/totalStation.js 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/i18n/updateStation.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/js/station.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dataMager/totalStation.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/BaojiGroupList.vue 115 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/baojiMager.vue 1393 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/i18n/BaojiGroupList.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/i18n/baojiMager.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/i18n/powerMager.js 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/userMager/powerMager.vue 212 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/const/const_battery_type.js
@@ -1,20 +1,20 @@
export default {
    types: [
        {
            label: '蓄电池',
            label: 'Battery',
            value: 0
        },
        {
            label: '胶体电池',
            label: 'GelBattery',
            value: 1
        },
        {
            label: '锂电池',
            label: 'LithiumBattery',
            value: 2
        }
    ],
    getLabel(value, list) {
        let label = "未知";
        let label = "Unknown";
        for (let i = 0; i < list.length; i++) {
            let item = list[i];
            if (item.value == value) {
src/assets/js/const/const_changeIp.js
@@ -3,7 +3,7 @@
        ipReg: {
            pattern: /^\d{1,3}(\.\d{1,3}){3}$/,
            regVal: false,
            msg: '格式不正确'
            msg: 'Wrongformat'
        }
    }
}
src/assets/js/i18n/const_battGroup.js
New file
@@ -0,0 +1,14 @@
export default {
  messages: {
    CN: {
      WrongIPaddressformat: 'IP地址格式不正确',
      Wrongsubnetmaskformat: '子网掩码格式不正确',
      Wronggatewayformat: '网关格式不正确',
    },
    US: {
      WrongIPaddressformat: 'Wrong IP address format.',
      Wrongsubnetmaskformat: 'Wrong subnet mask format.',
      Wronggatewayformat: 'Wrong gateway format.',
    }
  }
}
src/assets/js/i18n/const_battery_type.js
New file
@@ -0,0 +1,16 @@
export default {
  messages: {
    CN: {
      Battery: '蓄电池',
      GelBattery: '胶体电池',
      LithiumBattery: '锂电池',
      Unknown: '未知',
    },
    US: {
      Battery: 'Battery',
      GelBattery: 'Gel Battery',
      LithiumBattery: 'Lithium Battery',
      Unknown: 'Unknown',
    }
  }
}
src/assets/js/i18n/const_changeIp.js
New file
@@ -0,0 +1,10 @@
export default {
  messages: {
    CN: {
      Wrongformat: '格式不正确',
    },
    US: {
      Wrongformat: 'Wrong format.',
    }
  }
}
src/assets/js/i18n/const_rules.js
@@ -7,7 +7,7 @@
    },
    US: {
      isValidIp: 'IP地址格式不正确',
      noSpecialChar: '存在特殊字符',
      noSpecialChar: 'Special character exists',
      isWhiteIp: 'Enter the correct IP address. For example: * or 192.168.10.7, 192.168.10.8',
    }
  }
src/views/dataMager/battGroupMager.vue
@@ -2,247 +2,97 @@
  <flex-layout>
    <div class="table-layout filter-box-table" slot="header">
      <div class="table-row">
        <div class="table-cell text-right">省:</div>
        <div class="table-cell text-right">{{ $t('Province') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.province"
            @change="searchCity"
            size="small"
            placeholder="请选择省"
          >
            <el-option
              v-for="item in filters.data.province"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="filters.values.province" @change="searchCity" size="small">
            <el-option v-for="(item, idx) in filters.data.province" :key="item.value" :label="0 == idx ? $tc('form.allCount', item.label) : item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
        <div class="table-cell text-right">市:</div>
        <div class="table-cell text-right">{{ $t('City') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.city"
            @change="searchCounty"
            size="small"
            placeholder="请选择市"
          >
            <el-option
              v-for="item in filters.data.city"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="filters.values.city" @change="searchCounty" size="small">
            <el-option v-for="(item, idx) in filters.data.city" :key="item.value" :label="0 == idx ? $tc('form.allCount', item.label) : item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
        <div class="table-cell text-right">区/县/班组:</div>
        <div class="table-cell text-right">{{ $t('DistrictCounty') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.county"
            @change="searchHome"
            size="small"
            placeholder="请选择区/县/班组"
          >
            <el-option
              v-for="item in filters.data.county"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="filters.values.county" @change="searchHome" size="small">
            <el-option v-for="(item, idx) in filters.data.county" :key="item.value" :label="0 == idx ? $tc('form.allCount', item.label) : item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
        <div class="table-cell text-right">机房名称:</div>
        <div class="table-cell text-right">{{ $t('EquipmentRoomName') }}:</div>
        <div class="table-cell w360">
          <el-select
            v-model="filters.values.home"
            @click="changeHome"
            filterable
            size="small"
            placeholder="请选择机房名称"
          >
            <el-option
              v-for="item in filters.data.home"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            >
          <el-select v-model="filters.values.home" @click="changeHome" :placeholder="$t('selectDistrictCounty')" filterable size="small">
            <el-option v-for="(item, idx) in filters.data.home" :key="item.value" :label="0 == idx ? $tc('form.allCount', item.label) : item.label" :value="item.value">
            </el-option>
          </el-select>
        </div>
      </div>
    </div>
    <div class="flex-page-content">
      <el-table
        stripe
        size="mini"
        header-row-class-name="header-primary"
        height="100%"
        :data="tableData"
      >
        <el-table-column
          v-for="(item, idx) in tableHeader"
          :key="'theader_' + idx"
          :prop="item.prop"
          :label="item.label"
          :min-width="item.minWidth"
          :resizable="false"
          :sortable="item.sortable"
          align="center"
        >
      <el-table stripe size="mini" header-row-class-name="header-primary" height="100%" :data="tableData">
        <el-table-column v-for="(item, idx) in tableHeader" :key="'theader_' + idx" :prop="item.prop" :label="$t(item.label)"
          show-overflow-tooltip
          :min-width="item.minWidth" :resizable="false" :sortable="item.sortable" align="center">
        </el-table-column>
        <el-table-column fixed="right" label="操作" width="250" align="center">
        <el-table-column fixed="right" :label="$t('operate.operation')" width="310" align="center">
          <template slot-scope="scope">
            <el-button
              :disabled="!isCanEdit"
              @click="showSelectEditDialog(scope.row)"
              type="primary"
              size="mini"
              v-if="editMore"
              >编辑</el-button
            >
            <el-button
              :disabled="!isCanEdit"
              @click="handleClick(scope.row)"
              type="primary"
              size="mini"
              v-else
              >编辑</el-button
            >
            <el-button
              :disabled="!isCanEdit"
              type="info"
              @click="handleAddClick(scope.row)"
              size="mini"
              >添加电池组</el-button
            >
            <el-button
              :disabled="!isCanEdit"
              type="danger"
              size="mini"
              @click="confirmDelHome(scope.row)"
              >删除</el-button
            >
            <el-button :disabled="!isCanEdit" @click="showSelectEditDialog(scope.row)" type="primary" size="mini"
              v-if="!0 || editMore">{{ $t('operate.edit') }}</el-button>
            <el-button :disabled="!isCanEdit" @click="handleClick(scope.row)" type="primary" size="mini" v-else>{{
              $t('operate.edit') }}</el-button>
            <el-button :disabled="!isCanEdit" type="info" @click="handleAddClick(scope.row)" size="mini">{{
              $t('AddBatteryGroup') }}</el-button>
            <el-button :disabled="!isCanEdit" type="danger" size="mini" @click="confirmDelHome(scope.row)">{{
              $t('operate.delete') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="flex-page-footer" slot="footer">
      <div class="el-pagination-btns">
        <el-button
          type="primary"
          @click="searchData"
          round
          size="mini"
          icon="el-icon-search"
          >查询</el-button
        >
        <el-button
          type="primary"
          round
          size="mini"
          icon="el-icon-wallet"
          @click="exportFile"
          >导出</el-button
        >
        <el-button type="primary" @click="searchData" round size="mini" icon="el-icon-search">{{ $t('operate.search')
        }}</el-button>
        <el-button type="primary" round size="mini" icon="el-icon-wallet" @click="exportFile">{{ $t('operate.export')
        }}</el-button>
      </div>
      <el-pagination
        size="mini"
        :current-page="page.pageCurr"
        :page-sizes="[10, 20, 30, 50, 100]"
        :page-size="page.pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="page.pageAll"
        @current-change="currentChange"
        @size-change="sizeChange"
      ></el-pagination>
      <el-pagination size="mini" :current-page="page.pageCurr" :page-sizes="[10, 20, 30, 50, 100]"
        :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="page.pageAll"
        @current-change="currentChange" @size-change="sizeChange"></el-pagination>
      <div class="el-pagination-btns">
        <el-button
          :disabled="!isCanEdit"
          type="primary"
          @click="addHome()"
          round
          size="mini"
          icon="el-icon-plus">新建电池组</el-button>
        <el-button :disabled="!isCanEdit" type="primary" @click="addHome()" round size="mini" icon="el-icon-plus">{{
          $t('AddBatteryGroup') }}</el-button>
      </div>
    </div>
    <!-- 电池信息编辑选择 -->
    <el-dialog
      title="电池信息编辑选择"
      width="auto"
      :visible.sync="selectEdit"
      :close-on-click-modal="false"
      top="0"
      class="dialog-center"
    >
    <el-dialog :title="$t('BatteryInfoEditselect')" width="auto" :visible.sync="selectEdit" :close-on-click-modal="false"
      top="0" class="dialog-center">
      <div class="padding16161616 white-bg">
        <el-button
          :disabled="!isCanEdit"
          @click="dHandleClick()"
          type="primary"
          size="mini"
          >电池信息编辑</el-button
        >
        <el-button
          :disabled="!isCanEdit"
          @click="dChangeIpClick()"
          type="primary"
          size="mini"
          v-if="changeIp"
          >远程IP修改</el-button
        >
        <el-button :disabled="!isCanEdit" @click="dHandleClick()" type="primary" size="mini">{{ $t('BatteryInfoEdit')
        }}</el-button>
        <el-button :disabled="!isCanEdit" @click="dChangeIpClick()" type="primary" size="mini" v-if="!0 || changeIp">{{
          $t('RemoteIPModify') }}</el-button>
      </div>
    </el-dialog>
    <!-- 添加电池组 -->
    <el-dialog
      title="添加电池组"
      width="800px"
      :visible.sync="addDialog"
      :close-on-click-modal="false"
      top="0"
      class="dialog-center"
      :modal-append-to-body="false"
    >
      <add-group-mager
        v-if="addDialog"
        :batt="batt"
        @success="addSuccess"
      ></add-group-mager>
    <el-dialog :title="$t('AddBatteryGroup')" width="800px" :visible.sync="addDialog" :close-on-click-modal="false"
      top="0" class="dialog-center" :modal-append-to-body="false">
      <add-group-mager v-if="addDialog" :batt="batt" @success="addSuccess"></add-group-mager>
    </el-dialog>
    <!-- 编辑电池组 -->
    <el-dialog
      :title="editTitle"
      width="800px"
      :visible.sync="editDialog"
      :close-on-click-modal="false"
      top="0"
      class="dialog-center"
      :modal-append-to-body="false"
    >
      <edit-group-mager
        v-if="editDialog"
        :batt="batt"
        @success="editSuccess"
      ></edit-group-mager>
    <el-dialog :title="editTitle" width="800px" :visible.sync="editDialog" :close-on-click-modal="false" top="0"
      class="dialog-center" :modal-append-to-body="false">
      <edit-group-mager v-if="editDialog" :batt="batt" @success="editSuccess"></edit-group-mager>
    </el-dialog>
    <!-- 远程修改ip -->
    <el-dialog
      title="远程修改IP"
      width="auto"
      :visible.sync="changeIpDialog"
      :close-on-click-modal="false"
      top="0"
      class="dialog-center"
      :modal-append-to-body="false"
    >
      <change-ip-params
        :batt="batt"
        :visible.sync="changeIpDialog"
        v-if="changeIpDialog"
        @success="changeIpSuccess"
      ></change-ip-params>
    <el-dialog :title="$t('RemoteIPModify')" width="auto" :visible.sync="changeIpDialog" :close-on-click-modal="false"
      top="0" class="dialog-center" :modal-append-to-body="false">
      <change-ip-params :batt="batt" :visible.sync="changeIpDialog" v-if="changeIpDialog"
        @success="changeIpSuccess"></change-ip-params>
    </el-dialog>
  </flex-layout>
</template>
@@ -263,8 +113,12 @@
import EditAutograph from "./components/EditAutograph";
import ChangeIpParams from "./components/ChangeIpParams";
import { const_battery_type } from "@/assets/js/const";
import i18n from './i18n/battGroupMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: 'battGroupMager',
  mixins: [i18nMixin],
  components: {
    ChangeIpParams,
    EditAutograph,
@@ -305,170 +159,165 @@
      tableHeader: [
        {
          prop: 'stationId',
          label: '机房编号',
          label: 'RoomNo',
          minWidth: 150
        },
        {
          prop: 'stationName1',
          label: '省',
          minWidth: 120
          label: 'Province',
          minWidth: 150
        },
        {
          prop: 'stationName2',
          label: '市',
          minWidth: 120
          label: 'City',
          minWidth: 150
        },
        {
          prop: 'stationName5',
          label: '区县/班组',
          minWidth: 120
          label: 'DistrictCounty',
          minWidth: 150
        },
        {
          prop: 'stationName3',
          label: '机房名称',
          minWidth: 280
          label: 'EquipmentRoomName',
          minWidth: 310
        },
        {
          prop: 'stationName4',
          label: '设备名称',
          minWidth: 120
          label: 'DeviceName',
          minWidth: 150
        },
        {
          prop: 'monCapStd',
          label: '标称容量(AH)',
          minWidth: 120
          label: 'RatedCapacity',
          minWidth: 170
        },
        {
          prop: 'monVolStd',
          label: '标称单体电压(V)',
          label: 'RatedCellV',
          minWidth: 130
        },
        {
          prop: 'monResStd',
          label: '标称单体内阻(mΩ)',
          label: 'RatedCellR',
          minWidth: 150
        },
        {
          prop: 'battProductDate',
          label: '电池生产日期',
          label: 'ManufactureDate',
          sortable: true,
          minWidth: 160
          minWidth: 180
        },
        {
          prop: 'battInUseDate',
          label: '投入使用日期',
          label: 'ServiceDate',
          sortable: true,
          minWidth: 160
        },
        {
          prop: 'battProducer',
          label: '电池品牌',
          label: 'BatteryBrand',
          minWidth: 120
        },
        {
          prop: 'battModel',
          label: '电池型号',
          minWidth: 120
          label: 'BatteryModel',
          minWidth: 140
        },
        {
          prop: 'loadCurr',
          label: '负载电流(A)',
          minWidth: 120
          label: 'LoadCurrent',
          minWidth: 140
        },
        {
          prop: 'disCurrMax',
          label: '最大核容电流(A)',
          minWidth: 130
          label: 'MaxDischargeCurrent',
          minWidth: 210
        },
        {
          prop: 'fbsdeviceId',
          label: '设备ID',
          label: 'DeviceID',
          minWidth: 120
        },
        {
          prop: 'fbsdeviceIp',
          label: '设备IP',
          label: 'DeviceIP',
          minWidth: 160
        },
        {
          prop: 'fbsdeviceipYm',
          label: '子网掩码',
          label: 'SubnetMask',
          minWidth: 160
        },
        {
          prop: 'fbsdeviceipWg',
          label: '网关',
          label: 'Gateway',
          minWidth: 160
        },
        {
          prop: 'fbsdeviceName',
          label: '协议名称',
          minWidth: 120
          label: 'ProtocolName',
          minWidth: 140
        },
        {
          prop: 'groupIndexInFBSDevice',
          label: 'FBS设备索引',
          label: 'FBSIndex',
          minWidth: 120
        },
        {
          prop: 'battGroupId',
          label: '电池组ID',
          minWidth: 120
          label: 'BatteryGroupID',
          minWidth: 140
        },
        {
          prop: 'batteryType',
          label: '电池组类型',
          minWidth: 134
          label: 'BatteryGroupType',
          minWidth: 164
        },
        {
          prop: 'battGroupName',
          label: '电池组名称',
          minWidth: 120
          label: 'BatteryGroupName',
          minWidth: 170
        },
        {
          prop: 'floatVolLevel',
          label: '浮充电压阀值(V)',
          minWidth: 130
          label: 'FCVoltageThreshold',
          minWidth: 200
        },
        {
          prop: 'offlineVolLevel',
          label: '离线电压阀值(V)',
          minWidth: 130
          label: 'OfflineThreshold',
          minWidth: 190
        },
        {
          prop: 'battFloatCurrent',
          label: '浮充电流阀值(A)',
          minWidth: 130
          label: 'FCCurrentThreshold',
          minWidth: 210
        },
        {
          prop: 'monCount',
          label: '单体数量',
          label: 'CellQty',
          minWidth: 120
        },
        {
          prop: 'monSerStd',
          label: '标称单体电导',
          label: 'RatedCellC',
          minWidth: 120
        },
        {
          prop: 'monVolLowToAvg',
          label: '单体电压次低偏移量(V)',
          minWidth: 168
        },
        {
          prop: 'videoUrl',
          label: '视频监控序列号',
          minWidth: 120
          label: 'MonitoringSerialNo',
          minWidth: 180
        },
        {
          prop: 'tmpId',
          label: '模板名称',
          minWidth: 120
          label: 'TemplateName',
          minWidth: 140
        },
        {
          prop: 'stationPhone',
          label: '基站号码',
          minWidth: 120,
          label: 'BaseStationNo',
          minWidth: 140,
        },
      ],
      tableData: [],
@@ -487,7 +336,7 @@
    },
    // 导出表格
    exportFile() {
      ExportFile(this.tableHeader, this.tableData, "电池信息管理数据");
      ExportFile(this.tableHeader, this.tableData, this.$t('BatteryInfoManagementData'));
    },
    searchProvince() {
      // 查询省
@@ -506,7 +355,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置省
@@ -538,7 +387,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置市
@@ -569,7 +418,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置区县
@@ -591,12 +440,7 @@
      // 未选择区县
      if (searchParams.stationName5 == "") {
        // 设置机房
        this.filters.data.home = [
          {
            label: "请选择区/县/班组",
            value: "",
          },
        ];
        this.filters.data.home = [];
        // 查询数据
        this.searchData(true);
        return;
@@ -617,7 +461,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置机房
@@ -709,34 +553,28 @@
    },
    confirmDelHome(batt) {
      var self = this;
      this.$layer.confirm(
        "确定删除" + batt.stationName3,
        { icon: 3 },
        function (index) {
          // 关闭询问框
          self.$layer.close(index);
      this.$confirm(
        this.$t('Confimetodelete') + batt.stationName3,
        this.$t('Message'),
        { icon: 3 }).then((res) => {
          if (res != 'confirm') {
            return false;
          }
          // 删除机房
          self.delHome(batt);
        }
      );
        });
    },
    delHome(batt) {
      let loading = this.$layer.loading(1);
      // 请求后台
      del({battgroupId: batt.battGroupId})
      del({ battgroupId: batt.battGroupId })
        .then((res) => {
          res = res.data;
          if (res.code) {
            this.$message({
              type: "success",
              message: "删除" + batt.stationName3 + "成功!",
            });
            this.$message.success(this.$t('operate.successMsg'));
            this.searchData();
          } else {
            this.$message({
              type: "error",
              message: "删除" + batt.stationName3 + "失败!",
            });
            this.$message.error(this.$t('operate.failMsg'));
          }
          // 关闭等待框
          this.$layer.close(loading);
@@ -745,6 +583,7 @@
          console.log(error);
          // 关闭等待框
          this.$layer.close(loading);
          this.$message.error(this.$t('operate.failMsg'));
        });
    },
    handleClick(batt) {
@@ -780,7 +619,7 @@
    editTitle() {
      let batt = this.batt;
      return (
        "编辑" +
        this.$t('operate.edit') + ' ' +
        batt.stationName1 +
        "-" +
        batt.stationName2 +
@@ -803,5 +642,4 @@
};
</script>
<style scoped>
</style>
<style scoped></style>
src/views/dataMager/components/AddBattGroup.vue
@@ -1,469 +1,291 @@
<template>
  <div class="params-container">
    <el-form
      ref="ruleForm"
      size="mini"
      label-position="top"
      :model="params"
      :rules="rules"
      class="params-dialog bg-white"
    >
    <el-form ref="ruleForm" size="mini" label-position="top" :model="params" :rules="rules"
      class="params-dialog bg-white">
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="省" prop="stationName1">
            <el-select
              v-model="params.stationName1"
              placeholder="请选择省"
              @change="provinceChange"
              :filterable="true"
            >
              <el-option
                v-for="item in linkage.provinces"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('Province')" prop="stationName1">
            <el-select v-model="params.stationName1" :placeholder="$t('form.selectMsg')" @change="provinceChange"
              :filterable="true">
              <el-option v-for="item in linkage.provinces" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="市" prop="stationName2">
            <el-select
              v-model="params.stationName2"
              placeholder="请选择市"
              @change="cityChange"
              :filterable="true"
            >
              <el-option
                v-for="item in linkage.cities"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('City')" prop="stationName2">
            <el-select v-model="params.stationName2" :placeholder="$t('form.selectMsg')" @change="cityChange"
              :filterable="true">
              <el-option v-for="item in linkage.cities" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="区/县/班组" prop="stationName5">
            <el-select
              v-model="params.stationName5"
              placeholder="请选择区县"
              @change="countyChange"
              allow-create
              :filterable="true"
            >
              <el-option
                v-for="item in linkage.counties"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('DistrictCounty')" prop="stationName5">
            <el-select v-model="params.stationName5" :placeholder="$t('form.selectMsg')" @change="countyChange"
              allow-create :filterable="true">
              <el-option v-for="item in linkage.counties" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="机房名称" prop="stationName3">
            <el-select
              v-model="params.stationName3"
              placeholder="请选择站点"
              @change="siteChange"
              :filterable="true"
            >
              <el-option
                v-for="(item, index) in linkage.sites"
                :key="index"
                :label="item.label"
                :value="item.value"
              >
          <el-form-item :label="$t('EquipmentRoomName')" prop="stationName3">
            <el-select v-model="params.stationName3" :placeholder="$t('form.selectMsg')" @change="siteChange"
              :filterable="true">
              <el-option v-for="(item, index) in linkage.sites" :key="index" :label="item.label" :value="item.value">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备名称" prop="stationName4">
          <el-form-item :label="$t('DeviceName')" prop="stationName4">
            <el-input v-model="params.stationName4"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备IP" prop="fbsdeviceIp">
          <el-form-item :label="$t('DeviceIP')" prop="fbsdeviceIp">
            <el-input v-model="params.fbsdeviceIp"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="子网掩码" prop="fbsdeviceipYm">
          <el-form-item :label="$t('SubnetMask')" prop="fbsdeviceipYm">
            <el-input v-model="params.fbsdeviceipYm"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="网关" prop="fbsdeviceipWg">
          <el-form-item :label="$t('Gateway')" prop="fbsdeviceipWg">
            <el-input v-model="params.fbsdeviceipWg"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="协议名称" prop="fbsdeviceName">
          <el-form-item :label="$t('ProtocolName')" prop="fbsdeviceName">
            <el-input v-model="params.fbsdeviceName"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备类型" prop="fbsdeviceId">
            <el-select
              v-model="params.fbsdeviceId"
              placeholder="请选择设备类型"
            >
              <el-option
                v-for="item in devTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('DeviceType')" prop="fbsdeviceId">
            <el-select v-model="params.fbsdeviceId" disabled :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in devTypes" :key="item.value" :label="item.label" :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isInversion">
          <el-form-item label="充电类型">
            <el-select v-model="params.chargeType" placeholder="请选择充电类型">
              <el-option
                v-for="item in chargeTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('ChargeType')">
            <el-select v-model="params.chargeType" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in chargeTypes" :key="item.value" :label="item.label"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isHasBuscouple">
          <el-form-item label="母联状态">
            <el-select
              v-model="params.buscoupleState"
              placeholder="请选择母联状态"
            >
              <el-option
                v-for="item in buscouplestates"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('BuscouplerStatus')">
            <el-select v-model="params.buscoupleState" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in buscouplestates" :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="电池组类型" prop="battGroupNum">
            <el-select
              v-model="params.battGroupNum"
              placeholder="请选择电池类型"
            >
              <el-option
                v-for="item in batteryTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('BatteryGroupType')" prop="battGroupNum">
            <el-select v-model="params.battGroupNum" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in batteryTypes" :key="item.value" :label="$t('battTypes.' + item.label)"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池组名称" prop="battGroupName">
          <el-form-item :label="$t('BatteryGroupName')" prop="battGroupName">
            <el-input v-model="params.battGroupName"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="浮充电压阀值(V)" prop="floatVolLevel">
          <el-form-item :label="$t('FCVoltageThreshold')" prop="floatVolLevel">
            <el-input v-model="params.floatVolLevel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="离线电压阀值(V)" prop="offlineVolLevel">
          <el-form-item :label="$t('OfflineThreshold')" prop="offlineVolLevel">
            <el-input v-model="params.offlineVolLevel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="浮充电流阀值(A)" prop="battFloatCurrent">
          <el-form-item :label="$t('FCCurrentThreshold')" prop="battFloatCurrent">
            <el-input v-model="params.battFloatCurrent"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isLithiumPack">
          <el-form-item label="锂电池包个数" prop="PackCount">
          <el-form-item :label="$t('LithiumBatteryPackQty')" prop="PackCount">
            <el-input v-model="params.packCount"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item :label="monCountText" prop="monCount">
            <!--                        <el-select v-model="params.MonCount" placeholder="请选择单体数量">-->
            <!--                            <el-option label="4" value="4"></el-option>-->
            <!--                            <el-option label="24" value="24"></el-option>-->
            <!--                        </el-select>-->
            <el-input v-model="params.monCount"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称容量(AH)" prop="monCapStd">
          <el-form-item :label="$t('RatedCapacity')" prop="monCapStd">
            <el-input v-model="params.monCapStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体电压(V)" prop="monVolStd">
          <el-form-item :label="$t('RatedCellV')" prop="monVolStd">
            <el-input v-model="params.monVolStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体内阻(mΩ)" prop="monResStd">
          <el-form-item :label="$t('RatedCellR')" prop="monResStd">
            <el-input v-model="params.monResStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体电导" prop="monSerStd">
          <el-form-item :label="$t('RatedCellC')" prop="monSerStd">
            <el-input v-model="params.monSerStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="FBS设备索引" prop="groupIndexInFBSDevice">
          <el-form-item :label="$t('FBSIndex')" prop="groupIndexInFBSDevice">
            <el-input v-model="params.groupIndexInFBSDevice"></el-input>
          </el-form-item>
        </el-col>
        <!--                <el-col :span="layout.span">-->
        <!--                    <el-form-item label="单体电压次低偏移量(V)" prop="MonVolLowToAvg">-->
        <!--                        <el-input v-model="params.MonVolLowToAvg"></el-input>-->
        <!--                    </el-form-item>-->
        <!--                </el-col>-->
        <el-col :span="layout.span">
          <el-form-item label="负载电流(A)" prop="loadCurr">
          <el-form-item :label="$t('LoadCurrent')" prop="loadCurr">
            <el-input v-model="params.loadCurr"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="最大核容电流(A)" prop="disCurrMax">
          <el-form-item :label="$t('MaxDischargeCurrent')" prop="disCurrMax">
            <el-input v-model="params.disCurrMax"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池品牌" prop="battProducer">
            <el-select
              v-model="params.battProducer"
              placeholder="请选择"
              @change="battProducerChange"
              :filterable="true"
            >
              <el-option
                v-for="item in linkage.battProducers"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('BatteryBrand')" prop="battProducer">
            <el-select v-model="params.battProducer" :placeholder="$t('form.selectMsg')" @change="battProducerChange"
              :filterable="true">
              <el-option v-for="item in linkage.battProducers" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="-999"></el-option>
              <el-option :label="$t('Other')" value="-999"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池型号" prop="battModel">
          <el-form-item :label="$t('BatteryModel')" prop="battModel">
            <el-input v-model="params.battModel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池生产日期" prop="battProductDate">
            <el-date-picker
              v-model="params.battProductDate"
              size="small"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          <el-form-item :label="$t('ManufactureDate')" prop="battProductDate">
            <el-date-picker v-model="params.battProductDate" size="small" type="date" :placeholder="$t('form.selectDate')"
              value-format="yyyy-MM-dd"></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="投入使用日期" prop="battInUseDate">
            <el-date-picker
              v-model="params.battInUseDate"
              size="small"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          <el-form-item :label="$t('ServiceDate')" prop="battInUseDate">
            <el-date-picker v-model="params.battInUseDate" size="small" type="date" :placeholder="$t('form.selectDate')"
              value-format="yyyy-MM-dd"></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="视频监控序列号">
          <el-form-item :label="$t('MonitoringSerialNo')">
            <el-input v-model="params.videoUrl"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isLithium">
          <el-form-item label="电价分布模板" prop="tmpId">
            <el-select v-model="params.tmpId" placeholder="请选择电价分布模板">
              <el-option
                v-for="item in tmpList"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('ElectricityRateTemplate')" prop="tmpId">
            <el-select v-model="params.tmpId" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in tmpList" :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-form-item :label="$t('BaseStationNo')">
            <el-input v-model="params.stationPhone"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <three-btn @click="autoComputeIp" v-if="params.fbsdeviceId == '9100'"
          >自动计算IP</three-btn
        >
        <three-btn @click="submitFrom">确定</three-btn>
        <three-btn @click="autoComputeIp" v-if="params.fbsdeviceId == '9100'">{{ $t('AutomaticallycalculateIP') }}</three-btn>
        <three-btn @click="submitFrom">{{ $t('operate.ok') }}</three-btn>
      </div>
    </el-form>
    <!-- 省 -->
    <el-dialog
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择省"
      :visible.sync="province.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('Province')" :visible.sync="province.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="省">
          <el-select
            v-model="province.value"
            placeholder="请选择省"
            :filterable="true"
          >
            <el-option
              v-for="province in province.list"
              :key="province.name"
              :label="province.name"
              :value="province.name"
            ></el-option>
        <el-form-item :label="$t('Province')">
          <el-select v-model="province.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="province in province.list" :key="province.name" :label="province.name"
              :value="province.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="provinceOk"
          >确定</el-button
        >
        <el-button size="mini" @click="province.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="provinceOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 市 -->
    <el-dialog
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择市"
      :visible.sync="city.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('City')" :visible.sync="city.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select
            v-model="city.value"
            placeholder="请选择市"
            :filterable="true"
          >
            <el-option
              v-for="city in city.list"
              :key="city.name"
              :label="city.name"
              :value="city.name"
            >
        <el-form-item :label="$t('City')">
          <el-select v-model="city.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="city in city.list" :key="city.name" :label="city.name" :value="city.name">
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="cityOk">确定</el-button>
        <el-button size="mini" @click="city.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="cityOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 区县 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请选择区县"
      :visible.sync="county.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('DistrictCounty')" :visible.sync="county.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select
            v-model="county.value"
            placeholder="请选择市"
            :filterable="true"
          >
            <el-option
              v-for="county in county.list"
              :key="county.name"
              :label="county.name"
              :value="county.name"
            ></el-option>
        <el-form-item :label="$t('DistrictCounty')">
          <el-select v-model="county.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="county in county.list" :key="county.name" :label="county.name"
              :value="county.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="countyOk">确定</el-button>
        <el-button size="mini" @click="county.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="countyOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 电池品牌 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请输入电池品牌"
      :visible.sync="battProducer.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog top="0" class="dialog-center" :title="$t('form.inputMsg') + ' ' + $t('BatteryBrand')" :visible.sync="battProducer.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="电池品牌">
        <el-form-item :label="$t('BatteryBrand')">
          <el-input v-model="battProducer.value"></el-input>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="battProducerOk"
          >确定</el-button
        >
        <el-button size="mini" @click="battProducer.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="battProducerOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="battProducer.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 机房 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请输入机房"
      :visible.sync="site.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog top="0" class="dialog-center" :title="$t('form.inputMsg') + ' ' + $t('EquipmentRoomName')" :visible.sync="site.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item>
          <el-input
            v-model="site.value"
            placeholder="请输入机房名称"
          ></el-input>
          <el-input v-model="site.value" :placeholder="$t('form.inputMsg')"></el-input>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="siteOk">确定</el-button>
        <el-button size="mini" @click="site.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="siteOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="site.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
  </div>
@@ -488,8 +310,14 @@
import const_rules from "@/assets/js/const/const_rules";
import getDevIp from "@/assets/js/tools/getDevIp";
import i18n from '../i18n/battGroupMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
import battTypes from '@/assets/js/i18n/const_battery_type';
import i18nConstRules from '@/assets/js/i18n/const_rules';
import i18nConstBatt from '@/assets/js/i18n/const_battGroup';
const i18nMixin = createI18nOption(i18n, [[battTypes, 'battTypes'], [i18nConstRules, 'constRule'], [i18nConstBatt, 'rule']]);
export default {
  mixins: [i18nMixin],
  props: {
    batt: {
      type: Object,
@@ -503,9 +331,10 @@
    let constRules = const_rules;
    let devTypes = const_devType.batt;
    let batteryTypes = const_battery_type.types;
    const vm = this;
    const subRules = {
      validator(rule, value, callback) {
        testVal(rule, value, callback, constRules.noSpecialChar);
        testVal(rule, value, callback, constRules.noSpecialChar, vm, 'constRule');
      },
      trigger: "change",
    };
@@ -523,7 +352,7 @@
        stationName3: "", // 机房名称*
        stationName4: "", // 设备名称*
        stationIp: "192.168.0.5", // 机房ip
        fbsdeviceId: 618500152, // 设备ID (后台自动生成最大)
        fbsdeviceId: 4831, // 设备ID (后台自动生成最大)
        fbsdeviceIp: "192.168.7.155", // 设备IP(重要)*
        fbsdeviceipYm: "255.255.255.0", // 设备子网掩码(重要)*
        fbsdeviceipWg: "192.168.7.1", // 设备网关(重要)*
@@ -576,7 +405,7 @@
        stationName1: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -584,7 +413,7 @@
        stationName2: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -592,7 +421,7 @@
        stationName5: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -600,7 +429,7 @@
        stationName3: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -608,7 +437,7 @@
        stationName4: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -616,7 +445,7 @@
        fbsdeviceName: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -625,7 +454,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp);
              testVal(rule, value, callback, rules.FbsDeviceIp, vm);
            },
            trigger: "change",
          },
@@ -634,7 +463,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_YM);
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm);
            },
            trigger: "change",
          },
@@ -643,7 +472,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_WG);
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm);
            },
            trigger: "change",
          },
@@ -651,7 +480,7 @@
        groupIndexInFBSDevice: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -659,7 +488,7 @@
        tmpId: [
          {
            required: true,
            message: "请先录入电价分布模板",
            message: this.$t('electricityTemplateMsg'),
            trigger: "change",
          },
          { ...subRules },
@@ -667,7 +496,7 @@
        battGroupNum: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -675,7 +504,7 @@
        floatVolLevel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -683,7 +512,7 @@
        offlineVolLevel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -691,7 +520,7 @@
        battFloatCurrent: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -699,7 +528,7 @@
        monResStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -707,14 +536,14 @@
        monSerStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
        ],
        monVolLowToAvg: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -722,7 +551,7 @@
        disCurrMax: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -730,7 +559,7 @@
        battGroupName: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -738,7 +567,7 @@
        monVolStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -746,7 +575,7 @@
        monCapStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -754,7 +583,7 @@
        loadCurr: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -762,7 +591,7 @@
        battProducer: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -770,7 +599,7 @@
        battModel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -778,7 +607,7 @@
        battProductDate: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -786,7 +615,7 @@
        battInUseDate: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -794,7 +623,7 @@
        packCount: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -802,7 +631,7 @@
        monCount: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -853,21 +682,21 @@
      batteryTypes: batteryTypes,
      chargeTypes: [
        {
          label: "限流充电",
          label: "LimitCurrentCharge",
          value: 1,
        },
        {
          label: "逆变充电",
          label: "InverterCharge",
          value: 2,
        },
      ],
      buscouplestates: [
        {
          label: "无母联",
          label: "NoBuscoupler",
          value: 0,
        },
        {
          label: "有母联",
          label: "Buscoupler",
          value: 1,
        },
      ],
@@ -937,7 +766,7 @@
      // 查询后台
      getExistStations(searchParams).then((res) => {
        res = res.data;
        console.log(res, "res======99");
        // console.log(res, "res======99");
        var data = [];
        if (res.code) {
          data = res.data.map((v) => {
@@ -984,7 +813,7 @@
      this.linkage.cites = [];
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        var provinces = this.linkagePlus.getProvince();
        this.province.dialogVisible = true;
        this.province.value = provinces[0].name;
@@ -1021,7 +850,7 @@
      // 获取省
      var stationName1 = this.params.stationName1;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName2 = this.linkage.city;
        // 未选择省
@@ -1029,7 +858,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -1073,7 +902,7 @@
      // 获取市
      var stationName2 = this.params.stationName2;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName5 = this.linkage.county;
        // 未选择省
@@ -1081,7 +910,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -1091,7 +920,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
            message: this.$t('cityfirst'),
          });
          return;
        }
@@ -1136,7 +965,7 @@
      // 获取区
      var stationName5 = this.params.stationName5;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName3 = this.linkage.site;
        // 未选择省
@@ -1144,7 +973,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -1154,7 +983,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
            message: this.$t('cityfirst'),
          });
          return;
        }
@@ -1164,7 +993,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择区",
            message: this.$t('CountyFirst'),
          });
          return;
        }
@@ -1244,7 +1073,7 @@
          // 添加机房
          this.addHome(tmp);
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          this.$layer.msg(this.$t('form.validateMsg'));
          return false;
        }
      });
@@ -1257,16 +1086,10 @@
        .then((res) => {
          res = res.data;
          if (res.code) {
            this.$message({
              type: "success",
              message: "添加" + batt.stationName + "成功!",
            });
            this.$message.success(this.$t('operate.successMsg'));
            // 触发事件
          } else {
            this.$message({
              type: "error",
              message: "添加" + batt.stationName + "失败!",
            });
            this.$message.error(this.$t('operate.failMsg'));
          }
          this.$emit("success");
          // 关闭加载框
@@ -1274,10 +1097,7 @@
        })
        .catch((error) => {
          console.log(error);
          this.$message({
            type: "error",
            message: "修改" + batt.stationName + "失败!",
          });
          this.$message.error(this.$t('operate.failMsg'));
          // 触发事件
          this.$emit("success");
          // 关闭加载框
@@ -1354,10 +1174,10 @@
            let ipInfo = getDevIp(dev_id);
            if (ipInfo.code == 1) {
              this.$alert(
                "设备IP:" + ipInfo.data + ",已自动更新到设备IP",
                "系统提示",
                this.$t('DeviceIP') + ':' + ipInfo.data + ", " + this.$t('AutomaticupdatedtodeviceIP'),
                this.$t('Message'),
                {
                  confirmButtonText: "确定",
                  confirmButtonText: this.$t('operate.ok'),
                }
              );
              this.params.fbsdeviceIp = ipInfo.data;
@@ -1383,7 +1203,7 @@
    },
    isHasBuscouple() {
      let dev_id = this.params.fbsdeviceId;
      return regEquipType(dev_id,["BTS9120", "BTS9110"]);
      return regEquipType(dev_id, ["BTS9120", "BTS9110"]);
    },
    isLithium() {
      // 锂电BTS
@@ -1397,7 +1217,7 @@
    },
    monCountText() {
      let isLithiumPack = this.isLithiumPack;
      return isLithiumPack ? "锂电池包单体个数" : "单体个数";
      return isLithiumPack ? this.$t('LithiumBatteryPackCellQty') : this.$t('CellQty');
    },
  },
  mounted() {
@@ -1433,7 +1253,8 @@
.form-footer .three-btn {
  margin-left: 12px;
}
>>> ::-webkit-input-placeholder {
  color: #666 !important;
}
</style>
</style>
src/views/dataMager/components/ChangeIpParams.vue
@@ -8,44 +8,44 @@
      :rules="rules"
      class="params-dialog"
    >
      <el-form-item label="机房名称">
      <el-form-item :label="$t('EquipmentRoomName')">
        <el-input readonly v-model="otherParams.groupName"></el-input>
      </el-form-item>
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="有效性">
          <el-form-item :label="$t('Validity')">
            <el-select v-model="params.num">
              <el-option
                v-for="effectType in effectTypes"
                :key="effectType.value"
                :label="effectType.label"
                :label="$t(effectType.label)"
                :value="effectType.value"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备IP" prop="fbsdeviceIp">
            <el-input placeholder="设备IP" v-model="params.fbsdeviceIp">
          <el-form-item :label="$t('DeviceIP')" prop="fbsdeviceIp">
            <el-input :placeholder="$t('form.inputMsg')" v-model="params.fbsdeviceIp">
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="子网掩码" prop="fbsdeviceipYm">
            <el-input placeholder="子网掩码" v-model="params.fbsdeviceipYm">
          <el-form-item :label="$t('SubnetMask')" prop="fbsdeviceipYm">
            <el-input :placeholder="$t('form.inputMsg')" v-model="params.fbsdeviceipYm">
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="网关" prop="fbsdeviceipWg">
            <el-input placeholder="网关" v-model="params.fbsdeviceipWg">
          <el-form-item :label="$t('Gateway')" prop="fbsdeviceipWg">
            <el-input :placeholder="$t('form.inputMsg')" v-model="params.fbsdeviceipWg">
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <three-btn @click="submitFrom">确定</three-btn>
        <three-btn @click="close">取消</three-btn>
        <three-btn @click="submitFrom">{{ $t('operate.ok') }}</three-btn>
        <three-btn @click="close">{{ $t('operate.cancel') }}</three-btn>
      </div>
    </el-form>
  </div>
@@ -57,9 +57,13 @@
import {
  updateIp
} from '../js/battGroupMager';
import i18n from '../i18n/battGroupMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
import i18nConstIp from '@/assets/js/i18n/const_changeIp';
const i18nMixin = createI18nOption(i18n, [[i18nConstIp, 'rule']]);
export default {
  name: "ChangeIpParams",
  mixins: [i18nMixin],
  props: {
    batt: {
      type: Object,
@@ -70,6 +74,7 @@
  },
  data() {
    let rules = const_changeIp.rules;
    const vm = this;
    return {
      layout: {
        span: 12,
@@ -77,11 +82,11 @@
      },
      effectTypes: [
        {
          label: "永久有效",
          label: "PermanentValidity",
          value: 88,
        },
        {
          label: "临时有效",
          label: "TemporaryValidity",
          value: 90,
        },
      ],
@@ -96,7 +101,7 @@
        fbsdeviceIp: [
          {
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.ipReg);
              testVal(rule, value, callback, rules.ipReg, vm);
            },
            trigger: "change",
          },
@@ -104,7 +109,7 @@
        fbsdeviceipYm: [
          {
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.ipReg);
              testVal(rule, value, callback, rules.ipReg, vm);
            },
            trigger: "change",
          },
@@ -112,7 +117,7 @@
        fbsdeviceipWg: [
          {
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.ipReg);
              testVal(rule, value, callback, rules.ipReg, vm);
            },
            trigger: "change",
          },
@@ -135,33 +140,34 @@
          // 设置参数
          this.setParams();
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          this.$layer.msg(this.$t('form.validateMsg'));
          return false;
        }
      });
    },
    setParams() {
      this.$confirm("确认修改IP", {
        title: "系统提示",
      this.$confirm(this.$t('ConfirmtomodifyIP'), {
        title: this.$t('Message'),
        type: "warning",
      })
        .then(() => {
          let loading = this.$layer.loading();
          updateIp(this.params)
            .then((res) => {
              let rs = JSON.parse(res.data.result);
              let rs = res.data;
              if (rs.code == 1) {
                this.$layer.msg("修改成功");
                this.$message.success(this.$t('operate.successMsg'));
                // 触发事件
                this.$emit("success");
              } else {
                this.$layer.msg("修改失败");
                this.$message.error(this.$t('operate.failMsg'));
              }
              // 关闭等待框
              this.$layer.close(loading);
            })
            .catch((error) => {
              console.log(error);
              this.$message.error(this.$t('operate.failMsg'));
              // 关闭等待框
              this.$layer.close(loading);
            });
@@ -175,13 +181,13 @@
  computed: {
    otherParams() {
      let batt = this.batt;
      let groupInfo =
        "单体数量:" +
        this.batt.MonCount +
        ";电压(V):" +
        this.batt.MonVolStd +
        ";容量(AH):" +
        this.batt.MonCapStd;
      // let groupInfo =
      //   "单体数量:" +
      //   this.batt.MonCount +
      //   ";电压(V):" +
      //   this.batt.MonVolStd +
      //   ";容量(AH):" +
      //   this.batt.MonCapStd;
      return {
        groupName:
          batt.stationName1 +
@@ -196,8 +202,8 @@
          "-" +
          batt.battGroupName,
        fbsdeviceId: batt.fbsdeviceId,
        groupInfo: groupInfo,
        GroupIndexInFBSDevice: this.batt.groupIndexInFBSDevice + 1,
        // groupInfo: groupInfo,
        // GroupIndexInFBSDevice: this.batt.groupIndexInFBSDevice + 1,
      };
    },
  },
src/views/dataMager/components/EditBattGroup.vue
@@ -1,429 +1,272 @@
<template>
  <div class="params-container">
    <el-form
      ref="ruleForm"
      size="mini"
      label-position="top"
      :model="params"
      :rules="rules"
      class="params-dialog bg-white"
    >
    <el-form ref="ruleForm" size="mini" label-position="top" :model="params" :rules="rules"
      class="params-dialog bg-white">
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="省" prop="stationName1">
            <el-select
              v-model="params.stationName1"
              placeholder="请选择省"
              @change="provinceChange"
              :filterable="true"
              disabled
            >
              <el-option
                v-for="item in linkage.provinces"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('Province')" prop="stationName1">
            <el-select v-model="params.stationName1" :placeholder="$t('form.selectMsg')" @change="provinceChange"
              :filterable="true" disabled>
              <el-option v-for="item in linkage.provinces" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="市" prop="stationName2">
            <el-select
              v-model="params.stationName2"
              placeholder="请选择市"
              @change="cityChange"
              :filterable="true"
              disabled
            >
              <el-option
                v-for="item in linkage.cities"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('City')" prop="stationName2">
            <el-select v-model="params.stationName2" :placeholder="$t('form.selectMsg')" @change="cityChange"
              :filterable="true" disabled>
              <el-option v-for="item in linkage.cities" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="区/县" prop="stationName5">
            <el-select
              v-model="params.stationName5"
              placeholder="请选择区县"
              @change="countyChange"
              :filterable="true"
              disabled
            >
              <el-option
                v-for="item in linkage.counties"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('DistrictCounty')" prop="stationName5">
            <el-select v-model="params.stationName5" :placeholder="$t('form.selectMsg')" @change="countyChange"
              :filterable="true" disabled>
              <el-option v-for="item in linkage.counties" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="机房名称" prop="stationName3">
          <el-form-item :label="$t('EquipmentRoomName')" prop="stationName3">
            <el-input v-model="params.stationName3" disabled></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备ID" prop="fbsdeviceId">
          <el-form-item :label="$t('DeviceID')" prop="fbsdeviceId">
            <el-input v-model="params.fbsdeviceId"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备名称" prop="stationName4">
          <el-form-item :label="$t('DeviceName')" prop="stationName4">
            <el-input v-model="params.stationName4"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备IP" prop="fbsdeviceIp">
          <el-form-item :label="$t('DeviceIP')" prop="fbsdeviceIp">
            <el-input v-model="params.fbsdeviceIp"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="子网掩码" prop="fbsdeviceipYm">
          <el-form-item :label="$t('SubnetMask')" prop="fbsdeviceipYm">
            <el-input v-model="params.fbsdeviceipYm"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="网关" prop="fbsdeviceipWg">
          <el-form-item :label="$t('Gateway')" prop="fbsdeviceipWg">
            <el-input v-model="params.fbsdeviceipWg"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="协议名称" prop="fbsdeviceName">
          <el-form-item :label="$t('ProtocolName')" prop="fbsdeviceName">
            <el-input v-model="params.fbsdeviceName"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="FBS设备索引" prop="groupIndexInFBSDevice">
          <el-form-item :label="$t('FBSIndex')" prop="groupIndexInFBSDevice">
            <el-input v-model="params.groupIndexInFBSDevice"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池组类型" prop="battGroupNum">
            <el-select
              v-model="params.battGroupNum"
              placeholder="请选择电池类型"
            >
              <el-option
                v-for="item in batteryTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('BatteryGroupType')" prop="battGroupNum">
            <el-select v-model="params.battGroupNum" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in batteryTypes" :key="item.value" :label="item.label"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isInversion">
          <el-form-item label="充电类型">
            <el-select
              v-model="params.chargeType"
              placeholder="请选择充电类型"
              disabled
            >
              <el-option
                v-for="item in chargeTypes"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('ChargeType')">
            <el-select v-model="params.chargeType" :placeholder="$t('form.selectMsg')" disabled>
              <el-option v-for="item in chargeTypes" :key="item.value" :label="item.label"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isInversion">
          <el-form-item label="母联状态">
            <el-select
              v-model="params.buscoupleState"
              placeholder="请选择母联状态"
              disabled
            >
              <el-option
                v-for="item in buscoupleStates"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('BuscouplerStatus')">
            <el-select v-model="params.buscoupleState" :placeholder="$t('form.selectMsg')" disabled>
              <el-option v-for="item in buscoupleStates" :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="电池组名称" prop="battGroupName">
          <el-form-item :label="$t('BatteryGroupName')" prop="battGroupName">
            <el-input v-model="params.battGroupName"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="浮充电压阀值(V)" prop="floatVolLevel">
          <el-form-item :label="$t('FCVoltageThreshold')" prop="floatVolLevel">
            <el-input v-model="params.floatVolLevel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="离线电压阀值(V)" prop="offlineVolLevel">
          <el-form-item :label="$t('OfflineThreshold')" prop="offlineVolLevel">
            <el-input v-model="params.offlineVolLevel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="浮充电流阀值(A)" prop="battFloatCurrent">
          <el-form-item :label="$t('FCCurrentThreshold')" prop="battFloatCurrent">
            <el-input v-model="params.battFloatCurrent"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isLithiumPack">
          <el-form-item label="锂电池包个数" prop="packCount">
          <el-form-item :label="$t('LithiumBatteryPackQty')" prop="packCount">
            <el-input v-model="params.packCount"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="单体数量" prop="monCount">
            <!--                        <el-select v-model="params.monCount" placeholder="请选择单体数量">-->
            <!--                            <el-option label="4" value="4"></el-option>-->
            <!--                            <el-option label="24" value="24"></el-option>-->
            <!--                        </el-select>-->
          <el-form-item :label="$t('CellQty')" prop="monCount">
            <el-input v-model="params.monCount"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称容量(AH)" prop="monCapStd">
          <el-form-item :label="$t('RatedCapacity')" prop="monCapStd">
            <el-input v-model="params.monCapStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体电压(V)" prop="monVolStd">
          <el-form-item :label="$t('RatedCellV')" prop="monVolStd">
            <el-input v-model="params.monVolStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体内阻(mΩ)" prop="monResStd">
          <el-form-item :label="$t('RatedCellR')" prop="monResStd">
            <el-input v-model="params.monResStd"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="标称单体电导" prop="monSerStd">
          <el-form-item :label="$t('RatedCellC')" prop="monSerStd">
            <el-input v-model="params.monSerStd"></el-input>
          </el-form-item>
        </el-col>
        <!--                <el-col :span="layout.span">-->
        <!--                    <el-form-item label="单体电压次低偏移量(V)" prop="monVolLowToAvg">-->
        <!--                        <el-input v-model="params.monVolLowToAvg"></el-input>-->
        <!--                    </el-form-item>-->
        <!--                </el-col>-->
        <el-col :span="layout.span">
          <el-form-item label="负载电流(A)" prop="loadCurr">
          <el-form-item :label="$t('LoadCurrent')" prop="loadCurr">
            <el-input v-model="params.loadCurr"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="最大核容电流(A)" prop="disCurrMax">
          <el-form-item :label="$t('MaxDischargeCurrent')" prop="disCurrMax">
            <el-input v-model="params.disCurrMax"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池品牌" prop="battProducer">
            <el-select
              v-model="params.battProducer"
              placeholder="请选择"
              @change="battProducerChange"
              :filterable="true"
            >
              <el-option
                v-for="item in linkage.battProducers"
                :key="item"
                :label="item"
                :value="item"
              >
          <el-form-item :label="$t('BatteryBrand')" prop="battProducer">
            <el-select v-model="params.battProducer" :placeholder="$t('form.selectMsg')" @change="battProducerChange"
              :filterable="true">
              <el-option v-for="item in linkage.battProducers" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="-999"></el-option>
              <el-option :label="$t('Other')" value="-999"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池型号" prop="battModel">
          <el-form-item :label="$t('BatteryModel')" prop="battModel">
            <el-input v-model="params.battModel"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="电池生产日期" prop="battProductDate">
            <el-date-picker
              v-model="params.battProductDate"
              size="small"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          <el-form-item :label="$t('ManufactureDate')" prop="battProductDate">
            <el-date-picker v-model="params.battProductDate" size="small" type="date" :placeholder="$t('form.selectDate')"
              value-format="yyyy-MM-dd"></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="投入使用日期" prop="battInUseDate">
            <el-date-picker
              v-model="params.battInUseDate"
              size="small"
              type="date"
              placeholder="选择日期"
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          <el-form-item :label="$t('ServiceDate')" prop="battInUseDate">
            <el-date-picker v-model="params.battInUseDate" size="small" type="date" :placeholder="$t('form.selectDate')"
              value-format="yyyy-MM-dd"></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="视频监控序列号">
          <el-form-item :label="$t('MonitoringSerialNo')">
            <el-input v-model="params.videoUrl"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span" v-if="isLithium">
          <el-form-item label="电价分布模板" prop="tmpId">
            <el-select v-model="params.tmpId" placeholder="请选择电价分布模板">
              <el-option
                v-for="item in tmpList"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              ></el-option>
          <el-form-item :label="$t('ElectricityRateTemplate')" prop="tmpId">
            <el-select v-model="params.tmpId" :placeholder="$t('form.selectMsg')">
              <el-option v-for="item in tmpList" :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-form-item :label="$t('BaseStationNo')">
            <el-input v-model="params.stationPhone"></el-input>
          </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="autoComputeIp" v-if="isDcDcBts">{{ $t('AutomaticallycalculateIP') }}</three-btn>
        <three-btn @click="submitFrom">{{ $t('operate.ok') }}</three-btn>
      </div>
    </el-form>
    <!-- 省 -->
    <el-dialog
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择省"
      :visible.sync="province.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('Province')"
      :visible.sync="province.dialogVisible" width="280px" append-to-body>
      <el-form size="small">
        <el-form-item label="省">
          <el-select
            v-model="province.value"
            placeholder="请选择省"
            :filterable="true"
          >
            <el-option
              v-for="province in province.list"
              :key="province.name"
              :label="province.name"
              :value="province.name"
            ></el-option>
        <el-form-item :label="$t('Province')">
          <el-select v-model="province.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="province in province.list" :key="province.name" :label="province.name"
              :value="province.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="provinceOk"
          >确定</el-button
        >
        <el-button size="mini" @click="province.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="provinceOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 市 -->
    <el-dialog
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择市"
      :visible.sync="city.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('City')"
      :visible.sync="city.dialogVisible" width="280px" append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select
            v-model="city.value"
            placeholder="请选择市"
            :filterable="true"
          >
            <el-option
              v-for="city in city.list"
              :key="city.name"
              :label="city.name"
              :value="city.name"
            >
        <el-form-item :label="$t('City')">
          <el-select v-model="city.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="city in city.list" :key="city.name" :label="city.name" :value="city.name">
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="cityOk">确定</el-button>
        <el-button size="mini" @click="city.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="cityOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 区县 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请选择区县"
      :visible.sync="county.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog top="0" class="dialog-center" :title="$t('form.selectMsg') + ' ' + $t('DistrictCounty')"
      :visible.sync="county.dialogVisible" width="280px" append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select
            v-model="county.value"
            placeholder="请选择市"
            :filterable="true"
          >
            <el-option
              v-for="county in county.list"
              :key="county.name"
              :label="county.name"
              :value="county.name"
            ></el-option>
        <el-form-item :label="$t('DistrictCounty')">
          <el-select v-model="county.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="county in county.list" :key="county.name" :label="county.name"
              :value="county.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="countyOk">确定</el-button>
        <el-button size="mini" @click="county.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="countyOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 电池品牌 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请输入电池品牌"
      :visible.sync="battProducer.dialogVisible"
      width="280px"
      append-to-body
    >
    <el-dialog top="0" class="dialog-center" :title="$t('form.inputMsg') + ' ' + $t('BatteryBrand')"
      :visible.sync="battProducer.dialogVisible" width="280px" append-to-body>
      <el-form size="small">
        <el-form-item label="电池品牌">
        <el-form-item :label="$t('BatteryBrand')">
          <el-input v-model="battProducer.value"></el-input>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="battProducerOk"
          >确定</el-button
        >
        <el-button size="mini" @click="battProducer.dialogVisible = false"
          >取消</el-button
        >
        <el-button type="primary" size="mini" @click="battProducerOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="battProducer.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
  </div>
@@ -443,8 +286,14 @@
import { searchBattProducer, edit } from "../js/battGroupMager";
import const_rules from "@/assets/js/const/const_rules";
import getDevIp from "@/assets/js/tools/getDevIp";
import i18n from '../i18n/battGroupMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
import battTypes from '@/assets/js/i18n/const_battery_type';
import i18nConstRules from '@/assets/js/i18n/const_rules';
import i18nConstBatt from '@/assets/js/i18n/const_battGroup';
const i18nMixin = createI18nOption(i18n, [[battTypes, 'battTypes'], [i18nConstRules, 'constRule'], [i18nConstBatt, 'rule']]);
export default {
  mixins: [i18nMixin],
  props: {
    batt: {
      type: Object,
@@ -455,9 +304,10 @@
    let rules = const_battGroup.rules;
    let constRules = const_rules;
    let batteryTypes = const_battery_type.types;
    const vm = this;
    const subRules = {
      validator(rule, value, callback) {
        testVal(rule, value, callback, constRules.noSpecialChar);
        testVal(rule, value, callback, constRules.noSpecialChar, vm, 'constRule');
      },
      trigger: "change",
    };
@@ -527,7 +377,7 @@
        stationName1: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -535,7 +385,7 @@
        stationName2: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -543,7 +393,7 @@
        stationName5: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -551,7 +401,7 @@
        stationName3: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -559,7 +409,7 @@
        stationName4: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -567,14 +417,14 @@
        fbsdeviceId: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
        ],
        fbsdeviceName: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -583,7 +433,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp);
              testVal(rule, value, callback, rules.FbsDeviceIp, vm);
            },
            trigger: "change",
          },
@@ -593,7 +443,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_YM);
              testVal(rule, value, callback, rules.FbsDeviceIp_YM, vm);
            },
            trigger: "change",
          },
@@ -602,7 +452,7 @@
          {
            required: true,
            validator(rule, value, callback) {
              testVal(rule, value, callback, rules.FbsDeviceIp_WG);
              testVal(rule, value, callback, rules.FbsDeviceIp_WG, vm);
            },
            trigger: "change",
          },
@@ -610,14 +460,14 @@
        groupIndexInFBSDevice: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
        ],
        tmpId: [
          {
            required: true,
            message: "请先录入电价分布模板",
            message: this.$t('electricityTemplateMsg'),
            trigger: "change",
          },
          { ...subRules },
@@ -625,7 +475,7 @@
        battGroupNum: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -633,7 +483,7 @@
        floatVolLevel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -641,7 +491,7 @@
        offlineVolLevel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -649,7 +499,7 @@
        battFloatCurrent: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -657,14 +507,14 @@
        monResStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
        ],
        monSerStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -672,7 +522,7 @@
        monVolLowToAvg: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -680,7 +530,7 @@
        disCurrMax: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -688,7 +538,7 @@
        battGroupName: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -696,7 +546,7 @@
        monVolStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -704,7 +554,7 @@
        monCapStd: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -712,7 +562,7 @@
        loadCurr: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -720,14 +570,14 @@
        battProducer: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
        ],
        battModel: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -735,7 +585,7 @@
        battProductDate: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -743,7 +593,7 @@
        battInUseDate: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -751,7 +601,7 @@
        packCount: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -759,7 +609,7 @@
        monCount: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -802,21 +652,21 @@
      batteryTypes: batteryTypes,
      chargeTypes: [
        {
          label: "限流充电",
          label: "LimitCurrentCharge",
          value: 1,
        },
        {
          label: "逆变充电",
          label: "InverterCharge",
          value: 2,
        },
      ],
      buscoupleStates: [
      buscouplestates: [
        {
          label: "无母联",
          label: "NoBuscoupler",
          value: 0,
        },
        {
          label: "有母联",
          label: "Buscoupler",
          value: 1,
        },
      ],
@@ -902,7 +752,7 @@
          // 编辑机房
          this.editHome(tmp);
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          this.$layer.msg(this.$t('form.validateMsg'));
          return false;
        }
      });
@@ -915,27 +765,18 @@
        .then((res) => {
          res = res.data;
          if (res.code) {
            this.$message({
              type: "success",
              message: "修改" + batt.stationName + "成功!",
            });
            this.$message.success(this.$t('operate.successMsg'));
            // 触发事件
            this.$emit("success");
          } else {
            this.$message({
              type: "error",
              message: "修改" + batt.stationName + "失败!",
            });
            this.$message.error(this.$t('operate.failMsg'));
          }
          // 关闭加载框
          this.$layer.close(loading);
        })
        .catch((error) => {
          console.log(error);
          this.$message({
            type: "error",
            message: "修改" + batt.stationName + "失败!",
          });
          this.$message.error(this.$t('operate.failMsg'));
          // 触发事件
          this.$emit("success");
          // 关闭加载框
@@ -953,7 +794,7 @@
      this.linkage.county = "";
      this.linkage.counties = [];
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        var provinces = this.linkagePlus.getProvince();
        this.province.dialogVisible = true;
        this.province.value = provinces[0].name;
@@ -1006,7 +847,7 @@
      // 获取省
      var stationName1 = this.params.stationName1;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName2 = this.linkage.city;
        // 未选择省
@@ -1014,7 +855,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -1043,7 +884,7 @@
      // 获取市
      var stationName2 = this.params.StationName2;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName5 = this.linkage.county;
        // 未选择省
@@ -1051,7 +892,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -1061,7 +902,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
            message: this.$t('cityfirst'),
          });
          return;
        }
@@ -1126,23 +967,23 @@
    },
    searchTplAll() {
      searchTplAll().then((res) => {
          let rs = res.data;
          let data = [];
          if (rs.code == 1) {
            data = rs.data;
          }
        let rs = res.data;
        let data = [];
        if (rs.code == 1) {
          data = rs.data;
        }
          // 更新模板列表
          this.tmpList = data.map((item) => {
            item.key = item.tmpId;
            item.value = item.tmpId;
            item.label = item.tmpName;
            return item;
          });
        // 更新模板列表
        this.tmpList = data.map((item) => {
          item.key = item.tmpId;
          item.value = item.tmpId;
          item.label = item.tmpName;
          return item;
        });
          // 初始化模板id
          this.initTpl();
        })
        // 初始化模板id
        this.initTpl();
      })
        .catch((error) => {
          console.log(error);
        });
@@ -1164,9 +1005,11 @@
      let dev_id = this.params.fbsdeviceId;
      let ipInfo = getDevIp(dev_id);
      if (ipInfo.code == 1) {
        this.$alert("设备IP:" + ipInfo.data, "系统提示", {
          confirmButtonText: "确定",
        });
        this.$alert(this.$t('DeviceIP') + ':' + ipInfo.data + ", " + this.$t('AutomaticupdatedtodeviceIP'),
          this.$t('Message'),
          {
            confirmButtonText: this.$t('operate.ok'),
          });
      } else {
        this.$layer.msg(ipInfo.data);
      }
@@ -1194,7 +1037,7 @@
    },
    monCountText() {
      let isLithiumPack = this.isLithiumPack;
      return isLithiumPack ? "锂电池包单体个数" : "单体个数";
      return isLithiumPack ? this.$t('LithiumBatteryPackCellQty') : this.$t('CellQty');
    },
  },
  mounted() {
@@ -1230,4 +1073,4 @@
.form-footer .three-btn {
  margin-left: 12px;
}
</style>
</style>
src/views/dataMager/components/nodeManage.vue
@@ -5,16 +5,20 @@
      :data="data"
      filterable
      class="transfer-width480"
      :titles="['非节点站', '节点站']"
      :button-texts="['移除', '添加']"
      :titles="[$t('NonnodeStation'), $t('NodeStation')]"
      :button-texts="[$t('Remove'), $t('Add')]"
      @change="handleChange"></el-transfer>
  </div>
</template>
<script>
import {searchShuttleStation, updateShuttleStation} from "@/views/dataMager/js/station";
import i18n from '../i18n/totalStation';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: "nodeManage",
  mixins: [i18nMixin],
  data() {
    return {
      data: [],
@@ -65,9 +69,9 @@
      updateShuttleStation(list, true).then(res=>{
        let rs = res.data;
        if(rs.code == 1 && rs.data) {
          this.$message.success("添加节点站成功");
          this.$message.success(this.$t('operate.successMsg'));
        }else {
          this.$message.error("添加节点站失败");
          this.$message.error(this.$t('operate.failMsg'));
        }
        this.searchShuttleStation();
        this.change();
@@ -79,9 +83,9 @@
      updateShuttleStation(list, false).then(res=>{
        let rs = res.data;
        if(rs.code == 1 && rs.data) {
          this.$message.success("移除节点站成功");
          this.$message.success(this.$t('operate.successMsg'));
        }else {
          this.$message.error("移除节点站失败");
          this.$message.error(this.$t('operate.failMsg'));
        }
        this.searchShuttleStation();
        this.change();
src/views/dataMager/components/stationManage.vue
@@ -9,10 +9,10 @@
      class="params-dialog bg-white">
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="省" prop="stationName1">
          <el-form-item :label="$t('Province')" prop="stationName1">
            <el-select
              v-model="params.stationName1"
              placeholder="请选择省"
              :placeholder="$t('form.selectMsg')"
              @change="provinceChange"
              :filterable="true">
              <el-option
@@ -21,15 +21,15 @@
                :label="item"
                :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="市" prop="stationName2">
          <el-form-item :label="$t('City')" prop="stationName2">
            <el-select
              v-model="params.stationName2"
              placeholder="请选择市"
              :placeholder="$t('form.selectMsg')"
              @change="cityChange"
              :filterable="true">
              <el-option
@@ -38,15 +38,15 @@
                :label="item"
                :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="区/县/班组" prop="stationName5">
          <el-form-item :label="$t('DistrictCounty')" prop="stationName5">
            <el-select
              v-model="params.stationName5"
              placeholder="请选择区县"
              :placeholder="$t('form.selectMsg')"
              @change="countyChange"
              allow-create
              :filterable="true">
@@ -55,34 +55,34 @@
                :key="item"
                :label="item"
                :value="item"></el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="机房名称" prop="stationName3">
          <el-form-item :label="$t('EquipmentRoomName')" prop="stationName3">
            <el-input v-model="params.stationName3"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备名称" prop="stationName4">
          <el-form-item :label="$t('DeviceName')" prop="stationName4">
            <el-input v-model="params.stationName4"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="站点类型" prop="nodeStation">
          <el-form-item :label="$t('SiteType')" prop="nodeStation">
            <el-select
              v-model="params.nodeStation">
              <el-option
                v-for="(item, index) in nodeStations"
                :key="index"
                :label="item.label"
                :label="$t(item.label)"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="站点电压等级" prop="stationType">
          <el-form-item :label="$t('SiteVoltageLevel')" prop="stationType">
            <el-select v-model="params.stationType">
              <el-option
                v-for="item in volLevels" :key="item.value"
@@ -91,24 +91,24 @@
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="经度" prop="stationLongitude">
          <el-form-item :label="$t('Longitude')" prop="stationLongitude">
            <el-input v-model="params.stationLongitude"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="纬度" prop="stationLatitude">
          <el-form-item :label="$t('Latitude')" prop="stationLatitude">
            <el-input v-model="params.stationLatitude"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="16">
          <el-form-item label="机房详细地址" prop="stationAddr">
          <el-form-item :label="$t('Address')" prop="stationAddr">
            <el-input type="textarea" v-model="params.stationAddr" resize="none"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <el-button type="primary" size="mini" @click="submitFrom">确定</el-button>
        <el-button type="info" size="mini" @click="close">取消</el-button>
        <el-button type="primary" size="mini" @click="submitFrom">{{ $t('operate.ok') }}</el-button>
        <el-button type="info" size="mini" @click="close">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-form>
    <!-- 省 -->
@@ -116,15 +116,15 @@
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择省"
      :title="$t('form.selectMsg')"
      :visible.sync="province.dialogVisible"
      width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="省">
        <el-form-item :label="$t('Province')">
          <el-select
            v-model="province.value"
            placeholder="请选择省"
            :placeholder="$t('form.selectMsg')"
            :filterable="true">
            <el-option
              v-for="province in province.list"
@@ -135,8 +135,8 @@
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="provinceOk">确定</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="provinceOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 市 -->
@@ -144,15 +144,15 @@
      v-cloak
      top="0"
      class="dialog-center"
      title="请选择市"
      :title="$t('form.selectMsg')"
      :visible.sync="city.dialogVisible"
      width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
        <el-form-item :label="$t('City')">
          <el-select
            v-model="city.value"
            placeholder="请选择市"
            :placeholder="$t('form.selectMsg')"
            :filterable="true">
            <el-option
              v-for="city in city.list"
@@ -164,23 +164,23 @@
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="cityOk">确定</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="cityOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 区县 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请选择区县"
      :title="$t('form.selectMsg')"
      :visible.sync="county.dialogVisible"
      width="280px"
      width="380px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
        <el-form-item :label="$t('DistrictCounty')">
          <el-select
            v-model="county.value"
            placeholder="请选择市"
            :placeholder="$t('form.selectMsg')"
            :filterable="true">
            <el-option
              v-for="county in county.list"
@@ -191,15 +191,15 @@
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="countyOk">确定</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="countyOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 机房 -->
    <el-dialog
      top="0"
      class="dialog-center"
      title="请输入机房"
      :title="$t('form.inputMsg')"
      :visible.sync="site.dialogVisible"
      width="280px"
      append-to-body>
@@ -207,12 +207,12 @@
        <el-form-item>
          <el-input
            v-model="site.value"
            placeholder="请输入机房名称"></el-input>
            :placeholder="$t('form.inputMsg')"></el-input>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="siteOk">确定</el-button>
        <el-button size="mini" @click="site.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="siteOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="site.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
  </div>
@@ -228,8 +228,13 @@
import const_rules from "@/assets/js/const/const_rules";
import {addStation, const_station, getVolLevels} from "@/views/dataMager/js/station";
import config from "@/assets/js/config";
import i18n from '../i18n/stationManage';
import { createI18nOption } from '@/assets/js/tools/i18n';
import i18nConstRules from '@/assets/js/i18n/const_rules';
const i18nMixin = createI18nOption(i18n, [[i18nConstRules, 'rule']]);
export default {
  name: "stationManage",
  mixins: [i18nMixin],
  props: {
    visible: {
      type: Boolean,
@@ -241,10 +246,11 @@
    let constRules = const_rules;
    let isForSx = (config.clientName.name === "sxty");
    let volLevels = getVolLevels(isForSx);
    let vm = this;
    const subRules = {
      validator(rule, value, callback) {
        testVal(rule, value, callback, constRules.noSpecialChar);
        testVal(rule, value, callback, constRules.noSpecialChar, vm);
      },
      trigger: "change",
    };
@@ -272,7 +278,7 @@
        stationName1: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -280,7 +286,7 @@
        stationName2: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -288,7 +294,7 @@
        stationName5: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -296,7 +302,7 @@
        stationName3: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -304,7 +310,7 @@
        stationName4: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -409,7 +415,7 @@
      // 查询后台
      getExistStations(searchParams).then((res) => {
        res = res.data;
        console.log(res, "res======99");
        // console.log(res, "res======99");
        let data = [];
        if (res.code) {
          data = res.data.map((v) => {
@@ -440,7 +446,7 @@
      this.linkage.cites = [];
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        let provinces = this.linkagePlus.getProvince();
        this.province.dialogVisible = true;
        this.province.value = provinces[0].name;
@@ -477,7 +483,7 @@
      // 获取省
      let stationName1 = this.params.stationName1;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName2 = this.linkage.city;
        // 未选择省
@@ -485,7 +491,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -529,7 +535,7 @@
      // 获取市
      let stationName2 = this.params.stationName2;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName5 = this.linkage.county;
        // 未选择省
@@ -537,7 +543,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -547,7 +553,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
            message: this.$t('cityfirst'),
          });
          return;
        }
@@ -583,52 +589,6 @@
      this.county.dialogVisible = false;
      // 查询站点
      this.searchSite();
    },
    siteChange(value) {
      // 获取省
      let stationName1 = this.params.stationName1;
      // 获取市
      let stationName2 = this.params.stationName2;
      // 获取区
      let stationName5 = this.params.stationName5;
      // 点击其他
      if (value == "其他") {
        // 恢复上一次选择的内容
        this.params.stationName3 = this.linkage.site;
        // 未选择省
        if (stationName1 == "") {
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
          });
          return;
        }
        // 未选择市
        if (stationName2 == "") {
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
          });
          return;
        }
        // 未选择区
        if (stationName5 == "") {
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择区",
          });
          return;
        }
        this.site.dialogVisible = true;
        this.linkage.site = this.site.value;
      } else {
        this.linkage.site = value;
      }
    },
    siteOk() {
      let value = this.site.value;
@@ -680,13 +640,13 @@
          // 添加站点
          this.addStation(tmp);
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          this.$layer.msg(this.$t('form.validateMsg'));
          return false;
        }
      });
    },
    addStation(tmp) {
      this.$confirm("确认添加当前机房", "系统提示", {
      this.$confirm(this.$t('addConfirm'), this.$t('Message'), {
        type: "warning"
      }).then(()=>{
        let loading = this.$layer.loading();
@@ -694,15 +654,15 @@
          this.$layer.close(loading);
          let rs = res.data;
          if(rs.code == 1) {
            this.$message.success("添加机房成功!");
            this.$message.success(this.$t('operate.successMsg'));
            this.$emit('success', true);
            this.close();
          }else {
            this.$message.warning("添加机房失败!");
            this.$message.error(this.$t('operate.failMsg'));
          }
        }).catch(error=>{
          this.$layer.close(loading);
          this.$message.error("添加机房失败, 请联系管理员");
          this.$message.error(this.$t('operate.failMsg'));
          console.log(error);
        });
      }).catch(()=>{});
@@ -731,4 +691,4 @@
  margin-bottom: 8px;
  text-align: right;
}
</style>
</style>
src/views/dataMager/components/updateStation.vue
@@ -9,19 +9,19 @@
      class="params-dialog bg-white">
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="站点类型" prop="nodeStation">
          <el-form-item :label="$t('SiteType')" prop="nodeStation">
            <el-select
              v-model="params.nodeStation">
              <el-option
                v-for="(item, index) in nodeStations"
                :key="index"
                :label="item.label"
                :label="$t(item.label)"
                :value="item.value"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="站点电压等级" prop="stationType">
          <el-form-item :label="$t('SiteVoltageLevel')" prop="stationType">
            <el-select v-model="params.stationType">
              <el-option
                v-for="item in volLevels" :key="item.value"
@@ -30,24 +30,24 @@
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="经度" prop="stationLongitude">
          <el-form-item :label="$t('Longitude')" prop="stationLongitude">
            <el-input v-model="params.stationLongitude"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="纬度" prop="stationLatitude">
          <el-form-item :label="$t('Latitude')" prop="stationLatitude">
            <el-input v-model="params.stationLatitude"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="24">
          <el-form-item label="机房详细地址" prop="stationAddr">
          <el-form-item :label="$t('Address')" prop="stationAddr">
            <el-input type="textarea" v-model="params.stationAddr" resize="none"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <el-button type="primary" size="mini" @click="submitFrom">确定</el-button>
        <el-button type="info" size="mini" @click="close">取消</el-button>
        <el-button type="primary" size="mini" @click="submitFrom">{{ $t('operate.ok') }}</el-button>
        <el-button type="info" size="mini" @click="close">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-form>
  </div>
@@ -56,9 +56,12 @@
<script>
import {const_station, updateStation, getVolLevels} from "@/views/dataMager/js/station";
import config from "@/assets/js/config";
import i18n from '../i18n/updateStation';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: "updateStation",
  mixins: [i18nMixin],
  props: {
    visible: {
      type: Boolean,
@@ -106,13 +109,13 @@
          if (valid) {
            this.updateStation(this.params);
          } else {
            this.$layer.msg("存在校验未通过的数据!");
            this.$layer.msg(this.$t('form.validateMsg'));
            return false;
          }
      });
    },
    updateStation(params) {
      this.$confirm("确认添加当前机房", "系统提示", {
      this.$confirm(this.$t('ModifyConfirm'), this.$t('Message'), {
        type: "warning"
      }).then(()=>{
        let loading = this.$layer.loading();
@@ -120,15 +123,15 @@
          this.$layer.close(loading);
          let rs = res.data;
          if(rs.code == 1) {
            this.$message.success("编辑机房成功!");
            this.$message.success(this.$t('operate.successMsg'));
            this.$emit('success', true);
            this.close();
          }else {
            this.$message.warning("编辑机房失败!");
            this.$message.error(this.$t('operate.failMsg'));
          }
        }).catch(error=>{
          this.$layer.close(loading);
          this.$message.error("编辑机房失败, 请联系管理员");
          this.$message.error(this.$t('operate.failMsg'));
          console.log(error);
        });
      }).catch(error=>{});
src/views/dataMager/components/updateStationName.vue
@@ -1,8 +1,8 @@
<template>
  <div class="params-container">
    <div class="row">
      <div class="label">选择机房</div>
      <el-select class="selector" size="mini" @change="selected" filterable v-model="stationId" placeholder="请选择要修改的机房">
      <div class="label">{{ $t('selectequipmentroom') }}</div>
      <el-select class="selector" size="mini" @change="selected" filterable v-model="stationId" :placeholder="$t('Pleaseselecttheequipmentroomtomodify')">
        <el-option v-for="(item, idx) in stationList" :key="'item_' + idx" :label="item.stationName"
          :value="item.stationId"></el-option>
      </el-select>
@@ -11,94 +11,94 @@
      class="params-dialog bg-white">
      <el-row :gutter="layout.gutter">
        <el-col :span="layout.span">
          <el-form-item label="省" prop="stationName1">
            <el-select v-model="params.stationName1" placeholder="请选择省" @change="provinceChange" :filterable="true">
          <el-form-item :label="$t('Province')" prop="stationName1">
            <el-select v-model="params.stationName1" :placeholder="$t('form.selectMsg')" @change="provinceChange" :filterable="true">
              <el-option v-for="item in linkage.provinces" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="市" prop="stationName2">
            <el-select v-model="params.stationName2" placeholder="请选择市" @change="cityChange" :filterable="true">
          <el-form-item :label="$t('City')" prop="stationName2">
            <el-select v-model="params.stationName2" :placeholder="$t('form.selectMsg')" @change="cityChange" :filterable="true">
              <el-option v-for="item in linkage.cities" :key="item" :label="item" :value="item">
              </el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="区/县/班组" prop="stationName5">
            <el-select v-model="params.stationName5" placeholder="请选择区县" @change="countyChange" allow-create
          <el-form-item :label="$t('DistrictCounty')" prop="stationName5">
            <el-select v-model="params.stationName5" :placeholder="$t('form.selectMsg')" @change="countyChange" allow-create
              :filterable="true">
              <el-option v-for="item in linkage.counties" :key="item" :label="item" :value="item"></el-option>
              <el-option label="其他" value="其他"></el-option>
              <el-option :label="$t('Other')" :value="$t('Other')"></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="机房名称" prop="stationName3">
          <el-form-item :label="$t('EquipmentRoomName')" prop="stationName3">
            <el-input v-model="params.stationName3"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="layout.span">
          <el-form-item label="设备名称" prop="stationName4">
          <el-form-item :label="$t('DeviceName')" prop="stationName4">
            <el-input v-model="params.stationName4"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <div class="form-footer">
        <el-button type="primary" size="mini" @click="submitFrom">确定</el-button>
        <el-button type="info" size="mini" @click="close">取消</el-button>
        <el-button type="primary" size="mini" @click="submitFrom">{{ $t('operate.ok') }}</el-button>
        <el-button type="info" size="mini" @click="close">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-form>
    <!-- 省 -->
    <el-dialog v-cloak top="0" class="dialog-center" title="请选择省" :visible.sync="province.dialogVisible" width="280px"
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg')" :visible.sync="province.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="省">
          <el-select v-model="province.value" placeholder="请选择省" :filterable="true">
          <el-select v-model="province.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="province in province.list" :key="province.name" :label="province.name"
              :value="province.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="provinceOk">确定</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="provinceOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="province.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 市 -->
    <el-dialog v-cloak top="0" class="dialog-center" title="请选择市" :visible.sync="city.dialogVisible" width="280px"
    <el-dialog v-cloak top="0" class="dialog-center" :title="$t('form.selectMsg')" :visible.sync="city.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select v-model="city.value" placeholder="请选择市" :filterable="true">
          <el-select v-model="city.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="city in city.list" :key="city.name" :label="city.name" :value="city.name">
            </el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="cityOk">确定</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="cityOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="city.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
    <!-- 区县 -->
    <el-dialog top="0" class="dialog-center" title="请选择区县" :visible.sync="county.dialogVisible" width="280px"
    <el-dialog top="0" class="dialog-center" :title="$t('form.selectMsg')" :visible.sync="county.dialogVisible" width="280px"
      append-to-body>
      <el-form size="small">
        <el-form-item label="市">
          <el-select v-model="county.value" placeholder="请选择市" :filterable="true">
          <el-select v-model="county.value" :placeholder="$t('form.selectMsg')" :filterable="true">
            <el-option v-for="county in county.list" :key="county.name" :label="county.name"
              :value="county.name"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div style="text-align: right">
        <el-button type="primary" size="mini" @click="countyOk">确定</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">取消</el-button>
        <el-button type="primary" size="mini" @click="countyOk">{{ $t('operate.ok') }}</el-button>
        <el-button size="mini" @click="county.dialogVisible = false">{{ $t('operate.cancel') }}</el-button>
      </div>
    </el-dialog>
  </div>
@@ -112,14 +112,19 @@
import {
  const_province_city_county
} from "@/assets/js/const";
import i18n from '../i18n/stationManage';
import { createI18nOption } from '@/assets/js/tools/i18n';
import i18nConstRules from '@/assets/js/i18n/const_rules';
const i18nMixin = createI18nOption(i18n, [[i18nConstRules, 'rule']]);
export default {
  name: "updateStationName",
  mixins: [i18nMixin],
  data() {
    let constRules = const_rules;
    let vm = this;
    const subRules = {
      validator(rule, value, callback) {
        testVal(rule, value, callback, constRules.noSpecialChar);
        testVal(rule, value, callback, constRules.noSpecialChar, vm);
      },
      trigger: "change",
    };
@@ -175,7 +180,7 @@
        stationName1: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -183,7 +188,7 @@
        stationName2: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -191,7 +196,7 @@
        stationName5: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -199,7 +204,7 @@
        stationName3: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -207,7 +212,7 @@
        stationName4: [
          {
            required: true,
            message: "不能为空",
            message: this.$t('cannotbeblank'),
            trigger: "change",
          },
          { ...subRules },
@@ -244,7 +249,7 @@
      this.linkage.cites = [];
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        let provinces = this.linkagePlus.getProvince();
        this.province.dialogVisible = true;
        this.province.value = provinces[0].name;
@@ -327,7 +332,7 @@
      // 获取市
      let stationName2 = this.params.stationName2;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName5 = this.linkage.county;
        // 未选择省
@@ -335,7 +340,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -345,7 +350,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择市",
            message: this.$t('cityfirst'),
          });
          return;
        }
@@ -386,7 +391,7 @@
      // 获取省
      let stationName1 = this.params.stationName1;
      // 点击其他
      if (value == "其他") {
      if (value == this.$t('Other')) {
        // 恢复上一次选择的内容
        this.params.stationName2 = this.linkage.city;
        // 未选择省
@@ -394,7 +399,7 @@
          // 提出告警
          this.$message({
            type: "warning",
            message: "请先选择省",
            message: this.$t('provincefirst'),
          });
          return;
        }
@@ -431,7 +436,7 @@
    },
    submitFrom() {
      if (!this.stationId) {
        this.$message.error('请选择要修改的机房');
        this.$message.error(this.$t('Pleaseselecttheequipmentroomtomodify'));
        return false;
      }
      this.$refs.ruleForm.validate((valid) => {
@@ -456,7 +461,7 @@
          };
          this.updateName(params);
        } else {
          this.$layer.msg("存在校验未通过的数据!");
          this.$layer.msg(this.$t('form.validateMsg'));
          return false;
        }
      });
@@ -467,14 +472,14 @@
        this.$layer.close(loading);
        let rs = res.data;
        if (rs.code == 1) {
          this.$message.success("编辑机房成功!");
          this.$message.success(this.$t('operate.successMsg'));
          this.close();
        } else {
          this.$message.warning("编辑机房失败!");
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        this.$layer.close(loading);
        this.$message.error("编辑机房失败, 请联系管理员");
        this.$message.error(this.$t('operate.failMsg'));
        console.log(error);
      });
    },
@@ -534,4 +539,4 @@
  margin-bottom: 8px;
  text-align: right;
}
</style>
</style>
src/views/dataMager/i18n/battGroupMager.js
New file
@@ -0,0 +1,164 @@
export default {
  messages: {
    CN: {
      selectequipmentroom: '选择机房',
      Pleaseselecttheequipmentroomtomodify: '请选择要修改的机房',
      Other: '其他',
      Province: '省',
      City: '市',
      DistrictCounty: '区县/班组',
      selectDistrictCounty: '请选择区县/班组',
      NodeStationManagement: '节点站管理',
      NodeStationManaegement: '节点/非节点站管理',
      StationEdit: '站点编辑',
      RoomNo: '机房编号',
      EquipmentRoomName: '机房名称',
      DeviceName: '设备名称',
      SiteType: '站点类型',
      SiteVoltageLevel: '站点电压等级',
      Longitude: '经度',
      Latitude: '纬度',
      Address: '机房详细地址',
      NodeStation: '节点站',
      NonnodeStation: '非节点站',
      addConfirm: '确认添加当前机房',
      Message: '提示',
      Remove: '移除',
      Add: '添加',
      cannotbeblank: '不能为空',
      provincefirst: '请先选择省',
      cityfirst: '请先选择市',
      AddBatteryGroup: '添加电池组',
      BatteryInfoEditselect: '电池信息编辑选择',
      BatteryInfoEdit: '电池信息编辑',
      RemoteIPModify: '远程IP修改',
      RatedCapacity: '标称容量(AH)',
      RatedCellV: '标称单体电压(V)',
      RatedCellR: '标称单体内阻(mΩ)',
      ManufactureDate: '电池生产日期',
      ServiceDate: '投入使用日期',
      BatteryBrand: '电池品牌',
      BatteryModel: '电池型号',
      LoadCurrent: '负载电流(A)',
      MaxDischargeCurrent: '最大核容电流(A)',
      DeviceID: '设备ID',
      DeviceIP: '设备IP',
      SubnetMask: '子网掩码',
      Gateway: '网关',
      ProtocolName: '协议名称',
      FBSIndex: 'FBS设备索引',
      BatteryGroupID: '电池组ID',
      BatteryGroupType: '电池组类型',
      BatteryGroupName: '电池组名称',
      FCVoltageThreshold: '浮充电压阀值(V)',
      OfflineThreshold: '离线电压阀值(V)',
      FCCurrentThreshold: '浮充电流阀值(A)',
      CellQty: '单体数量',
      RatedCellC: '标称单体电导',
      MonitoringSerialNo: '视频监控序列号',
      TemplateName: '模板名称',
      BaseStationNo: '基站号码',
      BatteryInfoManagementData: '电池信息管理数据',
      Confimetodelete: '确定删除',
      LithiumBatteryPackCellQty: '锂电池包单体个数',
      CellQty: '单体个数',
      AutomaticupdatedtodeviceIP: '已自动更新到设备IP',
      LimitCurrentCharge: '限流充电',
      InverterCharge: '逆变充电',
      NoBuscoupler: '无母联',
      Buscoupler: '有母联',
      CountyFirst: '请先选择区',
      electricityTemplateMsg: '请先录入电价分布模板',
      DeviceType: '设备类型',
      ChargeType: '充电类型',
      BuscouplerStatus: '母联状态',
      LithiumBatteryPackQty: '锂电池包个数',
      ElectricityRateTemplate: '电价分布模板',
      AutomaticallycalculateIP: '自动计算IP',
      Validity: '有效性',
      PermanentValidity: '永久有效',
      TemporaryValidity: '临时有效',
      ConfirmtomodifyIP: '确认修改IP',
    },
    US: {
      selectequipmentroom: 'select equipment room',
      Pleaseselecttheequipmentroomtomodify: 'Please select the equipment room to modify',
      Other: 'Other',
      Province: 'Province',
      City: 'City',
      DistrictCounty: 'District/County',
      selectDistrictCounty: 'Please Select District/County',
      NodeStationManagement: 'Node Station Management',
      NodeStationManaegement: 'Node/Non-node Station Manaegement',
      StationEdit: 'Station Edit',
      RoomNo: 'Room No.',
      EquipmentRoomName: 'Equipment Room Name',
      DeviceName: 'Device Name',
      SiteType: 'Site Type',
      SiteVoltageLevel: 'Site Voltage Level',
      Longitude: 'Longitude',
      Latitude: 'Latitude',
      Address: 'Detail Address',
      NodeStation: 'Node Station',
      NonnodeStation: 'Non-node Station',
      addConfirm: 'Confirm to add the current equipment room?',
      Message: 'Message',
      Remove: 'Remove',
      Add: 'Add',
      cannotbeblank: 'cannot be blank.',
      provincefirst: 'Please select the province first',
      cityfirst: 'Please select the city first',
      AddBatteryGroup: 'Add Battery Group',
      BatteryInfoEditselect: 'Battery Info Edit select',
      BatteryInfoEdit: 'Battery Info Edit',
      RemoteIPModify: 'Remote IP Modify',
      RatedCapacity: 'Rated Capacity (Ah)',
      RatedCellV: 'Rated Cell V(V)',
      RatedCellR: 'Rated Cell R(mΩ)',
      ManufactureDate: 'Manufacture Date',
      ServiceDate: 'Service Date',
      BatteryBrand: 'Battery Brand',
      BatteryModel: 'Battery Model',
      LoadCurrent: 'Load Current (A)',
      MaxDischargeCurrent: 'Max Discharge Current (A)',
      DeviceID: 'Device ID',
      DeviceIP: 'Device IP',
      SubnetMask: 'Subnet Mask',
      Gateway: 'Gateway',
      ProtocolName: 'Protocol Name',
      FBSIndex: 'FBS Index',
      BatteryGroupID: 'Battery Group ID',
      BatteryGroupType: 'Battery Group Type',
      BatteryGroupName: 'Battery Group Name',
      FCVoltageThreshold: 'FC Voltage Threshold (V)',
      OfflineThreshold: 'Off-line Threshold (V)',
      FCCurrentThreshold: 'FC Current Threshold (A)',
      CellQty: 'Cell Qty',
      RatedCellC: 'Rated Cell C',
      MonitoringSerialNo: 'Monitoring Serial No.',
      TemplateName: 'Template Name',
      BaseStationNo: 'Base Station No.',
      BatteryInfoManagementData: 'Battery Info Management Data',
      Confimetodelete: 'Confime to delete ',
      LithiumBatteryPackCellQty: 'Lithium Battery Pack Cell Qty',
      CellQty: 'Cell Qty',
      AutomaticupdatedtodeviceIP: 'Automatic updated to device IP.',
      LimitCurrentCharge: 'Limit Current Charge',
      InverterCharge: 'Inverter Charge',
      NoBuscoupler: 'No Bus-coupler',
      Buscoupler: 'Bus-coupler',
      CountyFirst: 'Please select the District/County first',
      electricityTemplateMsg: 'Please input the electricity rate distribution template.',
      DeviceType: 'Device Type',
      ChargeType: 'Charge Type',
      BuscouplerStatus: 'Bus-coupler Status',
      LithiumBatteryPackQty: 'Lithium Battery Pack Qty',
      ElectricityRateTemplate: 'Electricity Rate Template',
      AutomaticallycalculateIP: 'Automatically calculate IP',
      Validity: 'Validity',
      PermanentValidity: 'Permanent Validity',
      TemporaryValidity: 'Temporary Validity',
      ConfirmtomodifyIP: 'Confirm to modify IP.',
    }
  }
}
src/views/dataMager/i18n/stationManage.js
New file
@@ -0,0 +1,60 @@
export default {
  messages: {
    CN: {
      selectequipmentroom: '选择机房',
      Pleaseselecttheequipmentroomtomodify: '请选择要修改的机房',
      Other: '其他',
      Province: '省',
      City: '市',
      DistrictCounty: '区/县/班组',
      NodeStationManagement: '节点站管理',
      NodeStationManaegement: '节点/非节点站管理',
      StationEdit: '站点编辑',
      RoomNo: '机房编号',
      EquipmentRoomName: '机房名称',
      DeviceName: '设备名称',
      SiteType: '站点类型',
      SiteVoltageLevel: '站点电压等级',
      Longitude: '经度',
      Latitude: '纬度',
      Address: '机房详细地址',
      NodeStation: '节点站',
      NonnodeStation: '非节点站',
      addConfirm: '确认添加当前机房',
      Message: '提示',
      Remove: '移除',
      Add: '添加',
      cannotbeblank: '不能为空',
      provincefirst: '请先选择省',
      cityfirst: '请先选择市',
    },
    US: {
      selectequipmentroom: 'select equipment room',
      Pleaseselecttheequipmentroomtomodify: 'Please select the equipment room to modify',
      Other: 'Other',
      Province: 'Province',
      City: 'City',
      DistrictCounty: 'District/County',
      NodeStationManagement: 'Node Station Management',
      NodeStationManaegement: 'Node/Non-node Station Manaegement',
      StationEdit: 'Station Edit',
      RoomNo: 'Room No.',
      EquipmentRoomName: 'Equipment Room Name',
      DeviceName: 'Device Name',
      SiteType: 'Site Type',
      SiteVoltageLevel: 'Site Voltage Level',
      Longitude: 'Longitude',
      Latitude: 'Latitude',
      Address: 'Detail Address',
      NodeStation: 'Node Station',
      NonnodeStation: 'Non-node Station',
      addConfirm: 'Confirm to add the current equipment room?',
      Message: 'Message',
      Remove: 'Remove',
      Add: 'Add',
      cannotbeblank: 'cannot be blank.',
      provincefirst: 'Please select the province first',
      cityfirst: 'Please select the city first',
    }
  }
}
src/views/dataMager/i18n/totalStation.js
New file
@@ -0,0 +1,50 @@
export default {
  messages: {
    CN: {
      Province: '省',
      City: '市',
      DistrictCounty: '区/县/班组',
      ModifyEquipmentRoomName: '修改机房名',
      NodeStationManagement: '节点站管理',
      NewStation: '新建站点',
      NodeStationManaegement: '节点/非节点站管理',
      StationEdit: '站点编辑',
      RoomNo: '机房编号',
      EquipmentRoomName: '机房名称',
      SiteType: '站点类型',
      SiteVoltageLevel: '电压等级',
      Longitude: '经度',
      Latitude: '纬度',
      Address: '地址',
      NodeStation: '节点站',
      NonnodeStation: '非节点站',
      Confirmtodeletethecurrentequipmentroom: '确认删除当前机房',
      Message: '提示',
      Remove: '移除',
      Add: '添加',
    },
    US: {
      Province: 'Province',
      City: 'City',
      DistrictCounty: 'District/County',
      ModifyEquipmentRoomName: 'Modify Equipment Room Name',
      NodeStationManagement: 'Node Station Management',
      NewStation: 'New Station',
      NodeStationManaegement: 'Node/Non-node Station Manaegement',
      StationEdit: 'Station Edit',
      RoomNo: 'Room No.',
      EquipmentRoomName: 'Equipment Room Name',
      SiteType: 'Site Type',
      SiteVoltageLevel: 'Site Voltage Level',
      Longitude: 'Longitude',
      Latitude: 'Latitude',
      Address: 'Address',
      NodeStation: 'Node Station',
      NonnodeStation: 'Non-node Station',
      Confirmtodeletethecurrentequipmentroom: 'Confirm to delete the current equipment room?',
      Message: 'Message',
      Remove: 'Remove',
      Add: 'Add',
    }
  }
}
src/views/dataMager/i18n/updateStation.js
New file
@@ -0,0 +1,26 @@
export default {
  messages: {
    CN: {
      SiteType: '站点类型',
      SiteVoltageLevel: '站点电压等级',
      Longitude: '经度',
      Latitude: '纬度',
      Address: '地址',
      NodeStation: '节点站',
      NonnodeStation: '非节点站',
      Message: '提示',
      ModifyConfirm: '确认修改当前机房',
    },
    US: {
      SiteType: 'Site Type',
      SiteVoltageLevel: 'Site Voltage Level',
      Longitude: 'Longitude',
      Latitude: 'Latitude',
      Address: 'Detail Address',
      NodeStation: 'Node Station',
      NonnodeStation: 'Non-node Station',
      Message: 'Message',
      ModifyConfirm: 'Confirm to Modify the current equipment room?',
    }
  }
}
src/views/dataMager/js/station.js
@@ -187,11 +187,11 @@
export const const_station = [
  {
    label: "非节点",
    label: "NonnodeStation",
    value: 0
  },
  {
    label: "节点",
    label: "NodeStation",
    value: 1
  }
];
src/views/dataMager/totalStation.vue
@@ -2,52 +2,49 @@
  <flex-layout :loading="loading">
    <div class="table-layout filter-box-table" slot="header">
      <div class="table-row">
        <div class="table-cell text-right">省:</div>
        <div class="table-cell text-right">{{ $t('Province') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.province"
            @change="searchCity"
            size="small"
            placeholder="请选择省"
          >
            <el-option
              v-for="item in filters.data.province"
              v-for="(item, idx) in filters.data.province"
              :key="item.value"
              :label="item.label"
              :label="0 == idx ? $tc('form.allCount', item.label) : item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </div>
        <div class="table-cell text-right">市:</div>
        <div class="table-cell text-right">{{ $t('City') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.city"
            @change="searchCounty"
            size="small"
            placeholder="请选择市"
          >
            <el-option
              v-for="item in filters.data.city"
              v-for="(item, idx) in filters.data.city"
              :key="item.value"
              :label="item.label"
              :label="0 == idx ? $tc('form.allCount', item.label) : item.label"
              :value="item.value"
            >
            </el-option>
          </el-select>
        </div>
        <div class="table-cell text-right">区/县/班组:</div>
        <div class="table-cell text-right">{{ $t('DistrictCounty') }}:</div>
        <div class="table-cell">
          <el-select
            v-model="filters.values.county"
            @change="searchData"
            size="small"
            placeholder="请选择区/县/班组"
          >
            <el-option
              v-for="item in filters.data.county"
              v-for="(item, idx) in filters.data.county"
              :key="item.value"
              :label="item.label"
              :label="0 == idx ? $tc('form.allCount', item.label) : item.label"
              :value="item.value"
            >
            </el-option>
@@ -66,14 +63,14 @@
          v-for="header in headers"
          :key="header.prop"
          :prop="header.prop"
          :label="header.label"
          :label="$t(header.label)"
          :min-width="header.minWidth"
          align="center"
          :resizable="false"></el-table-column>
        <el-table-column fixed="right" label="操作" width="160" align="center">
        <el-table-column fixed="right" :label="$t('operate.operation')" width="160" align="center">
          <template slot-scope="scope">
            <el-button type="primary" size="mini" @click="updateStation(scope.row)">编辑</el-button>
            <el-button type="danger" size="mini" @click="delStation(scope.row)">删除</el-button>
            <el-button type="primary" size="mini" @click="updateStation(scope.row)">{{ $t('operate.edit') }}</el-button>
            <el-button type="danger" size="mini" @click="delStation(scope.row)">{{ $t('operate.delete') }}</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -85,7 +82,7 @@
          @click="searchData"
          round
          size="mini"
          icon="el-icon-search">查询</el-button>
          icon="el-icon-search">{{ $t('operate.search') }}</el-button>
      </div>
      <el-pagination
        size="mini"
@@ -101,22 +98,22 @@
          type="primary"
          @click="editVisible = true"
          round
          size="mini">修改机房名</el-button>
          size="mini">{{ $t('ModifyEquipmentRoomName') }}</el-button>
        <el-button
          type="primary"
          @click="nodeManage"
          round
          size="mini">节点站管理</el-button>
          size="mini">{{ $t('NodeStationManagement') }}</el-button>
        <el-button
          type="primary"
          @click="addStation"
          round
          size="mini">新建站点</el-button>
          size="mini">{{ $t('NewStation') }}</el-button>
      </div>
    </div>
    <!-- 节点/非节点站管理 -->
    <el-dialog
      title="节点/非节点站管理"
      :title="$t('NodeStationManaegement')"
      width="auto"
      :visible.sync="nodeManageDialog"
      :close-on-click-modal="false"
@@ -127,7 +124,7 @@
    </el-dialog>
    <!-- 新增站点 -->
    <el-dialog
      title="新增站点"
      :title="$t('NewStation')"
      width="auto"
      :visible.sync="stationManageDialog"
      :close-on-click-modal="false"
@@ -138,7 +135,7 @@
    </el-dialog>
    <!-- 编辑站点 -->
    <el-dialog
      :title="info.stationName+'-站点编辑'"
      :title="info.stationName+'-' + $t('StationEdit')"
      width="auto"
      :visible.sync="updateStationDialog"
      :close-on-click-modal="false"
@@ -149,7 +146,7 @@
    </el-dialog>
    <!-- 修改机房名 -->
    <el-dialog
      title="修改机房名"
      :title="$t('ModifyEquipmentRoomName')"
      width="auto"
      :visible.sync="editVisible"
      :close-on-click-modal="false"
@@ -168,9 +165,12 @@
import StationManage from "@/views/dataMager/components/stationManage.vue";
import UpdateStation from "@/views/dataMager/components/updateStation.vue";
import UpdateStationName from "@/views/dataMager/components/updateStationName";
import i18n from './i18n/totalStation';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: "totalStation",
  mixins: [i18nMixin],
  components: {
    UpdateStation,
    StationManage,
@@ -200,37 +200,37 @@
      headers: [
        {
          prop: 'stationId',
          label: '机房编号',
          label: 'RoomNo',
          minWidth: 150
        },
        {
          prop: "stationName",
          label: "机房名称",
          label: "EquipmentRoomName",
          minWidth: 480,
        },
        {
          prop: 'nodeStationText',
          label: '站点类型',
          label: 'SiteType',
          minWidth: 150
        },
        {
          prop: 'stationType',
          label: '电压等级',
          label: 'SiteVoltageLevel',
          minWidth: 150
        },
        {
          prop: "stationLongitude",
          label: "经度",
          label: "Longitude",
          minWidth: 180,
        },
        {
          prop: "stationLatitude",
          label: "纬度",
          label: "Latitude",
          minWidth: 180,
        },
        {
          prop: "stationAddr",
          label: "地址",
          label: "Address",
          minWidth: 360,
        },
      ],
@@ -270,7 +270,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置省
@@ -302,7 +302,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置市
@@ -333,7 +333,7 @@
        let len = data.length;
        // 设置第一笔数据
        data.unshift({
          label: "全部(共" + len + "种)",
          label: len,
          value: "",
        });
        // 设置区县
@@ -368,7 +368,7 @@
        if(rs.code == 1 && rs.data) {
          let data2 = rs.data2;
          data = data2.list.map(item=>{
            item.nodeStationText = item.nodeStation?"节点站":"非节点站";
            item.nodeStationText = item.nodeStation? this.$t('NodeStation') : this.$t('NonnodeStation');
            return item;
          });
          this.page.pageAll = data2.total;
@@ -391,7 +391,7 @@
      this.updateStationDialog = true;
    },
    delStation(row) {
      this.$confirm("确认删除当前机房", "系统提示", {
      this.$confirm(this.$t('Confirmtodeletethecurrentequipmentroom'), this.$t('Message'), {
        type: "error"
      }).then(()=>{
        let loading = this.$layer.loading();
@@ -399,14 +399,14 @@
          this.$layer.close(loading);
          let rs = res.data;
          if(rs.code == 1) {
            this.$message.success("删除机房成功!");
            this.$message.success(this.$t('operate.successMsg'));
          }else {
            this.$message.warning("删除机房失败!");
            this.$message.error(this.$t('operate.failMsg'));
          }
          this.searchData();
        }).catch(error=>{
          this.$layer.close(loading);
          this.$message.error("删除机房失败, 请联系管理员");
          this.$message.error(this.$t('operate.failMsg'));
          console.log(error);
        });
      }).catch(()=>{});
@@ -419,5 +419,7 @@
</script>
<style scoped>
/deep/ .el-transfer .el-transfer__buttons {
  width: 5.2rem;
}
</style>
src/views/userMager/BaojiGroupList.vue
@@ -1,39 +1,35 @@
<template>
    <div class="baoji-group-list">
        <ul>
            <li v-if="list.length == 0">
                <div class="no-data-text">暂无数据</div>
            </li>
            <li class="baoji-group-li" v-for="item in list" :key="item.key">
                <a href="javascript:;"
                :class="{'active-item': item.key == activeKey}"
                @click="handleClick(item)">{{item.txt}}</a>
              <div class="baoji-group-tools" v-if="showGroupBtn">
                <el-button @click="changeGroup(item)" :type="item.dischargePlanFlag?'danger':'primary'" size="mini">{{ item.dischargePlanFlag?'取消班组':'设置班组' }}</el-button>
              </div>
            </li>
        </ul>
      <!-- 冲突机房显示 -->
      <el-dialog
        title="冲突机房显示"
        width="auto"
        :visible.sync="clashStationDialog"
        :close-on-click-modal="false"
        top="0"
        class="dialog-center"
        :modal-append-to-body="false">
        <clash-station :data="tableData"></clash-station>
      </el-dialog>
    </div>
  <div class="baoji-group-list">
    <ul>
      <li v-if="list.length == 0">
        <div class="no-data-text">{{ $t('NoData') }}</div>
      </li>
      <li class="baoji-group-li" v-for="item in list" :key="item.key">
        <a href="javascript:;" :class="{ 'active-item': item.key == activeKey }" @click="handleClick(item)">{{ item.txt }}</a>
        <!-- <div class="baoji-group-tools" v-if="showGroupBtn">
          <el-button @click="changeGroup(item)" :type="item.dischargePlanFlag ? 'danger' : 'primary'" size="mini">{{
            item.dischargePlanFlag ? '取消班组' : '设置班组' }}</el-button>
        </div> -->
      </li>
    </ul>
    <!-- 冲突机房显示 -->
    <el-dialog title="冲突机房显示" width="auto" :visible.sync="clashStationDialog" :close-on-click-modal="false" top="0"
      class="dialog-center" :modal-append-to-body="false">
      <clash-station :data="tableData"></clash-station>
    </el-dialog>
  </div>
</template>
<script>
import {dischargeFlag} from "@/views/userMager/apis/apis";
import { dischargeFlag } from "@/views/userMager/apis/apis";
import ClashStation from "@/views/userMager/components/clashStation.vue";
import i18n from './i18n/BaojiGroupList';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name: 'BaojiGroupList',
  components: {ClashStation},
  mixins: [i18nMixin],
  components: { ClashStation },
  props: {
    list: {
      type: Array,
@@ -55,7 +51,7 @@
  },
  methods: {
    handleClick(item) {
      if(this.activeKey != item.key) {
      if (this.activeKey != item.key) {
        this.activeKey = item.key;
        this.$emit('handle-click', item)
      }
@@ -63,7 +59,7 @@
    changeGroup(data) {
      let msg = "";
      const h = this.$createElement;
      if(data.dischargePlanFlag) {
      if (data.dischargePlanFlag) {
        msg = h('p', null, [
          h('span', null, '确认把'),
          h('span', { style: 'color: teal;font-size:18px' }, data.txt),
@@ -72,42 +68,42 @@
          h('span', null, "吗?"),
          h('p', null, "这可能导致生成放电计划的时候跳过该包机组!")
        ]);
      }else {
      } else {
        msg = h('p', null, [
          h('span', null, '确认把'),
          h('span', { style: 'color: teal;font-size:18px'}, data.txt),
          h('span', { style: 'color: teal;font-size:18px' }, data.txt),
          h('span', null, '设置为班组吗'),
        ]);
      }
      this.$confirm(msg,"系统提示", {
      this.$confirm(msg, "系统提示", {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(()=>{
      }).then(() => {
        this.handleChangeGroup(data);
      }).catch(()=>{});
      }).catch(() => { });
    },
    handleChangeGroup(data) {
      let flag = data.dischargePlanFlag?0:1;
      let flag = data.dischargePlanFlag ? 0 : 1;
      let baoJiGroupld = data.baoJiGroupId;
      dischargeFlag(baoJiGroupld, flag).then(res=>{
      dischargeFlag(baoJiGroupld, flag).then(res => {
        let rs = res.data;
        if(rs.code == 1 && rs.data) {
          let msg = data.dischargePlanFlag?"移除成功":"设置成功";
        if (rs.code == 1 && rs.data) {
          let msg = data.dischargePlanFlag ? "移除成功" : "设置成功";
          this.$message.success(msg);
          this.$emit('success', true);
        }else {
        } else {
          this.$alert("当前包机组与其他班组管理的机房存在冲突!", "系统提示", {
            callback: action=>{
              this.tableData = rs.data2.map(item=>{
                item.stationName = item.stationName1+"-"+item.stationName2+"-"+item.stationName5+"-"+item.stationName3;
            callback: action => {
              this.tableData = rs.data2.map(item => {
                item.stationName = item.stationName1 + "-" + item.stationName2 + "-" + item.stationName5 + "-" + item.stationName3;
                return item;
              });
              this.clashStationDialog = true;
            }
          });
        }
      }).catch(error=>{
      }).catch(error => {
        console.log(error);
      });
    }
@@ -116,28 +112,33 @@
</script>
<style scoped>
.baoji-group-list a{
    display: block;
    padding: 6px 8px;
    text-indent: 10px;
    text-decoration: none;
    color: #FFFFFF;
    font-size: 14px;
.baoji-group-list a {
  display: block;
  padding: 6px 8px;
  text-indent: 10px;
  text-decoration: none;
  color: #FFFFFF;
  font-size: 14px;
}
.baoji-group-list a:hover {
    background-color: #0b2184;
  background-color: #0b2184;
}
.baoji-group-list a.active-item {
    background-color: #00fefe;
    color: #021a64;
  background-color: #00fefe;
  color: #021a64;
}
.no-data-text {
    padding-top: 18px;
    text-align: center;
  padding-top: 18px;
  text-align: center;
}
.baoji-group-li {
  position: relative;
}
.baoji-group-tools {
  position: absolute;
  top: 0;
src/views/userMager/baojiMager.vue
@@ -1,753 +1,672 @@
<template>
    <flex-layout direction="row" no-bg>
        <my-card slot="header" title="包机组列表" class="w300">
            <div slot="card-tools">
                <el-button class="card-tools" size="mini" type="primary"
                :disabled="!isCanEdit"
                icon="el-icon-plus" circle @click="showAddDialog"></el-button>
                <el-button class="card-tools" size="mini" type="primary"
                :disabled="getToolsState || !isCanEdit"
                icon="el-icon-edit" circle @click="showEditDialog"></el-button>
                <el-button class="card-tools" size="mini" type="danger"
                :disabled="getToolsState || !isCanEdit"
                icon="el-icon-delete" circle @click="confirmDelBaojiGroup"></el-button>
  <flex-layout direction="row" no-bg>
    <my-card slot="header" :title="$t('WorkTeamList')" class="w300">
      <div slot="card-tools">
        <el-button class="card-tools" size="mini" type="primary" :disabled="!isCanEdit" icon="el-icon-plus" circle
          @click="showAddDialog"></el-button>
        <el-button class="card-tools" size="mini" type="primary" :disabled="getToolsState || !isCanEdit"
          icon="el-icon-edit" circle @click="showEditDialog"></el-button>
        <el-button class="card-tools" size="mini" type="danger" :disabled="getToolsState || !isCanEdit"
          icon="el-icon-delete" circle @click="confirmDelBaojiGroup"></el-button>
      </div>
      <baoji-group-list ref="groupList" :list="baojigrouplist" :show-group-btn="true" @handle-click="groupListClick"
        @success="searchBaojiGroupList"></baoji-group-list>
    </my-card>
    <div class="flex-page-content">
      <el-tabs v-model="activeName" type="border-card" class="flex-layout ">
        <el-tab-pane :label="$t('WorkTeamUser')" name="baoji-group-user">
          <span slot="label"><i class="el-icon-user-solid"></i> {{ $t('WorkTeamUser') }}</span>
          <el-transfer v-model="user.value" :titles="[$t('Nouseradded'), $t('Addeduser')]"
            :button-texts="[$t('Remove'), $t('Add')]" :data="user.data" :filterable="true" @change="userChange"
            class="transfer-width320">
          </el-transfer>
        </el-tab-pane>
        <el-tab-pane :label="$t('EquipmentRoom')" name="baoji-home">
          <span slot="label"><i class="el-icon-s-home"></i> {{ $t('EquipmentRoom') }}</span>
          <el-transfer v-model="baoji.value" :titles="[$t('Noequipmentroomadded'), $t('Addedequipmentroom')]"
            :button-texts="[$t('Remove'), $t('Add')]" :data="baoji.data" :filterable="true" @change="baojiChange"
            class="transfer-width480">
          </el-transfer>
        </el-tab-pane>
      </el-tabs>
    </div>
    <!-- 添加包机组 -->
    <el-dialog :title="$t('AddWorkTeam')" width="400px" :visible.sync="addBaojiGroup.show" :close-on-click-modal="false"
      top="0" class="dialog-center" :modal-append-to-body="false">
      <div class="params-container">
        <el-form size="mini" label-position="top" class="params-dialog">
          <div class="table-layout">
            <div class="table-row">
              <div class="table-cell">
                <el-form-item :label="$t('WorkTeamName')">
                  <el-input v-model="addBaojiGroup.value"></el-input>
                </el-form-item>
              </div>
            </div>
            <baoji-group-list
            ref="groupList"
            :list="baojigrouplist"
            :show-group-btn="true"
            @handle-click="groupListClick" @success="searchBaojiGroupList"></baoji-group-list>
        </my-card>
        <div class="flex-page-content">
            <el-tabs v-model="activeName" type="border-card" class="flex-layout ">
                <el-tab-pane label="包机组用户" name="baoji-group-user">
                    <span slot="label"><i class="el-icon-user-solid"></i> 包机组用户</span>
                    <el-transfer
                    v-model="user.value"
                    :titles="['未添加用户', '已添加用户']"
                    :button-texts="['移除', '添加']"
                    :data="user.data"
                    :filterable="true"
                    @change="userChange"
                    class="transfer-width320">
                    </el-transfer>
                </el-tab-pane>
                <el-tab-pane label="包机机房" name="baoji-home">
                    <span slot="label"><i class="el-icon-s-home"></i> 包机机房</span>
                    <el-transfer
                    v-model="baoji.value"
                    :titles="['未添加机房', '已添加机房']"
                    :button-texts="['移除', '添加']"
                    :data="baoji.data"
                    :filterable="true"
                    @change="baojiChange"
                    class="transfer-width480">
                    </el-transfer>
                </el-tab-pane>
            </el-tabs>
        </div>
        <!-- 添加包机组 -->
        <el-dialog
        title="添加包机组"
        width="400px"
        :visible.sync="addBaojiGroup.show"
        :close-on-click-modal="false"
        top="0"
        class="dialog-center"
        :modal-append-to-body="false">
            <div class="params-container">
                <el-form
                size="mini"
                label-position="top"
                class="params-dialog">
                    <div class="table-layout">
                        <div class="table-row">
                            <div class="table-cell">
                                <el-form-item label="包机组名称">
                                    <el-input v-model="addBaojiGroup.value"></el-input>
                                </el-form-item>
                            </div>
                        </div>
                    </div>
                    <div class="form-footer">
                        <three-btn @click="addBaojiGroupOk">确定</three-btn>
                    </div>
                </el-form>
          </div>
          <div class="form-footer">
            <three-btn @click="addBaojiGroupOk">{{ $t('operate.ok') }}</three-btn>
          </div>
        </el-form>
      </div>
    </el-dialog>
    <!-- 编辑包机组 -->
    <el-dialog :title="$t('EditWorkTeam')" width="400px" :visible.sync="editBaojiGroup.show" :close-on-click-modal="false"
      top="0" class="dialog-center" :modal-append-to-body="false">
      <div class="params-container">
        <el-form size="mini" label-position="top" class="params-dialog">
          <div class="table-layout">
            <div class="table-row">
              <div class="table-cell">
                <el-form-item Llabel="$t('WorkTeamName')">
                  <el-input v-model="editBaojiGroup.value"></el-input>
                </el-form-item>
              </div>
            </div>
        </el-dialog>
        <!-- 编辑包机组 -->
        <el-dialog
        title="编辑包机组"
        width="400px"
        :visible.sync="editBaojiGroup.show"
        :close-on-click-modal="false"
        top="0"
        class="dialog-center"
        :modal-append-to-body="false">
            <div class="params-container">
                <el-form
                size="mini"
                label-position="top"
                class="params-dialog">
                    <div class="table-layout">
                        <div class="table-row">
                            <div class="table-cell">
                                <el-form-item label="包机组名称">
                                    <el-input v-model="editBaojiGroup.value"></el-input>
                                </el-form-item>
                            </div>
                        </div>
                    </div>
                    <div class="form-footer">
                        <three-btn @click="editBaojiGroupOk">确定</three-btn>
                    </div>
                </el-form>
            </div>
        </el-dialog>
    </flex-layout>
          </div>
          <div class="form-footer">
            <three-btn @click="editBaojiGroupOk">{{ $t('operate.ok') }}</three-btn>
          </div>
        </el-form>
      </div>
    </el-dialog>
  </flex-layout>
</template>
<script>
import MyCard from './MyCard'
import BaojiGroupList from './BaojiGroupList'
import {isHasPermit, uniqueByKey} from "@/assets/js/tools";
import { baoJiGroupList,userList,stationList,addBaoJiGroup,editBaoJiGroup,deleteBaoJiGroup,moveUserList,moveStationList } from "./apis/apis"
import { isHasPermit, uniqueByKey } from "@/assets/js/tools";
import { baoJiGroupList, userList, stationList, addBaoJiGroup, editBaoJiGroup, deleteBaoJiGroup, moveUserList, moveStationList } from "./apis/apis"
import i18n from './i18n/baojiMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
    name:"baojiMager",
    components: {
        MyCard,
        BaojiGroupList
    },
    data() {
        let permits = this.$store.state.user.permits;
        let isCanEdit = isHasPermit('usr_edit_permit', permits);
        return {
            isCanEdit: true,//isCanEdit,
            activeName: 'baoji-group-user',
            user: {
                data: [],
                value: []
            },
            baoji: {
                data: [],
                value: [],
            },
            baojigrouplist: [],
            addBaojiGroup: {
                show: false,
                value: ''
            },
            editBaojiGroup: {
                show: false,
                value: ''
            },
            searchParams: {
                baoji_group_id: '',
                baoji_group_name: '',
            }
        }
    },
    methods: {
        // 初始化数据
        initData() {
            // 初始化用户列表
            this.user = {
                data: [],
                value: []
            };
            // 初始化包机组机房列表
            this.baoji = {
                data: [],
                value: [],
            };
            // 初始化查询条件
            this.searchParams = {
                baoji_group_id: '',
                baoji_group_name: '',
            };
            // 列表的激活状态修改
            this.$refs.groupList.activeKey = "";
        },
        // 查询包机组列表
        searchBaojiGroupList() {
            // 初始化数据
            this.initData();
            // 查询后台
            baoJiGroupList().then(res=>{
                let rs = res.data;
                let data = [];
                if(rs.code == 1) {
                    data = rs.data.map(item=>{
                        item.txt = item.baoJiGroupName;
                        item.key = item.baoJiGroupId;
                        return item;
                    });
                }
                // 设置包机组列表
                this.baojigrouplist = data;
            }).catch(error=>{
                console.log(error);
            });
        },
        groupListClick(item) {
            let self = this;
            // 设置查询的值
            self.searchParams.baoji_group_id = item.baoJiGroupId;
            self.searchParams.baoji_group_name = item.baoJiGroupName;
            self.editBaojiGroup.value = item.baoJiGroupName;
            // 用户
            self.getUserList();
            // 机房
            self.getStationList();
            // // 查询所有的用户
            // self.searchUserListAll();
            // // 根据包机组id查询包机组用户
            // this.searchUserList();
            // // 查询所有的机房
            // this.getStationList();
            // // 查询已经添加到包机组的机房
            // this.searchHome();
        },
        // 包机组已添加用户和未添加用户列表
        getUserList:function(){
            let self = this;
            let id = self.searchParams.baoji_group_id;
                userList({baoJiGroupId:id}).then(result=>{
                    let res = result.data;
                        if(res.code == 1){
                            let userData = [];
                            let addData = [];
                                res.data.usersAdded.forEach(item => {
                                    item.key = item.uid;
                                    item.label = item.uname;
                                    item.disabled = !self.isCanEdit;
                                    userData.push(item);
                                    addData.push(item.uid);
                                });
                                res.data.usersNotAdded.forEach(list => {
                                    list.key = list.uid;
                                    list.label = list.uname;
                                    list.disabled = !self.isCanEdit;
                                    userData.push(list);
                                });
                                self.user.data = userData;
                                self.user.value = addData;
                        }
                })
        },
        // 机房站点查询
        getStationList:function(){
            let self = this;
            let id = self.searchParams.baoji_group_id;
                stationList({baoJiGroupId:id}).then(result=>{
                    let res = result.data;
                        if(res.code == 1){
                            let notAdded = [];
                            let addData = [];
                                res.data.stationsAdded.forEach(item => {
                                    item.key = item.stationId;
                                    item.label = item.stationName;
                                    item.disabled = !self.isCanEdit;
                                    notAdded.push(item);
                                    addData.push(item.stationId);
                                });
                                res.data.stationsNotAdded.forEach(list => {
                                    list.key = list.stationId;
                                    list.label = list.stationName;
                                    list.disabled = !self.isCanEdit;
                                    notAdded.push(list);
                                });
                                self.baoji.data = uniqueByKey('stationId', notAdded);
                                self.baoji.value = addData;
                        }
                })
        },
        checkBaojiGroup(value) {
            var rs = {
                code: 1,
                message: '',
            };
            // 为空检测
            if(value == '') {
                rs.code = 0;
                rs.message = "包机组名称不能为空";
                return rs;
            }
            // 遍历包机组列表获取是否重名
            for(var i=0; i<this.baojigrouplist.length; i++) {
                var _data = this.baojigrouplist[i];
                if(value == _data.txt) {
                    rs.code = 0;
                    rs.message = value+"已存在";
                    break;
                }
            }
            return rs;
        },
        showAddDialog() {
            // 显示添加面板并初始化值
            this.addBaojiGroup.show = true;
            this.addBaojiGroup.value = "";
        },
        // 添加包机组
        addBaojiGroupOk() {
            // 包机组信息
            var value = this.addBaojiGroup.value;
            // 检测包机组用户的合法性
            var checkResult = this.checkBaojiGroup(value);
            if(checkResult.code == 0) {
                // 提示信息
                this.$message({
                    type: 'warning',
                    message: checkResult.message,
                });
                return;
            }
            // 请求后台
            addBaoJiGroup({groupName:value}).then(result=>{
                let rs = result.data;
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                    // 关闭弹出框
                    this.addBaojiGroup.show = false;
                    // 查询包机组
                    this.searchBaojiGroupList();
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
            }).catch(error=>{
                console.log(error);
            })
        },
        showEditDialog() {
            this.editBaojiGroup.value = this.searchParams.baoji_group_name;
            this.editBaojiGroup.show = true;
        },
        // 修改包机组
        editBaojiGroupOk() {
            // 包机组信息
            let self = this;
            let data = {
                    baoJiGroupId:self.searchParams.baoji_group_id,
                    baoJiGroupName:self.editBaojiGroup.value
                }
            // 检测包机组用户的合法性
            var checkResult = self.checkBaojiGroup(data.baoJiGroupName);
            if(checkResult.code == 0) {
                // 提示信息
                self.$message({
                    type: 'warning',
                    message: checkResult.message,
                });
                return;
            }
            // 请求后台
            editBaoJiGroup(data).then(result=>{
                let rs = result.data;
                if(rs.code == 1) {
                    // 提示信息
                    self.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                    // 关闭弹出框
                    self.editBaojiGroup.show = false;
                    // 查询包机组
                    self.searchBaojiGroupList();
                }else {
                    // 提示信息
                    self.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
            }).catch(error=>{
                console.log(error);
            })
        },
        confirmDelBaojiGroup() {
            let name = this.searchParams.baoji_group_name;
            this.$layer.confirm('确认删除'+name, {icon:3},index=>{
                // 关闭弹出框
                this.$layer.close(index);
                // 删除包机组
                this.delBaojiGroup();
            });
        },
        delBaojiGroup() {
            let id = this.searchParams.baoji_group_id;
            // 请求后台
            deleteBaoJiGroup({baoJiGroupId:id}).then(result=>{
                let rs = result.data;
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                    // 查询包机组
                    this.searchBaojiGroupList();
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
            }).catch(error=>{
                console.log(error);
            });
        },
        getUserListByuids(uids) {
            var userList = this.user.data;
            var searchParams = this.searchParams;
            var result = [];
            for(var i=0; i<uids.length; i++) {
                var uid = uids[i];
                for(var k=0; k<userList.length; k++) {
                    var user = userList[k];
                    if(user.uid == uid) {
                        result.push({
                            baoJiGroupId: searchParams.baoji_group_id,
                            // baoji_group_name: searchParams.baoji_group_name,
                            uId: user.uid,
                            // uname: user.uname,
                        });
                        break;
                    }
                }
            }
            return result;
        },
        searchUserListAll() {
            // 查询后台
            this.$apis.userMager.userInfo.searchAll().then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    data = rs.data.map(item=>{
                        item.key = item.uid;
                        item.label = item.uname;
                        item.disabled = !this.isCanEdit;
                        return item;
                    });
                }
                // 设置用户名
                this.user.data = data;
            }).catch(error=>{
                console.log(error);
            });
        },
        searchUserList() {
            let id = this.searchParams.baoji_group_id;
            this.$apis.userMager.userInfo.searchBaojiUser(id).then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    data = rs.data.map(item=>{
                        return item.uid;
                    });
                }
                // 设置用户名
                this.user.value = data;
            }).catch(error=>{
                console.log(error);
            });
        },
        userChange(list, type, values) {
            let data = this.getUserListByuids(values);
            let params = {
                    operationFlag:1
                }
            // 根据类型确定事件
            switch(type) {
                case 'left'://移除
                    params.operationFlag = -1;
                    this.changeUser(params,data);
                break;
                case 'right'://添加
                    params.operationFlag = 1;
                    this.changeUser(params,data);
                break;
            }
        },
        // 添加,移除用户到包机组
        changeUser:function(params,data){
            let self = this;
                moveUserList(params,data).then(result=>{
                    let rs = result.data;
                        if(rs.code == 1) {
                            // 提示信息
                            self.$message({
                                type: 'success',
                                message: rs.msg,
                            });
                            self.getUserList();
                        }else {
                            // 提示信息
                            self.$message({
                                type: 'error',
                                message: rs.msg,
                            });
                            self.getUserList();
                        }
                })
        },
        // 将用户添加进包机组
        addUser(list) {
            // 请求后台添加
            this.$apis.userMager.baojiGroup.addUser(list).then(res=>{
                let rs = JSON.parse(res.data.result);
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
                // 查询已经添加的用户
                this.searchUserList();
            }).catch(error=>{
                console.log(error);
            });
        },
        // 将用户从包机组移除
        removeUser(list) {
            // 请求后台移除
            this.$apis.userMager.baojiGroup.removeUser(list).then(res=>{
                let rs = JSON.parse(res.data.result);
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
                // 查询已经添加的用户
                this.searchUserList();
            }).catch(error=>{
                console.log(error);
            });
        },
        getUserListByKeys(keys) {
            var baojiList = this.baoji.data;
            var searchParams = this.searchParams;
            var result = [];
            for(var i=0; i<keys.length; i++) {
                var key = keys[i];
                for(var k=0; k<baojiList.length; k++) {
                    var baoji = baojiList[k];
                    if(baoji.key == key) {
                        result.push({
                            baojiGroupId: searchParams.baoji_group_id,
                            // baoji_group_name: searchParams.baoji_group_name,
                            stationId: baoji.key,
                            // note: baoji.label
                        });
                        break;
                    }
                }
            }
            return result;
        },
        searchAllHome() {
            // 查询后台
            this.$apis.homeMager.searchAllStations().then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    // 去重
                    let uniqueList = uniqueByKey('StationId', rs.data);
                    data = uniqueList.map(item=>{
                        item.key = item.StationId;
                        item.label = item.StationName;
                        item.disabled = !this.isCanEdit;
                        return item;
                    });
                }
                // 设置机房
                this.baoji.data = data;
            }).catch(error=>{
                console.log(error);
            })
        },
        searchHome() {
            let id = this.searchParams.baoji_group_id;
            // 查询后台
            this.$apis.homeMager.searchBaojiStation(id).then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    // 去重
                    let uniqueList = uniqueByKey('StationId', rs.data);
                    data = uniqueList.map(item=>{
                      return item.StationId;
                    });
                }
                // 设置已包机组已包机机房
                this.baoji.value = data;
            }).catch(error=>{
                console.log(error);
            });
        },
        // 包机组左右移动
        baojiChange(list, type, values) {
            var data = this.getUserListByKeys(values);
            let params = {
                    operationFlag:1
                }
            // 根据类型确定事件
            switch(type) {
                case 'left':
                    params.operationFlag = -1;
                    this.changeBaoji(params,data);
                break;
                case 'right':
                    params.operationFlag = 1;
                    this.changeBaoji(params,data);
                break;
            }
        },
        // 添加,移除机房
        changeBaoji:function(params,data){
            let self = this;
                moveStationList(params,data).then(result=>{
                    let rs = result.data;
                        if(rs.code == 1) {
                            // 提示信息
                            self.$message({
                                type: 'success',
                                message: rs.msg,
                            });
                            self.getStationList();
                        }else {
                            // 提示信息
                            self.$message({
                                type: 'error',
                                message: rs.msg,
                            });
                            self.getStationList();
                        }
                })
        },
        removeBaoji(list) {
            this.$apis.userMager.baojiGroup.removeHome(list).then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
                // 查询已经添加包机机房
                this.searchHome();
            }).catch(error=>{
                console.log(error);
            });
        },
        addBaoji(list) {
            this.$apis.userMager.baojiGroup.addHome(list).then(res=>{
                let rs = JSON.parse(res.data.result);
                let data = [];
                if(rs.code == 1) {
                    // 提示信息
                    this.$message({
                        type: 'success',
                        message: rs.msg,
                    });
                }else {
                    // 提示信息
                    this.$message({
                        type: 'error',
                        message: rs.msg,
                    });
                }
                // 查询已经添加包机机房
                this.searchHome();
            }).catch(error=>{
                console.log(error);
            });
        }
    },
    computed: {
        getToolsState() {    // 根据选中的状态确定包机组列表工具栏的状态
            return this.searchParams.baoji_group_id == ""?true:false;
        },
    },
    mounted() {
        // 查询包机组列表
        this.searchBaojiGroupList();
  name: "baojiMager",
  mixins: [i18nMixin],
  components: {
    MyCard,
    BaojiGroupList
  },
  data() {
    let permits = this.$store.state.user.permits;
    let isCanEdit = isHasPermit('usr_edit_permit', permits);
    return {
      isCanEdit: true,//isCanEdit,
      activeName: 'baoji-group-user',
      user: {
        data: [],
        value: []
      },
      baoji: {
        data: [],
        value: [],
      },
      baojigrouplist: [],
      addBaojiGroup: {
        show: false,
        value: ''
      },
      editBaojiGroup: {
        show: false,
        value: ''
      },
      searchParams: {
        baoji_group_id: '',
        baoji_group_name: '',
      }
    }
  },
  methods: {
    // 初始化数据
    initData() {
      // 初始化用户列表
      this.user = {
        data: [],
        value: []
      };
      // 初始化包机组机房列表
      this.baoji = {
        data: [],
        value: [],
      };
      // 初始化查询条件
      this.searchParams = {
        baoji_group_id: '',
        baoji_group_name: '',
      };
      // 列表的激活状态修改
      this.$refs.groupList.activeKey = "";
    },
    // 查询包机组列表
    searchBaojiGroupList() {
      // 初始化数据
      this.initData();
      // 查询后台
      baoJiGroupList().then(res => {
        let rs = res.data;
        let data = [];
        if (rs.code == 1) {
          data = rs.data.map(item => {
            item.txt = item.baoJiGroupName;
            item.key = item.baoJiGroupId;
            return item;
          });
        }
        // 设置包机组列表
        this.baojigrouplist = data;
      }).catch(error => {
        console.log(error);
      });
    },
    groupListClick(item) {
      let self = this;
      // 设置查询的值
      self.searchParams.baoji_group_id = item.baoJiGroupId;
      self.searchParams.baoji_group_name = item.baoJiGroupName;
      self.editBaojiGroup.value = item.baoJiGroupName;
      // 用户
      self.getUserList();
      // 机房
      self.getStationList();
      // // 查询所有的用户
      // self.searchUserListAll();
      // // 根据包机组id查询包机组用户
      // this.searchUserList();
      // // 查询所有的机房
      // this.getStationList();
      // // 查询已经添加到包机组的机房
      // this.searchHome();
    },
    // 包机组已添加用户和未添加用户列表
    getUserList: function () {
      let self = this;
      let id = self.searchParams.baoji_group_id;
      userList({ baoJiGroupId: id }).then(result => {
        let res = result.data;
        if (res.code == 1) {
          let userData = [];
          let addData = [];
          res.data.usersAdded.forEach(item => {
            item.key = item.uid;
            item.label = item.uname;
            item.disabled = !self.isCanEdit;
            userData.push(item);
            addData.push(item.uid);
          });
          res.data.usersNotAdded.forEach(list => {
            list.key = list.uid;
            list.label = list.uname;
            list.disabled = !self.isCanEdit;
            userData.push(list);
          });
          self.user.data = userData;
          self.user.value = addData;
        }
      })
    },
    // 机房站点查询
    getStationList: function () {
      let self = this;
      let id = self.searchParams.baoji_group_id;
      stationList({ baoJiGroupId: id }).then(result => {
        let res = result.data;
        if (res.code == 1) {
          let notAdded = [];
          let addData = [];
          res.data.stationsAdded.forEach(item => {
            item.key = item.stationId;
            item.label = item.stationName;
            item.disabled = !self.isCanEdit;
            notAdded.push(item);
            addData.push(item.stationId);
          });
          res.data.stationsNotAdded.forEach(list => {
            list.key = list.stationId;
            list.label = list.stationName;
            list.disabled = !self.isCanEdit;
            notAdded.push(list);
          });
          self.baoji.data = uniqueByKey('stationId', notAdded);
          self.baoji.value = addData;
        }
      })
    },
    checkBaojiGroup(value) {
      var rs = {
        code: 1,
        message: '',
      };
      // 为空检测
      if (value == '') {
        rs.code = 0;
        rs.message = this.$t('Theworkteamnamecannotbeblank');
        return rs;
      }
      // 遍历包机组列表获取是否重名
      for (var i = 0; i < this.baojigrouplist.length; i++) {
        var _data = this.baojigrouplist[i];
        if (value == _data.txt) {
          rs.code = 0;
          rs.message = value + this.$t('Existed');
          break;
        }
      }
      return rs;
    },
    showAddDialog() {
      // 显示添加面板并初始化值
      this.addBaojiGroup.show = true;
      this.addBaojiGroup.value = "";
    },
    // 添加包机组
    addBaojiGroupOk() {
      // 包机组信息
      var value = this.addBaojiGroup.value;
      // 检测包机组用户的合法性
      var checkResult = this.checkBaojiGroup(value);
      if (checkResult.code == 0) {
        // 提示信息
        this.$message.error(this.$t('operate.failMsg'));
        return;
      }
      // 请求后台
      addBaoJiGroup({ groupName: value }).then(result => {
        let rs = result.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
          // 关闭弹出框
          this.addBaojiGroup.show = false;
          // 查询包机组
          this.searchBaojiGroupList();
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
      })
    },
    showEditDialog() {
      this.editBaojiGroup.value = this.searchParams.baoji_group_name;
      this.editBaojiGroup.show = true;
    },
    // 修改包机组
    editBaojiGroupOk() {
      // 包机组信息
      let self = this;
      let data = {
        baoJiGroupId: self.searchParams.baoji_group_id,
        baoJiGroupName: self.editBaojiGroup.value
      }
      // 检测包机组用户的合法性
      var checkResult = self.checkBaojiGroup(data.baoJiGroupName);
      if (checkResult.code == 0) {
        // 提示信息
        this.$message.error(this.$t('operate.failMsg'));
        return;
      }
      // 请求后台
      editBaoJiGroup(data).then(result => {
        let rs = result.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
          // 关闭弹出框
          self.editBaojiGroup.show = false;
          // 查询包机组
          self.searchBaojiGroupList();
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
      })
    },
    confirmDelBaojiGroup() {
      let name = this.searchParams.baoji_group_name;
      this.$confirm(
        this.$t('Confirmtodelete') + name,
        this.$t('message'),
        {
          confirmButtonText: this.$t('operate.ok'),
          cancelButtonText: this.$t('operate.cancel'),
          type: "warning",
        }).then((res) => {
          if (res !== 'confirm') {
            return false;
          }
          // 删除包机组
          this.delBaojiGroup();
        });
    },
    delBaojiGroup() {
      let id = this.searchParams.baoji_group_id;
      // 请求后台
      deleteBaoJiGroup({ baoJiGroupId: id }).then(result => {
        let rs = result.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
          // 查询包机组
          this.searchBaojiGroupList();
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
      });
    },
    getUserListByuids(uids) {
      var userList = this.user.data;
      var searchParams = this.searchParams;
      var result = [];
      for (var i = 0; i < uids.length; i++) {
        var uid = uids[i];
        for (var k = 0; k < userList.length; k++) {
          var user = userList[k];
          if (user.uid == uid) {
            result.push({
              baoJiGroupId: searchParams.baoji_group_id,
              // baoji_group_name: searchParams.baoji_group_name,
              uId: user.uid,
              // uname: user.uname,
            });
            break;
          }
        }
      }
      return result;
    },
    searchUserListAll() {
      // 查询后台
      this.$apis.userMager.userInfo.searchAll().then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          data = rs.data.map(item => {
            item.key = item.uid;
            item.label = item.uname;
            item.disabled = !this.isCanEdit;
            return item;
          });
        }
        // 设置用户名
        this.user.data = data;
      }).catch(error => {
        console.log(error);
      });
    },
    searchUserList() {
      let id = this.searchParams.baoji_group_id;
      this.$apis.userMager.userInfo.searchBaojiUser(id).then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          data = rs.data.map(item => {
            return item.uid;
          });
        }
        // 设置用户名
        this.user.value = data;
      }).catch(error => {
        console.log(error);
      });
    },
    userChange(list, type, values) {
      let data = this.getUserListByuids(values);
      let params = {
        operationFlag: 1
      }
      // 根据类型确定事件
      switch (type) {
        case 'left'://移除
          params.operationFlag = -1;
          this.changeUser(params, data);
          break;
        case 'right'://添加
          params.operationFlag = 1;
          this.changeUser(params, data);
          break;
      }
    },
    // 添加,移除用户到包机组
    changeUser: function (params, data) {
      let self = this;
      moveUserList(params, data).then(result => {
        let rs = result.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
          self.getUserList();
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
          self.getUserList();
        }
      })
    },
    // 将用户添加进包机组
    addUser(list) {
      // 请求后台添加
      this.$apis.userMager.baojiGroup.addUser(list).then(res => {
        let rs = JSON.parse(res.data.result);
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
        // 查询已经添加的用户
        this.searchUserList();
      }).catch(error => {
        console.log(error);
      });
    },
    // 将用户从包机组移除
    removeUser(list) {
      // 请求后台移除
      this.$apis.userMager.baojiGroup.removeUser(list).then(res => {
        let rs = JSON.parse(res.data.result);
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
        // 查询已经添加的用户
        this.searchUserList();
      }).catch(error => {
        console.log(error);
      });
    },
    getUserListByKeys(keys) {
      var baojiList = this.baoji.data;
      var searchParams = this.searchParams;
      var result = [];
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        for (var k = 0; k < baojiList.length; k++) {
          var baoji = baojiList[k];
          if (baoji.key == key) {
            result.push({
              baojiGroupId: searchParams.baoji_group_id,
              // baoji_group_name: searchParams.baoji_group_name,
              stationId: baoji.key,
              // note: baoji.label
            });
            break;
          }
        }
      }
      return result;
    },
    searchAllHome() {
      // 查询后台
      this.$apis.homeMager.searchAllStations().then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          // 去重
          let uniqueList = uniqueByKey('StationId', rs.data);
          data = uniqueList.map(item => {
            item.key = item.StationId;
            item.label = item.StationName;
            item.disabled = !this.isCanEdit;
            return item;
          });
        }
        // 设置机房
        this.baoji.data = data;
      }).catch(error => {
        console.log(error);
      })
    },
    searchHome() {
      let id = this.searchParams.baoji_group_id;
      // 查询后台
      this.$apis.homeMager.searchBaojiStation(id).then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          // 去重
          let uniqueList = uniqueByKey('StationId', rs.data);
          data = uniqueList.map(item => {
            return item.StationId;
          });
        }
        // 设置已包机组已包机机房
        this.baoji.value = data;
      }).catch(error => {
        console.log(error);
      });
    },
    // 包机组左右移动
    baojiChange(list, type, values) {
      var data = this.getUserListByKeys(values);
      let params = {
        operationFlag: 1
      }
      // 根据类型确定事件
      switch (type) {
        case 'left':
          params.operationFlag = -1;
          this.changeBaoji(params, data);
          break;
        case 'right':
          params.operationFlag = 1;
          this.changeBaoji(params, data);
          break;
      }
    },
    // 添加,移除机房
    changeBaoji: function (params, data) {
      let self = this;
      moveStationList(params, data).then(result => {
        let rs = result.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
          self.getStationList();
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
          self.getStationList();
        }
      })
    },
    removeBaoji(list) {
      this.$apis.userMager.baojiGroup.removeHome(list).then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
        // 查询已经添加包机机房
        this.searchHome();
      }).catch(error => {
        console.log(error);
      });
    },
    addBaoji(list) {
      this.$apis.userMager.baojiGroup.addHome(list).then(res => {
        let rs = JSON.parse(res.data.result);
        let data = [];
        if (rs.code == 1) {
          // 提示信息
          this.$message.success(this.$t('operate.successMsg'));
        } else {
          // 提示信息
          this.$message.error(this.$t('operate.failMsg'));
        }
        // 查询已经添加包机机房
        this.searchHome();
      }).catch(error => {
        console.log(error);
      });
    }
  },
  computed: {
    getToolsState() {    // 根据选中的状态确定包机组列表工具栏的状态
      return this.searchParams.baoji_group_id == "" ? true : false;
    },
  },
  mounted() {
    // 查询包机组列表
    this.searchBaojiGroupList();
  }
}
</script>
<style scoped>
.flex-page-content {
    padding: 0 8px;
  padding: 0 8px;
}
</style>
/deep/ .el-transfer .el-transfer__buttons {
  width: 5.2rem;
}
</style>
src/views/userMager/i18n/BaojiGroupList.js
New file
@@ -0,0 +1,10 @@
export default {
  messages: {
    CN: {
      NoData: '暂无数据',
    },
    US: {
      NoData: 'No Data',
    }
  }
}
src/views/userMager/i18n/baojiMager.js
New file
@@ -0,0 +1,40 @@
export default {
  messages: {
    CN: {
      WorkTeamList: '包机组列表',
      WorkTeamUser: '包机组用户',
      Nouseradded: '未添加用户',
      Addeduser: '已添加用户',
      Remove: '移除',
      Add: '添加',
      EquipmentRoom: '包机机房',
      Noequipmentroomadded: '未添加机房',
      Addedequipmentroom: '已添加机房',
      AddWorkTeam: '添加包机组',
      WorkTeamName: '包机组名称',
      EditWorkTeam: '编辑包机组',
      Theworkteamnamecannotbeblank: '包机组名称不能为空',
      Existed: '已存在',
      Confirmtodelete: '确认删除',
      message: '提示',
    },
    US: {
      WorkTeamList: 'Work Team List',
      WorkTeamUser: 'Work Team User',
      Nouseradded: 'No user added',
      Addeduser: 'Added user',
      Remove: 'Remove',
      Add: 'Add',
      EquipmentRoom: 'Equipment Room',
      Noequipmentroomadded: 'No equipment room added',
      Addedequipmentroom: 'Added equipment room',
      AddWorkTeam: 'Add Work Team',
      WorkTeamName: 'Work Team Name',
      EditWorkTeam: 'Edit Work Team',
      Theworkteamnamecannotbeblank: 'The work team name cannot be blank.',
      Existed: ' is Existed',
      Confirmtodelete: 'Confirm to delete ',
      message: 'Message',
    }
  }
}
src/views/userMager/i18n/powerMager.js
New file
@@ -0,0 +1,82 @@
export default {
  messages: {
    CN: {
      AuthorityGroupList: '权限组列表',
      UserAuthorityTree: '用户-权限树',
      Nouseradded: '未添加用户',
      Addeduser: '已添加用户',
      Remove: '移除',
      Add: '添加',
      AddAuthorityGroup: '添加权限组',
      AuthorityGroupName: '权限组名称',
      ModifyAuthorityTree: '修改权限树',
      ReportSearchPermission: '报表查询权限',
      BatteryInformationReport: '电池信息报表',
      GroupAnalysisReport: '电池组分析报表',
      CellAnalysisReport: '电池单体分析报表',
      BatteryDataManagement: '电池数据管理',
      JobManagementPermission: '作业管理权限',
      SpotCheck: '抽查',
      Recheck: '复查',
      UserWorkTeamPermission: '用户和包机组权限',
      AuthorityManagement: '权限管理',
      ServerParmsSettingPermission: '服务器参数设置权限',
      OperatingPermission: '操作权限',
      BatteryTest: '电池测试',
      DummyLoad: '虚拟负载',
      BatteryAlarmManagementPermission: '电池告警管理权限',
      Confirm: '确认',
      BatteryAlarmParmsSettingPermission: '电池告警参数设置权限',
      DeviceAlarmManagementPermission: '设备告警管理权限',
      BatteryErrorManagementPermission: '电池故障管理权限',
      TroubleshootingConfirmation: '故障排除确认',
      JobSpotCheckTaskManagementPermission: '作业抽查任务管理权限',
      JobChangeManagementPermission: '作业变更管理权限',
      Approve: '审批',
      EquipmentRoomLocationManagementPermission: '机房定位信息管理权限',
      AuthorityGroupNamecannotbeblank: '权限组名称不能为空',
      Existed: '已存在',
      Confirmtodelete: '确认删除',
      message: '提示',
    },
    US: {
      AuthorityGroupList: 'Authority Group List',
      UserAuthorityTree: 'User-Authority Tree',
      Nouseradded: 'No user added',
      Addeduser: 'Added user',
      Remove: 'Remove',
      Add: 'Add',
      AddAuthorityGroup: 'Add Authority Group',
      AuthorityGroupName: 'Authority Group Name',
      ModifyAuthorityTree: 'Modify Authority Tree',
      ReportSearchPermission: 'Report Search Permission',
      BatteryInformationReport: 'Battery Information Report',
      GroupAnalysisReport: 'Group Analysis Report',
      CellAnalysisReport: 'Cell Analysis Report',
      BatteryDataManagement: 'Battery Data Management',
      JobManagementPermission: 'Job Management Permission',
      SpotCheck: 'Spot Check',
      Recheck: 'Recheck',
      UserWorkTeamPermission: 'User & Work Team Permission',
      AuthorityManagement: 'Authority Management',
      ServerParmsSettingPermission: 'Server Parms Setting Permission',
      OperatingPermission: 'Operating Permission',
      BatteryTest: 'Battery Test',
      DummyLoad: 'Dummy Load',
      BatteryAlarmManagementPermission: 'Battery Alarm Management Permission',
      Confirm: 'Confirm',
      BatteryAlarmParmsSettingPermission: 'Battery Alarm Parms Setting Permission',
      DeviceAlarmManagementPermission: 'Device Alarm Management Permission',
      BatteryErrorManagementPermission: 'Battery Error Management Permission',
      TroubleshootingConfirmation: 'Troubleshooting Confirmation',
      JobSpotCheckTaskManagementPermission: 'Job Spot Check Task Management Permission',
      JobChangeManagementPermission: 'Job Change Management Permission',
      Approve: 'Approve',
      EquipmentRoomLocationManagementPermission: 'Equipment Room Location Management Permission',
      AuthorityGroupNamecannotbeblank: 'Authority Group Name cannot be blank.',
      Existed: ' is Existed',
      Confirmtodelete: 'Confirm to delete ',
      message: 'Message',
    }
  }
}
src/views/userMager/powerMager.vue
@@ -1,6 +1,6 @@
<template>
  <flex-layout direction="row" no-bg>
    <my-card slot="header" title="权限组列表" class="w320">
    <my-card slot="header" :title="$t('AuthorityGroupList')" class="list-wrap">
      <div slot="card-tools">
        <el-button class="card-tools" size="mini" type="primary"
                   :disabled="false"
@@ -21,22 +21,23 @@
          :list="powergrouplist"></baoji-group-list>
    </my-card>
    <div class="flex-page-content">
      <context-box title="用户-权限树">
      <context-box :title="$t('UserAuthorityTree')">
        <div class="power-user-tree">
          <div class="power-content power-content-user">
            <el-transfer
                v-model="user.value"
                :titles="['未添加用户', '已添加用户']"
                :button-texts="['移除', '添加']"
                :titles="[$t('Nouseradded'), $t('Addeduser')]"
                :button-texts="[$t('Remove'), $t('Add')]"
                :data="user.data"
                :filterable="true"
                @change="userChange"
                class="transfer-width320 transfer-left">
            </el-transfer>
          </div>
          <div class="power-tree-wrapper w320" style="overflow-y: auto;">
          <div class="power-tree-wrapper list-wrap" style="overflow-y: auto;">
            <el-tree
                ref="powerTree"
                :props="{label: (data) => $t(data.label)}"
                :data="powerTree"
                show-checkbox
                node-key="id"
@@ -48,7 +49,7 @@
    </div>
    <!-- 添加权限组 -->
    <el-dialog
        title="添加权限组"
        :title="$t('AddAuthorityGroup')"
        width="480px"
        :visible.sync="addGroup.show"
        :close-on-click-modal="false"
@@ -63,7 +64,7 @@
          <div class="table-layout">
            <div class="table-row">
              <div class="table-cell">
                <el-form-item label="权限组名称">
                <el-form-item :label="$t('AuthorityGroupName')">
                  <el-input v-model="addGroup.permit_group_name"></el-input>
                </el-form-item>
              </div>
@@ -73,6 +74,7 @@
                <div class="dialog-tree-container h400" style="overflow-y: auto">
                  <el-tree
                      ref="addPowerTree"
                      :props="{label: (data) => $t(data.label)}"
                      :data="powerTree"
                      show-checkbox
                      node-key="id"
@@ -83,14 +85,14 @@
            </div>
          </div>
          <div class="form-footer">
            <three-btn @click="addGroupOk">确定</three-btn>
            <three-btn @click="addGroupOk">{{ $t('operate.ok') }}</three-btn>
          </div>
        </el-form>
      </div>
    </el-dialog>
    <!-- 编辑包机组 -->
    <el-dialog
        title="修改权限树"
        :title="$t('ModifyAuthorityTree')"
        width="480px"
        :visible.sync="editGroup.show"
        :close-on-click-modal="false"
@@ -109,6 +111,7 @@
                  <el-tree
                      ref="editPowerTree"
                      :data="powerTree"
                      :props="{label: (data) => $t(data.label)}"
                      show-checkbox
                      node-key="id"
                      highlight-current>
@@ -118,7 +121,7 @@
            </div>
          </div>
          <div class="form-footer">
            <three-btn @click="editGroupOk">确定</three-btn>
            <three-btn @click="editGroupOk">{{ $t('operate.ok') }}</three-btn>
          </div>
        </el-form>
      </div>
@@ -140,9 +143,13 @@
  permitGroupUser,
  userSearchCSAll2
} from "./apis/apis"
import i18n from './i18n/powerMager';
import { createI18nOption } from '@/assets/js/tools/i18n';
const i18nMixin = createI18nOption(i18n);
export default {
  name:"powerMager",
  mixins: [i18nMixin],
  components: {
    MyCard,
    BaojiGroupList,
@@ -175,315 +182,299 @@
      powerTree: [
        {
          id: 'report_query',
          label: '报表查询权限',
          label: 'ReportSearchPermission',
          children: [
            {
              id: 'battinf_report_query_permit',
              label: '电池信息报表',
              label: 'BatteryInformationReport',
              leaf: true,
            },
            {
              id: 'battgroup_report_query_permit',
              label: '电池组分析报表',
              label: 'GroupAnalysisReport',
              leaf: true,
            },
            {
              id: 'monomer_report_query_permit',
              label: '电池单体分析报表',
              label: 'CellAnalysisReport',
              leaf: true,
            }
          ]
        },
        {
          id: 'batttest_data',
          label: '电池数据管理',
          label: 'BatteryDataManagement',
          children: [
            {
              id: 'batttest_data_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'batttest_data_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
          ]
        },
        // {
        //   id: 'power_info_data',
        //   label: "电源数据管理",
        //   children: [
        //     {
        //       id: "power_info_data_query_permit",
        //       label: '查询',
        //       leaf: true,
        //     },
        //     {
        //       id: "power_info_data_edit_permit",
        //       label: '编辑',
        //       leaf: true,
        //     }
        //   ]
        // },
        {
          id: 'task_manage',
          label: '作业管理权限',
          label: 'JobManagementPermission',
          children: [
            {
              id: 'task_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'task_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
            {
              id: 'task_check_permit',
              label: '抽查',
              label: 'SpotCheck',
              leaf: true,
            },
            {
              id: 'task_recheck_permit',
              label: '复查',
              label: 'Recheck',
              leaf: true,
            },
          ]
        },
        {
          id: 'user_manage',
          label: '用户和包机组权限',
          label: 'UserWorkTeamPermission',
          children: [
            {
              id: 'usr_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'usr_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
          ]
        },
        {
          id: 'power_manage',
          label: '权限管理',
          label: 'AuthorityManagement',
          children: [
            {
              id: 'permit_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'permit_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
          ]
        },
        {
          id: 'server_manage',
          label: '服务器参数设置权限',
          label: 'ServerParmsSettingPermission',
          children: [
            {
              id: 'server_param_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'server_param_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
          ]
        },
        {
          id: 'test_permit_manage',
          label: '操作权限',
          label: 'OperatingPermission',
          children: [
            {
              id: 'batt_test_op_permit',
              label: '电池测试',
              label: 'BatteryTest',
              leaf: true,
            },
            {
              id: 'analog_loader_op_permit',
              label: '虚拟负载',
              label: 'DummyLoad',
              leaf: true,
            },
          ]
        },
        {
          id: 'batt_warn_manage',
          label: '电池告警管理权限',
          label: 'BatteryAlarmManagementPermission',
          children: [
            {
              id: 'batt_alm_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'batt_alm_confirm_permit',
              label: '确认',
              label: 'Confirm',
              leaf: true,
            },
            {
              id: 'batt_alm_clear_permit',
              label: '取消',
              label: 'operate.cancel',
              leaf: true,
            },
            {
              id: 'batt_alm_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            }
          ]
        },
        {
          id: 'batt_warn_param_manage',
          label: '电池告警参数设置权限',
          label: 'BatteryAlarmParmsSettingPermission',
          children: [
            {
              id: 'batt_alm_param_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'batt_alm_param_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
          ]
        },
        {
          id: 'dev_warn_manage',
          label: '设备告警管理权限',
          label: 'DeviceAlarmManagementPermission',
          children: [
            {
              id: 'dev_alm_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'dev_alm_confirm_permit',
              label: '确认',
              label: 'Confirm',
              leaf: true,
            },
            {
              id: 'dev_alm_clear_permit',
              label: '取消',
              label: 'operate.cancel',
              leaf: true,
            },
            {
              id: 'dev_alm_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            }
          ]
        },
        {
          id: 'battfault_manage',
          label: '电池故障管理权限',
          label: 'BatteryErrorManagementPermission',
          children: [
            {
              id: 'battfault_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'battfault_add_permit',
              label: '添加',
              label: 'Add',
              leaf: true,
            },
            {
              id: 'battfault_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
            {
              id: 'battfault_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            },
            {
              id: 'battmaint_confirm_permit',
              label: '故障排除确认',
              label: 'TroubleshootingConfirmation',
              leaf: true,
            },
          ]
        },
        {
          id: 'usrtaskcheck_manage',
          label: '作业抽查任务管理权限',
          label: 'JobSpotCheckTaskManagementPermission',
          children: [
            {
              id: 'usrtaskcheck_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'usrtaskcheck_add_permit',
              label: '添加',
              label: 'Add',
              leaf: true,
            },
            {
              id: 'usrtaskcheck_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
            {
              id: 'usrtaskcheck_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            },
            {
              id: 'usrtaskcheck_confirm_permit',
              label: '确认',
              label: 'Confirm',
              leaf: true,
            },
          ]
        },
        {
          id: 'taskchange_manage',
          label: '作业变更管理权限',
          label: 'JobChangeManagementPermission',
          children: [
            {
              id: 'taskchange_query_permit',
              label: '查询',
              label: 'operate.search',
              leaf: true,
            },
            {
              id: 'taskchange_add_permit',
              label: '添加',
              label: 'Add',
              leaf: true,
            },
            {
              id: 'taskchange_shenpi_permit',
              label: '审批',
              label: 'Approve',
              leaf: true,
            },
            {
              id: 'taskchange_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            },
          ]
        },
        {
          id: 'batt_map_manage',
          label: '机房定位信息管理权限',
          label: 'EquipmentRoomLocationManagementPermission',
          children: [
            {
              id: 'batt_map_edit_permit',
              label: '编辑',
              label: 'operate.edit',
              leaf: true,
            },
            {
              id: 'batt_map_delete_permit',
              label: '删除',
              label: 'operate.delete',
              leaf: true,
            },
          ]
@@ -662,7 +653,7 @@
      // 为空检测
      if (value == '') {
        rs.code = 0;
        rs.message = "权限组名称不能为空";
        rs.message = this.$t('AuthorityGroupNamecannotbeblank');
        return rs;
      }
@@ -671,7 +662,7 @@
        var _data = this.powergrouplist[i];
        if (value == _data.txt) {
          rs.code = 0;
          rs.message = value + "已存在";
          rs.message = value + this.$t('Existed');
          break;
        }
      }
@@ -691,10 +682,10 @@
        let rs = res.data;
        if (rs.code == 1) {
          this.addGroup.show = false;
          this.$layer.msg('添加成功');
          this.$message.success(this.$t('operate.successMsg'));
          this.searchGroup();
        } else {
          this.$layer.msg('添加失败');
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
@@ -745,12 +736,12 @@
        let rs = res.data;
        if (rs.code == 1) {
          self.editGroup.show = false;
          self.$layer.msg('修改成功');
          this.$message.success(this.$t('operate.successMsg'));
          // 查询当前权限组的权限
          self.getUserPermits();
        } else {
          self.$layer.msg('修改失败');
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
@@ -758,9 +749,18 @@
    },
    confirmDelGroup() {
      let name = this.powerInfo.permit_group_name;
      this.$layer.confirm('确认删除' + name, {icon: 3}, index => {
        // 关闭弹出框
        this.$layer.close(index);
      this.$confirm(
        this.$t('Confirmtodelete') + name,
        this.$t('message'),
        {
          confirmButtonText: this.$t('operate.ok'),
          cancelButtonText: this.$t('operate.cancel'),
          type: "warning",
        }
      ).then((res) => {
        if(res !== 'confirm') {
          return false;
        }
        // 删除权限组
        this.delGroup();
      });
@@ -775,19 +775,13 @@
        let rs = res.data;
        if (rs.code == 1) {
          // 提示信息
          self.$message({
            type: 'success',
            message: rs.msg,
          });
          this.$message.success(this.$t('operate.successMsg'));
          // 查询权限组
          self.searchGroup();
        } else {
          // 提示信息
          self.$message({
            type: 'error',
            message: rs.msg,
          });
          this.$message.error(this.$t('operate.failMsg'));
        }
      }).catch(error => {
        console.log(error);
@@ -845,16 +839,10 @@
        let rs = res.data;
        if (rs.code == 1) {
          // 提示信息
          this.$message({
            type: 'success',
            message: rs.msg,
          });
          this.$message.success(this.$t('operate.successMsg'));
        } else {
          // 提示信息
          this.$message({
            type: 'error',
            message: rs.msg,
          });
          this.$message.error(this.$t('operate.failMsg'));
        }
        // 查询已添加的用户
        this.getUserPermits();
@@ -908,4 +896,10 @@
.power-content-user {
  padding: 0 8px 8px 8px;
}
</style>
.list-wrap {
  width: 380px;
}
/deep/ .el-transfer .el-transfer__buttons {
  width: 5.2rem;
}
</style>