Browse Source

个人中心-学生专区无用文件删除

Xiao_123 1 week ago
parent
commit
97a5f15ba2

+ 1 - 1
components.d.ts

@@ -46,7 +46,7 @@ declare module 'vue' {
     IndustryTypeCard: typeof import('./src/components/industryTypeCard/index.vue')['default']
     Info: typeof import('./src/components/Enterprise/info.vue')['default']
     InitPay: typeof import('./src/components/personalRecharge/initPay.vue')['default']
-    Item: typeof import('./src/components/PositionLongStrip/item.vue')['default']
+    Item: typeof import('./src/components/Position/item.vue')['default']
     JobTypeCard: typeof import('./src/components/jobTypeCard/index.vue')['default']
     Knowledge: typeof import('./src/components/Knowledge/index.vue')['default']
     ListGroup: typeof import('./src/components/FormUI/nestedListGroup/components/listGroup.vue')['default']

+ 0 - 16
src/router/modules/components/recruit/personCenter.js

@@ -107,22 +107,6 @@ const personCenter = [
                   enName: 'Internship Report'
                 }
               },
-              // {
-              //   path: '/recruit/personal/personalCenter/student/internshipCertificate',
-              //   component: () => import('@/views/recruit/personal/PersonalCenter/student/InternshipCertificate/index.vue'),
-              //   meta: {
-              //     title: '实习证书',
-              //     enName: 'Internship Certificate'
-              //   }
-              // },
-              // {
-              //   path: '/recruit/personal/personalCenter/student/enterpriseRecommendationLetter',
-              //   component: () => import('@/views/recruit/personal/PersonalCenter/student/EnterpriseRecommendationLetter/index.vue'),
-              //   meta: {
-              //     title: '企业推荐信',
-              //     enName: 'Recommendation Letter'
-              //   }
-              // },
               {
                 path: '/recruit/personal/personalCenter/student/internshipButler',
                 component: () => import('@/views/recruit/personal/PersonalCenter/student/InternshipButler/index.vue'),

+ 0 - 85
src/views/recruit/personal/PersonalCenter/student/EnterpriseRecommendationLetter/index.vue

@@ -1,85 +0,0 @@
-<template>
-	<div class="resume-box">
-		<div class="resume-header">
-      <div class="resume-title">企业推荐信</div>
-    </div>
-		<CtTable
-      class="mt-3"
-      :items="list"
-      :headers="headers"
-      :loading="loading"
-      :elevation="0"
-      :isTools="false"
-      :showPage="true"
-      :showSelect="false"
-      itemKey="id"
-			:total="total"
-			:page-info="query"
-			@pageHandleChange="handleChangePage"
-    >
-      <template #actions="{ item }">
-        <v-btn color="primary" @click.stop="previewFile(item.url)" variant="text">预览</v-btn>
-        <v-btn color="primary" @click.stop="handleDownload(item)" variant="text">下载</v-btn>
-      </template>
-    </CtTable>
-	</div>
-</template>
-
-<script setup>
-defineOptions({ name: 'EnterpriseRecommendationLetter' })
-import { ref } from 'vue'
-import { getBlob, saveAs, previewFile } from '@/utils'
-import { timesTampChange } from '@/utils/date'
-import { getRecommendationPage } from '@/api/recruit/personal/student'
-
-const loading = ref(false)
-const list = ref([
-	{
-		enterpriseName: '企业1',
-		createTime: 1668476800000,
-		url: 'https://menduner.citupro.com:3443/dev/person/1893630489546350594/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
-	},
-	{
-		enterpriseName: '企业2',
-		createTime: 1668476800000,
-		url: 'https://menduner.citupro.com:3443/dev/person/1893630489546350594/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
-	}
-])
-const total = ref(2)
-const query = ref({
-	pageNo: 1,
-	pageSize: 10
-})
-
-const headers = [
-  { title: '推荐方企业', key: 'enterpriseName', sortable: false },
-  { title: '创建时间', key: 'createTime', sortable: false, value: item => timesTampChange(item.createTime, 'Y-M-D h:m') },
-  { title: '操作', key: 'actions', sortable: false }
-]
-
-const getList = async () => {
-	loading.value = true
-	try {
-		const result = await getRecommendationPage(query.value)
-		console.log(result, '企业推荐信')
-	} finally {
-		loading.value = false
-	}
-}
-
-const handleChangePage = (val) => {
-	query.value.pageNo = val
-	getList()
-}
-
-// 下载附件
-const handleDownload = (k) => {
-  getBlob(k.url).then(blob => {
-    saveAs(blob, k.title)
-  })
-}
-</script>
-
-<style scoped lang="scss">
-
-</style>

+ 0 - 197
src/views/recruit/personal/PersonalCenter/student/InternshipCertificate/index.vue

@@ -1,197 +0,0 @@
-<template>
-	<div class="resume-box">
-		<div class="resume-header">
-      <div class="resume-title">实习证书</div>
-    </div>
-		<CtTable
-      class="mt-3"
-      :items="list"
-      :headers="headers"
-      :loading="loading"
-      :elevation="0"
-      :isTools="false"
-      :showPage="true"
-      :showSelect="false"
-      itemKey="id"
-			:total="total"
-			:page-info="query"
-			@pageHandleChange="handleChangePage"
-    >
-			<template #comment="{ item }">
-				<p v-ellipse-tooltip style="max-width: 300px;">{{ item.comment }}</p>
-			</template>
-      <template #actions="{ item }">
-        <v-btn color="primary" @click.stop="handlePreview(item)" variant="text">预览</v-btn>
-				<!-- 有附件的则需要提供下载按钮 -->
-        <v-btn color="primary" @click.stop="handleDownload(item)" variant="text">下载</v-btn>
-      </template>
-    </CtTable>
-
-		<!-- 生成实习证书 -->
-		<div class="position-absolute position-relative" style="left: -9999px; bottom: 0;" ref="share">
-			<img src="https://minio.citupro.com/dev/static/bgc.jpg" width="500" height="700" cover />
-			<div class="cer-introduce">
-				兹有
-				<span class="cer-text">{{ itemData?.schoolName }}</span>
-        <span class="cer-text">{{ itemData?.majorName }}</span>
-        专业<span class="cer-text">{{ itemData?.studentName }}</span>
-        同学于<span class="cer-text">{{ itemData?.startTime ? timesTampChange(itemData?.startTime, 'Y-M-D') : '' }}</span>
-        至<span class="cer-text">{{ itemData?.endTime ? timesTampChange(itemData?.endTime, 'Y-M-D') : '' }}</span>
-        在<span class="cer-text">{{ itemData?.enterpriseName ? formatName(itemData?.enterpriseName) : '' }}</span>
-        <span class="cer-text">{{ itemData?.deptName }}</span>岗位实习。
-			</div>
-			<div class="cer-comment">{{ itemData?.comment }}</div>
-			<div class="cer-prove">特此证明。</div>
-			<div class="cer-end">
-        <div>{{ itemData?.createTime ? timesTampChange(itemData?.createTime, 'Y-M-D') : '' }}</div>
-      </div>
-		</div>
-	</div>
-
-	<Loading :visible="showLoading"></Loading>
-</template>
-
-<script setup>
-defineOptions({ name: 'PersonalCenterStudentInternshipCertificate' })
-import { ref } from 'vue'
-import { getBlob, saveAs } from '@/utils'
-import { timesTampChange } from '@/utils/date'
-import { getCertificatePage } from '@/api/recruit/personal/student'
-import Snackbar from '@/plugins/snackbar'
-import html2canvas from 'html2canvas'
-import { DPR } from '@/utils'
-import { usePersonCenterStore } from '@/store/personCenter'
-import { formatName } from '@/utils/getText'
-
-const share = ref(null)
-const loading = ref(false)
-const showLoading = ref(false)
-const list = ref([
-	{
-		enterpriseName: '门墩儿科技有限公司',
-		createTime: 1668476800000,
-		schoolName: '学校1',
-		majorName: '专业1',
-		startTime: 1668476800000,
-		endTime: 1668476800000,
-		deptName: '部门1',
-		studentName: '张三',
-		comment: '备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1备注1',
-		url: 'https://menduner.citupro.com:3443/dev/person/1893630489546350594/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
-	},
-	{
-		enterpriseName: '北京金融街资本运营集团有限公司西单美爵酒店分公司',
-		createTime: 1668476800000,
-		schoolName: '学校1',
-		majorName: '专业1',
-		startTime: 1668476800000,
-		endTime: 1668476800000,
-		deptName: '部门1',
-		studentName: '张三',
-		comment: '备注1',
-		url: 'https://menduner.citupro.com:3443/dev/person/1893630489546350594/attachment/7cde29dc69c1403649be55d4c2bfd3d8304c088dc79ab25afe9c4bf55d3b382f.docx'
-	}
-])
-const total = ref(2)
-const query = ref({
-	pageNo: 1,
-	pageSize: 10
-})
-const itemData = ref()
-const headers = [
-  { title: '发放企业', key: 'enterpriseName', sortable: false },
-  { title: '实习点评', key: 'comment', sortable: false },
-  { title: '创建时间', key: 'createTime', sortable: false, value: item => timesTampChange(item.createTime, 'Y-M-D h:m') },
-  { title: '操作', key: 'actions', sortable: false }
-]
-
-const getList = async () => {
-	loading.value = true
-	try {
-		const result = await getCertificatePage(query.value)
-		console.log(result, '实习证书')
-	} finally {
-		loading.value = false
-	}
-}
-
-const handleChangePage = (val) => {
-	query.value.pageNo = val
-	getList()
-}
-
-// 生成实习证书图片
-const personCenterStore = usePersonCenterStore()
-const generateAndDownloadImage = async () => {
-  try {  
-    const canvas = await html2canvas(share.value, { scale: DPR(), useCORS: true })
-    const image = canvas.toDataURL().replace(/^data:image\/(png|jpg);base64,/, '')
-
-		const fileName = `实习证书 - ${formatName(itemData.value?.enterpriseName)}`
-		personCenterStore.setPreviewData([`data:image/png;base64,${image}`], 0, fileName)
-    showLoading.value = false
-  } catch (error) {
-    console.error('图片生成失败', error)
-		Snackbar.warning('加载失败,请稍后重试')
-		showLoading.value = false
-  }
-}
-
-const handlePreview = (item) => {
-	itemData.value = item
-	if (!share.value) return
-	showLoading.value = true
-	setTimeout(() => {
-		generateAndDownloadImage()
-	}, 1000)
-}
-
-// 下载附件
-const handleDownload = (k) => {
-  getBlob(k.url).then(blob => {
-    saveAs(blob, k.title)
-  })
-}
-</script>
-
-<style scoped lang="scss">
-.cer-text{
-  text-decoration: underline;
-  margin: 0 3px;
-	font-weight: 700;
-}
-.cer-introduce{
-  width: 70%;
-  position: absolute;
-  top: 51%;
-  left: 50%;
-  transform: translate(-50%,-50%);
-  text-indent: 2em;
-}
-.cer-comment{
-	width: 70%;
-  position: absolute;
-  top: 68%;
-  left: 50%;
-  transform: translate(-50%,-50%);
-	text-indent: 2em;
-	display: -webkit-box;
-	-webkit-box-orient: vertical;
-	-webkit-line-clamp: 3;
-	overflow: hidden;
-	text-overflow: ellipsis;
-}
-.cer-prove{
-  width: 70%;
-  position: absolute;
-  top: 82%;
-  left: 50%;
-  transform: translate(-50%,-50%);
-  text-indent: 2em;
-}
-.cer-end{
-  position: absolute;
-  top: 87%;
-  right: 16%;
-}
-</style>

+ 4 - 2
src/views/recruit/personal/PersonalCenter/student/InternshipReport/index.vue

@@ -3,7 +3,7 @@
 	<div class="pa-3 d-flex justify-space-between align-center">
 		<Autocomplete v-model="enterpriseId" @change="getList" :item="selectItems" style="width: 300px;" />
 		<div>
-			<v-btn color="primary" elevation="5" prepend-icon="mdi-refresh" @click="getList">刷 新</v-btn>
+			<v-btn color="primary" elevation="5" prepend-icon="mdi-refresh" @click="getList(true)">刷 新</v-btn>
 			<v-btn color="#00897B" class="ml-5" elevation="5" prepend-icon="mdi-plus" @click="handleAddReport">新增报告</v-btn>
 		</div>
 	</div>
@@ -101,7 +101,8 @@ const getCompanyList = async () => {
 }
 
 // 实习报告列表
-const getList = async () => {
+const getList = async (isRefresh = false) => {
+	if ((!items.value || !items.value.length) && isRefresh) return Snackbar.warning('暂无实习报告')
 	items.value = []
 	try {
 		const data = await getStudentReportList(enterpriseId.value ? { enterpriseId: enterpriseId.value } : {})
@@ -125,6 +126,7 @@ onMounted(() => {
 // 新增实习报告
 const showDialog = ref(false)
 const handleAddReport = () => {
+	if (!selectItems.value.items || !selectItems.value.items.length) return Snackbar.warning('暂无实习企业')
 	formItems.value.options.find(e => e.key === 'urlList').value = []
 	showDialog.value = true
 }

+ 0 - 1
src/views/recruit/personal/PersonalCenter/student/information/index.vue

@@ -18,7 +18,6 @@ import { ref, onMounted } from 'vue'
 import { saveStudentSimpleInfo } from '@/api/recruit/personal/shareJob'
 import { useI18n } from '@/hooks/web/useI18n'
 import Snackbar from '@/plugins/snackbar'
-import { isValidIdCard18 } from '@/utils/validate'
 import { useUserStore } from '@/store/user'
 import { getSchoolList, getDepartmentListBySchoolId, getMajorList } from '@/api/recruit/personal/student'
 

+ 0 - 159
src/views/recruit/personal/PersonalCenter/studentInformation/index.vue

@@ -1,159 +0,0 @@
-<template>
-  <div style="padding: 20px 30px">
-    <div class="resume-header mb-3">
-      <div class="resume-title">学生信息认证</div>
-    </div>
-    <div class="d-flex flex-column align-center pt-5">
-      <CtForm ref="CtFormRef" :items="items" style="width: 900px;"></CtForm>
-      <v-btn class="buttons mt-5" color="primary" @click.stop="handleSubmit">{{ $t('common.save') }}</v-btn>
-    </div>
-  </div>
-
-  <Loading :visible="overlay"></Loading>
-</template>
-
-<script setup>
-defineOptions({name: 'personal-personCenter-studentInformation-index'})
-import { ref } from 'vue'
-import { saveStudentSimpleInfo } from '@/api/recruit/personal/shareJob'
-import { schoolList, departmentList, getStudentInfo } from '@/api/recruit/personal/resume'
-import { useI18n } from '@/hooks/web/useI18n'
-import Snackbar from '@/plugins/snackbar'
-import { isValidIdCard18 } from '@/utils/validate'
-
-const { t } = useI18n()
-
-const overlay = ref(false)
-
-const CtFormRef = ref()
-const items = ref({
-  options: [
-    {
-      type: 'autocomplete',
-      key: 'schoolId',
-      value: null,
-      default: null,
-      label: '就读学校 *',
-      outlined: true,
-      itemText: 'schoolName',
-      itemValue: 'schoolId',
-      rules: [v => !!v || '请选择就读学校'],
-      items: [],
-      change: e => getDepartmentList(e),
-    },
-    {
-      type: 'autocomplete',
-      key: 'schoolDepartmentName',
-      value: null,
-      default: null,
-      label: '所在院系 *',
-      outlined: true,
-      itemText: 'departmentTitle',
-      itemValue: 'schoolDepartmentId',
-      rules: [v => !!v || '请选择所在院系'],
-      items: []
-    },
-    {
-      type: 'text',
-      key: 'majorName',
-      value: '',
-      default: null,
-      label: '所学专业 *',
-      outlined: true,
-      rules: [v => !!v || '请输入所学专业']
-    },
-    {
-      type: 'text',
-      key: 'schoolClassName',
-      value: '',
-      default: null,
-      label: '所在班级 *',
-      outlined: true,
-      rules: [v => !!v || '请填写所在班级']
-    },
-    {
-      type: 'text',
-      key: 'studentNo',
-      value: '',
-      default: null,
-      label: '学号',
-      outlined: true
-    },
-    {
-      type: 'text',
-      key: 'emergencyContactName',
-      value: '',
-      default: null,
-      label: '紧急联系人姓名',
-      outlined: true
-    },
-    {
-      type: 'phoneNumber',
-      key: 'emergencyContactPhone',
-      value: '',
-      clearable: true,
-      label: '紧急联系人手机号'
-    },
-  ]
-})
-
-// 左侧加mr
-items.value.options.forEach((e, index) => {
-  e.col = 6
-  if ((index + 2) % 2 === 0) e.flexStyle = 'mr-3'
-})
-
-// // 学校下拉列表
-const getSchoolListData = async () => {
-  const item = items.value.options.find(e => e.key === 'schoolId')
-  if (!item) return
-  const { records } = await schoolList({current: 1,size: 9999})
-  item.items = records || []
-}
-getSchoolListData()
-
-const getDepartmentList = async (e) => {
-  const item = items.value.options.find(e => e.key === 'schoolDepartmentName')
-  if (!item) return
-  const query = {
-    page: { size: 9999,	current: 1	},
-    entity: { schoolId: e }
-  }
-  const res = await departmentList(query)
-  const list = res?.records?.length ? res.records : []
-  item.items = list.map(e => e.entity)
-}
-
-// 获取学生基本信息
-const getStudentInfoFun = async () => {
-  const data = await getStudentInfo()
-  if (data.schoolId) getDepartmentList(data.schoolId)
-  // 回显
-  items.value.options.forEach(e => {
-    if (data[e.key]) e.value = data[e.key]
-  })
-}
-getStudentInfoFun()
-
-
-// 提交
-const handleSubmit = async () => {
-  const { valid } = await CtFormRef.value.formRef.validate()
-  if (!valid) return
-  overlay.value = true
-  const params = {}
-  items.value.options.forEach(item => {
-    params[item.key] = item.value
-  })
-  await saveStudentSimpleInfo(params)
-  // getStudentInfoFun()
-  setTimeout(async () => {
-    Snackbar.success(t('common.submittedSuccessfully'))
-    overlay.value = false
-  }, 1000)
-}
-
-</script>
-
-<style scoped lang="scss">
-</style>