浏览代码

人才详情

Xiao_123 6 月之前
父节点
当前提交
fae6b36be7

+ 4 - 4
.env.local

@@ -4,15 +4,15 @@ NODE_ENV=development
 VITE_DEV=true
 
 # 请求路径
-VITE_BASE_URL='https://www.menduner.com:1443/' # 生产环境
-# VITE_BASE_URL='http://192.168.3.80' # 测试环境
+# VITE_BASE_URL='https://www.menduner.com:1443/' # 生产环境
+VITE_BASE_URL='http://192.168.3.80' # 测试环境
 
 # 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
 VITE_UPLOAD_TYPE=server
 
 # 上传路径
-VITE_UPLOAD_URL='https://www.menduner.com:1443/admin-api/infra/file/upload' # 生产环境
-# VITE_UPLOAD_URL='http://192.168.3.80/admin-api/infra/file/upload' # 测试环境
+# VITE_UPLOAD_URL='https://www.menduner.com:1443/admin-api/infra/file/upload' # 生产环境
+VITE_UPLOAD_URL='http://192.168.3.80/admin-api/infra/file/upload' # 测试环境
 
 # 接口地址
 VITE_API_URL=/admin-api

+ 25 - 0
src/api/menduner/system/person/index.ts

@@ -58,6 +58,11 @@ export const PersonInfoApi = {
     return await request.get({ url: `/menduner/system/person-info/get?id=` + id })
   },
 
+  // 查询用户详情
+  getUserDetails: async (userId: string) => {
+    return await request.get({ url: `/menduner/system/mde-user/get?id=` + userId })
+  },
+
   // 获取用户账户
   getPersonAccount: async (userId: string) => {
     return await request.get({ url: `/menduner/system/user-account/get?userId=` + userId })
@@ -106,5 +111,25 @@ export const PersonInfoApi = {
   // 根据用户编号获取企业关注订阅数量
   getPersonEnterpriseSubscribeCount: async (userId: string) => {
     return await request.get({ url: `/menduner/system/person-enterprise-subscribe/count?userId=` + userId })
+  },
+
+  // 禁用账户
+  disabledUserAccount: async (id: number) => {
+    return await request.post({ url: `/menduner/system/mde-user/disable?id=${id}` })
+  },
+
+  // 启用账户
+  enableUserAccount: async (id: number) => {
+    return await request.post({ url: `/menduner/system/mde-user/enable?id=${id}` })
+  },
+
+   // 重置用户密码
+   resetUserRegister: async (data: any) => {
+    return await request.put({ url: `/menduner/system/mde-user/update-password`, data })
+  },
+
+  // 会员类型-获取用户套餐列表
+  getPersonPackageList: async () => {
+    return await request.get({ url: `/menduner/system/user-package/list` })
   }
 }

+ 2 - 0
src/components/Pagination/index.vue

@@ -11,6 +11,8 @@
     :small="isSmall"
     class="float-right mb-15px mt-15px"
     layout="total, sizes, prev, pager, next, jumper"
+    next-text="下一页"
+    prev-text="上一页"
     @size-change="handleSizeChange"
     @current-change="handleCurrentChange"
   />

+ 7 - 7
src/views/menduner/system/enterprise/auth/index.vue

@@ -71,18 +71,18 @@
   <!-- 列表 -->
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true" >
-      <el-table-column label="id" align="center" prop="id" :show-overflow-tooltip="true" />
-      <el-table-column label="用户id" align="center" prop="userId" :show-overflow-tooltip="true" />
-      <el-table-column label="所属企业id" align="center" prop="enterpriseId" :show-overflow-tooltip="true" />
+      <!-- <el-table-column label="id" align="center" prop="id" :show-overflow-tooltip="true" /> -->
+      <!-- <el-table-column label="用户id" align="center" prop="userId" :show-overflow-tooltip="true" /> -->
+      <!-- <el-table-column label="所属企业id" align="center" prop="enterpriseId" :show-overflow-tooltip="true" /> -->
       <el-table-column label="认证人姓名" align="center" prop="name" />
       <el-table-column label="人像照" align="center" prop="status">
         <template #default="scope">
-          <el-image style="width: 80px; height: 80px" :src="scope.row.frontUrl" />
+          <el-image class="h-80px w-80px" :src="scope.row.frontUrl" lazy preview-teleported :preview-src-list="[scope.row.frontUrl]"  />
         </template>
       </el-table-column>
       <el-table-column label="国徽照" align="center" prop="status">
         <template #default="scope">
-          <el-image style="width: 80px; height: 80px" :src="scope.row.backUrl" />
+          <el-image class="h-80px w-80px" :src="scope.row.backUrl" lazy preview-teleported :preview-src-list="[scope.row.backUrl]" />
         </template>
       </el-table-column>
       <el-table-column label="审核状态" align="center" prop="status">
@@ -101,13 +101,13 @@
       />
       <el-table-column label="操作" align="center">
         <template #default="scope">
-          <el-button
+          <!-- <el-button
             link
             type="primary"
             @click="handleDetails(scope.row.id)"
           >
             详情
-          </el-button>
+          </el-button> -->
           <el-button
             v-if="scope.row.status === '0'"
             link

+ 5 - 53
src/views/menduner/system/enterprise/message/index.vue

@@ -44,39 +44,6 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="所在行业" prop="industryId" v-hasPermi="['menduner:system:enterprise:query']">
-        <el-cascader v-model="queryParams.industryId" :options="industry" :props="{ emitPath: false, label: 'nameCn', value: 'id' }" />
-      </el-form-item>
-      <el-form-item label="融资阶段" prop="financingStatus" v-hasPermi="['menduner:system:enterprise:query']">
-        <el-select
-          v-model="queryParams.financingStatus"
-          placeholder="请选择融资阶段"
-          clearable
-          class="!w-240px"
-        >
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_FINANCING_STATUS)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="人员规模" prop="scale" v-hasPermi="['menduner:system:enterprise:query']">
-        <el-select
-          v-model="queryParams.scale"
-          placeholder="请选择人员规模"
-          clearable
-          class="!w-240px"
-        >
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_SCALE)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
       <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:enterprise-user-bind:query']">
         <el-date-picker
           v-model="queryParams.createTime"
@@ -106,24 +73,15 @@
 
   <!-- 列表 -->
   <ContentWrap>
-    <!-- :show-overflow-tooltip="true" -->
     <el-table v-loading="loading" :data="list" :stripe="true">
-      <!-- <el-table-column label="id" align="center" prop="id" /> -->
       <el-table-column label="企业全称" align="center" prop="name" />
       <el-table-column label="企业别称" align="center" prop="anotherName" />
       <el-table-column label="联系人" align="center" prop="contact" />
       <el-table-column label="联系电话" align="center" prop="phone" />
-      <el-table-column label="所在行业" align="center" prop="industryName" />
-      <el-table-column label="融资阶段" align="center" prop="financingStatus">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MENDUNER_FINANCING_STATUS" :value="scope.row.financingStatus" />
-        </template>
-      </el-table-column>
-      <el-table-column label="人员规模" align="center" prop="scale">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MENDUNER_SCALE" :value="scope.row.scale" />
-        </template>
-      </el-table-column>
+      <el-table-column label="地址" align="center" prop="" />
+      <el-table-column label="审核状态" align="center" prop="" />
+      <el-table-column label="会员类型" align="center" prop="" />
+      <el-table-column label="会员到期时间" align="center" prop="" />
       <el-table-column label="职位发布类型" align="center" prop="pubJobTypePerm">
         <template #default="scope">
           <span v-for="k in scope.row.pubJobTypePerm" :key="k">
@@ -131,13 +89,7 @@
           </span>
         </template>
       </el-table-column>
-      <el-table-column
-        label="创建时间"
-        align="center"
-        prop="createTime"
-        :formatter="dateFormatter"
-        width="180px"
-      />
+      <el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
       <el-table-column label="操作" align="center">
         <template #default="scope">
           <el-button link type="primary" @click="openDetail(scope.row.id)">详情</el-button>

+ 3 - 3
src/views/menduner/system/enterprise/register/index.vue

@@ -88,15 +88,15 @@
   <!-- 列表 -->
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true">
-      <el-table-column label="用户id" align="center" prop="userId" />
+      <!-- <el-table-column label="用户id" align="center" prop="userId" /> -->
       <el-table-column label="企业名称" align="center" prop="name" />
       <el-table-column label="管理员姓名" align="center" prop="contactName" />
       <el-table-column label="管理员电话" align="center" prop="phone" />
       <el-table-column label="管理员邮箱" align="center" prop="email" />
       <el-table-column label="营业执照图片" align="center" prop="businessLicenseUrl">
         <template #default="scope">
-          <div style="width: 80px; height: 70px">
-            <el-image v-if="scope.row.businessLicenseUrl" style="width: 100%; height: 100%" :src="scope.row.businessLicenseUrl" />
+          <div class="h-70px w-80px">
+            <el-image v-if="scope.row.businessLicenseUrl" style="width: 100%; height: 100%" :src="scope.row.businessLicenseUrl" lazy preview-teleported :preview-src-list="[scope.row.businessLicenseUrl]" />
             <span v-else style="line-height: 70px; color: #999;">未上传</span>
           </div>
         </template>

+ 4 - 4
src/views/menduner/system/hunt/index.vue

@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="IP地址" prop="ip" v-hasPermi="['menduner:system:hunt:query']">
+      <!-- <el-form-item label="IP地址" prop="ip" v-hasPermi="['menduner:system:hunt:query']">
         <el-input
           v-model="queryParams.ip"
           placeholder="请输入IP地址"
@@ -43,7 +43,7 @@
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:hunt:query']">
         <el-date-picker
           v-model="queryParams.createTime"
@@ -106,11 +106,11 @@
   <!-- 列表 -->
   <ContentWrap>
     <el-table v-loading="loading" :data="list" :stripe="true">
-      <el-table-column label="id" align="center" prop="id" :show-overflow-tooltip="true" />
+      <!-- <el-table-column label="id" align="center" prop="id" :show-overflow-tooltip="true" /> -->
       <el-table-column label="姓名" align="center" prop="name" />
       <el-table-column label="企业名称" align="center" prop="enterpriseName" />
       <el-table-column label="联系方式" align="center" prop="phone" />
-      <el-table-column label="IP地址" align="center" prop="ip" />
+      <!-- <el-table-column label="IP地址" align="center" prop="ip" /> -->
       <el-table-column
         label="创建时间"
         align="center"

+ 4 - 4
src/views/menduner/system/madUser/index.vue

@@ -87,8 +87,8 @@
 
   <!-- 列表 -->
   <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-      <el-table-column label="用户ID" align="left" prop="id" />
+    <el-table v-loading="loading" :data="list" :stripe="true">
+      <!-- <el-table-column label="用户ID" align="left" prop="id" /> -->
       <el-table-column label="用户账号" align="center" prop="username" />
       <!-- <el-table-column label="密码" align="center" prop="password" /> -->
       <el-table-column label="用户邮箱" align="center" prop="email" />
@@ -99,9 +99,9 @@
           <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="注册 IP" align="center" prop="registerIp" />
+      <!-- <el-table-column label="注册 IP" align="center" prop="registerIp" /> -->
       <!-- <el-table-column label="注册终端" align="center" prop="registerTerminal" /> -->
-      <el-table-column label="最后登录IP" align="center" prop="loginIp" />
+      <!-- <el-table-column label="最后登录IP" align="center" prop="loginIp" /> -->
       <el-table-column
         label="最后登录时间"
         align="center"

+ 88 - 0
src/views/menduner/system/person/ResetPassword.vue

@@ -0,0 +1,88 @@
+<template>
+  <Dialog title="修改用户密码" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="80px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="登录密码" prop="password">
+        <el-input v-model="formData.password" placeholder="请输入登录密码" type="password" show-password />
+      </el-form-item>
+    </el-form>
+    <template #footer>
+      <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
+      <el-button @click="dialogVisible = false">取 消</el-button>
+    </template>
+  </Dialog>
+</template>
+<script setup lang="ts">
+import { PersonInfoApi } from '@/api/menduner/system/person'
+
+/** 人才信息 表单 */
+defineOptions({ name: 'PersonInfoForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formData = ref({
+  id: undefined,
+  password: undefined
+})
+
+const validatePassword = (rule: any, value: any, callback: any) => {
+  if (!value) {
+    callback(new Error('请输入登录密码'))
+  } else {
+    if (!/^.{8,}$/.test(value)) {
+      callback(new Error('请输入至少8位数的密码'))
+    }
+    callback()
+  }
+}
+const formRules = reactive({
+  password: [{ required: true, validator: validatePassword, trigger: 'change' }]
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (id: number) => {
+  dialogVisible.value = true
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formData.value.id = id
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    await PersonInfoApi.resetUserRegister(formData.value)
+    message.success(t('common.updateSuccess'))
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    password: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 36 - 8
src/views/menduner/system/person/details/components/info.vue

@@ -2,20 +2,20 @@
   <div>
     <el-descriptions class="margin-top" :column="2" border>
       <el-descriptions-item label="用户头像">
-        <el-image v-if="info.avatar" style="width: 100px; height: 100px" :src="info.avatar" fit="contain" hide-on-click-modal :preview-src-list="[info.avatar]"/>
+        <el-image v-if="info.avatar" class="h-100px w-100px" :src="info.avatar" fit="contain" hide-on-click-modal :preview-src-list="[info.avatar]"/>
       </el-descriptions-item>
-      <el-descriptions-item label="用户名">{{ info.name }}</el-descriptions-item>
       <el-descriptions-item label="性别">
         <dict-tag v-if="info.sex !== '0'" :type="DICT_TYPE.MENDUNER_SEX" :value="info.sex" />
       </el-descriptions-item>
-      <el-descriptions-item label="联系电话">{{ info.phone }}</el-descriptions-item>
+      <el-descriptions-item label="用户名">{{ info.name }}</el-descriptions-item>
+      <el-descriptions-item label="英文名">{{ info.foreignName }}</el-descriptions-item>
+      <el-descriptions-item label="联系电话">{{ info.phone || user.phone }}</el-descriptions-item>
       <el-descriptions-item label="邮箱">{{ info.email }}</el-descriptions-item>
       <el-descriptions-item label="出生日期">{{ formatDate(info.birthday, 'YYYY-MM-DD') }}</el-descriptions-item>
       <el-descriptions-item label="首次工作时间">{{ formatDate(info.firstWorkTime, 'YYYY-MM-DD') }}</el-descriptions-item>
       <el-descriptions-item label="婚姻状况">
         <dict-tag :type="DICT_TYPE.MENDUNER_MARITAL_STATUS" :value="info.maritalStatus" />
       </el-descriptions-item>
-      <!-- <el-descriptions-item label="现居住地">{{ info.areaId }}</el-descriptions-item> -->
       <el-descriptions-item label="学历">
         <dict-tag :type="DICT_TYPE.MENDUNER_EDUCATION_TYPE" :value="info.eduType" />
       </el-descriptions-item>
@@ -28,24 +28,52 @@
       <el-descriptions-item label="求职状态">
         <dict-tag :type="DICT_TYPE.MENDUNER_JOB_STATUS" :value="info.jobStatus" />
       </el-descriptions-item>
+      <el-descriptions-item label="账号状态">
+        <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="user.status" />
+      </el-descriptions-item>
+      <el-descriptions-item label="会员套餐">
+        {{ user.vipFlag ? packageList.find(e => e.id === Number(user.vipFlag))?.name : '' }}
+      </el-descriptions-item>
+      <el-descriptions-item label="会员到期时间">
+        {{ formatDate(user.vipExpireDate, 'YYYY-MM-DD HH:mm:ss') }}
+      </el-descriptions-item>
     </el-descriptions>
   </div>
 </template>
 
 <script setup>
 defineOptions({ name: 'EnterpriseDetailsInfo'})
-import { PersonInfoApi } from '@/api/menduner/system/person'
-import { formatDate } from '@/utils/formatTime'
 import { DICT_TYPE } from '@/utils/dict'
+import { formatDate } from '@/utils/formatTime'
+import { PersonInfoApi } from '@/api/menduner/system/person'
 
 const props = defineProps({
-  id: String
+  id: String,
+  userId: String
 })
 
+// 获取人才详情
 const info = ref({})
 const getInfo = async () => {
   const data = await PersonInfoApi.getPersonDetails(props.id)
   info.value = data
 }
-getInfo()
+if (props.id) getInfo()
+
+// 会员套餐列表
+const packageList = ref([])
+const getPackageList = async () => {
+  const data = await PersonInfoApi.getPersonPackageList()
+  packageList.value = data
+}
+getPackageList()
+
+// 获取用户详情
+const user = ref({})
+const getUserDetails = async () => {
+  const data = await PersonInfoApi.getUserDetails(props.userId)
+  user.value = data
+  console.log(packageList.value, data.vipFlag)
+}
+getUserDetails()
 </script>

+ 5 - 5
src/views/menduner/system/person/details/index.vue

@@ -6,7 +6,7 @@
           <template #header>
             <CardTitle title="人才详情" />
           </template>
-          <Info :id="id"/>
+          <Info :id="id" :user-id="userId" />
         </el-card>
       </el-col>
       <el-col :span="6">
@@ -37,9 +37,9 @@
             <el-tab-pane v-hasPermi="['menduner:system:work-exp:query']" label="工作经历">
               <Exp :user-id="userId" />
             </el-tab-pane>
-            <el-tab-pane v-hasPermi="['menduner:system:project-exp:query']" label="项目经历">
+            <!-- <el-tab-pane v-hasPermi="['menduner:system:project-exp:query']" label="项目经历">
               <Project :user-id="userId" />
-            </el-tab-pane>
+            </el-tab-pane> -->
             <el-tab-pane v-hasPermi="['menduner:system:job-interested:query']" label="求职意向">
               <JobIntention :user-id="userId" />
             </el-tab-pane>
@@ -64,7 +64,7 @@ import Info from './components/info.vue'
 import Account from './components/account.vue'
 import Edu from './components/edu.vue'
 import Exp from './components/exp.vue'
-import Project from './components/project.vue'
+// import Project from './components/project.vue'
 import JobIntention from './components/jobIntention.vue'
 import RechargeOrder from './components/rechargeOrder.vue'
 import PointsChange from './components/pointsChange.vue'
@@ -76,7 +76,7 @@ const { delView } = useTagsViewStore() // 视图操作
 const route = useRoute()
 const { id, userId } = route.query
 onMounted(() => {
-  if (!id || !userId) {
+  if (!userId) {
     ElMessage.warning('参数错误,用户编号不能为空!')
     delView(unref(currentRoute))
     return

+ 97 - 116
src/views/menduner/system/person/index.vue

@@ -8,16 +8,7 @@
       :inline="true"
       label-width="120px"
     >
-      <el-form-item label="用户id" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入用户id"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="真实姓名" prop="name">
+      <el-form-item label="用户姓名" prop="name">
         <el-input
           v-model="queryParams.name"
           placeholder="请输入真实姓名"
@@ -26,63 +17,74 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="用户性别" prop="sex">
-        <el-select
-          v-model="queryParams.sex"
-          placeholder="请选择用户性别"
-          clearable
-          class="!w-240px"
-        >
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_SEX)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="联系手机号" prop="phone">
+      <el-form-item label="英文名" prop="foreignName">
         <el-input
-          v-model="queryParams.phone"
-          placeholder="请输入联系手机号"
+          v-model="queryParams.foreignName"
+          placeholder="请输入英文名"
           clearable
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="用户邮箱" prop="email">
+      <el-form-item label="联系电话" prop="phone">
         <el-input
-          v-model="queryParams.email"
-          placeholder="请输入用户邮箱"
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
           clearable
           @keyup.enter="handleQuery"
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="工作经验" prop="expType">
+      <el-form-item label="求职状态" prop="jobStatus">
         <el-select
-          v-model="queryParams.expType"
-          placeholder="请选择工作经验"
+          v-model="queryParams.jobStatus"
+          placeholder="请选择求职状态"
           clearable
           class="!w-240px"
         >
           <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EXP_TYPE)"
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_JOB_SEEK_STATUS)"
             :key="dict.value"
             :label="dict.label"
             :value="dict.value"
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="学历" prop="eduType">
+      <el-form-item label="会员套餐" prop="vipFlag">
         <el-select
-          v-model="queryParams.eduType"
-          placeholder="请选择学历"
+          v-model="queryParams.vipFlag"
+          placeholder="请选择会员套餐"
           clearable
           class="!w-240px"
         >
           <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_TYPE)"
+            v-for="dict in packageList"
+            :key="dict.id"
+            :label="dict.name"
+            :value="dict.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="会员过期时间" prop="vipExpireDate">
+        <el-date-picker
+          v-model="queryParams.vipExpireDate"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="帐号状态" prop="status">
+        <el-select
+          v-model="queryParams.status"
+          placeholder="请选择帐号状态"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"
             :key="dict.value"
             :label="dict.label"
             :value="dict.value"
@@ -103,14 +105,6 @@
       <el-form-item>
         <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
         <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <!-- <el-button
-          type="primary"
-          plain
-          @click="openForm('create')"
-          v-hasPermi="['menduner:system:person-info:create']"
-        >
-          <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button> -->
         <el-button
           type="success"
           plain
@@ -126,57 +120,41 @@
 
   <!-- 列表 -->
   <ContentWrap>
-    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
-      <el-table-column label="用户id" align="center" prop="userId" />
-      <el-table-column label="真实姓名" align="center" prop="name" />
-      <el-table-column label="用户性别" align="center" prop="sex">
+    <el-table v-loading="loading" :data="list" :stripe="true">
+      <el-table-column label="用户头像" align="center" prop="avatar" width="90px">
         <template #default="scope">
-          <dict-tag v-if="scope.row.sex !== '0'" :type="DICT_TYPE.MENDUNER_SEX" :value="scope.row.sex" />
-          <span v-else></span>
+          <el-image v-if="scope.row.person?.avatar" class="h-80px w-80px" :src="scope.row.person?.avatar" lazy preview-teleported :preview-src-list="[scope.row.person?.avatar]" fit="contain" />
         </template>
       </el-table-column>
-      <el-table-column label="头像地址" align="center" prop="avatar">
+      <el-table-column label="用户姓名" align="center" prop="person.name" />
+      <el-table-column label="英文名" align="center" prop="person.foreignName" />
+      <el-table-column label="联系电话" align="center" prop="user.phone" width="120px" />
+      <el-table-column label="任职酒店" align="center" prop="work.enterpriseName" />
+      <el-table-column label="职位" align="center" prop="work.positionName" />
+      <el-table-column label="求职状态" align="center" prop="person.jobStatus" width="130px">
         <template #default="scope">
-          <el-image v-if="scope.row.avatar" style="width: 60px; height: 60px" :src="scope.row.avatar" fit="contain" />
+          <dict-tag :type="DICT_TYPE.MENDUNER_JOB_SEEK_STATUS" :value="scope.row.person?.jobStatus" />
         </template>
       </el-table-column>
-      <el-table-column label="联系手机号" align="center" prop="phone" />
-      <el-table-column label="用户邮箱" align="center" prop="email" />
-      <el-table-column label="工作经验" align="center" prop="expType">
+      <el-table-column label="会员套餐" align="center" prop="user.vipFlag">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MENDUNER_EXP_TYPE" :value="scope.row.expType" />
+          {{ scope.row.user?.vipFlag ? packageList.find(e => e.id === Number(scope.row.user?.vipFlag))?.name : '' }}
         </template>
       </el-table-column>
-      <el-table-column label="学历" align="center" prop="expType">
+      <el-table-column label="会员过期时间" align="center" prop="user.vipExpireDate" :formatter="dateFormatter" width="180px" />
+      <el-table-column label="邀请人" align="center" prop="inviteUserStr" />
+      <el-table-column label="帐号状态" align="center" prop="user.status">
         <template #default="scope">
-          <dict-tag :type="DICT_TYPE.MENDUNER_EDUCATION_TYPE" :value="scope.row.eduType" />
+          <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="scope.row.user.status" />
         </template>
       </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="user.createTime" :formatter="dateFormatter" width="180px" />
       <el-table-column label="操作" align="center">
         <template #default="scope">
-          <!-- <el-button
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['menduner:system:person-info:update']"
-          >
-            编辑
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleDelete(scope.row.id)"
-            v-hasPermi="['menduner:system:person-info:delete']"
-          >
-            删除
-          </el-button> -->
-          <el-button
-            link
-            type="primary"
-            @click="openDetail(scope.row.id, scope.row.userId)"
-          >
-            详情
-          </el-button>
+          <el-button link type="primary" @click="openDetail(scope.row.person?.id, scope.row.user.id)">详情</el-button>
+          <el-button v-if="scope.row.user.status === '1'" link type="success" @click="handleAction(scope.row.user.id, 'enable')">启用</el-button>
+          <el-button v-if="scope.row.user.status === '0'" link type="danger" @click="handleAction(scope.row.user.id, 'disabled')">禁用</el-button>
+          <el-button link type="primary" @click="handleResetPassword(scope.row.user.id)">修改登录密码</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -191,20 +169,23 @@
 
   <!-- 表单弹窗:添加/修改 -->
   <PersonInfoForm ref="formRef" @success="getList" />
+
+  <!-- 表单弹窗:修改登录密码 -->
+  <ResetPassword ref="passwordRef" @success="getList" />
 </template>
 
 <script setup lang="ts">
-// import { dateFormatter } from '@/utils/formatTime'
 import download from '@/utils/download'
+import { dateFormatter } from '@/utils/formatTime'
 import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
 import { PersonInfoApi, PersonInfoVO } from '@/api/menduner/system/person'
 import PersonInfoForm from './PersonInfoForm.vue'
+import ResetPassword from './ResetPassword.vue'
 
 /** 人才信息 列表 */
 defineOptions({ name: 'PersonInfo' })
 
 const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
 
 const loading = ref(true) // 列表的加载中
 const list = ref<PersonInfoVO[]>([]) // 列表的数据
@@ -212,23 +193,26 @@ const total = ref(0) // 列表的总页数
 const queryParams = reactive({
   pageNo: 1,
   pageSize: 10,
-  userId: undefined,
   name: undefined,
-  sex: undefined,
   phone: undefined,
-  email: undefined,
-  wxCode: undefined,
-  maritalStatus: undefined,
-  areaId: undefined,
-  jobType: undefined,
+  foreignName: undefined,
   jobStatus: undefined,
-  expType: undefined,
-  eduType: undefined,
-  createTime: []
+  status: undefined,
+  vipFlag: undefined,
+  createTime: [],
+  vipExpireDate: []
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中
 
+// 会员套餐列表
+const packageList = ref([])
+const getPackageList = async () => {
+  const data = await PersonInfoApi.getPersonPackageList()
+  packageList.value = data
+}
+getPackageList()
+
 /** 查询列表 */
 const getList = async () => {
   loading.value = true
@@ -247,7 +231,7 @@ const handleQuery = () => {
   getList()
 }
 
-/** 打开企业详情 */
+/** 打开用户详情 */
 const { push } = useRouter()
 const openDetail = (id: string, userId: string) => {
   push({ name: 'PersonDetail', query: { id, userId } })
@@ -259,25 +243,6 @@ const resetQuery = () => {
   handleQuery()
 }
 
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (id: number) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await PersonInfoApi.deletePersonInfo(id)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
 /** 导出按钮操作 */
 const handleExport = async () => {
   try {
@@ -293,6 +258,22 @@ const handleExport = async () => {
   }
 }
 
+// 账户禁用、启用
+const handleAction = async (id: number, type: string) => {
+  try {
+    await message.confirm(`确认${type === 'disabled' ? '禁用' : '启用'}该账户吗?`)
+    await PersonInfoApi[type === 'disabled' ? 'disabledUserAccount' : 'enableUserAccount'](id)
+    message.success('操作成功')
+    await getList()
+  } catch {}
+}
+
+// 修改登录密码
+const passwordRef = ref()
+const handleResetPassword = (id) => {
+  passwordRef.value.open(id)
+}
+
 /** 初始化 **/
 onMounted(() => {
   getList()