heyujie
2021-09-24 84ad5590bafc58e17ebcf7ebdce2cd70c0c22ea9
src/pages/settings/index/index.vue
@@ -6,14 +6,16 @@
        :class="activeIndex == i ? 'left-card-active' : ''"
        v-for="(item, i) in menuArr"
        :key="i"
        @click="openMenu(item.name, i)"
        @click="openMenu(i)"
      >
        <span class="icon iconfont">{{ item.icon }}</span>
        <!-- <span class="icon iconfont">{{ item.icon }}</span> -->
        <img :src="item.blackIcon" class="b" alt="" />
        <img :src="item.whiteIcon" class="w" alt="" />
        <span class="card-text">{{ item.name }}</span>
      </div>
    </div>
    <div class="container-center" v-if="activeIndex == 0 || activeIndex == 1">
    <div class="container-center" v-if="activeIndex == 0">
      <div class="account-left" v-if="activeIndex == 0">
        <div class="account-list">
          <div
@@ -42,38 +44,6 @@
            style="font-size: 38px"
            @click="openAdd"
          ></i>
        </div>
      </div>
      <div class="datetime-left" v-if="activeIndex == 1">
        <div class="time-card">
          <div class="head">
            <span class="icon iconfont">&#xe690;</span>
            <span>设备时间</span>
          </div>
          <div class="time-main">{{ equipmentTime }}</div>
          <div class="date-bot">
            <span class="year">{{ equipmentDate }}</span>
            <span class="week">{{ weekday }}</span>
          </div>
        </div>
        <div class="line">
          <div class="name">NTP校时</div>
          <el-switch
            v-model="isNtp"
            @change="changeSwitch('isNtp')"
            active-color="rgba(61, 104, 225, 1)"
          >
          </el-switch>
        </div>
        <div class="line">
          <div class="name">手动校对</div>
          <el-switch
            v-model="isManual"
            @change="changeSwitch('isManual')"
            active-color="rgba(61, 104, 225, 1)"
          >
          </el-switch>
        </div>
      </div>
    </div>
@@ -354,216 +324,318 @@
      </div>
      <div class="datetime-right" v-if="activeIndex == 1">
        <div class="ntp-time" v-if="isNtp">
          <el-form label-width="160px">
            <el-form-item label="服务器地址">
              <ipInput
                :ip="ntpServer"
                @on-blur="ntpServer = arguments[0]"
              ></ipInput>
            </el-form-item>
            <el-form-item label="校时时间间隔(分钟)">
              <div class="right">
                <el-input-number
                  v-model.number="timeInterval"
                  :min="1"
                  :max="60"
                  placeholder="请输入"
                  size="small"
                  :controls="false"
                ></el-input-number>
                <el-button
                  type="text"
                  @click="testNTP"
                  :loading="ntpTestLoading"
                  >测试</el-button
                >
              </div>
            </el-form-item>
          </el-form>
        </div>
        <div class="manual-time" v-if="isManual">
          <switchBar
            :barName="`同步本计算机时间`"
            @switchChange="syncBrowser"
            :value="isSyncBrowser"
          ></switchBar>
          <div class="clock-wrap">
            <div class="clock">
              <div class="hour">
                <div class="dnum" @click="showInput('Hour')">
                  <span v-show="!showHourInput">{{ syncHour }}</span>
                  <input
                    class="input-box"
                    v-show="showHourInput"
                    ref="iptHour"
                    oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>23)value='23'"
                    type="text"
                    v-model="inputHour"
                    @blur="hideInput('Hour')"
                    @keydown.enter="hideInput('Hour')"
                  />
                </div>
                <div class="control">
                  <span class="icon iconfont" @click="plusOne('hrs')"
                    >&#xe60e;</span
                  >
                  <span class="icon iconfont fanzhuan" @click="minusOne('hrs')"
                    >&#xe60e;</span
                  >
                </div>
              </div>
              <div class="sep">:</div>
              <div class="mins">
                <div class="dnum" @click="showInput('Min')">
                  <span v-show="!showMinInput">{{ syncMin }}</span>
                  <input
                    class="input-box"
                    v-show="showMinInput"
                    ref="iptMin"
                    oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>59)value='59'"
                    type="text"
                    v-model="inputMin"
                    @blur="hideInput('Min')"
                    @keydown.enter="hideInput('Min')"
                  />
                </div>
                <div class="control">
                  <span class="icon iconfont" @click="plusOne('min')"
                    >&#xe60e;</span
                  >
                  <span class="icon iconfont fanzhuan" @click="minusOne('min')"
                    >&#xe60e;</span
                  >
                </div>
              </div>
              <div class="sep">:</div>
              <div class="mins">
                <div class="dnum" @click="showInput('Sec')">
                  <span v-show="!showSecInput">{{ syncSec }}</span>
                  <input
                    class="input-box"
                    v-show="showSecInput"
                    ref="iptSec"
                    oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>59)value='59'"
                    type="text"
                    v-model="inputSec"
                    @blur="hideInput('Sec')"
                    @keydown.enter="hideInput('Sec')"
                  />
                </div>
                <div class="control">
                  <span class="icon iconfont" @click="plusOne('sec')"
                    >&#xe60e;</span
                  >
                  <span class="icon iconfont fanzhuan" @click="minusOne('sec')"
                    >&#xe60e;</span
                  >
                </div>
              </div>
        <div class="datetime-left">
          <div class="device-time">
            <div class="title">
              <img src="/images/settings/黑色一级icon/设备信息.png" alt="" />
              <span>设备时间</span>
            </div>
            <div class="time-main">{{ equipmentTime }}</div>
            <div class="date-bot">
              <span class="year">{{ equipmentDate }}</span>
              <span class="week">{{ weekday }}</span>
            </div>
          </div>
          <div class="adjust-bar">
            <div class="minus" @click="minusOne('yrs')">-</div>
            <div class="middle" @click="showInput('Yrs')">
              <span v-show="!showYrsInput">{{ syncYrs }}</span>
              <input
                class="input-box"
                v-show="showYrsInput"
                ref="iptYrs"
                oninput="value=value.replace(/[^\d]/g,'');if(value.length>4)value=value.slice(0,4);"
                type="text"
                v-model="inputYrs"
                @blur="hideInput('Yrs')"
                @keydown.enter="hideInput('Yrs')"
              />
              年
            </div>
            <div class="plus" @click="plusOne('yrs')">+</div>
          </div>
          <div class="adjust-bar">
            <div class="minus" @click="minusOne('mth')">-</div>
            <div class="middle" @click="showInput('Month')">
              <span v-show="!showMonthInput">{{ syncMonth }}</span>
              <input
                class="input-box"
                v-show="showMonthInput"
                ref="iptMonth"
                @input="checkMonthInput"
                type="text"
                v-model="inputMonth"
                @blur="hideInput('Month')"
                @keydown.enter="hideInput('Month')"
              />
              月
          <div class="adjust-zone">
            <!-- <el-radio-group v-model="ajustType"
            fill="#4E94FF"
            >
                  <el-radio-button label="手动校时"></el-radio-button>
                  <el-radio-button label=""></el-radio-button>
                </el-radio-group> -->
            <div class="two-radio">
              <div
                class="radio"
                :class="isNtp ? '' : 'highlight-radio'"
                @click="isNtp = false"
              >
                手动校时
              </div>
              <div
                class="radio"
                :class="isNtp ? 'highlight-radio' : ''"
                @click="isNtp = true"
              >
                NTP校时
              </div>
            </div>
            <div class="plus" @click="plusOne('mth')">+</div>
          </div>
          <div class="adjust-bar">
            <div class="minus" @click="minusOne('day')">-</div>
            <div class="middle" @click="showInput('Day')">
              <span v-show="!showDayInput">{{ syncDay }}</span>
              <input
                class="input-box"
                v-show="showDayInput"
                ref="iptDay"
                @input="checkDayInput"
                type="text"
                v-model="inputDay"
                @blur="hideInput('Day')"
                @keydown.enter="hideInput('Day')"
              />
              日
            </div>
            <div class="plus" @click="plusOne('day')">+</div>
          </div>
        </div>
            <div class="mamal-wrap" v-if="isNtp == false">
              <div class="clock-wrap">
                <div class="clock">
                  <div class="time-block">
                    <div class="dnum" @click="showInput('Hour')">
                      <span v-show="!showHourInput">{{ syncHour }}</span>
                      <input
                        class="input-box"
                        v-show="showHourInput"
                        ref="iptHour"
                        oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>23)value='23'"
                        type="text"
                        v-model="inputHour"
                        @blur="hideInput('Hour')"
                        @keydown.enter="hideInput('Hour')"
                      />
                    </div>
                    <div class="control">
                      <span class="icon iconfont" @click="plusOne('hrs')"
                        >&#xe60e;</span
                      >
                      <span
                        class="icon iconfont fanzhuan"
                        @click="minusOne('hrs')"
                        >&#xe60e;</span
                      >
                    </div>
                  </div>
                  <div class="sep">:</div>
                  <div class="time-block">
                    <div class="dnum" @click="showInput('Min')">
                      <span v-show="!showMinInput">{{ syncMin }}</span>
                      <input
                        class="input-box"
                        v-show="showMinInput"
                        ref="iptMin"
                        oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>59)value='59'"
                        type="text"
                        v-model="inputMin"
                        @blur="hideInput('Min')"
                        @keydown.enter="hideInput('Min')"
                      />
                    </div>
                    <div class="control">
                      <span class="icon iconfont" @click="plusOne('min')"
                        >&#xe60e;</span
                      >
                      <span
                        class="icon iconfont fanzhuan"
                        @click="minusOne('min')"
                        >&#xe60e;</span
                      >
                    </div>
                  </div>
                  <div class="sep">:</div>
                  <div class="time-block">
                    <div class="dnum" @click="showInput('Sec')">
                      <span v-show="!showSecInput">{{ syncSec }}</span>
                      <input
                        class="input-box"
                        v-show="showSecInput"
                        ref="iptSec"
                        oninput="value=value.replace(/[^\d]/g,'');if(value.length>2)value=value.slice(0,2);if(+value>59)value='59'"
                        type="text"
                        v-model="inputSec"
                        @blur="hideInput('Sec')"
                        @keydown.enter="hideInput('Sec')"
                      />
                    </div>
                    <div class="control">
                      <span class="icon iconfont" @click="plusOne('sec')"
                        >&#xe60e;</span
                      >
                      <span
                        class="icon iconfont fanzhuan"
                        @click="minusOne('sec')"
                        >&#xe60e;</span
                      >
                    </div>
                  </div>
                </div>
              </div>
        <div class="btns">
          <div class="cancel" @click="cancelSetTime">取消</div>
          <div class="ok" @click="submitClock">保存</div>
              <div class="date-adjust">
                <div class="adjust-bar">
                  <div class="minus" @click="minusOne('yrs')">
                    <i class="el-icon-remove-outline"></i>
                  </div>
                  <div class="middle" @click="showInput('Yrs')">
                    <span v-show="!showYrsInput">{{ syncYrs }}</span>
                    <input
                      class="input-box"
                      v-show="showYrsInput"
                      ref="iptYrs"
                      oninput="value=value.replace(/[^\d]/g,'');if(value.length>4)value=value.slice(0,4);"
                      type="text"
                      v-model="inputYrs"
                      @blur="hideInput('Yrs')"
                      @keydown.enter="hideInput('Yrs')"
                    />
                    <span>年</span>
                  </div>
                  <div class="plus" @click="plusOne('yrs')">
                    <i class="el-icon-circle-plus-outline"></i>
                  </div>
                </div>
                <div class="adjust-bar">
                  <div class="minus" @click="minusOne('mth')">
                    <i class="el-icon-remove-outline"></i>
                  </div>
                  <div class="middle" @click="showInput('Month')">
                    <span v-show="!showMonthInput">{{ syncMonth }}</span>
                    <input
                      class="input-box"
                      v-show="showMonthInput"
                      ref="iptMonth"
                      @input="checkMonthInput"
                      type="text"
                      v-model="inputMonth"
                      @blur="hideInput('Month')"
                      @keydown.enter="hideInput('Month')"
                    />
                    <span>月</span>
                  </div>
                  <div class="plus" @click="plusOne('mth')">
                    <i class="el-icon-circle-plus-outline"></i>
                  </div>
                </div>
                <div class="adjust-bar">
                  <div class="minus" @click="minusOne('day')">
                    <i class="el-icon-remove-outline"></i>
                  </div>
                  <div class="middle" @click="showInput('Day')">
                    <span v-show="!showDayInput">{{ syncDay }}</span>
                    <input
                      class="input-box"
                      v-show="showDayInput"
                      ref="iptDay"
                      @input="checkDayInput"
                      type="text"
                      v-model="inputDay"
                      @blur="hideInput('Day')"
                      @keydown.enter="hideInput('Day')"
                    />
                    <span>日</span>
                  </div>
                  <div class="plus" @click="plusOne('day')">
                    <i class="el-icon-circle-plus-outline"></i>
                  </div>
                </div>
              </div>
              <div class="manual-time">
                <switchBar
                  :barName="`同步本计算机时间`"
                  @switchChange="syncBrowser"
                  :value="isSyncBrowser"
                ></switchBar>
              </div>
            </div>
            <div class="ntp-wrap" v-if="isNtp">
              <el-form>
                <el-form-item label="服务器地址">
                  <ipInput
                    :ip="ntpServer"
                    @on-blur="ntpServer = arguments[0]"
                  ></ipInput>
                </el-form-item>
                <el-form-item label="校时时间间隔">
                  <div class="right">
                    <el-input-number
                      v-model.number="timeInterval"
                      :min="1"
                      :max="60"
                      placeholder="请输入"
                      size="small"
                      :controls="false"
                    ></el-input-number>
                    <span class="desc-min">分钟</span>
                    <el-button
                      type="text"
                      @click="testNTP"
                      :loading="ntpTestLoading"
                      >测试</el-button
                    >
                  </div>
                </el-form-item>
              </el-form>
            </div>
            <div class="btns">
              <div class="cancel" @click="cancelSetTime">取消</div>
              <div class="ok" @click="submitClock">保存</div>
            </div>
          </div>
        </div>
      </div>
    </div>
    <clusterManagement
      v-if="activeIndex == 2"
      ref="view_2"
      style="width: 100%"
    ></clusterManagement>
    <netSettings
      ref="netSettings"
      ref="view_3"
      v-if="activeIndex == 3"
      style="width: 100%"
    ></netSettings>
    <keyboardLanguage
      ref="view_4"
      v-if="activeIndex == 4"
      style="width: 100%"
    ></keyboardLanguage>
    <generalSettings
      ref="view_5"
      v-if="activeIndex == 5"
      style="width: 100%"
    ></generalSettings>
     <deviceInfo
    <deviceInfo
      v-if="activeIndex == 6"
      style="width: 100%"
      ref="view_6"
    ></deviceInfo>
  </div>
  <div class="welcome-page" v-else>
  <div class="welcome-page" v-else ref="curPage">
    <div
      class="child"
      @click="openWelcome(item, i)"
      v-for="(item, i) in menuArr"
      :key="i"
      class="search-box"
      :class="showRecomand ? 'border-change' : ''"
      @click.stop
    >
      <div class="child-info">
        <span class="icon iconfont welcome-icon">{{ item.icon }}</span>
        <span class="welcome-title">{{ item.name }}</span>
      <!-- @blur="showRecomand = false" -->
      <el-input
        class="search-input"
        placeholder="查找设置"
        size="mini"
        @focus="showRecomand = true"
        clearable
        @input="filterRecomand"
        :suffix-icon="showRecomand && searchText.length ? '' : 'el-icon-search'"
        v-model="searchText"
      >
      </el-input>
      <div class="search-res" v-if="showRecomand">
        <div
          class="res-bar"
          v-for="(item, index) in searchArrForShow"
          :key="index"
          @click="pickQuick(item.addr)"
        >
          {{ item.name }}
        </div>
        <div class="no-res-bar" v-if="searchArrForShow.length == 0">
          没有找到与 {{ searchText }} 相关的结果
        </div>
      </div>
      <div class="dummy-end" v-if="showRecomand" style="height: 15px"></div>
    </div>
    <div class="nav-items">
      <div
        class="nav-child"
        @click="openWelcome(i)"
        v-for="(item, i) in menuArr"
        :key="i"
      >
        <div class="child-info">
          <!-- <span class="icon iconfont welcome-icon">{{ item.icon }}</span> -->
          <img :src="item.imgUrl" alt="" />
          <span class="welcome-title">{{ item.name }}</span>
        </div>
      </div>
    </div>
  </div>
@@ -583,13 +655,13 @@
  getRoles,
} from "@/api/user";
import switchBar from "../components/switchBar";
import ipInput from "@/components/subComponents/IPInput";
import ipInput from "../components/IPInput";
import clusterManagement from "../views/clusterManagement";
import netSettings from "../views/NetSettings";
import deviceInfo from "../views/deviceInfo";
import keyboardLanguage from "../views/keyboardLanguage";
import generalSettings from "../views/generalSettings";
import { pad0,getUrlKey } from "@/api/utils";
import { pad0, getUrlKey } from "@/api/utils";
export default {
  name: "settings",
@@ -600,7 +672,7 @@
    netSettings,
    keyboardLanguage,
    generalSettings,
    deviceInfo
    deviceInfo,
  },
  data() {
    var v2 = (rule, value, callback) => {
@@ -643,6 +715,7 @@
      syncHour: "",
      showWelcome: true,
      syncDay: "",
      searchText: "",
      syncMin: "",
      syncSec: "00",
      isSyncBrowser: false,
@@ -650,6 +723,26 @@
      isAddAccount: false,
      browserTimer: null,
      timezone: "",
      showRecomand: false,
      searchArr: [
        { name: "账户", addr: [0] },
        { name: "通用设置", addr: [5] },
        { name: "时间录像时长", addr: [5, 0] },
        { name: "事件声音", addr: [5, 1] },
        { name: "个性化设置", addr: [5, 2] },
        { name: "集群管理", addr: [2] },
        { name: "网络设置", addr: [3] },
        { name: "无线网络", addr: [3, 1] },
        { name: "有线网络", addr: [3, 2] },
        { name: "设备信息", addr: [6] },
        { name: "日期时间", addr: [1] },
        { name: "NTP校时", addr: [1, 0] },
        { name: "手动校时", addr: [1, 1] },
        { name: "键盘和语言", addr: [4] },
        { name: "系统语言", addr: [4, 0] },
        { name: "键盘管理", addr: [4, 1] },
      ],
      inputNickName: "",
      showHourInput: false,
      showMinInput: false,
@@ -659,6 +752,7 @@
      selectedPic: null,
      showDayInput: false,
      timestamp: 0,
      ajustType: "手动校时",
      inAccountDetail: false,
      isChangePw: false,
      isSetPermission: false,
@@ -673,18 +767,60 @@
      settime: "",
      weekday: "",
      menuArr: [
        { name: "账户", icon: "\ue6de" },
        { name: "日期时间", icon: "\ue6ff" },
        { name: "集群管理", icon: "\ue6df" },
        { name: "网络设置", icon: "\ue6dd" },
        { name: "键盘和语言", icon: "\ue6dc" },
        { name: "通用设置", icon: "\ue6db" },
        { name: "设备信息", icon: "\ue756" },
        {
          name: "账户",
          icon: "\ue6de",
          imgUrl: "/images/settings/账户-蓝.png",
          blackIcon: "/images/settings/黑色一级icon/账户.png",
          whiteIcon: "/images/settings/白色一级icon/账户.png",
        },
        {
          name: "日期时间",
          icon: "\ue6ff",
          imgUrl: "/images/settings/时间日期.png",
          blackIcon: "/images/settings/黑色一级icon/时间信息.png",
          whiteIcon: "/images/settings/白色一级icon/时间日期.png",
        },
        {
          name: "集群管理",
          icon: "\ue6df",
          imgUrl: "/images/settings/集群管理.png",
          blackIcon: "/images/settings/黑色一级icon/集群管理.png",
          whiteIcon: "/images/settings/白色一级icon/集群管理.png",
        },
        {
          name: "网络设置",
          icon: "\ue6dd",
          imgUrl: "/images/settings/网络设置.png",
          blackIcon: "/images/settings/黑色一级icon/网络设置.png",
          whiteIcon: "/images/settings/白色一级icon/网络设置.png",
        },
        {
          name: "键盘和语言",
          icon: "\ue6dc",
          imgUrl: "/images/settings/键盘和语言.png",
          blackIcon: "/images/settings/黑色一级icon/键盘和语言.png",
          whiteIcon: "/images/settings/白色一级icon/键盘和语言.png",
        },
        {
          name: "通用设置",
          icon: "\ue6db",
          imgUrl: "/images/settings/通用设置.png",
          blackIcon: "/images/settings/黑色一级icon/通用设置.png",
          whiteIcon: "/images/settings/白色一级icon/通用设置.png",
        },
        {
          name: "设备信息",
          icon: "\ue756",
          imgUrl: "/images/settings/设备信息.png",
          blackIcon: "/images/settings/黑色一级icon/设备信息.png",
          whiteIcon: "/images/settings/白色一级icon/设备信息.png",
        },
      ],
      accountArr: [],
      jpgArr: [],
      isManual: false,
      isNtp: true,
      isManual: true,
      isNtp: false,
      activeIndex: 0,
      clockTimer: null,
      inputHour: "",
@@ -736,6 +872,9 @@
  beforeDestroy() {
    clearTimeout(this.clockTimer);
    clearInterval(this.browserTimer);
    if (this.$refs.curPage) {
      this.$refs.curPage.removeEventListener("click");
    }
  },
  mounted() {
    const menu = getUrlKey("menu");
@@ -743,11 +882,19 @@
      this.showWelcome = false;
      this.activeIndex = this.menuArr.findIndex((x) => x.name == menu);
      this.$nextTick(() => {
        this.$refs.netSettings.openRight(2);
        this.$refs.view_3.openRight(2);
      });
    }
    this.fetchUserList();
    this.fetchDefHeadPic();
    const e = this.$refs.curPage;
    if (e) {
      e.addEventListener("click", () => {
        if (this.showRecomand) {
          this.showRecomand = false;
        }
      });
    }
  },
  methods: {
    fetchDefHeadPic() {
@@ -1051,15 +1198,15 @@
        }
      });
    },
    openMenu(name, i) {
    openMenu(i) {
      this.activeIndex = i;
      if (this.activeIndex == 1) {
        this.initClockConf();
      }
    },
    openWelcome(item, i) {
    openWelcome(i) {
      this.showWelcome = false;
      this.openMenu(item.name, i);
      this.openMenu(i);
    },
    showInput(typ) {
      this[`show${typ}Input`] = true;
@@ -1125,6 +1272,22 @@
      this.isChangePw = false;
      this.inAccountDetail = false;
      this.$refs["passwordForm"].resetFields();
    },
    pickQuick(addr) {
      if (addr.length == 1) {
        this.openWelcome(addr[0]);
      } else {
        this.openWelcome(addr[0]);
        this.$nextTick(() => {
          if (addr[0] == 1) {
            // addr[1] == 0
            //   ? this.changeSwitch("isNtp")
            //   : this.changeSwitch("isManual");
            return;
          }
          this.$refs[`view_${addr[0]}`].openRight(addr[1]);
        });
      }
    },
    cacelChoosePic() {
      this.addForm.headpic = "";
@@ -1236,6 +1399,7 @@
    runClock() {
      const str = this.formatTime(++this.timestamp * 1000, "Y-M-D h:m:s");
      [this.equipmentDate, this.equipmentTime] = str.split(" ");
      this.clockTimer = setTimeout(() => {
        this.runClock();
      }, 1000);
@@ -1334,6 +1498,15 @@
      }
      return true;
    },
    searchArrForShow() {
      if (this.searchText == "") {
        return this.searchArr;
      } else {
        return this.searchArr.filter((item) => {
          return item.name.indexOf(this.searchText.toUpperCase()) > -1;
        });
      }
    },
  },
};
</script>
@@ -1341,44 +1514,149 @@
.welcome-page {
  width: 100%;
  height: 100%;
  background-color: #f5f5f5;
  display: -ms-flexbox;
  padding: 0 50px;
  padding: 145px 32px 50px 32px;
  box-sizing: border-box;
  .child {
  background-color: rgba(255, 255, 255, 0.9);
  backdrop-filter: blur(4px);
  .border-change {
    border-radius: 20px !important;
  }
  .search-box {
    width: 332px;
    z-index: 999;
    // margin: 55px auto;
    position: fixed;
    left: calc(50% - 166px);
    top: 50px;
    background: rgba(255, 255, 255, 0.8);
    border: 2px solid #4e94ff;
    box-sizing: border-box;
    background-color: white;
    float: left;
    width: 250px;
    height: 200px;
    margin: 50px 57px 30px 57px;
    border-radius: 20px;
    display: flex;
    justify-content: center;
    align-items: center;
    cursor: pointer;
    -moz-box-shadow: 2px 2px 4px rgb(226, 226, 226);
    -webkit-box-shadow: 2px 2px 4px rgb(226, 226, 226);
    box-shadow: 2px 2px 4px rgb(226, 226, 226);
    .child-info {
      display: flex;
      flex-direction: column;
      height: 62%;
      justify-content: space-around;
      .welcome-icon {
        font-size: 72px;
    backdrop-filter: blur(4px);
    border-radius: 40px;
    .search-input {
      font-size: 14px;
      .el-input--mini .el-input__inner {
        height: 36px;
        line-height: 36px;
      }
      .welcome-title {
        font-size: 18px;
      .el-input--suffix .el-input__inner {
        padding-right: 40px;
      }
      .el-input__inner {
        background-color: #fff;
        background-image: none;
        border-radius: 40px;
        border: none;
        box-sizing: border-box;
        color: #606266;
        display: inline-block;
        font-size: 14px;
        height: 36px;
        line-height: 36px;
        outline: 0;
        padding: 0 20px;
        -webkit-transition: border-color 0.2s
          cubic-bezier(0.645, 0.045, 0.355, 1);
        transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
        width: 100%;
        font-weight: bold;
      }
      .el-input__suffix {
        display: flex;
        align-items: center;
        padding-right: 10px;
        .el-input__suffix-inner {
          border-color: none;
          .el-icon-circle-close:before {
            content: "\e79d" !important;
            font-size: 17px;
          }
          .el-icon-search {
            color: #2f2d3d;
            font-weight: bold;
            font-size: 17px;
          }
        }
      }
    }
    .search-res {
      max-height: 240px;
      overflow: auto;
      .res-bar {
        height: 40px;
        line-height: 40px;
        text-align: left;
        box-sizing: border-box;
        padding: 0 20px;
        color: #333333;
        font-size: 14px;
        cursor: pointer;
      }
      .no-res-bar {
        height: 40px;
        line-height: 40px;
        text-align: left;
        box-sizing: border-box;
        padding: 0 20px;
        color: #333333;
        font-size: 14px;
      }
      .res-bar:hover {
        background: #f5f5f6 10%;
        font-weight: bold;
        color: #4e94ff;
      }
      // .res-bar:last-child {
      //   border-radius: 0 0 20px 20px;
      // }
    }
  }
  .child:hover {
    -moz-box-shadow: 5px 5px 15px rgb(218, 218, 218);
    -webkit-box-shadow: 5px 5px 15px rgb(218, 218, 218);
    box-shadow: 5px 5px 15px rgb(218, 218, 218);
    transform: translate3d(0, -3px, 0);
    transition: all 0.4s;
  .nav-items {
    .nav-child {
      box-sizing: border-box;
      background-color: rgba(251, 251, 255, 0.1);
      backdrop-filter: blur(4px);
      float: left;
      width: 208px;
      height: 190px;
      margin: 0 15px;
      margin-bottom: 30px;
      border-radius: 15px;
      display: flex;
      justify-content: center;
      align-items: center;
      cursor: pointer;
      // box-shadow: 2px 2px 4px rgb(226, 226, 226);
      .child-info {
        display: flex;
        flex-direction: column;
        // justify-content: space-around;
        height: 100%;
        .welcome-icon {
          font-size: 72px;
        }
        img {
          width: 64px;
          margin: 0 auto;
          margin-top: 65px;
          height: 50px;
        }
        .welcome-title {
          font-size: 16px;
          font-weight: bold;
          margin-top: 24px;
          color: #333333;
        }
      }
    }
    .nav-child:hover {
      // box-shadow: 4px 4px 12px rgb(218, 218, 218);
      // transform: translate3d(0, -1px, 0);
      // transition: all 0.3s;
    }
  }
}
.container {
@@ -1388,38 +1666,64 @@
  flex: 1;
  flex-basis: auto;
  box-sizing: border-box;
  background-color: #fff;
  border-top: 1px solid #e1e0e6;
  .container-left {
    height: 100%;
    width: 230px;
    width: 244px;
    overflow: auto;
    box-sizing: border-box;
    flex-shrink: 0;
    padding: 10px;
    border-right: 5px solid rgba(248, 248, 248, 1);
    // border-right: 5px solid rgba(248, 248, 248, 1);
    box-sizing: border-box;
    .left-card {
      height: 55px;
      height: 56px;
      cursor: pointer;
      border-radius: 12px;
      border-radius: 8px;
      margin-bottom: 10px;
      display: flex;
      align-items: center;
      .iconfont {
        margin-left: 25px;
        margin-right: 10px;
        font-size: 24px;
      }
      padding: 0 20px;
      // .iconfont {
      //   margin-left: 25px;
      //   margin-right: 10px;
      //   font-size: 24px;
      // }
      .card-text {
        margin-left: 20px;
        color: #333333;
        font-weight: bold;
        font-size: 16px;
        line-height: 22px;
        height: 22px;
      }
      img {
        height: 40px;
        width: 40px;
      }
      .w {
        display: none;
      }
      .b {
        display: block;
      }
    }
    .left-card-active {
      background-color: var(--colorCard);
      color: #fff;
      background-color: #4e94ff !important;
      .card-text {
        color: #fff !important;
      }
      .b {
        display: none;
      }
      .w {
        display: block;
      }
    }
    .left-card:hover {
      background-color: var(--colorCard);
      color: #fff;
      background-color: #f2f2f7;
    }
  }
  .container-center {
@@ -1478,53 +1782,6 @@
        color: #fff;
      }
    }
    .datetime-left {
      .time-card {
        height: 105px;
        background-color: rgba(248, 248, 248, 1);
        margin-bottom: 30px;
        border-radius: 10px;
        .head {
          height: 30px;
          line-height: 30px;
          text-align: left;
          box-sizing: border-box;
          padding: 0 10px;
          font-size: 14px;
          .icon {
            margin-right: 5px;
            color: rgba(61, 104, 225, 1);
          }
        }
        .time-main {
          height: 42px;
          line-height: 42px;
          font-family: Consolas;
          font-size: 36px;
        }
        .date-bot {
          height: 25px;
          font-size: 14px;
          line-height: 25px;
          color: #868686;
          display: flex;
          justify-content: space-evenly;
        }
      }
      .line {
        display: flex;
        align-items: center;
        height: 50px;
        padding: 0 25px;
        background-color: rgba(248, 248, 248, 1);
        justify-content: space-between;
        border-radius: 12px;
        margin-bottom: 10px;
        .name {
          font-size: 14px;
        }
      }
    }
  }
  .container-right {
    flex: 1;
@@ -1532,7 +1789,8 @@
    overflow: auto;
    box-sizing: border-box;
    position: relative;
    padding: 20px 40px;
    padding: 30px 40px;
    background: #f2f2f7;
    .account-right {
      .account-content {
        .content-top {
@@ -1768,6 +2026,256 @@
      }
    }
    .datetime-right {
      .datetime-left {
        .device-time {
          color: #333333;
          .title {
            display: flex;
            justify-content: center;
            align-items: center;
            font-size: 16px;
            line-height: 28px;
            font-weight: bold;
            margin-bottom: 22px;
            img {
              margin-right: 10px;
              height: 28px;
              width: 28px;
            }
          }
          .time-main {
            height: 50px;
            line-height: 50px;
            font-family: Consolas;
            font-size: 40px;
            font-weight: bold;
            letter-spacing: 2px;
          }
          .date-bot {
            height: 20px;
            letter-spacing: 0.5px;
            display: flex;
            justify-content: center;
            font-weight: bold;
            font-size: 14px;
            line-height: 20px;
            margin-top: 8px;
            .year {
              margin-right: 10px;
            }
          }
        }
        .adjust-zone {
          margin-top: 40px;
          background: linear-gradient(
            96.76deg,
            rgba(234, 253, 255, 0.1) 0%,
            rgba(200, 249, 255, 0.35) 29.69%,
            rgba(244, 238, 255, 0.5) 68.75%,
            rgba(201, 249, 255, 0.5) 100%
          );
          height: 370px;
          box-sizing: border-box;
          padding: 29px;
          .two-radio {
            width: 180px;
            height: 28px;
            background: #ffffff;
            border-radius: 20px;
            display: flex;
            margin: 0 auto;
            .radio {
              width: 90px;
              height: 28px;
              line-height: 28px;
              border-radius: 20px;
              display: flex;
              justify-content: center;
              font-weight: bold;
              font-size: 14px;
              cursor: pointer;
              letter-spacing: 0.5px;
            }
            .highlight-radio {
              background: #4e94ff;
              color: #ffffff;
            }
          }
          .clock-wrap {
            display: flex;
            margin: 30px auto;
            justify-content: center;
            align-items: center;
            .clock {
              display: flex;
              align-items: center;
              justify-content: space-evenly;
              .iconfont {
                cursor: pointer;
                color: rgba(134, 134, 134, 1);
              }
              .iconfont:hover {
                background-color: gainsboro;
              }
              .time-block {
                background-color: #fff;
                display: flex;
                align-items: center;
                width: 100px;
                height: 50px;
                justify-content: space-evenly;
                border-radius: 10px;
              }
              .dnum {
                width: 40px;
                height: 40px;
                line-height: 40px;
                font-size: 34px;
                font-family: Consolas;
                display: flex;
                align-items: center;
                .input-box {
                  width: inherit;
                  border: none;
                  border-radius: 5px;
                  height: 35px;
                  font-size: 28px;
                  text-align: center;
                }
                .input-box:focus {
                  outline: none;
                }
              }
              .control {
                width: 20px;
                .fanzhuan {
                  display: inline-block;
                  -moz-transform: scaleY(-1);
                  -webkit-transform: scaleY(-1);
                  -o-transform: scaleY(-1);
                  transform: scaleY(-1);
                }
              }
              .sep {
                font-family: Consolas;
                width: 40px;
                font-size: 34px;
                height: 40px;
                line-height: 40px;
              }
            }
          }
          .date-adjust {
            width: 580px;
            margin: 0 auto;
            height: 40px;
            background: #ffffff;
            border-radius: 20px;
            display: flex;
            justify-content: space-evenly;
            justify-content: space-around;
            padding: 0px 15px;
            box-sizing: border-box;
            .adjust-bar {
              display: flex;
              justify-content: space-between;
              align-items: center;
              line-height: 40px;
              width: 90px;
              .middle {
                font-weight: 600;
                font-size: 14px;
                width: 70px;
              }
              .input-box {
                width: 38px;
                border: none;
                border-radius: 2px;
                height: 25px;
                text-align: center;
                background-color: #f2f2f7;
              }
              .input-box:focus {
                outline: none;
              }
              .minus {
                font-size: 14px;
                cursor: pointer;
                line-height: 40px;
                color: #000000;
                width: 25px;
                cursor: pointer;
              }
              .plus {
                font-size: 14px;
                cursor: pointer;
                line-height: 40px;
                color: #000000;
                width: 25px;
                cursor: pointer;
              }
            }
          }
          .ntp-wrap {
            margin-top: 40px;
            margin-bottom: 68px;
            .el-form-item {
              margin: 20px auto;
              height: 48px;
              background: #ffffff;
              box-sizing: border-box;
              border-radius: 8px;
              width: 580px;
              padding: 0 30px;
              display: flex;
              align-items: center;
            }
            .right {
              display: flex;
              align-items: baseline;
              .desc-min {
                font-size: 12px;
                font-weight: bold;
                margin-left: 6px;
              }
              .el-input-number--small {
                width: 195px;
                .el-input__inner {
                  height: 32px;
                  line-height: 32px;
                  border: 2px solid transparent;
                  border-radius: 20px;
                  background: #f2f2f7;
                }
                .el-input__inner:focus {
                  border: 2px solid #4e94ff;
                }
              }
              .el-button--text {
                margin-left: 42px;
                color: #409eff;
                /* background: 0 0; */
                padding-left: 0;
                padding-right: 0;
                background: rgba(78, 148, 255, 0.1);
                border: 1px solid #4e94ff;
                box-sizing: border-box;
                border-radius: 20px;
                width: 68px;
                color: #333;
                font-weight: bold;
              }
            }
          }
          .manual-time {
            width: 500px;
            margin: 0 auto;
          }
        }
      }
      .el-form-item.is-required:not(.is-no-asterisk)
        > .el-form-item__label:before,
      .el-form-item.is-required:not(.is-no-asterisk)
@@ -1785,180 +2293,56 @@
        border-radius: 10px;
        .el-form-item__label {
          text-align: left;
          line-height: 42px;
          width: 184px;
          color: #333;
          font-weight: bold;
        }
      }
      .el-form-item__content {
        line-height: 40px;
        line-height: 16px;
        position: relative;
        font-size: 14px;
        margin-bottom: 10px;
      }
      .ip-input-container {
        max-width: none !important;
      }
      .ntp-time {
        .right {
          display: flex;
          align-items: baseline;
          .el-input-number--small {
            width: 100%;
          }
          .el-button--text {
            margin-left: 10px;
            text-decoration: underline;
          }
        }
      }
      .manual-time {
        .clock-wrap {
          height: 75px;
          background-color: #f8f8f8;
          display: flex;
          justify-content: center;
          align-items: center;
          margin-bottom: 10px;
          border-radius: 10px;
          .clock {
            display: flex;
            align-items: center;
            height: 90px;
            justify-content: space-evenly;
            .iconfont {
              cursor: pointer;
              color: rgba(134, 134, 134, 1);
            }
            .iconfont:hover {
              background-color: gainsboro;
            }
            .hour {
              background-color: rgba(240, 240, 240, 1);
              display: flex;
              align-items: center;
              width: 100px;
              height: 50px;
              justify-content: space-evenly;
              border-radius: 10px;
            }
            .dnum {
              width: 40px;
              height: 40px;
              line-height: 40px;
              font-size: 34px;
              font-family: Consolas;
              display: flex;
              align-items: center;
              .input-box {
                width: inherit;
                border: none;
                border-radius: 5px;
                height: 35px;
                font-size: 28px;
                text-align: center;
              }
              .input-box:focus {
                outline: none;
              }
            }
            .control {
              width: 20px;
              .fanzhuan {
                display: inline-block;
                -moz-transform: scaleY(-1);
                -webkit-transform: scaleY(-1);
                -o-transform: scaleY(-1);
                transform: scaleY(-1);
              }
            }
            .sep {
              font-family: Consolas;
              width: 40px;
              font-size: 34px;
              height: 40px;
              line-height: 40px;
            }
            .mins {
              background-color: #f0f0f0;
              display: flex;
              align-items: center;
              width: 110px;
              height: 50px;
              justify-content: space-evenly;
              border-radius: 10px;
            }
          }
        }
        .adjust-bar {
          display: flex;
          justify-content: space-between;
          align-items: center;
          margin-bottom: 10px;
          border-radius: 10px;
          height: 50px;
          background-color: rgba(248, 248, 248, 1);
          .middle {
            font-size: 14px;
          }
          .input-box {
            width: 80px;
            border: none;
            border-radius: 5px;
            height: 25px;
            font-size: 18px;
            text-align: center;
          }
          .input-box:focus {
            outline: none;
          }
          .minus {
            width: 50px;
            height: 50px;
            background-color: #f0f0f0;
            font-size: 35px;
            border-radius: 10px;
            cursor: pointer;
            line-height: 50px;
            color: rgba(134, 134, 134, 1);
          }
          .plus {
            width: 50px;
            height: 50px;
            cursor: pointer;
            background-color: #f0f0f0;
            font-size: 35px;
            border-radius: 10px;
            line-height: 50px;
            color: rgba(134, 134, 134, 1);
          }
        }
        display: inline-block;
        width: 336px;
        height: 34px;
        line-height: normal;
        box-sizing: border-box;
        background-color: #f2f2f7;
        text-align: left;
        max-width: 360px;
        border-radius: 20px;
        border: 2px solid transparent;
      }
    }
    .btns {
      margin: 0 auto;
      margin-top: 30px;
      width: fit-content;
      display: flex;
      justify-content: space-between;
      margin-top: 20px;
      .cancel {
        width: 188px;
        height: 40px;
        width: 48%;
        cursor: pointer;
        border-radius: 8px;
        background-color: rgba(240, 240, 240, 1);
        border-radius: 25px;
        background-color: #e0e0e0;
        line-height: 40px;
        font-size: 14px;
        font-weight: bold;
        font-size: 16px;
        margin-right: 12px;
      }
      .ok {
        width: 188px;
        height: 40px;
        width: 48%;
        cursor: pointer;
        border-radius: 8px;
        background-color: rgba(61, 104, 225, 1);
        border-radius: 25px;
        background-color: #4e94ff;
        color: #fff;
        line-height: 40px;
        font-size: 14px;
        font-weight: bold;
        font-size: 16px;
      }
    }
  }