ZZJ
2022-01-12 9d43e7051075f1fc1b2fee680a79f90becddd63f
src/pages/library/components/carList.vue
@@ -1,241 +1,135 @@
<template>
  <div class="table-parent">
    <el-row class style="margin:20px">
      <!-- <el-col :span="4" class="tl">
          <b class="f14">{{this.baseObject.tableName}}</b>
      </el-col>
      <el-col :span="2">
          <b class="f14">{{this.baseObject.bwType === '1'?'黑名单':'白名单'}}</b>
      </el-col>
      <el-col :span="8">
          <b class="f14">有效时间:{{this.baseObject.startTime}}--{{this.baseObject.endTime?this.baseObject.endTime:'永久有效'}}</b>
      </el-col>-->
      <div class="tl">
        <span
          class="f14"
          style="color:#000000;"
        >{{this.baseObject.tableName?this.baseObject.tableName + '/&nbsp;':''}}</span>
        <span
          class="f14"
          style="color:#000000;"
        >{{this.baseObject.bwType === '1'?'黑名单/&nbsp;':'白名单/&nbsp;&nbsp;&nbsp;'}}</span>
        <span
          class="f14"
          style="color:#000000;"
        >有效时间:{{this.baseObject.startTime}}--{{this.baseObject.endTime?this.baseObject.endTime:'永久有效'}}</span>
    <el-row>
      <div class="base-tip">
        <div class="left-tips">
          <span class="ku-name">{{ this.baseObject.tableName }}</span>
          <span
            class="list"
            :class="
              this.baseObject.bwType === '1' ? 'black-list' : 'white-list'
            "
            >{{ this.baseObject.bwType === "1" ? "黑名单" : "白名单" }}</span
          >
          <span class="ok-time"
            >有效时间:{{ this.baseObject.startTime }} --
            {{
              this.baseObject.endTime ? this.baseObject.endTime : "永久有效"
            }}</span
          >
        </div>
        <div class="right-btns">
          <el-switch
            :active-value="1"
            :width="52"
            :inactive-value="0"
            v-model="baseObject.enable"
            active-color="#4E94FF"
            inactive-color="#BBBBBB"
            style="margin-right: 10px"
            :disabled="isDisabled(baseObject)"
            @change="setEnable(baseObject)"
          >
          </el-switch>
          <div class="shutiao" v-if="baseObject.enable"></div>
          <div class="shutiao1" v-else></div>
          <el-tooltip content="删除" placement="top" popper-class="atooltip">
            <span
              class="iconfont iconfont-wrap iconshanchuku-09"
              v-if="isShow('library:set')"
              @click.stop="askDelete('base')"
            ></span>
          </el-tooltip>
          <el-tooltip content="编辑" placement="top" popper-class="atooltip">
            <span
              class="iconfont iconfont-wrap iconbianjiku-09"
              @click.stop="edit"
              v-if="isShow('library:set')"
            ></span>
          </el-tooltip>
        </div>
      </div>
    </el-row>
    <el-row class style="margin:40px 0 40px 20px">
      <el-col :span="6">
        <el-input
          placeholder="姓名/性别/身份证号/手机号"
          autocomplete="off"
          width="100%"
          size="small"
          v-model="BaseManageData.contentValue"
          @keyup.enter.native="handleSearch"
        ></el-input>
      </el-col>
      <el-col :span="2">
        <el-button size="small" type="primary" @click="handleSearch">搜索</el-button>
      </el-col>
      <el-col :offset="8" :span="3">
        <fTemplate authority="videoTable:edit">
          <el-button
    <div style="display: flex" class="border-tabl">
      <div class="head-search">
        <div class="desc">
          本库共有
          <span class="nums">{{ BaseManageData.total }}条</span>
          数据
        </div>
        <div class="right-group">
          <el-input
            placeholder="姓名/性别/身份证号/手机号"
            autocomplete="off"
            width="100%"
            size="small"
            class="ml10"
            type="danger"
            @click="deleteBatch"
            v-if="isShow('videoTable:edit')"
          >批量删除</el-button>
        </fTemplate>
      </el-col>
      <el-col :span="2">
        <div class="text-left">
          <el-button size="small" class="ml10" type="primary" @click="addCar">添加车辆</el-button>
          <el-drawer
            title="车辆信息"
            :modal="false"
            :destroy-on-close="true"
            :append-to-body="true"
            :visible.sync="addDrawer"
            :direction="direction"
            :before-close="handleClose1"
            v-model="BaseManageData.contentValue"
            @keyup.enter.native="handleSearch"
          ></el-input>
          <el-button size="small" type="primary" @click="handleSearch"
            >搜索</el-button
          >
            <div class="drawerSpace">
              <div class="uploadLine">
                <div class="car-picture">
                  <el-upload
                    action
                    :http-request="uploadCar"
                    accept="image/*"
                    list-type="picture-card"
                    :file-list="form.carUrls"
                    :before-remove="handleRemoveCarPic"
                  >
                    <i class="el-icon-plus" style="margin-top:25px"></i>
                    <div>上传车辆照片</div>
                  </el-upload>
                </div>
                <div class="person-picture">
                  <el-upload
                    action
                    :http-request="uploadPerson"
                    list-type="picture-card"
                    accept="image/*"
                    :limit="1"
                    :file-list="form.faceUrl"
                    :on-remove="handleRemoveFacePic"
                  >
                    <i class="el-icon-plus" style="margin-top:25px"></i>
                    <div>上传车主照片</div>
                  </el-upload>
                </div>
              </div>
              <el-form
                ref="formForCar"
                :model="form"
                label-width="100px"
                style="margin-top:20px;margin-bottom: 50px"
                :rule="rules"
              >
                <el-form-item label="*车牌号:">
                  <el-input placeholder="请输入车牌号" v-model="form.carNo" class="inputWidth"></el-input>
                </el-form-item>
                <el-form-item label="车辆类型:">
                  <el-select v-model="form.carType" placeholder="请选择车辆类型" class="inputWidth">
                    <el-option
                      v-for="item in VideoPhotoData.dictionary.CARTYPE"
                      :key="item.value"
                      :label="item.name"
                      :value="item.value"
                    ></el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="车辆品牌:">
                  <el-select v-model="form.carBrand" placeholder="请选择车辆品牌" class="inputWidth">
                    <el-option
                      v-for="item in VideoPhotoData.dictionary.BRAND"
                      :key="item.value"
                      :label="item.name"
                      :value="item.value"
                    ></el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="车身颜色:">
                  <el-select v-model="form.carColor" placeholder="请选择车身颜色" class="inputWidth">
                    <el-option
                      v-for="item in VideoPhotoData.dictionary.nColor"
                      :key="item.value"
                      :label="item.name"
                      :value="item.value"
                    ></el-option>
                  </el-select>
                </el-form-item>
                <el-form-item label="车主姓名:">
                  <el-input v-model="form.personName" class="inputWidth"></el-input>
                </el-form-item>
                <el-form-item label="车主性别:">
                  <el-radio-group v-model="form.sex">
                    <el-radio label="男"></el-radio>
                    <el-radio label="女"></el-radio>
                  </el-radio-group>
                </el-form-item>
                <el-form-item label="身份证号:">
                  <el-input v-model="form.idCard" class="inputWidth"></el-input>
                </el-form-item>
                <el-form-item label="手机号:">
                  <el-input v-model="form.phoneNum" class="inputWidth"></el-input>
                </el-form-item>
                <el-form-item label="其他:">
                  <el-input v-model="form.reserved" class="inputWidth"></el-input>
                </el-form-item>
                <el-form-item style="text-align:tight">
                  <el-button type="primary" @click="submitCar" style="margin-left:120px">保存</el-button>
                  <el-button @click="resetForm">取消</el-button>
                </el-form-item>
              </el-form>
            </div>
          </el-drawer>
        </div>
      </el-col>
      <el-col :span="3">
        <div class="text-left">
          <el-button size="small" class="ml10" type="primary" @click="addBatch">批量上传车牌</el-button>
          <el-drawer
            title="上传车牌"
            :modal="false"
            :append-to-body="true"
            :visible.sync="addBatchDrawer"
            :direction="direction"
            :before-close="handleClose2"
          <el-tooltip
            content="批量删除"
            placement="top"
            popper-class="atooltip"
          >
            <div class="drawerSpace">
              <div class="plateAttach">
                <el-input
                  type="textarea"
                  :rows="25"
                  v-model="plates"
                  style="width:90%"
                  placeholder="请输入车牌号"
                ></el-input>
                <p>车牌号以逗号或回车键隔开,单次最多支持100条上传,例如:京YAB123,京F34Y87</p>
                <el-button type="primary" @click="platesBatch" style="margin-left:210px">保存</el-button>
                <el-button @click="resetForm('ruleForm')">取消</el-button>
              </div>
            </div>
          </el-drawer>
            <fTemplate authority="library:set">
              <span
                class="iconfont iconfont-wrap iconpiliangshanchu-09"
                @click="askDelete('batch')"
                v-if="isShow('library:set')"
              ></span>
            </fTemplate>
          </el-tooltip>
          <el-tooltip
            content="添加车辆"
            placement="top"
            popper-class="atooltip"
          >
            <span
              class="iconfont iconfont-wrap icontianjiacheliang-09"
              @click="addCar"
            ></span>
          </el-tooltip>
          <el-tooltip
            content="批量上传车牌"
            placement="top"
            popper-class="atooltip"
          >
            <span
              class="iconfont iconfont-wrap iconshangchuanchepai-09"
              @click="addBatch"
            ></span>
          </el-tooltip>
        </div>
      </el-col>
    </el-row>
    <div style="display:flex;" class="border-tabl ml20">
      </div>
      <el-table
        id="multipleTable"
        class="tableBox"
        ref="multipleTable"
        :data="BaseManageData.personList"
        tooltip-effect="dark"
        style="width: 100%;"
        style="width: 100%; overflow: auto"
        :fit="true"
        :max-height="tableHeight"
        :default-sort="{prop: 'createTime', order: 'descending'}"
        border
        :default-sort="{ prop: 'createTime', order: 'descending' }"
        @selection-change="handleSelectionChange"
        :header-cell-style="{background:'#f8f8f8',color:'#222222'}"
        :header-cell-style="{
          background: '#fff',
          color: '#222222',
          padding: '2px 1px',
          borderBottom: 'none',
        }"
      >
        <el-table-column type="selection" width="30"></el-table-column>
        <el-table-column label="序号" width="70" sortable align="center">
          <template slot-scope="scope">{{scope.$index+1}}</template>
        </el-table-column>
        <el-table-column prop="carNo" label="车牌号" sortable align="center" width="120"></el-table-column>
        <el-table-column
          prop="carType"
          label="车辆类型"
          width="100"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column prop="carBrand" label="车辆品牌" min-width="100" sortable align="center"></el-table-column>
        <el-table-column
          prop="carColor"
          label="车身颜色"
          width="100"
          show-overflow-tooltip
          sortable
          align="center"
        >
          <template
            slot-scope="scope"
          >{{getDataName(VideoPhotoData.dictionary.nColor,scope.row.carColor)}}</template>
        </el-table-column>
        <el-table-column
          prop="personName"
          label="车主姓名"
          min-width="110"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column prop="sex" label="车主性别" align="center" width="80"></el-table-column>
        <el-table-column
          prop="carUrls"
          label="车辆照片"
@@ -247,17 +141,84 @@
        >
          <template slot-scope="scope">
            <el-carousel
              style="height:100px;"
              style="height: 100px"
              :autoplay="false"
              indicator-position="none"
              :arrow="scope.row.carUrls.length > 1 ? 'always' : 'never'"
            >
              <el-carousel-item v-for="(item, index) in scope.row.carUrls" :key="index">
                <img style="width:100px;height:100px;object-fit:contain;" :src="item.url" alt />
              <el-carousel-item
                v-for="(item, index) in scope.row.carUrls"
                :key="index"
              >
                <img
                  style="width: 100px; height: 100px; object-fit: contain"
                  :src="item.url"
                  alt
                />
              </el-carousel-item>
            </el-carousel>
          </template>
        </el-table-column>
        <el-table-column label="生效状态" align="center" width="80">
          <template slot-scope="scope">
            <el-switch
              v-model="scope.row.enable"
              :active-value="1"
              :disabled="!isShow('library:set')"
              :inactive-value="0"
              @change="enable(scope.row)"
            ></el-switch>
          </template>
        </el-table-column>
        <el-table-column
          prop="carNo"
          label="车牌号"
          sortable
          align="center"
          width="120"
        ></el-table-column>
        <el-table-column
          prop="carType"
          label="车辆类型"
          width="100"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="carBrand"
          label="车辆品牌"
          min-width="100"
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="carColor"
          label="车身颜色"
          width="100"
          show-overflow-tooltip
          sortable
          align="center"
        >
          <template slot-scope="scope">{{
            getDataName(VideoPhotoData.dictionary.nColor, scope.row.carColor)
          }}</template>
        </el-table-column>
        <el-table-column
          prop="personName"
          label="车主姓名"
          min-width="110"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="sex"
          label="车主性别"
          align="center"
          width="80"
        ></el-table-column>
        <el-table-column
          prop="createTime"
          label="入库时间"
@@ -266,71 +227,92 @@
          sortable
          align="center"
        ></el-table-column>
        <!-- <el-table-column prop="reserved" label="其他" align="center"></el-table-column> -->
        <el-table-column label="生效状态" align="center" width="80">
          <template slot-scope="scope">
            <el-switch
              v-model="scope.row.enable"
              :active-value="1"
              :disabled="!isShow('videoTable:edit')"
              :inactive-value="0"
              @change="enable(scope.row)"
            ></el-switch>
          </template>
        </el-table-column>
        <el-table-column label="操作" min-width="200" align="center">
          <template slot-scope="scope">
            <fTemplate authority="videoTable:edit">
              <el-tooltip content="编辑" placement="top" popper-class="atooltip">
            <fTemplate authority="library:set">
              <el-tooltip
                content="编辑"
                placement="top"
                popper-class="atooltip"
              >
                <span
                  class="iconfont iconbianji iconStyle1"
                  style="font-size:15px;"
                  class="iconfont iconbianjixinxi-09"
                  style="    font-size: 24px;cursor: pointer"
                  @click="handleClick(scope.row)"
                ></span>
              </el-tooltip>
            </fTemplate>
            <el-tooltip content="查找此人" placement="top" popper-class="atooltip">
              <span class="iconfont iconsousuoren iconStyle1" @click="tosearch(scope.row)"></span>
            <el-popover
              placement="top"
              trigger="click"
              popper-class="popper-caozuo1"
            >
              <el-tooltip
              content="查找此车"
              placement="top"
              popper-class="atooltip"
            >
              <span
                class="iconfont iconchazhaociren-09"
                @click="tosearch(scope.row)"
              ></span>
            </el-tooltip>
            <fTemplate authority="videoTable:edit">
              <el-tooltip content="复制" placement="top" popper-class="atooltip">
            <fTemplate authority="library:set">
              <el-tooltip
                content="复制"
                placement="top"
                popper-class="atooltip"
              >
                <span
                  class="iconfont iconfuzhi iconStyle1"
                  class="iconfont iconfuzhi-09"
                  title="复制"
                  @click="copyClick(scope.row)"
                ></span>
              </el-tooltip>
            </fTemplate>
            <fTemplate authority="videoTable:edit">
              <el-tooltip content="移动" placement="top" popper-class="atooltip">
            <fTemplate authority="library:set">
              <el-tooltip
                content="移动"
                placement="top"
                popper-class="atooltip"
              >
                <span
                  class="iconfont iconyidongzhi iconStyle1"
                  style="font-size:15px;"
                  class="iconfont iconyidong-09"
                  title="移动"
                  @click="moveClick(scope.row)"
                ></span>
              </el-tooltip>
            </fTemplate>
            <fTemplate authority="videoTable:edit">
              <el-tooltip content="删除" placement="top" popper-class="atooltip">
            <fTemplate authority="library:set">
              <el-tooltip
                content="删除"
                placement="top"
                popper-class="atooltip"
              >
                <span
                  class="iconfont iconshanchu iconStyle1"
                  style="color:#E74C3C;"
                  class="iconfont iconshanchu-09"
                  style="color: #e74c3c"
                  @click="deleteThis(scope.row.id)"
                  title="删除"
                ></span>
              </el-tooltip>
            </fTemplate>
             <span
                slot="reference"
                class="iconfont icongengduocaozuo-09"
                style="font-size: 24px; cursor: pointer"
              ></span>
            </el-popover>
          </template>
        </el-table-column>
      </el-table>
    </div>
    <div class="pt5 pb20" style="height:40px;position:relative">
      <el-pagination
        @current-change="refrash"
        :current-page="BaseManageData.page"
        :page-size="BaseManageData.size"
        style="position:absolute;right:10px;bottom:5px"
        style="margin-top: 10px"
        :total="BaseManageData.total"
      ></el-pagination>
    </div>
@@ -343,19 +325,41 @@
    >
      <div>
        <div class="tl">
          <span>上传成功的数量:{{uploadResult.successList.length}}</span>
          <span>上传成功的数量:{{ uploadResult.successList.length }}</span>
        </div>
        <div class="flex-box mt10">
          <span>上传失败的数量:{{uploadResult.failList.length}}</span>
          <div class="ml20" v-for="(i,index) in uploadResult.failList" :key="index">{{i}}</div>
          <span>上传失败的数量:{{ uploadResult.failList.length }}</span>
          <div
            class="ml20"
            v-for="(i, index) in uploadResult.failList"
            :key="index"
          >
            {{ i }}
          </div>
        </div>
        <div class="flex-box mt10">
          <span>包含多张人脸的图片数量:{{uploadResult.multiFaceList.length}}</span>
          <div class="ml20" v-for="(i,index) in uploadResult.multiFaceList" :key="index">{{i}}</div>
          <span
            >包含多张人脸的图片数量:{{
              uploadResult.multiFaceList.length
            }}</span
          >
          <div
            class="ml20"
            v-for="(i, index) in uploadResult.multiFaceList"
            :key="index"
          >
            {{ i }}
          </div>
        </div>
        <div class="flex-box mt10">
          <span>不含人脸的图片数量:{{uploadResult.noFaceList.length}}</span>
          <div class="ml20" v-for="(i,index) in uploadResult.noFaceList" :key="index">{{i}}</div>
          <span>不含人脸的图片数量:{{ uploadResult.noFaceList.length }}</span>
          <div
            class="ml20"
            v-for="(i, index) in uploadResult.noFaceList"
            :key="index"
          >
            {{ i }}
          </div>
        </div>
      </div>
    </el-dialog>
@@ -375,13 +379,21 @@
            <p>黑名单 ></p>
          </div>
          <div class="baseList">
            <el-checkbox-group v-model="BaseManageData.selectBlacks" @change="blackAngWhite">
              <div class="base" v-for="(item, index) in BaseManageData.blackList" :key="index">
            <el-checkbox-group
              v-model="BaseManageData.selectBlacks"
              @change="blackAngWhite"
            >
              <div
                class="base"
                v-for="(item, index) in BaseManageData.blackList"
                :key="index"
              >
                <el-checkbox
                  :label="item.value"
                  :title="item.title"
                  :disabled="item.disabled"
                >{{item.title}}</el-checkbox>
                  >{{ item.title }}</el-checkbox
                >
              </div>
            </el-checkbox-group>
          </div>
@@ -391,13 +403,21 @@
            <p>白名单 ></p>
          </div>
          <div class="baseList">
            <el-checkbox-group v-model="BaseManageData.selectWhites" @change="blackAngWhite">
              <div class="base" v-for="(item, index) in BaseManageData.whiteList" :key="index">
            <el-checkbox-group
              v-model="BaseManageData.selectWhites"
              @change="blackAngWhite"
            >
              <div
                class="base"
                v-for="(item, index) in BaseManageData.whiteList"
                :key="index"
              >
                <el-checkbox
                  :label="item.value"
                  :title="item.title"
                  :disabled="item.disabled"
                >{{item.title}}</el-checkbox>
                  >{{ item.title }}</el-checkbox
                >
              </div>
            </el-checkbox-group>
          </div>
@@ -405,7 +425,9 @@
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" @click="copyClose" type="info">取 消</el-button>
        <el-button size="small" type="primary" @click="copySubmit()">确 定</el-button>
        <el-button size="small" type="primary" @click="copySubmit()"
          >确 定</el-button
        >
      </div>
    </el-dialog>
@@ -429,12 +451,17 @@
              @change="blackAngWhite"
              :max="1"
            >
              <div class="base" v-for="(item, index) in BaseManageData.blackList" :key="index">
              <div
                class="base"
                v-for="(item, index) in BaseManageData.blackList"
                :key="index"
              >
                <el-checkbox
                  :label="item.value"
                  :title="item.title"
                  :disabled="item.disabled"
                >{{item.title}}</el-checkbox>
                  >{{ item.title }}</el-checkbox
                >
              </div>
            </el-checkbox-group>
          </div>
@@ -449,12 +476,17 @@
              @change="blackAngWhite"
              :max="1"
            >
              <div class="base" v-for="(item, index) in BaseManageData.whiteList" :key="index">
              <div
                class="base"
                v-for="(item, index) in BaseManageData.whiteList"
                :key="index"
              >
                <el-checkbox
                  :label="item.value"
                  :title="item.title"
                  :disabled="item.disabled"
                >{{item.title}}</el-checkbox>
                  >{{ item.title }}</el-checkbox
                >
              </div>
            </el-checkbox-group>
          </div>
@@ -462,28 +494,244 @@
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" @click="moveClose" type="info">取 消</el-button>
        <el-button size="small" type="primary" @click="moveSubmit()">确 定</el-button>
        <el-button size="small" type="primary" @click="moveSubmit()"
          >确 定</el-button
        >
      </div>
    </el-dialog>
    <el-dialog
      :visible.sync="askDeleteShow"
      :center="true"
      custom-class="del-dialog"
    >
      <div>
        <div class="suc-icon">
          <i class="iconfont icongantanhao1"></i>
        </div>
        <div class="tt">{{ delText[0] }}</div>
        <div class="flex-box">
          <span>{{ delText[1] }}</span>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="askDeleteShow = false">取 消</el-button>
        <el-button type="primary" @click="handleDel">确 定</el-button>
      </span>
    </el-dialog>
    <el-drawer
      title="车辆信息"
      :modal="false"
      :destroy-on-close="true"
      custom-class="add-car"
      :visible.sync="addDrawer"
      :direction="direction"
      :before-close="handleClose1"
    >
      <div class="uploadLine">
        <div class="car-picture">
          <div class="car-text">上传车辆照片</div>
          <el-upload
            action
            :http-request="uploadCar"
            accept="image/*"
            list-type="picture-card"
            :file-list="form.carUrls"
            :before-remove="handleRemoveCarPic"
          >
            <i class="el-icon-plus" style="margin-top: 25px"></i>
          </el-upload>
        </div>
        <div class="person-picture">
          <div class="car-text">上传车主照片</div>
          <el-upload
            action
            :http-request="uploadPerson"
            list-type="picture-card"
            accept="image/*"
            :limit="1"
            :file-list="form.faceUrl"
            :on-remove="handleRemoveFacePic"
          >
            <i class="el-icon-plus" style="margin-top: 25px"></i>
          </el-upload>
        </div>
      </div>
      <el-form
        ref="formForCar"
        :model="form"
        label-width="80px"
        style="margin-top: 20px; margin-bottom: 30px"
        :rule="rules"
      >
        <el-form-item label="车牌号" prop="carNo">
          <el-input
            placeholder="请输入车牌号"
            v-model="form.carNo"
            class="inputWidth"
          ></el-input>
        </el-form-item>
        <el-form-item label="车辆类型">
          <el-select
            v-model="form.carType"
            placeholder="请选择车辆类型"
            class="inputWidth"
          >
            <el-option
              v-for="item in VideoPhotoData.dictionary.CARTYPE"
              :key="item.value"
              :label="item.name"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="车辆品牌">
          <el-select
            v-model="form.carBrand"
            placeholder="请选择车辆品牌"
            class="inputWidth"
          >
            <el-option
              v-for="item in VideoPhotoData.dictionary.BRAND"
              :key="item.value"
              :label="item.name"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="车身颜色">
          <el-select
            v-model="form.carColor"
            placeholder="请选择车身颜色"
            class="inputWidth"
          >
            <el-option
              v-for="item in VideoPhotoData.dictionary.nColor"
              :key="item.value"
              :label="item.name"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="车主姓名">
          <el-input v-model="form.personName" class="inputWidth"></el-input>
        </el-form-item>
        <el-form-item label="车主性别">
          <el-radio-group v-model="form.sex">
            <el-radio label="男"></el-radio>
            <el-radio label="女"></el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item label="身份证号">
          <el-input v-model="form.idCard" class="inputWidth"></el-input>
        </el-form-item>
        <el-form-item label="手机号">
          <el-input v-model="form.phoneNum" class="inputWidth"></el-input>
        </el-form-item>
        <el-form-item label="其他">
          <el-input v-model="form.reserved" class="inputWidth"></el-input>
        </el-form-item>
        <!-- <el-form-item style="text-align: tight">
          <el-button
            type="primary"
            @click="submitCar"
            style="margin-left: 120px"
            >保存</el-button
          >
          <el-button @click="resetForm">取消</el-button>
        </el-form-item> -->
      </el-form>
      <div class="dialog-footer">
        <el-button
          size="small"
          class="sure-btn"
          type="primary"
          @click="submitCar"
          >确 定</el-button
        >
        <el-button
          size="small"
          class="cancel-btn"
          @click="resetForm"
          type="info"
          >取 消</el-button
        >
      </div>
    </el-drawer>
    <el-drawer
      title="上传车牌"
      :modal="false"
      :visible.sync="addBatchDrawer"
      :direction="direction"
      custom-class="upload-pai"
      :before-close="handleClose2"
    >
      <div class="drawerSpace">
        <div class="plateAttach">
          <el-input
            type="textarea"
            :rows="25"
            v-model="plates"
            style="width: 90%"
            placeholder="请输入车牌号"
          ></el-input>
          <p>
            车牌号以逗号或回车键隔开,单次最多支持100条上传,例如:京YAB123,京F34Y87
          </p>
          <!-- <el-button
            type="primary"
            @click="platesBatch"
            style="margin-left: 210px"
            >保存</el-button
          >
          <el-button @click="resetForm('ruleForm')">取消</el-button> -->
        </div>
      </div>
      <div class="dialog-footer">
        <el-button
          size="small"
          class="sure-btn"
          type="primary"
          @click="platesBatch"
          >保存</el-button
        >
        <el-button
          size="small"
          class="cancel-btn"
          @click="resetForm('ruleForm')"
          type="info"
          >取消</el-button
        >
      </div>
    </el-drawer>
  </div>
</template>
<script>
import { addBaseCar, updateBaseCar, deleteBasePersons, plateBatch } from "@/api/baseLibrary";
import {
  addBaseCar,
  updateBaseCar,
  deleteBasePersons,
  plateBatch,
  updateDbTableStatus,
} from "@/api/baseLibrary";
import axios from "axios";
// import { findByType } from '@/server/video.js'
import Upload from "./upload";
import fTemplate from "@/components/fTemplate";
import request from "@/scripts/httpRequest"
import request from "@/scripts/httpRequest";
export default {
  components: {
    // httpImg,
    fTemplate
    fTemplate,
  },
  props: {
    baseObject: {
      default: () => { },
      type: Object
    }
      default: () => {},
      type: Object,
    },
    syncType: {
      type: String,
    },
  },
  data() {
    return {
@@ -491,14 +739,21 @@
      addDrawer: false,
      plates: "",
      addBatchDrawer: false,
      direction: 'rtl',
      dialogImageUrl: '',
      fileList: [{ name: "fasjido.jpg", url: "group2/M00/0A/D7/wKgBnFyjH0-AUE5eAAC8hSMP2Yw110.jpg" }, { name: "fasjido.jpg", url: "group2/M00/0A/D7/wKgBnFyjH0-AUE5eAAC8hSMP2Yw110.jpg" }],
      provinces: [{ name: '京', value: 1 }, { name: '津', value: 2 }, { name: '冀', value: 3 }],
      direction: "rtl",
      dialogImageUrl: "",
      fileList: [
        {
          name: "fasjido.jpg",
          url: "group2/M00/0A/D7/wKgBnFyjH0-AUE5eAAC8hSMP2Yw110.jpg",
        },
        {
          name: "fasjido.jpg",
          url: "group2/M00/0A/D7/wKgBnFyjH0-AUE5eAAC8hSMP2Yw110.jpg",
        },
      ],
      copyVisiabled: false,
      moveVisiabled: false,
      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
      searchName: "",
      current: 1,
      compare: false,
      pageSize: 10,
@@ -517,7 +772,7 @@
        idCard: "",
        phoneNum: "",
        monitorLevel: "one",
        carUrls: [], //{url:"/httpImage/192.168.20.10:6701/818,56d0122c44f069"},{url:"/httpImage/192.168.20.10:6701/818,56d0122c44f069"}
        carUrls: [],
        faceUrl: [],
        faceFeature: "",
        carPicUrls: "",
@@ -527,109 +782,163 @@
        carBrand: "0",
        carNo: "",
        enable: 0,
        reserved: ""
        reserved: "",
      },
      rules: {
        picDesc: [
          { required: true, message: "请输入照片标识", trigger: "change" }
        ],
        sex: [{ required: true, message: "请勾选性别", trigger: "change" }],
        monitorLevel: [
          { required: true, message: "请选择人员等级", trigger: "change" }
        ]
        carNo: [{ required: true, message: "请输入车牌号", trigger: "change" }],
        // sex: [{ required: true, message: "请勾选性别", trigger: "change" }],
        // monitorLevel: [
        //   { required: true, message: "请选择人员等级", trigger: "change" },
        // ],
      },
      tableData: [],
      tableHeight: window.innerHeight - 320,
      multipleSelection: [],
      peoperLevel: [],
      oldWidth: "",
      oldHeight: "",
      // 上传后的弹框显示
      askDeleteShow: false,
      delType: "",
      toDeleteId: "",
      dialogVisible: false,
      // 批量上传后的返回结果
      uploadResult: { failList: [], successList: [], multiFaceList: [], noFaceList: [] }
      uploadResult: {
        failList: [],
        successList: [],
        multiFaceList: [],
        noFaceList: [],
      },
    };
  },
  computed: {
    isAdmin() {
      if (
        sessionStorage.getItem('userInfo') &&
        sessionStorage.getItem('userInfo') !== ''
        sessionStorage.getItem("userInfo") &&
        sessionStorage.getItem("userInfo") !== ""
      ) {
        let loginName = JSON.parse(sessionStorage.getItem('userInfo')).username
        return (
          loginName === 'superadmin' || loginName === 'basic'
        )
        let loginName = JSON.parse(sessionStorage.getItem("userInfo")).username;
        return loginName === "superadmin" || loginName === "basic";
      }
      return false;
    }
    },
    delText() {
      switch (this.delType) {
        case "base":
          return ["删除底库", "确定删除该底库?"];
        case "single":
          return ["删除人员", "确定删除该底库人员?"];
        case "batch":
          return ["批量删除", "确定删除该底库选中人员?"];
        default:
          return ["", ""];
      }
    },
  },
  methods: {
    handleRemoveCarPic(file, fileList) {
      console.log("删除文件", file, fileList);
      var index = fileList.findIndex(item => {
        if (item.uid == file.uid) {
          return true
        }
    handleDel() {
      if (this.delType == "single") {
        this.deleteThis();
      } else if (this.delType == "base") {
        this.deleteBase();
      } else if (this.delType == "batch") {
        this.deleteBatch();
      }
    },
    deleteBase() {
      let token =
        sessionStorage.getItem("loginedInfo") &&
        JSON.parse(sessionStorage.getItem("loginedInfo")).access_token;
      fetch(`/data/api-v/dbtable/deleteDBtablesById?id=${this.baseObject.id}`, {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
          Authorization: token,
        },
      })
      console.log("删除的索引", index)
      this.form.carUrls.splice(index, 1)
      console.log("删除后的fileList:", this.fileList)
        .then((res) => {
          return res.json();
        })
        .then((res) => {
          if (res.success) {
            this.$notify({
              type: "success",
              message: "底库删除成功!",
            });
          }
          this.$emit("onDelete");
        })
        .catch((err) => {
          this.$notify({
            type: "error",
            message: err,
          });
        });
    },
    handleRemoveCarPic(file, fileList) {
      var index = fileList.findIndex((item) => {
        if (item.uid == file.uid) {
          return true;
        }
      });
      this.form.carUrls.splice(index, 1);
    },
    isDisabled(item) {
      var flag = true;
      if (this.isShow("library:set")) {
        if (item.endTime == "") {
          flag = false;
        } else {
          flag = !this.$moment(new Date()).isBetween(
            item.startTime,
            item.endTime
          );
        }
      }
      return flag;
    },
    handleRemoveFacePic(file, fileList) {
      this.form.faceUrl.splice(0, 1)
      console.log("删除后的faceUrl:", this.fileList)
      this.form.faceUrl.splice(0, 1);
    },
    beforeUoload() {
    edit() {
      this.$emit("changeShow", this.baseObject, this.syncType);
    },
    // beforeUoload() {},
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    async uploadCar(param) {
      const fd = new FormData()
      console.log("文件参数:", param)
      fd.append('file', param.file)
      fd.append('picType', '0')
      console.log("参数:", fd)
      const fd = new FormData();
      fd.append("file", param.file);
      fd.append("picType", "0");
      let res = await request({
        method: 'post',
        method: "post",
        url: `/data/api-v/dbperson/fileupload`,
        data: fd
      })
      console.log("图片上传结果:", res.success)
        data: fd,
      });
      if (res.success) {
        this.form.carUrls.push({ url: "/httpImage/" + res.data.picUrl })
        console.log("carUrl:", this.form.carUrls)
        this.form.carUrls.push({ url: "/httpImage/" + res.data.picUrl });
      }
    },
    async uploadPerson(param) {
      const fd = new FormData()
      fd.append('file', param.file)
      fd.append('picType', '1')
      const fd = new FormData();
      fd.append("file", param.file);
      fd.append("picType", "1");
      let res = await request({
        method: 'post',
        method: "post",
        url: `/data/api-v/dbperson/fileupload`,
        data: fd
      })
        data: fd,
      });
      if (res.success) {
        this.form.faceUrl.push({ url: "/httpImage/" + res.data.picUrl })
        this.form.faceFeature = res.data.faceFeature
        console.log("faceUrl:", this.form.faceUrl)
        this.form.faceUrl.push({ url: "/httpImage/" + res.data.picUrl });
        this.form.faceFeature = res.data.faceFeature;
      }
    },
    addCar() {
      this.addDrawer = true
      this.addDrawer = true;
    },
    addBatch() {
      this.addBatchDrawer = true
      this.addBatchDrawer = true;
    },
    resetForm() {
    },
    resetForm() {},
    handleClose1(done) {
      this.form = {
      (this.form = {
        id: "",
        sex: "男",
        name: "",
@@ -638,7 +947,7 @@
        idCard: "",
        phoneNum: "",
        monitorLevel: "one",
        carUrls: [], //{url:"/httpImage/192.168.20.10:6701/818,56d0122c44f069"},{url:"/httpImage/192.168.20.10:6701/818,56d0122c44f069"}
        carUrls: [],
        faceUrl: [],
        faceFeature: "",
        carPicUrls: "",
@@ -648,107 +957,72 @@
        carBrand: "0",
        carNo: "",
        enable: 0,
        reserved: ""
      },
        done()
      // this.$confirm('确认关闭?')
      //   .then(_ => {
      //     done();
      //   })
      //   .catch(_ => {});
        reserved: "",
      }),
        done();
    },
    handleClose2(done) {
      done()
      // this.$confirm('确认关闭?')
      //   .then(_ => {
      //     done();
      //   })
      //   .catch(_ => {});
      done();
    },
    isShow(authority) {
      if (this.isAdmin) {
        return true
      } else if (
        this.buttonAuthority.indexOf(',' + authority + ',') > -1
      ) {
        return true
      } else {
        return false
      }
      return (
        this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
      );
    },
    toggleSelection(rows) {
      if (rows) {
        rows.forEach(row => {
        rows.forEach((row) => {
          this.$refs.multipleTable.toggleRowSelection(row);
        });
      } else {
        this.$refs.multipleTable.clearSelection();
      }
    },
    deleteThis(id) {
    deleteThis() {
      let token =
        sessionStorage.getItem("loginedInfo") &&
        JSON.parse(sessionStorage.getItem("loginedInfo")).access_token;
      this.$confirm("提示:确定删除该底库人员?", {
        center: true,
        cancelButtonClass: "comfirm-class-cancle",
        confirmButtonClass: "comfirm-class-sure"
      fetch(`/data/api-v/dbperson/deleteDbPersonById?id=${this.toDeleteId}`, {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
          Authorization: token,
        },
      })
        .then(_ => {
          fetch(`/data/api-v/dbperson/deleteDbPersonById/${id}`, {
            method: "POST",
            headers: {
              "Content-Type": "application/json",
              Authorization: token
            }
          })
            .then(res => {
              return res.json();
            })
            .then(data => {
              // console.log(data.data);
              if (data.success) {
                this.$notify({
                  type: "success",
                  message: "该人员删除成功!"
                });
              }
              this.getCarList();
            })
            .catch(err => {
              console.log(err);
            });
        .then((res) => {
          return res.json();
        })
        .catch(_ => { });
    },
    sayHello() {
      console.log("hello");
        .then((data) => {
          if (data.success) {
            this.$notify({
              type: "success",
              message: "该人员删除成功!",
            });
          }
          this.getCarList();
        })
        .catch((err) => {});
    },
    getUploadResult(result) {
      console.log(result, "上传的返回");
      this.uploadResult = result.data;
      this.dialogVisible = true;
      this.getCarList();
    },
    async getCarList() {
      // console.log("执行了刷新函数", this.BaseManageData.syncTables[0]);
      if (this.baseObject.id && this.baseObject.id !== undefined) {
        // console.log("底库id", this.baseObject.id);
        this.BaseManageData.tableId = this.baseObject.id;
        // this.BaseManageData.queryPersonList();
        this.setLoadSearch(this.BaseManageData.queryPersonList())
        this.setLoadSearch(this.BaseManageData.queryPersonList());
      }
    },
    changeDialog(data) {
      data.erFileList.map((item, index) => {
        this.$notify({
          type: "error",
          message: item.errorMsg.message
          message: item.errorMsg.message,
        });
      });
    },
    handleClose() {
      //this.getCarList();
      this.dialogFormVisible = false;
    },
    handleSelectionChange(val) {
@@ -762,31 +1036,27 @@
    handleClick(row) {
      this.form = row;
      // 这块儿后台的字典value值有问题,需要前端来回转
      this.form.carColor += ""
      this.form.carType += ""
      this.form.carBrand += ""
      console.log("this.form", this.form)
      this.form.carColor += "";
      this.form.carType += "";
      this.form.carBrand += "";
      this.addDrawer = true;
    },
    async submit() {
      this.$refs["formForEdit"].validate(async valid => {
        // console.log("通过验证", valid);
      this.$refs["formForEdit"].validate(async (valid) => {
        if (valid) {
          let { ...json } = this.form;
          delete (json["compareScore"])
          // console.log("修改的参数:", json);
          delete json["compareScore"];
          let res = await updateBasePerson(json);
          // console.log("保存了", res);
          if (res.success) {
            this.$notify({
              type: "success",
              message: "人员修改成功!"
              message: "人员修改成功!",
            });
            this.dialogFormVisible = false;
          } else {
            this.$notify({
              type: "error",
              message: "人员修改失败,请重试!!"
              message: "人员修改失败,请重试!!",
            });
          }
        } else {
@@ -799,7 +1069,7 @@
        title: "Confirm",
        content: "Bla bla ...",
        okText: "确认",
        cancelText: "取消"
        cancelText: "取消",
      });
    },
    async enable(item) {
@@ -813,17 +1083,17 @@
        phoneNum: item.phoneNum,
        monitorLevel: item.monitorLevel,
        personPicUrl: item.personPicUrl,
        reserved: item.reserved
        reserved: item.reserved,
      });
      if (res.success === true) {
      if (res.success) {
        this.$notify({
          type: "success",
          message: "底库人员成功变更生效状态!"
          message: "底库人员成功变更生效状态!",
        });
      } else {
        this.$notify({
          type: "error",
          message: "底库人员变更生效状态失败!"
          message: "底库人员变更生效状态失败!",
        });
      }
    },
@@ -834,14 +1104,26 @@
      this.$refs.uploadDrag && this.$refs.uploadDrag.uploadStart();
    },
    haveScore(row) {
      if (row.compareScore && row.compareScore !== "") {
        return true
      return row.compareScore && row.compareScore !== "";
    },
    async setEnable(item) {
      let res = await updateDbTableStatus({
        id: item.id,
        enable: item.enable,
      });
      if (res.success) {
        this.$notify({
          type: "success",
          message: "底库成功变更生效状态!",
        });
      } else {
        return false
        this.$notify({
          type: "error",
          message: "底库变更生效状态失败!",
        });
      }
    },
    async searchImgList(faceUrl, threshold) {
      // console.log("搜图参数", faceUrl, threshold);
      let json = {
        tableId: this.baseObject.id,
        page: this.current,
@@ -849,71 +1131,49 @@
        faceUrl: faceUrl,
        threshold: threshold,
        orderType: this.orderType,
        orderName: this.orderName
        orderName: this.orderName,
      };
      let res = await getPersonByPhoto(json);
      // console.log("列表查询", json);
      this.tableData = res.data.datalist;
      this.total = res.data.total;
      this.compare = true;
    },
    updateThreshold() { },
    // updateThreshold() {},
    async updateFace(param) {
      const fd = new FormData();
      fd.append("file", param.file);
      fd.append("id", this.form.id);
      // console.log("换脸了吗", fd);
      let res = await axios({
        method: "post",
        url: `/data/api-v/dbperson/updateFace`,
        headers: {
          'Authorization': sessionStorage.getItem('loginedInfo') && JSON.parse(sessionStorage.getItem('loginedInfo')).access_token
          Authorization:
            sessionStorage.getItem("loginedInfo") &&
            JSON.parse(sessionStorage.getItem("loginedInfo")).access_token,
        },
        data: fd
        data: fd,
      });
      if (res.data.success) {
        this.form.personPicUrl = res.data.data.personPicUrl;
        this.form.faceFeature = res.data.data.faceFeature;
      }
    },
    uploadSuccess() {
      console.log("换脸成功了");
    },
    uploadError() {
      console.log("换脸失败了");
    },
    deleteBatch() {
      // console.log('要删除的', this.selectedRowKeys.length)
      if (this.selectedRowKeys.length === 0) {
    async deleteBatch() {
      let ids = [];
      this.selectedRowKeys.map((item, index) => {
        ids.push(item.id);
      });
      let res = await deleteBasePersons(ids);
      if (res.success) {
        this.$notify({
          type: "warning",
          message: "请选择要删除的人员"
          type: "success",
          message: "删除成功!",
        });
        this.getCarList();
      } else {
        this.$confirm("提示:确定删除该底库选中人员?", {
          center: true,
          cancelButtonClass: "comfirm-class-cancle",
          confirmButtonClass: "comfirm-class-sure"
        }).then(async _ => {
          let ids = [];
          this.selectedRowKeys.map((item, index) => {
            ids.push(item.id);
          });
          // console.log('批量删除数组', ids)
          let res = await deleteBasePersons(ids);
          // console.log(res, '批量删除结果')
          if (res.success) {
            this.$notify({
              type: "success",
              message: "删除成功!"
            });
            this.getCarList();
          } else {
            this.$notify({
              type: "error",
              message: "删除失败!"
            });
          }
        this.$notify({
          type: "error",
          message: "删除失败!",
        });
      }
    },
@@ -921,7 +1181,6 @@
      await this.BaseManageData.querySyncTables();
      await this.BaseManageData.queryLocalTables();
      if (this.baseObject.id && this.baseObject.id !== undefined) {
        // console.log("one;", this.baseObject.id);
      } else if (
        this.BaseManageData.syncTables[0].id &&
        this.BaseManageData.syncTables[0].id !== undefined
@@ -933,136 +1192,143 @@
        this.BaseManageData.queryPersonList();
      }
    },
    handleRowStyle({ row, rowIndex }) {
      // console.log(row, rowIndex, "handleRowStyle");
      if (rowIndex === 0) {
        return "background:#222222;";
    askDelete(typ, id) {
      if (typ == "batch") {
        if (this.selectedRowKeys.length === 0) {
          this.$notify({
            type: "warning",
            message: "请选择要删除的人员",
          });
          return;
        }
      }
      this.askDeleteShow = true;
      this.delType = typ;
      id && (this.toDeleteId = id);
    },
    blackAngWhite() {
      if (this.BaseManageData.selectBlacks.length > 0) {
        for (let i = 0; i < this.BaseManageData.whiteList.length; i++) {
          //this.VideoPhotoData.whiteList[i].disabled = true
          this.$set(this.BaseManageData.whiteList[i], 'disabled', true)
          this.$set(this.BaseManageData.whiteList[i], "disabled", true);
        }
      }
      if (this.BaseManageData.selectBlacks.length == 0) {
        for (let i = 0; i < this.BaseManageData.whiteList.length; i++) {
          //this.VideoPhotoData.whiteList[i].disabled = false
          this.$set(this.BaseManageData.whiteList[i], 'disabled', false)
          this.$set(this.BaseManageData.whiteList[i], "disabled", false);
        }
      }
      if (this.BaseManageData.selectWhites.length > 0) {
        for (let i = 0; i < this.BaseManageData.blackList.length; i++) {
          // this.VideoPhotoData.blackList[i].disabled = true
          this.$set(this.BaseManageData.blackList[i], 'disabled', true)
          // this.VideoPhotoData.blackList[i].disabled = true
          this.$set(this.BaseManageData.blackList[i], "disabled", true);
        }
      }
      if (this.BaseManageData.selectWhites.length == 0) {
        for (let i = 0; i < this.BaseManageData.blackList.length; i++) {
          //this.VideoPhotoData.blackList[i].disabled = false
          this.$set(this.BaseManageData.blackList[i], 'disabled', false)
          //this.VideoPhotoData.blackList[i].disabled = false
          this.$set(this.BaseManageData.blackList[i], "disabled", false);
        }
      }
    },
    tosearch(item) {
      // console.log("跳转地址", item)
      var curWwwPath = window.document.location.href;
      var pathname = window.document.location.pathname;
      var pos = curWwwPath.indexOf(pathname);
      var localhostPath = curWwwPath.substring(0, pos); //ip+port
      var href = localhostPath + "/Layout/Searching"
      let captureId = item.id == "" ? item.personId : item.id
      var url = item.personPicUrl ? item.personPicUrl : item.personPicUrl
      // console.log("跳转地址",href,"url",url)
      var compType = 0
      window.open(href + '?showType=findByPic&targetId=' + captureId + '&picSmUrl=' + url + '&compType=' + compType)
      var href = localhostPath + "/Layout/Searching";
      let captureId = item.id == "" ? item.personId : item.id;
      var url = item.personPicUrl ? item.personPicUrl : item.personPicUrl;
      var compType = 0;
      window.open(
        href +
          "?showType=findByPic&targetId=" +
          captureId +
          "&picSmUrl=" +
          url +
          "&compType=" +
          compType
      );
    },
    async platesBatch() {
      var temp = this.plates.split(/[\n,]/g);
      var reg = /[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]{1}[A-Z]{1}[A-Z0-9]{5,6}/;
      for (let i = 0; i < temp.length; i++) {
        if (temp[i] == '') {
          temp.splice(i, 1)
          i--
        if (temp[i] == "") {
          temp.splice(i, 1);
          i--;
        } else {
          if (!reg.test(temp[i])) {
            this.$notify({
              type: "error",
              message: "车牌号:" + temp[i] + "不符合规则,请检查!"
            })
            return
              message: "车牌号:" + temp[i] + "不符合规则,请检查!",
            });
            return;
          }
        }
      }
      if (temp.length == 0) {
        this.$notify({
          type: 'error',
          message: '请输入车牌号',
        })
        return
          type: "error",
          message: "请输入车牌号",
        });
        return;
      }
      let param = {
        tableId: this.baseObject.id,
        carNos: temp
      }
      let resp = await plateBatch(param)
      console.log("resp:", resp)
        carNos: temp,
      };
      let resp = await plateBatch(param);
      if (resp && resp.success) {
        // 刷新car列表
        this.$notify({
          type: "success",
          message: resp.msg
          message: resp.msg,
        });
        this.getCarList();
        this.addBatchDrawer = false;
      } else {
        this.$notify({
          type: "error",
          message: resp.msg
          message: resp.msg,
        });
      }
    },
    async submitCar() {
      this.$refs["formForCar"].validate(async valid => {
        // console.log("通过验证", valid);
      this.$refs["formForCar"].validate(async (valid) => {
        if (valid) {
          let { ...json } = this.form;
          for (let index in json.carUrls) {
            if (index == 0) {
              json.carPicUrls += json.carUrls[index].url.substring(11)
              json.carPicUrls += json.carUrls[index].url.substring(11);
            } else {
              json.carPicUrls += ";" + json.carUrls[index].url.substring(11)
              json.carPicUrls += ";" + json.carUrls[index].url.substring(11);
            }
          }
          json.carColor = parseInt(json.carColor)
          json.carType = parseInt(json.carType)
          json.carBrand = parseInt(json.carBrand)
          json.personPicUrl = json.faceUrl[0].url.substring(11)
          json.tableId = this.baseObject.id
          console.log("表单的json化:", json)
          delete (json["compareScore"])
          // console.log("修改的参数:", json);
          let res
          json.carColor = parseInt(json.carColor);
          json.carType = parseInt(json.carType);
          json.carBrand = parseInt(json.carBrand);
          json.personPicUrl = json.faceUrl[0].url.substring(11);
          json.tableId = this.baseObject.id;
          delete json["compareScore"];
          let res;
          if (json.id == "") {
            res = await addBaseCar(json);
          } else {
            res = await updateBaseCar(json);
          }
          console.log("保存了", res);
          if (res.success) {
            this.$notify({
              type: "success",
              message: res.data.msg
              message: res.data.msg,
            });
            this.getCarList();
            this.addDrawer = false;
          } else {
            this.$notify({
              type: "error",
              message: res.data.msg
              message: res.data.msg,
            });
          }
        } else {
@@ -1071,103 +1337,109 @@
      });
    },
    copyClick(row) {
      this.BaseManageData.personId = row.id
      this.copyVisiabled = true
      this.BaseManageData.personId = row.id;
      this.copyVisiabled = true;
    },
    moveClick(row) {
      this.BaseManageData.personId = row.id
      this.moveVisiabled = true
      this.BaseManageData.personId = row.id;
      this.moveVisiabled = true;
    },
    copyClose() {
      this.copyVisiabled = false
      this.BaseManageData.personId = ""
      this.BaseManageData.selectBlacks = []
      this.BaseManageData.selectWhites = []
      this.copyVisiabled = false;
      this.BaseManageData.personId = "";
      this.BaseManageData.selectBlacks = [];
      this.BaseManageData.selectWhites = [];
    },
    moveClose() {
      this.moveVisiabled = false
      this.BaseManageData.personId = ""
      this.BaseManageData.selectBlacks = []
      this.BaseManageData.selectWhites = []
      this.moveVisiabled = false;
      this.BaseManageData.personId = "";
      this.BaseManageData.selectBlacks = [];
      this.BaseManageData.selectWhites = [];
    },
    copySubmit() {
      if (this.BaseManageData.selectBlacks.length === 0 && this.BaseManageData.selectWhites.length === 0) {
      if (
        this.BaseManageData.selectBlacks.length === 0 &&
        this.BaseManageData.selectWhites.length === 0
      ) {
        this.$notify({
          title: "注意",
          message: "请选择要复制到的库",
          type: "warning"
        })
        return
          type: "warning",
        });
        return;
      }
      var resp = this.BaseManageData.copyTo()
      resp.then(data => {
      var resp = this.BaseManageData.copyTo();
      resp.then((data) => {
        if (data.success) {
          this.$notify({
            title: "成功",
            message: data.data,
            type: "success"
          })
            type: "success",
          });
        } else {
          this.$notify({
            title: "失败",
            message: data.data,
            type: "error"
          })
            type: "error",
          });
        }
      })
      this.copyVisiabled = false
      this.BaseManageData.personId = ""
      this.BaseManageData.selectBlacks = []
      this.BaseManageData.selectWhites = []
      });
      this.copyVisiabled = false;
      this.BaseManageData.personId = "";
      this.BaseManageData.selectBlacks = [];
      this.BaseManageData.selectWhites = [];
    },
    getDataName: (dataList, key) => {
      let name = ""
      let name = "";
      if (Array.isArray(dataList) && dataList.length > 0) {
        for (let i = 0; i < dataList.length; i++) {
          if (dataList[i].value == key) {
            name = dataList[i].name
            name = dataList[i].name;
          }
        }
      }
      return name
      return name;
    },
    moveSubmit() {
      if (this.BaseManageData.selectBlacks.length === 0 && this.BaseManageData.selectWhites.length === 0) {
      if (
        this.BaseManageData.selectBlacks.length === 0 &&
        this.BaseManageData.selectWhites.length === 0
      ) {
        this.$notify({
          title: "注意",
          message: "请选择要移动到的库",
          type: "warning"
        })
        return
          type: "warning",
        });
        return;
      }
      var resp = this.BaseManageData.moveTo()
      resp.then(data => {
      var resp = this.BaseManageData.moveTo();
      resp.then((data) => {
        if (data.success) {
          this.$notify({
            title: "成功",
            message: data.data,
            type: "success"
          })
            type: "success",
          });
        } else {
          this.$notify({
            title: "失败",
            message: data.data,
            type: "error"
          })
            type: "error",
          });
        }
        this.moveVisiabled = false
        this.BaseManageData.personId = ""
        this.BaseManageData.selectBlacks = []
        this.BaseManageData.selectWhites = []
        this.BaseManageData.queryPersonList()
      })
        this.moveVisiabled = false;
        this.BaseManageData.personId = "";
        this.BaseManageData.selectBlacks = [];
        this.BaseManageData.selectWhites = [];
        this.BaseManageData.queryPersonList();
      });
    },
    setLoadSearch(fn) {
      this.AuthData.setLoading("multipleTable", this);
      fn.then(_ => {
      fn.then((_) => {
        this.AuthData.closeLoad();
      })
    }
      });
    },
  },
  mounted() {
    this.getCarList();
@@ -1179,7 +1451,6 @@
    window.onresize = () => {
      let width = document.body.clientWidth;
      let height = document.body.clientHeight;
      // console.log(width, height, "窗口变化对比", this.oldWidth, this.oldHeight);
      if (width !== this.oldWidth && width < 1750) {
      }
      this.$nextTick(() => {
@@ -1196,19 +1467,18 @@
  watch: {
    baseObject: {
      handler(newVal, oldVal) {
        // console.log(newVal, "监听baseObject");
        this.BaseManageData.cleanData();
        this.getCarList();
      },
      deep: true
      deep: true,
    },
    "BaseManageData.selectBlacks": function (value) {
      this.blackAngWhite()
      this.blackAngWhite();
    },
    "BaseManageData.selectWhites": function (value) {
      this.blackAngWhite()
      this.blackAngWhite();
    },
  }
  },
};
</script>
<style lang="scss">
@@ -1236,9 +1506,6 @@
  max-width: none;
  font-size: 14px;
  color: #606266;
  thead {
    background: green !important;
  }
}
.avatar-uploader:hover {
  .mask1 {
@@ -1247,8 +1514,8 @@
}
.mask1 {
  position: absolute;
  width: 150px;
  height: 150px;
  width: 100px;
  height: 100px;
  background: rgba(0, 0, 0, 0.35);
  backdrop-filter: blur(1px) brightness(100%);
  text-align: center;
@@ -1257,8 +1524,7 @@
  display: none;
}
.table-parent {
  // position: relative;
  height: 90%;
  height: 100%;
  overflow: visible !important;
  .picture {
    .el-carousel__item {
@@ -1291,16 +1557,74 @@
      height: 25px;
    }
  }
  .el-drawer.ltr,
  .el-drawer.rtl {
    width: 27% !important;
    height: 90%;
    top: 9%;
  .el-drawer.add-car {
    width: 380px;
    .el-drawer__header {
      border-bottom: 2px solid #eee;
      padding-bottom: 10px;
      font-size: 16px;
      margin-bottom: 0px;
      margin-bottom: 0;
      padding: 20px;
      box-shadow: 0px 2px 4px rgb(0 0 0 / 8%);
      font-size: 14px;
    }
    .el-drawer__body {
      .uploadLine {
        padding-left: 10px;
        .el-upload-list--picture-card .el-upload-list__item {
          background-color: #fff;
          border: 2px solid #d4d6d9;
          border-radius: 8px;
          width: 100px;
          height: 100px;
        }
        .el-upload--picture-card {
          background-color: #fff;
          border: 2px solid #d4d6d9;
          border-radius: 8px;
          width: 100px;
          height: 100px;
          line-height: 100px;
        }
        .car-text {
          color: #999999;
          font-size: 14px;
          line-height: 20px;
          text-align: left;
          margin-bottom: 5px;
        }
        .car-picture {
          margin-bottom: 20px;
          & > div {
            display: flex;
          }
        }
        .person-picture {
          margin-bottom: 20px;
          & > div {
            display: flex;
          }
        }
      }
      .el-select {
        width: 100%;
      }
      .el-radio-group {
        width: 100%;
        text-align: left;
      }
      .el-form-item {
        margin-bottom: 18px;
      }
    }
  }
  .el-drawer.upload-pai {
    width: 380px;
    .el-drawer__header {
      margin-bottom: 0;
      padding: 20px;
      box-shadow: 0px 2px 4px rgb(0 0 0 / 8%);
      font-size: 14px;
    }
    .el-drawer__body {
    }
  }
}
@@ -1313,7 +1637,38 @@
.border-tabl {
  border: 1px solid #ebeef5;
  border-bottom: none;
  // border-bottom: none;
  height: calc(100% - 100px);
  overflow: auto;
  .tableBox {
    border: none;
    &::before,
    &::after {
      display: none;
    }
    .el-table--border .el-table__cell,
    .el-table__body-wrapper
      .el-table--border.is-scrolling-left
      ~ .el-table__fixed {
      border-right: none;
    }
    td {
      border: none;
    }
  }
  .head-search {
    .desc {
      min-width: fit-content;
      margin-right: 20px;
    }
    .right-group {
      .iconshangchuanchepai-09:hover,
      .icontianjiacheliang-09:hover {
        border: 1px solid var(--colorCard);
        background: var(--colorCard);
        color: #fff;
      }
    }
  }
}
.el-dialog__header {
  padding: 20px 0 10px;
@@ -1333,9 +1688,9 @@
  font-size: 14px;
  word-break: break-all;
}
.dialog-footer {
  text-align: center;
}
// .dialog-footer {
//   text-align: center;
// }
.comfirm-class-sure {
  background: #f53d3d;
  border-radius: 2px;
@@ -1365,61 +1720,7 @@
  padding-left: 8px !important;
  padding-right: 0px !important;
}
.addToBase1 {
  width: 98%;
  height: 350px;
  position: relative;
  .topLabel {
    margin-top: 20px;
    height: 40px;
    border-bottom: 1px solid #eee;
    font-family: PingFangSC-Medium;
    font-size: 20px;
    font-weight: 600;
    line-height: 1rem;
    color: #222222;
    text-align: left;
    margin-left: 15px;
  }
  .items {
    width: 100%;
    height: auto;
    max-height: 35%;
    overflow-y: auto;
    margin: 20px 0px;
    .lable {
      width: 15%;
      margin-top: 10px;
      float: left;
      //font-family: PingFangSC-Medium;
      font-size: 14px;
      font-weight: 600;
    }
    .baseList {
      width: 85%;
      height: 100%;
      float: left;
      .base {
        width: calc(33% - 10px);
        padding: 0px 5px;
        line-height: 30px;
        float: left;
        text-align: left;
        font-size: 12px !important;
        .el-checkbox {
          width: 100%;
          display: block;
          overflow: hidden;
          text-overflow: ellipsis;
          white-space: nowrap;
          .el-checkbox__label {
            display: inline !important;
          }
        }
      }
    }
  }
}
.copy,
.move {
  .el-dialog__body {
@@ -1428,100 +1729,40 @@
}
.avatar-uploader {
  max-width: 150px;
  min-width: 150px;
  min-height: 152px;
  max-width: 100px;
  min-width: 100px;
  min-height: 100px;
  border: 1px solid #eee;
}
.inputWidth {
  width: 270px !important;
}
.rightInputWidth {
  max-width: 270px;
}
.el-drawer.ltr,
.el-drawer.rtl {
  min-width: 450px;
  width: 25% !important;
  height: 90%;
  min-height: 1100px;
  top: 9%;
  .el-drawer__header {
    border-bottom: 2px solid #eee;
    padding-bottom: 10px;
    font-size: 16px;
    margin-bottom: 0px;
    :focus {
      outline: 0;
.el-popover.el-popper.popper-caozuo1 {
  box-shadow: 0px 0px 10px rgb(0 0 0 / 12%);
  border-radius: 8px;
  padding: 0;
  padding-right: 1px;
  & > span {
    width: 32px;
    height: 32px;
    cursor: pointer;
    display: inline-block;
    text-align: center;
    line-height: 32px;
    border-radius: 8px;
    font-size: 24px;
    .iconfont {
      font-size: 24px;
    }
    .iconshanchu-09 {
      color: #fe6d68;
    }
  }
}
.drawerSpace {
  height: 900px;
  margin-bottom: 30px;
  overflow-y: scroll;
  .uploadLine {
    height: 280px;
    .car-picture {
      float: left;
      margin: 15px;
      border: 1px solid #eee;
      width: 280px;
      height: 260px;
      overflow: hidden;
      .el-upload--picture-card {
        margin: 10px;
        width: 110px;
        height: 110px;
        line-height: 35px;
      }
      .el-upload-list--picture-card {
        .el-upload-list__item {
          margin: 10px;
          width: 110px;
          height: 110px;
          img {
            object-fit: contain;
          }
        }
        .el-progress--circle {
          width: 30px !important;
        }
      }
    }
    .person-picture {
      float: left;
      margin-top: 15px;
      width: 120px;
      height: 120px;
      overflow: hidden;
      .el-upload--picture-card {
        width: 110px;
        height: 110px;
        line-height: 35px;
      }
      .el-upload-list__item {
        margin: 10px;
        width: 110px;
        height: 110px;
        img {
          object-fit: contain;
        }
      }
    }
  & > span:hover {
    background: var(--colorCard);
    color: #fff;
  }
  .plateAttach {
    width: calc(100% -40px);
    height: calc(100% -40px);
    padding: 20px;
    p {
      margin-top: 20px;
      width: 400px;
      line-height: 20px;
  & > .del-wrap:hover {
    background: #fe6d68;
    .iconshanchu-09 {
      color: #fff;
    }
  }
}