From 000a89a294e2cdb493bb3ce178d686e58bd40196 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期一, 23 十二月 2024 22:27:12 +0800
Subject: [PATCH] 更新234

---
 src/types/views.d.ts                          |    8 
 src/stores/userInfo.ts                        |   10 
 src/layout/navBars/topBar/user.vue            |   57 ++++-
 src/types/pinia.d.ts                          |    7 
 src/router/frontEnd.ts                        |    1 
 src/views/personal/component/editUserInfo.vue |  118 +++++++++++++
 src/api/Patients/index.ts                     |   10 +
 src/views/login/component/account.vue         |   89 ++++++++-
 src/api/login/index.ts                        |   26 ++
 src/views/personal/index.vue                  |  168 ++++++++---------
 10 files changed, 372 insertions(+), 122 deletions(-)

diff --git a/src/api/Patients/index.ts b/src/api/Patients/index.ts
index 0e1e32b..7e1af0b 100644
--- a/src/api/Patients/index.ts
+++ b/src/api/Patients/index.ts
@@ -49,6 +49,16 @@
 		data: params,
 	});
 }
+export function getUserDetail2(params: string) {
+	return request({
+		url: '/user/info/detail2',
+		method: 'post',
+        headers: {
+            'Content-Type': 'application/x-www-form-urlencoded'
+        },
+		data: params,
+	});
+}
 // 保存患者套餐对象
 export function updateNurtion(params: Object) {
 	return request({
diff --git a/src/api/login/index.ts b/src/api/login/index.ts
index 6840349..c516072 100644
--- a/src/api/login/index.ts
+++ b/src/api/login/index.ts
@@ -33,3 +33,29 @@
 		method: 'post'
 	})
 }
+// 修改用户信息
+export function editUserInfo(params:object) {
+	return request({
+		url: '/user/info/update',
+		method: 'post',
+		data: params
+	})
+}
+
+export function confirmClient(params: string) {
+	return request({
+		url: '/user/info/confirmClient',
+		method: 'post',
+        headers: {
+            'Content-Type': 'application/x-www-form-urlencoded'
+        },
+		data: params,
+	});
+}
+export function getclients(params: object) {
+	return request({
+		url: '/client/info/list',
+		method: 'post',
+		params,
+	});
+}
\ No newline at end of file
diff --git a/src/layout/navBars/topBar/user.vue b/src/layout/navBars/topBar/user.vue
index 7dfcbf3..ada91a1 100644
--- a/src/layout/navBars/topBar/user.vue
+++ b/src/layout/navBars/topBar/user.vue
@@ -1,6 +1,22 @@
 <template>
 	<div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }">
-		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange">
+		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click">
+			<div class="layout-navbars-breadcrumb-user-icon">
+				<span style="font-weight: 800;">{{userInfos.clientName}}</span>	<el-icon><Location /></el-icon>
+
+			</div>
+			<template #dropdown>
+				<el-dropdown-menu>
+					<el-dropdown-item v-for="(client,key) in userInfos.clientInfos" :key="key" @click="clientSet(client)" >
+						<span :style="{color:userInfos.clientName===client.clientName?'#409EFF':''}">
+							{{client.clientName}}
+						</span>
+						
+					</el-dropdown-item>
+				</el-dropdown-menu>
+			</template>
+		</el-dropdown>
+		<!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange">
 			<div class="layout-navbars-breadcrumb-user-icon">
 				<i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i>
 			</div>
@@ -11,8 +27,8 @@
 					<el-dropdown-item command="small" :disabled="state.disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item>
 				</el-dropdown-menu>
 			</template>
-		</el-dropdown>
-		<el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">
+		</el-dropdown> -->
+		<!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">
 			<div class="layout-navbars-breadcrumb-user-icon">
 				<i
 					class="iconfont"
@@ -27,16 +43,16 @@
 					<el-dropdown-item command="zh-tw" :disabled="state.disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>
 				</el-dropdown-menu>
 			</template>
-		</el-dropdown>
-		<div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
+		</el-dropdown> -->
+		<!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">
 			<el-icon :title="$t('message.user.title2')">
 				<ele-Search />
 			</el-icon>
-		</div>
-		<div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">
+		</div> -->
+		<!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">
 			<i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>
-		</div>
-		<div class="layout-navbars-breadcrumb-user-icon" ref="userNewsBadgeRef" v-click-outside="onUserNewsClick">
+		</div> -->
+		<!-- <div class="layout-navbars-breadcrumb-user-icon" ref="userNewsBadgeRef" v-click-outside="onUserNewsClick">
 			<el-badge :is-dot="true">
 				<el-icon :title="$t('message.user.title4')">
 					<ele-Bell />
@@ -54,14 +70,14 @@
 			:persistent="false"
 		>
 			<UserNews />
-		</el-popover>
-		<div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick">
+		</el-popover> -->
+		<!-- <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick">
 			<i
 				class="iconfont"
 				:title="state.isScreenfull ? $t('message.user.title6') : $t('message.user.title5')"
 				:class="!state.isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"
 			></i>
-		</div>
+		</div> -->
 		<el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick">
 			<span class="layout-navbars-breadcrumb-user-link">
 				<img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" />
@@ -73,10 +89,10 @@
 			<template #dropdown>
 				<el-dropdown-menu>
 					<el-dropdown-item command="/home">{{ $t('message.user.dropdown1') }}</el-dropdown-item>
-					<el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item>
+					<!-- <el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item> -->
 					<el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item>
-					<el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item>
-					<el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item>
+					<!-- <el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item> -->
+					<!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item> -->
 					<el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item>
 				</el-dropdown-menu>
 			</template>
@@ -93,6 +109,8 @@
 import { useI18n } from 'vue-i18n';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '/@/stores/userInfo';
+import {confirmClient} from '/@/api/login'
+
 import { useThemeConfig } from '/@/stores/themeConfig';
 import other from '/@/utils/other';
 import mittBus from '/@/utils/mitt';
@@ -212,6 +230,14 @@
 const initI18nOrSize = (value: string, attr: string) => {
 	(<any>state)[attr] = Local.get('themeConfig')[value];
 };
+const clientSet=(client:any)=>{
+	useUserInfo().setUserCilent({code:client.code,clientName:client.clientName});
+	confirmClient('clientCode='+client.code).then((res)=>{
+		// 更新token
+		Session.set('token', res.data);
+		window.location.reload();
+	})
+}
 // 页面加载时
 onMounted(() => {
 	if (Local.get('themeConfig')) {
@@ -219,6 +245,7 @@
 		initI18nOrSize('globalI18n', 'disabledI18n');
 	}
 });
+
 </script>
 
 <style scoped lang="scss">
diff --git a/src/router/frontEnd.ts b/src/router/frontEnd.ts
index 5393f93..57e8a53 100644
--- a/src/router/frontEnd.ts
+++ b/src/router/frontEnd.ts
@@ -23,6 +23,7 @@
 	if (window.nextLoading === undefined) NextLoading.start();
 	// 无 token 停止执行下一步
 	if (!Session.get('token')) return false;
+	//检查用户是管理员账号可以选择客户登录
 	// 触发初始化用户信息 pinia
 	// https://gitee.com/lyt-top/vue-next-admin/issues/I5F1HP
 	await useUserInfo(pinia).setUserInfos();
diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts
index 3272e74..869bfde 100644
--- a/src/stores/userInfo.ts
+++ b/src/stores/userInfo.ts
@@ -17,7 +17,8 @@
 			roles: [],
 			authBtnList: [],
 			clientCode:'',
-			clientName:''
+			clientName:'',
+			clientInfos:[],
 		},
 	}),
 	actions: {
@@ -85,13 +86,18 @@
 						authBtnList: defaultAuthBtnList,
 						clientCode:userRet.currentClientInfo.code,
 						clientName:userRet.currentClientInfo.clientName,
+						clientInfos:userRet.clientInfos
 					};
 					console.log('-----------------2222------------------------------')
-					console.log(defaultRoles)
+					console.log(userInfos)
 					// Session.set('userInfo', userInfos);
 					resolve(userInfos);
 				}, 0);
 			});
 		},
+		async setUserCilent(client:clientInfo){
+			this.userInfos.clientCode=client.code
+			this.userInfos.clientName=client.clientName
+		}	
 	},
 });
diff --git a/src/types/pinia.d.ts b/src/types/pinia.d.ts
index 5a056bc..6f2155a 100644
--- a/src/types/pinia.d.ts
+++ b/src/types/pinia.d.ts
@@ -1,6 +1,10 @@
 /**
  * pinia 类型定义
  */
+declare interface clientInfo {
+	code:string,
+	clientName:string,
+}
 
 // 用户信息
 declare interface UserInfos<T = any> {
@@ -10,7 +14,8 @@
 	time: number;
 	userName: string;
 	clientCode:string,
-	clientName:string
+	clientName:string,
+	clientInfos:[]
 	[key: string]: T;
 }
 declare interface UserInfosState {
diff --git a/src/types/views.d.ts b/src/types/views.d.ts
index 7dabd25..28229bd 100644
--- a/src/types/views.d.ts
+++ b/src/types/views.d.ts
@@ -17,13 +17,15 @@
 	newsInfoList: NewInfo[];
 	recommendList: Recommend[];
 	personalForm: {
+		id:number,
+		code:string,
 		name: string;
 		email: string;
-		autograph: string;
-		occupation: string;
 		phone: string;
-		sex: string;
+		sex: number;
+		roles:Array;
 	};
+	isShowDialog:boolean;
 };
 
 /**
diff --git a/src/views/login/component/account.vue b/src/views/login/component/account.vue
index 5fc48b0..38ecb11 100644
--- a/src/views/login/component/account.vue
+++ b/src/views/login/component/account.vue
@@ -27,6 +27,11 @@
 				</template>
 			</el-input>
 		</el-form-item>
+		<el-form-item v-if="state.clients.length>1">
+			<el-select v-model="state.ruleForm.clientCode" placeholder="请选择登录客户">
+				<el-option v-for="item in state.clients" :key="item.code" :label="item.clientName" :value="item.code" />
+			</el-select>
+		</el-form-item>
 		<!-- <el-form-item class="login-animation3">
 			<el-col :span="15">
 				<el-input
@@ -65,11 +70,10 @@
 import { useThemeConfig } from '/@/stores/themeConfig';
 import { initFrontEndControlRoutes } from '/@/router/frontEnd';
 import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { Session } from '/@/utils/storage';
+import { Session,Local } from '/@/utils/storage';
 import { formatAxis } from '/@/utils/formatTime';
 import { NextLoading } from '/@/utils/loading';
-import { signIn } from '/@/api/login';
-import { error } from 'console';
+import { confirmClient, getuserinfo, signIn,getclients } from '/@/api/login';
 
 // 定义变量内容
 const { t } = useI18n();
@@ -78,12 +82,15 @@
 const route = useRoute();
 const router = useRouter();
 const state = reactive({
+	LS_token: '',
 	isShowPassword: false,
 	ruleForm: {
 		userName: 'cycems',
 		password: '123456',
 		code: '1234',
+		clientCode: '',
 	},
+	clients: [],
 	loading: {
 		signIn: false,
 	},
@@ -95,24 +102,80 @@
 });
 // 登录
 const onSignIn = async () => {
-	try{
-		state.loading.signIn = true;
-    	const signInRes = await signIn(`user_no=${state.ruleForm.userName}&user_password=${state.ruleForm.password}`)
-		if(signInRes.data){
-			// 存储 token 到浏览器缓存
-			Session.set('token', signInRes.data);
+	try {
+		// 第二次请求登录获取到了客户 换绑定token
+		if (state.ruleForm.clientCode) {
+			// 重新绑定token
+			const tokenRe= await confirmClient('clientCode='+state.ruleForm.clientCode);
+			// 更新token
+			Session.set('token', tokenRe.data);
+			// 更新客户选择缓存
+			Local.set('client_'+state.ruleForm.userName,state.ruleForm.clientCode)
+			console.log('更新tokeng重新请求用户信息')
 			// 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据)
 			Cookies.set('userName', state.ruleForm.userName);
 			// 前端控制路由,2、请注意执行顺序
 			const isNoPower = await initFrontEndControlRoutes();
 			signInSuccess(isNoPower);
 
+		} else { //第一次登录没有选择到客户
+			state.loading.signIn = true;
+			const signInRes = await signIn(`user_no=${state.ruleForm.userName}&user_password=${state.ruleForm.password}`);
+			if (signInRes.data) {
+				// 存储 token 到浏览器缓存
+				Session.set('token', signInRes.data);
+				const userinfoRes = await getuserinfo();
+				if (userinfoRes?.data?.clientInfos.length > 1) {
+					console.log('多中心管理账号');
+					console.log(userinfoRes.data);
+					state.clients = userinfoRes?.data?.clientInfos;
+					state.loading.signIn = false;
+					console.log(Local.get('client_'+state.ruleForm.userName))
+					// 看看有没有缓存客户选择
+					const lscode=Local.get('client_'+state.ruleForm.userName)
+					if(lscode){
+						const x=state.clients.findIndex((cl:any)=>{return cl.code===lscode})
+						if(x>=0){
+							// 默认选择客户项
+							state.ruleForm.clientCode=lscode
+						}
+						
+					}
+					ElMessage.success('请选择登录客户再登录')
+				} else if (
+					userinfoRes?.data?.roles.findIndex((ro: any) => {
+						return ro.roleName === 'admin';
+					}) >= 0
+				) {
+
+					console.log('管理员登录');
+						var ps= new Object ({
+						page: 0,
+						size: 0,
+						wherecondition: '',
+						ordercondition: 'create_time desc'
+					})
+					getclients(ps).then(re=>{
+						state.clients = re.data.list;
+					}).finally(()=>{
+						state.loading.signIn = false;
+					})
+					
+				} else {
+					console.log('普通登录');
+					console.log('-----------用token 换用户信息---------------');
+					// 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据)
+					Cookies.set('userName', state.ruleForm.userName);
+					// 前端控制路由,2、请注意执行顺序
+					const isNoPower = await initFrontEndControlRoutes();
+					signInSuccess(isNoPower);
+				}
+			}
 		}
-	}catch(err){
-		console.log(err)
-		state.loading.signIn = false
+	} catch (err) {
+		console.log(err);
+		state.loading.signIn = false;
 	}
-	
 
 	// 存储 token 到浏览器缓存
 	// Session.set('token', '999');
diff --git a/src/views/personal/component/editUserInfo.vue b/src/views/personal/component/editUserInfo.vue
new file mode 100644
index 0000000..0a01775
--- /dev/null
+++ b/src/views/personal/component/editUserInfo.vue
@@ -0,0 +1,118 @@
+<template>
+    <el-dialog title="密码修改" v-model="isShowDialog" width="400px">
+      <div class="personal-info">
+  
+        <el-form :model="form" label-width="120px" :rules="rules" ref="formRef" size="small">
+          <el-form-item label="新密码:" prop="newUserPassword">
+            <el-input  type="password" show-password v-model="form.newUserPassword" placeholder="输入输入新密码"></el-input>
+          </el-form-item>
+          <el-form-item label="确认密码:" prop="userPassword">
+            <el-input type="password" show-password v-model="form.userPassword" placeholder="输入输入确认密码"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <div style="text-align:center">
+          <el-button type="danger" @click="isShowDialog = false" size="small">取消</el-button>
+          <el-button type="primary" size="small" @click="save">保存</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </template>
+  <script lang="ts">
+  import { reactive, toRefs, getCurrentInstance } from 'vue'
+  import { editUserInfo } from '/@/api/login'
+  import { ElMessage, ElMessageBox } from 'element-plus';
+  import { Session, Local } from '/@/utils/storage';
+  import { useRouter } from 'vue-router';
+  export default {
+    name: 'personalInfo',
+    setup() {
+      const {proxy} = getCurrentInstance() as any
+      const router = useRouter();
+      const state = reactive({
+        // 是否显示dialog
+        isShowDialog: false,
+        // 表单
+        form: {
+          id: 0,
+          // 用户名
+          userNo: '',
+          // 用户姓名
+          userName: '',
+          // 用户手机号
+          userMobile: '',
+          newUserPassword:'',
+          // 用户密码
+          userPassword: '',
+          // 邮箱
+          userEmail: ''
+        },
+        // 表单校验
+        rules: {
+          newUserPassword: { min: 6, max:16,required: true,   message: '请输入6-16位密码', trigger: 'blur'},
+          userPassword: [{ min: 6, max:16,required: true,   message: '请输入6-16位密码', trigger: 'blur' },
+          {
+            validator: (rule, value, callback) => {
+              if (value !== state.form.newUserPassword) callback(new Error('两次密码不一致'))
+                else callback()
+              },
+            
+          }],
+              }
+      })
+      // 保存
+        const save = () => {
+          proxy.$refs['formRef'].validate((valid:boolean) => {
+            if (valid) {
+              const pasm={
+                id:state.form.id,
+                userPassword:state.form.userPassword
+              }
+              editUserInfo(pasm).then(() => {
+                state.isShowDialog = false
+                ElMessageBox.confirm(
+                '密码修改成功,您需要重新登录吗??',
+                '提示',
+                {
+                  confirmButtonText: '确认',
+                  cancelButtonText: '取消',
+                  type: 'warning',
+                }
+              )
+                .then(() => {
+                  Session.clear(); // 清除缓存/token等
+                  router.push('/login');
+                })
+                .catch(() => {
+                 
+                })
+  
+              })
+            }
+          })
+        }
+      // 打开dialog
+      const openDialog = (content) => {
+        console.log('打开--')
+        console.log(content)
+        state.form.id = content.id
+        state.form.newUserPassword = ''
+        state.form.userPassword = ''
+        state.isShowDialog = true
+      }
+      return {
+        // 保存
+        save,
+        ...toRefs(state),
+        // 打开dialog
+        openDialog
+      }
+    }
+  }
+  </script>
+  <style lang="scss" scoped>
+  .personal-info {
+  
+  }
+  </style>
\ No newline at end of file
diff --git a/src/views/personal/index.vue b/src/views/personal/index.vue
index 4ca238e..69980dc 100644
--- a/src/views/personal/index.vue
+++ b/src/views/personal/index.vue
@@ -16,25 +16,22 @@
 								<el-col :span="24">
 									<el-row>
 										<el-col :xs="24" :sm="8" class="personal-item mb6">
-											<div class="personal-item-label">昵称:</div>
-											<div class="personal-item-value">小柒</div>
+											<div class="personal-item-label">姓名:</div>
+											<div class="personal-item-value">{{state.personalForm.name}}</div>
 										</el-col>
 										<el-col :xs="24" :sm="16" class="personal-item mb6">
 											<div class="personal-item-label">身份:</div>
-											<div class="personal-item-value">超级管理</div>
+											<div class="personal-item-value">
+												<el-tag style="margin-right:20px" type="warning" v-for="item in state.personalForm.roles" :key="item">{{item.roleText}}</el-tag>
+											</div>
 										</el-col>
 									</el-row>
 								</el-col>
 								<el-col :span="24">
 									<el-row>
-										<el-col :xs="24" :sm="8" class="personal-item mb6">
-											<div class="personal-item-label">登录IP:</div>
-											<div class="personal-item-value">192.168.1.1</div>
-										</el-col>
-										<el-col :xs="24" :sm="16" class="personal-item mb6">
-											<div class="personal-item-label">登录时间:</div>
-											<div class="personal-item-value">2021-02-05 18:47:26</div>
-										</el-col>
+										<div  v-for="item in userInfos.clientInfos" :key="item.code">
+												<el-tag style="margin-right:20px" type="primary" >{{item.clientName}}</el-tag>
+											</div>
 									</el-row>
 								</el-col>
 							</el-row>
@@ -60,22 +57,7 @@
 				</el-card>
 			</el-col>
 
-			<!-- 营销推荐 -->
-			<el-col :span="24">
-				<el-card shadow="hover" class="mt15" header="营销推荐">
-					<el-row :gutter="15" class="personal-recommend-row">
-						<el-col :sm="6" v-for="(v, k) in state.recommendList" :key="k" class="personal-recommend-col">
-							<div class="personal-recommend" :style="{ 'background-color': v.bg }">
-								<SvgIcon :name="v.icon" :size="70" :style="{ color: v.iconColor }" />
-								<div class="personal-recommend-auto">
-									<div>{{ v.title }}</div>
-									<div class="personal-recommend-msg">{{ v.msg }}</div>
-								</div>
-							</div>
-						</el-col>
-					</el-row>
-				</el-card>
-			</el-col>
+			
 
 			<!-- 更新信息 -->
 			<el-col :span="24">
@@ -84,27 +66,13 @@
 					<el-form :model="state.personalForm" size="default" label-width="40px" class="mt35 mb35">
 						<el-row :gutter="35">
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="昵称">
+								<el-form-item label="姓名">
 									<el-input v-model="state.personalForm.name" placeholder="请输入昵称" clearable></el-input>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
 								<el-form-item label="邮箱">
 									<el-input v-model="state.personalForm.email" placeholder="请输入邮箱" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="签名">
-									<el-input v-model="state.personalForm.autograph" placeholder="请输入签名" clearable></el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
-								<el-form-item label="职业">
-									<el-select v-model="state.personalForm.occupation" placeholder="请选择职业" clearable class="w100">
-										<el-option label="计算机 / 互联网 / 通信" value="1"></el-option>
-										<el-option label="生产 / 工艺 / 制造" value="2"></el-option>
-										<el-option label="医疗 / 护理 / 制药" value="3"></el-option>
-									</el-select>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
@@ -115,14 +83,14 @@
 							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
 								<el-form-item label="性别">
 									<el-select v-model="state.personalForm.sex" placeholder="请选择性别" clearable class="w100">
-										<el-option label="男" value="1"></el-option>
-										<el-option label="女" value="2"></el-option>
+										<el-option label="男" :value="0"></el-option>
+										<el-option label="女" :value="1"></el-option>
 									</el-select>
 								</el-form-item>
 							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+							<el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4" class="mb20">
 								<el-form-item>
-									<el-button type="primary">
+									<el-button type="primary" @click="updatePat">
 										<el-icon>
 											<ele-Position />
 										</el-icon>
@@ -137,75 +105,98 @@
 						<div class="personal-edit-safe-item">
 							<div class="personal-edit-safe-item-left">
 								<div class="personal-edit-safe-item-left-label">账户密码</div>
-								<div class="personal-edit-safe-item-left-value">当前密码强度:强</div>
+								<div class="personal-edit-safe-item-left-value">当前密码强度:一般</div>
 							</div>
 							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即修改</el-button>
+								<el-button text type="primary" @click="updataPSWD">立即修改</el-button>
 							</div>
 						</div>
 					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">密保手机</div>
-								<div class="personal-edit-safe-item-left-value">已绑定手机:132****4108</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即修改</el-button>
-							</div>
-						</div>
-					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">密保问题</div>
-								<div class="personal-edit-safe-item-left-value">已设置密保问题,账号安全大幅度提升</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即设置</el-button>
-							</div>
-						</div>
-					</div>
-					<div class="personal-edit-safe-box">
-						<div class="personal-edit-safe-item">
-							<div class="personal-edit-safe-item-left">
-								<div class="personal-edit-safe-item-left-label">绑定QQ</div>
-								<div class="personal-edit-safe-item-left-value">已绑定QQ:110****566</div>
-							</div>
-							<div class="personal-edit-safe-item-right">
-								<el-button text type="primary">立即设置</el-button>
-							</div>
-						</div>
-					</div>
+					
 				</el-card>
 			</el-col>
 		</el-row>
+		<editTemplate ref="editTemplateRef"></editTemplate>
 	</div>
 </template>
 
 <script setup lang="ts" name="personal">
-import { reactive, computed } from 'vue';
+import editTemplate from '/@/views/personal/component/editUserInfo.vue'
+import { reactive, computed, onMounted, ref } from 'vue';
 import { formatAxis } from '/@/utils/formatTime';
-import { newsInfoList, recommendList } from './mock';
-
+import { storeToRefs } from 'pinia';
+import { useUserInfo } from '/@/stores/userInfo';
+import {  recommendList } from './mock';
+import {getUserDetail2} from '/@/api/Patients'
+import {editUserInfo} from '/@/api/login'
+import { ElLoading } from 'element-plus';
+const stores = useUserInfo();
+const { userInfos } = storeToRefs(stores);
 // 定义变量内容
 const state = reactive<PersonalState>({
-	newsInfoList,
+	newsInfoList:[],
 	recommendList,
 	personalForm: {
+		id:0,
+		code:'',
 		name: '',
 		email: '',
-		autograph: '',
-		occupation: '',
 		phone: '',
-		sex: '',
+		sex: 0,
+		roles:[]
 	},
+	isShowDialog:false,
 });
+const editTemplateRef=ref()
 
 // 当前时间提示语
 const currentTime = computed(() => {
 	return formatAxis(new Date());
 });
+const updatePat=()=>{
+	const data={
+		id: state.personalForm.id,
+		code:state.personalForm.code,
+		userGender: state.personalForm.sex,
+		userName: state.personalForm.name,
+		userMobile: state.personalForm.phone,
+		userEmail:state.personalForm.email
+	}
+	console.log(data)
+	const loading = ElLoading.service({
+		lock: true,
+		text: 'Loading',
+		background: 'rgba(0, 0, 0, 0.7)',
+	})
+	editUserInfo(data).then(res=>{
+		console.log(res.data)
+	}).finally(()=>{
+		loading.close()
+		getDetail()
+	})
+}
+// 获取当前用户信息
+const getDetail = () => {
+      getUserDetail2(`code=${userInfos.value.code}`).then((res) => {
+		state.personalForm.id=res.data.id
+		state.personalForm.code=res.data.code
+        state.personalForm.name = res.data.userName
+        state.personalForm.phone = res.data.userMobile
+        state.personalForm.email = res.data.userEmail
+        state.personalForm.sex = res.data.userGender
+		state.personalForm.roles=res.data.roles
+
+		console.log(state.personalForm,'0000000')
+      })
+
+    }
+const updataPSWD=()=>{
+	editTemplateRef.value.openDialog(state.personalForm)
+}
+onMounted(()=>{
+	console.log(userInfos,'00000')
+	getDetail()
+})
 </script>
 
 <style scoped lang="scss">
@@ -252,6 +243,7 @@
 				}
 				.personal-item-value {
 					@include text-ellipsis(1);
+					
 				}
 			}
 		}

--
Gitblit v1.8.0