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