From 4f579d068b37d1a1a9706ed652561d104a4c5d66 Mon Sep 17 00:00:00 2001 From: "617594538@qq.com" Date: Wed, 9 Sep 2020 16:48:27 +0800 Subject: [PATCH] 2020-09-09 --- .../qinxx/hslink/controller/HSController.java | 82 ++++++- .../com/qinxx/hslink/dao/HSLinkMapper.java | 15 ++ .../qinxx/hslink/dao/mapping/HSLinkMapper.xml | 38 +++ .../com/qinxx/hslink/service/HSService.java | 25 +- .../hslink/service/impl/HSServiceImpl.java | 155 ++++++++++++- .../java/com/qinxx/hslink/util/TestClass.java | 12 +- ...itional-spring-configuration-metadata.json | 8 + .../src/main/resources/application.yml | 3 + HSLink-back/src/main/static/files/test.png | 1 + HSLink-front/package.json | 1 + HSLink-front/src/api/index.js | 4 +- HSLink-front/src/components/Homepage.vue | 44 ++-- HSLink-front/src/main.js | 8 +- HSLink-front/src/router/index.js | 29 ++- HSLink-front/src/util/dom.js | 148 ++++++++++++ HSLink-front/src/view/admin/Admin.vue | 219 ++++++++++++++++++ .../admin/articleReview/ArticleReview.vue | 76 ++++++ .../homepageManagement/HomepageManagement.vue | 13 ++ .../PersonnelManagement.vue | 37 +++ HSLink-front/src/view/upload.vue | 83 +++++++ 20 files changed, 967 insertions(+), 34 deletions(-) create mode 100644 HSLink-back/src/main/resources/META-INF/additional-spring-configuration-metadata.json create mode 100644 HSLink-back/src/main/static/files/test.png create mode 100644 HSLink-front/src/util/dom.js create mode 100644 HSLink-front/src/view/admin/Admin.vue create mode 100644 HSLink-front/src/view/admin/articleReview/ArticleReview.vue create mode 100644 HSLink-front/src/view/admin/homepageManagement/HomepageManagement.vue create mode 100644 HSLink-front/src/view/admin/personnelManagement/PersonnelManagement.vue create mode 100644 HSLink-front/src/view/upload.vue diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/controller/HSController.java b/HSLink-back/src/main/java/com/qinxx/hslink/controller/HSController.java index 526eb8b..42606d0 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/controller/HSController.java +++ b/HSLink-back/src/main/java/com/qinxx/hslink/controller/HSController.java @@ -1,9 +1,22 @@ package com.qinxx.hslink.controller; import com.qinxx.hslink.service.HSService; +import org.apache.ibatis.annotations.Param; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; +import java.io.*; +import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -14,14 +27,19 @@ import java.util.Map; @RequestMapping("/hs") public class HSController { - @Autowired + /** + * 日志 + */ + private static Logger logger = LogManager.getLogger(HSController.class); + + @Resource HSService hsService; /**登录验证*/ @RequestMapping(value = "/login", method = {RequestMethod.POST, RequestMethod.GET}) @ResponseBody public Map hello(@RequestBody Map param) { - Map result = new HashMap<>(); + Map result = new HashMap<>(32); result = hsService.login(param); return result; } @@ -30,7 +48,7 @@ public class HSController { @RequestMapping(value = "/register", method = {RequestMethod.POST,RequestMethod.GET}) @ResponseBody public Map register(@RequestBody Map param) { - Map result = new HashMap<>(); + Map result = new HashMap<>(32); result = hsService.register(param); return result; } @@ -186,4 +204,62 @@ public class HSController { Map result = hsService.timingTask(param); return result; } + + /** + * 使用 httpServletRequest作为参数 + * @param httpServletRequest + * @return + */ + @PostMapping("/upload") + @ResponseBody + public Map upload(HttpServletRequest httpServletRequest){ + return hsService.upload(httpServletRequest); + } + + /** + * 获取文件列表 + */ + @PostMapping("/getFileList") + @ResponseBody + public Map getFileList(String[] fileList){ + Map result = new HashMap<>(); + result = hsService.getFileList(fileList); + return result; + } + + /** + * 文件下载 + */ + @RequestMapping("/fileDownload") + public void fileDownload(HttpServletRequest request, HttpServletResponse response) { + hsService.fileDownload(request.getParameter("fileId"),request,response); + } + + /** + * 查询轮播图列表 + */ + @PostMapping("/getRotationPhotoList") + @ResponseBody + public Map getRotationPhotoList(){ + Map result = new HashMap<>(); + result = hsService.getRotationPhotoList(); + return result; + } + + /** + * 获取管理员文章审核列表 + */ + + + /** + * 测试接口 + */ + @PostMapping("/test") + @ResponseBody + public Map test(String page, String limit){ + Map result = new HashMap<>(); + + return result; + } + } diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/dao/HSLinkMapper.java b/HSLink-back/src/main/java/com/qinxx/hslink/dao/HSLinkMapper.java index b7276d1..d6a27d4 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/dao/HSLinkMapper.java +++ b/HSLink-back/src/main/java/com/qinxx/hslink/dao/HSLinkMapper.java @@ -154,4 +154,19 @@ public interface HSLinkMapper { */ int updateIntegral(Map param); + /** + * 保存文件路径 + */ + int insertFilePath(Map param); + + /** + * 获取文件信息 + */ + List> getFileList(); + + /** + * 查询轮播图列表 + * @return + */ + List> getRotationPhotoList(); } diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/dao/mapping/HSLinkMapper.xml b/HSLink-back/src/main/java/com/qinxx/hslink/dao/mapping/HSLinkMapper.xml index ab64ebe..d45d181 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/dao/mapping/HSLinkMapper.xml +++ b/HSLink-back/src/main/java/com/qinxx/hslink/dao/mapping/HSLinkMapper.xml @@ -306,5 +306,43 @@ ORDER BY letter_create_time desc + + + insert into hs_file_info + (id,file_name,file_encryption,file_path,create_time) + values + (#{id},#{fileName},#{fileEncryption},#{filePath},now()) + + + + + + + \ No newline at end of file diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/service/HSService.java b/HSLink-back/src/main/java/com/qinxx/hslink/service/HSService.java index 023319d..25436aa 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/service/HSService.java +++ b/HSLink-back/src/main/java/com/qinxx/hslink/service/HSService.java @@ -2,6 +2,8 @@ package com.qinxx.hslink.service; import org.springframework.web.bind.annotation.RequestBody; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -115,4 +117,25 @@ public interface HSService { * 定时任务 */ Map timingTask(Map param); - } \ No newline at end of file + + /** + * 上传文件 + */ + Map upload(HttpServletRequest httpServletRequest); + + /** + * 获取文件列表 + */ + Map getFileList(String[] fileList); + + /** + * 文件下载 + */ + void fileDownload(String fileId,HttpServletRequest request, HttpServletResponse response); + + /** + * 查询轮播图列表 + * @return + */ + Map getRotationPhotoList(); +} \ No newline at end of file diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/service/impl/HSServiceImpl.java b/HSLink-back/src/main/java/com/qinxx/hslink/service/impl/HSServiceImpl.java index 906e5f9..3e2676f 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/service/impl/HSServiceImpl.java +++ b/HSLink-back/src/main/java/com/qinxx/hslink/service/impl/HSServiceImpl.java @@ -1,20 +1,36 @@ package com.qinxx.hslink.service.impl; +import com.qinxx.hslink.controller.HSController; import com.qinxx.hslink.dao.HSLinkMapper; import com.qinxx.hslink.service.HSService; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; + @Service public class HSServiceImpl implements HSService { - @Autowired + /** + * 日志 + */ + private static Logger logger = LogManager.getLogger(HSServiceImpl.class); + @Resource HSLinkMapper hsLinkMapper; + /**文件路径*/ + @Value("${filePath}") + private String filePath; @Override public Map login(Map param) { @@ -332,4 +348,133 @@ public class HSServiceImpl implements HSService { result.put("success",true); return result; } + + @Override + public Map upload(HttpServletRequest httpServletRequest) { + boolean flag = false; + MultipartHttpServletRequest multipartHttpServletRequest = null; + //强制转换为MultipartHttpServletRequest接口对象 (它包含所有HttpServletRequest的方法) + if(httpServletRequest instanceof MultipartHttpServletRequest){ + multipartHttpServletRequest = (MultipartHttpServletRequest) httpServletRequest; + }else{ + return dealResultMap(false, "上传失败"); + } + //获取MultipartFile文件信息(注意参数为前端对应的参数名称) + MultipartFile mf = multipartHttpServletRequest.getFile("file"); + //获取源文件名称 + String fileName = mf.getOriginalFilename(); + //存储路径可在配置文件中指定 + File pfile = new File(filePath); + if (!pfile.exists()) { + pfile.mkdirs(); + } + String id = UUID.randomUUID().toString(); + File file = new File(pfile,id+fileName); + /* //指定好存储路径 + File file = new File(fileName);*/ + try { + //保存文件 + //使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错 + mf.transferTo(file); + } catch (IOException e) { + e.printStackTrace(); + return dealResultMap(false, "上传失败"); + } + //保存文件路径 + Map param = new HashMap<>(); + param.put("id", id); + param.put("fileName",fileName); + param.put("fileEncryption",id+fileName); + param.put("filePath",String.valueOf(file)); + hsLinkMapper.insertFilePath(param); + return dealResultMap(true, "上传成功"); + } + + @Override + public Map getFileList(String[] fileList) { + Map result = new HashMap<>(); + Map res = new HashMap<>(); + res.put("fileList",hsLinkMapper.getFileList()); + result.put("data",res); + result.put("success",true); + return result; + } + + @Override + public void fileDownload(String fileId,HttpServletRequest request, HttpServletResponse response) { + // 下载的文件名 + Map fileMap = new HashMap<>(); + fileMap.put("NAME","test.png"); + fileMap.put("ID",""); + String fileName = fileMap.get("NAME"); + String id = fileMap.get("ID"); + String prefix = fileName.substring(fileName.lastIndexOf(".")); + // 文件路径 + String path = "D:\\office\\phy\\HSLink\\HSLink-back\\src\\main\\static\\files\\test.png"; + InputStream bis = null; + BufferedOutputStream out = null; + // 获取输入流 + try { + bis = new BufferedInputStream(new FileInputStream(new File(path)), 1024 * 10); + // 假如以中文名下载的话 + // 转码,免得文件名中文乱码 + fileName = URLEncoder.encode(fileName, "UTF-8"); + // 设置文件下载头 + response.addHeader("Content-Disposition", "attachment;filename=" + fileName); + // 设置文件ContentType类型,这样设置,会自动判断下载文件类型 + response.setContentType("multipart/form-data"); + out = new BufferedOutputStream(response.getOutputStream()); + int len = 0; + int i = bis.available(); + byte[] buff = new byte[i]; + while ((len = bis.read(buff)) > 0) { + out.write(buff, 0, len); + out.flush(); + } + } catch (FileNotFoundException e) { + logger.error("文件未找到" + e.getMessage()); + } catch (UnsupportedEncodingException e) { + logger.error("不支持的编码异常:" + e.getMessage()); + } catch (IOException e) { + logger.error("IO异常:" + e.getMessage()); + } finally { + try { + if (null != bis) { + bis.close(); + } + } catch (IOException e) { + logger.error("流关闭异常" + e.getMessage()); + } + try { + if (null != out) { + out.close(); + } + } catch (IOException e) { + logger.error("流关闭异常" + e.getMessage()); + } + } + } + + @Override + public Map getRotationPhotoList() { + Map result = new HashMap<>(); + Map res = new HashMap<>(); + res.put("rotationPhotoList",hsLinkMapper.getRotationPhotoList()); + result.put("data",res); + result.put("success",true); + return result; + } + + /** + * 返回参数 + * @param flag + * @param message + * @return + */ + private Map dealResultMap(boolean flag, String message) { + HashMap map = new HashMap<>(); + map.put("flag",flag); + map.put("message",message); + return map; + } } diff --git a/HSLink-back/src/main/java/com/qinxx/hslink/util/TestClass.java b/HSLink-back/src/main/java/com/qinxx/hslink/util/TestClass.java index 693aa85..0d1a649 100644 --- a/HSLink-back/src/main/java/com/qinxx/hslink/util/TestClass.java +++ b/HSLink-back/src/main/java/com/qinxx/hslink/util/TestClass.java @@ -7,10 +7,14 @@ import java.util.Date; * @author 帅气的布里茨 */ public class TestClass { + + /** + * 主线程 + */ public static void main(String[] args) { - //设置日期格式 - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - // new Date()为获取当前系统时间 - System.out.println(df.format(new Date())); + final int num = 10; + for (int i = 0; i < num; i++) { + System.out.println(i); + } } } diff --git a/HSLink-back/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/HSLink-back/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 0000000..c38db42 --- /dev/null +++ b/HSLink-back/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,8 @@ +{ + "properties": [ + { + "name": "filePath", + "type": "java.lang.String", + "description": "Description for filePath." + } +] } \ No newline at end of file diff --git a/HSLink-back/src/main/resources/application.yml b/HSLink-back/src/main/resources/application.yml index de1df8f..39bcaaa 100644 --- a/HSLink-back/src/main/resources/application.yml +++ b/HSLink-back/src/main/resources/application.yml @@ -19,3 +19,6 @@ spring: db-name: hslink filters: log4j,wall,mergeStat driverClassName: com.mysql.cj.jdbc.Driver + +##文件保存路径 +filePath: D:\office\phy\HSLink\HSLink-front\src\assets\file \ No newline at end of file diff --git a/HSLink-back/src/main/static/files/test.png b/HSLink-back/src/main/static/files/test.png new file mode 100644 index 0000000..ac1f9a4 --- /dev/null +++ b/HSLink-back/src/main/static/files/test.png @@ -0,0 +1 @@ +测试文件 \ No newline at end of file diff --git a/HSLink-front/package.json b/HSLink-front/package.json index 0dfcac9..f4cb1a9 100644 --- a/HSLink-front/package.json +++ b/HSLink-front/package.json @@ -14,6 +14,7 @@ "element-ui": "^2.13.0", "jquery": "^3.4.1", "marked": "^0.8.2", + "react": "^16.13.1", "vue": "^2.5.2", "vue-router": "^3.0.1", "vue-scroll": "^2.1.13" diff --git a/HSLink-front/src/api/index.js b/HSLink-front/src/api/index.js index 41b946a..ff3e1ac 100644 --- a/HSLink-front/src/api/index.js +++ b/HSLink-front/src/api/index.js @@ -2,8 +2,8 @@ import de from "element-ui/src/locale/lang/de"; // let root = 'http://192.168.10.29:8048' -let root = 'http://123.57.22.91:8048' -// let root = 'http://127.0.0.1:8048' +// let root = 'http://123.57.22.91:8048' +let root = 'http://127.0.0.1:8048' // 引用axios let axios = require('axios') // 自定义判断元素类型JS diff --git a/HSLink-front/src/components/Homepage.vue b/HSLink-front/src/components/Homepage.vue index 2ef8b90..374df4b 100644 --- a/HSLink-front/src/components/Homepage.vue +++ b/HSLink-front/src/components/Homepage.vue @@ -11,17 +11,8 @@ 校


- - - - - - - - - - - + + @@ -113,6 +104,8 @@ name: "Hompage", data() { return{ + //轮播图片 + rotationPhotoList: [], tabLoading: false, condition: '', newestNotice: '', @@ -176,17 +169,38 @@ } }, mounted() { + this.getRotationPhotoList(); + this.getNoticeList(); + }, + methods: { + //获取通知列表 + getNoticeList() { this.tabLoading = true; this.$ajax.post("/hs/getAllContent",{},r=>{ this.tabLoading = false; this.newestNotice = r.schoolNoticeList.slice(0,12); this.goodAdvice = r.parentAdvice.slice(0,12); this.magicalThinking = r.studentThinking.slice(0,12); - }) - }, - methods: { + }) + }, + //获取轮播图片 + getRotationPhotoList() { + this.$ajax.post('/hs/getRotationPhotoList',{},res=>{ + console.log("轮播图列表",res); + this.rotationPhotoList = []; + for (let i = 0; i < res.rotationPhotoList.length; i++) { + this.rotationPhotoList.push( + { + id: res.rotationPhotoList[i].id, + fileId: res.rotationPhotoList[i].fileId, + fileName: require('../assets/img/carousel/'+res.rotationPhotoList[i].fileName)}, + ); + } + console.log("rotationPhotoList",this.rotationPhotoList) + }) + }, searchLabel(label) { - sessionStorage.setItem("condition",label) + sessionStorage.setItem("condition",label); this.$router.push({name: "search"}) }, search() { diff --git a/HSLink-front/src/main.js b/HSLink-front/src/main.js index 3fec17f..8beb404 100644 --- a/HSLink-front/src/main.js +++ b/HSLink-front/src/main.js @@ -8,13 +8,15 @@ import router from './router' import '@/assets/css/public.css' // 引用API文件 import api from './api/index.js' +import axios from 'axios' +Vue.prototype.$axios = axios; // 将API方法绑定到全局 import marked from 'marked' import scroll from 'vue-scroll' -Vue.prototype.$ajax = api -Vue.config.productionTip = false +Vue.prototype.$ajax = api; +Vue.config.productionTip = false; Vue.use(ElementUI); -Vue.use(scroll) +Vue.use(scroll); /* eslint-disable no-new */ new Vue({ el: '#app', diff --git a/HSLink-front/src/router/index.js b/HSLink-front/src/router/index.js index 2452215..ee57cf9 100644 --- a/HSLink-front/src/router/index.js +++ b/HSLink-front/src/router/index.js @@ -9,7 +9,34 @@ export default new Router({ path: '/', name: 'login', component:() => import('@/components/Login') - }, + }, + { + path: '/upload', + name: 'upload', + component:() => import('@/view/upload') + }, + { + path: '/admin', + name: 'admin', + component:() => import('@/view/admin/Admin'), + children: [ + { + path: '/articlereview', + name: 'articlereview', + component:() => import('@/view/admin/articleReview/ArticleReview') + }, + { + path: '/personnelmanagement', + name: 'personnelmanagement', + component:() => import('@/view/admin/personnelManagement/PersonnelManagement') + }, + { + path: '/homepagemanagement', + name: 'homepagemanagement', + component:() => import('@/view/admin/homepageManagement/HomepageManagement') + } + ] + }, { path:'/index', name:'index', diff --git a/HSLink-front/src/util/dom.js b/HSLink-front/src/util/dom.js new file mode 100644 index 0000000..36d76d2 --- /dev/null +++ b/HSLink-front/src/util/dom.js @@ -0,0 +1,148 @@ +export const on = ({el, type, fn}) => { + if (typeof window) { + if (window.addEventListener) { + el.addEventListener(type, fn, false) + } else { + el.attachEvent(`on${type}`, fn) + } + } +} +export const off = ({el, type, fn}) => { + if (typeof window) { + if (window.addEventListener) { + el.removeEventListener(type, fn) + } else { + el.detachEvent(`on${type}`, fn) + } + } +} +export const once = ({el, type, fn}) => { + const hyFn = (event) => { + try { + fn(event) + } + finally { + off({el, type, fn: hyFn}) + } + } + on({el, type, fn: hyFn}) +} +// 最后一个 +export const fbTwice = ({fn, time = 300}) => { + let [cTime, k] = [null, null] + // 获取当前时间 + const getTime = () => new Date().getTime() + // 混合函数 + const hyFn = () => { + const ags = argments + return () => { + clearTimeout(k) + k = cTime = null + fn(...ags) + } + } + return () => { + if (cTime == null) { + k = setTimeout(hyFn(...arguments), time) + cTime = getTime() + } else { + if ( getTime() - cTime < 0) { + // 清除之前的函数堆 ---- 重新记录 + clearTimeout(k) + k = null + cTime = getTime() + k = setTimeout(hyFn(...arguments), time) + } + }} +} +export const contains = function(parentNode, childNode) { + if (parentNode.contains) { + return parentNode != childNode && parentNode.contains(childNode) + } else { + return !!(parentNode.compareDocumentPosition(childNode) & 16) + } +} +export const addClass = function (el, className) { + if (typeof el !== "object") { + console.log('el is not elem') + return null + } + let classList = el['className'] + classList = classList === '' ? [] : classList.split(/\s+/) + if (classList.indexOf(className) === -1) { + classList.push(className) + el.className = classList.join(' ') + } else { + console.warn('warn className current') + } +} +export const removeClass = function (el, className) { + let classList = el['className'] + classList = classList === '' ? [] : classList.split(/\s+/) + classList = classList.filter(item => { + return item !== className + }) + el.className = classList.join(' ') +} +export const delay = ({fn, time}) => { + let oT = null + let k = null + return () => { + // 当前时间 + let cT = new Date().getTime() + const fixFn = () => { + k = oT = null + fn() + } + if (k === null) { + oT = cT + k = setTimeout(fixFn, time) + return + } + if (cT - oT < time) { + oT = cT + clearTimeout(k) + k = setTimeout(fixFn, time) + } + + } +} +export const Event = function () { + // 类型 + this.typeList = {} +} +Event.prototype.on = function ({type, fn}){ + if (this.typeList.hasOwnProperty(type)) { + this.typeList[type].push(fn) + } else { + this.typeList[type] = [] + this.typeList[type].push(fn) + } +} +Event.prototype.off = function({type, fn}) { + if (this.typeList.hasOwnProperty(type)) { + let list = this.typeList[type] + let index = list.indexOf(fn) + if (index !== -1 ) { + list.splice(index, 1) + } + + } else { + console.warn('not has this type') + } +} +Event.prototype.once = function ({type, fn}) { + const fixFn = () => { + fn() + this.off({type, fn: fixFn}) + } + this.on({type, fn: fixFn}) +} +Event.prototype.trigger = function (type){ + if (this.typeList.hasOwnProperty(type)) { + this.typeList[type].forEach(fn => { + fn() + }) + } +} + diff --git a/HSLink-front/src/view/admin/Admin.vue b/HSLink-front/src/view/admin/Admin.vue new file mode 100644 index 0000000..662878d --- /dev/null +++ b/HSLink-front/src/view/admin/Admin.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/HSLink-front/src/view/admin/articleReview/ArticleReview.vue b/HSLink-front/src/view/admin/articleReview/ArticleReview.vue new file mode 100644 index 0000000..f4b6d65 --- /dev/null +++ b/HSLink-front/src/view/admin/articleReview/ArticleReview.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/HSLink-front/src/view/admin/homepageManagement/HomepageManagement.vue b/HSLink-front/src/view/admin/homepageManagement/HomepageManagement.vue new file mode 100644 index 0000000..c104b77 --- /dev/null +++ b/HSLink-front/src/view/admin/homepageManagement/HomepageManagement.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/HSLink-front/src/view/admin/personnelManagement/PersonnelManagement.vue b/HSLink-front/src/view/admin/personnelManagement/PersonnelManagement.vue new file mode 100644 index 0000000..b87e46a --- /dev/null +++ b/HSLink-front/src/view/admin/personnelManagement/PersonnelManagement.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/HSLink-front/src/view/upload.vue b/HSLink-front/src/view/upload.vue new file mode 100644 index 0000000..ae06caa --- /dev/null +++ b/HSLink-front/src/view/upload.vue @@ -0,0 +1,83 @@ + + + +