diff --git a/src/api/knowledge/index.ts b/src/api/knowledge/index.ts new file mode 100644 index 000000000..18b7868bf --- /dev/null +++ b/src/api/knowledge/index.ts @@ -0,0 +1,45 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { UserDetail, UserQuery, NaviQuery, Navi ,PageParam,graphicformList} from './types'; + + +//获取当前用户详细信息 +export function getUserDetail(data: UserQuery): AxiosPromise { + return request({ + url: '/javasys/user/detail', + method: 'post', + data: data, + + }); +} + +//获取左侧导航栏信息 +export function getZxxyNavis(data: NaviQuery): AxiosPromise { + return request({ + url: '/javasys/archive/zxxy', + method: 'post', + data: data, + + }); +} + +//获取推荐分页 +export function getTuijian(data: PageParam): AxiosPromise { + return request({ + url: '/javasys/graphicform/cardlist', + method: 'post', + data: data, + + }); + +} + //获取轮播图数据 + export function getCarousel(data: PageParam): AxiosPromise { + return request({ + url: '/javasys/graphicform/carousel', + method: 'post', + data: data, + + }); + + } diff --git a/src/api/knowledge/scroll.js b/src/api/knowledge/scroll.js new file mode 100644 index 000000000..47801599c --- /dev/null +++ b/src/api/knowledge/scroll.js @@ -0,0 +1,101 @@ + + +// 滚动监听器 +export function onScroll() { + + + // 获取所有锚点元素 + const navContents = document.querySelectorAll('.models') + + // 所有锚点元素的 offsetTop + const offsetTopArr = [] + navContents.forEach(item => { + offsetTopArr.push(item.offsetTop) + }) + // 获取当前文档流的 scrollTop + const scrollTop = document.documentElement.scrollTop || document.body.scrollTop + // 定义当前点亮的导航下标 + let navIndex = 0 + for (let n = 0; n < offsetTopArr.length; n++) { + // 如果 scrollTop 大于等于第n个元素的 offsetTop 则说明 n-1 的内容已经完全不可见 + // 那么此时导航索引就应该是n了 + if (scrollTop+210 >= offsetTopArr[n]) { + navIndex = n + } + //若滚动条已经到底则直接激活最后一个导航 + if (scrollTop + document.documentElement.clientHeight === document.documentElement.scrollHeight) { + navIndex = offsetTopArr.length - 1; + } + } + //active.value = navIndex + return navIndex; + } + + // 跳转到指定索引的元素 + export function scrollTo(index) { + + + // 获取目标的 offsetTop + // css选择器是从 1 开始计数,我们是从 0 开始,所以要 +1 + const targetOffsetTop = document.querySelector(`.content .models:nth-child(${index + 1})`).offsetTop + // 获取当前 offsetTop + let scrollTop = document.documentElement.scrollTop || document.body.scrollTop + // 定义一次跳 150 个像素 + const STEP = 50 + // 判断是往下滑还是往上滑 + if (scrollTop > targetOffsetTop) { + // 往上滑 + smoothUp() + } else { + // 往下滑 + smoothDown() + } + // 定义往下滑函数 + function smoothDown() { + // 如果当前 scrollTop 小于 targetOffsetTop 说明视口还没滑到指定位置 + if (scrollTop < targetOffsetTop) { + // 如果和目标相差距离大于等于 STEP 就跳 STEP + // 否则直接跳到目标点,目标是为了防止跳过了。 + if (targetOffsetTop - scrollTop >= STEP) { + scrollTop += STEP + } else { + scrollTop = targetOffsetTop + } + document.body.scrollTop = scrollTop + document.documentElement.scrollTop = scrollTop + // 关于 requestAnimationFrame 可以自己查一下,在这种场景下,相比 setInterval 性价比更高 + requestAnimationFrame(smoothDown) + } + } + // 定义往上滑函数 + function smoothUp() { + if (scrollTop > targetOffsetTop) { + if (scrollTop - targetOffsetTop >= STEP) { + scrollTop -= STEP + } else { + scrollTop = targetOffsetTop + } + document.body.scrollTop = scrollTop + document.documentElement.scrollTop = scrollTop + requestAnimationFrame(smoothUp) + } + } + } + export function formatDate(timestamp) { + var date = new Date(timestamp * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 + + var Y = date.getFullYear() + '-'; + + var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-'; + + var D = date.getDate() + ' '; + + var h = date.getHours() + ':'; + + var m = date.getMinutes() + ':'; + + var s = date.getSeconds(); + + return Y+M+D+h+m+s; + } + diff --git a/src/api/knowledge/types.ts b/src/api/knowledge/types.ts new file mode 100644 index 000000000..18b0a3a1f --- /dev/null +++ b/src/api/knowledge/types.ts @@ -0,0 +1,167 @@ +//用户查询 +export interface UserQuery { + userkey: string; + usertoken: string; +} + +//用户信息 +export interface UserDetail { + //证件号码 + idcardno?: string[]; + //姓名 + name: string; + //头像url + icon?: string; + //工号 + wmNumber: string; + //唯一识别码 + wmKey: string; + //adminorg + adminorg:string; + +} + +//导航栏查询 +export interface NaviQuery { + atParentId: string; + userkey: String, + usertoken: String, +} +//导航栏信息 +export interface Navi{ + + atId:string; + //档案分类名称 + atTitle:string; + //档案分类状态 + atStater:string; + //档案分类父级 + atParentId:string; + //写入时间 + atTime:string; + //添加人员 + atUid:string; + //排序 + atSort:string; + //该导航栏中有无card + hasCard:Boolean; +} +export type cardList = PageResult +//卡片 +export interface Graphicform { + gId?:number|string; + //标题 + gTitle?:string; + //关键字 + gKey?:string; + //描述 + gDescribe?:string; + //父级 + gParent?:number|string; + //分类 + gParentSun?:number|string; + //文档来源(1:原创;2:转载) + gSource?:number|string; + //转载地址 + gSourceUrl?:string; + //缩略图 + gThumbnail?:string; + //排序 + gSort?:number|string; + //评论设置(1:允许评论;2:禁止评论) + gComment?:number|string; + //访问权限(1:公开;2:分厂;3:工段;4:自定义) + gVisitStrat?:number|string; + //状态(1:草稿;2:发表;3:下架;4:删除) + gState?:number|string; + //写入时间 + gAddTime?:number|string; + //修改时间 + gEiteTime?:number|string; + //编辑人员 + gUserKey?:number|string; + //分厂 + gBfId?:number|string; + //工段 + gWsId?:number|string; + //班组 + gTeam?:number|string; + //是否允许下载(1:允许;2:禁止) + gDownloadState?:number|string; + //阅读量 + gRead?:number|string; + //评论数 + gComSum?:number|string; + //收藏数 + gCollectionSum?:number|string; + //点赞数 + gLikes?:number|string; + //推荐(1:推荐,2:不推荐) + gRecommend?:number|string; + //图文详情 + gContent?:string; + //踩数量 + gStepOn?:number|string; + //自定义可见范围 + gRange?:string; + //写入分厂 + gWriteBfid?:number|string; + //正文文档名称 + gTextName?:string; + //正文文档URL + gTestUrl?:string; + //物理地址 + gPhysicsPath?:string; + //写入人员组织 + gWriteGroup?:number|string; + //外部链接 + gOuterLink?:string; + +} +export interface PageParam extends PageQuery{ + total:number; + archivesTypeAtParentId?:string; //知识库or新闻资讯 + gParentSun?:string; //标题分类 + adminorg:string; + key:string; + userkey: string, + usertoken: string, + +} + +/** + * 卡片list + */ +export type graphicformList = PageResultJava + +/** + * 分页响应对象 + */ +interface PageResultJava { + /** + * 数据列表 + */ + list: T; + /** + * 数据总数 + */ + total: number; + //每页条数 + pageSize:number; + //总页数 + pages:number; + //前一页 + prePage:number; + // + size:number; + startRow:number; + //当前页 + pageNum:number; + +} + +//标题下有无内容 +export interface ShowTitle { + atIdAndGParentSun: string;//导航栏id + hasCard:Boolean;//是否展示 +} diff --git a/src/assets/404_images/imgNotFound.png b/src/assets/404_images/imgNotFound.png new file mode 100644 index 000000000..dfd587ac9 Binary files /dev/null and b/src/assets/404_images/imgNotFound.png differ diff --git a/src/store/modules/knowledge.ts b/src/store/modules/knowledge.ts new file mode 100644 index 000000000..9d1f2ffc0 --- /dev/null +++ b/src/store/modules/knowledge.ts @@ -0,0 +1,21 @@ +import { defineStore } from 'pinia' +import { ShowTitle } from '@/api/knowledge/types'; +// 第一个参数是应用程序中 store 的唯一 id +export const useKnowledgeStore = defineStore('knowledge', { + + state: () => { + //const knowledgeTitlesShow = ref>([]); + const knowledgeTitlesShow = ref([]); + + return {knowledgeTitlesShow}; + + }, + getters: { + // 自动将返回类型推断为数字 + getArray(state) { + return state + }, + + }, + +}) \ No newline at end of file diff --git a/src/views/knowledge/knowledge/components/KnowledgeContent.vue b/src/views/knowledge/knowledge/components/KnowledgeContent.vue new file mode 100644 index 000000000..802b696f1 --- /dev/null +++ b/src/views/knowledge/knowledge/components/KnowledgeContent.vue @@ -0,0 +1,96 @@ + + + + + + + \ No newline at end of file diff --git a/src/views/knowledge/knowledge/components/Navili.vue b/src/views/knowledge/knowledge/components/Navili.vue new file mode 100644 index 000000000..42bf7e660 --- /dev/null +++ b/src/views/knowledge/knowledge/components/Navili.vue @@ -0,0 +1,32 @@ + + + \ No newline at end of file diff --git a/src/views/knowledge/knowledge/components/archivestype.vue b/src/views/knowledge/knowledge/components/archivestype.vue new file mode 100644 index 000000000..cc52cc0ab --- /dev/null +++ b/src/views/knowledge/knowledge/components/archivestype.vue @@ -0,0 +1,287 @@ + + + \ No newline at end of file diff --git a/src/views/knowledge/knowledge/index.vue b/src/views/knowledge/knowledge/index.vue new file mode 100644 index 000000000..8c2371308 --- /dev/null +++ b/src/views/knowledge/knowledge/index.vue @@ -0,0 +1,357 @@ + + + + + + + diff --git a/tsconfig.json b/tsconfig.json index b2fbbcf90..97fc5802b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "outDir": "build", "target": "esnext", "useDefineForClassFields": true, "module": "esnext", @@ -20,7 +21,7 @@ "allowSyntheticDefaultImports": true /* 允许默认导入 */, "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */ }, - "include": ["src/**/*.ts", "src/**/*.vue", "src/types/**/*.d.ts"], + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.vue", "src/types/**/*.d.ts"], "exclude": ["node_modules", "dist", "**/*.js"], "references": [{ "path": "./tsconfig.node.json" }] }