2022年总结

  • 前言
  • 技能的变迁
  • 工作变化
  • 生活变化
  • 环境变化
  • 结尾
  • 结束



1024_回首2022我做了啥_1024程序员节

前言

大家好,我是yma16,本文分享2022年的回忆录

技能的变迁

vue2框架使用、sql、js编写-> vue3框架使用,antdesign的ui框架使用
自学了微信小程序,优化了个人博客,自学webpack打包优化。
博客:https://yongma16.xyz/#/ 博客网站优化部分:

  1. 新增邮件发送
  2. 打包优化
  3. 优化滚动条缓动
  4. 修复聊天室redis的连接异常(nginx配置)
  5. 新增ssl协议

新增的前端服务

vue3测试平台:http://yongma16.xyz/emoji_api/ 技术框架:vue3+echarts

1024_回首2022我做了啥_Markdown_02

疫情可视化:https://yongma16.xyz/fund-web/ setup语法糖的使用

技术框架:vue3+vite+echarts

1024_回首2022我做了啥_Markdown_03

小程序:yma16

关联网站博客,

微信公众号的开发,止步于个人开发者权限未继续升入,

后续继续投入微信小程序和app的开发

1024_回首2022我做了啥_Email_04

工作变化

自研前端- > 外包前端

生活变化

告别单身,找到了生活的另一半

环境变化

离开大贵州去到了深圳,第一次接触互联网大环境下的快节奏工作

1024_回首2022我做了啥_1024程序员节_05

结尾


海阔天空

1024_回首2022我做了啥_1024程序员节_06


以前的代码:

不太规范

/* eslint-disable vue/no-duplicate-attributes */
<template>
  <div class="article" style="text-align: left; with: 100%; height: 100%">
    <!-- 左侧 -->
    <div class="leftclass">
      <el-card
        shadow="always"
        cellpadding="1px"
        style="position: static; line-height: 20px"
      >
        <div class="article_box">
          <h1>{{ slogan }}</h1>
          <ul v-for="(item, index) in md_title" :key="item" class="ul_style">
            <div
              v-bind:class="[
                { li_active: index === article_loc },
                li_errorClass,
              ]"
            >
              <li @click="getArticles(index)">{{ item }}</li>
            </div>
          </ul>
        </div>
        <!-- 分页 -->
        <div class="pagenation-block">
          <!-- <span class="demonstration">完整功能</span> -->
          <el-pagination
            :current-page="currentPage"
            :page-sizes="pageArray"
            background
            :page-count="pageCount"
            :page-size="pageSize"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            layout="total, sizes, prev, pager, next, jumper"
            :total="total"
          >
          </el-pagination>
        </div>
      </el-card>

      <!-- 评论 -->
      <el-card
        cellpadding="1px"
        shadow="always"
        style="position: static; margin-top: 2%"
      >
        <h1>{{ commmentSlogan }}</h1>
        <ArticleComment
          v-bind:articleId="postcomment.articleId"
          ref="commentRef"
        >
        </ArticleComment>
      </el-card>

      <!-- 挑战榜 -->
      <el-card
        class="challenge_title1"
        cellpadding="1px"
        shadow="always"
        style="position: static; margin-top: 2%"
      >
        <h1>{{ day_challenge }}</h1>
        <ul
          v-for="(item, index) in challengeConfig"
          :key="index"
          class="ul_style"
        >
          <div
            v-bind:class="[
              { li_active: index === activeChallengeIndex },
              li_errorClass,
            ]"
          >
            <li @click="clickChallengeEvent(item,index)">{{ item.title }}</li>
          </div>
        </ul>
      </el-card>

      <!-- 爬虫天气接口 -->
      <el-card
        class="weather_class1"
        cellpadding="1px"
        shadow="always"
        style="position: static; margin-top: 2%;text-align: center"
      >
        <span style="line-height: 30px;" class="uni-font">未来天气</span>
        <div style="positon: relative; width: 100%; height: 100%">
          <EchartWeather> </EchartWeather>
        </div>
      </el-card>

      <!-- cs头像 -->
      <el-card
        class="user_img1"
        style="
          position: static;
          margin: 2% auto auto auto;
          line-height: 10px;
          text-align: center;
        "
        >
        <span style="line-height: 30px;" class="uni-font">小程序</span>
          <img class="image" src="https://yongma16.xyz/staticFile/common/logo/wxProgram.jpg"
        />
      </el-card>

      <el-card
        class="user_img1"
        style="
          position: static;
          margin: 2% auto auto auto;
          line-height: 10px;
          text-align: center;
        "
        >
        <span style="line-height: 30px;" class="uni-font">点击图片前往cs</span>
        <a href="">
          <img class="image" src="@/assets/img/cs.jpg"
        /></a>
      </el-card>
    </div>
    <!-- 中间 markdown-->
    <div class="midclass" ref="mark-down-ref">
      <a name="home" id="homeTitleId" style="transition: 1s"></a>
      <el-card shadow="hover" style="line-height: 10px">
        <div class="block" style="line-height: 20px">
          <h1>{{ the_title }}</h1>
          <div class="markdown-body" style="text-align: left">
            <DesignMarkdown
              :contentSource="md_data[index_page]"
              v-highlight
              style="width: 100%; text-align: left"
            ></DesignMarkdown>
          </div>
        </div>
      </el-card>

      <div class="commitCard">
        <!--  -->
      </div>
      <!-- 挑战榜 -->
      <el-card
        class="challenge_title2"
        cellpadding="1px"
        shadow="always"
        style="position: static; margin-top: 2%"
      >
        <h1>{{ day_challenge }}</h1>
        <ul
          v-for="(item, index) in challengeConfig"
          :key="index"
          class="ul_style"
        >
          <div
            v-bind:class="[
              { li_active: index === activeChallengeIndex },
              li_errorClass,
            ]"
          >
            <li @click="clickChallengeEvent(item,index)">{{ item.title }}</li>
          </div>
        </ul>
      </el-card>

      <!-- 爬虫天气接口 -->
      <!-- <el-card class="weather_class2"
          cellpadding="1px"
          shadow="always"
          style="position: myblog_static; margin-top: 2%"
        >

        </el-card> -->
      <el-card
        class="user_img2"
        style="
          position: static;
          margin: 2% auto auto auto;
          line-height: 10px;
          text-align: center;
        "
      > <span style="line-height: 30px;" class="uni-font">小程序</span>
        <img class="image" src="https://yongma16.xyz/staticFile/common/logo/wxProgram.jpg"
        />
      </el-card>
      <!-- cs头像 -->
      <el-card
        class="user_img2"
        style="
          position: static;
          margin: 2% auto auto auto;
          line-height: 10px;
          text-align: center;
        "
        >
        <span style="line-height: 30px;" class="uni-font">点击图片前往cs</span>
        <a href="">
          <img class="image" src="@/assets/img/cs.jpg"
        /></a>
      </el-card>

    </div>
    <!-- 上滑滚动图标 -->
    <div class="rightclass">
      <div class="righticon">
        <el-card
          shadow="never"
          style="
            align-content: center;
            background-color: rgba(0, 0, 0, 0);
            border: rgba(0, 0, 0, 0);
          "
        >
          <div v-if="topShow">
            <el-button
              @click="toTop"
              type="info"
              icon="el-icon-top"
              style="
                transition: 1s;
                background: rgb(255, 94, 0);
                border: none;
                color: #fff;
              "
              circle
            ></el-button>
          </div>
          <br /><br />
          <div>
            <el-button
              type="info"
              icon="el-icon-message"
              circle
              @click="openDraw"
              style="background: rgb(255, 94, 0); border: none"
            >
            </el-button>
          </div>
          <br /><br />
        </el-card>
      </div>
    </div>
    <template>
        <Email :drawObj="drawObj"></Email>
    </template>
  </div>
</template>

<script>
import Email from '@/components/email/Email'
import DesignMarkdown from '@/components/markdown/DesignMarkdown'
import ArticleComment from '@/components/comment/ArticleComment'
import EchartWeather from '@/components/weather/EchartWeather'
export default {
    components: {
        DesignMarkdown, // 显示markdown的组件
        ArticleComment, // 子组件评论
        EchartWeather, // 天气
        Email
    },
    name: 'Article',
    data () {
        return {
            pageCount: 3,
            msgDrawTitle: '~邮件沟通~',
            direction: 'rtl',
            drawObj: {
                show: false
            },
            // baseurl: '/api/',
            baseurl: '/api/',
            // baseurl: "http://yongma16.xyz/",
            msg: '内容',
            commmentSlogan: '评论区',
            day_challenge: '训练营',
            challengeConfig: [
                {
                    title: 'css挑战',
                    order: 1,
                    isJumpPath: true,
                    isJumpUrl: false,
                    path: '/css'
                },
                {
                    title: 'websocket聊天',
                    order: 2,
                    isJumpPath: true,
                    isJumpUrl: false,
                    path: '/onlinewebsocket'
                },
                {
                    title: 'echarts地图配置',
                    order: 3,
                    isJumpPath: true,
                    isJumpUrl: false,
                    path: '/home'
                },
                {
                    title: 'vue3测试平台',
                    order: 4,
                    isJumpPath: false,
                    isJumpUrl: true,
                    url: 'http://yongma16.xyz/emoji_api/',
                    path: ''
                },
                {
                    title: '数据可视化平台',
                    order: 5,
                    isJumpPath: false,
                    isJumpUrl: true,
                    url: 'https://yongma16.xyz/fund-web',
                    path: ''
                },
                {
                    title: '更新中',
                    order: 6,
                    isJumpPath: false,
                    isJumpUrl: false,
                    path: ''
                }
            ],
            md_data: [],
            md_title: [],
            the_title: '',
            sear_page: 0,
            index_page: 0,
            data: ['threejs加载模型'],
            slogan: '记忆碎片',
            tabPosition: 'left',
            weather_title: [],
            weather_high: [],
            weather_low: [],
            toTopIsShow: false,
            article_loc: 0,
            activeChallengeIndex: -1,
            topShow: false,
            userImg: '',
            username: '匿名',
            articleCommit: '评论区',
            // 分页实现 page1 page2 指向数组
            pageAnalys: {},
            currentPage: 1,
            splitLength: 6, // 划分条数
            total: 0,
            pageSize: 4,
            pageArray: [6, 8, 10],
            postcomment: {
                articleId: undefined,
                articleCommit: null
            },
            articleId: [] // 文章的id
        }
    },
    watch: {
        topShow: {
            handler (newValue) {
                if (newValue) {
                    console.warn(newValue)
                }
            },
            immediate: true
        }
    },
    beforeDestroy () {
        // window.removeEventListener('onload', this.topVisible())
        this.articleScrollListen('remove')
    },
    mounted () {
        this.articleScrollListen('add')
        this.initPageSpliteFun()
        this.getChallengeDict()
        // window.addEventListener('onload', this.topVisible())
    },
    methods: {
        getChallengeDict () {
            const that = this
            that.$axios
                .post(that.baseurl + 'dictModel/index/', {
                    kind: 'challenge'
                    // 传入索引
                })
                .then((res) => {
                    that.challengeConfig = res.data.data.map(item => {
                        return JSON.parse(item.option)
                    })
                })
                .catch((error) => {
                    throw Error(error)
                })
        },
        /**
       * dom的滚动事件监听
       */
        articleScrollListen (key) {
            const dom = this.$refs['mark-down-ref']
            const that = this
            if (dom && key === 'add') {
                dom.addEventListener('scroll', function (e) {
                    that.topShow = Math.ceil(e.target.scrollTop) !== 0
                })
            } else if (dom && key === 'remove') {
                dom.removeEventListener('scroll', function (e) {
                    that.topShow = e.target.scrollTop === 0
                })
            }
        },
        initPageSpliteFun () {
            this.splitLength = this.pageArray[0]
        },
        handleSizeChange (val) {
            // 转到第一页md_title
            let that = this
            that.pageAnalysFun(that.pageAnalys.allTitle, val) // 触发修改
        },
        handleCurrentChange (val) {
            let that = this
            // 触发md_title的修改
            that.currentPage = val
            that.pageAnalysFun(that.pageAnalys.allTitle) // 触发修改
        },
        pageAnalysFun (allTitleArray, selectListLength) {
            let that = this
            that.total = allTitleArray.length // 总数
            let splitLength = that.splitLength
            if (selectListLength) {
                this.currentPage = 1
                that.splitLength = selectListLength // 划分长度
            }
            splitLength = that.splitLength
            let splitNum = Math.ceil(that.total / splitLength) // 向上取整
            that.pageAnalys.childNum = splitNum // 子数组个数
            that.pageAnalys.allTitle = allTitleArray // 所有标题
            that.pageAnalys.titleArray = [] // 子数组个数
            let locSplit = 0
            let locLength = splitLength // 每一页的条数
            while (splitNum--) {
                // 循环获取子数组
                if (splitNum >= 1) {
                    let childArray = []
                    for (
                        let temp = locSplit;
                        temp < locLength && temp < that.total;
                        ++temp, ++locSplit
                    ) {
                        childArray.push(that.pageAnalys.allTitle[temp])
                    }
                    that.pageAnalys.titleArray.push(childArray)
                    locLength += splitLength // 分割数组长度后移
                } else {
                    // 最后一个数组
                    let childArray = []
                    for (let temp = locSplit; temp < that.total; ++temp) {
                        childArray.push(that.pageAnalys.allTitle[temp])
                    }
                    that.pageAnalys.titleArray.push(childArray)
                    break
                }
            }
            try {
                that.md_title = that.pageAnalys.titleArray[this.currentPage - 1]
            } catch (e) {
                throw Error(e)
            }
        },
        increment: function () {
            this.$store.commit('increment')
        },
        topVisible: function () {
            // let dom = document.getElementById('homeTitleId')
            // this.topShow = this.elementIsVisibleInViewport(dom)
            // setTimeout(this.topVisible)
        },
        elementIsVisibleInViewport: function (el, partiallyVisible = false) {
            try {
                if (el && el.getBoundingClientRect instanceof Function) {
                    const { top, left, bottom, right } = el.getBoundingClientRect()
                    return partiallyVisible
                        ? ((top > 0 && top < innerHeight) ||
                (bottom > 0 && bottom < innerHeight)) &&
                ((left > 0 && left < innerWidth) ||
                  (right > 0 && right < innerWidth))
                        : top >= 0 &&
                left >= 0 &&
                bottom <= innerHeight &&
                right <= innerWidth
                }
            } catch (r) {
                throw Error(r)
            }
        },
        li_errorClass: function () {},
        clickChallengeEvent: function (item, index) {
            this.activeChallengeIndex = index
            if (item.isJumpPath) {
                this.$router
                    .push({
                        path: item.path
                    })
                    .catch((error) => {
                        throw Error(error)
                    })
            } else if (item.isJumpUrl) {
                window.open(item.url)
            }
        },
        open_message: function () {
            // this.$notify({
            //     title: '欢迎合作',
            //     message: '邮箱:1432448610@qq.com',
            //     position: 'bottom-right'
            // })
        },
        openDraw () {
            this.drawObj.show = true
        },

        toTop: function () {
            const dom = this.$refs['mark-down-ref']
            if (!dom) {
                return 0
            }
            const speedValue = Math.floor(dom.scrollTop / 20)
            const second = 20
            const diffTop = function (speed, time) {
                let top = Math.ceil(dom.scrollTop)
                if (top > 0) {
                    dom.scrollTop = top - speed > 0 ? top - speed : 0
                }
                if (dom.scrollTop > 0) {
                    setTimeout(() => {
                        return diffTop(speed, time)
                    }, 10)
                }
            }
            diffTop(speedValue, second)
            if (document.getElementById('mainappid') && document.getElementById('mainappid').scrollTop > 0) {
                document.getElementById('mainappid').scrollTop = 0
            }
        }, // 返回天气相当于返回顶部
        getCommentsFromArticle (id) {
            this.$refs.commentRef.getComments(id) // 触发子组件的方法
        },
        getArticles: function (page) {
            let that = this // this指向转化
            that.article_loc = page
            // 查找文章id 从1开始
            that.postcomment.articleId =
        that.articleId[
            parseInt(page + (that.currentPage - 1) * that.splitLength)
        ]
            // 提交数据 page从0开始
            that.$axios
                .post(that.baseurl + 'article/index/', {
                    value: page + (that.currentPage - 1) * that.splitLength
                    // 传入索引
                })
                .then((res) => {
                    if (res.data.code === 1) {
                        let respdata = res.data
                        let content = respdata.article
                        that.md_data = [] // 清空
                        content.map((o) => {
                            that.md_data.push(o) // 传入一个文章
                        })
                        that.the_title = respdata.the_title
                    } else if (res.data.code === 0) {
                        // alter("失败!")
                        that.$message.error('失败')
                    }
                })
                .catch((error) => {
                    throw Error(error)
                })
            that.getCommentsFromArticle(that.postcomment.articleId)
        }
    },
    created: function () {
    // 初始化
        let that = this
        that.$axios
            .get(that.baseurl + 'article/index/')
            .then((res) => {
                let resdata = res.data
                let content = resdata.article // 传递过来的文章 进行处理
                let title = resdata.title
                that.articleId = resdata.articleObjectId
                that.postcomment.articleId = resdata.articleId
                this.$refs.commentRef.getComments(that.postcomment.articleId) // 触发子组件的方法
                content.map((o) => {
                    that.md_data.push(o)
                })
                let titleAllArray = title.map((o) => {
                    return o
                })
                that.the_title = resdata.the_title
                this.pageAnalysFun(titleAllArray) // 分页
            })
            .catch((r) => {
                throw Error(r)
            }) // get log
    }
}
</script>

<style scoped>
.el-carousel__item h3 {
  color: #475669;
  font-size: 14px;
  opacity: 0.75;
  line-height: 150px;
  margin: 0;
}

.el-carousel__item:nth-child(2n) {
  background-color: #99a9bf;
  background-image: linear-gradient(90deg, #f0ddd2, #aa8c79);
}

.el-carousel__item:nth-child(2n + 1) {
  background-color: #b0b3b6;
  background-image: linear-gradient(90deg, #f0ddd2, #aa8c79);
}

.text {
  /* align-content: center; */
  display: flex;
  margin: 0 auto;
  font-size: 14px;
}

.item {
  display: inline-block;
  /* margin: 0 auto; */
  width: 900px;
}

.box-card {
  align-self: center;
  align-content: center;
  display: inline-block;
  width: 80%;
  /* padding-left:25%; */
  margin: 0 auto;
  /* opacity: 0.95; */
  margin-top: 0px;
  background-color: #ffffff;
}

.box-cardtext {
  align-self: center;
  align-content: center;
  display: inline-block;
  width: 20%;
  /* padding-left:25%; */
  margin: 0 auto;
  opacity: 0.9;
  margin-top: 80px;
  background-color: #ffffff;
}

.article {
  opacity: 1;
  /* background-color: aliceblue; */
  align-content: inherit;
  display: flex;
  margin: 5px;
  padding: 5px;
}

/* 取消滚动并且隐藏 */
el-col::-webkit-scrollbar {
  display: none;
}

.leftclass {
  position: relative;
  width: 30%;
  height: 100%;
  overflow: auto;
  margin: 5px;
}

.leftclass::-webkit-scrollbar {
  display: none;
}

.midclass {
  position: relative;
  width: 65%;
  height: 100%;
  overflow: auto;
  margin: 5px;
  /* scrollbar-face-color: coral; */

  /* scrollbar-track-color: darkslategrey; */
}
.pagenation-block{
  overflow: auto;
}
.midclass::-webkit-scrollbar {
  width: 10px;
  /* height:5px; */
  /* display: none; */
}
.midclass::-webkit-scrollbar-track {
  background: rgba(226, 247, 255, 0.5);
  border-radius: 2px;
  /* display: none; */
}
.midclass::-webkit-scrollbar-track-piece {
  background: rgba(255, 255, 255, 0.1);
  border-radius: 2px;
  /* display: none; */
}

.uni-font{
  color: #ff995e;
  font-weight: bolder;
}
.midclass::-webkit-scrollbar-thumb {
  background: #ff995e;
  height: 2px;
  border-radius: 2px;
  /* display: none; */
}
/* 评论区 */
.commitCard {
  position: relative;
  width: 100%;
  height: 80px;
  margin-top: 10px;
  justify-content: center;
  align-content: center;
  align-items: center;
  flex-wrap: wrap;
  flex-direction: row;
  margin-left: 0;
  margin-right: 0;
}

.rightclass {
  position: relative;
  width: 5%;
  height: 100%;
  overflow: hidden;
}

.rightclass::-webkit-scrollbar {
  display: none;
}

.righticon {
  position: relative;
  width: 100%;
  height: 100%;
  top: 70%;
}

.image {
  width: 100%;
  display: block;
}

.li_active li {
  color: rgb(255, 94, 0);
}

li:active {
  color: rgb(245, 182, 10);
}

li:link {
  color: rgb(255, 94, 0);
}

li:visited {
  color: gold;
}

li:hover {
  color: rgb(255, 72, 0);
  cursor: pointer;
}

h1 {
  color: rgb(255, 102, 0);
  text-align: center;
}

h1:hover {
  font-weight: bolder;
  color: rgb(255, 72, 0);
  /* color: gold; */
  cursor: pointer;
}

.article_box {
  position: relative;
  width: 100%;
  height: 100%;
}

.ul_style {
  position: relative;
  width: 100%;
  height: 100%;
}

.weather_class2 {
  display: none;
}

.user_img2 {
  display: none;
}

.challenge_title2 {
  display: none;
}

.weather_class1 {
  display: block;
}

.user_img1 {
  display: block;
}

.challenge_title1 {
  display: block;
}

@media screen and (max-width: 450px) {
  .article {
    display: inline-block;
    max-width: 350px;
  }

  .leftclass {
    width: 100%;
    height: 50%;
    max-width: 350px;
  }

  .midclass {
    width: 100%;
    max-width: 350px;
  }

  .rightclass {
    width: 80px;
    position: fixed;
    float: right;
    bottom: 20px;
    right: -10px;
  }

  .weather_class2 {
    display: block;
  }

  .user_img2 {
    display: block;
  }

  .challenge_title2 {
    display: block;
  }

  .weather_class1 {
    display: none;
  }

  .user_img1 {
    display: none;
  }

  .challenge_title1 {
    display: none;
  }
}
</style>

结束

本文分享到这结束,感谢大家的阅读!