chenyc
2024-12-23 000a89a294e2cdb493bb3ce178d686e58bd40196
更新234
1个文件已添加
9个文件已修改
494 ■■■■ 已修改文件
src/api/Patients/index.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/login/index.ts 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/navBars/topBar/user.vue 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/frontEnd.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/stores/userInfo.ts 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/pinia.d.ts 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/types/views.d.ts 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/login/component/account.vue 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personal/component/editUserInfo.vue 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personal/index.vue 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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({
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,
    });
}
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">
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();
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
        }
    },
});
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 {
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;
};
/**
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');
src/views/personal/component/editUserInfo.vue
New file
@@ -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>
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);
                }
            }
        }