当前位置: 首页 > news >正文

不良信息公示

系统应用于对各类不良信息进行公示

1、背景

针对目前各类打工人的工作生活,所遇仲裁无门,投诉无果的现象,以及各类公司有恃无恐的态度作为背景,特此对开源项目进行修改,诞生了此套系统

2、系统信息收集

为保障小人物权益,本系统退出匿名收集信息功能,所需的账号以及密码,完全由用户自主输入,不收集用户敏感信息作为保障

体验网址:www.weshir.com

3、部分源码以及项目截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

信息发布页面

在这里插入图片描述

在这里插入代码片<el-row :gutter="20"><!--    <el-col :sm="2" class="hidden-xs-only" style="opacity:0;">左侧占位</el-col>--><el-col :xs="10" :sm="14"><el-card style="background-color: rgba(255,255,255,0.9)" class="left-item"><div slot="header" class="total"><div class="titleIndex"><i v-if="selected" class="el-icon-back" @click="updateBlogList"></i><span>{{ selectMethod }}</span></div><!-- <span><span style="color: #3a8ee6; font-size: 20px">{{totalcount}}</span></span> --></div><el-row type="flex" align="middle" style="flex-wrap: wrap" :gutter="20" v-for="blog in blogList":key="blog.id"shadow="never" class="blog-content"><div ><!--              <el-col class="img" :xs="24" :sm="6">--><!--              </el-col>--><el-col :xs="24" :sm="18"style="padding-left: 10px;padding-right: 10px;margin-bottom: 5px;margin-top: -5px;"><div><h3 style="font-weight: bold;font-size: 30px" @click="getBlogInfo(blog.id)"><svg-icon icon-class="Topping" v-show="blog.top==1"/>{{ blog.title }}</h3><div style="margin-bottom: 10px;" @click="getBlogInfo(blog.id)"><span style="color: rgba(0, 0, 0, .4);"> {{ blog.blogDesc }}</span></div><div v-html="blog.content" @click="getBlogInfo(blog.id)"></div><div style="margin-bottom: 10px;"><el-tag effect="plain" size="mini" v-for="tag in blog.tags" :key="tag.tagId" type="success">{{ tag.tagName }}</el-tag></div><div class="blog-info"><div class="user-info"><i class="el-icon-user"></i><span class="header" style="font-size: 15px"> {{ blog.createBy }}</span></div><div class="blog-date"><i class="el-icon-date"></i><span style="font-size: 15px"> {{ blog.createTime }}</span></div><div><i class="el-icon-view"></i><span> {{ blog.views }}</span></div><div class="blog-type"><el-tag size="mini" v-for="tag in blog.types" :key="tag.typeId" type="info">{{ tag.typeName }}</el-tag></div></div></div><el-image v-if="blog.blogPicType === '0'" lazy :src="blog.blogPicLink" @click="getBlogInfo(blog.id)"><div slot="error" class="image-slot"><el-image src="/errorImg.jpg" fit="cover" class="blogPic"></el-image></div></el-image><el-image v-if="blog.blogPicType === '1'" style="width:60%;height: 60%" lazy @click="getBlogInfo(blog.id)":src="blog.blogPic"></el-image></el-col></div></el-row><pagination v-show="total>0" :total="total" :page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"background layout="total, sizes, prev, pager, next, jumper" @pagination="getBlogList"style="margin-bottom: 30px;float: right;margin-right: 10px;"/></el-card></el-col><el-col :xs="24" :sm="5"><el-card style="background-color: rgba(255,255,255,0.9)" class=" right-item"><div slot="header" class="attributes"><b>分类</b></div><ul class=" blog-type-ul" style="margin-top: 5px;"><li class=" blog-type-li" v-for="cmsType in typeList" :key="cmsType.typeId" @click="selectType(cmsType)":class="cmsType.typeId === typeId? 'activeType':''"><div style="display: flex;align-items: center"><el-image style="width: 28px;height: 28px; border-radius: 50%; margin-right: 10px" lazy:src="cmsType.typePicLink" v-show="cmsType.typePicType == '0'"><div slot="error" style="width: 28px;height: 28px; border-radius: 50%;"><i class="el-icon-collection" style="margin-left:6px;"></i></div></el-image><el-image style="width: 28px;height: 28px; border-radius: 50%; margin-right: 10px" lazy:src="cmsType.typePic" v-show="cmsType.typePicType == '1'"><div slot="error" style="width: 28px;height: 28px; border-radius: 50%;"><i class="el-icon-collection" style="margin-left:6px;"></i></div></el-image>{{ cmsType.typeName }}</div><div>{{ cmsType.blogNum }}</div></li></ul><div class="more" @click="dealType"><i v-if="moreType" class="el-icon-arrow-down"></i><i v-else class="el-icon-arrow-up"></i></div></el-card><el-card style="background-color: rgba(255,255,255,0.9)" class=" right-item"><div slot="header" class="attributes"><b>标签</b></div><div class="tags"><div class=" tag-item" v-for="tag in tagList" :key="tag.tagId" @click="selectTag(tag)":class="tag.tagId === tagId? 'activeTag':''"><div class="sjx-outer"><div class="sjx-inner"></div></div><div class="tag">{{ tag.tagName }}{{ tag.blogNum }}</div></div></div><div class="more" @click="dealTag"><i v-if="moreTag" class="el-icon-arrow-down"></i><i v-else class="el-icon-arrow-up"></i></div></el-card><el-card style="background-color: rgba(255,255,255,0.9)" class=" right-item"><div slot="header" class="attributes"><b>最新推荐</b></div><div class=" recommend-blog l-text" v-for="blog in recommendList" :key="blog.id"@click="getBlogInfo(blog.id)"><a class="recommend-a">{{ blog.title }}</a></div></el-card></el-col><el-col :sm="2" class="hidden-xs-only" style="opacity:0;">右侧占位</el-col></div></el-row>``````bash
//获取屏幕尺寸,用于用户滑动屏幕,数据停顿
window.addEventListener('scroll', this.handleScroll)this.$nextTick(function () {// 仅在整个视图都被渲染之后才会运行的代码this.getTypeList()this.getBlogList();this.getTagList()this.getRecommendList()let str = '这是我的个人博客、会分享关于编程,开发以及其他方面的一些内容,希望可以对您有所帮助...';let idx = 0;let that = thislet timer = setTimeout(function fn() {// console.log(this.intro)that.intro = that.intro + str.substring(idx, idx + 1)idx++if (idx > str.length) {that.intro = ''idx = 0}setTimeout(fn, 200)}, 2000)this.screenWidth = document.documentElement.clientWidth})```handleScroll() {const scrollTop = window.pageYOffset || document.documentElement.scrollTopthis.isSticky = scrollTop > 100 // 当页面滚动超过100px时启用固定},
// 开始进入主页startRead() {this.$nextTick(() => {document.getElementById('index').scrollIntoView({behavior: 'smooth',block: 'start',// inline: 'nearest'});})},compare(property) {return function (a, b) {let value1 = a[property].length;let value2 = b[property].length;return value2 - value1;}},// 获取推荐不良信息列表async getRecommendList() {cmsListRecommend(this.queryParams).then(response => {const {data: res} = response;this.recommendList = response.rows.slice(0, 10);this.total = response.total;});},// 获取不良信息类型列表async getTypeList() {getBlogDetail(this.$route.query.id).then(response => {for (let i = 0; i < response.types.length; i++) {let typeInfo = response.types[i];if (typeInfo.typePic.length > 0) {response.types[i].typePic = process.env.VUE_APP_BASE_API + typeInfo.typePic}};const {data: res} = response;this.fullTypeList = response.typesthis.typeList = response.types.slice(0, 7);});},
###  评论
```bash<div class="container"><div class="comment" v-for="item in comments"><div class="info" :id="item.id"><el-avatar v-if="item.avatar!==''&&item.avatar!=null" :src="item.avatar"></el-avatar><el-avatar v-else icon="el-icon-user-solid"></el-avatar><div class="right"><div class="name">{{item.createBy}}</div><div class="date">{{item.createTime}}</div></div></div><div class="content">{{item.content}}</div><div class="control"><span class="like" :class="{active: item.isLike}" @click="likeClick(item)"><svg-icon icon-class="like" /><span class="like-num" style="margin-left: 5px;">{{item.likeNum > 0 ? item.likeNum + '人赞' : '赞'}}</span></span><span class="comment-reply" @click="showCommentInput(item)"><svg-icon icon-class="comment" /><span style="margin-left: 5px;">回复</span></span></div><div class="reply"><div class="item" v-for="reply in item.children" :id="reply.id"><div class="reply-content"><span class="from-name">{{reply.createBy}}</span><span>: </span><span class="to-name" v-show="reply.parentId!=reply.mainId">@{{reply.pcreateBy}}</span><span v-show="reply.delFlag=='0'">{{reply.content}}</span><span v-show="reply.delFlag=='1'" style="color: #909399;">该评论已被删除!</span></div><div class="reply-bottom"><span>{{reply.createTime}}</span><span class="reply-text" @click="showCommentInput(item, reply)"><svg-icon icon-class="comment" /><span style="margin-left: 5px;">回复</span></span></div></div><div class="write-reply" v-if="item.children!=null" @click="showCommentInput(item)"><i class="el-icon-edit"></i><span class="add-comment">添加新评论</span></div><input-component :show="showItemId === item.id":value="inputComment":toComment="name":toId="id"@cancel="cancelInput"@confirm="commitComment"></input-component><!--<transition name="fade">--><!--<div class="input-wrapper" v-if="showItemId === item.id">--><!--<el-input class="gray-bg-input"--><!--v-model="inputComment"--><!--type="textarea"--><!--:rows="3"--><!--autofocus--><!--placeholder="写下你的评论">--><!--</el-input>--><!--<div class="btn-control">--><!--<span class="cancel" @click="cancel">取消</span>--><!--<el-button class="btn" type="success" round @click="commitComment">确定</el-button>--><!--</div>--><!--</div>--><!--</transition>--></div></div></div>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 鸿蒙 使用 Emitter 精准刷新
  • <Rust>egui学习之小部件(六):如何在窗口中添加菜单栏部件?
  • vue ref和reactive区别
  • SoftMaker Office Pro 2024:高效办公的全方位解决方案
  • 分库分表学习笔记(二)
  • 什么是池化层
  • jarbas 靶机渗透(cms 渗透)
  • Spring Cloud全解析:网关之GateWay简介
  • Linux sentinel写法
  • 下载外文文献的常用方法
  • mysql高可用之组复制 (MGR)
  • MyBatis的学习————下篇
  • 西门子PLC控制激光读头,profient转Ethernet IP网关应用
  • 【前端面试】操作系统
  • GaussDB 24.1.30 分布式3节点命令行方式部署
  • 【EOS】Cleos基础
  • 【Leetcode】104. 二叉树的最大深度
  • 【笔记】你不知道的JS读书笔记——Promise
  • AHK 中 = 和 == 等比较运算符的用法
  • CSS相对定位
  • flutter的key在widget list的作用以及必要性
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript 基本功--面试宝典
  • JavaScript-Array类型
  • Making An Indicator With Pure CSS
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 编写高质量JavaScript代码之并发
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 深入浅出webpack学习(1)--核心概念
  • 数据科学 第 3 章 11 字符串处理
  • 物联网链路协议
  • 线上 python http server profile 实践
  • 小程序开发之路(一)
  • 学习JavaScript数据结构与算法 — 树
  • 从如何停掉 Promise 链说起
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​第20课 在Android Native开发中加入新的C++类
  • ​马来语翻译中文去哪比较好?
  • ‌JavaScript 数据类型转换
  • $.ajax,axios,fetch三种ajax请求的区别
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (33)STM32——485实验笔记
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8.0 发布到 IIS
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET单元测试