From 18fcb8ad28f583e3e1b99b23e4f7d9e1833dcd83 Mon Sep 17 00:00:00 2001
From: pengwei <2071057782@qq.com>
Date: 星期三, 12 三月 2025 14:16:30 +0800
Subject: [PATCH] 最新提交

---
 项目代码/client/src/views/tts/UserManagement/Usermanagement.vue |  744 ++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 607 insertions(+), 137 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
index 3d7032e..2892d82 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/client/src/views/tts/UserManagement/Usermanagement.vue"
@@ -17,7 +17,7 @@
       </div>
       <div class="serch">
         <div class="time_box">
-          <div class="time">娲惧伐鏃ユ湡</div>
+          <div class="time">鍒涘缓鏃ユ湡</div>
           <el-date-picker
             v-model="queryForm.selectTime"
             prefix-icon="none"
@@ -39,21 +39,38 @@
             size="small"
           />
         </div>
-        <div class="serch_box">
-          <div class="serchb">鍏ㄥ眬鎼滅储</div>
+        <!-- <div class="serch_box">
+          <div class="serchb">
+            <el-select
+              v-model="queryForm.selectType"
+              placeholder="璇烽�夋嫨"
+              size="small"
+              style="width: 100%; height: 100%; font-size: 0.15rem"
+            >
+              <el-option
+                v-for="item in selectoptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
+          </div>
           <input
             v-model="queryForm.selectName"
             placeholder="璇疯緭鍏ュ叧閿瘝鎼滅储"
             style="border-left: 0.06rem solid #e2e2e2"
           />
-        </div>
+        </div> -->
         <el-button
+          @click="handleQuery"
           type="primary"
           size="small"
           style="margin-left: 0.98rem; height: 2rem"
           >鏌ヨ</el-button
         >
-        <el-button size="small" style="height: 2rem">閲嶇疆</el-button>
+        <el-button size="small" style="height: 2rem" @click="resetQuery"
+          >閲嶇疆</el-button
+        >
       </div>
       <div class="btns">
         <div style="display: flex; align-items: center">
@@ -78,7 +95,7 @@
             v-if="isactive == 2"
             type="primary"
             size="small"
-            @click="dialogVisible2 = true"
+            @click="AddRole"
             style="
               width: 5.5rem;
               height: 2rem;
@@ -92,9 +109,11 @@
           <el-button
             size="small"
             style="width: 5.5rem; height: 2rem; font-size: 0.88rem"
+            @click="printExcel"
             >鎵归噺瀵煎嚭</el-button
           >
           <el-button
+            @click="deleteAll"
             size="small"
             style="width: 5.5rem; height: 2rem; font-size: 0.88rem"
             >鎵归噺鍒犻櫎</el-button
@@ -104,6 +123,7 @@
       <div style="margin-top: 1rem; height: 100%">
         <!-- 鐢ㄦ埛鍒楄〃 -->
         <el-table
+          height="450"
           v-if="isactive == 1"
           :data="tableData"
           style="width: 100%"
@@ -119,20 +139,80 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
+          @select="UserSelectionChange"
         >
-          <el-table-column type="selection" align="center" />
-          <el-table-column prop="address" label="鐧诲綍璐﹀彿" align="center" />
-          <el-table-column prop="name" label="鐪熷疄濮撳悕" align="center" />
-          <el-table-column prop="address" label="鑱旂郴鏂瑰紡" align="center" />
-          <el-table-column prop="address" label="鐢ㄦ埛鍒嗙粍" align="center" />
-          <el-table-column prop="address" label="鐢ㄦ埛瑙掕壊" align="center" />
-          <el-table-column prop="address" label="浜鸿劯鐓х墖" align="center" />
-          <el-table-column prop="address" label="鏄惁鍚敤" align="center" />
-          <el-table-column prop="address" label="鍒涘缓鏃ユ湡" align="center" />
-          <el-table-column prop="address" label="鎿嶄綔" align="center">
-            <template #default="">
-              <el-button size="small" type="text" @click="Edit">缂栬緫</el-button>
-              <el-button size="small" type="text" @click="Editpassword"
+          <el-table-column type="selection" align="center" min-width="1%" />
+          <el-table-column
+            prop="userName"
+            label="鐧诲綍璐﹀彿"
+            align="center"
+            min-width="2%"
+          />
+          <el-table-column
+            prop="userTrueName"
+            label="鐪熷疄濮撳悕"
+            align="center"
+            min-width="3%"
+          />
+          <el-table-column
+            prop="phoneNo"
+            label="鑱旂郴鏂瑰紡"
+            align="center"
+            min-width="3%"
+          />
+          <el-table-column
+            prop="role_Id"
+            label="鐢ㄦ埛鍒嗙粍"
+            align="center"
+            min-width="2%"
+          />
+          <el-table-column
+            prop="roleName"
+            label="鐢ㄦ埛瑙掕壊"
+            align="center"
+            min-width="3%"
+          />
+          <el-table-column
+            prop="address"
+            label="浜鸿劯鐓х墖"
+            align="center"
+            min-width="3%"
+          >
+            <template #default="scope">
+              <el-image
+                style="width: 70px; height: 70px"
+                :src="scope.row.headImageUrl"
+                show-progress
+                :initial-index="4"
+                fit="cover"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column label="鏄惁鍚敤" align="center" min-width="2%">
+            <template #default="scope">
+              <el-switch
+                v-model="scope.row.enable"
+                :active-value="1"
+                :inactive-value="0"
+                @change="changeSwitch(scope.row)"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="createDate"
+            label="鍒涘缓鏃ユ湡"
+            align="center"
+            min-width="3%"
+          />
+          <el-table-column label="鎿嶄綔" align="center" min-width="3%">
+            <template #default="scope">
+              <el-button size="small" type="text" @click="Edit(scope.row)"
+                >缂栬緫</el-button
+              >
+              <el-button
+                size="small"
+                type="text"
+                @click="Editpassword(scope.row)"
                 >淇敼瀵嗙爜</el-button
               >
             </template>
@@ -141,8 +221,9 @@
 
         <!-- 鐢ㄦ埛瑙掕壊 -->
         <el-table
+          height="450"
           v-if="isactive == 2"
-          :data="tableData"
+          :data="grideData"
           style="width: 100%"
           :header-cell-style="{
             background: 'rgba(250,250,250,1)',
@@ -156,18 +237,41 @@
             fontSize: '0.88rem',
             height: '3rem',
           }"
+          @select="RoleSelectionChange"
         >
           <el-table-column type="selection" align="center" />
-          <el-table-column prop="address" label="瑙掕壊鍚嶇О" align="center" />
-          <el-table-column prop="name" label="瑙掕壊鏉冮檺" align="center" />
-          <el-table-column prop="address" label="澶囨敞" align="center" />
-          <el-table-column prop="address" label="鏄惁鍚敤" align="center" />
-          <el-table-column prop="address" label="鍒涘缓鏃ユ湡" align="center" />
-          <el-table-column prop="address" label="鎿嶄綔" align="center">
-            <template #default="">
+          <el-table-column prop="roleName" label="瑙掕壊鍚嶇О" align="center" />
+          <el-table-column prop="name" label="瑙掕壊鏉冮檺" align="center">
+            <template #default="scope">
+              <span
+                @click="
+                  router.replace({
+                    path: `/permission`,
+                    state: { info: JSON.stringify(scope.row) },
+                  })
+                "
+                style="color: #4386ff; cursor: pointer"
+                >绠$悊</span
+              >
+            </template>
+          </el-table-column>
+          <el-table-column prop="deptName" label="澶囨敞" align="center" />
+          <el-table-column label="鏄惁鍚敤" align="center">
+            <template #default="scope">
+              <el-switch
+                v-model="scope.row.enable"
+                :active-value="1"
+                :inactive-value="0"
+                @change="changeRoleSwitch(scope.row)"
+              />
+            </template>
+          </el-table-column>
+          <el-table-column prop="createDate" label="鍒涘缓鏃ユ湡" align="center" />
+          <el-table-column label="鎿嶄綔" align="center">
+            <template #default="scope">
               <span
                 style="color: blue; font-size: 0.88rem; cursor: pointer"
-                @click="Findtorque"
+                @click="EditRole(scope.row)"
                 >缂栬緫</span
               >
             </template></el-table-column
@@ -184,10 +288,26 @@
         "
       >
         <el-pagination
+          v-if="isactive == 1"
           size="small"
           background
           layout="prev, pager, next"
-          :total="1"
+          :current-page="pageQuery.page"
+          :page-size="pageQuery.rows"
+          :total="pageTotal"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+        <el-pagination
+          v-if="isactive == 2"
+          size="small"
+          background
+          layout="prev, pager, next"
+          :current-page="pageQuery.page"
+          :page-size="pageQuery.rows"
+          :total="pageTotal"
+          @size-change="RoleSizeChange"
+          @current-change="RoleCurrentChange"
         />
       </div>
     </div>
@@ -215,10 +335,15 @@
           >
         </div>
       </template>
-      <el-form :model="form" label-width="auto" label-position="top">
+      <el-form
+        :model="formUser"
+        label-width="auto"
+        label-position="top"
+        ref="formRef"
+      >
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item>
+            <el-form-item prop="userName">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -228,11 +353,15 @@
                   >
                 </div>
               </template>
-              <el-input size="small" v-model="form.name" placeholder="璇疯緭鍏�" />
+              <el-input
+                size="small"
+                v-model="formUser.userName"
+                placeholder="璇疯緭鍏�"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item>
+            <el-form-item prop="userTrueName">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -242,11 +371,15 @@
                   >
                 </div>
               </template>
-              <el-input size="small" v-model="form.name" placeholder="璇疯緭鍏�" />
+              <el-input
+                size="small"
+                v-model="formUser.userTrueName"
+                placeholder="璇疯緭鍏�"
+              />
             </el-form-item>
           </el-col>
           <el-col :span="8">
-            <el-form-item>
+            <el-form-item prop="phoneNo">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -256,7 +389,11 @@
                   >
                 </div>
               </template>
-              <el-input size="small" v-model="form.name" placeholder="璇疯緭鍏�" />
+              <el-input
+                size="small"
+                v-model="formUser.phoneNo"
+                placeholder="璇疯緭鍏�"
+              />
             </el-form-item>
           </el-col>
         </el-row>
@@ -268,34 +405,17 @@
                   <span style="color: red; margin-right: 0.2rem">*</span>
                   <span
                     style="font-size: 0.88rem; color: black; font-weight: bold"
-                    >鐢ㄦ埛鍒嗙粍</span
-                  >
-                </div>
-              </template>
-              <el-select v-model="value" placeholder="璇烽�夋嫨" size="small">
-                <el-option
-                  v-for="item in options"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item>
-              <template #label>
-                <div style="display: flex; align-items: flex-end">
-                  <span style="color: red; margin-right: 0.2rem">*</span>
-                  <span
-                    style="font-size: 0.88rem; color: black; font-weight: bold"
                     >鐢ㄦ埛瑙掕壊</span
                   >
                 </div>
               </template>
-              <el-select v-model="value" placeholder="璇烽�夋嫨" size="small">
+              <el-select
+                v-model="formUser.role_Id"
+                placeholder="璇烽�夋嫨"
+                size="small"
+              >
                 <el-option
-                  v-for="item in options"
+                  v-for="item in groupOptions"
                   :key="item.value"
                   :label="item.label"
                   :value="item.value"
@@ -314,9 +434,13 @@
                   >
                 </div>
               </template>
-              <el-select v-model="value" placeholder="璇烽�夋嫨" size="small">
+              <el-select
+                v-model="formUser.enable"
+                placeholder="璇烽�夋嫨"
+                size="small"
+              >
                 <el-option
-                  v-for="item in options"
+                  v-for="item in isoptins"
                   :key="item.value"
                   :label="item.label"
                   :value="item.value"
@@ -349,9 +473,10 @@
                 action="#"
                 list-type="picture-card"
                 :auto-upload="false"
+                @before-upload="beforeAvatarUpload"
+                :on-change="handleAvatarSuccess"
               >
                 <el-icon><Plus /></el-icon>
-
                 <template #file="{ file }">
                   <div>
                     <img
@@ -400,7 +525,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible = false"
+            @click="saveObj"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -432,7 +557,13 @@
           >
         </div>
       </template>
-      <el-form :model="form" label-width="auto" label-position="top">
+      <el-form
+        :model="formpassword"
+        label-width="auto"
+        label-position="top"
+        ref="formpasswordRef"
+        :rules="passwordrules"
+      >
         <el-row>
           <el-col>
             <div
@@ -446,18 +577,19 @@
                 border-radius: 0.25rem;
               "
             >
-              <span style="color: #51b820; font-size: 1rem">璐﹀彿锛歛dimin</span
+              <span style="color: #51b820; font-size: 1rem"
+                >璐﹀彿锛歿{ formpassword.userName }}</span
               ><span style="color: #51b820; font-size: 1rem; margin-left: 2rem"
-                >鐢ㄦ埛锛氳秴绾х鐞嗗憳</span
+                >鐢ㄦ埛锛歿{ formpassword.roleName }}</span
               >
             </div>
           </el-col>
         </el-row>
-        <el-form-item>
+        <el-form-item prop="password">
           <el-input
             style="margin-top: 1rem"
             size="large"
-            v-model="form.name"
+            v-model="formpassword.password"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -474,7 +606,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible1 = false"
+            @click="savePassword(formpasswordRef)"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -506,8 +638,15 @@
           >
         </div>
       </template>
-      <el-form :model="form" label-width="auto" label-position="top">
-        <el-form-item>
+      <el-form
+        :model="formRole"
+        label-width="auto"
+        label-position="top"
+        ref="formRoleRef"
+        :rules="roleRules"
+        :hide-required-asterisk="true"
+      >
+        <el-form-item prop="roleName">
           <template #label>
             <div style="display: flex; align-items: flex-end">
               <span style="color: red; margin-right: 0.2rem">*</span>
@@ -519,7 +658,7 @@
           <el-input
             style="height: 2rem"
             size="small"
-            v-model="userform.userName"
+            v-model="formRole.roleName"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -534,7 +673,7 @@
           <el-input
             style="height: 2rem"
             size="small"
-            v-model="userform.description"
+            v-model="formRole.description"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -551,7 +690,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible2 = false"
+            @click="saveRole(formRoleRef)"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -561,99 +700,432 @@
     </el-dialog>
 
     <!-- 鏉冮檺绠$悊寮瑰嚭妗� -->
+
+    <el-dialog v-model="imgdialogVisible">
+      <div
+        style="
+          width: 100%;
+          height: 100%;
+          display: flex;
+          justify-content: center;
+          align-items: center;
+        "
+      >
+        <img w-full :src="dialogImageUrl" alt="Preview Image" />
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script setup>
-import { ref, reactive } from "vue";
+import { ref, reactive, onMounted } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
+import {
+  GetUserList,
+  AddUser,
+  UpdateUser,
+  DelApi,
+  ExportApi,
+  ExportApi1,
+} from "@/api/user";
+import { useRouter } from "vue-router";
+import { formatTime } from "@/utils/index.js";
+import {
+  GetPageDataApi,
+  StatusChangeApiApi,
+  AddRoleApi,
+  UpdateRoleApi,
+  DeleteRoleApi,
+} from "@/api/role";
 const queryForm = reactive({
   selectName: "",
   selectTime: [], // 鏃堕棿鑼冨洿
+  selectType: "",
+  selectInput: "",
 });
+const router = useRouter();
 
 const tableData = ref([]);
-
+const grideData = ref([{ id: 1 }]);
+const formRef = ref();
 const options = ref([]);
 const props = { multiple: true };
-
+const isoptins = ref([
+  {
+    value: 0,
+    label: "鍚�",
+  },
+  { value: 1, label: "鏄�" },
+]);
+//鍒嗙粍
+const groupOptions = ref([
+  { value: 1, label: "瓒呯骇绠$悊鍛�" },
+  { value: 2, label: "璐ㄦ缁�" },
+  { value: 3, label: "鐢垫皵缁�" },
+  { value: 4, label: "鏈烘缁�" },
+  { value: 5, label: "鍦版矡缁�" },
+]);
 const table = ref(false);
-const form = reactive({});
+const formUser = ref({
+  user_Id: undefined,
+  userName: "",
+  role_Id: 2,
+  roleName: "",
+  phoneNo: "",
+  remark: "",
+  userPwd: "123456",
+  userTrueName: "",
+  dept_Id: 0,
+  enable: 1,
+  headImageUrl: "",
+});
 const userform = reactive({
   userName: "",
   description: "",
 });
+const formpasswordRef = ref();
 const isactive = ref(1);
 const claimdialogVisible = ref(false);
 const dialogVisible = ref(false);
+const imgdialogVisible = ref(false);
+const dialogImageUrl = ref("");
 //鐢ㄦ埛淇℃伅淇敼瀵嗙爜寮瑰嚭妗�
 const dialogVisible1 = ref(false);
 //鐢ㄦ埛瑙掕壊鏂板缓
 const dialogVisible2 = ref(false);
 const TorquedialogVisible = ref(false);
-const activities = [
-  {
-    content: "1.1宸ュ墠鍑嗗",
-    timestamp: "2018-04-15",
-  },
-  {
-    content: "2.1鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-13",
-  },
-  {
-    content: "2.2鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.3鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-  {
-    content: "2.4鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-11",
-  },
-];
+//鍒嗛〉璇锋眰鍙傛暟
+const pageQuery = ref({
+  page: 1, //褰撳墠椤甸潰
+  rows: 10, //姣忛〉鏄剧ず鏉℃暟
+  order: "desc", //鎺掑簭鏂瑰紡
+  sort: "createDate", //鎺掑簭瀛楁
+  wheres: "", //鏉′欢鏌ヨ
+});
 
 const changeactive = (index) => {
   isactive.value = index;
+  if (isactive.value == 1) {
+    selectoptions.value = userOptions;
+    initData();
+  } else {
+    selectoptions.value = roleOptions;
+    getRole();
+  }
 };
-function cancelClick() {
-  table.value = false;
-}
-function confirmClick() {
-  table.value = false;
-}
-// 鏌ョ湅璇︽儏
-const Findmore = () => {
+
+const userOptions = [
+  {
+    value: "userName",
+    label: "鐧诲綍璐﹀彿",
+  },
+  {
+    value: "userTrueName",
+    label: "鐪熷疄濮撳悕",
+  },
+  {
+    value: "phoneNo",
+    label: "鑱旂郴鏂瑰紡",
+  },
+];
+
+const roleOptions = [
+  {
+    value: "roleName",
+    label: "瑙掕壊鍚嶇О",
+  },
+];
+const selectoptions = ref([]);
+selectoptions.value = userOptions;
+const formpassword = ref({
+  password: "",
+});
+const passwordrules = reactive({
+  password: {
+    required: true,
+    message: "璇疯緭鍏ュ瘑鐮�",
+    trigger: "blur",
+  },
+});
+const pageTotal = ref(0);
+//鐧诲綍璁板綍
+const initData = () => {
+  // 鏌ヨ鏉′欢
+  const startTime = formatTime(queryForm.selectTime[0]);
+  const endTime = formatTime(queryForm.selectTime[1]);
+  const filter = [
+    {
+      name: "",
+      value: queryForm.selectType,
+      displayType: "int",
+    },
+    { name: "createDate", value: startTime, displayType: "ThanOrEqual" },
+    { name: "createDate", value: endTime, displayType: "LessOrEqual" },
+  ];
+  GetUserList({
+    ...pageQuery.value,
+    filter,
+  }).then((res) => {
+    tableData.value = res.rows;
+    pageTotal.value = res.total;
+  });
+};
+
+//鏁版嵁妫�绱簨浠�
+const handleQuery = () => {
+  pageQuery.value.page = 1;
+  initData();
+};
+
+const resetQuery = () => {
+  queryForm.selectName = "";
+  queryForm.selectInput = "";
+  queryForm.selectTime = [];
+  queryForm.selectType = "";
+  pageQuery.value.page = 1;
+  initData();
+};
+//鍒嗛〉椤甸潰澶у皬鏀瑰彉
+const handleSizeChange = (val) => {
+  pageQuery.value.rows = val;
+  initData();
+};
+
+//鍒嗛〉椤甸潰鏀瑰彉
+const handleCurrentChange = (val) => {
+  pageQuery.value.page = val;
+  initData();
+};
+//鍒嗛〉椤甸潰澶у皬鏀瑰彉
+const RoleSizeChange = (val) => {
+  pageQuery.value.rows = val;
+  getRole();
+};
+
+//鍒嗛〉椤甸潰鏀瑰彉
+const RoleCurrentChange = (val) => {
+  pageQuery.value.page = val;
+  getRole();
+};
+const handlePictureCardPreview = (uploadFile) => {
+  dialogImageUrl.value = uploadFile.url;
+  imgdialogVisible.value = true;
+};
+const handleAvatarSuccess = (val) => {
+  console.log(val);
+};
+const beforeAvatarUpload = (val) => {
+  console.log(val);
+};
+//鏂板缓鐢ㄦ埛璐﹀彿
+const saveObj = () => {
+  formRef.value.validate((valid) => {
+    if (valid) {
+      if (formUser.value.user_Id != undefined) {
+        UpdateUser(formUser.value).then((res) => {
+          ElMessage({ message: "淇敼鎴愬姛", type: "success" });
+          dialogVisible.value = false;
+          initData();
+        });
+      } else {
+        AddUser(formUser.value).then((res) => {
+          ElMessage({ message: "鎻愪氦鎴愬姛", type: "success" });
+          dialogVisible.value = false;
+          initData();
+        });
+      }
+    }
+  });
+};
+//鏄惁鍚敤
+const changeSwitch = (val) => {
+  let data = Object.assign({}, val);
+  console.log(data);
+  UpdateUser(data).then((res) => {
+    ElMessage({ message: "淇敼鎴愬姛", type: "success" });
+    dialogVisible.value = false;
+    initData();
+  });
+  console.log(val);
+};
+// 鐢ㄦ埛瑙掕壊鏄惁鍚敤
+const changeRoleSwitch = (val) => {
+  let data = Object.assign({}, val);
+  StatusChangeApiApi(data).then((res) => {
+    ElMessage({ message: "淇敼鎴愬姛", type: "success" });
+    dialogVisible.value = false;
+    initData();
+  });
+};
+//缂栬緫鐢ㄦ埛璐﹀彿
+const Edit = (val) => {
+  console.log(val);
+  let obj = Object.assign({}, val);
   dialogVisible.value = true;
+  formUser.value = obj;
 };
-// 鏌ョ湅鍔涚煩
-const Findtorque = () => {
-  TorquedialogVisible.value = true;
+const newobj = ref({});
+//淇敼瀵嗙爜
+const Editpassword = (val) => {
+  formpassword.value = val;
+  newobj.value = val;
+  dialogVisible1.value = true;
 };
+//淇濆瓨淇敼瀵嗙爜
+const savePassword = async (formEl) => {
+  let obj = Object.assign({}, newobj);
+  obj.password = formpassword.value.password;
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      UpdateUser(obj).then((res) => {
+        ElMessage({ message: "淇敼瀵嗙爜鎴愬姛", type: "success" });
+        dialogVisible1.value = false;
+        initData();
+      });
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+const formRoleRef = ref();
+const roleRules = reactive({
+  roleName: {
+    required: true,
+    message: "璇疯緭鍏ヨ鑹插悕绉�",
+    trigger: "blur",
+  },
+  description: {
+    required: true,
+    message: "璇疯緭鍏ヨ鑹叉弿杩�",
+    trigger: "blur",
+  },
+});
+const formRole = ref({
+  roleName: "",
+  description: "",
+});
+//鏂板缓瑙掕壊
+const AddRole = () => {
+  Roletype.value = "鏂板缓";
+  dialogVisible2.value = true;
+};
+const Roletype = ref("鏂板缓");
+//淇濆瓨瑙掕壊
+const saveRole = async (formEl) => {
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      if (Roletype.value == "淇敼") {
+        UpdateRoleApi(formRole.value).then((res) => {
+          ElMessage({ message: "淇敼鎴愬姛", type: "success" });
+          dialogVisible2.value = false;
+          getRole();
+        });
+      } else {
+        AddRoleApi(formRole.value).then((res) => {
+          ElMessage({ message: "娣诲姞鎴愬姛", type: "success" });
+          dialogVisible2.value = false;
+          getRole();
+        });
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+//缂栬緫瑙掕壊
+const EditRole = (val) => {
+  Roletype.value = "淇敼";
+  let obj = Object.assign({}, val);
+  formRole.value = obj;
+  dialogVisible2.value = true;
+};
+const getRole = () => {
+  GetPageDataApi({
+    page: 1,
+    rows: 10,
+    total: 100,
+    tableName: "",
+    sort: "",
+    order: "",
+    wheres: "",
+    export: true,
+    value: "",
+    filter: [
+      {
+        name: "string",
+        value: "string",
+        displayType: "string",
+      },
+    ],
+  }).then((res) => {
+    grideData.value = res.rows;
+    pageTotal.value = res.total;
+  });
+};
+const printExcel = () => {
+  // 鏌ヨ鏉′欢
+  const startTime = formatTime(queryForm.selectTime[0]);
+  const endTime = formatTime(queryForm.selectTime[1]);
+  const filter = [
+    {
+      name: queryForm.selectType,
+      value: queryForm.selectInput,
+      displayType: "String",
+    },
+    {
+      name: "pustatus",
+      value: queryForm.selectName,
+      displayType: "String",
+    },
+    { name: "createDate", value: startTime, displayType: "ThanOrEqual" },
+    { name: "createDate", value: endTime, displayType: "LessOrEqual" },
+  ];
+  if (isactive.value == 1) {
+    ExportApi({
+      ...pageQuery.value,
+      filter,
+    });
+  }
+  if (isactive.value == 2) {
+    ExportApi1({
+      ...pageQuery.value,
+      filter,
+    });
+  }
+};
+
+//鎵归噺鍒犻櫎
+const ids = ref([]);
+const UserSelectionChange = (val) => {
+  ids.value = [];
+  ids.value = val.map((item) => item.user_Id);
+};
+const RoleSelectionChange = (val) => {
+  ids.value = [];
+  ids.value = val.map((item) => item.roleId);
+};
+const deleteAll = () => {
+  if (ids.value.length == 0) {
+    ElMessage({ message: "璇烽�夋嫨瑕佸垹闄ょ殑鏁版嵁", type: "error" });
+    return;
+  }
+  if (isactive.value == 1) {
+    DelApi(ids.value).then((res) => {
+      ElMessage({ message: "鍒犻櫎鎴愬姛", type: "success" });
+      initData();
+    });
+  } else {
+    DeleteRoleApi(ids.value).then((res) => {
+      ElMessage({ message: "鍒犻櫎鎴愬姛", type: "success" });
+      getRole();
+    });
+  }
+};
+
+onMounted(() => {
+  initData();
+});
 </script>
 <style lang="scss" scoped>
 .Usermanagement {
@@ -718,8 +1190,6 @@
           width: 6.88rem;
           height: 2rem;
           text-align: center;
-          border: 0.06rem solid rgba(222, 222, 222, 1);
-          border-radius: 0.25rem 0 0 0.25rem;
           font-size: 0.75rem;
           display: flex;
           align-items: center;

--
Gitblit v1.9.3