From 1288a7890deb3b180b1e8df7015b1036514c4e71 Mon Sep 17 00:00:00 2001
From: pengwei <2071057782@qq.com>
Date: 星期四, 27 三月 2025 09:07:12 +0800
Subject: [PATCH] 3.27优化

---
 项目代码/client/src/views/tts/UserManagement/Usermanagement.vue | 1003 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 852 insertions(+), 151 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..239ce0f 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"
@@ -40,20 +40,37 @@
           />
         </div>
         <div class="serch_box">
-          <div class="serchb">鍏ㄥ眬鎼滅储</div>
+          <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"
+            v-model="queryForm.selectInput"
             placeholder="璇疯緭鍏ュ叧閿瘝鎼滅储"
             style="border-left: 0.06rem solid #e2e2e2"
           />
         </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">
@@ -70,7 +87,7 @@
               display: flex;
               align-items: center;
             "
-            ><el-icon style="margin-right: 0.2rem"><Plus /></el-icon
+            ><el-icon style="margin-right: 0.2rem"> <Plus /> </el-icon
             >鏂板缓</el-button
           >
           <!-- 鐢ㄦ埛瑙掕壊鏂板缓 -->
@@ -78,7 +95,7 @@
             v-if="isactive == 2"
             type="primary"
             size="small"
-            @click="dialogVisible2 = true"
+            @click="AddRole"
             style="
               width: 5.5rem;
               height: 2rem;
@@ -86,15 +103,17 @@
               display: flex;
               align-items: center;
             "
-            ><el-icon style="margin-right: 0.2rem"><Plus /></el-icon
+            ><el-icon style="margin-right: 0.2rem"> <Plus /> </el-icon
             >鏂板缓</el-button
           >
           <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,8 @@
       <div style="margin-top: 1rem; height: 100%">
         <!-- 鐢ㄦ埛鍒楄〃 -->
         <el-table
+          empty-text="鏆傛棤鏁版嵁"
+          height="450"
           v-if="isactive == 1"
           :data="tableData"
           style="width: 100%"
@@ -119,20 +140,92 @@
             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="'http://115.159.85.185:9098' + 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
+                :disabled="
+                  scope.row.userName == 'admin' || scope.row.user_Id == '1'
+                "
+                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)"
+                :disabled="
+                  scope.row.userName == 'admin' || scope.row.user_Id == '1'
+                "
+                >缂栬緫</el-button
+              >
+              <el-button
+                size="small"
+                type="text"
+                :disabled="
+                  scope.row.userName == 'admin' || scope.row.user_Id == '1'
+                "
+                @click="Editpassword(scope.row)"
                 >淇敼瀵嗙爜</el-button
               >
             </template>
@@ -141,8 +234,10 @@
 
         <!-- 鐢ㄦ埛瑙掕壊 -->
         <el-table
+          empty-text="鏆傛棤鏁版嵁"
+          height="450"
           v-if="isactive == 2"
-          :data="tableData"
+          :data="grideData"
           style="width: 100%"
           :header-cell-style="{
             background: 'rgba(250,250,250,1)',
@@ -156,18 +251,45 @@
             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
+                v-if="
+                  scope.row.roleName != '瓒呯骇绠$悊鍛�' || scope.row.roleId != '1'
+                "
+                @click="toDetail(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
+                :disabled="
+                  scope.row.roleName == '瓒呯骇绠$悊鍛�' || scope.row.roleId == '1'
+                "
+                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
+                v-if="
+                  scope.row.roleName != '瓒呯骇绠$悊鍛�' || scope.row.roleId != '1'
+                "
                 style="color: blue; font-size: 0.88rem; cursor: pointer"
-                @click="Findtorque"
+                @click="EditRole(scope.row)"
                 >缂栬緫</span
               >
             </template></el-table-column
@@ -184,10 +306,15 @@
         "
       >
         <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"
         />
       </div>
     </div>
@@ -200,6 +327,7 @@
       :before-close="handleClose"
       :show-close="false"
       :align-center="true"
+      @close="resetForm(formUserRef)"
     >
       <template #title>
         <div
@@ -215,10 +343,17 @@
           >
         </div>
       </template>
-      <el-form :model="form" label-width="auto" label-position="top">
+      <el-form
+        :model="formUser"
+        label-width="auto"
+        label-position="top"
+        :rules="rules"
+        ref="formUserRef"
+        :hide-required-asterisk="true"
+      >
         <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 +363,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 +381,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,25 +399,59 @@
                   >
                 </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>
         <el-row :gutter="20">
           <el-col :span="8">
-            <el-form-item>
+            <el-form-item prop="role_Id">
               <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
-                  >
+                    >鐢ㄦ埛瑙掕壊
+                  </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"
+                  :disabled="item.roleId == 1"
+                  v-for="item in groupOptions"
+                  :key="item.roleId"
+                  :label="item.roleName"
+                  :value="item.roleId"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item prop="roleName">
+              <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="formUser.roleName"
+                placeholder="璇烽�夋嫨"
+                size="small"
+              >
+                <el-option
+                  v-for="item in roleNameList"
                   :key="item.value"
                   :label="item.label"
                   :value="item.value"
@@ -283,28 +460,7 @@
             </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-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>
+            <el-form-item prop="enable">
               <template #label>
                 <div style="display: flex; align-items: flex-end">
                   <span style="color: red; margin-right: 0.2rem">*</span>
@@ -314,9 +470,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"
@@ -334,24 +494,32 @@
                   <span
                     style="font-size: 0.88rem; color: black; font-weight: bold"
                     >浜鸿劯鍥剧墖</span
-                  ><span
+                  >
+                  <!-- <span
                     style="
                       color: rgba(255, 0, 0, 1);
                       font-size: 0.75rem;
                       margin-left: 0.5rem;
                     "
                     >娉細鏈�澶氬彲涓婁紶涓夊紶锛屽浘鐗囬渶瑕佹瑙勭殑浜哄儚璇佷欢鐓�</span
-                  >
+                  > -->
                 </div>
               </template>
               <el-upload
+                ref="uploadRef"
+                name="files"
                 class="avatar-uploader"
-                action="#"
+                action="http://115.159.85.185:9098/api/User/SaveFiles"
                 list-type="picture-card"
-                :auto-upload="false"
+                limit="1"
+                :auto-upload="true"
+                @before-upload="beforeAvatarUpload"
+                :on-success="handleAvatarSuccess"
+                :file-list="fileList != [] ? fileList : []"
               >
-                <el-icon><Plus /></el-icon>
-
+                <el-icon>
+                  <Plus />
+                </el-icon>
                 <template #file="{ file }">
                   <div>
                     <img
@@ -371,14 +539,18 @@
                         class="el-upload-list__item-delete"
                         @click="handleDownload(file)"
                       >
-                        <el-icon size="15"><Download /></el-icon>
+                        <el-icon size="15">
+                          <Download />
+                        </el-icon>
                       </span>
                       <span
                         v-if="!disabled"
                         class="el-upload-list__item-delete"
                         @click="handleRemove(file)"
                       >
-                        <el-icon size="15"><Delete /></el-icon>
+                        <el-icon size="15">
+                          <Delete />
+                        </el-icon>
                       </span>
                     </span>
                   </div>
@@ -400,7 +572,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible = false"
+            @click="saveObj(formUserRef)"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -432,7 +604,13 @@
           >
         </div>
       </template>
-      <el-form :model="form" label-width="auto" label-position="top">
+      <el-form
+        :model="formUser"
+        label-width="auto"
+        label-position="top"
+        ref="formpasswordRef"
+        :rules="passwordrules"
+      >
         <el-row>
           <el-col>
             <div
@@ -446,18 +624,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="newPwd">
           <el-input
             style="margin-top: 1rem"
             size="large"
-            v-model="form.name"
+            v-model="formUser.newPwd"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -474,7 +653,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible1 = false"
+            @click="savePassword(formpasswordRef)"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -491,6 +670,7 @@
       :before-close="handleClose"
       :show-close="false"
       :align-center="true"
+      @close="resetForm1(formRoleRef)"
     >
       <template #title>
         <div
@@ -506,8 +686,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 +706,7 @@
           <el-input
             style="height: 2rem"
             size="small"
-            v-model="userform.userName"
+            v-model="formRole.roleName"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -534,7 +721,7 @@
           <el-input
             style="height: 2rem"
             size="small"
-            v-model="userform.description"
+            v-model="formRole.description"
             placeholder="璇疯緭鍏�"
           />
         </el-form-item>
@@ -551,7 +738,7 @@
           <el-button
             size="small"
             type="primary"
-            @click="dialogVisible2 = false"
+            @click="saveRole(formRoleRef)"
             style="height: 2rem; font-size: 0.88rem"
           >
             淇濆瓨
@@ -561,114 +748,616 @@
     </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, toRef } from "vue";
 import { ElMessage, ElMessageBox } from "element-plus";
-const queryForm = reactive({
+import {
+  GetUserList,
+  AddUser,
+  UpdateUser,
+  DelApi,
+  ExportApi,
+  ExportApi1,
+  UpdatePassword,
+  UpdatePwd,
+  AddUserApi,
+  EditUserApi,
+} from "@/api/user";
+import { useRouter } from "vue-router";
+import { formatTime } from "@/utils/index.js";
+import {
+  GetPageDataApi,
+  StatusChangeApiApi,
+  AddRoleApi,
+  UpdateRoleApi,
+  DeleteRoleApi,
+} from "@/api/role";
+let obj = {
   selectName: "",
   selectTime: [], // 鏃堕棿鑼冨洿
-});
+  selectType: "",
+  selectInput: "",
+};
+const queryForm = toRef({ ...obj });
+const router = useRouter();
 
 const tableData = ref([]);
-
+const grideData = ref([]);
+//鏂板缓鐢ㄦ埛ref
+const formUserRef = ref();
 const options = ref([]);
 const props = { multiple: true };
-
-const table = ref(false);
-const form = reactive({});
-const userform = reactive({
+const isoptins = ref([
+  {
+    value: 0,
+    label: "鍚�",
+  },
+  { value: 1, label: "鏄�" },
+]);
+//鍒嗙粍
+const groupOptions = ref([]);
+const formUser = ref({
+  user_Id: undefined,
   userName: "",
-  description: "",
+  role_Id: 2,
+  roleName: "",
+  phoneNo: "",
+  remark: "",
+  userPwd: "123456",
+  userTrueName: "",
+  dept_Id: 0,
+  enable: 1,
+  headImageUrl: "",
+  createDate: formatTime(new Date()), //鍒涘缓鏃堕棿
+  creater: JSON.parse(localStorage.getItem("user")).userName, //鍒涘缓浜�
+  newPwd: "",
 });
+const rules = reactive({
+  userName: {
+    required: true,
+    message: "璇疯緭鍏ョ敤鎴峰悕",
+    trigger: "blur",
+  },
+  role_Id: {
+    required: true,
+    message: "璇烽�夋嫨瑙掕壊",
+    trigger: "change",
+  },
+  newPwd: [
+    {
+      required: true,
+      message: "璇疯緭鍏ュ瘑鐮�",
+      trigger: "blur",
+    },
+  ],
+  realName: {
+    required: true,
+    message: "璇疯緭鍏ュ鍚�",
+    trigger: "blur",
+  },
+  phoneNo: {
+    required: true,
+    message: "璇疯緭鍏ユ墜鏈哄彿",
+    trigger: "blur",
+  },
+  userTrueName: {
+    required: true,
+    message: "璇疯緭鍏ョ湡瀹炲鍚�",
+    trigger: "blur",
+  },
+});
+
+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 = [
+//绛涢�夋潯浠�
+const userOptions = [
   {
-    content: "1.1宸ュ墠鍑嗗",
-    timestamp: "2018-04-15",
+    value: "userName",
+    label: "鐧诲綍璐﹀彿",
   },
   {
-    content: "2.1鐗靛紩鐢垫満鐢电紗瀹夎锛堜粎鍔ㄨ溅杞悜鏋讹級",
-    timestamp: "2018-04-13",
+    value: "userTrueName",
+    label: "鐪熷疄濮撳悕",
   },
   {
-    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",
+    value: "phoneNo",
+    label: "鑱旂郴鏂瑰紡",
   },
 ];
+const fileList = ref([]);
+const roleNameList = ref([
+  { value: "鐢垫皵璐ㄦ", label: "鐢垫皵璐ㄦ" },
+  { value: "鏈烘璐ㄦ", label: "鏈烘璐ㄦ" },
+  { value: "鍦版矡璐ㄦ", label: "鍦版矡璐ㄦ" },
+  { value: "鐢垫皵鍔涚煩", label: "鐢垫皵鍔涚煩" },
+  { value: "鐢垫皵杈呭姪", label: "鐢垫皵杈呭姪" },
+  { value: "鏈烘鍔涚煩", label: "鏈烘鍔涚煩" },
+  { value: "鏈烘杈呭姪", label: "鏈烘杈呭姪" },
+  { value: "鍦版矡鍔涚煩", label: "鍦版矡鍔涚煩" },
+  { value: "鍦版矡杈呭姪", label: "鍦版矡杈呭姪" },
+]);
+const roleOptions = [
+  {
+    value: "roleName",
+    label: "瑙掕壊鍚嶇О",
+  },
+];
+const selectoptions = ref([]);
+selectoptions.value = userOptions;
+//鐢ㄦ埛淇敼瀵嗙爜
+const formpassword = ref({
+  oldPwd: "",
+  newPwd: "",
+});
+const passwordrules = reactive({
+  newPwd: [
+    {
+      required: true,
+      message: "璇疯緭鍏ュ瘑鐮�",
+      trigger: "blur",
+    },
+    {
+      min: 6,
+      max: 12,
+      message: "瀵嗙爜闀垮害鍦� 6 鍒� 12 涓瓧绗�",
+      trigger: "blur",
+    },
+  ],
+});
 
-const changeactive = (index) => {
-  isactive.value = index;
+const uploadRef = ref();
+// //鐢ㄦ埛淇敼瀵嗙爜
+// const handleUpdatePassword = (row) => {
+//   dialogVisible1.value = true;
+//   formUser.value = Object.assign({}, row);
+// };
+// const UpdatePassword = () => {
+//   formpasswordRef.value.validate((valid) => {
+//     if (valid) {
+//       UpdatePassword({
+//         user_Id: formUser.value.user_Id,
+//         oldPwd: formpassword.value.oldPwd,
+//         newPwd: formpassword.value.newPwd,
+//       }).then((res) => {
+//         if (res.code == 200) {
+//           ElMessage({
+//             message: "淇敼鎴愬姛",
+//             type: "success",
+//           });
+//           dialogVisible1.value = false;
+//           initData();
+//         } else {
+//           ElMessage({
+//             message: res.msg,
+//             type: "error",
+//           });
+//         }
+//       });
+//     }
+//   });
+// };
+
+const pageTotal = ref(0);
+//鐧诲綍璁板綍
+const initData = () => {
+  // 鏌ヨ鏉′欢
+  const startTime = formatTime(queryForm.value.selectTime[0]);
+  const endTime = formatTime(queryForm.value.selectTime[1]);
+  const filter = [
+    {
+      name: queryForm.value.selectType,
+      value: queryForm.value.selectInput,
+      displayType: "like",
+    },
+    { 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;
+  });
+  getRole();
 };
-function cancelClick() {
-  table.value = false;
-}
-function confirmClick() {
-  table.value = false;
-}
-// 鏌ョ湅璇︽儏
-const Findmore = () => {
+//鍒嗛〉璇锋眰鍙傛暟
+const pageQuery = ref({
+  page: 1, //褰撳墠椤甸潰
+  rows: 10, //姣忛〉鏄剧ず鏉℃暟
+  order: "desc", //鎺掑簭鏂瑰紡
+  sort: "", //鎺掑簭瀛楁
+  wheres: "", //鏉′欢鏌ヨ
+});
+
+//鏁版嵁妫�绱簨浠�
+const handleQuery = () => {
+  pageQuery.value.page = 1;
+  if (isactive.value == 1) {
+    initData();
+  } else {
+    getRole();
+  }
+};
+//閲嶇疆鏌ヨ鏉′欢
+const resetQuery = () => {
+  queryForm.value = Object.assign({}, obj);
+  pageQuery.value.page = 1;
+  if (isactive.value == 1) {
+    initData();
+  } else {
+    getRole();
+  }
+};
+//鍒嗛〉椤甸潰澶у皬鏀瑰彉
+const handleSizeChange = (val) => {
+  pageQuery.value.rows = val;
+  if (isactive.value == 1) {
+    initData();
+  } else {
+    getRole();
+  }
+};
+
+//鍒嗛〉椤甸潰鏀瑰彉
+const handleCurrentChange = (val) => {
+  pageQuery.value.page = val;
+  if (isactive.value == 1) {
+    initData();
+  } else {
+    getRole();
+  }
+};
+const handleAvatarSuccess = (val) => {
+  formUser.value.headImageUrl = "/image/" + val.data;
+};
+//閲嶇疆琛ㄥ崟
+const resetForm = (formEl) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  formUser.value = {
+    user_Id: undefined,
+    userName: "",
+    role_Id: 21,
+    roleName: "",
+    phoneNo: "",
+    remark: "",
+    userPwd: "123456",
+    userTrueName: "",
+    dept_Id: 0,
+    enable: 1,
+    headImageUrl: "",
+    newPwd: "",
+  };
+  fileList.value = [];
+};
+const resetForm1 = (formEl) => {
+  if (!formEl) return;
+  formEl.resetFields();
+  formRole.value = {
+    roleName: "",
+    description: "",
+  };
+};
+
+const handlePictureCardPreview = (uploadFile) => {
+  dialogImageUrl.value = uploadFile.url;
+  imgdialogVisible.value = true;
+};
+const handleRemove = (val) => {
+  fileList.value = [];
+  //绉婚櫎宸蹭笂浼犵殑鍥剧墖
+  formUser.value.headImageUrl = "";
+};
+const beforeAvatarUpload = (val) => {
+  console.log(val);
+};
+// const submitUpload = () => {
+//   let promise = new Promise((resolve, reject) => {
+//     setTimeout(async () => {
+//       await uploadRef.value.submit();
+//       resolve("涓婁紶鎴愬姛");
+//     });
+//   });
+//   return promise;
+// };
+
+//鏂板缓鐢ㄦ埛璐﹀彿
+const saveObj = async (formEl) => {
+  // submitUpload();
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    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();
+        });
+      }
+    } else {
+      console.log("error submit!", fields);
+    }
+  });
+};
+//鏄惁鍚敤
+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) => {
+  let obj = Object.assign({}, val);
+  formUser.value = {
+    ...obj,
+  };
+  if (obj.headImageUrl != "") {
+    fileList.value = [
+      {
+        name: "1",
+        url: "http://115.159.85.185:9098" + obj.headImageUrl,
+      },
+    ];
+  }
+
   dialogVisible.value = true;
 };
-// 鏌ョ湅鍔涚煩
-const Findtorque = () => {
-  TorquedialogVisible.value = true;
+const newobj = ref({});
+//淇敼瀵嗙爜
+const Editpassword = (val) => {
+  let obj = Object.assign({}, val);
+  formUser.value = obj;
+  formpassword.value = val;
+  newobj.value = Object.assign({}, val);
+  console.log(newobj.value);
+
+  dialogVisible1.value = true;
 };
+//淇濆瓨淇敼瀵嗙爜
+const savePassword = async (formEl) => {
+  let obj = Object.assign({}, newobj);
+  // obj.password = formpassword.value.password;
+  console.log(formUser.value);
+
+  let formdata = {
+    id: formUser.value.user_Id,
+    oldPwd: formUser.value.userPwd,
+    newPwd: formUser.value.newPwd,
+  };
+  if (!formEl) return;
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      UpdatePwd(formdata).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: "",
+  createDate: formatTime(new Date()), //鍒涘缓鏃堕棿
+  creater: JSON.parse(localStorage.getItem("user")).userName, //鍒涘缓浜�
+});
+
+//鏂板缓瑙掕壊
+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 = () => {
+  const startTime = formatTime(queryForm.value.selectTime[0]);
+  const endTime = formatTime(queryForm.value.selectTime[1]);
+  const filter = [
+    {
+      name: queryForm.value.selectType,
+      value: queryForm.value.selectInput,
+      displayType: "like",
+    },
+    { name: "createDate", value: startTime, displayType: "ThanOrEqual" },
+    { name: "createDate", value: endTime, displayType: "LessOrEqual" },
+  ];
+  GetPageDataApi({ ...pageQuery.value, filter }).then((res) => {
+    grideData.value = res.rows;
+    pageTotal.value = res.total;
+    groupOptions.value = res.rows;
+  });
+};
+//鎵撳嵃鏁版嵁
+const printExcel = () => {
+  // 鏌ヨ鏉′欢
+  const startTime = formatTime(queryForm.value.selectTime[0]);
+  const endTime = formatTime(queryForm.value.selectTime[1]);
+  const filter = [
+    {
+      name: queryForm.value.selectType,
+      value: queryForm.value.selectInput,
+      displayType: "like",
+    },
+    {
+      name: "pustatus",
+      value: queryForm.value.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 changeactive = (index) => {
+  isactive.value = index;
+  if (isactive.value == 1) {
+    selectoptions.value = userOptions;
+    initData();
+  } else {
+    selectoptions.value = roleOptions;
+    getRole();
+  }
+};
+
+//鎵归噺鍒犻櫎
+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.includes(1)) {
+    ElMessage({ message: "瓒呯骇绠$悊鍛樹笉鑳藉垹闄�", type: "error" });
+    return;
+  }
+  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();
+    });
+  }
+};
+//绠$悊
+//璺敱璺宠浆
+const toDetail = (row) => {
+  router.push({ name: "permission", state: { info: JSON.stringify(row) } });
+};
+
+onMounted(() => {
+  initData();
+});
 </script>
 <style lang="scss" scoped>
 .Usermanagement {
   display: flex;
   background-color: #fff;
+
   .content {
     width: 100%;
     display: flex;
     flex-direction: column;
+
     .checkbox {
       width: 11rem;
       display: flex;
       justify-content: space-between;
       margin-top: 1rem;
       margin-left: 1.31rem;
+
       .item {
         width: 5rem;
         height: 1.88rem;
@@ -680,20 +1369,24 @@
         line-height: 1.88rem;
         cursor: pointer;
       }
+
       .isactive {
         background-color: rgba(16, 16, 16, 1);
         color: rgba(255, 255, 255, 1);
       }
     }
+
     .serch {
       display: flex;
       margin-top: 1.31rem;
       align-items: center;
+
       .time_box {
         display: flex;
         align-items: center;
         text-align: center;
         margin-left: 0.98rem;
+
         .time {
           box-sizing: border-box;
           width: 6.88rem;
@@ -707,24 +1400,25 @@
           justify-content: center;
         }
       }
+
       .serch_box {
         display: flex;
         align-items: center;
         text-align: center;
         margin-left: 0.98rem;
         border-radius: 0.38rem;
+
         .serchb {
           box-sizing: border-box;
           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;
           justify-content: center;
         }
+
         input {
           box-sizing: border-box;
           outline: none;
@@ -737,6 +1431,7 @@
         }
       }
     }
+
     .btns {
       display: flex;
       justify-content: space-between;
@@ -747,17 +1442,20 @@
       box-sizing: border-box;
     }
   }
+
   .my-header {
     height: 3.84rem;
     display: flex;
     justify-content: space-between;
     border-bottom: 0.06rem solid rgba(233, 233, 233, 1);
   }
+
   .avatar-uploader .avatar {
     width: 7rem;
     height: 7rem;
     display: block;
   }
+
   :deep(.avatar-uploader .el-upload) {
     width: 7rem;
     height: 7rem;
@@ -768,10 +1466,12 @@
     overflow: hidden;
     transition: var(--el-transition-duration-fast);
   }
+
   :deep(.el-upload-list__item) {
     width: 7rem;
     height: 7rem;
   }
+
   .avatar-uploader .el-upload:hover {
     border-color: var(--el-color-primary);
   }
@@ -789,6 +1489,7 @@
 .confirmButtonClass {
   margin-right: 10px;
 }
+
 .el-message-box .el-message-box__btns {
   flex-direction: row-reverse !important;
   justify-content: normal !important;

--
Gitblit v1.9.3