ZZJ
2021-12-23 f2286cfd8b9a92da11a158a73258436dfb3969b8
Merge branch 'bhomebus' of http://192.168.5.5:10010/r/web/vue-smart-ai into bhomebus
3个文件已添加
12个文件已修改
1496 ■■■■ 已修改文件
public/images/library/个人信息.png 补丁 | 查看 | 原始文档 | blame | 历史
public/images/library/同步库2.png 补丁 | 查看 | 原始文档 | blame | 历史
public/images/library/本地库2.png 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/searching/UploadIcon.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/ai/index/App.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/ai/index/detail.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/desktop/index/components/DFrame.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/components/addBase.vue 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/components/baseList.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/components/carList.vue 477 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/components/personList.vue 471 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/components/upload.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/library/index/App.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/settings/index/index.vue 246 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/images/library/¸öÈËÐÅÏ¢.png
public/images/library/ͬ²½¿â2.png
public/images/library/±¾µØ¿â2.png
public/index.html
@@ -384,29 +384,30 @@
      border-color: #3D68E1 !important;
    }
    .el-button--primary:hover,
    /* .el-button--primary:hover,
    .el-button--primary:focus {
      background: #2249b4 !important;
      border-color: #2249b4 !important;
    }
    } */
    /* .el-input>input,.el-date-editor.el-input__inner{
      border-color: #dcdfe6!important;
    } */
    /* .el-date-editor.el-input__inner:focus{
      border-color: #2249b4!important;
    } */
    /* .el-input>input:focus{
      border-color: #3D68E1!important;
    }
    .el-input__inner:focus {
      outline: none!important;
      border-color: #3D68E1!important;
    } */
    .el-select-dropdown__list {
      text-align: left;
    }
    .el-notification {
    padding: 17px 26px 17px 13px !important;
    align-items: center;
}
.el-notification .el-notification__content {
    line-height: 24px;
  margin: 0;
}
.el-notification .el-notification__closeBtn {
    top: 21px;
}
    .el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before {
      margin-left: -8px !important;
      margin-right: 0;
src/components/searching/UploadIcon.vue
@@ -1,7 +1,6 @@
<template>
  <div class="uploadIconBox">
    <i class="iconfont iconyitusousuo-09" @click="showUpload"></i>
    <!-- <i class="el-input__icon el-icon-camera-solid" @click="showUpload"></i> -->
    <SearchLeft v-show="visibile" @closeUpload="showUpload"></SearchLeft>
  </div>
</template>
@@ -30,6 +29,10 @@
    font-size: 24px;
    color: rgb(209, 209, 209);
    cursor: pointer;
    transition: 0.5s;
  }
  i:hover{
    color:var(--colorCard);
  }
  .left-section1 {
    border-radius: 8px;
src/pages/ai/index/App.vue
@@ -1402,7 +1402,7 @@
                min-width: 100px;
                text-align: end;
                position: absolute;
                right: 0;
                right: 0;    width: 120px;
                margin-top: 2px;
              }
              .rocket-icon {
src/pages/ai/index/detail.vue
@@ -287,8 +287,8 @@
      installedApps: [],
      storeApps: [],
      installFile: {},
      appUpgreading: true,
      sdkUpgreading: true,
      appUpgreading: false,
      sdkUpgreading: false,
      autoRefresh: true,
      productDetailVisible: false,
      isUpgrading: false,
@@ -516,7 +516,6 @@
          );
          if (obj.progressMsg !== "" && obj.progressMsg !== "已安装") {
            obj.upgradeLoading = true;
            this.appUpgreading = true;
          }
@@ -726,7 +725,6 @@
          );
          if (obj.progressMsg !== "" && obj.progressMsg !== "已安装") {
            obj.upgradeLoading = true;
            this.sdkUpgreading = true;
          }
@@ -859,21 +857,20 @@
    inputBlur(item) {
      this.$set(item, "isEdit", false);
    },
    autoRefreshAppAndSdkState() {
      // å…³é—­åŽé€€å‡º
     autoRefreshAppAndSdkState() {
      this.getAllApps();
      this.getAllSdk();
      if (!this.autoRefresh) {
        return;
      }
      if (this.appUpgreading) {
        this.getAllApps();
      }
      if (this.sdkUpgreading) {
        this.getAllSdk();
      }
      let _this = this;
      setTimeout(() => {
        _this.autoRefreshAppAndSdkState();
      }, 500);
        if (this.appUpgreading) {
          this.getAllApps();
        }
        if (this.sdkUpgreading) {
          this.getAllSdk();
        }
      }, 1000);
    },
  },
};
src/pages/desktop/index/components/DFrame.vue
@@ -379,7 +379,7 @@
.d-frame-title-content {
  line-height: 30px;
  text-align: center;
  background: #eeeeee;
  background: #ffffff;
}
.d-frame-title-content img {
src/pages/library/components/addBase.vue
@@ -56,6 +56,7 @@
            <el-col :span="11" class>
              <el-date-picker
                size="small"
                popper-class="popper-add"
                type="datetime"
                placeholder="选择日期"
                value-format="yyyy-MM-dd HH:mm:ss"
@@ -63,13 +64,6 @@
                :picker-options="pickerOptions"
                style="width: 100%"
              ></el-date-picker>
              <!-- <el-checkbox
                v-model="foreverChecked"
                @change="forever"
                class="check-css"
                >永久有效</el-checkbox
              > -->
              <!-- <el-radio v-model="foreverChecked" label="1">备选项</el-radio> -->
            </el-col>
            <el-col :span="2" class="text-center pick-time">
              <span>-</span>
@@ -78,6 +72,7 @@
              <el-date-picker
                size="small"
                class="end-time-pick"
                popper-class="popper-add"
                type="datetime"
                :placeholder="foreverChecked ? '永久有效' : '选择日期'"
                :disabled="foreverChecked"
@@ -164,16 +159,6 @@
          </el-form-item>
        </el-col>
      </el-row>
      <!-- <el-row>
        <el-col :span="7" :offset="1">
          <el-form-item label="是否同步" label-width="80px" style="width:100%;text-align:left" required>
            <el-radio-group v-model="form.isSync" class>
              <el-radio label="1">是</el-radio>
              <el-radio label="0">否</el-radio>
            </el-radio-group>
          </el-form-item>
        </el-col>
      </el-row>-->
      <el-row class="footer">
        <el-button
          type="info"
@@ -228,9 +213,9 @@
        },
      },
      rules: {
        tableName: [{ required: true, message: "底库名称不能为空" }],
        tableName: [{ required: true, message: "底库名称不能为空"}],
        tableType: [{ required: true, message: "底库类型不能为空" }],
        bwType: [{ required: true, message: "黑白名单必选" }],
        bwType: [{ required: true, message: "黑白名单必选"}],
        startTime: [
          { required: !this.foreverChecked, message: "请选择起始时间" },
        ],
@@ -305,7 +290,6 @@
        // id不为空,修改底库
        this.$refs[formName].validate(async (valid) => {
          if (valid) {
            // const { ...json } = this.form
            let res = await updateBase({
              analyServerId: this.form.analyServerId,
              tableName: this.form.tableName,
@@ -390,11 +374,7 @@
    init() {
      if (Object.keys(this.baseObject).length > 3) {
        this.form = this.baseObject;
        if (!this.form.endTime) {
          this.foreverChecked = true;
        } else {
          this.foreverChecked = false;
        }
        this.foreverChecked = !this.form.endTime
      } else {
        this.$refs.baseForm.resetFields();
      }
@@ -414,11 +394,7 @@
      return new Date(dateArray[0], dateArray[1] - 1, dateArray[2]);
    },
    isEmpty(str) {
      if (!str || str === undefined || str === null) {
        return true;
      } else {
        return false;
      }
        return !str || str === undefined || str === null
    },
    dateCompare(dateString, compareDateString) {
      // dateString:当前时间
@@ -453,6 +429,58 @@
};
</script>
<style lang="scss">
.el-date-picker.el-popper.popper-add {
  border-radius: 8px;
  .el-input--small .el-input__inner {
    border: 1px solid #d4d5d8;
    border-radius: 16px;
  }
  .el-date-range-picker__time-header {
    border-bottom: none;
  }
  .el-picker-panel__footer {
    border-top: none;
    text-align: center;
    padding-bottom: 10px;
    border-radius: inherit;
  }
  .el-date-range-picker .el-picker-panel__content {
    margin: 0;
    padding: 5px 15px;
  }
  .el-date-picker__time-header {
    border-bottom: none;
  }
  .el-date-picker__header {
    margin-bottom: 0;
  }
  .el-picker-panel__content {
    margin-top: 0;
  }
  .el-button--text {
    color: #999999;
    background: #fff;
    padding: 9px 37px;
    font-size: 14px;
    border: 1px solid #999999;
    border-radius: 18px;
  }
  .el-date-table td.start-date span,
  .el-date-table td.end-date span {
    background-color: var(--colorCard);
  }
  .el-date-table td.in-range div {
    background-color: var(--colorCard) 17;
  }
  .el-button--default {
    background: var(--colorCard);
    padding: 9px 37px;
    color: #fff;
    border: 1px solidvar(--colorCard);
    border-radius: 18px;
    font-size: 14px;
  }
}
.add-base-c {
  background: #ffffff;
  border-radius: 24px;
@@ -480,6 +508,7 @@
  }
  .add-base-form {
    padding: 30px 20px;
    .el-form-item__label {
      color: #999999;
    }
@@ -498,7 +527,7 @@
        background: var(--colorCard) !important;
        padding: 9px 37px;
        color: #fff;
        border: 1px solidvar(--colorCard) !important;
        border: 1px solid var(--colorCard) !important;
        border-radius: 18px;
        font-size: 14px;
        width: 150px;
@@ -516,7 +545,6 @@
    }
    .end-time-pick.is-disabled .el-input__inner {
      background-color: #fff;
      // border-color: #dfe4ed;
      cursor: not-allowed;
    }
    .el-form-item__content {
@@ -532,9 +560,6 @@
    .end-time-pick.is-disabled .el-input__inner::placeholder {
      color: #606266;
    }
    // .el-date-editor .el-input__inner {
    //   text-align: center;
    // }
    .el-select-dropdown__item.selected {
      color: var(--colorCard);
    }
@@ -551,8 +576,8 @@
    }
    .el-select-dropdown {
      border-radius: 8px;
      box-shadow: 0px 0px 8px rgb(0 0 0 / 16%);    left: 0px !important;
      box-shadow: 0px 0px 8px rgb(0 0 0 / 16%);
      left: 0px !important;
    }
    .el-popper[x-placement^="bottom"] .popper__arrow {
      top: -7px;
@@ -598,10 +623,6 @@
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}
// .el-radio__input.is-checked .el-radio__inner {
//   border-color: #3d68e1;
//   background: #3d68e1;
// }
.save {
  background: var(--colorCard);
  border-radius: 2px;
src/pages/library/components/baseList.vue
@@ -6,14 +6,8 @@
    <el-collapse v-model="activeNames">
      <el-collapse-item name="1" class="el-collapse-item__wrap">
        <template slot="title">
          <span
            :class="
              title === '同步库'
                ? 'iconfont icontongbuku_v'
                : 'iconfont iconbendiku_v'
            "
            style="font-size: 32px"
          ></span>
          <img v-if="title === '同步库'" src="/images/library/同步库2.png" alt="" srcset="">
          <img v-else src="/images/library/本地库2.png" alt="" srcset="">
          <span class="m5">{{ title }}</span>
          <span
            class="iconfont icontianjiaku-09"
@@ -62,6 +56,7 @@
            
              <div
                class="status-dot"
                :class="item.enable == 1 ?'status-dot-active':''"
                :style="item.enable == 1 ? { background: '#4E94FF' } : {}"
              ></div>
            </el-col>
@@ -85,7 +80,7 @@
      </el-collapse-item>
      <el-collapse-item name="2" class="el-collapse-item__wrap">
        <template slot="title">
          <span class="iconfont iconbendiku_v" style="font-size: 32px"></span>
          <img src="/images/library/本地库2.png" alt="" srcset="">
          <span class="m5">{{ titleB }}</span>
          <span
            class="iconfont icontianjiaku-09"
@@ -131,6 +126,7 @@
           
              <div
                class="status-dot"
                :class="item.enable == 1 ?'status-dot-active':''"
                :style="item.enable == 1 ? { background: '#4E94FF' } : {}"
              ></div>
            </el-col>
@@ -148,9 +144,6 @@
              <div class="time-end">
                {{ item.endTime ? item.endTime : "永久有效" }}
              </div>
              <!-- {{ item.startTime }}~{{
                item.endTime ? item.endTime : "永久有效"
              }} -->
            </el-col>
          </el-row>
        </div>
@@ -189,13 +182,9 @@
  },
  methods: {
    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
      );
    },
    async init() {
      await this.BaseManageData.querySyncTables();
@@ -364,7 +353,7 @@
    .time-end {
      color: #e9e9e9;
    }
    .status-dot {
    .status-dot-active {
      background: #fff !important;
    }
  }
src/pages/library/components/carList.vue
@@ -12,7 +12,7 @@
            >{{ this.baseObject.bwType === "1" ? "黑名单" : "白名单" }}</span
          >
          <span class="ok-time"
            >有效时间:{{ this.baseObject.startTime }}--{{
            >有效时间:{{ this.baseObject.startTime }} -- {{
              this.baseObject.endTime ? this.baseObject.endTime : "永久有效"
            }}</span
          >
@@ -31,7 +31,8 @@
            @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"
@@ -297,8 +298,7 @@
        @current-change="refrash"
        :current-page="BaseManageData.page"
        :page-size="BaseManageData.size"
        style="margin-top: 10px;"
        layout="total,sizes,prev,pager,next,jumper"
        style="margin-top: 10px"
        :total="BaseManageData.total"
      ></el-pagination>
    </div>
@@ -510,134 +510,148 @@
      title="车辆信息"
      :modal="false"
      :destroy-on-close="true"
      :append-to-body="true"
      custom-class="add-car"
      :visible.sync="addDrawer"
      :direction="direction"
      :before-close="handleClose1"
    >
      <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 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>
        <el-form
          ref="formForCar"
          :model="form"
          label-width="100px"
          style="margin-top: 20px; margin-bottom: 50px"
          :rule="rules"
        <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-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>
        <el-button
          size="small"
          class="cancel-btn"
          @click="resetForm"
          type="info"
          >取 æ¶ˆ</el-button
        >
      </div>
    </el-drawer>
    <el-drawer
      title="上传车牌"
      :modal="false"
      :append-to-body="true"
      :visible.sync="addBatchDrawer"
      :direction="direction"
      custom-class="upload-pai"
      :before-close="handleClose2"
    >
      <div class="drawerSpace">
@@ -652,14 +666,30 @@
          <p>
            è½¦ç‰Œå·ä»¥é€—号或回车键隔开,单次最多支持100条上传,例如:京YAB123,京F34Y87
          </p>
          <el-button
          <!-- <el-button
            type="primary"
            @click="platesBatch"
            style="margin-left: 210px"
            >保存</el-button
          >
          <el-button @click="resetForm('ruleForm')">取消</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>
@@ -707,11 +737,6 @@
          url: "group2/M00/0A/D7/wKgBnFyjH0-AUE5eAAC8hSMP2Yw110.jpg",
        },
      ],
      // provinces: [
      //   { name: "京", value: 1 },
      //   { name: "æ´¥", value: 2 },
      //   { name: "冀", value: 3 },
      // ],
      copyVisiabled: false,
      moveVisiabled: false,
      buttonAuthority: sessionStorage.getItem("buttonAuthoritys") || [],
@@ -746,13 +771,11 @@
        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: [],
      oldWidth: "",
@@ -928,13 +951,9 @@
      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) {
@@ -970,7 +989,6 @@
        })
        .catch((err) => {});
    },
    // sayHello() {},
    getUploadResult(result) {
      this.uploadResult = result.data;
      this.dialogVisible = true;
@@ -1075,7 +1093,6 @@
      return row.compareScore && row.compareScore !== "";
    },
    async setEnable(item) {
      debugger;
      let res = await updateDbTableStatus({
        id: item.id,
        enable: item.enable,
@@ -1475,9 +1492,6 @@
  max-width: none;
  font-size: 14px;
  color: #606266;
  thead {
    background: green !important;
  }
}
.avatar-uploader:hover {
  .mask1 {
@@ -1529,16 +1543,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 {
    }
  }
}
@@ -1572,9 +1644,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;
@@ -1617,98 +1689,5 @@
  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;
    }
  }
}
.drawerSpace {
  height: calc(100% - 140px);
  box-sizing: border-box;
  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;
        }
      }
    }
  }
  .plateAttach {
    width: calc(100% - 40px);
    height: calc(100% - 40px);
    padding: 20px;
    p {
      margin-top: 20px;
      width: 400px;
      line-height: 20px;
    }
  }
}
</style>
src/pages/library/components/personList.vue
@@ -12,7 +12,8 @@
            >{{ this.baseObject.bwType === "1" ? "黑名单" : "白名单" }}</span
          >
          <span class="ok-time"
            >有效时间:{{ this.baseObject.startTime }}--{{
            >有效时间:{{ this.baseObject.startTime }} --
            {{
              this.baseObject.endTime ? this.baseObject.endTime : "永久有效"
            }}</span
          >
@@ -31,7 +32,8 @@
            @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"
@@ -110,7 +112,9 @@
        tooltip-effect="dark"
        style="width: 100%; overflow: auto"
        :fit="true"
        row-class-name="hover-row"
        cell-class-name="cell-classname"
        @row-click="pickRow"
        :default-sort="{ prop: 'createTime', order: 'descending' }"
        @selection-change="handleSelectionChange"
        :header-cell-style="{
@@ -120,16 +124,8 @@
          borderBottom: 'none',
        }"
      >
        <el-table-column type="selection" width="30"></el-table-column>
        <!-- <el-table-column label="序号" width="60" sortable align="center">
          <template slot-scope="scope">{{ scope.$index + 1 }}</template>
        </el-table-column> -->
        <el-table-column
          prop="personPicUrl"
          label="照片"
          align="center"
          width="120"
        >
        <el-table-column type="selection" width="40"></el-table-column>
        <el-table-column prop="personPicUrl" label="照片" width="120">
          <template slot-scope="scope">
            <img
              :src="'/httpImage/' + scope.row.personPicUrl"
@@ -141,7 +137,7 @@
            </p>
          </template>
        </el-table-column>
        <el-table-column label="生效状态" align="center" min-width="70">
        <el-table-column label="生效状态" min-width="70">
          <template slot-scope="scope">
            <el-switch
              v-model="scope.row.enable"
@@ -160,14 +156,12 @@
          min-width="70"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="sex"
          label="性别"
          min-width="60"
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="idCard"
@@ -175,7 +169,6 @@
          min-width="150"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="phoneNum"
@@ -183,12 +176,10 @@
          min-width="100"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <el-table-column
          prop="monitorLevel"
          label="等级"
          align="center"
          min-width="50"
        ></el-table-column>
        <el-table-column
@@ -197,11 +188,8 @@
          min-width="140"
          show-overflow-tooltip
          sortable
          align="center"
        ></el-table-column>
        <!-- <el-table-column prop="reserved" label="其他" align="center"></el-table-column> -->
        <el-table-column label="操作" min-width="130" align="center">
        <el-table-column label="操作" min-width="130">
          <template slot-scope="scope">
            <fTemplate authority="library:set">
              <el-tooltip
@@ -217,7 +205,7 @@
              </el-tooltip>
            </fTemplate>
            <el-popover
              placement="left"
              placement="top"
              trigger="click"
              popper-class="popper-caozuo"
            >
@@ -284,7 +272,6 @@
                class="iconfont icongengduocaozuo-09"
                style="font-size: 24px; cursor: pointer"
              ></span>
              <!-- @click="handleClick(scope.row)" -->
            </el-popover>
          </template>
        </el-table-column>
@@ -308,19 +295,16 @@
    >
      <div class="member-info">
        <label class>
          <i class="iconfont icongerenxinxi_v" style="font-size: 30px"></i>
          <img src="/images/library/个人信息.png" alt="" srcset="" />
        </label>
        <ul>
          <li>
            <!-- <span>姓名:</span> -->
            <span>{{ memberInfo.personName }}</span>
          </li>
          <li>
            <!-- <span>性别:</span> -->
            <span>{{ memberInfo.sex }}</span>
          </li>
          <li style="margin-right: 80px">
            <!-- <span>身份证号:</span> -->
            <span>{{ memberInfo.idCard }}</span>
          </li>
          <li>
@@ -363,7 +347,19 @@
      <p style="text-align: right; font-size: 14px; color: #5f5f5f">
        å…±{{ faceDataCount }}条数据
      </p>
      <el-table :data="cameraDetailData" border>
      <el-table
        :data="cameraDetailData"
        tooltip-effect="dark"
        :fit="true"
        style="width: 100%; overflow: auto"
        :header-cell-style="{
          background: '#fff',
          color: '#222222',
          padding: '2px 1px',
          borderBottom: 'none',
        }"
      >
        <el-table-column
          prop="faceImg"
          label="抓拍实景"
@@ -423,219 +419,7 @@
        >
      </div>
    </el-dialog>
    <!-- <el-dialog
      title="修改信息"
      :visible.sync="dialogFormVisible"
      okText="保存"
      width="30%"
      :before-close="handleClose"
      cancelText="取消"
    >
      <el-form
        ref="formForEdit"
        :model="form"
        label-width="120px"
        :rules="rules"
      >
        <div class="flex-center mb10">
          <el-upload
            class="avatar-uploader"
            action
            :http-request="updateFace"
            accept="image/*"
            :show-file-list="false"
            :on-success="uploadSuccess"
            :on-error="uploadError"
          >
            <div class="mask1">
              <div
                slot="trigger"
                class="flex-center"
                style="position: absolute; top: 120px"
              >
                <p
                  style="
                    background: rgba(0, 0, 0, 0.35);
                    width: 150px;
                    line-height: 30px;
                    color: #fff;
                    font-size: 13px;
                    opacity: 1;
                  "
                >
                  ç‚¹å‡»ä¿®æ”¹ç…§ç‰‡
                </p>
              </div>
            </div>
            <img
              v-if="`httpImage/` + form.personPicUrl"
              :src="`/httpImage/` + form.personPicUrl"
              style="
                max-height: 100px;
                width: 100px;
                object-fit: contain;
                background: rgba(0, 0, 0, 0.35);
              "
              class="avatar"
            />
          </el-upload>
        </div>
        <el-row>
          <el-col :span="20">
            <el-form-item label="ID" style="width: 100%; margin-bottom: 10px">
              <el-input
                size="small"
                v-model="form.id"
                disabled
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="照片标识"
              prop="picDesc"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-input
                size="small"
                v-model="form.picDesc"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item label="姓名" style="width: 100%; margin-bottom: 10px">
              <el-input
                size="small"
                v-model="form.personName"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="性别"
              prop="sex"
              style="width: 100%; margin-bottom: 8px; text-align: left"
            >
              <el-radio-group v-model="form.sex" class="mt10">
                <el-radio label="男"></el-radio>
                <el-radio label="女"></el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="身份证号"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-input
                size="small"
                v-model="form.idCard"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="手机号"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-input
                size="small"
                v-model="form.phoneNum"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="人员等级"
              prop="monitorLevel"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-select
                size="small"
                v-model="form.monitorLevel"
                placeholder="请选择"
                style="width: 100%"
              >
                <el-option
                  v-for="item in VideoPhotoData.dictionary.MONITORLEVEL"
                  :key="item.value"
                  :label="item.name"
                  :value="item.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="入库位置"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-input
                size="small"
                v-model="form.fromServerId"
                disabled
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item
              label="入库时间"
              style="width: 100%; margin-bottom: 10px"
            >
              <el-input
                size="small"
                v-model="form.createTime"
                disabled
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item label="其他" style="width: 100%; margin-bottom: 10px">
              <el-input
                size="small"
                v-model="form.reserved"
                placeholder="请输入"
              ></el-input>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button size="small" @click="handleClose" type="info"
          >取 æ¶ˆ</el-button
        >
        <el-button size="small" type="primary" @click="submit()"
          >ç¡® å®š</el-button
        >
      </div>
    </el-dialog> -->
    <el-drawer title="修改信息" :modal="false" :visible.sync="showInfoDrawer">
      <!-- :before-close="handleClose" -->
      <el-form
        ref="formForEdit"
        :model="form"
@@ -687,7 +471,7 @@
        </div>
        <el-row>
          <el-col :span="20">
            <el-form-item label="ID" style="width: 100%; margin-bottom: 14px">
            <el-form-item label="ID" style="width: 100%; margin-bottom: 20px">
              <el-input
                size="small"
                v-model="form.id"
@@ -702,7 +486,7 @@
            <el-form-item
              label="照片标识"
              prop="picDesc"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-input
                size="small"
@@ -714,7 +498,7 @@
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item label="姓名" style="width: 100%; margin-bottom: 14px">
            <el-form-item label="姓名" style="width: 100%; margin-bottom: 20px">
              <el-input
                size="small"
                v-model="form.personName"
@@ -728,7 +512,7 @@
            <el-form-item
              label="性别"
              prop="sex"
              style="width: 100%; margin-bottom: 14px; text-align: left"
              style="width: 100%; margin-bottom: 20px; text-align: left"
            >
              <el-radio-group v-model="form.sex" class="mt10">
                <el-radio label="男"></el-radio>
@@ -741,7 +525,7 @@
          <el-col :span="20">
            <el-form-item
              label="身份证号"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-input
                size="small"
@@ -755,7 +539,7 @@
          <el-col :span="20">
            <el-form-item
              label="手机号"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-input
                size="small"
@@ -770,7 +554,7 @@
            <el-form-item
              label="人员等级"
              prop="monitorLevel"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-select
                size="small"
@@ -792,7 +576,7 @@
          <el-col :span="20">
            <el-form-item
              label="入库位置"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-input
                size="small"
@@ -807,7 +591,7 @@
          <el-col :span="20">
            <el-form-item
              label="入库时间"
              style="width: 100%; margin-bottom: 14px"
              style="width: 100%; margin-bottom: 20px"
            >
              <el-input
                size="small"
@@ -820,7 +604,7 @@
        </el-row>
        <el-row>
          <el-col :span="20">
            <el-form-item label="其他" style="width: 100%; margin-bottom: 14px">
            <el-form-item label="其他" style="width: 100%; margin-bottom: 20px">
              <el-input
                size="small"
                v-model="form.reserved"
@@ -943,6 +727,11 @@
                class="base"
                v-for="(item, index) in BaseManageData.blackList"
                :key="index"
                :class="
                  BaseManageData.selectBlacks.includes(item.value)
                    ? 'white-wrap'
                    : ''
                "
              >
                <el-checkbox
                  :label="item.value"
@@ -1014,6 +803,11 @@
                class="base"
                v-for="(item, index) in BaseManageData.blackList"
                :key="index"
                :class="
                  BaseManageData.selectBlacks.includes(item.value)
                    ? 'white-wrap'
                    : ''
                "
              >
                <el-checkbox
                  :label="item.value"
@@ -1039,6 +833,11 @@
                class="base"
                v-for="(item, index) in BaseManageData.whiteList"
                :key="index"
                :class="
                  BaseManageData.selectWhites.includes(item.value)
                    ? 'white-wrap'
                    : ''
                "
              >
                <el-checkbox
                  :label="item.value"
@@ -1068,7 +867,6 @@
} from "@/api/baseLibrary";
import { getCameraFaceData } from "@/api/es";
import axios from "axios";
// import { findByType } from '@/server/video.js'
import UploadBtn from "./upload";
import fTemplate from "@/components/fTemplate";
import UploadIcon from "@/components/searching/UploadIcon.vue";
@@ -1120,7 +918,6 @@
      },
      cameraDetailData: [],
      cameraDetailVisible: false,
      dialogFormVisible: false,
      copyVisiabled: false,
      moveVisiabled: false,
@@ -1151,11 +948,11 @@
      },
      rules: {
        picDesc: [
          { required: true, message: "请输入照片标识", trigger: "submit" },
          { required: true, message: "请输入照片标识", trigger: "change" },
        ],
        sex: [{ required: true, message: "请勾选性别", trigger: "submit" }],
        sex: [{ required: true, message: "请勾选性别", trigger: "change" }],
        monitorLevel: [
          { required: true, message: "请选择人员等级", trigger: "submit" },
          { required: true, message: "请选择人员等级", trigger: "change" },
        ],
      },
      tableData: [],
@@ -1221,13 +1018,12 @@
      this.cameraDetailVisible = true;
    },
    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
      );
    },
    pickRow(row, column, event) {
      this.$refs.multipleTable.toggleRowSelection(row);
    },
    toggleSelection(rows) {
      if (rows) {
@@ -1244,6 +1040,7 @@
          this.$notify({
            type: "warning",
            message: "请选择要删除的人员",
            duration:1000000,
          });
          return;
        }
@@ -1273,6 +1070,7 @@
              type: "success",
              message: "该人员删除成功!",
            });
            this.askDeleteShow = false;
          }
          this.getPersonList();
        })
@@ -1374,13 +1172,11 @@
      this.getPersonList();
    },
    handleSizeChange(val) {
      //this.pageSize = val;
      this.BaseManageData.size = val;
      this.getPersonList();
    },
    handleClick(row) {
      this.form = row;
      // this.dialogFormVisible = true;
      this.showInfoDrawer = true;
    },
    async submit() {
@@ -1394,7 +1190,7 @@
              type: "success",
              message: "人员修改成功!",
            });
            this.dialogFormVisible = false;
            this.showInfoDrawer = false;
          } else {
            this.$notify({
              type: "error",
@@ -1532,11 +1328,6 @@
        this.BaseManageData.queryPersonList();
      }
    },
    // handleRowStyle({ row, rowIndex }) {
    //   if (rowIndex === 0) {
    //     return "background:#222222;";
    //   }
    // },
    blackAngWhite() {
      if (this.BaseManageData.selectBlacks.length > 0) {
        for (let i = 0; i < this.BaseManageData.whiteList.length; i++) {
@@ -1750,9 +1541,6 @@
  max-width: none;
  font-size: 14px;
  color: #606266;
  thead {
    background: green !important;
  }
}
.avatar-uploader:hover {
  .mask1 {
@@ -1792,6 +1580,25 @@
    }
    .el-dialog__body {
      padding-top: 0;
       .el-table::before {
    visibility: hidden;
  }
  .el-checkbox__input.is-indeterminate .el-checkbox__inner {
    background-color: var(--colorCard);
    border-color: var(--colorCard);
  }
  .el-checkbox__input.is-checked .el-checkbox__inner {
    background-color: var(--colorCard);
    border-color: var(--colorCard);
  }
  .el-table th.el-table__cell > .cell {
    background: #f7f8fa;
    height: 38px;
    line-height: 38px;
  }
  .el-table__body tr.hover-row > td.el-table__cell {
    background-color: #ffffff !important;
  }
    }
    .el-dialog__header {
      box-shadow: 0px 2px 4px rgb(0 0 0 / 8%);
@@ -1831,20 +1638,40 @@
      display: flex;
      align-items: center;
      cursor: pointer;
      .shutiao {
        width: 1.73px;
        height: 8.67px;
        background: var(--colorCard);
        border-radius: 1px;
        position: absolute;
        right: 125px;
        transition: 0.5s;
      }
      .shutiao1 {
        width: 1.73px;
        height: 8.67px;
        background: #bbbbbb;
        border-radius: 1px;
        position: absolute;
        right: 153px;
        transform: rotate(90deg);
        transition: 0.5s;
      }
      .el-switch__core {
        height: 26px;
        border-radius: 18px;
      }
      .el-switch__core:after {
        width: 22px;
        height: 22px;
        width: 20px;
        height: 20px;
        top: 2px;
      }
      .el-switch.is-checked .el-switch__core::after {
        margin-left: -22px;
      }
      .iconshanchuku-09 {
        color: #fe6d68;
        // margin-right: 10px;
      }
      .iconshanchuku-09:hover {
        background: #fe6d68;
@@ -1855,7 +1682,7 @@
        color: rgb(102, 102, 102);
      }
      .iconbianjiku-09:hover {
        border: 1px solidvar(--colorCard);
        border: 1px solid var(--colorCard);
        background: var(--colorCard);
        color: #fff;
      }
@@ -1889,6 +1716,14 @@
    box-shadow: -4px 0px 8px rgb(0 0 0 / 16%);
    border-radius: 24px 0px 0px 24px;
    min-width: 380px;
    .el-drawer__header > :first-child {
      font-size: 16px;
    }
    .el-drawer__header {
      padding: 15px 20px;
      box-shadow: 0px 2px 4px rgb(0 0 0 / 8%);
      margin-bottom: 0;
    }
    .el-drawer__body {
      padding: 20px;
      .el-input.is-disabled .el-input__inner {
@@ -1898,11 +1733,24 @@
        color: #bbbbbb;
        font-size: 14px;
      }
      .el-form-item.is-error .el-input__inner,
      .el-form-item.is-error .el-input__inner:focus,
      .el-form-item.is-error .el-textarea__inner,
      .el-form-item.is-error .el-textarea__inner:focus,
      .el-message-box__input input.invalid,
      .el-message-box__input input.invalid:focus {
        border-color: #f56c6c;
      }
      .el-radio__input.is-checked .el-radio__inner {
        border-color: var(--colorCard);
        background: var(--colorCard);
      }
.el-form-item__label {
    line-height: 32px;
}
.el-form-item__content {
    line-height: 32px;
}
      .el-input--small {
        font-size: 14px;
        .el-input__inner {
@@ -1946,22 +1794,14 @@
        }
      }
    }
    // .move.el-drawer__header {
    //   padding-bottom: 16px;
    //   font-size: 16px;
    //   color: #5f5f5f;
    //   margin-bottom: 0px;
    //   box-shadow: 0px 2px 4px rgb(0 0 0 / 8%);
    //   border-radius: 24px 0px 0px 0px;
    // }
  }
}
.text-left {
  .el-upload-list {
    display: none;
  }
}
.border-tabl {
  border: 1px solid #ebeef5;
  border-bottom: none;
@@ -1973,7 +1813,7 @@
  margin-top: 8px;
  box-shadow: 0px 0px 6px 1px rgb(143 159 191 / 15%);
  .cell-classname {
    border-bottom: 1px solid #eff1f5 !important;
    background-color: #ffffff;
  }
  .head-search {
    font-size: 14px;
@@ -1990,8 +1830,6 @@
      }
      .iconpiliangshanchu-09 {
        color: #fe6d68;
        // margin-right: 10px;
        // margin-left: 20px;
      }
      .iconpiliangshanchu-09:hover {
        background: #fe6d68;
@@ -2000,12 +1838,18 @@
      }
      .el-button--small {
        padding: 8px 45px;
        position: relative;
        font-size: 14px;
        background: var(--colorCard) !important;
        border-radius: 0px 18px 18px 0px;
        border-color: var(--colorCard) !important;
        color: #fff;
        margin-right: 10px;
      }
      .el-button--small:hover {
        // background: "rgba(#{var(--colorCard-rgb)},10%) !important"  ;
        filter: brightness(92%);
      }
      .el-input__suffix {
        top: 6px;
@@ -2023,6 +1867,9 @@
          line-height: 20px;
          color: #bbbbbb;
        }
      }
      .el-input--small .el-input__inner:focus {
        border: 1px solid var(--colorCard);
      }
      // .compearValue
      .compearValue {
@@ -2073,6 +1920,33 @@
    background: #f7f8fa;
    height: 38px;
    line-height: 38px;
  }
  .el-table__body tr.hover-row > td.el-table__cell {
    background-color: #ffffff !important;
  }
  .hover-row {
    cursor: pointer;
  }
  .hover-row:hover {
    td {
      background-color: #fff;
      border-top: 1px solid var(--colorCard);
      border-bottom: 1px solid var(--colorCard);
      &:first-child {
        background-color: #fff;
        border-radius: 20px 0 0 20px;
        border-left: 1px solid var(--colorCard);
        border-bottom: 1px solid var(--colorCard);
      }
      &:last-child {
        border-radius: 0 20px 20px 0;
        background-color: #fff;
        border-right: 1px solid var(--colorCard);
        border-bottom: 1px solid var(--colorCard);
      }
    }
  }
  .el-table td.el-table__cell div {
    -webkit-box-sizing: border-box;
@@ -2280,7 +2154,6 @@
  }
}
.el-dialog.copy-dialog {
  // min-height: 372px;
  width: 516px;
  border-radius: 24px;
  .el-dialog__header {
@@ -2296,7 +2169,7 @@
    color: #5f5f5f;
  }
  .el-dialog__body {
    padding: 20px;
    padding: 20px 15px;
    color: #5f5f5f;
  }
  .dialog-footer {
@@ -2320,7 +2193,6 @@
    }
  }
  .addToBase1 {
    // height: 350px;
    position: relative;
    .topLabel {
      margin-top: 20px;
@@ -2337,12 +2209,8 @@
    .items {
      width: 100%;
      min-height: 150px;
      // background: cadetblue;
      // overflow-y: auto;
      // margin: 20px 0px;
      margin-bottom: 20px;
      .lable {
        // margin-top: 10px;
        font-size: 16px;
        font-weight: bold;
        text-align: left;
@@ -2357,10 +2225,10 @@
          box-sizing: border-box;
          float: left;
          text-align: left;
          // font-size: 12px !important;
          background: #eff1f5;
          border-radius: 8px;
          margin: 0 5px;
          margin: 0 10px;
          margin-bottom: 10px;
          .el-checkbox__input.is-checked .el-checkbox__inner {
            background-color: var(--colorCard);
            border-color: var(--colorCard);
@@ -2466,6 +2334,7 @@
    }
  }
}
.el-picker-panel.el-date-range-picker.el-popper.popper-pick {
  border-radius: 8px;
  .el-input--small .el-input__inner {
@@ -2514,8 +2383,6 @@
  border-radius: 8px;
  padding: 0;
  padding-right: 1px;
  // background: olive;
  & > span {
    width: 32px;
    height: 32px;
src/pages/library/components/upload.vue
@@ -1,15 +1,5 @@
<template>
  <span class="upload-content pr">
    <!-- <el-button
      type="primary"
      :loading="upLoadLoading"
      :size="uploadBtnSize"
      data-style="slide-down"
      @click.native="uploadStart"
    >
      <i :class="uploadBtnIcon"></i>
      &nbsp;&nbsp;{{uploadBtntext}}
    </el-button> -->
    <span
      class="iconfont iconfont-wrap iconshangchuantupian-09"
      @click="uploadStart"
@@ -35,24 +25,15 @@
        @dragenter="dragenter($event)"
        @dragleave="dragleave($event)"
      >
        <!-- <i
          class="el-icon-upload text-primary"
          style="color: rgb(61, 104, 225)"
        ></i> -->
        <div class="icon-wrap">
          <span class="iconfont iconshangchuantupian-11"></span>
        </div>
        <div
          class="el-upload__text"
          style="margin-top: 10px"
        >
        <div class="el-upload__text" style="margin-top: 10px">
          å°†æ–‡ä»¶æ‹–到此处或<span class="text-primary cursor-pointer"
            >点击上传</span
          >
        </div>
        <div
          class="el-upload__tip text-light"
        >
        <div class="el-upload__tip text-light">
          {{ limitTypes ? `只能上传${limitTypes}文件` : ""
          }}{{ limitSize ? ` æ–‡ä»¶å¤§å°ä¸è¶…过${limitSize}` : "" }}
        </div>
@@ -188,7 +169,6 @@
              fileObj && fileObj.name ? "“" + fileObj.name + "”" : ""
            }必须小于` + this.limitSize,
        };
        // this.$notify(msg)
        return msg;
      }
      return "success";
@@ -306,10 +286,6 @@
        });
        if (res && res.data) {
          const result = res.data;
          // this.$notify({
          //   type: result && result.success ? 'success' : 'error',
          //   message: result.msg
          // })
          this.progressValue = 0;
          this.showProgress = false;
          this.$emit("successFN", result);
@@ -386,12 +362,7 @@
</script>
<style lang="scss" scoped>
.upload-img-icon {
  width: 60px;
  background-size: 100%;
  background-repeat: no-repeat;
  background-position: center;
}
.upload-progress {
  width: 96%;
  position: absolute;
@@ -410,6 +381,11 @@
    left: 0;
    display: none;
  }
  .iconshangchuantupian-09:hover {
    border: 1px solid var(--colorCard);
    background: var(--colorCard);
    color: #fff;
  }
}
.drag-area {
  position: absolute;
@@ -421,7 +397,8 @@
  padding: 20px 20px 20px 20px;
  right: 0;
  top: 45px;
  border-radius: 8px;    box-sizing: border-box;
  border-radius: 8px;
  box-sizing: border-box;
  box-shadow: 0px 0px 10px rgb(0 0 0 / 12%);
  .text-center {
@@ -436,7 +413,8 @@
        color: #bbd2f9;
      }
    }
    .el-upload__tip,.el-upload__text {
    .el-upload__tip,
    .el-upload__text {
      font-size: 12px;
      line-height: 17px;
      color: #999999;
src/pages/library/index/App.vue
@@ -16,7 +16,7 @@
        </div>
      </div>
      <div class="bg-white ml20 data-right-box">
        <div v-show="showList" style="height: 100%;">
        <div v-show="showList" style="height: 100%">
          <person-list
            ref="personList"
            :baseObject="baseObject"
@@ -38,7 +38,7 @@
          ref="addBase"
          :baseObject="baseForEdit"
          :type="syncType"
          v-show="!showList"
          v-if="!showList"
          @refresh="findBaseSync"
          @closeAdd="closeAdd"
        ></add-base>
@@ -51,6 +51,26 @@
import addBase from "../components/addBase";
import personList from "../components/personList";
import carList from "../components/carList";
const colorRgb = function (s) {
  var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  var color = s.toLowerCase();
  if (reg.test(color)) {
    if (color.length === 4) {
      var colorNew = "#";
      for (var i = 1; i < 4; i += 1) {
        colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1));
      }
      color = colorNew;
    }
    var colorChange = [];
    for (var i = 1; i < 7; i += 2) {
      colorChange.push(parseInt("0x" + color.slice(i, i + 2)));
    }
    return "" + colorChange.join(",") + "";
  } else {
    return color;
  }
};
export default {
  data() {
    return {
@@ -77,10 +97,10 @@
    };
  },
  methods: {
    getPersonList(item,type) {
    getPersonList(item, type) {
      this.baseObject = item;
      this.baseForEdit = item;
      this.syncType  = type
      this.syncType = type;
      // ç›´æŽ¥è°ƒç”¨å­ç»„件刷新列表的方法
      // åˆ¤æ–­è¿™æ˜¯äººå‘˜åº“还是车辆库,决定showList的值
      if (item.tableType == "person") {
@@ -103,8 +123,8 @@
      this.syncType = type;
      this.showList = false;
    },
    initBaseList(){
      this.$refs.baseSync.init()
    initBaseList() {
      this.$refs.baseSync.init();
    },
    // æŸ¥è¯¢åŒæ­¥åº“列表数据\查询本地库列表数据
    findBaseSync() {
@@ -130,6 +150,7 @@
  mounted() {
    window.addEventListener("message", (e) => {
      if (e.data.msg === "changeColor") {
        const res = colorRgb(e.data.color);
        document.documentElement.style.setProperty(
          "--colorCard",
          `${e.data.color}`
@@ -138,9 +159,15 @@
    });
  },
  created() {
    const color = localStorage.getItem("--colorCard");
    let color = localStorage.getItem("--colorCard");
    if (color) {
      document.documentElement.style.setProperty("--colorCard", `${color}`);
    } else {
      color = getComputedStyle(document.documentElement).getPropertyValue(
        "--colorCard"
      );
      const res = colorRgb(color);
      document.documentElement.style.setProperty("--colorCard-rgb", `${res}`);
    }
  },
};
@@ -148,8 +175,22 @@
<style lang="scss" >
.s-base-manage {
  box-sizing: border-box;
  background-color: #e9ebf2;
  background-color: #eff1f5;
  border-top: 1px solid #f1f3f6;
  height: 100%;
  .el-table {
    .cell:empty::before {
      content: "-";
      color: #ccc;
    }
    .is-leaf {
      .cell:empty::before {
        content: "-";
        color: #ccc;
      }
    }
  }
  .el-collapse {
    border: none;
  }
src/pages/settings/index/index.vue
@@ -16,11 +16,11 @@
    <div class="container-center" v-if="activeIndex == 0">
      <div class="account-left" v-if="activeIndex == 0">
        <div class="account-list"
        :class="{'account-list-scroll'
        :account_list_scroll}"
        @mouseenter="account_list_scroll = true"
        @mouseleave="account_list_scroll = false"
        <div
          class="account-list"
          :class="{ 'account-list-scroll': account_list_scroll }"
          @mouseenter="account_list_scroll = true"
          @mouseleave="account_list_scroll = false"
        >
          <div
            class="account-card"
@@ -77,7 +77,6 @@
                <span class="enable" v-if="!showJPGArr" @click="editHeadPic"
                  >编辑头像</span
                >
              </div>
            </div>
            <div class="user-desc">
@@ -645,7 +644,7 @@
        class="nav-child"
        @click="openWelcome(i)"
        @mousedown="mouseDownIndex = i"
        :class="mouseDownIndex === i? 'nav-child-active':''"
        :class="mouseDownIndex === i ? 'nav-child-active' : ''"
        v-for="(item, i) in menuArr"
        :key="i"
      >
@@ -768,7 +767,6 @@
      selectedPic: null,
      showDayInput: false,
      timestamp: 0,
      ajustType: "手动校时",
      inAccountDetail: false,
      isChangePw: false,
      isSetPermission: false,
@@ -840,7 +838,7 @@
      inputHour: "",
      inputMin: "",
      inputSec: "",
      mouseDownIndex:'',
      mouseDownIndex: "",
      inputYrs: "",
      showInputNickName: false,
      inputMonth: "",
@@ -886,28 +884,25 @@
        ],
        confirmPassword: [{ validator: v4, trigger: "blur" }],
      },
      account_list_scroll: false
      account_list_scroll: false,
    };
  },
  created(){
  let color = localStorage.getItem('--colorCard')
    if(color) {
      document.documentElement.style.setProperty('--colorCard',`${color}`)
    }
  created() {
    let color = localStorage.getItem("--colorCard");
    if (color) {
      document.documentElement.style.setProperty("--colorCard", `${color}`);
    }
  },
  beforeDestroy() {
    clearTimeout(this.clockTimer);
    clearInterval(this.browserTimer);
    // if (this.$refs.curPage) {
    //   this.$refs.curPage.removeEventListener("click");
    // }
  },
  mounted() {
    window.addEventListener("message",(e)=>{
     if(e.data.msg === '返回系统设置') {
     this.showWelcome = true
       }
     })
    window.addEventListener("message", (e) => {
      if (e.data.msg === "返回系统设置") {
        this.showWelcome = true;
      }
    });
    const menu = getUrlKey("menu");
    if (menu) {
      this.showWelcome = false;
@@ -1173,15 +1168,7 @@
        }
      );
    },
    // flatCheckedArr(arr, res) {
    //   for (const item of arr) {
    //     if (item.selected) res.push(item.id);
    //     if (item.children) this.flatCheckedArr(item.children, res);
    //   }
    // },
    saveAuth() {
      // let arr = [];
      // this.flatCheckedArr(this.sysMenus, arr);
      updataUser({
        id: this.activeAccountItem.id,
        menuIds: this.$refs.treeMenus.getCheckedKeys(),
@@ -1499,19 +1486,13 @@
        ":"
      );
    },
    // changeSwitch(str) {
    //   if (str == "isNtp") {
    //     this.isManual = !this[str];
    //   } else {
    //     this.isNtp = !this[str];
    //   }
    //   this.syncType = this.isNtp ? "1" : "2";
    //   if (this.isManual) this.parseTime();
    // },
  },
  computed: {
    activeUserRole() {
      return this.activeAccountItem.sysRoles[0].name;
      if (this.activeAccountItem.sysRoles&&this.activeAccountItem.sysRoles.length) {
        return this.activeAccountItem.sysRoles[0].name;
      }
      return "普通用户"
    },
    curUserRole() {
      const info = JSON.parse(sessionStorage.getItem("userInfo"));
@@ -1573,7 +1554,7 @@
    border-radius: 40px;
    .search-res {
      background-color: rgba(255,255,255,.5);
      background-color: rgba(255, 255, 255, 0.5);
    }
    .search-input {
      font-size: 14px;
@@ -1603,29 +1584,30 @@
        width: 100%;
        font-weight: bold;
        &::-webkit-input-placeholder { /* WebKit browsers */
        color: #828282;
        font-weight: normal;
        font-size: 14px;
        &::-webkit-input-placeholder {
          /* WebKit browsers */
          color: #828282;
          font-weight: normal;
          font-size: 14px;
        }
        &:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
        color: #828282;
        font-weight: normal;
        font-size: 14px;
        &:-moz-placeholder {
          /* Mozilla Firefox 4 to 18 */
          color: #828282;
          font-weight: normal;
          font-size: 14px;
        }
        &::-moz-placeholder { /* Mozilla Firefox 19+ */
        color: #828282;
        font-weight: normal;
        font-size: 14px;
        &::-moz-placeholder {
          /* Mozilla Firefox 19+ */
          color: #828282;
          font-weight: normal;
          font-size: 14px;
        }
        &:-ms-input-placeholder { /* Internet Explorer 10+ */
        color: #828282;
        font-weight: normal;
        font-size: 14px;
      }
        &:-ms-input-placeholder {
          /* Internet Explorer 10+ */
          color: #828282;
          font-weight: normal;
          font-size: 14px;
        }
      }
      .el-input__suffix {
        display: flex;
@@ -1654,7 +1636,7 @@
        text-align: left;
        box-sizing: border-box;
        padding: 0 20px;
        color: #4F4F4F;
        color: #4f4f4f;
        font-size: 14px;
        cursor: pointer;
      }
@@ -1664,7 +1646,7 @@
        text-align: left;
        box-sizing: border-box;
        padding: 0 20px;
        color: #4F4F4F;
        color: #4f4f4f;
        font-size: 14px;
      }
      .res-bar:hover {
@@ -1691,14 +1673,14 @@
      justify-content: center;
      align-items: center;
      cursor: pointer;
      border: 2px solid #F2F2F7;
      border: 2px solid #f2f2f7;
      &-active {
        border: 2px solid #4E94FF;
        border: 2px solid #4e94ff;
      }
      &:hover {
        background: #F2F2F7;
        background: #f2f2f7;
      }
      .child-info {
@@ -1718,11 +1700,10 @@
          font-size: 16px;
          font-weight: bold;
          margin-top: 24px;
          color: #4F4F4F;
          color: #4f4f4f;
        }
      }
    }
  }
}
.container {
@@ -1733,8 +1714,8 @@
  flex-basis: auto;
  box-sizing: border-box;
  background-color: #fff;
  color: #4F4F4F;
  border-top: 2px solid #E1E0E6;
  color: #4f4f4f;
  border-top: 2px solid #e1e0e6;
  overflow-x: hidden;
  .container-left {
    height: 100%;
@@ -1755,7 +1736,7 @@
      .card-text {
        margin-left: 20px;
        color: #4F4F4F;
        color: #4f4f4f;
        font-weight: bold;
        font-size: 16px;
        line-height: 22px;
@@ -1806,17 +1787,21 @@
        height: calc(85%);
        overflow: auto;
        padding-right: 5px;
       &::-webkit-scrollbar-track, &::-webkit-scrollbar-thumb { visibility: hidden; }
       &::-webkit-scrollbar {
         background-color: #fff;
       }
        &::-webkit-scrollbar-track,
        &::-webkit-scrollbar-thumb {
          visibility: hidden;
        }
        &::-webkit-scrollbar {
          background-color: #fff;
        }
        &.account-list-scroll::-webkit-scrollbar-thumb, &.account-list-scroll::-webkit-scrollbar-track {
        &.account-list-scroll::-webkit-scrollbar-thumb,
        &.account-list-scroll::-webkit-scrollbar-track {
          visibility: visible;
        }
        &.account-list-scroll::-webkit-scrollbar {
        background-color: #f5f5f5;
       }
          background-color: #f5f5f5;
        }
      }
      .add-account {
        color: var(--colorCard);
@@ -1853,7 +1838,7 @@
          height: 19.21px;
          background: #ffffff;
          border-radius: 20px;
          color: #4F4F4F;
          color: #4f4f4f;
          transform: scale(0.833333);
          line-height: 22.21px;
          span {
@@ -1940,7 +1925,7 @@
            display: flex;
            flex-direction: column;
            align-items: center;
            color: #4F4F4F;
            color: #4f4f4f;
            min-width: 200px;
            .user-name {
              margin-bottom: 10px;
@@ -2046,7 +2031,7 @@
          font-weight: bold;
          font-size: 16px;
          line-height: 22px;
          color: #4F4F4F;
          color: #4f4f4f;
          margin-bottom: 40px;
          height: 28px;
          display: flex;
@@ -2066,7 +2051,7 @@
          border-radius: 8px;
          padding: 0 15px 0 20px;
          .el-select-dropdown__item {
            color: #4F4F4F;
            color: #4f4f4f;
            height: 32px;
            font-size: 12px;
            line-height: 32px;
@@ -2094,12 +2079,12 @@
            border: 2px solid transparent;
            border-radius: 20px;
            height: 32px;
          line-height: 32px;
            line-height: 32px;
            padding: 0 15px;
            font-size: 14px;
            font-weight: bold;
          }
          .el-input__inner:focus{
          .el-input__inner:focus {
            border: 2px solid var(--colorCard);
          }
          .el-input__inner::placeholder {
@@ -2111,7 +2096,7 @@
            width: 100%;
          }
          .el-select .el-input .el-select__caret {
            color: #4F4F4F;
            color: #4f4f4f;
            font-size: 14px;
            font-weight: 600;
          }
@@ -2135,7 +2120,7 @@
          font-size: 15px;
        }
        .el-input__clear {
          color: #4F4F4F;
          color: #4f4f4f;
          font-size: 16px;
          line-height: 48px;
        }
@@ -2154,7 +2139,7 @@
          line-height: 48px;
          font-size: 16px;
          font-weight: 600;
          color: #4F4F4F;
          color: #4f4f4f;
          height: 48px;
          background: #fbfaff;
          border-bottom: 2px solid #f2f2f7;
@@ -2276,7 +2261,7 @@
            border-radius: 8px;
            padding: 0 15px 0 20px;
            .el-select-dropdown__item {
              color: #4F4F4F;
              color: #4f4f4f;
              height: 32px;
              font-size: 12px;
              line-height: 32px;
@@ -2307,18 +2292,18 @@
          }
          .el-form-item {
            .el-input__inner {
            background-color: #ffffff;
            border: 2px solid transparent;
            border-radius: 20px;
            height: 32px;
          line-height: 32px;
            padding: 0 15px;
            font-size: 14px;
            font-weight: bold;
          }
          .el-input__inner:focus{
            border: 2px solid var(--colorCard);
          }
              background-color: #ffffff;
              border: 2px solid transparent;
              border-radius: 20px;
              height: 32px;
              line-height: 32px;
              padding: 0 15px;
              font-size: 14px;
              font-weight: bold;
            }
            .el-input__inner:focus {
              border: 2px solid var(--colorCard);
            }
            .el-input__inner::placeholder {
              color: #c0c4cc;
              font-size: 12px;
@@ -2328,7 +2313,7 @@
              width: 100%;
            }
            .el-select .el-input .el-select__caret {
              color: #4F4F4F;
              color: #4f4f4f;
              font-size: 14px;
              font-weight: 600;
            }
@@ -2339,7 +2324,7 @@
    .datetime-right {
      .datetime-left {
        .device-time {
          color: #4F4F4F;
          color: #4f4f4f;
          .title {
            display: flex;
            justify-content: center;
@@ -2625,36 +2610,35 @@
        border: 2px solid transparent;
      }
    }
  }
      .btns {
      margin: 0 auto;
      margin-top: 40px;
      width: fit-content;
      display: flex;
      .cancel {
        width: 188px;
        height: 40px;
        cursor: pointer;
        border-radius: 25px;
        background-color: #e0e0e0;
        line-height: 40px;
        font-weight: bold;
        font-size: 16px;
        margin-right: 12px;
      }
      .ok {
        width: 188px;
        height: 40px;
        cursor: pointer;
        border-radius: 25px;
        background-color: var(--colorCard);
        color: #fff;
        line-height: 40px;
        font-weight: bold;
        font-size: 16px;
      }
  .btns {
    margin: 0 auto;
    margin-top: 40px;
    width: fit-content;
    display: flex;
    .cancel {
      width: 188px;
      height: 40px;
      cursor: pointer;
      border-radius: 25px;
      background-color: #e0e0e0;
      line-height: 40px;
      font-weight: bold;
      font-size: 16px;
      margin-right: 12px;
    }
    .ok {
      width: 188px;
      height: 40px;
      cursor: pointer;
      border-radius: 25px;
      background-color: var(--colorCard);
      color: #fff;
      line-height: 40px;
      font-weight: bold;
      font-size: 16px;
    }
  }
  .container-right-for-account {
    background: #fbfaff;
    padding: 0;