Ver Fonte

个人中心:操作添加loading

Xiao_123 há 2 semanas atrás
pai
commit
9e019740b7

+ 7 - 4
src/components/Position/longCompany.vue

@@ -34,6 +34,7 @@
 <script setup>
 defineOptions({ name: 'long-company-card'})
 import Snackbar from '@/plugins/snackbar'
+import Confirm from '@/plugins/confirm'
 import { useI18n } from '@/hooks/web/useI18n'
 import { formatName } from '@/utils/getText'
 import { getEnterpriseUnsubscribe } from '@/api/enterprise'
@@ -48,10 +49,12 @@ const { t } = useI18n()
 
 // 取消收藏
 const handleCancel = async (item) => {
-  if (!item.id) return Snackbar.warning(t('sys.api.operationFailed'))
-  await getEnterpriseUnsubscribe(item.id)
-  emits('refresh')
-  Snackbar.success(t('common.operationSuccessful'))
+  if (!item.id) return Snackbar.warning('数据异常')
+  Confirm('系统提示', '是否确认取消收藏该企业?').then(async () => {
+    await getEnterpriseUnsubscribe(item.id)
+    emits('refresh')
+    Snackbar.success(t('common.operationSuccessful'))
+  })
 }
 
 </script>

+ 26 - 7
src/components/Position/longStrip.vue

@@ -13,9 +13,26 @@
         </div>
         <div class="d-flex align-center">
           <div v-if="val.active && val.job.status === '0'" class="header-btn">
-            <v-btn v-if="showCancelDeliveryResumeBtn && val.cvRel?.status === '0'" class="MiSans-Medium" color="warning" size="small" @click.stop="emits('cancelDeliveryResume', val.cvRel.id)">撤销投递简历</v-btn>
-            <v-btn v-if="props.showCancelBtn" class="half-button ml-3 MiSans-Medium" color="warning" size="small" @click.stop="handleCancel(val)">取消收藏</v-btn>
-            <v-btn class="half-button ml-3 MiSans-Medium" color="#008BB7" size="small" @click.stop="toDetails(val)">立即沟通</v-btn>
+            <v-btn 
+              v-if="showCancelDeliveryResumeBtn && val.cvRel?.status === '0'" 
+              class="MiSans-Medium" 
+              color="warning" 
+              size="small" 
+              @click.stop="emits('cancelDeliveryResume', val.cvRel.id)"
+            >撤销投递简历</v-btn>
+            <v-btn 
+              v-if="props.showCancelBtn" 
+              class="half-button ml-3 MiSans-Medium" 
+              color="warning" 
+              size="small" 
+              @click.stop="handleCancel(val)"
+            >取消收藏</v-btn>
+            <v-btn 
+              class="half-button ml-3 MiSans-Medium" 
+              color="#008BB7" 
+              size="small" 
+              @click.stop="toDetails(val)"
+            >立即沟通</v-btn>
           </div>
           <div v-if="val.job.status === '1'" class="font-size-14 header-btn color-error mr-3">职位已关闭</div>
           <div v-if="showReportBtn && !val.internshipEnterprise" class="header-btn">
@@ -108,10 +125,12 @@ const router = useRouter()
 const desc = ['industryName', 'scaleName']
 
 const handleCancel = async (item) => {
-  if (!item.job.id) return Snackbar.warning(t('sys.api.operationFailed'))
-  await getPersonJobUnfavorite(item.job.id)
-  emits('refresh')
-  Snackbar.success(t('common.operationSuccessful'))
+  if (!item.job.id) return Snackbar.warning('数据异常')
+  Confirm('系统提示', '是否确定取消收藏该职位?').then(async () => {
+    await getPersonJobUnfavorite(item.job.id)
+    emits('refresh')
+    Snackbar.success(t('common.operationSuccessful'))
+  })
 }
 
 // 上报为实习企业

+ 33 - 0
src/views/recruit/enterprise/tradingOrder/components/public.vue

@@ -0,0 +1,33 @@
+<template>
+  <div v-for="val in list" :key="val.value" class="font-size-14 color-666 my-3">
+    <span>{{ val.label }}</span>
+    <span class="ml-5">{{ val.value }}</span>
+  </div>
+  <div class="color-error font-size-14">
+    <v-icon>mdi-information-outline</v-icon>
+    请在对公汇款时务必备注订单号
+  </div>
+</template>
+
+<script setup>
+defineOptions({ name: 'public-page'})
+
+const props = defineProps({
+  price: {
+    type: Number,
+    default: 200
+  }
+})
+
+const list = [
+  { label: '账户名称:', value: '苏州识喜识谊科技有限公司' },
+  { label: '开户银行:', value: '招商银行北京分行三里屯支行' },
+  { label: '银行账号:', value: '1109 1354 8610 601' },
+  { label: '汇款金额:', value: '¥' + props.price },
+  { label: '汇款备注:', value: '订单号UIzi232rmwwzpif' }
+]
+</script>
+
+<style scoped lang="scss">
+
+</style>

+ 13 - 5
src/views/recruit/personal/PersonalCenter/resume/attachment/index.vue

@@ -50,6 +50,8 @@
     </CtForm>
     <div class="color-666" style="font-size: 13px;">* 仅支持.doc, .docx, .pdf文件且大小不能超过20MB</div>
   </CtDialog>
+
+  <Loading :visible="loading" />
 </template>
 
 <script setup>
@@ -142,6 +144,7 @@ const handleAdd = () => {
 }
 
 // 上传附件
+const loading = ref(false)
 const handleSubmit = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
@@ -149,11 +152,16 @@ const handleSubmit = async () => {
   formItems.value.options.forEach(e => {
     obj[e.key] = e.truthValue || e.value
   })
-  if (!obj.title || !obj.url) return
-  await savePersonResumeCv(obj)
-  getList()
-  showUploadDialog.value = false
-  Snackbar.success(t('common.uploadSucMsg'))
+  if (!obj.title || !obj.url) return Snackbar.warning('上传失败,请稍后再试')
+  loading.value = true
+  try {
+    await savePersonResumeCv(obj)
+    getList()
+    showUploadDialog.value = false
+    Snackbar.success(t('common.uploadSucMsg'))
+  } finally {
+    loading.value = false
+  }
 }
 
 // 删除

+ 12 - 5
src/views/recruit/personal/PersonalCenter/resume/online/components/basicInfo.vue

@@ -413,6 +413,7 @@ const items = ref({
 const handleSave = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
+
   const obj = {}
   items.value.options.forEach(e => {
     obj[e.key] = e.value
@@ -420,11 +421,17 @@ const handleSave = async () => {
   if (!obj.sex) return Snackbar.warning('请先选择您的性别')
   if (!obj.birthday) return Snackbar.warning('请选择您的出生日期')
   // if (baseInfo.value.userId) obj.userId = baseInfo.value.userId
-  await saveResumeBasicInfo(obj)
-  Snackbar.success(t('common.saveMsg'))
-  isEdit.value = false
-  await userStore.getUserBaseInfos(baseInfo.value.userId || null)
-  getBasicInfo()
+
+  overlay.value = true
+  try {
+    await saveResumeBasicInfo(obj)
+    Snackbar.success(t('common.saveMsg'))
+    isEdit.value = false
+    await userStore.getUserBaseInfos(baseInfo.value.userId || null)
+    getBasicInfo()
+  } finally {
+    overlay.value = false
+  }
 }
 
 items.value.options.forEach(async (e, index) => {

+ 12 - 5
src/views/recruit/personal/PersonalCenter/resume/online/components/educationExp.vue

@@ -10,7 +10,7 @@
       <CtForm ref="CtFormRef" :items="formItems" style="width: 100%;"></CtForm>
       <div class="text-end mt-3">
         <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false">{{ $t('common.cancel') }}</v-btn>
-        <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
+        <v-btn color="primary" class="half-button" :loading="loading" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
     <!-- 展示 -->
@@ -282,6 +282,7 @@ const handle = (item) => {
 }
 
 // 保存-基础信息
+const loading = ref(false)
 const handleSave = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
@@ -297,10 +298,16 @@ const handleSave = async () => {
   if (!obj.startTime || !obj.endTime) return Snackbar.warning('请选择起始时间!')
   if (obj.startTime > obj.endTime) return Snackbar.warning('开始时间不能大于结束时间!')
   if (editId.value) obj.id = editId.value
-  await saveResumeEduExp(obj)
-  Snackbar.success('保存成功!')
-  isEdit.value = false
-  await getData()
+
+  loading.value = true
+  try {
+    await saveResumeEduExp(obj)
+    Snackbar.success('保存成功!')
+    isEdit.value = false
+    await getData()
+  } finally {
+    loading.value = false
+  }
 }
 
 // 删除数据

+ 13 - 6
src/views/recruit/personal/PersonalCenter/resume/online/components/jobIntention.vue

@@ -39,7 +39,7 @@
       <CtForm ref="formPageRef" :items="items" style="width: 100%;"></CtForm>
       <div class="text-end">
         <v-btn class="half-button mr-3" variant="tonal" @click="isAdd = false; resetForm()">{{ $t('common.cancel') }}</v-btn>
-        <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
+        <v-btn color="primary" class="half-button" :loading="loading" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
   </div>
@@ -229,6 +229,7 @@ const resetForm = () => {
   query = {}
 }
 
+const loading = ref(false)
 const handleSave = async () => {
   const { valid } = await formPageRef.value.formRef.validate()
   if (!valid) return
@@ -238,11 +239,17 @@ const handleSave = async () => {
   if (editId.value) query.id = editId.value
   if (!query.workAreaId) return Snackbar.warning('请选择期望城市')
 
-  await saveResumeJobInterested(query)
-  Snackbar.success('保存成功')
-  isAdd.value = false
-  resetForm()
-  getJobInterested()
+  loading.value = true
+
+  try {
+    await saveResumeJobInterested(query)
+    Snackbar.success('保存成功')
+    isAdd.value = false
+    resetForm()
+    getJobInterested()
+  } finally {
+    loading.value = false
+  }
 }
 
 const handleEdit = async (item) => {

+ 11 - 5
src/views/recruit/personal/PersonalCenter/resume/online/components/selfEvaluation.vue

@@ -16,7 +16,7 @@
       ></v-textarea>
       <div class="text-end">
         <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false; getData()">{{ $t('common.cancel') }}</v-btn>
-        <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
+        <v-btn color="primary" class="half-button" :loading="loading" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
     <div v-else class="content-list mt-3">
@@ -63,13 +63,19 @@ const advantageRules = ref([
 ])
 
 // 编辑
+const loading = ref(false)
 const handleSave = async () => {
   advantage.value = DOMPurify.sanitize(advantage.value)
   if (!advantage.value) return Snackbar.warning('请先输入个人优势!')
-  await saveResumeAdvantage({ content: advantage.value })
-  isEdit.value = false
-  Snackbar.success('编辑成功')
-  await getData()
+  loading.value = true
+  try {
+    await saveResumeAdvantage({ content: advantage.value })
+    isEdit.value = false
+    Snackbar.success('编辑成功')
+    await getData()
+  } finally {
+    loading.value = false
+  }
 }
 </script>
 

+ 1 - 1
src/views/recruit/personal/PersonalCenter/resume/online/components/trainingExperience.vue

@@ -173,7 +173,6 @@ getResumeTrainExpData()
 const handleSave = async () => {
   const { valid } = await formPageRef.value.formRef.validate()
   if (!valid) return
-  loading.value = true
   const obj = {}
   items.value.options.forEach(e => {
     obj[e.key] = e.value
@@ -181,6 +180,7 @@ const handleSave = async () => {
   if (!obj.startTime || !obj.endTime) return Snackbar.warning('请选择培训起始时间!')
   if (obj.startTime > obj.endTime) return Snackbar.warning('开始时间不能大于结束时间!')
   if (editId.value) obj.id = editId.value
+  loading.value = true
   try {
     await saveResumeTrainExp(obj)
     Snackbar.success('保存成功!')

+ 16 - 7
src/views/recruit/personal/PersonalCenter/resume/online/components/vocationalSkills.vue

@@ -20,7 +20,7 @@
       <CtForm ref="formPageRef" :items="formItems" style="width: 100%;"></CtForm>
       <div class="text-end">
         <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false; type = ''">{{ $t('common.cancel') }}</v-btn>
-        <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
+        <v-btn color="primary" class="half-button" :loading="loading" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
     <div v-else-if="!dataList?.length" class="resumeNoDataText">{{ $t('resume.dataDefaultPrompt') }}{{ $t('resume.vocationalSkills') }}...</div>
@@ -100,20 +100,29 @@ const getData = async () => {
 getData()
 
 // 保存 职业技能
+const loading = ref(false)
 const handleSave = async () => {
   const { valid } = await formPageRef.value.formRef.validate()
   if (!valid) return
+  loading.value = true
+  
   const obj = {}
   formItems.value.options.forEach(e => {
     obj[e.key] = e.value
   })
   if (editId.value) obj.id = editId.value
-  await saveResumePersonSkill(obj)
-  Snackbar.success('保存成功!')
-  isEdit.value = false
-  type.value = ''
-  editId.value = null
-  getData()
+  
+  try {
+    
+    await saveResumePersonSkill(obj)
+    Snackbar.success('保存成功!')
+    isEdit.value = false
+    type.value = ''
+    editId.value = null
+    getData()
+  } finally {
+    loading.value = false
+  }
 }
 
 const handleEdit = (item) => {

+ 11 - 5
src/views/recruit/personal/PersonalCenter/resume/online/components/workExperience.vue

@@ -28,7 +28,7 @@
       </CtForm>
       <div class="text-end mt-3">
         <v-btn class="half-button mr-3" variant="tonal" @click="isEdit = false">{{ $t('common.cancel') }}</v-btn>
-        <v-btn color="primary" class="half-button" @click="handleSave">{{ $t('common.save') }}</v-btn>
+        <v-btn color="primary" class="half-button" :loading="loading" @click="handleSave">{{ $t('common.save') }}</v-btn>
       </div>
     </div>
     <!-- 展示 -->
@@ -268,6 +268,7 @@ const handle = (item) => {
 }
 
 // 保存-基础信息
+const loading = ref(false)
 const handleSave = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
@@ -283,10 +284,15 @@ const handleSave = async () => {
   if (obj.endTime && obj.startTime > obj.endTime) return Snackbar.warning('开始时间不能大于结束时间!')
 
   if (editId.value) obj.id = editId.value
-  await saveResumeWorkExp(obj)
-  Snackbar.success('保存成功!')
-  isEdit.value = false
-  await getData()
+  loading.value = true
+  try {
+    await saveResumeWorkExp(obj)
+    Snackbar.success('保存成功!')
+    isEdit.value = false
+    await getData()
+  } finally {
+    loading.value = false
+  }
 }
 
 // 删除数据

+ 8 - 1
src/views/recruit/personal/PersonalCenter/shippingAddress/index.vue

@@ -48,6 +48,8 @@
       </template>
     </CtForm>
   </CtDialog>
+
+  <Loading :visible="loading" />
 </template>
 
 <script setup>
@@ -180,6 +182,7 @@ const handleClose = () => {
   editId.value = null
 }
 
+const loading = ref(false)
 const handleSubmit = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
@@ -191,12 +194,16 @@ const handleSubmit = async () => {
     } else obj[e.key] = e.value
   })
   if (!obj.areaId && !obj.areaName) return Snackbar.warning('请将必填项填写完整')
+
+  loading.value = true
   try {
     isAdd.value ? await createMallUserAddress(obj) : await updateMallUserAddress(obj)
     Snackbar.success(isAdd.value ? '新增成功' : '编辑成功')
     handleClose()
     getAddressList()
-  } catch {}
+  } finally {
+    loading.value = false
+  }
 }
 
 // 删除

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

@@ -38,6 +38,8 @@
 			</template>
 		</CtForm>
 	</CtDialog>
+
+	<Loading :visible="loading" />
 </template>
 
 <script setup>
@@ -135,6 +137,7 @@ const handleClose = () => {
 	showDialog.value = false
 }
 
+const loading = ref(false)
 const handleSubmit = async () => {
 	const { valid } = await CtFormRef.value.formRef.validate()
 	if (!valid) return
@@ -144,13 +147,14 @@ const handleSubmit = async () => {
 	})
 	if (!obj.urlList || !obj.urlList.length) return Snackbar.warning('请上传实习报告')
 
+	loading.value = true
 	try {
 		await saveStudentReport(obj)
 		Snackbar.success('保存成功')
-		handleClose()
 		getList()
-	} catch {
+	} finally {
 		handleClose()
+		loading.value = false
 	}
 }