Pārlūkot izejas kodu

feat: 门墩儿后台

zhengnaiwen_citu 1 gadu atpakaļ
vecāks
revīzija
61963efe77
26 mainītis faili ar 2876 papildinājumiem un 25 dzēšanām
  1. 43 0
      src/api/menduner/system/enterprise/address/index.ts
  2. 55 0
      src/api/menduner/system/enterprise/business/index.ts
  3. 55 0
      src/api/menduner/system/enterprise/message/index.ts
  4. 47 0
      src/api/menduner/system/enterprise/register/index.ts
  5. 45 0
      src/api/menduner/system/enterprise/userBind/index.ts
  6. 56 0
      src/api/menduner/system/job/index.ts
  7. 5 0
      src/utils/dict.ts
  8. 8 8
      src/views/menduner/system/eduexp/EduExpForm.vue
  9. 106 0
      src/views/menduner/system/enterprise/address/EnterpriseAddressForm.vue
  10. 190 0
      src/views/menduner/system/enterprise/address/index.vue
  11. 196 0
      src/views/menduner/system/enterprise/business/EnterpriseBusinessForm.vue
  12. 345 0
      src/views/menduner/system/enterprise/business/index.vue
  13. 189 0
      src/views/menduner/system/enterprise/message/EnterpriseForm.vue
  14. 294 0
      src/views/menduner/system/enterprise/message/index.vue
  15. 136 0
      src/views/menduner/system/enterprise/register/EnterpriseRegisterForm.vue
  16. 235 0
      src/views/menduner/system/enterprise/register/index.vue
  17. 140 0
      src/views/menduner/system/enterprise/userbind/EnterpriseUserBindForm.vue
  18. 213 0
      src/views/menduner/system/enterprise/userbind/index.vue
  19. 202 0
      src/views/menduner/system/job/JobAdvertisedForm.vue
  20. 299 0
      src/views/menduner/system/job/index.vue
  21. 1 1
      src/views/menduner/system/major/MajorForm.vue
  22. 1 1
      src/views/menduner/system/positiontag/index.vue
  23. 1 1
      src/views/menduner/system/school/SchoolForm.vue
  24. 1 1
      src/views/menduner/system/user/MdeUserForm.vue
  25. 7 7
      src/views/menduner/system/user/index.vue
  26. 6 6
      src/views/menduner/system/workexp/WorkExpForm.vue

+ 43 - 0
src/api/menduner/system/enterprise/address/index.ts

@@ -0,0 +1,43 @@
+import request from '@/config/axios'
+
+// 门墩儿-企业地址 VO
+export interface EnterpriseAddressVO {
+  id: number // id
+  enterpriseId: number // 企业id
+  address: string // 公司地址
+  longitude: string // 经度
+  latitude: string // 维度
+}
+
+// 门墩儿-企业地址 API
+export const EnterpriseAddressApi = {
+  // 查询门墩儿-企业地址分页
+  getEnterpriseAddressPage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise-address/page`, params })
+  },
+
+  // 查询门墩儿-企业地址详情
+  getEnterpriseAddress: async (id: number) => {
+    return await request.get({ url: `/menduner/system/enterprise-address/get?id=` + id })
+  },
+
+  // 新增门墩儿-企业地址
+  createEnterpriseAddress: async (data: EnterpriseAddressVO) => {
+    return await request.post({ url: `/menduner/system/enterprise-address/create`, data })
+  },
+
+  // 修改门墩儿-企业地址
+  updateEnterpriseAddress: async (data: EnterpriseAddressVO) => {
+    return await request.put({ url: `/menduner/system/enterprise-address/update`, data })
+  },
+
+  // 删除门墩儿-企业地址
+  deleteEnterpriseAddress: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/enterprise-address/delete?id=` + id })
+  },
+
+  // 导出门墩儿-企业地址 Excel
+  exportEnterpriseAddress: async (params) => {
+    return await request.download({ url: `/menduner/system/enterprise-address/export-excel`, params })
+  }
+}

+ 55 - 0
src/api/menduner/system/enterprise/business/index.ts

@@ -0,0 +1,55 @@
+import request from '@/config/axios'
+
+// 门墩儿-企业工商信息 VO
+export interface EnterpriseBusinessVO {
+  id: number // id
+  enterpriseId: number // 企业id
+  code: string // 统一社会信用代码
+  name: string // 企业名称
+  type: string // 企业类型
+  area: string // 所属地区
+  address: string // 注册地址
+  representative: string // 法定代表人
+  establishmentTime: Date // 成立时间
+  registeredCapital: string // 注册资金
+  approvalTime: string // 核准日期
+  formerName: string // 曾用名
+  industry: string // 所属行业
+  registrationAuthority: string // 注册机关
+  businessStatus: string // 经营状态
+  businessTerm: string // 营业期限
+  businessScope: string // 经营范围
+}
+
+// 门墩儿-企业工商信息 API
+export const EnterpriseBusinessApi = {
+  // 查询门墩儿-企业工商信息分页
+  getEnterpriseBusinessPage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise-business/page`, params })
+  },
+
+  // 查询门墩儿-企业工商信息详情
+  getEnterpriseBusiness: async (id: number) => {
+    return await request.get({ url: `/menduner/system/enterprise-business/get?id=` + id })
+  },
+
+  // 新增门墩儿-企业工商信息
+  createEnterpriseBusiness: async (data: EnterpriseBusinessVO) => {
+    return await request.post({ url: `/menduner/system/enterprise-business/create`, data })
+  },
+
+  // 修改门墩儿-企业工商信息
+  updateEnterpriseBusiness: async (data: EnterpriseBusinessVO) => {
+    return await request.put({ url: `/menduner/system/enterprise-business/update`, data })
+  },
+
+  // 删除门墩儿-企业工商信息
+  deleteEnterpriseBusiness: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/enterprise-business/delete?id=` + id })
+  },
+
+  // 导出门墩儿-企业工商信息 Excel
+  exportEnterpriseBusiness: async (params) => {
+    return await request.download({ url: `/menduner/system/enterprise-business/export-excel`, params })
+  }
+}

+ 55 - 0
src/api/menduner/system/enterprise/message/index.ts

@@ -0,0 +1,55 @@
+import request from '@/config/axios'
+
+// 门墩儿-企业信息 VO
+export interface EnterpriseVO {
+  id: number // id
+  name: string // 企业全称
+  anotherName: string // 企业别称
+  website: string // 企业官网
+  introduce: string // 公司简介
+  contacts: string // 联系人
+  phone: string // 联系电话
+  logoUrl: string // logo图片地址
+  industryId: number // 所在行业
+  financingStatus: number // 融资阶段(未融资,天使轮,A轮,B轮,C轮,D轮以上,已上市,不需要融资)
+  scale: number // 人员规模(0-20人,20-99人,100-499人,500-999人,1000-9999人,9999人以上)
+  welfareList: string // 公司福利
+  albumList: string // 公司相册
+  workTime: string // 上班时间
+  developHistory: string // 发展历程
+  receivedHonors: string // 获得荣誉
+  parentId: number // 上级id
+}
+
+// 门墩儿-企业信息 API
+export const EnterpriseApi = {
+  // 查询门墩儿-企业信息分页
+  getEnterprisePage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise/page`, params })
+  },
+
+  // 查询门墩儿-企业信息详情
+  getEnterprise: async (id: number) => {
+    return await request.get({ url: `/menduner/system/enterprise/get?id=` + id })
+  },
+
+  // 新增门墩儿-企业信息
+  createEnterprise: async (data: EnterpriseVO) => {
+    return await request.post({ url: `/menduner/system/enterprise/create`, data })
+  },
+
+  // 修改门墩儿-企业信息
+  updateEnterprise: async (data: EnterpriseVO) => {
+    return await request.put({ url: `/menduner/system/enterprise/update`, data })
+  },
+
+  // 删除门墩儿-企业信息
+  deleteEnterprise: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/enterprise/delete?id=` + id })
+  },
+
+  // 导出门墩儿-企业信息 Excel
+  exportEnterprise: async (params) => {
+    return await request.download({ url: `/menduner/system/enterprise/export-excel`, params })
+  }
+}

+ 47 - 0
src/api/menduner/system/enterprise/register/index.ts

@@ -0,0 +1,47 @@
+import request from '@/config/axios'
+
+// 门墩儿-企业注册申请 VO
+export interface EnterpriseRegisterVO {
+  id: number // id
+  userId: number // 用户id
+  name: string // 企业名称
+  phone: string // 联系电话
+  email: string // 联系邮箱
+  businessLicenseUrl: string // 营业执照图片
+  status: number // 帐号状态(0正常 1停用 2 等待审核 3不通过)
+  reason: string // 审核原因
+  remark: string // 备注
+}
+
+// 门墩儿-企业注册申请 API
+export const EnterpriseRegisterApi = {
+  // 查询门墩儿-企业注册申请分页
+  getEnterpriseRegisterPage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise-register/page`, params })
+  },
+
+  // 查询门墩儿-企业注册申请详情
+  getEnterpriseRegister: async (id: number) => {
+    return await request.get({ url: `/menduner/system/enterprise-register/get?id=` + id })
+  },
+
+  // 新增门墩儿-企业注册申请
+  createEnterpriseRegister: async (data: EnterpriseRegisterVO) => {
+    return await request.post({ url: `/menduner/system/enterprise-register/create`, data })
+  },
+
+  // 修改门墩儿-企业注册申请
+  updateEnterpriseRegister: async (data: EnterpriseRegisterVO) => {
+    return await request.put({ url: `/menduner/system/enterprise-register/update`, data })
+  },
+
+  // 删除门墩儿-企业注册申请
+  deleteEnterpriseRegister: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/enterprise-register/delete?id=` + id })
+  },
+
+  // 导出门墩儿-企业注册申请 Excel
+  exportEnterpriseRegister: async (params) => {
+    return await request.download({ url: `/menduner/system/enterprise-register/export-excel`, params })
+  }
+}

+ 45 - 0
src/api/menduner/system/enterprise/userBind/index.ts

@@ -0,0 +1,45 @@
+import request from '@/config/axios'
+
+// 门墩儿-企业登录用户 VO
+export interface EnterpriseUserBindVO {
+  id: number // id
+  enterpriseId: number // 企业id
+  userId: string // 用户id
+  status: number // 帐号状态(0正常 1停用 2 等待审核 3不通过)
+  loginIp: string // 最后登录IP
+  loginDate: Date // 最后登录时间
+  userType: number // 用户类型(0普通企业用户 1 企业管理员)
+}
+
+// 门墩儿-企业登录用户 API
+export const EnterpriseUserBindApi = {
+  // 查询门墩儿-企业登录用户分页
+  getEnterpriseUserBindPage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/enterprise-user-bind/page`, params })
+  },
+
+  // 查询门墩儿-企业登录用户详情
+  getEnterpriseUserBind: async (id: number) => {
+    return await request.get({ url: `/menduner/system/enterprise-user-bind/get?id=` + id })
+  },
+
+  // 新增门墩儿-企业登录用户
+  createEnterpriseUserBind: async (data: EnterpriseUserBindVO) => {
+    return await request.post({ url: `/menduner/system/enterprise-user-bind/create`, data })
+  },
+
+  // 修改门墩儿-企业登录用户
+  updateEnterpriseUserBind: async (data: EnterpriseUserBindVO) => {
+    return await request.put({ url: `/menduner/system/enterprise-user-bind/update`, data })
+  },
+
+  // 删除门墩儿-企业登录用户
+  deleteEnterpriseUserBind: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/enterprise-user-bind/delete?id=` + id })
+  },
+
+  // 导出门墩儿-企业登录用户 Excel
+  exportEnterpriseUserBind: async (params) => {
+    return await request.download({ url: `/menduner/system/enterprise-user-bind/export-excel`, params })
+  }
+}

+ 56 - 0
src/api/menduner/system/job/index.ts

@@ -0,0 +1,56 @@
+import request from '@/config/axios'
+
+// 门墩儿-招聘职位 VO
+export interface JobAdvertisedVO {
+  id: number // id
+  enterpriseId: number // 企业id
+  userId: number // 发布用户id
+  areaId: number // 工作地区
+  name: string // 职位名称
+  positionId: number // 职位类型id
+  type: number // 招聘类型
+  expType: number // 工作经验
+  eduType: number // 学历要求
+  payFrom: number // 薪酬from
+  payTo: number // 薪酬to
+  tagList: string // 职位标签
+  content: string // 职位内容
+  requirement: string // 职位要求
+  address: string // 工作地址
+  longitude: string // 经度
+  latitude: string // 维度
+  status: number // 职位状态
+}
+
+// 门墩儿-招聘职位 API
+export const JobAdvertisedApi = {
+  // 查询门墩儿-招聘职位分页
+  getJobAdvertisedPage: async (params: any) => {
+    return await request.get({ url: `/menduner/system/job-advertised/page`, params })
+  },
+
+  // 查询门墩儿-招聘职位详情
+  getJobAdvertised: async (id: number) => {
+    return await request.get({ url: `/menduner/system/job-advertised/get?id=` + id })
+  },
+
+  // 新增门墩儿-招聘职位
+  createJobAdvertised: async (data: JobAdvertisedVO) => {
+    return await request.post({ url: `/menduner/system/job-advertised/create`, data })
+  },
+
+  // 修改门墩儿-招聘职位
+  updateJobAdvertised: async (data: JobAdvertisedVO) => {
+    return await request.put({ url: `/menduner/system/job-advertised/update`, data })
+  },
+
+  // 删除门墩儿-招聘职位
+  deleteJobAdvertised: async (id: number) => {
+    return await request.delete({ url: `/menduner/system/job-advertised/delete?id=` + id })
+  },
+
+  // 导出门墩儿-招聘职位 Excel
+  exportJobAdvertised: async (params) => {
+    return await request.download({ url: `/menduner/system/job-advertised/export-excel`, params })
+  }
+}

+ 5 - 0
src/utils/dict.ts

@@ -217,4 +217,9 @@ export enum DICT_TYPE {
   MENDUNER_EDUCATION_SYSTEM_TYPE = 'menduner_education_system_type', // 门墩儿 学制类型
   MENDUNER_PAY_TYPE = 'menduner_pay_type', // 门墩儿 薪酬类型
   MENDUNER_CURRENCY_TYPE = 'menduner_currency_type', // 门墩儿 货币类型
+  MENDUNER_JOB_TYPE = 'menduner_job_type', // 门墩儿 职务类型
+  MENDUNER_ENTERPRISE_TYPE = 'menduner_enterprise_type', // 门墩儿 企业类型
+  MENDUNER_BUSINESS_STATUS = 'menduner_business_status', // 门墩儿 经营状态
+  MENDUNER_FINANCING_STATUS = 'menduner_financing_status', // 门墩儿 融资状态
+  MENDUNER_SCALE = 'menduner_scale', // 门墩儿 企业规模
 }

+ 8 - 8
src/views/menduner/system/eduexp/EduExpForm.vue

@@ -13,11 +13,11 @@
       <el-form-item label="学校id" prop="schoolId">
         <el-input v-model="formData.schoolId" placeholder="请输入学校id" />
       </el-form-item>
-      <el-form-item label="学校名称(没有选择系统企业可自定义)" prop="schoolName">
-        <el-input v-model="formData.schoolName" placeholder="请输入学校名称(没有选择系统企业可自定义)" />
+      <el-form-item label="学校名称" prop="schoolName">
+        <el-input v-model="formData.schoolName" placeholder="请输入学校名称" />
       </el-form-item>
-      <el-form-item label="学历(0初中及以下 | 1中专/中技 | 2高中 | 3大专 | 4 本科 5 硕士 6 博士 99 其他)" prop="educationType">
-        <el-select v-model="formData.educationType" placeholder="请选择学历(0初中及以下 | 1中专/中技 | 2高中 | 3大专 | 4 本科 5 硕士 6 博士 99 其他)">
+      <el-form-item label="学历" prop="educationType">
+        <el-select v-model="formData.educationType" placeholder="请选择学历">
           <el-option
             v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_TYPE)"
             :key="dict.value"
@@ -26,8 +26,8 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="学制类型(0 全日制 | 1 非全日制)" prop="educationSystemType">
-        <el-select v-model="formData.educationSystemType" placeholder="请选择学制类型(0 全日制 | 1 非全日制)">
+      <el-form-item label="学制类型" prop="educationSystemType">
+        <el-select v-model="formData.educationSystemType" placeholder="请选择学制类型">
           <el-option
             v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_EDUCATION_SYSTEM_TYPE)"
             :key="dict.value"
@@ -39,8 +39,8 @@
       <el-form-item label="专业id" prop="majorId">
         <el-input v-model="formData.majorId" placeholder="请输入专业id" />
       </el-form-item>
-      <el-form-item label="专业名称(没有选择系统企业可自定义)" prop="major">
-        <el-input v-model="formData.major" placeholder="请输入专业名称(没有选择系统企业可自定义)" />
+      <el-form-item label="专业名称" prop="major">
+        <el-input v-model="formData.major" placeholder="请输入专业名称" />
       </el-form-item>
       <el-form-item label="在校开始日期" prop="startTime">
         <el-date-picker

+ 106 - 0
src/views/menduner/system/enterprise/address/EnterpriseAddressForm.vue

@@ -0,0 +1,106 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="企业id" prop="enterpriseId">
+        <el-input v-model="formData.enterpriseId" placeholder="请输入企业id" />
+      </el-form-item>
+      <el-form-item label="公司地址" prop="address">
+        <el-input v-model="formData.address" placeholder="请输入公司地址" />
+      </el-form-item>
+      <el-form-item label="经度" prop="longitude">
+        <el-input v-model="formData.longitude" placeholder="请输入经度" />
+      </el-form-item>
+      <el-form-item label="维度" prop="latitude">
+        <el-input v-model="formData.latitude" placeholder="请输入维度" />
+      </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 { EnterpriseAddressApi, EnterpriseAddressVO } from '@/api/menduner/system/enterprise/address'
+
+/** 门墩儿-企业地址 表单 */
+defineOptions({ name: 'EnterpriseAddressForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  enterpriseId: undefined,
+  address: undefined,
+  longitude: undefined,
+  latitude: undefined
+})
+const formRules = reactive({
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await EnterpriseAddressApi.getEnterpriseAddress(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as EnterpriseAddressVO
+    if (formType.value === 'create') {
+      await EnterpriseAddressApi.createEnterpriseAddress(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await EnterpriseAddressApi.updateEnterpriseAddress(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    enterpriseId: undefined,
+    address: undefined,
+    longitude: undefined,
+    latitude: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 190 - 0
src/views/menduner/system/enterprise/address/index.vue

@@ -0,0 +1,190 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="公司地址" prop="address" v-hasPermi="['menduner:system:enterprise-address:query']">
+        <el-input
+          v-model="queryParams.address"
+          placeholder="请输入公司地址"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:enterprise-address:query']">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          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>
+        <el-button v-hasPermi="['menduner:system:enterprise-address:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:enterprise-address:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['menduner:system:enterprise-address:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:enterprise-address:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="企业id" align="center" prop="enterpriseId" />
+      <el-table-column label="公司地址" align="center" prop="address" />
+      <el-table-column label="经度" align="center" prop="longitude" />
+      <el-table-column label="维度" align="center" prop="latitude" />
+      <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="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-address:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-address:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <EnterpriseAddressForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { EnterpriseAddressApi, EnterpriseAddressVO } from '@/api/menduner/system/enterprise/address'
+import EnterpriseAddressForm from './EnterpriseAddressForm.vue'
+
+/** 门墩儿-企业地址 列表 */
+defineOptions({ name: 'EnterpriseAddress' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<EnterpriseAddressVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  address: undefined,
+  createTime: ''
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await EnterpriseAddressApi.getEnterpriseAddressPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 EnterpriseAddressApi.deleteEnterpriseAddress(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await EnterpriseAddressApi.exportEnterpriseAddress(queryParams)
+    download.excel(data, '门墩儿-企业地址.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 196 - 0
src/views/menduner/system/enterprise/business/EnterpriseBusinessForm.vue

@@ -0,0 +1,196 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="企业id" prop="enterpriseId">
+        <el-input v-model="formData.enterpriseId" placeholder="请输入企业id" />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="code">
+        <el-input v-model="formData.code" placeholder="请输入统一社会信用代码" />
+      </el-form-item>
+      <el-form-item label="企业名称" prop="name">
+        <el-input v-model="formData.name" placeholder="请输入企业名称" />
+      </el-form-item>
+      <el-form-item label="企业类型" prop="type">
+        <el-select v-model="formData.type" placeholder="请选择企业类型">
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.MENDUNER_ENTERPRISE_TYPE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="所属地区" prop="area">
+        <el-select v-model="formData.area" placeholder="请选择所属地区">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="注册地址" prop="address">
+        <el-input v-model="formData.address" placeholder="请输入注册地址" />
+      </el-form-item>
+      <el-form-item label="法定代表人" prop="representative">
+        <el-input v-model="formData.representative" placeholder="请输入法定代表人" />
+      </el-form-item>
+      <el-form-item label="成立时间" prop="establishmentTime">
+        <el-date-picker
+          v-model="formData.establishmentTime"
+          type="date"
+          value-format="x"
+          placeholder="选择成立时间"
+        />
+      </el-form-item>
+      <el-form-item label="注册资金" prop="registeredCapital">
+        <el-input v-model="formData.registeredCapital" placeholder="请输入注册资金" />
+      </el-form-item>
+      <el-form-item label="核准日期" prop="approvalTime">
+        <el-date-picker
+          v-model="formData.approvalTime"
+          type="date"
+          value-format="x"
+          placeholder="选择核准日期"
+        />
+      </el-form-item>
+      <el-form-item label="曾用名" prop="formerName">
+        <el-input v-model="formData.formerName" placeholder="请输入曾用名" />
+      </el-form-item>
+      <el-form-item label="所属行业" prop="industry">
+        <el-select v-model="formData.industry" placeholder="请选择所属行业">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="注册机关" prop="registrationAuthority">
+        <el-input v-model="formData.registrationAuthority" placeholder="请输入注册机关" />
+      </el-form-item>
+      <el-form-item label="经营状态" prop="businessStatus">
+        <el-radio-group v-model="formData.businessStatus">
+          <el-radio
+            v-for="dict in getStrDictOptions(DICT_TYPE.MENDUNER_BUSINESS_STATUS)"
+            :key="dict.value"
+            :label="dict.value"
+          >
+            {{ dict.label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="营业期限" prop="businessTerm">
+        <el-input v-model="formData.businessTerm" placeholder="请输入营业期限" />
+      </el-form-item>
+      <el-form-item label="经营范围" prop="businessScope">
+        <el-input v-model="formData.businessScope" placeholder="请输入经营范围" />
+      </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 { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
+import { EnterpriseBusinessApi, EnterpriseBusinessVO } from '@/api/menduner/system/enterprise/business'
+
+/** 门墩儿-企业工商信息 表单 */
+defineOptions({ name: 'EnterpriseBusinessForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  enterpriseId: undefined,
+  code: undefined,
+  name: undefined,
+  type: undefined,
+  area: undefined,
+  address: undefined,
+  representative: undefined,
+  establishmentTime: undefined,
+  registeredCapital: undefined,
+  approvalTime: undefined,
+  formerName: undefined,
+  industry: undefined,
+  registrationAuthority: undefined,
+  businessStatus: undefined,
+  businessTerm: undefined,
+  businessScope: undefined
+})
+const formRules = reactive({
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await EnterpriseBusinessApi.getEnterpriseBusiness(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as EnterpriseBusinessVO
+    if (formType.value === 'create') {
+      await EnterpriseBusinessApi.createEnterpriseBusiness(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await EnterpriseBusinessApi.updateEnterpriseBusiness(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    enterpriseId: undefined,
+    code: undefined,
+    name: undefined,
+    type: undefined,
+    area: undefined,
+    address: undefined,
+    representative: undefined,
+    establishmentTime: undefined,
+    registeredCapital: undefined,
+    approvalTime: undefined,
+    formerName: undefined,
+    industry: undefined,
+    registrationAuthority: undefined,
+    businessStatus: undefined,
+    businessTerm: undefined,
+    businessScope: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 345 - 0
src/views/menduner/system/enterprise/business/index.vue

@@ -0,0 +1,345 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="信用代码" prop="code" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.code"
+          placeholder="请输入统一社会信用代码"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="企业名称" prop="name" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入企业名称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="企业类型" prop="type" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-select
+          v-model="queryParams.type"
+          placeholder="请选择企业类型"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.MENDUNER_ENTERPRISE_TYPE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="所属地区" prop="area" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-select
+          v-model="queryParams.area"
+          placeholder="请选择所属地区"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="注册地址" prop="address" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.address"
+          placeholder="请输入注册地址"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="法人代表" prop="representative" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.representative"
+          placeholder="请输入法定代表人"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="成立时间" prop="establishmentTime" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-date-picker
+          v-model="queryParams.establishmentTime"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('00:00:00'), new Date('23:59:59')]"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="核准日期" prop="approvalTime" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-date-picker
+          v-model="queryParams.approvalTime"
+          value-format="YYYY-MM-DD HH:mm:ss"
+          type="daterange"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          :default-time="[new Date('00:00:00'), new Date('23:59:59')]"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="曾用名" prop="formerName" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.formerName"
+          placeholder="请输入曾用名"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="所属行业" prop="industry" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-select
+          v-model="queryParams.industry"
+          placeholder="请选择所属行业"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="注册机关" prop="registrationAuthority" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-input
+          v-model="queryParams.registrationAuthority"
+          placeholder="请输入注册机关"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="经营状态" prop="businessStatus" v-hasPermi="['menduner:system:enterprise-business:query']">
+        <el-select
+          v-model="queryParams.businessStatus"
+          placeholder="请选择经营状态"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in getStrDictOptions(DICT_TYPE.MENDUNER_BUSINESS_STATUS)"
+            :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-business:query']">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          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>
+        <el-button v-hasPermi="['menduner:system:enterprise-business:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:enterprise-business:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['menduner:system:enterprise-business:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:enterprise-business:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="企业id" align="center" prop="enterpriseId" />
+      <el-table-column label="统一社会信用代码" align="center" prop="code" />
+      <el-table-column label="企业名称" align="center" prop="name" />
+      <el-table-column label="企业类型" align="center" prop="type">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_ENTERPRISE_TYPE" :value="scope.row.type" />
+        </template>
+      </el-table-column>
+      <el-table-column label="所属地区" align="center" prop="area" />
+      <el-table-column label="注册地址" align="center" prop="address" />
+      <el-table-column label="法定代表人" align="center" prop="representative" />
+      <el-table-column
+        label="成立时间"
+        align="center"
+        prop="establishmentTime"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column label="注册资金" align="center" prop="registeredCapital" />
+      <el-table-column label="核准日期" align="center" prop="approvalTime" />
+      <el-table-column label="曾用名" align="center" prop="formerName" />
+      <el-table-column label="所属行业" align="center" prop="industry" />
+      <el-table-column label="注册机关" align="center" prop="registrationAuthority" />
+      <el-table-column label="经营状态" align="center" prop="businessStatus">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_BUSINESS_STATUS" :value="scope.row.businessStatus" />
+        </template>
+      </el-table-column>
+      <el-table-column label="营业期限" align="center" prop="businessTerm" />
+      <el-table-column label="经营范围" align="center" prop="businessScope" />
+      <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="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-business:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-business:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <EnterpriseBusinessForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { getStrDictOptions, DICT_TYPE } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { EnterpriseBusinessApi, EnterpriseBusinessVO } from '@/api/menduner/system/enterprise/business'
+import EnterpriseBusinessForm from './EnterpriseBusinessForm.vue'
+
+/** 门墩儿-企业工商信息 列表 */
+defineOptions({ name: 'EnterpriseBusiness' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<EnterpriseBusinessVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  code: undefined,
+  name: undefined,
+  type: undefined,
+  area: undefined,
+  address: undefined,
+  representative: undefined,
+  establishmentTime: '',
+  approvalTime: '',
+  formerName: undefined,
+  industry: undefined,
+  registrationAuthority: undefined,
+  businessStatus: undefined,
+  createTime: ''
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await EnterpriseBusinessApi.getEnterpriseBusinessPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 EnterpriseBusinessApi.deleteEnterpriseBusiness(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await EnterpriseBusinessApi.exportEnterpriseBusiness(queryParams)
+    download.excel(data, '门墩儿-企业工商信息.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 189 - 0
src/views/menduner/system/enterprise/message/EnterpriseForm.vue

@@ -0,0 +1,189 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="企业全称" prop="name">
+        <el-input v-model="formData.name" placeholder="请输入企业全称" />
+      </el-form-item>
+      <el-form-item label="企业别称" prop="anotherName">
+        <el-input v-model="formData.anotherName" placeholder="请输入企业别称" />
+      </el-form-item>
+      <el-form-item label="企业官网" prop="website">
+        <el-input v-model="formData.website" placeholder="请输入企业官网" />
+      </el-form-item>
+      <el-form-item label="公司简介" prop="introduce">
+        <el-input v-model="formData.introduce" placeholder="请输入公司简介" />
+      </el-form-item>
+      <el-form-item label="联系人" prop="contacts">
+        <el-input v-model="formData.contacts" placeholder="请输入联系人" />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone">
+        <el-input v-model="formData.phone" placeholder="请输入联系电话" />
+      </el-form-item>
+      <el-form-item label="logo图片地址" prop="logoUrl">
+        <el-input v-model="formData.logoUrl" placeholder="请输入logo图片地址" />
+      </el-form-item>
+      <el-form-item label="所在行业" prop="industryId">
+        <el-select v-model="formData.industryId" placeholder="请选择所在行业">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="融资阶段" prop="financingStatus">
+        <el-select v-model="formData.financingStatus" placeholder="请选择融资阶段">
+          <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">
+        <el-select v-model="formData.scale" placeholder="请选择人员规模">
+          <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="welfareList">
+        <el-input v-model="formData.welfareList" placeholder="请输入公司福利" />
+      </el-form-item>
+      <el-form-item label="公司相册" prop="albumList">
+        <el-input v-model="formData.albumList" placeholder="请输入公司相册" />
+      </el-form-item>
+      <el-form-item label="上班时间" prop="workTime">
+        <el-date-picker
+          v-model="formData.workTime"
+          type="date"
+          value-format="x"
+          placeholder="选择上班时间"
+        />
+      </el-form-item>
+      <el-form-item label="发展历程" prop="developHistory">
+        <el-input v-model="formData.developHistory" placeholder="请输入发展历程" />
+      </el-form-item>
+      <el-form-item label="获得荣誉" prop="receivedHonors">
+        <el-input v-model="formData.receivedHonors" placeholder="请输入获得荣誉" />
+      </el-form-item>
+      <el-form-item label="上级id" prop="parentId">
+        <el-input v-model="formData.parentId" placeholder="请输入上级id" />
+      </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 { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { EnterpriseApi, EnterpriseVO } from '@/api/menduner/system/enterprise/message'
+
+/** 门墩儿-企业信息 表单 */
+defineOptions({ name: 'EnterpriseForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  name: undefined,
+  anotherName: undefined,
+  website: undefined,
+  introduce: undefined,
+  contacts: undefined,
+  phone: undefined,
+  logoUrl: undefined,
+  industryId: undefined,
+  financingStatus: undefined,
+  scale: undefined,
+  welfareList: undefined,
+  albumList: undefined,
+  workTime: undefined,
+  developHistory: undefined,
+  receivedHonors: undefined,
+  parentId: undefined
+})
+const formRules = reactive({
+  parentId: [{ required: true, message: '上级id不能为空', trigger: 'blur' }]
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await EnterpriseApi.getEnterprise(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as EnterpriseVO
+    if (formType.value === 'create') {
+      await EnterpriseApi.createEnterprise(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await EnterpriseApi.updateEnterprise(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    name: undefined,
+    anotherName: undefined,
+    website: undefined,
+    introduce: undefined,
+    contacts: undefined,
+    phone: undefined,
+    logoUrl: undefined,
+    industryId: undefined,
+    financingStatus: undefined,
+    scale: undefined,
+    welfareList: undefined,
+    albumList: undefined,
+    workTime: undefined,
+    developHistory: undefined,
+    receivedHonors: undefined,
+    parentId: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 294 - 0
src/views/menduner/system/enterprise/message/index.vue

@@ -0,0 +1,294 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="企业全称" prop="name" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入企业全称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="企业别称" prop="anotherName" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-input
+          v-model="queryParams.anotherName"
+          placeholder="请输入企业别称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="联系人" prop="contacts" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-input
+          v-model="queryParams.contacts"
+          placeholder="请输入联系人"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="所在行业" prop="industryId" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-select
+          v-model="queryParams.industryId"
+          placeholder="请选择所在行业"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </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:query']">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          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="上级id" prop="parentId" v-hasPermi="['menduner:system:enterprise:query']">
+        <el-input
+          v-model="queryParams.parentId"
+          placeholder="请输入上级id"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button v-hasPermi="['menduner:system:enterprise:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:enterprise:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['menduner:system:enterprise:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:enterprise:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="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="website" />
+      <el-table-column label="公司简介" align="center" prop="introduce" />
+      <el-table-column label="联系人" align="center" prop="contacts" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="logo" align="center" prop="logoUrl" />
+      <el-table-column label="所在行业" align="center" prop="industryId" />
+      <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="welfareList" />
+      <el-table-column label="公司相册" align="center" prop="albumList" />
+      <el-table-column label="上班时间" align="center" prop="workTime" />
+      <el-table-column label="发展历程" align="center" prop="developHistory" />
+      <el-table-column label="获得荣誉" align="center" prop="receivedHonors" />
+      <el-table-column
+        label="创建时间"
+        align="center"
+        prop="createTime"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column label="上级id" align="center" prop="parentId" />
+      <el-table-column label="操作" align="center">
+        <template #default="scope">
+          <el-button
+            link
+            type="primary"
+            @click="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <EnterpriseForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { EnterpriseApi, EnterpriseVO } from '@/api/menduner/system/enterprise/message'
+import EnterpriseForm from './EnterpriseForm.vue'
+
+/** 门墩儿-企业信息 列表 */
+defineOptions({ name: 'Enterprise' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<EnterpriseVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  name: undefined,
+  anotherName: undefined,
+  contacts: undefined,
+  phone: undefined,
+  industryId: undefined,
+  financingStatus: undefined,
+  scale: undefined,
+  createTime: '',
+  parentId: undefined
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await EnterpriseApi.getEnterprisePage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 EnterpriseApi.deleteEnterprise(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await EnterpriseApi.exportEnterprise(queryParams)
+    download.excel(data, '门墩儿-企业信息.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 136 - 0
src/views/menduner/system/enterprise/register/EnterpriseRegisterForm.vue

@@ -0,0 +1,136 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="用户id" prop="userId">
+        <el-input v-model="formData.userId" placeholder="请输入用户id" />
+      </el-form-item>
+      <el-form-item label="企业名称" prop="name">
+        <el-input v-model="formData.name" placeholder="请输入企业名称" />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone">
+        <el-input v-model="formData.phone" placeholder="请输入联系电话" />
+      </el-form-item>
+      <el-form-item label="联系邮箱" prop="email">
+        <el-input v-model="formData.email" placeholder="请输入联系邮箱" />
+      </el-form-item>
+      <el-form-item label="营业执照图片" prop="businessLicenseUrl">
+        <el-input v-model="formData.businessLicenseUrl" placeholder="请输入营业执照图片" />
+      </el-form-item>
+      <el-form-item label="帐号状态" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"
+            :key="dict.value"
+            :label="dict.value"
+          >
+            {{ dict.label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="审核原因" prop="reason">
+        <el-input v-model="formData.reason" placeholder="请输入审核原因" />
+      </el-form-item>
+      <el-form-item label="备注" prop="remark">
+        <el-input v-model="formData.remark" placeholder="请输入备注" />
+      </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 { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { EnterpriseRegisterApi, EnterpriseRegisterVO } from '@/api/menduner/system/enterprise/register'
+
+/** 门墩儿-企业注册申请 表单 */
+defineOptions({ name: 'EnterpriseRegisterForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  userId: undefined,
+  name: undefined,
+  phone: undefined,
+  email: undefined,
+  businessLicenseUrl: undefined,
+  status: undefined,
+  reason: undefined,
+  remark: undefined
+})
+const formRules = reactive({
+  status: [{ required: true, message: '帐号状态(0正常 1停用 2 等待审核 3不通过)不能为空', trigger: 'blur' }]
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await EnterpriseRegisterApi.getEnterpriseRegister(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as EnterpriseRegisterVO
+    if (formType.value === 'create') {
+      await EnterpriseRegisterApi.createEnterpriseRegister(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await EnterpriseRegisterApi.updateEnterpriseRegister(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    userId: undefined,
+    name: undefined,
+    phone: undefined,
+    email: undefined,
+    businessLicenseUrl: undefined,
+    status: undefined,
+    reason: undefined,
+    remark: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

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

@@ -0,0 +1,235 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="企业名称" prop="name" v-hasPermi="['menduner:system:enterprise-register:query']">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入企业名称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="联系电话" prop="phone" v-hasPermi="['menduner:system:enterprise-register:query']">
+        <el-input
+          v-model="queryParams.phone"
+          placeholder="请输入联系电话"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="联系邮箱" prop="email" v-hasPermi="['menduner:system:enterprise-register:query']">
+        <el-input
+          v-model="queryParams.email"
+          placeholder="请输入联系邮箱"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="帐号状态" prop="status" v-hasPermi="['menduner:system:enterprise-register:query']">
+        <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"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:enterprise-register:query']">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          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>
+        <el-button v-hasPermi="['menduner:system:enterprise-register:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:enterprise-register:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['menduner:system:enterprise-register:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:enterprise-register:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="企业名称" align="center" prop="name" />
+      <el-table-column label="联系电话" align="center" prop="phone" />
+      <el-table-column label="联系邮箱" align="center" prop="email" />
+      <el-table-column label="营业执照图片" align="center" prop="businessLicenseUrl" />
+      <el-table-column label="帐号状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <el-table-column label="审核原因" align="center" prop="reason" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <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="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-register:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-register:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <EnterpriseRegisterForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { EnterpriseRegisterApi, EnterpriseRegisterVO } from '@/api/menduner/system/enterprise/register'
+import EnterpriseRegisterForm from './EnterpriseRegisterForm.vue'
+
+/** 门墩儿-企业注册申请 列表 */
+defineOptions({ name: 'EnterpriseRegister' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<EnterpriseRegisterVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  name: undefined,
+  phone: undefined,
+  email: undefined,
+  status: undefined,
+  createTime: ''
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await EnterpriseRegisterApi.getEnterpriseRegisterPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 EnterpriseRegisterApi.deleteEnterpriseRegister(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await EnterpriseRegisterApi.exportEnterpriseRegister(queryParams)
+    download.excel(data, '门墩儿-企业注册申请.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 140 - 0
src/views/menduner/system/enterprise/userbind/EnterpriseUserBindForm.vue

@@ -0,0 +1,140 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="企业id" prop="enterpriseId">
+        <el-input v-model="formData.enterpriseId" placeholder="请输入企业id" />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input v-model="formData.userId" placeholder="请输入用户id" />
+      </el-form-item>
+      <el-form-item label="帐号状态" prop="status">
+        <el-radio-group v-model="formData.status">
+          <el-radio
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"
+            :key="dict.value"
+            :label="dict.value"
+          >
+            {{ dict.label }}
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="最后登录IP" prop="loginIp">
+        <el-input v-model="formData.loginIp" placeholder="请输入最后登录IP" />
+      </el-form-item>
+      <el-form-item label="最后登录时间" prop="loginDate">
+        <el-date-picker
+          v-model="formData.loginDate"
+          type="date"
+          value-format="x"
+          placeholder="选择最后登录时间"
+        />
+      </el-form-item>
+      <el-form-item label="用户类型" prop="userType">
+        <el-select v-model="formData.userType" placeholder="请选择用户类型">
+          <el-option
+            v-for="dict in getIntDictOptions(DICT_TYPE.USER_TYPE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </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 { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { EnterpriseUserBindApi, EnterpriseUserBindVO } from '@/api/menduner/system/enterprise/userBind'
+
+/** 门墩儿-企业登录用户 表单 */
+defineOptions({ name: 'EnterpriseUserBindForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  enterpriseId: undefined,
+  userId: undefined,
+  status: undefined,
+  loginIp: undefined,
+  loginDate: undefined,
+  userType: undefined
+})
+const formRules = reactive({
+  enterpriseId: [{ required: true, message: '企业id不能为空', trigger: 'blur' }],
+  userId: [{ required: true, message: '用户id不能为空', trigger: 'blur' }],
+  status: [{ required: true, message: '帐号状态(0正常 1停用 2 等待审核 3不通过)不能为空', trigger: 'blur' }]
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await EnterpriseUserBindApi.getEnterpriseUserBind(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as EnterpriseUserBindVO
+    if (formType.value === 'create') {
+      await EnterpriseUserBindApi.createEnterpriseUserBind(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await EnterpriseUserBindApi.updateEnterpriseUserBind(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    enterpriseId: undefined,
+    userId: undefined,
+    status: undefined,
+    loginIp: undefined,
+    loginDate: undefined,
+    userType: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 213 - 0
src/views/menduner/system/enterprise/userbind/index.vue

@@ -0,0 +1,213 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="帐号状态" prop="status" v-hasPermi="['menduner:system:enterprise-user-bind:query']">
+        <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"
+          />
+        </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"
+          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>
+        <el-button v-hasPermi="['menduner:system:enterprise-user-bind:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:enterprise-user-bind:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
+        <el-button
+          type="primary"
+          plain
+          @click="openForm('create')"
+          v-hasPermi="['menduner:system:enterprise-user-bind:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:enterprise-user-bind:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <ContentWrap>
+    <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="企业id" align="center" prop="enterpriseId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="帐号状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <el-table-column label="最后登录IP" align="center" prop="loginIp" />
+      <el-table-column
+        label="最后登录时间"
+        align="center"
+        prop="loginDate"
+        :formatter="dateFormatter"
+        width="180px"
+      />
+      <el-table-column label="用户类型" align="center" prop="userType">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.USER_TYPE" :value="scope.row.userType" />
+        </template>
+      </el-table-column>
+      <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="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-user-bind:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:enterprise-user-bind:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <EnterpriseUserBindForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { EnterpriseUserBindApi, EnterpriseUserBindVO } from '@/api/menduner/system/enterprise/userBind'
+import EnterpriseUserBindForm from './EnterpriseUserBindForm.vue'
+
+/** 门墩儿-企业登录用户 列表 */
+defineOptions({ name: 'EnterpriseUserBind' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<EnterpriseUserBindVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  status: undefined,
+  createTime: ''
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await EnterpriseUserBindApi.getEnterpriseUserBindPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 EnterpriseUserBindApi.deleteEnterpriseUserBind(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await EnterpriseUserBindApi.exportEnterpriseUserBind(queryParams)
+    download.excel(data, '门墩儿-企业登录用户.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 202 - 0
src/views/menduner/system/job/JobAdvertisedForm.vue

@@ -0,0 +1,202 @@
+<template>
+  <Dialog :title="dialogTitle" v-model="dialogVisible">
+    <el-form
+      ref="formRef"
+      :model="formData"
+      :rules="formRules"
+      label-width="100px"
+      v-loading="formLoading"
+    >
+      <el-form-item label="企业id" prop="enterpriseId">
+        <el-input v-model="formData.enterpriseId" placeholder="请输入企业id" />
+      </el-form-item>
+      <el-form-item label="发布用户id" prop="userId">
+        <el-input v-model="formData.userId" placeholder="请输入发布用户id" />
+      </el-form-item>
+      <el-form-item label="工作地区" prop="areaId">
+        <el-select v-model="formData.areaId" placeholder="请选择工作地区">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="职位名称" prop="name">
+        <el-input v-model="formData.name" placeholder="请输入职位名称" />
+      </el-form-item>
+      <el-form-item label="职位类型id" prop="positionId">
+        <el-select v-model="formData.positionId" placeholder="请选择职位类型id">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="招聘类型" prop="type">
+        <el-select v-model="formData.type" placeholder="请选择招聘类型">
+          <el-option
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_JOB_TYPE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="工作经验" prop="expType">
+        <el-select v-model="formData.expType" placeholder="请选择工作经验">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="学历要求" prop="eduType">
+        <el-select v-model="formData.eduType" placeholder="请选择学历要求">
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="薪酬from" prop="payFrom">
+        <el-input v-model="formData.payFrom" placeholder="请输入薪酬from" />
+      </el-form-item>
+      <el-form-item label="薪酬to" prop="payTo">
+        <el-input v-model="formData.payTo" placeholder="请输入薪酬to" />
+      </el-form-item>
+      <el-form-item label="职位标签" prop="tagList">
+        <el-input v-model="formData.tagList" placeholder="请输入职位标签" />
+      </el-form-item>
+      <el-form-item label="职位内容" prop="content">
+        <Editor v-model="formData.content" height="150px" />
+      </el-form-item>
+      <el-form-item label="职位要求" prop="requirement">
+        <el-input v-model="formData.requirement" placeholder="请输入职位要求" />
+      </el-form-item>
+      <el-form-item label="工作地址" prop="address">
+        <el-input v-model="formData.address" placeholder="请输入工作地址" />
+      </el-form-item>
+      <el-form-item label="经度" prop="longitude">
+        <el-input v-model="formData.longitude" placeholder="请输入经度" />
+      </el-form-item>
+      <el-form-item label="维度" prop="latitude">
+        <el-input v-model="formData.latitude" placeholder="请输入维度" />
+      </el-form-item>
+      <el-form-item label="职位状态" prop="status">
+        <el-select v-model="formData.status" placeholder="请选择职位状态">
+          <el-option
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </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 { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { JobAdvertisedApi, JobAdvertisedVO } from '@/api/menduner/system/job'
+
+/** 门墩儿-招聘职位 表单 */
+defineOptions({ name: 'JobAdvertisedForm' })
+
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+
+const dialogVisible = ref(false) // 弹窗的是否展示
+const dialogTitle = ref('') // 弹窗的标题
+const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
+const formType = ref('') // 表单的类型:create - 新增;update - 修改
+const formData = ref({
+  id: undefined,
+  enterpriseId: undefined,
+  userId: undefined,
+  areaId: undefined,
+  name: undefined,
+  positionId: undefined,
+  type: undefined,
+  expType: undefined,
+  eduType: undefined,
+  payFrom: undefined,
+  payTo: undefined,
+  tagList: undefined,
+  content: undefined,
+  requirement: undefined,
+  address: undefined,
+  longitude: undefined,
+  latitude: undefined,
+  status: undefined
+})
+const formRules = reactive({
+  enterpriseId: [{ required: true, message: '企业id不能为空', trigger: 'blur' }],
+  userId: [{ required: true, message: '发布用户id不能为空', trigger: 'blur' }],
+  areaId: [{ required: true, message: '工作地区不能为空', trigger: 'change' }],
+  name: [{ required: true, message: '职位名称不能为空', trigger: 'blur' }],
+  positionId: [{ required: true, message: '职位类型id不能为空', trigger: 'change' }],
+  type: [{ required: true, message: '招聘类型不能为空', trigger: 'change' }],
+  expType: [{ required: true, message: '工作经验不能为空', trigger: 'change' }],
+  eduType: [{ required: true, message: '学历要求不能为空', trigger: 'change' }]
+})
+const formRef = ref() // 表单 Ref
+
+/** 打开弹窗 */
+const open = async (type: string, id?: number) => {
+  dialogVisible.value = true
+  dialogTitle.value = t('action.' + type)
+  formType.value = type
+  resetForm()
+  // 修改时,设置数据
+  if (id) {
+    formLoading.value = true
+    try {
+      formData.value = await JobAdvertisedApi.getJobAdvertised(id)
+    } finally {
+      formLoading.value = false
+    }
+  }
+}
+defineExpose({ open }) // 提供 open 方法,用于打开弹窗
+
+/** 提交表单 */
+const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
+const submitForm = async () => {
+  // 校验表单
+  await formRef.value.validate()
+  // 提交请求
+  formLoading.value = true
+  try {
+    const data = formData.value as unknown as JobAdvertisedVO
+    if (formType.value === 'create') {
+      await JobAdvertisedApi.createJobAdvertised(data)
+      message.success(t('common.createSuccess'))
+    } else {
+      await JobAdvertisedApi.updateJobAdvertised(data)
+      message.success(t('common.updateSuccess'))
+    }
+    dialogVisible.value = false
+    // 发送操作成功的事件
+    emit('success')
+  } finally {
+    formLoading.value = false
+  }
+}
+
+/** 重置表单 */
+const resetForm = () => {
+  formData.value = {
+    id: undefined,
+    enterpriseId: undefined,
+    userId: undefined,
+    areaId: undefined,
+    name: undefined,
+    positionId: undefined,
+    type: undefined,
+    expType: undefined,
+    eduType: undefined,
+    payFrom: undefined,
+    payTo: undefined,
+    tagList: undefined,
+    content: undefined,
+    requirement: undefined,
+    address: undefined,
+    longitude: undefined,
+    latitude: undefined,
+    status: undefined
+  }
+  formRef.value?.resetFields()
+}
+</script>

+ 299 - 0
src/views/menduner/system/job/index.vue

@@ -0,0 +1,299 @@
+<template>
+  <ContentWrap>
+    <!-- 搜索工作栏 -->
+    <el-form
+      class="-mb-15px"
+      :model="queryParams"
+      ref="queryFormRef"
+      :inline="true"
+      label-width="68px"
+    >
+      <el-form-item label="工作地区" prop="areaId">
+        <el-select
+          v-model="queryParams.areaId"
+          placeholder="请选择工作地区"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="职位名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入职位名称"
+          clearable
+          @keyup.enter="handleQuery"
+          class="!w-240px"
+        />
+      </el-form-item>
+      <el-form-item label="职位类型" prop="positionId">
+        <el-select
+          v-model="queryParams.positionId"
+          placeholder="请选择职位类型"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="招聘类型" prop="type">
+        <el-select
+          v-model="queryParams.type"
+          placeholder="请选择招聘类型"
+          clearable
+          class="!w-240px"
+        >
+          <el-option
+            v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_JOB_TYPE)"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="工作经验" prop="expType">
+        <el-select
+          v-model="queryParams.expType"
+          placeholder="请选择工作经验"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="学历要求" prop="eduType">
+        <el-select
+          v-model="queryParams.eduType"
+          placeholder="请选择学历要求"
+          clearable
+          class="!w-240px"
+        >
+          <el-option label="请选择字典生成" value="" />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="职位要求" prop="requirement">
+        <el-input
+          v-model="queryParams.requirement"
+          placeholder="请输入职位要求"
+          clearable
+          @keyup.enter="handleQuery"
+          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"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="创建时间" prop="createTime">
+        <el-date-picker
+          v-model="queryParams.createTime"
+          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>
+        <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:job-advertised:create']"
+        >
+          <Icon icon="ep:plus" class="mr-5px" /> 新增
+        </el-button>
+        <el-button
+          type="success"
+          plain
+          @click="handleExport"
+          :loading="exportLoading"
+          v-hasPermi="['menduner:system:job-advertised:export']"
+        >
+          <Icon icon="ep:download" class="mr-5px" /> 导出
+        </el-button>
+      </el-form-item>
+    </el-form>
+  </ContentWrap>
+
+  <!-- 列表 -->
+  <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-column label="企业id" align="center" prop="enterpriseId" />
+      <el-table-column label="发布用户id" align="center" prop="userId" /> -->
+      <el-table-column label="工作地区" align="center" prop="areaId" />
+      <el-table-column label="职位名称" align="center" prop="name" />
+      <el-table-column label="职位类型" align="center" prop="positionId" />
+      <el-table-column label="招聘类型" align="center" prop="type">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_JOB_TYPE" :value="scope.row.type" />
+        </template>
+      </el-table-column>
+      <el-table-column label="工作经验" align="center" prop="expType" />
+      <el-table-column label="学历要求" align="center" prop="eduType" />
+      <el-table-column label="薪酬from" align="center" prop="payFrom" />
+      <el-table-column label="薪酬to" align="center" prop="payTo" />
+      <el-table-column label="职位标签" align="center" prop="tagList" />
+      <el-table-column label="职位内容" align="center" prop="content" />
+      <el-table-column label="职位要求" align="center" prop="requirement" />
+      <el-table-column label="工作地址" align="center" prop="address" />
+      <el-table-column label="经度" align="center" prop="longitude" />
+      <el-table-column label="维度" align="center" prop="latitude" />
+      <el-table-column label="职位状态" align="center" prop="status">
+        <template #default="scope">
+          <dict-tag :type="DICT_TYPE.MENDUNER_STATUS" :value="scope.row.status" />
+        </template>
+      </el-table-column>
+      <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="openForm('update', scope.row.id)"
+            v-hasPermi="['menduner:system:job-advertised:update']"
+          >
+            编辑
+          </el-button>
+          <el-button
+            link
+            type="danger"
+            @click="handleDelete(scope.row.id)"
+            v-hasPermi="['menduner:system:job-advertised:delete']"
+          >
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <!-- 分页 -->
+    <Pagination
+      :total="total"
+      v-model:page="queryParams.pageNo"
+      v-model:limit="queryParams.pageSize"
+      @pagination="getList"
+    />
+  </ContentWrap>
+
+  <!-- 表单弹窗:添加/修改 -->
+  <JobAdvertisedForm ref="formRef" @success="getList" />
+</template>
+
+<script setup lang="ts">
+import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
+import { dateFormatter } from '@/utils/formatTime'
+import download from '@/utils/download'
+import { JobAdvertisedApi, JobAdvertisedVO } from '@/api/menduner/system/job'
+import JobAdvertisedForm from './JobAdvertisedForm.vue'
+
+/** 门墩儿-招聘职位 列表 */
+defineOptions({ name: 'JobAdvertised' })
+
+const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
+
+const loading = ref(true) // 列表的加载中
+const list = ref<JobAdvertisedVO[]>([]) // 列表的数据
+const total = ref(0) // 列表的总页数
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  areaId: undefined,
+  name: undefined,
+  positionId: undefined,
+  type: undefined,
+  expType: undefined,
+  eduType: undefined,
+  content: undefined,
+  requirement: undefined,
+  status: undefined,
+  createTime: ''
+})
+const queryFormRef = ref() // 搜索的表单
+const exportLoading = ref(false) // 导出的加载中
+
+/** 查询列表 */
+const getList = async () => {
+  loading.value = true
+  try {
+    const data = await JobAdvertisedApi.getJobAdvertisedPage(queryParams)
+    list.value = data.list
+    total.value = data.total
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 搜索按钮操作 */
+const handleQuery = () => {
+  queryParams.pageNo = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+const resetQuery = () => {
+  queryFormRef.value.resetFields()
+  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 JobAdvertisedApi.deleteJobAdvertised(id)
+    message.success(t('common.delSuccess'))
+    // 刷新列表
+    await getList()
+  } catch {}
+}
+
+/** 导出按钮操作 */
+const handleExport = async () => {
+  try {
+    // 导出的二次确认
+    await message.exportConfirm()
+    // 发起导出
+    exportLoading.value = true
+    const data = await JobAdvertisedApi.exportJobAdvertised(queryParams)
+    download.excel(data, '门墩儿-招聘职位.xls')
+  } catch {
+  } finally {
+    exportLoading.value = false
+  }
+}
+
+/** 初始化 **/
+onMounted(() => {
+  getList()
+})
+</script>

+ 1 - 1
src/views/menduner/system/major/MajorForm.vue

@@ -13,7 +13,7 @@
       <el-form-item label="专业英文名称" prop="nameEn">
         <el-input v-model="formData.nameEn" placeholder="请输入专业英文名称" />
       </el-form-item>
-      <el-form-item label="帐号状态(0正常 1停用)" prop="status">
+      <el-form-item label="帐号状态" prop="status">
         <el-radio-group v-model="formData.status">
           <el-radio
             v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"

+ 1 - 1
src/views/menduner/system/positiontag/index.vue

@@ -128,7 +128,7 @@ const queryParams = reactive({
   pageSize: 10,
   positionId: undefined,
   label: undefined,
-  createTime: []
+  createTime: ''
 })
 const queryFormRef = ref() // 搜索的表单
 const exportLoading = ref(false) // 导出的加载中

+ 1 - 1
src/views/menduner/system/school/SchoolForm.vue

@@ -22,7 +22,7 @@
       <el-form-item label="维度" prop="latitude">
         <el-input v-model="formData.latitude" placeholder="请输入维度" />
       </el-form-item>
-      <el-form-item label="帐号状态(0正常 1停用)" prop="status">
+      <el-form-item label="帐号状态" prop="status">
         <el-radio-group v-model="formData.status">
           <el-radio label="1">请选择字典生成</el-radio>
         </el-radio-group>

+ 1 - 1
src/views/menduner/system/user/MdeUserForm.vue

@@ -22,7 +22,7 @@
       <el-form-item label="头像地址" prop="avatar">
         <el-input v-model="formData.avatar" placeholder="请输入头像地址" />
       </el-form-item>
-      <el-form-item label="帐号状态(0正常 1停用)" prop="status">
+      <el-form-item label="帐号状态" prop="status">
         <el-radio-group v-model="formData.status">
           <el-radio
             v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_STATUS)"

+ 7 - 7
src/views/menduner/system/user/index.vue

@@ -8,7 +8,7 @@
       :inline="true"
       label-width="68px"
     >
-      <el-form-item label="用户账号" prop="username">
+      <el-form-item label="用户账号" prop="username" v-hasPermi="['menduner:system:mde-user:query']">
         <el-input
           v-model="queryParams.username"
           placeholder="请输入用户账号"
@@ -17,7 +17,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="用户邮箱" prop="email">
+      <el-form-item label="用户邮箱" prop="email" v-hasPermi="['menduner:system:mde-user:query']">
         <el-input
           v-model="queryParams.email"
           placeholder="请输入用户邮箱"
@@ -26,7 +26,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="手机号码" prop="phone">
+      <el-form-item label="手机号码" prop="phone" v-hasPermi="['menduner:system:mde-user:query']">
         <el-input
           v-model="queryParams.phone"
           placeholder="请输入手机号码"
@@ -35,7 +35,7 @@
           class="!w-240px"
         />
       </el-form-item>
-      <el-form-item label="帐号状态" prop="status">
+      <el-form-item label="帐号状态" prop="status" v-hasPermi="['menduner:system:mde-user:query']">
         <el-select
           v-model="queryParams.status"
           placeholder="请选择帐号状态"
@@ -50,7 +50,7 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="创建时间" prop="createTime">
+      <el-form-item label="创建时间" prop="createTime" v-hasPermi="['menduner:system:mde-user:query']">
         <el-date-picker
           v-model="queryParams.createTime"
           value-format="YYYY-MM-DD HH:mm:ss"
@@ -62,8 +62,8 @@
         />
       </el-form-item>
       <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 v-hasPermi="['menduner:system:mde-user:query']" @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
+        <el-button v-hasPermi="['menduner:system:mde-user:query']" @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
         <el-button
           type="primary"
           plain

+ 6 - 6
src/views/menduner/system/workexp/WorkExpForm.vue

@@ -13,8 +13,8 @@
       <el-form-item label="企业id" prop="enterpriseId">
         <el-input v-model="formData.enterpriseId" placeholder="请输入企业id" />
       </el-form-item>
-      <el-form-item label="企业名称(没有选择系统企业时可自定义)" prop="enterpriseName">
-        <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称(没有选择系统企业时可自定义)" />
+      <el-form-item label="企业名称" prop="enterpriseName">
+        <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称" />
       </el-form-item>
       <el-form-item label="所属行业" prop="industryId">
         <el-input v-model="formData.industryId" placeholder="请输入所属行业" />
@@ -25,8 +25,8 @@
       <el-form-item label="所属职位" prop="positionId">
         <el-input v-model="formData.positionId" placeholder="请输入所属职位" />
       </el-form-item>
-      <el-form-item label="职位名称(没有选择系统职位时可自定义)" prop="positionName">
-        <el-input v-model="formData.positionName" placeholder="请输入职位名称(没有选择系统职位时可自定义)" />
+      <el-form-item label="职位名称" prop="positionName">
+        <el-input v-model="formData.positionName" placeholder="请输入职位名称" />
       </el-form-item>
       <el-form-item label="在职开始日期" prop="startTime">
         <el-date-picker
@@ -53,8 +53,8 @@
       <el-form-item label="薪酬" prop="pay">
         <el-input v-model="formData.pay" placeholder="请输入薪酬" />
       </el-form-item>
-      <el-form-item label="薪酬类型(0月薪 1年薪)" prop="payType">
-        <el-select v-model="formData.payType" placeholder="请选择薪酬类型(0月薪 1年薪)">
+      <el-form-item label="薪酬类型" prop="payType">
+        <el-select v-model="formData.payType" placeholder="请选择薪酬类型">
           <el-option
             v-for="dict in getIntDictOptions(DICT_TYPE.MENDUNER_PAY_TYPE)"
             :key="dict.value"