chore: update latest, add achievements field in work_experience

This commit is contained in:
Jesús Pérez 2024-08-24 23:11:15 +01:00
parent 8d91ba5649
commit da2f714a10
No known key found for this signature in database
19 changed files with 4621 additions and 3235 deletions

View File

@ -17,6 +17,7 @@ code: Code
license: License
for: For
role: Role
achievements: Achievements
tasks: Tasks
description: Description
tools: Tools

View File

@ -16,6 +16,7 @@ name: Nombre
code: Código
license: Licencia
for: Para
achievements: Logros
tasks: Tareas
role: Rol
description: Descripción

View File

@ -1,43 +1,43 @@
{
"private": true,
"scripts": {
"dev": "vite --port 3333 --open",
"dev": "vite --port 3333 --host --open",
"build": "cross-env NODE_ENV=production vite build",
"preview": "vite preview"
},
"dependencies": {
"@intlify/vite-plugin-vue-i18n": "^2.5.0",
"@tiptap/extension-link": "^2.0.0-beta.36",
"@tiptap/extension-text-style": "^2.0.0-beta.23",
"@tiptap/starter-kit": "^2.0.0-beta.183",
"@tiptap/vue-3": "^2.0.0-beta.90",
"@tiptap/extension-link": "^2.6.5",
"@tiptap/extension-text-style": "^2.6.5",
"@tiptap/starter-kit": "^2.6.5",
"@tiptap/vue-3": "^2.6.5",
"@vueuse/core": "^6.9.2",
"@vueuse/head": "^0.6.0",
"install": "^0.13.0",
"toastify-js": "^1.11.2",
"vue": "^3.2.31",
"vue-demi": "^0.12.4",
"vue-i18n": "^9.2.0-beta.33",
"vue-router": "^4.0.14",
"toastify-js": "^1.12.0",
"vue": "^3.4.38",
"vue-demi": "^0.12.5",
"vue-i18n": "^9.14.0",
"vue-router": "^4.4.3",
"vue3-highlightjs": "^1.0.5"
},
"devDependencies": {
"@antfu/eslint-config": "^0.11.1",
"@iconify-json/carbon": "^1.1.2",
"@types/node": "^16.11.26",
"@types/toastify-js": "^1.11.0",
"@iconify-json/carbon": "^1.1.37",
"@types/node": "^16.18.105",
"@types/toastify-js": "^1.12.3",
"@unocss/preset-icons": "^0.7.7",
"@unocss/reset": "^0.7.7",
"@vitejs/plugin-vue": "^1.10.2",
"cross-env": "^7.0.3",
"eslint": "^8.11.0",
"pnpm": "^6.32.3",
"typescript": "^4.6.2",
"eslint": "^8.57.0",
"pnpm": "^6.35.1",
"typescript": "^4.9.5",
"unocss": "^0.7.7",
"unplugin-auto-import": "^0.5.11",
"unplugin-icons": "^0.12.23",
"unplugin-vue-components": "^0.17.21",
"vite": "^2.8.6",
"vite": "^2.9.18",
"vite-plugin-inspect": "^0.3.15",
"vite-plugin-md": "^0.11.9",
"vite-plugin-pages": "^0.18.2",

7362
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
<template>
<nav
class="noprint flex flex-row gap-2 mx-1 mt-1 border-b-1 border-gray-800 dark:border-gray-500 bg-indigo-100 dark:bg-gray-800 dark:text-white"
:class="{ 'fixed z-50 w-full lg:w-screen-xl -top-2 pt-2 border-1': position === NavPosition.header && fixMenu, 'z-1 opacity-20': openMessageBox }"
:class="{ 'fixed z-50 w-full lg:w-screen-2xl -top-2 pt-2 border-1': position === NavPosition.header && fixMenu, 'z-1 opacity-20': openMessageBox }"
>
<button
type="button"

View File

@ -45,6 +45,7 @@ export interface WorkExperienceType {
position: string
description: string
tools: string[]
achievements: string[]
tasks: string[]
}
export interface TalksType {
@ -188,6 +189,7 @@ export interface ShowWorkExperienceType {
position: boolean
description: boolean
tools: boolean
achievements: boolean
tasks: boolean
}
export interface ShowEducationType {

View File

@ -17,7 +17,7 @@
@onLoadModel="onLoadModel"
/>
<div v-if="show_content && cvdata.core && cvdata.core.name" class="font-sans antialiased">
<div class="container mx-auto max-w-screen-xl main-container">
<div class="container mx-auto max-w-screen-2xl main-container">
<nav-menu
:position="NavPosition.header"
:openMessageBox="openMessageBox"
@ -201,7 +201,6 @@
<div
v-if="show_content && cvdata.core && cvdata.core.name"
class="mr-auto w-full lg:w-1/2 text-center text-sm py-2 pr-5 text-gray-600 border-gray-300 border-1 border-b-0 rounded-t-lg"
>
<nav-menu
:position="NavPosition.footer"

View File

@ -462,18 +462,18 @@ const routeKy = router.currentRoute.value.params.ky || router.currentRoute.value
const assets_path = useState().ASSETS_PATH.value
const showinfo = ref(props.showinfo as ShowInfoType)
const authinfo = computed(() => {
return showinfo.value.auth ? showinfo.value.auth : props.authinfo
return showinfo.auth ? showinfo.auth : props.authinfo
})
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value.corelang && props.localedata.value.corelang[itm] ? props.localedata.value.corelang[itm] : props.data[itm]
return props.localedata && props.localedata.corelang && props.localedata.corelang[itm] ? props.localedata.corelang[itm] : props.data[itm]
}
const onView = (itm: string) => {
if (typeof showinfo.value[itm] !== 'undefined') {
showinfo.value[itm] = !showinfo.value[itm]
if (typeof showinfo[itm] !== 'undefined') {
showinfo[itm] = !showinfo[itm]
if (itm === 'skills')
useState().showinfo.value.skills = showinfo.value[itm]
useState().showinfo.value.skills = showinfo[itm]
else if (itm === 'soft_skills')
useState().showinfo.value.soft_skills = showinfo.value[itm]
useState().showinfo.value.soft_skills = showinfo[itm]
}
}
const onEditor = (info: { src: string, field: string, idx: number, data: string, ev: Event }) => {

View File

@ -300,14 +300,14 @@ const routeKy = router.currentRoute.value.params.ky || router.currentRoute.value
const assets_path = useState().ASSETS_PATH.value
const showinfo = ref(props.showinfo as ShowInfoType)
const authinfo = computed(() => {
return showinfo.value.auth ? showinfo.value.auth : props.authinfo
return showinfo.auth ? showinfo.auth : props.authinfo
})
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value.corelang && props.localedata.value.corelang[itm] ? props.localedata.value.corelang[itm] : props.data[itm]
return props.localedata && props.localedata.corelang && props.localedata.corelang[itm] ? props.localedata.corelang[itm] : props.data[itm]
}
const onView = (itm: string) => {
if (typeof showinfo.value[itm] !== 'undefined') {
showinfo.value[itm] = !showinfo.value[itm]
if (typeof showinfo[itm] !== 'undefined') {
showinfo[itm] = !showinfo[itm]
// if (itm === 'skills')
// useState().showinfo.value.skills = showinfo.value[itm]
}

View File

@ -202,15 +202,15 @@ const authinfo = computed(() => {
return showinfo.value.auth ? showinfo.value.auth : props.authinfo
})
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value.corelang && props.localedata.value.corelang[itm] ? props.localedata.value.corelang[itm] : props.data[itm]
return props.localedata && props.localedata.corelang && props.localedata.corelang[itm] ? props.localedata.corelang[itm] : props.data[itm]
}
const onView = (itm: string) => {
if (typeof showinfo.value[itm] !== 'undefined') {
showinfo.value[itm] = !showinfo.value[itm]
if (typeof showinfo[itm] !== 'undefined') {
showinfo[itm] = !showinfo[itm]
if (itm === 'skills')
useState().showinfo.value.skills = showinfo.value[itm]
useState().showinfo.skills = showinfo[itm]
else if (itm === 'soft_skills')
useState().showinfo.value.soft_skills = showinfo.value[itm]
useState().showinfo.soft_skills = showinfo[itm]
}
}

View File

@ -66,7 +66,7 @@ const props = defineProps({
})
const emit = defineEmits(['onEditor', 'onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value[itm] ? props.localedata.value[itm] : props.data
return props.localedata && props.localedata[itm] ? props.localedata[itm] : props.data
}
const htmlattrs = { ...useState().htmlAttrs, bold: 'itm-title' }
const authinfo = useState().authinfo.value

View File

@ -59,7 +59,7 @@ const props = defineProps({
},
})
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value.corelang && props.localedata.value.corelang[itm] ? props.localedata.value.corelang[itm] : props.data
return props.localedata && props.localedata.core && props.localedata.core[itm] ? props.localedata.core[itm] : props.data
}
const authinfo = computed(() => {
return props.showinfo.auth ? props.showinfo.auth : props.authinfo

View File

@ -170,7 +170,7 @@ const props = defineProps({
})
const emit = defineEmits(['onEditor', 'onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value[itm] ? props.localedata.value[itm] : props.data
return props.localedata && props.localedata[itm] ? props.localedata[itm] : props.data
}
const routeKy = router.currentRoute.value.params.ky || router.currentRoute.value.query.k || ''
const assets_path = useState().ASSETS_PATH

View File

@ -58,7 +58,7 @@ const props = defineProps({
})
const emit = defineEmits(['onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value.corelang && props.localedata.value.corelang[itm] ? props.localedata.value.corelang[itm] : props.data
return props.localedata && props.localedata.corelang && props.localedata.corelang[itm] ? props.localedata.corelang[itm] : props.data
}
const onItem = (idx: number) => {
emit('onItem', { src: props.src, itm: props.data[idx], idx })

View File

@ -99,7 +99,7 @@ const props = defineProps({
})
const emit = defineEmits(['onEditor', 'onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value[itm] ? props.localedata.value[itm] : props.data
return props.localedata && props.localedata[itm] ? props.localedata[itm] : props.data
}
const authinfo = useState().authinfo.value
const onEditor = (info: { src: string, field: string, idx: number, data: string, ev: Event }) => {

View File

@ -99,7 +99,7 @@ const props = defineProps({
})
const emit = defineEmits(['onEditor', 'onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value[itm] ? props.localedata.value[itm] : props.data
return props.localedata && props.localedata[itm] ? props.localedata[itm] : props.data
}
const authinfo = useState().authinfo.value
const onEditor = (info: { src: string, field: string, idx: number, data: string, ev: Event }) => {

View File

@ -1,5 +1,5 @@
<template>
<div v-for="(item,index) in get_data('work_experiences')" :key="index" class="experience-item">
<div v-for="(item,index) in get_data('work_experience')" :key="index" class="experience-item">
<div class="flex">
<span class="w-4/5 flex-grow" />
<button
@ -8,7 +8,7 @@
@click.prevent="onItem(index)"
>
<div v-if="item.auth.show" class="noprint flex text-gray-400 dark:text-gray-500">
<div i-carbon-view-off />
<div i-carbon-view-off />
<div class="mt-0.2 ml-2">{{ index }}</div>
</div>
<div v-else class="noprint flex text-indigo-400 dark:text-indigo-500">
@ -20,7 +20,7 @@
<div v-if="item.auth.show" :id="`experience-${index}`">
<div v-for="info,key,infoindex in showinfo" :key="infoindex">
<section
v-if="info && item[key] && key !== 'wheredef' && key !== 'tools' && key !== 'tasks' && key !== 'auth'"
v-if="info && item[key] && key !== 'wheredef' && key !== 'tools' && key !== 'achievements' && key !== 'tasks' && key !== 'auth'"
class="mb-0"
>
<div class="left-item">
@ -68,6 +68,29 @@
</span>
</div>
</section>
<section
v-if="key === 'achievements' && item.achievements && Object.keys(item.achievements).length > 0"
class="mt-1"
>
<div class="left-item">
<span class="text-gray-400 dark:text-gray-500">{{ t(key, key).toLocaleLowerCase() }}</span>
</div>
<div class="right-item">
<ul class="list-circle">
<tiptap-editor
v-if="authinfo.editable"
:data="`<li>${item[key].join('</li><li>')}</li>`"
:editable="authinfo.editable"
src="work_experience"
:field="key"
:htmlattrs="{ ...useState().htmlAttrs, bold: 'itm-title font-normal' }"
:idx="index"
@onEditorBlur="onEditor"
/>
<span v-else v-html="`<li>${item[key].join('</li><li>')}</li>`" />
</ul>
</div>
</section>
<section
v-if="key === 'tasks' && item.tasks && Object.keys(item.tasks).length > 0"
class="mt-1"
@ -143,7 +166,7 @@ const props = defineProps({
})
const emit = defineEmits(['onEditor', 'onItem'])
const get_data = (itm: string) => {
return props.localedata.value && props.localedata.value[itm] ? props.localedata.value[itm] : props.data
return props.localedata && props.localedata[itm] ? props.localedata[itm] : props.data
}
const authinfo = useState().authinfo.value
const onEditor = (info: { src: string, field: string, idx: number, data: string, ev: Event }) => {