From f577c196420715d92a4dfbb11b41a2f311d0cf68 Mon Sep 17 00:00:00 2001
From: ZZJ <zzjdsg2300@163.com>
Date: 星期五, 28 一月 2022 15:19:14 +0800
Subject: [PATCH] 设备权限管理

---
 public/images/settings/授权管理.png                           |    0 
 src/pages/settings/components/AuthorizationManagement.vue |  132 ++++++++++++++
 src/pages/settings/components/AuthorizationSetting.vue    |  200 +++++++++++++++++++++
 src/pages/settings/views/Authorization.vue                |   23 ++
 src/pages/settings/components/UnbindBox.vue               |  145 ++++++++++++++++
 src/pages/settings/index/index.vue                        |    2 
 6 files changed, 494 insertions(+), 8 deletions(-)

diff --git "a/public/images/settings/\346\216\210\346\235\203\347\256\241\347\220\206.png" "b/public/images/settings/\346\216\210\346\235\203\347\256\241\347\220\206.png"
new file mode 100644
index 0000000..da7550c
--- /dev/null
+++ "b/public/images/settings/\346\216\210\346\235\203\347\256\241\347\220\206.png"
Binary files differ
diff --git a/src/pages/settings/components/AuthorizationManagement.vue b/src/pages/settings/components/AuthorizationManagement.vue
index fb78169..82bf597 100644
--- a/src/pages/settings/components/AuthorizationManagement.vue
+++ b/src/pages/settings/components/AuthorizationManagement.vue
@@ -1,10 +1,136 @@
 <template>
-  <div class="AuthorizationManagement">AuthorizationManagement</div>
+  <div class="AuthorizationManagement">
+    <div class="content">
+      <div class="title">璁惧鎺堟潈绠$悊</div>
+
+      <div class="formArea">
+        <div class="formHeader">
+          <div class="headerItem">鎺堟潈璁惧ID</div>
+          <div class="headerItem">鎺堟潈鏃堕棿</div>
+          <div class="headerItem">瑙i櫎鎺堟潈</div>
+        </div>
+
+        <div class="formBody">
+          <div
+            class="formItem"
+            v-for="(item, index) in authorizationList"
+            :key="index"
+          >
+            <div class="id">
+              {{ item.id }}
+            </div>
+
+            <div class="time">
+              {{ item.time }}
+            </div>
+
+            <div class="unbind iconfont" @click="isShowUnbindBox = true">
+              &#xe7e8;
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <UnbindBox
+      v-if="isShowUnbindBox"
+      @close="isShowUnbindBox = false"
+    ></UnbindBox>
+  </div>
 </template>
 
 <script>
-export default {};
+import UnbindBox from "@/pages/settings/components/UnbindBox";
+
+export default {
+  data() {
+    return {
+      isShowUnbindBox: false,
+      authorizationList: [
+        {
+          id: "DSVAD010120190621",
+          time: "2019-08-02 12:43:43",
+        },
+        {
+          id: "DSVAD010120190621",
+          time: "2019-08-02 12:43:43",
+        },
+        {
+          id: "DSVAD010120190621",
+          time: "2019-08-02 12:43:43",
+        },
+        {
+          id: "DSVAD010120190621",
+          time: "2019-08-02 12:43:43",
+        },
+      ],
+    };
+  },
+  components: {
+    UnbindBox,
+  },
+};
 </script>
 
-<style>
+<style lang="scss" scoped>
+.AuthorizationManagement {
+  position: relative;
+
+  .content {
+    width: 456px;
+    margin: 0 auto;
+  }
+
+  .title {
+    height: 48px;
+    font-size: 16px;
+    line-height: 48px;
+    color: #4f4f4f;
+    font-weight: bold;
+    background: #f2f2f7;
+    border-radius: 8px;
+    margin-bottom: 4px;
+  }
+
+  .formArea {
+    overflow: hidden;
+    margin-top: 4px;
+    background: #f2f2f7;
+
+    .formHeader {
+      margin: 8px 30px 10px 30px;
+      display: flex;
+      justify-content: space-between;
+      font-size: 14px;
+      color: #666;
+    }
+
+    .formBody {
+      padding-bottom: 8px;
+      border-radius: 8px;
+    }
+
+    .formItem {
+      box-sizing: border-box;
+      padding-left: 10px;
+      padding-right: 42px;
+      margin: 0 20px 8px 20px;
+      display: flex;
+      height: 32px;
+      justify-content: space-between;
+      align-items: center;
+      font-size: 12px;
+      color: #333;
+      font-weight: 700;
+      background-color: #fff;
+      border-radius: 20px;
+
+      .unbind {
+        font-size: 24px;
+        color: rgb(78, 148, 255);
+        cursor: pointer;
+      }
+    }
+  }
+}
 </style>
\ No newline at end of file
diff --git a/src/pages/settings/components/AuthorizationSetting.vue b/src/pages/settings/components/AuthorizationSetting.vue
index 2b19384..5c92711 100644
--- a/src/pages/settings/components/AuthorizationSetting.vue
+++ b/src/pages/settings/components/AuthorizationSetting.vue
@@ -1,10 +1,204 @@
 <template>
-  <div class="AuthorizationSetting">AuthorizationSetting</div>
+  <div class="AuthorizationSetting">
+    <div class="content">
+      <div class="title">璁惧鎺堟潈閰嶇疆</div>
+
+      <el-form
+        :model="settingForm"
+        :rules="rules"
+        ref="joinForm"
+        class="join-form"
+      >
+        <el-form-item>
+          <div class="row">
+            <div class="item-title">璁惧鎺堟潈绠$悊鏂瑰紡</div>
+            <div class="inputContain">
+              <el-select
+                v-model="settingForm.authorizationType"
+                placeholder="璇烽�夋嫨"
+                size="small"
+                :popper-append-to-body="false"
+              >
+                <el-option
+                  v-for="item in typeOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </div>
+          </div>
+        </el-form-item>
+
+        <el-form-item prop="password" v-if="settingForm.authorizationType == 1">
+          <div class="row">
+            <div class="item-title">鎺堟潈瀵嗛挜</div>
+            <div class="inputContain">
+              <el-input
+                v-model="settingForm.password"
+                placeholder="璇疯緭鍏�6浣嶆巿鏉冨瘑閽�"
+                maxlength="6"
+                show-password
+              ></el-input>
+            </div>
+          </div>
+        </el-form-item>
+      </el-form>
+
+      <div class="save">淇濆瓨</div>
+    </div>
+  </div>
 </template>
 
 <script>
-export default {};
+export default {
+  data() {
+    return {
+      settingForm: {
+        authorizationType: 0,
+        password: "",
+      },
+      typeOptions: [
+        {
+          label: "濮嬬粓鍏佽",
+          value: 0,
+        },
+        {
+          label: "瀵嗙爜鏍¢獙",
+          value: 1,
+        },
+      ],
+      rules: {
+        password: [
+          { min: 6, max: 6, message: "闀垮害涓�6涓瓧绗�", trigger: "blur" },
+        ],
+      },
+    };
+  },
+};
 </script>
 
-<style>
+<style lang="scss" scoped>
+.AuthorizationSetting {
+  position: relative;
+
+  .content {
+    width: 456px;
+    margin: 0 auto;
+  }
+
+  .title {
+    height: 48px;
+    font-size: 16px;
+    line-height: 48px;
+    color: #4f4f4f;
+    font-weight: bold;
+    background: #f2f2f7;
+    border-radius: 8px;
+    margin-bottom: 4px;
+  }
+
+  .row {
+    margin: 0 auto;
+    height: 48px;
+    margin-bottom: 4px;
+    background-color: #f2f2f7;
+    border-radius: 8px;
+
+    line-height: 48px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    background: #f2f2f7;
+    border-radius: 8px;
+    padding: 0 20px;
+
+    .item-title {
+      font-size: 14px;
+      color: #4f4f4f;
+      font-weight: 700;
+    }
+
+    .el-select ::v-deep {
+      width: 280px;
+      height: 32px;
+
+      input {
+        border-radius: 20px;
+        border-color: #fff;
+        padding-left: 20px;
+        font-size: 12px;
+        color: #333;
+        font-weight: 700;
+      }
+
+      .popper__arrow,
+      .popper__arrow::after {
+        display: none;
+      }
+
+      .el-select-dropdown {
+        top: 30px;
+        height: 84px;
+        box-shadow: 0px 4px 12px rgba(5, 95, 230, 0.25);
+        border-radius: 8px;
+
+        .el-select-dropdown__item {
+          font-size: 12px;
+          font-weight: 400;
+          color: #333;
+
+          &.selected {
+            span {
+              color: #4e94ff;
+            }
+          }
+        }
+      }
+    }
+
+    .el-input ::v-deep {
+      width: 280px;
+      height: 32px;
+
+      input {
+        height: 32px;
+        border-radius: 20px;
+        border-color: #fff;
+        padding-left: 20px;
+        font-size: 12px;
+        color: #333;
+        font-weight: 700;
+
+        &::-webkit-input-placeholder {
+          /* WebKit browsers */
+          color: #828282;
+          font-weight: normal;
+          font-size: 12px;
+        }
+      }
+    }
+  }
+
+  .save {
+    position: absolute;
+    top: 375px;
+    left: 50%;
+    margin-left: -94px;
+    width: 188px;
+    height: 40px;
+    background: #4e94ff;
+    border-radius: 25px;
+    font-weight: bold;
+    font-size: 16px;
+    line-height: 40px;
+    color: #fff;
+    text-align: center;
+    cursor: pointer;
+  }
+
+  .el-form-item {
+    margin-bottom: 0;
+  }
+}
 </style>
\ No newline at end of file
diff --git a/src/pages/settings/components/UnbindBox.vue b/src/pages/settings/components/UnbindBox.vue
new file mode 100644
index 0000000..30d4f57
--- /dev/null
+++ b/src/pages/settings/components/UnbindBox.vue
@@ -0,0 +1,145 @@
+<template>
+  <div class="UnbindBox">
+    <div class="iconfont warn">&#xe7eb;</div>
+    <div class="title">璇风‘璁ゆ槸鍚﹁В闄よ澶囨巿鏉冿紵</div>
+    <div class="des">濡傞渶缁х画锛岃杈撳叆绠$悊鍛樺瘑鐮侊紝鐒跺悗鐐瑰嚮鈥滅‘璁も�濇寜閽�</div>
+    <el-input
+      placeholder="璇疯緭鍏ョ鐞嗗憳瀵嗙爜"
+      v-model="password"
+      show-password
+      :class="{ isWrong: isWrong }"
+    ></el-input>
+    <div class="wrong" v-if="isWrong">瀵嗙爜杈撳叆閿欒锛岃閲嶆柊杈撳叆</div>
+
+    <div class="btns">
+      <div class="cancel" @click="close">鍙栨秷</div>
+      <div class="confirm">纭</div>
+    </div>
+
+    <div class="close iconfont" @click="close">&#xe72b;</div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      isWrong: false,
+      password: "",
+    };
+  },
+  methods: {
+    close() {
+      this.$emit("close");
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.UnbindBox {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  margin-top: -166px;
+  margin-left: -210px;
+  width: 420px;
+  height: 332px;
+  text-align: center;
+  background-color: #fff;
+
+  .warn {
+    margin-top: 40px;
+    margin-bottom: 10px;
+    font-size: 40px;
+    color: rgb(254, 109, 104);
+  }
+
+  .title {
+    margin-bottom: 20px;
+    font-weight: bold;
+    font-size: 16px;
+    color: #4f4f4f;
+  }
+
+  .des {
+    text-align: start;
+    margin: 0 auto;
+    margin-bottom: 6px;
+    width: 360px;
+    font-size: 12px;
+    color: #666666;
+  }
+
+  .el-input {
+    width: 360px;
+    height: 40px;
+
+    ::v-deep input {
+      border-color: #d4d6d9;
+      border-radius: 20px;
+
+      &::-webkit-input-placeholder {
+        font-size: 12px;
+        color: #999999;
+      }
+    }
+
+    &.isWrong ::v-deep input {
+      border-color: #fe6d68;
+    }
+  }
+
+  .wrong {
+    width: 360px;
+    text-align: start;
+    margin: 0 auto;
+    margin-top: 4px;
+    font-size: 12px;
+    color: #fe6d68;
+  }
+
+  .btns {
+    display: flex;
+    justify-content: center;
+    margin: 0 auto;
+    margin-top: 50px;
+    width: 360px;
+
+    .cancel {
+      width: 175px;
+      height: 40px;
+      background: #e0e0e0;
+      border-radius: 25px;
+
+      font-weight: bold;
+      font-size: 16px;
+      line-height: 40px;
+      color: #333333;
+      cursor: pointer;
+    }
+
+    .confirm {
+      width: 175px;
+      height: 40px;
+      background: #4e94ff;
+      border-radius: 25px;
+
+      font-weight: bold;
+      font-size: 16px;
+      line-height: 40px;
+      color: #fff;
+      cursor: pointer;
+    }
+  }
+
+  .close {
+    position: absolute;
+    top: 12px;
+    right: 12px;
+    font-size: 12px;
+    color: #333333;
+    cursor: pointer;
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/pages/settings/index/index.vue b/src/pages/settings/index/index.vue
index 61e1bc0..e388418 100644
--- a/src/pages/settings/index/index.vue
+++ b/src/pages/settings/index/index.vue
@@ -836,7 +836,7 @@
         {
           name: "鎺堟潈绠$悊",
           icon: "\ue7e9;",
-          imgUrl: "/images/settings/璁惧淇℃伅.png",
+          imgUrl: "/images/settings/鎺堟潈绠$悊.png",
           blackIcon: "/images/settings/榛戣壊涓�绾con/鎺堟潈绠$悊.png",
           whiteIcon: "/images/settings/鐧借壊涓�绾con/鎺堟潈绠$悊.png",
         },
diff --git a/src/pages/settings/views/Authorization.vue b/src/pages/settings/views/Authorization.vue
index 953f07e..5ed5f2c 100644
--- a/src/pages/settings/views/Authorization.vue
+++ b/src/pages/settings/views/Authorization.vue
@@ -15,13 +15,24 @@
           <span class="title">{{ item.name }}</span>
         </div>
       </div>
-      <div class="AuthorizationRight"></div>
+      <div class="AuthorizationRight">
+        <AuthorizationSetting v-if="activePage == 0"></AuthorizationSetting>
+        <AuthorizationManagement
+          v-if="activePage == 1"
+        ></AuthorizationManagement>
+      </div>
     </div>
   </div>
 </template>
 
 <script>
+import AuthorizationManagement from "@/pages/settings/components/AuthorizationManagement";
+import AuthorizationSetting from "@/pages/settings/components/AuthorizationSetting";
 export default {
+  components: {
+    AuthorizationSetting,
+    AuthorizationManagement,
+  },
   data() {
     return {
       activePage: 0,
@@ -90,5 +101,15 @@
       background-color: #f2f2f7;
     }
   }
+
+  .AuthorizationRight {
+    flex: 1;
+    overflow: auto;
+    box-sizing: border-box;
+    padding: 10px;
+    padding-top: 6px;
+    border-top: 4px solid #f2f2f7;
+    background-color: #fbfaff;
+  }
 }
 </style>
\ No newline at end of file

--
Gitblit v1.8.0