浏览代码

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

Xiao_123 1 年之前
父节点
当前提交
7600a2a6ea

+ 44 - 0
src/api/resume.js

@@ -38,6 +38,28 @@ export const getResumeTrainExp = async () => {
   })
 }
 
+// 获取-教育经历
+export const getResumeEduExp = async () => {
+  return await request.get({
+    url: '/app-api/menduner/system/person/resume/get/edu/exp'
+  })
+}
+
+// 删除-教育经历
+export const deleteResumeEduExp = async (id) => {
+  return await request.delete({
+    url: '/app-api/menduner/system/person/resume/remove/edu/exp?id=' + id
+  })
+}
+
+// 保存-教育经历
+export const saveResumeEduExp = async (data) => {
+  return await request.post({
+    url: '/app-api/menduner/system/person/resume/save/edu/exp',
+    data
+  })
+}
+
 // 保存项目经历
 export const saveResumeProjectExp = async (data) => {
   return await request.post({
@@ -58,4 +80,26 @@ export const getResumeProjectExp = async () => {
   return await request.get({
     url: '/app-api/menduner/system/person/resume/get/project/exp'
   })
+}
+
+// 获取-职业技能
+export const getResumePersonSkill = async () => {
+  return await request.get({
+    url: '/app-api/menduner/system/person/resume/get/person/skill'
+  })
+}
+
+// 删除-职业技能
+export const deleteResumePersonSkill = async (id) => {
+  return await request.delete({
+    url: '/app-api/menduner/system/person/resume/remove/person/skill?id=' + id
+  })
+}
+
+// 保存-职业技能
+export const saveResumePersonSkill = async (data) => {
+  return await request.post({
+    url: '/app-api/menduner/system/person/resume/save/person/skill',
+    data
+  })
 }

+ 1 - 0
src/locales/en.js

@@ -71,6 +71,7 @@ export default {
     trainingExperience: 'Training Experience',
     educationExp: 'Educational Experience',
     projectExperience: 'Project Experience',
+    vocationalSkills: 'Vocational Skills',
     firstWorkTime: 'First Work Time',
     expand: 'Expand',
     retract: 'Retract'

+ 1 - 0
src/locales/zh-CN.js

@@ -71,6 +71,7 @@ export default {
     trainingExperience: '培训经历',
     educationExp: '教育经历',
     projectExperience: '项目经历',
+    vocationalSkills: '职业技能',
     firstWorkTime: '首次工作时间',
     expand: '展开',
     retract: '收起'

+ 8 - 11
src/views/resume/components/basicInfo.vue

@@ -14,7 +14,7 @@
       <div style="flex: 1;" class="mr-8 mt-5">
         <!-- 编辑 -->
         <div v-if="isEdit">
-          <CtForm ref="CtFormRef" :items="formList" style="width: 100%;">
+          <CtForm ref="CtFormRef" :items="formItems" style="width: 100%;">
             <template v-slot:phone>
               <v-btn variant="text" class="ml-2" color="primary">更改</v-btn>
             </template>
@@ -98,7 +98,6 @@ import CtForm from '@/components/CtForm'
 import Snackbar from '@/plugins/snackbar'
 import { getDict } from '@/hooks/web/useDictionaries'
 import { getTimeStamp, timesTampChange } from '@/utils/date'
-// import { getYearMonth20YearsAgo, generateYearMonthDataArray } from './../utils/generateYearMonthData'
 import { saveResumeBasicInfo } from '@/api/resume'
 import { useUserStore } from '@/store/user'
 import { ref, shallowRef } from 'vue';
@@ -109,8 +108,6 @@ const CtFormRef = ref()
 const isEdit = ref(false)
 const showIcon = ref(false)
 const isExpand = ref(false)
-// const defaultYearMonthValue = ref(getYearMonth20YearsAgo())
-// const yearMonth = ref(generateYearMonthDataArray())
 
 const welfareList = ref(['热情活泼', '理性冷静', '富有创新', '热爱生活', '有幽默感'])
 let baseInfo = ref({})
@@ -119,7 +116,7 @@ const getBasicInfo = () => { // 获取基础信息
 }
 getBasicInfo()
 
-const formList = ref({
+const formItems = ref({
   options: [
     {
       type: 'text',
@@ -262,13 +259,13 @@ const formList = ref({
     },
   ]
 })
-const transformList = ['expType', 'eduType','jobType', 'areaId']
-formList.value.options.forEach((e, index) => {
+const transformItems = ['expType', 'eduType','jobType', 'areaId']
+formItems.value.options.forEach((e, index) => {
   if ((index + 2) % 2 === 0) e.flexStyle = 'mr-3'
   // 回显
   if (baseInfo.value[e.key]) e.value = baseInfo.value[e.key]
   // 数字转为字符串
-  if (transformList.includes(e.key) && e.value && e.value !== 0) e.value = e.value.toString()
+  if (transformItems.includes(e.key) && e.value && e.value !== 0) e.value = e.value.toString()
   // 日期相关
   if (e.type === 'datepicker') e.value = timesTampChange(e.value).slice(0, 10)
 })
@@ -279,10 +276,10 @@ const handleSave = async () => {
   const { valid } = await CtFormRef.value.formRef.validate()
   if (!valid) return
   const obj = {}
-  formList.value.options.forEach(e => {
+  formItems.value.options.forEach(e => {
     if (e.noReturn) return
     else if (e.type === 'datepicker') obj[e.key] = getTimeStamp(e.value)
-    else if (transformList.includes(e.key) && e.value && e.value !== 0) obj[e.key] = e.value - 0
+    else if (transformItems.includes(e.key) && e.value && e.value !== 0) obj[e.key] = e.value - 0
     else obj[e.key] = e.value
   })
   await saveResumeBasicInfo(obj)
@@ -296,7 +293,7 @@ const handleSave = async () => {
 
 // 获取字典内容
 const getDictData = async (obj) => {
-  const item = formList.value.options.find(e => e.key === obj.key)
+  const item = formItems.value.options.find(e => e.key === obj.key)
   if (item) { //  && !item.items?.length
     const { data } = await getDict(obj.type)
     item.items = data

+ 102 - 111
src/views/resume/components/educationExp.vue

@@ -7,7 +7,7 @@
     <!-- 编辑-表单 -->
     <div v-if="isEdit" class="educExpItem-edit">
       <h4 class="color6 my-3 mx-2"> {{ titleStatus ? $t('common.edit') : $t('common.add') }}{{ $t('resume.educationExp') }}</h4>
-      <CtForm :items="formItems" style="width: 100%;"></CtForm>
+      <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>
@@ -16,13 +16,13 @@
     <!-- 展示 -->
     <div
       v-else
-      v-for="(item, index) in items" :key="'educationExp' + index"
+      v-for="(item, index) in projectExp" :key="'educationExp' + index"
       :class="[' mx-n2', {'mt-5': index }]"
     >
       <div class="educExpItem" @mouseenter="item.active = true" @mouseleave="item.active = false">
         <div class="level1 d-flex align-center justify-space-between" style="height: 40px;">
           <div>
-            <span style="font-size: 18px; font-weight: bold;">{{ item.universityText }}</span>
+            <span style="font-size: 18px; font-weight: bold;">{{ item.schoolName }}</span>
             <span class="color6 font15 ml-5">
               <span>{{ item.eduStartText }}</span>
               <span class="mx-1">至</span>
@@ -36,12 +36,12 @@
         </div>
         <div class="level2 my-2">
           <span class="color6 font15">{{ item.major }}</span>
-          <span class="vline"  v-if="item.eduTypeText"></span>
-          <span class="color6 font15">{{ item.eduTypeText }}</span>
+          <span class="vline"  v-if="item.educationTypeText"></span>
+          <span class="color6 font15">{{ item.educationTypeText }}</span>
         </div>
         <div class="level3">
-          <span class="color6 font15">主修科目:</span>
-          <span class="color6 font15">{{ item.majors }}</span>
+          <span class="color6 font15">在校经历:</span>
+          <span class="color6 font15">{{ item.content }}</span>
         </div>
       </div>
     </div>
@@ -50,16 +50,20 @@
 
 <script setup name="educationExp">
 import CtForm from '@/components/CtForm'
-import { getYearMonth20YearsAgo, generateYearMonthDataArray } from './../utils/generateYearMonthData'
 import Snackbar from '@/plugins/snackbar'
+import { getDict } from '@/hooks/web/useDictionaries'
+import { getTimeStamp, timesTampChange } from '@/utils/date'
+import { saveResumeEduExp, getResumeEduExp, deleteResumeEduExp } from '@/api/resume'
+import Confirm from '@/plugins/confirm'
 import { nextTick, ref } from 'vue'
-const yearMonth = ref(generateYearMonthDataArray())
+import { shallowRef } from 'vue'
+const CtFormRef = ref()
 
 const formItems = ref({
   options: [
     {
       type: 'autocomplete',
-      key: 'university',
+      key: 'schoolName',
       value: null,
       default: null,
       label: '学校名称 *',
@@ -68,7 +72,7 @@ const formItems = ref({
       itemText: 'label',
       itemValue: 'value',
       rules: [v => !!v || '请选择学校名称'],
-      items: [{ label: '广州大学', value: '01111'}, { label: '同济大学', value: '01112'}]
+      items: [{ label: '广州大学', value: '广州大学'}, { label: '同济大学', value: '同济大学'}]
     },
     {
       type: 'text',
@@ -82,139 +86,85 @@ const formItems = ref({
     },
     {
       type: 'autocomplete',
-      key: 'eduType',
-      value: '4',
+      key: 'educationType',
+      value: null,
       default: null,
-      label: '最高学历 *',
+      label: '学历 *',
       col: 6,
       outlined: true,
       itemText: 'label',
       itemValue: 'value',
-      rules: [v => !!v || '请选择最高学历'],
-      items: [
-        {
-          id: 1552, 
-          label: "初中及以下", 
-          value: "0"
-        }, 
-        {
-          id: 1553, 
-          label: "中专/中技", 
-          value: "1"
-        }, 
-        {
-          id: 1554, 
-          label: "高中", 
-          value: "2"
-        }, 
-        {
-          id: 1555, 
-          label: "大专", 
-          value: "3"
-        }, 
-        {
-          id: 1556, 
-          label: "本科", 
-          value: "4"
-        }, 
-        {
-          id: 1557, 
-          label: "硕士", 
-          value: "5"
-        }, 
-        {
-          id: 1558, 
-          label: "博士", 
-          value: "6"
-        }, 
-        {
-          id: 1559, 
-          label: "其他", 
-          value: "99"
-        }
-      ]
+      rules: [v => !!v || '请选择学历'],
+      items: []
     },
-    { col: 6, },
     {
       type: 'autocomplete',
-      key: 'eduStart',
+      key: 'educationSystemType',
       value: null,
-      default: getYearMonth20YearsAgo(20),
-      label: '起始时间 *',
+      default: null,
+      label: '学制类型 *',
       col: 6,
       outlined: true,
       itemText: 'label',
       itemValue: 'value',
-      rules: [v => !!v || '请选择起始时间'],
-      items: yearMonth
+      rules: [v => !!v || '请选择学制类型'],
+      items: [{ label: '全日制', value: '0' }, { label: '非全日制', value: '1' }],
     },
     {
-      type: 'autocomplete',
-      key: 'eduEnd',
-      value: null,
-      default: getYearMonth20YearsAgo(20-4),
-      label: '结束时间 *',
+      type: 'datepicker',
+      key: 'startTime',
+      value: shallowRef(null),
       col: 6,
-      outlined: true,
-      itemText: 'label',
-      itemValue: 'value',
-      rules: [v => !!v || '请选择结束时间'],
-      items: yearMonth
+      label: '起始时间 *',
+      rules: [v => !!v || '请选择起始时间']
+    },
+    {
+      type: 'datepicker',
+      key: 'endTime',
+      value: shallowRef(null),
+      col: 6,
+      label: '结束时间 *',
+      rules: [v => !!v || '请选择结束时间']
     },
     {
       type: 'textarea',
-      key: 'majors',
+      key: 'content',
       value: null,
       default: null,
       counter: 200,
-      label: '主修科目 *',
+      label: '在校经历 *',
       col: 12,
       outlined: true,
-      rules: [v => !!v || '请输入主修科目']
+      rules: [v => !!v || '请输入在校经历']
     },
   ]
 })
-const items = ref([
-  {
-    university: '01112',
-    universityText: '同济大学',
-    eduStart: 201909,
-    eduEnd: 202307,
-    eduStartText: '2019-09',
-    eduEndText: '2023-07',
-    major: '酒店管理',
-    eduType: '5',
-    eduTypeText: '硕士',
-    majors: '现代酒店管理、酒店心理、旅游学概论、前厅客房服务与管理、餐饮服务与管理、酒店英语、现代酒店营销、酒店财务管理、会议服务与管理、康乐服务与管理、酒店实用英语。',
-  },
-  {
-    university: '01111',
-    universityText: '广州大学',
-    eduStart: 201509,
-    eduEnd: 201907,
-    eduStartText: '2015-09',
-    eduEndText: '2019-07',
-    major: '软件工程',
-    eduType: '4',
-    eduTypeText: '本科',
-    majors: '​程序设计基础、面向对象程序设计、软件工程导论、离散结构、数据结构与算法、工程经济学、团队激励与沟通、软件工程职业实践、计算机系统基础、操作系统、数据库概论、网络及其计算、人机交互的软件工程方法、软件工程综合实践、软件构造、软件设计与体系结构、软件质量保证与测试等。',
-  }
-])
+
+const dictList = [
+  { type: 'menduner_education_type', key: 'educationType' }
+]
 
 // 左侧加mr
 formItems.value.options.forEach((_e, index) => {
   if ((index + 2) % 2 === 0 && !(!_e.col || _e.col >= 12)) _e.flexStyle = 'mr-3'
 })
 
-// const handleIndustry = (list) => {
-//   console.log(list, 'industry')
-// }
+// 获取数据
+const projectExp = ref([])
+const getData = async () => {
+  const data = await getResumeEduExp()
+  projectExp.value = data
+}
+getData()
+
 // 新增 或 编辑
 const isEdit = ref(false)
 const titleStatus = ref(0)
+const rowObj = ref({})
 const handle = (item) => {
   titleStatus.value = item ? 1 : 0
   if (item) { // 编辑
+    rowObj.value = item
     formItems.value.options.forEach(_i => { if (item[_i.key]) _i.value = item[_i.key] })
   } else { // 新增
     formItems.value.options.forEach(_i => _i.value = _i.default || null)
@@ -224,16 +174,57 @@ const handle = (item) => {
   })
 }
 
+const transformItems = ['educationType', 'educationSystemType']
+formItems.value.options.forEach((e, index) => {
+  if ((index + 2) % 2 === 0) e.flexStyle = 'mr-3'
+  // 回显
+  if (rowObj.value[e.key]) e.value = rowObj.value[e.key]
+  // 数字转为字符串
+  if (transformItems.includes(e.key) && e.value && e.value !== 0) e.value = e.value.toString()
+  // 日期相关
+  if (e.type === 'datepicker') e.value = timesTampChange(e.value).slice(0, 10)
+})
+
+
+// 保存-基础信息
 const handleSave = async () => {
-  // if (!advantage.value) return Snackbar.warning('请先输入个人优势!')
-  // await saveResumeAdvantage({ content: advantage.value })
+  const { valid } = await CtFormRef.value.formRef.validate()
+  if (!valid) return
+  const obj = {}
+  formItems.value.options.forEach(e => {
+    if (e.noReturn) return
+    else if (e.type === 'datepicker') obj[e.key] = getTimeStamp(e.value)
+    else if (transformItems.includes(e.key) && e.value && e.value !== 0) obj[e.key] = e.value - 0
+    else obj[e.key] = e.value
+  })
+  await saveResumeEduExp(obj)
+  Snackbar.success('保存成功!')
   isEdit.value = false
-  Snackbar.success('编辑成功')
+  // 获取当前登录账户信息
+  await getData()
+}
+
+// 删除数据
+const handleDelete = ({ id }) => {
+  Confirm('系统提示', '是否确认删除此教育经历?').then(async () => {
+    await deleteResumeEduExp(id)
+    Snackbar.success('删除成功!')
+    getData()
+  })
+}
+
+// 获取字典内容
+const getDictData = async (obj) => {
+  const item = formItems.value.options.find(e => e.key === obj.key)
+  if (item) { //  && !item.items?.length
+    const { data } = await getDict(obj.type)
+    item.items = data
+  }
 }
-const handleDelete = async (item) => {
-  console.log('1', item)
-  Snackbar.success('删除成功')
+const getOptions = () => {
+  dictList.forEach(obj =>  getDictData(obj))
 }
+getOptions()
 </script>
 
 <style scoped lang="scss">

+ 142 - 0
src/views/resume/components/vocationalSkills.vue

@@ -0,0 +1,142 @@
+<template>
+  <div class="resume-box">
+    <div class="resume-header">
+      <div class="resume-title">{{ $t('resume.vocationalSkills') }}</div>
+      <v-btn variant="text" color="primary" prepend-icon="mdi-plus-box" @click="isEdit = true; type = 'add'">{{ $t('common.add') }}</v-btn>
+    </div>
+    <div v-if="isEdit" class="edit">
+      <h4 class="label-title my-3 mx-2"> {{ type === 'add' ? $t('common.add') : $t('common.edit') }}{{ $t('resume.vocationalSkills') }}</h4>
+      <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>
+      </div>
+    </div>
+    <div v-else v-for="(k, i) in projectExp" :key="i" class="exp mx-n2 mt-5" @mouseenter="k.active = true" @mouseleave="k.active = false">
+      <span class="float-right" v-if="k.active">
+        <v-btn variant="text" color="primary" prepend-icon="mdi-square-edit-outline" @click="handleEdit(k)">{{ $t('common.edit') }}</v-btn>
+        <v-btn variant="text" color="primary" prepend-icon="mdi-trash-can-outline" @click="handleDelete(k)">{{ $t('common.delete') }}</v-btn>
+      </span>
+      <div class="d-flex align-center justify-space-between" style="height: 40px;">
+        <div>
+          <span style="font-size: 18px; font-weight: bold;">{{ k.name }}</span>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup name="vocationalSkills">
+import { ref } from 'vue'
+import { saveResumePersonSkill, getResumePersonSkill, deleteResumePersonSkill } from '@/api/resume'
+import CtForm from '@/components/CtForm'
+import Snackbar from '@/plugins/snackbar'
+import Confirm from '@/plugins/confirm'
+import { getDict } from '@/hooks/web/useDictionaries'
+
+const isEdit = ref(false)
+const formPageRef = ref()
+const type = ref('')
+const editId = ref(null)
+const formItems = ref({
+  options: [
+    {
+      type: 'autocomplete',
+      key: 'skillId',
+      value: null,
+      default: null,
+      label: '技能名称 *',
+      outlined: true,
+      itemText: 'label',
+      itemValue: 'value',
+      flexStyle: 'mr-3',
+      col: 8,
+      rules: [v => !!v || '请选择技能名称'],
+      items: [{ label: '英语四级', value: '0' }, { label: '英语六级', value: '1' }, { label: 'office办公软件', value: '2' }],
+    },
+    {
+      type: 'autocomplete',
+      key: 'level',
+      value: null,
+      default: null,
+      label: '熟练度 *',
+      outlined: true,
+      itemText: 'label',
+      itemValue: 'value',
+      col: 4,
+      rules: [v => !!v || '请选择熟练度'],
+      items: []
+    },
+  ]
+})
+
+// 获取 职业技能
+const projectExp = ref([])
+const getData = async () => {
+  const data = await getResumePersonSkill()
+  projectExp.value = data
+}
+getData()
+
+// 保存 职业技能
+const handleSave = async () => {
+  const { valid } = await formPageRef.value.formRef.validate()
+  if (!valid) return
+  const obj = {}
+  formItems.value.options.forEach(e => {
+    obj[e.key] = e.value - 0
+    // 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()
+}
+
+const handleEdit = (item) => {
+  editId.value = item.id
+  formItems.value.options.forEach(e => {
+    if (item[e.key]) e.value = item[e.key].toString()
+    // e.value = item[e.key]
+  })
+  isEdit.value = true
+}
+
+// 删除 职业技能
+const handleDelete = ({ id }) => {
+  Confirm('系统提示', '是否确认删除此职业技能?').then(async () => {
+    await deleteResumePersonSkill(id)
+    Snackbar.success('删除成功!')
+    getData()
+  })
+}
+
+getDict('menduner_skill_level').then(({ data }) => { // 字典
+  data = data?.length && data || []
+  const obj = formItems.value.options.find(e => e.key === 'level')
+  if (obj) obj.items = data
+})
+</script>
+
+<style scoped lang="scss">
+.exp {
+  font-size: 15px;
+  cursor: pointer;
+  border-radius: 6px;
+  padding: 2px 10px 8px;
+  &:hover {
+    background-color: #f8f8f8;
+  }
+}
+.label-title {
+  color: #666;
+}
+.edit {
+  background-color: #f8f8f8;
+  padding: 2px 10px 8px;
+  border-radius: 6px;
+}
+</style>

+ 3 - 1
src/views/resume/index.vue

@@ -45,6 +45,7 @@ import jobIntention from './components/jobIntention.vue'
 import trainingExperience from './components/trainingExperience.vue'
 import educationExp from './components/educationExp.vue'
 import projectExperience from './components/projectExperience.vue'
+import vocationalSkills from './components/vocationalSkills.vue'
 
 const comList = [
   { path: basicInfo, id: 'resumeBasicInfo' },
@@ -53,6 +54,7 @@ const comList = [
   { path: educationExp, id: 'resumeEducationExp' },
   { path: projectExperience, id: 'resumeProjectExperience' },
   { path: trainingExperience, id: 'resumeTrainingExperience' },
+  { path: vocationalSkills, id: 'resumeVocationalSkills' },
 ]
 const items = [
   { text: '基本信息', icon: 'mdi-account-outline', id: 'basicInfo' },
@@ -62,7 +64,7 @@ const items = [
   { text: '工作经历', icon: 'mdi-ballot-outline', id: '' },
   { text: '项目经历', icon: 'mdi-card-text-outline', id: 'projectExperience' },
   { text: '培训经历', icon: 'mdi-flag-outline', id: 'trainingExperience' },
-  { text: '职业技能', icon: 'mdi-star-check-outline', id: '' }
+  { text: '职业技能', icon: 'mdi-star-check-outline', id: 'vocationalSkills' }
 ]
 </script>
 

+ 0 - 36
src/views/resume/utils/generateYearMonthData.js

@@ -1,36 +0,0 @@
-// 近100年的YYYY-MM [{ label: '2024-05', value: 202405 }]
-export const generateYearMonthDataArray = () => {
-  const currentYear = new Date().getFullYear()
-  const yearMonthData = []
-  
-  for (let i = 0; i < 100; i++) {  
-    const year = currentYear - i
-    for (let month = 0; month < 12; month++) {  
-      const label = `${year}-${('0' + (month + 1)).slice(-2)}`; // 格式化为 "YYYY-MM"  
-      const value = parseInt(`${year}${('0' + (month + 1)).slice(-2)}`, 10); // 转换为整数格式 "YYYYMM"  
-      yearMonthData.push({ label, value })
-    }  
-  }  
-  
-  return yearMonthData; 
-}
-// 20年前的YYYYMM 返回:202405
-export const getYearMonth20YearsAgo = (num = 20) => {
-  // 获取当前日期  
-  const now = new Date()
-      
-  // 设置年份为20年前  
-  now.setFullYear(now.getFullYear() - num)
-    
-  // 需要注意的是,我们不能直接设置月份为0(因为月份是从0开始的),  
-  // 但由于我们只是要获取年和月,并不真正需要修改日期的月份部分,  
-  // 所以我们可以保持月份不变。  
-    
-  // 格式化年月为六位数的字符串  
-  const yearMonthString = `${now.getFullYear()}${('0' + (now.getMonth() + 1)).slice(-2)}`
-    
-  // 将字符串转换为数字类型  
-  const yearMonthNumber = parseInt(yearMonthString, 10)
-    
-  return yearMonthNumber
-}