Compare commits

...

23 Commits

Author SHA1 Message Date
Sky_ID 2aa3ba9dd5 升级登陆页面样式 2024-08-10 13:19:58 +08:00
p71924506 ed68db3b42 Merge branch 'master' of https://osredm.com/p71924506/file_sharing_ms_fe 2024-08-08 08:51:11 +08:00
p71924506 5a3a661034 update 2024-08-08 08:43:17 +08:00
unknown 51f7799d3b update 2023-11-09 08:50:52 +08:00
unknown e04c5a6440 更新了专家库UI 新增待导出列表 优化了多选逻辑 2023-09-21 09:38:43 +08:00
unknown 3ab246e20e tongbu 2023-09-20 15:07:34 +08:00
unknown fd0bab1801 修改细节 2023-09-18 18:15:58 +08:00
unknown 614405bb6f 更新readme 2023-09-18 14:46:12 +08:00
p71924506 0a0bf30deb 更新导入导出功能 2023-09-15 17:48:20 +08:00
p71924506 946a229f8c 添加模板导入 2023-09-15 13:53:30 +08:00
p71924506 f216fd8bdd update 2023-08-11 09:27:56 +08:00
p71924506 d0abd44fe9 uodate 2023-05-05 15:33:39 +08:00
p71924506 28f1cfc226 增加部门文件控制以及在线浏览功能 2023-05-05 15:31:59 +08:00
p71924506 74c55a05d9 完成文件管理3.0系统 文件上传功能 还差属性及删除功能 还有权限分配 2023-04-20 18:05:17 +08:00
p71924506 b9323bc1ad 完成了文件管理3.0的文件夹ls及mkdir操作 2023-04-19 18:54:52 +08:00
p71924506 401d5ef394 完成文件管理3.0的页面设计 2023-04-13 18:56:55 +08:00
p71924506 9b77466bfe 增加会议系统初步设计页面 2023-03-23 18:11:42 +08:00
p71924506 28f9b06b3d update 2023-03-15 15:51:55 +08:00
p71924506 813bc0d2e4 增加专家库页面,初步设计会议系统 专家库系统 2023-03-13 18:32:47 +08:00
p71924506 6dfbfb127b 进行了一些美化 add osd part 2023-02-28 15:08:11 +08:00
p71924506 43fc4de386 更新内容:1.增加上传时间的语义化,显示方式有datetime格式改为YYYY年MM月DD日 2.完善平台信息记录板,将记录信息迁移至数据库中,通过接口获取信息,并添加临期检查时间计算 2023-01-31 17:12:55 +08:00
p71924506 956b4c4351 测试性功能:增加OnlyOfficeTest模块,部署OnlyOffice服务在8044端口,目前未设置token加密 2023-01-29 17:10:11 +08:00
p71924506 cf60266832 修复文件管理导航栏没有icon显示的bug 2023-01-28 15:50:50 +08:00
41 changed files with 3031 additions and 276 deletions

View File

@ -1,111 +0,0 @@
# vue-admin-template
> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint这些搭建后台必要的东西。
[线上地址](http://panjiachen.github.io/vue-admin-template)
[国内访问](https://panjiachen.gitee.io/vue-admin-template)
目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`
<p align="center">
<b>SPONSORED BY</b>
</p>
<p align="center">
<a href="https://finclip.com?from=vue_element" title="FinClip" target="_blank">
<img height="200px" src="https://gitee.com/panjiachen/gitee-cdn/raw/master/vue%E8%B5%9E%E5%8A%A9.png" title="FinClip">
</a>
</p>
## Extra
如果你想要根据用户角色来动态生成侧边栏和 router你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
## 相关项目
- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目:
- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
## Build Setup
```bash
# 克隆项目
git clone https://github.com/PanJiaChen/vue-admin-template.git
# 进入项目目录
cd vue-admin-template
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org
# 启动服务
npm run dev
```
浏览器访问 [http://localhost:9528](http://localhost:9528)
## 发布
```bash
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
```
## 其它
```bash
# 预览发布环境效果
npm run preview
# 预览发布环境效果 + 静态资源分析
npm run preview -- --report
# 代码格式检查
npm run lint
# 代码格式检查并自动修复
npm run lint -- --fix
```
更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
## 购买贴纸
你也可以通过 购买[官方授权的贴纸](https://smallsticker.com/product/vue-element-admin) 的方式来支持 vue-element-admin - 每售出一张贴纸,我们将获得 2 元的捐赠。
## Demo
![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
## Browsers support
Modern browsers and Internet Explorer 10+.
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
## License
[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
Copyright (c) 2017-present PanJiaChen

View File

@ -4,6 +4,7 @@
> 针对于日常办公时需要对相关文件进行共享、记录、查询、学习而开发的文件管理系统整体服务采用VUE+SPRINGBOOT技术框架开发。此为前端仓库后端仓库暂不开源
> The file management system developed for daily office needs to share, record, query and learn related files, and the overall service is developed using VUE+SPRINGBOOT technology framework. This is the front-end warehouse, the back-end warehouse is not open source
## Build Setup
@ -22,7 +23,7 @@ npm install
npm run dev
```
This will automatically open http://localhost:9528
This will automatically open http://localhost:8043
## Build
@ -50,35 +51,13 @@ npm run lint
npm run lint -- --fix
```
Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
## Demo
待更新
## Extra
## Related Project
- [vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
- [electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
- [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
- [awesome-project](https://github.com/PanJiaChen/vue-element-admin/issues/2312)
## Browsers support
Modern browsers and Internet Explorer 10+.
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
Testing and development was performed under chromium kernel versions 177.0.2045.31 and 116.0.5845.189
## License
[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
Copyright (c) 2022 WeiHao
Copyright (c) 2022-2023 OSREDM WeiHao

BIN
dist (2).zip Normal file

Binary file not shown.

BIN
dist.zip

Binary file not shown.

50
osredm Normal file
View File

@ -0,0 +1,50 @@
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABDkckoFIz
FqM7Ru1H4iQvfKAAAAEAAAAAEAAAIXAAAAB3NzaC1yc2EAAAADAQABAAACAQDDIEnb1XKI
xd7mmMka+YhYX87U5BIXTpOY4+u0idEJMagP1IpD5etfsAjU+oWKSag+oaQ4ACJBeqqJLE
7gHmMlW6s71XLr8h9Z076CbEYtUF1/UICbI+mRVpadme8UhNHuiHn8BvKKx1nCls3XamMP
g5Vk58Axjj6vJDUyJ6DeM9MuKxbe3yrKxKNEeqksAQjlp4qPHybRrGj4yt0M9S8X3UPLNV
vaHbLZEV3nYs9Wib7VVQS4TH9isFe2x23cRqsbguXGrWW449WacBcIHD5/gMPbPOVCSjXa
6Jo6sb/oA9J10joBZRgBxezASbuZndkH3+kfvCeBVdLntdLMvJTHm1UOEgnsuM8xnJLHbC
NXro7zBwffSWAl5P96HfWSr1yNIfKk0J6IvqbxFZzfLLucg9V9lQAbFkEeMTqnxOHzApUG
uw0JraDEBmbiI5QjqSxKf9/plExq+xU4w5HC288zeLdnBpFySaSY1fzdPZRSy0+93YJeOD
27AIDJjrtjh6nKDlEatSjP05GKPfCnDahwwB/OyfPgVJN5tyHD/yso6uRnt4Ch6S3cJImk
TN0Txl/3MkoZ2LW4RsFv36Mvf/47AYMtYIi2uHRA+il/T1XKtvL9m8BgX3nzFaxcnw9hmJ
Xk5y5WGXeH6EKe/EUVeTQigdSV89YqCuAETW/vxwcBwwAAB0CB/EsWkut0D7zVXLDZOxcQ
81yBNJdk/oNcLGfbX6eb/I3QAnkAgMaV82MfdBR2Y9ny+xoLFatNr+9ofEHv0ECeDhsxrq
/BlnAoIgVmfJlYUFPurl06JcpnJhU17064GxDta49ALmZ/TjpLp9vIpRu0m2G0SY0FiA6u
cgYi8Hj/sjLa3coLR4LCZdwTv08M6JrWGhW5whyT5jKGS8tIgxQOKbDwci6V66FyAgYn5D
11vjXKI9n9sqTCTY6yVr5DMI5KcxU5MI1Qoui1b3q4paYlqtTfl2rfLoDSv8nNwR8L5b39
K6sYCRzajROS2mQm5iTZQnuhEUTDvLLZaVlXBLLKggG7JkPPsqKB2uQ18mY4wfDe8F3hGx
KEMJQLsbjRS0uBI789LOaUmV+IbycjAZ00R+6mbQUO6WHnxwL9tyJsSK4nZ+y5AerefE42
3duvWjSUva2RGP2tHdWlcfxDoWkoO49mPQvUkrvjZRpn2E5LFRELZaYSoFBXgkuFAz252H
wlPfhsEHfg0HHvkPd+6jRAxjKCgb6SQqFm1+tXgDUsielMQ3yh/OD34r0d6UeRYx4PIJBu
+FPDDL7T3bdUzAhKQ2iEGMVACWRpNefalYwVyM8GyQT2Ve+ykskqDcLmz2mYX6G8QvN0va
cKUlxnNWAMdiH21mJSEKs1Nh1TLE057lVNkWvpPUtQS/fzMJ5++Kfj0zm5TMpLEgqo2sob
uoJnC5q9tZzv8H3SVU4MK9F/iITnoTtTzvGCoMMwZEPImWVzMHWJgx8867/AUWbg7CnCHE
BP2LDSJeJosHjQQf54gjUYYYd11PT/5jY4qW2AvdW3YTT8sgDtD7Kios9THoyrrHKdg2Lk
NvMxgFIWgXlkOy432oPjtWq1G7unT484AhTh7n4FmN8UA1THOqlWMIGjBGhX/twrUFvQn9
zCAx+12gObN+zk2YJDSLxlEGf/4t/PF/eUZNsp61Dgy6ENo8v4cN2vzqq+CnzM09MO0pD2
IO77qrwN7avOIxAbf/HJQCljpgfW+TIcALNz0F8YxKuyv5fWnaFA++VQ3gSOgJnZdOw2PW
SudG7TGD2KvxBotcPPmi8VKrVaZ4f4DU0awPxG1LcxZOZZU/udVuALeMqV4LBwgsKB88f8
J/lDwZnB4SDHoJHVdXXpHK9thBIR5f2EttKbbrYLe2yEc1FAoeMasAc1bW/G57XEPavhEU
BtAqcFfkcegfew0XCt/ZmSdTxJk7onql9PDYtdbOf8I90dq6PNABotevEe9L24fKh1kYir
gyAlDKsk1Ls9tIJ28xPrOt1KM+iQ0UxogOvKqknupAzsixqTJ97y3eEgyUEJqOuE+GSGl7
rUHpW4By97KOLfyoVG6ABAA9e6nI+AxaEG/B1Hf1C9Hnvnk3REXDDbuCdS+GuyteG7k337
JjCE6BzKrvjjvN0EFNdgZUl4azzY0jk7pnpERmrr71DJMG/F9o2lc4dMBJ/V8FZoakJDWQ
zCxxFYN8bkvDLKlkrGraEBoVeJq++44G16M1XvHl/3WJ6UE+ZsM+5m+dlljy2MLB6lXXV3
lumezmnaQL5kYYJkOzzNQiiCXnuqc41/siS7Lz2ThbOx/EqCs+qKDvtwXBPmNLsWjTjuR+
0aRcgx1t1bnZUbJ93Zjey45aiFM0h0hIM0XATheTWfMUZS1zN0MitZ8kQrFut0iuW8t0UI
KWXMSkSBiizCxvYjNNTAcGGD1KnQQQxvArjMNG7l93T6VfW919NQiqOtPSBcPPaDVM3H4t
wHRrZBldXFaMsh2cn9PrHbX2QXrGx13h69JWW7YRZXBQC4zJ29BvNgUU3wdvW/bc3jUdtW
t23pVrnDPjHGZF6oG3pURLD8BKyQLMI5l1HDS2BUbVp3K9HtfIfl/7DUEhzIaXwgEUFUjY
Adh3mbS4UeW+Bre2FcWHihX5o2gMY5Y6hzqupxrvLT7PkufLuu7++GNHbM590SHffRNjzC
1eWyn8jRSNSORfYNz0afiS5UVtfkd9Prf0g6lW0b+uC8mzxXCjP775j+5WcXFW7s9ShIF8
Pk2R+lV73mWyTjRX8xeDGxNdzC/OmNbAbGhAJEWDtHRPvPvrwqhp91XbBMrlSsMgVvWt1B
LHDfihWuMdRYLiPVhJ32ngmqxf3wh9hunfN0+ULWaSPWpQ72QxorGh5WZTSLmpzEnmsVXH
ulOfvGJq0jaAFE/aYweSrWS2qB4kkCrTBJA6c/U7evPE3UUuo6tC4Qby9YNeh1zPKbxXY7
Hlt6l8xvM/l/aqnPnwpKz1ztdDhIpa8P9mmGjsRqLupsMHRXvEHDPmyi+NAVxmIO1kkPei
PDh8OSQbisKz/WXJG4RZ//1rzE/AnrsZeL5DVk2+2JlagV/IkhPGvgtJjJ/ML59FsqC9rj
M8gH8Q5L6Wk6mt65+YAraRqx7WoL4uHzpHh2tahlaoEKhBlEoKPIaZWpf7KyrTslX368b2
gNBQ==
-----END OPENSSH PRIVATE KEY-----

1
osredm.pub Normal file
View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDDIEnb1XKIxd7mmMka+YhYX87U5BIXTpOY4+u0idEJMagP1IpD5etfsAjU+oWKSag+oaQ4ACJBeqqJLE7gHmMlW6s71XLr8h9Z076CbEYtUF1/UICbI+mRVpadme8UhNHuiHn8BvKKx1nCls3XamMPg5Vk58Axjj6vJDUyJ6DeM9MuKxbe3yrKxKNEeqksAQjlp4qPHybRrGj4yt0M9S8X3UPLNVvaHbLZEV3nYs9Wib7VVQS4TH9isFe2x23cRqsbguXGrWW449WacBcIHD5/gMPbPOVCSjXa6Jo6sb/oA9J10joBZRgBxezASbuZndkH3+kfvCeBVdLntdLMvJTHm1UOEgnsuM8xnJLHbCNXro7zBwffSWAl5P96HfWSr1yNIfKk0J6IvqbxFZzfLLucg9V9lQAbFkEeMTqnxOHzApUGuw0JraDEBmbiI5QjqSxKf9/plExq+xU4w5HC288zeLdnBpFySaSY1fzdPZRSy0+93YJeOD27AIDJjrtjh6nKDlEatSjP05GKPfCnDahwwB/OyfPgVJN5tyHD/yso6uRnt4Ch6S3cJImkTN0Txl/3MkoZ2LW4RsFv36Mvf/47AYMtYIi2uHRA+il/T1XKtvL9m8BgX3nzFaxcnw9hmJXk5y5WGXeH6EKe/EUVeTQigdSV89YqCuAETW/vxwcBww== 222@qq.com

View File

@ -14,18 +14,28 @@
"test:ci": "npm run lint && npm run test:unit"
},
"dependencies": {
"@onlyoffice/document-editor-vue": "^1.1.1",
"@vue-office/docx": "^1.0.0",
"@vue-office/excel": "^1.0.0",
"@vue-office/pdf": "^1.0.0",
"@vue/composition-api": "^1.7.1",
"axios": "0.18.1",
"canvas-tablet": "^2.0.6",
"core-js": "^3.26.1",
"docx-preview": "^0.1.14",
"element-ui": "2.13.2",
"file-saver": "^2.0.5",
"js-base64": "^3.7.3",
"js-cookie": "2.2.0",
"js-md5": "^0.7.3",
"mavon-editor": "^2.10.4",
"moment": "^2.29.4",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"sweetalert": "^2.1.2",
"vue": "2.6.10",
"vue-demi": "^0.14.6",
"vue-router": "3.0.6",
"vuex": "3.1.0"
},

View File

@ -5,6 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<!-- <script type='text/javascript' src='http://114.116.228.69:8044/web-apps/apps/api/documents/api.js'></script>-->
<title><%= webpackConfig.name %></title>
</head>
<body>

1
src/assets/back.svg Normal file
View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681880316864" class="icon" viewBox="0 0 1181 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7488" xmlns:xlink="http://www.w3.org/1999/xlink" width="230.6640625" height="200"><path d="M624.492308 336.738462a46.523077 46.523077 0 0 0-67.446154 0l-227.938462 219.323076a41.107692 41.107692 0 0 0 0 59.076924 40.615385 40.615385 0 0 0 59.076923 0l160.492308-143.507693v248.861539a42.092308 42.092308 0 1 0 84.184615 0V471.630769L793.353846 615.384615c16.738462 16.984615 50.707692 16.984615 59.076923 0a41.107692 41.107692 0 0 0 0-59.076923z" fill="#040000" p-id="7489"></path><path d="M1063.384615 118.153846h-393.846153a118.646154 118.646154 0 0 1-70.892308-24.615384L504.123077 24.615385a118.646154 118.646154 0 0 0-70.892308-24.615385H118.153846A118.153846 118.153846 0 0 0 0 118.153846v787.692308a118.153846 118.153846 0 0 0 118.153846 118.153846h945.230769a118.153846 118.153846 0 0 0 118.153847-118.153846V236.307692a118.153846 118.153846 0 0 0-118.153847-118.153846z m39.384616 787.692308a39.384615 39.384615 0 0 1-39.384616 39.384615H118.153846a39.384615 39.384615 0 0 1-39.384615-39.384615v-787.692308a39.384615 39.384615 0 0 1 39.384615-39.384615h315.076923a38.892308 38.892308 0 0 1 24.615385 7.876923l93.538461 70.892308A196.923077 196.923077 0 0 0 669.538462 196.923077h393.846153a39.384615 39.384615 0 0 1 39.384616 39.384615z" fill="#040000" p-id="7490"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
src/assets/background.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356640637" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2390" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#00C090" p-id="2391"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#68DBBF" p-id="2392"></path><path d="M677.007 388.282L297.22 769.07c-13.65 13.685-13.623 35.846 0.062 49.497 13.685 13.652 35.846 13.624 49.498-0.061l379.786-380.787c13.652-13.685 13.624-35.846-0.061-49.498-13.686-13.65-35.846-13.623-49.498 0.062z" fill="#FFFFFF" p-id="2393"></path><path d="M297.22 436.718l379.787 380.787c13.652 13.685 35.812 13.713 49.498 0.061 13.685-13.651 13.713-35.812 0.061-49.497L346.78 387.282c-13.652-13.685-35.813-13.713-49.498-0.062-13.685 13.652-13.713 35.813-0.062 49.498z" fill="#FFFFFF" p-id="2394"></path></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1682212757128" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5016" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M862 902c0 16.569-13.431 30-30 30H192c-16.569 0-30-13.431-30-30V122c0-16.569 13.431-30 30-30h476l194 194v616z" fill="#7DB4FF" p-id="5017"></path><path d="M862 286H698c-16.569 0-30-13.431-30-30V92" fill="#FFFFFF" fill-opacity=".296" p-id="5018"></path><path d="M403.76 540.84c0-44.48-13.76-75.84-73.92-75.84-54.08 0-85.44 19.52-85.44 89.6s31.36 89.6 84.16 89.6c30.08 0 56-6.08 66.24-12.16v-36.48c-11.2 6.08-36.16 12.16-57.28 12.16-30.72 0-45.12-11.2-46.72-35.84l111.36-7.04c0.96-4.8 1.6-14.08 1.6-24z m-112.96-1.28c0.96-27.2 10.56-39.68 39.04-39.68 27.2 0 31.68 15.36 31.68 34.24l-70.72 5.44zM420.4 641h54.72l36.48-59.52h1.92L549.36 641h55.04l-59.2-88.64 56-84.16h-53.76l-33.6 56.32h-1.92l-33.6-56.32h-54.4l56.32 84.48zM781.04 540.84c0-44.48-13.76-75.84-73.92-75.84-54.08 0-85.44 19.52-85.44 89.6s31.36 89.6 84.16 89.6c30.08 0 56-6.08 66.24-12.16v-36.48c-11.2 6.08-36.16 12.16-57.28 12.16-30.72 0-45.12-11.2-46.72-35.84l111.36-7.04c0.96-4.8 1.6-14.08 1.6-24z m-112.96-1.28c0.96-27.2 10.56-39.68 39.04-39.68 27.2 0 31.68 15.36 31.68 34.24l-70.72 5.44z" fill="#FFFFFF" p-id="5019"></path></svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356612320" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1778" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M918.673 883H104.327C82.578 883 65 867.368 65 848.027V276.973C65 257.632 82.578 242 104.327 242h814.346C940.422 242 958 257.632 958 276.973v571.054C958 867.28 940.323 883 918.673 883z" fill="#FFE9B4" p-id="1779"></path><path d="M512 411H65V210.37C65 188.597 82.598 171 104.371 171h305.92c17.4 0 32.71 11.334 37.681 28.036L512 411z" fill="#FFB02C" p-id="1780"></path><path d="M918.673 883H104.327C82.578 883 65 865.42 65 843.668V335.332C65 313.58 82.578 296 104.327 296h814.346C940.422 296 958 313.58 958 335.332v508.336C958 865.32 940.323 883 918.673 883z" fill="#FFCA28" p-id="1781"></path></svg>

After

Width:  |  Height:  |  Size: 930 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356646324" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2691" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#FF4867" p-id="2692"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#FF97A9" p-id="2693"></path><path d="M691.919 812c-44.4 0-84.22-76.189-105.17-125.732-35.243-14.71-74.092-28.45-111.831-37.331-33.022 21.788-89.214 54.4-132.365 54.4-26.778 0-46.064-13.461-53.14-36.914-5.411-19.29-0.832-32.613 4.995-39.83 11.377-15.543 34.825-23.453 69.929-23.453 28.443 0 64.517 4.996 104.754 14.71 25.945-18.457 52.307-39.829 75.756-62.45-10.406-49.404-21.784-129.479 7.076-166.393 14.29-17.625 36.074-23.454 62.436-15.543 28.86 8.326 39.82 25.951 43.15 39.829 12.21 48.155-43.15 113.103-80.473 151.267 8.325 33.029 19.286 67.862 32.606 99.78 53.556 23.87 117.24 59.536 124.456 98.394 2.913 13.461-1.249 25.951-12.21 36.915-9.435 7.771-19.425 12.351-29.97 12.351zM652 728c9.768 21.74 19.081 32 23.99 32 0.76 0 1.823-0.333 3.341-1.664 1.822-1.996 1.822-3.327 1.518-4.547-1.012-5.713-9.262-15.085-28.849-25.789z m-281.922-88c-15.62 0-19.913 3.774-21.22 5.535-0.373 0.566-1.493 2.264-0.373 6.666 0.933 3.774 3.547 7.799 11.636 7.799 10.143 0 24.829-5.723 41.879-15.975-12.196-2.704-22.962-4.025-31.922-4.025zM523 620.582c9.333 2.6 19.01 5.951 28 9.418-3.264-8.551-5.898-17.449-8.13-26A629.121 629.121 0 0 1 523 620.582zM588.966 433c-3.32 0-5.649 1.229-7.745 3.511-6.173 7.783-6.872 27.386-2.097 52.489 18.111-19.427 27.953-37.275 25.507-46.813-0.35-1.404-1.398-5.676-9.842-8.134-2.33-0.702-4.076-1.053-5.823-1.053z" fill="#FFFFFF" p-id="2694"></path></svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356643005" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2541" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#FF7861" p-id="2542"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#FFB0A4" p-id="2543"></path><path d="M670.098 478.093C677.884 486.056 682 497.51 682 514.5c0 16.989-4.116 28.444-11.902 36.407-8.313 8.504-22.397 14.822-43.202 18.093H318c-19.33 0-35 15.67-35 35v157c0 19.33 15.67 35 35 35s35-15.67 35-35V639h276.5a35 35 0 0 0 4.95-0.352C709.214 627.968 752 584.203 752 514.5s-42.786-113.468-117.55-124.148a35 35 0 0 0-4.95-0.352H318c-19.33 0-35 15.67-35 35s15.67 35 35 35h308.896c20.805 3.271 34.889 9.589 43.202 18.093z" fill="#FFFFFF" p-id="2544"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356629613" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2084" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#CCCCCC" p-id="2085"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#EAEAEA" p-id="2086"></path><path d="M512 364.5c34.139 0 68.5 11.192 94.771 31.69 30.137 23.513 47.729 57.54 47.729 97.31 0 51.725-35.564 99.023-102.662 143.99l-0.338 0.225V696c0 17.77-14.261 32.209-31.963 32.496l-0.537 0.004c-17.95 0-32.5-14.55-32.5-32.5v-76a32.5 32.5 0 0 1 15.347-27.605c60.106-37.347 87.653-71.18 87.653-98.895 0-19.168-7.95-34.545-22.714-46.064C552.248 436.093 532.007 429.5 512 429.5c-19.92 0-39.856 6.54-54.137 17.819-14.519 11.465-22.363 26.87-22.363 46.181 0 17.95-14.55 32.5-32.5 32.5s-32.5-14.55-32.5-32.5c0-39.693 17.307-73.683 47.08-97.194C443.657 375.714 477.833 364.5 512 364.5z m8.5 477.5c20.71 0 37.5-16.79 37.5-37.5S541.21 767 520.5 767 483 783.79 483 804.5s16.79 37.5 37.5 37.5z" fill="#FFFFFF" p-id="2087"></path></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356637453" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2240" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#4A8DFF" p-id="2241"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#E5F0FF" p-id="2242"></path><path d="M693.153 784.6C714.698 808.196 754 792.953 754 761V389h-70v281.758L544.847 518.35c-13.879-15.201-37.815-15.201-51.694 0L354 670.758V389h-70v372c0 31.954 39.302 47.197 60.847 23.6L519 593.857 693.153 784.6z" fill="#FFFFFF" p-id="2243"></path></svg>

After

Width:  |  Height:  |  Size: 835 B

View File

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1681356625053" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1928" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M179 64h468.5l223 225.5V935c0 13.807-11.193 25-25 25H179c-13.807 0-25-11.193-25-25V89c0-13.807 11.193-25 25-25z" fill="#576A95" p-id="1929"></path><path d="M647.5 64v200.5c0 13.807 11.193 25 25 25h198L647.5 64z" fill="#BBC3D4" p-id="1930"></path><path d="M573.2 614.597v121.678a30.391 30.391 0 0 1-8.932 21.509 30.508 30.508 0 0 1-21.549 8.91h-62.238a30.52 30.52 0 0 1-21.549-8.905A30.392 30.392 0 0 1 450 736.27V614.597h123.2z m-30.48 69.71h-62.24v61.096h62.24v-61.096z m29.46-191.386v61.096h-61.213V492.92h61.214zM511.73 64v61.6H573.2v61.6h-61.478v57.036H573.2v61.6h-61.471v60.844H573.2v60.844h-61.471v60.839H450v-60.844h61.471v-60.844H450v-60.839h61.471v-61.6H450v-61.6h61.471V125.6H450V64h61.729z" fill="#FFFFFF" p-id="1931"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
src/assets/logo.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 151.43 115.36"><defs><style>.cls-1{fill:#ed4b00;}.cls-2,.cls-3{fill:none;stroke-miterlimit:10;}.cls-2{stroke:#ed4b00;stroke-linecap:round;stroke-width:0.39px;}.cls-3{stroke:#bf3e00;stroke-width:0.1px;}.cls-4{fill:#ffdb00;}.cls-5{fill:#ffa900;}</style></defs><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M145.07,107.21a48.59,48.59,0,0,0,5.83,7.47c-45.71-3.32-57.34-3.57-60.23-3.51,3.28-.66-1.22-6.72,1.06-10.56,4.21-7.08,6.82-14.88,10.11-22.38,3-7,6.8-13.83,12.49-19a16.69,16.69,0,0,1,6.33,2.7,20.07,20.07,0,0,1,2.26,1.83c3.78,3.63,6,8.4,8.15,13.07C135.74,86.93,138.74,97.17,145.07,107.21Z"/><path class="cls-1" d="M108.27,59.45a12.33,12.33,0,0,1,6.06-.25c-5.69,5.2-9.45,12.08-12.49,19-3.29,7.5-5.9,15.3-10.11,22.38-2.28,3.84,2.22,9.9-1.06,10.56a5.24,5.24,0,0,0-.94,0c-8-.43-13.24-.17-21.43-.51-8.48-.35-37.1.85-46.63,1.27h0c3.43-.3,2.53-2.54,3.88-4.8,2.28-3.85,3.7-8.09,5.49-12.18s4.12-8.16,7.65-11.06l.07-.21h0c.91.31,5.28,2.14,8.39,9.56,3.45,8.22,9.78,17.7,35-6.35a.6.6,0,0,0,.08-.08c6-6.22,11.22-13.26,16.66-20C101.51,63.83,104.35,60.67,108.27,59.45Z"/><path class="cls-1" d="M90.67,111.17a4,4,0,0,1-.94,0A5.24,5.24,0,0,1,90.67,111.17Z"/><path class="cls-1" d="M38.8,83.73l-.07.21c-3.53,2.9-5.86,7-7.65,11.06s-3.21,8.33-5.49,12.18c-1.35,2.26-.45,4.5-3.88,4.8h-.09c-2.05.19-3.8.33-9.22.94-4,.45-12.34,2.25-12.34,2.25,6.31-3.09,8.84-7.55,12.7-11.45,2.94-3,7.7-9.85,11.85-14.53.45-.5.9-1,1.36-1.49,2.1-2.23,4.59-4.43,7.72-4.86a8.91,8.91,0,0,1,5.15.9Z"/><path class="cls-2" d="M.19,115.17c.18-.06,39.71-13.58,151.05-.17"/><path class="cls-3" d="M151.31,114.94a.76.76,0,0,0-.18-.09l-.12-.07-.07,0-.08-.06-.12-.08"/><path class="cls-4" d="M91.86,66h0c-3.6,5-7.23,9.94-11.26,14.49l-.07.08c-23.79,24.79-29.8,15.08-33.09,6.65-3-7.6-7.11-9.47-8-9.79a7.87,7.87,0,0,0-4.87-.9c-2.95.45-5.3,2.72-7.28,5-.43.51-.86,1-1.28,1.54A52.53,52.53,0,0,1,15.73,51.7,51.44,51.44,0,0,1,66.9.21V.28C55.4,2.38,49.8,15.52,49.18,24.21,48.34,36,57.86,51.07,72.61,52.29,80.91,53.84,87.91,56.24,91.86,66Z"/><path class="cls-5" d="M78.67,0h0c26,3.16,45.57,26.41,44.45,53.68,0,.56,0,1.86-.05,3.08,0,.56,0,1.12,0,1.56h0a19.74,19.74,0,0,0-7.35-4.16,14,14,0,0,0-4.25-.45c-3.9.16-10,4.48-13.1,8.14-.66.79-1.3,1.52-1.9,2.19A24.74,24.74,0,0,0,76,50.73h0C62.6,49.79,52.31,38.07,52.88,24.24A25,25,0,0,1,78.67,0Z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -100,6 +100,7 @@ export default {
this.userAvatar = res.data.userDetails.profilePhoto;
this.userName = res.data.user.name;
this.isLogin = true;
localStorage.setItem("dep",res.data.user.dep)
}else {
Message.warning("登录失败,请重新登录");
this.toLogin()

View File

@ -16,19 +16,26 @@
<sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" />
<!-- <i class="el-icon-document"/>-->
<!-- <el-submenu index="4" >-->
<!-- <template slot="title">-->
<!-- <i class="el-icon-document sub-el-icon"></i>-->
<!-- <span>文件管理2.0</span>-->
<!-- </template>-->
<!--&lt;!&ndash; <item title="文件管理2.0"/>&ndash;&gt;-->
<!-- <el-menu-item-group>-->
<el-submenu index="4">
<item title="文件管理2.0" />
<el-menu-item-group>
<!-- <el-menu-item v-for="item in filesTypeList" :index="item.filesTypeId">-->
<!-- <item icon="el-icon-folder-opened" :title="item.name" />-->
<!-- </el-menu-item>-->
<el-menu-item v-for="item in filesTypeList" :index="item.filesTypeId">
<item icon="el-icon-folder-opened" :title="item.name" />
</el-menu-item>
</el-menu-item-group>
</el-submenu>
<el-menu-item index="/platformData" >
<item icon="el-icon-data-analysis" title="平台信息记录板"/>
<!-- </el-menu-item-group>-->
<!-- </el-submenu>-->
<!-- <el-menu-item index="/platformData" >-->
<!-- <item icon="el-icon-data-analysis" title="平台信息记录板"/>-->
<!-- </el-menu-item>-->
<el-menu-item index="/OSD" >
<item icon="el-icon-s-comment" title="开源资料分享"/>
</el-menu-item>
<el-menu-item index="/userManage" v-if="isRoot">
<item icon="el-icon-setting" title="用户管理"/>
@ -87,11 +94,11 @@ export default {
//
handleSelect(key, keyPath) {
if (key!=="/userManage" && key!=="/fileList" && key !== "/platformData"){
if (key!=="/userManage" && key!=="/fileList" && key !== "/OSD" && key !== "/expert/form" && key !== "/expert/add" && key !== "/meetingSys/Add" && key !== "/meetingSys/List"){
console.log(key)
pageUtils.openPage(this.$router,"/fileListV2/"+ key)
}else if (key =="/userManage" || key == "/platformData"){
}else if (key =="/userManage" || key=="/OSD"){
pageUtils.openPage(this.$router,key)
}
@ -118,3 +125,16 @@ export default {
}
}
</script>
<style scoped>
.sub-el-icon {
color: currentColor;
width: 1em;
height: 1em;
}
/*侧边栏圆角 阴影*/
.sidebar-container{
border-radius: 0px 15px 15px 0px;
box-shadow: 5px 0px 15px 0px rgba(0, 0, 0, 0.27);
}
</style>

View File

@ -18,6 +18,9 @@ import api from './utils/http/index'
import '@/icons' // icon
// 时间
import moment from "moment"
//swal
import swal from 'sweetalert'
//关闭自带vuex权限管理
// import '@/permission' // permission control
@ -37,6 +40,7 @@ if (process.env.NODE_ENV === 'production') {
Vue.prototype.$md5 = md5;
Vue.use(api)
Vue.prototype.$axios = Axios
// set ElementUI lang to EN
// Vue.use(ElementUI, { locale })
// 如果想要中文版 element-ui按如下方式声明

View File

@ -47,7 +47,7 @@ export const constantRoutes = [
{
path: '/',
component: Layout,
redirect: '/fileListV2/1',
redirect: '/fileListV3',
hidden: true,
children: [
{
@ -74,6 +74,7 @@ export const constantRoutes = [
]
},
{
path:'/',
component: Layout,
@ -87,16 +88,128 @@ export const constantRoutes = [
}
]
},
{
path:'/',
component: Layout,
hidden: true,
children: [
{
path: "OSD",
name: 'OSD',
component:() => import("@/views/openSourceDiscuss/OSD"),
meta: {title: '开源资料分享',icon: 'el-icon-s-comment'}
}
]
},
{
path:'/',
component: Layout,
hidden: true,
children: [
{
path: "OnlyOfficeTest",
name: 'OnlyOfficeTest',
component:() => import("@/views/onlyOfficeTest/OnlyOfficeTest"),
meta: {title: 'OnlyOfficeTest',icon: 'el-icon-setting'}
}
]
},
{
path:'/',
component: Layout,
children: [
{
path: "FileListV3",
name: 'FileListV3',
component:() => import("@/views/fileList/FileListV3"),
meta: {title: '文件列表3.0',icon: 'el-icon-folder-opened'}
}
]
},
{
path:'/',
component: Layout,
children: [
{
path: "GetFile",
name: 'GetFile',
component:() => import("@/views/fileList/GetFile"),
meta: {title: '文件提取',icon: 'el-icon-folder-opened'}
}
]
},
{
path:'/expert',
redirect: '/expert/form',
component: Layout,
meta: {title: '专家库',icon: 'el-icon-s-data'},
children: [
{
path: "add",
name: 'AddExpert',
component:() => import("@/views/expertSystem/AddExpert"),
meta: {title: '添加专家',icon: 'el-icon-s-data'},
},
{
path: "form",
name: 'expertForm',
component:() => import("@/views/expertSystem/expertForm"),
meta: {title: '专家库列表',icon: 'el-icon-s-data'},
},
]
},
{
path:'/meetingSys',
redirect: '/meeting/Add',
component: Layout,
meta: {title: '会议系统',icon: 'el-icon-s-data'},
children: [
{
path: "Add",
name: 'AddMeeting',
component:() => import("@/views/meetingSys/AddMeeting"),
meta: {title: '添加会议',icon: 'el-icon-s-data'},
},
{
path: "List",
name: 'MeetingList',
component:() => import("@/views/meetingSys/MeetingList"),
meta: {title: '会议列表',icon: 'el-icon-s-data'},
},
]
},
{
path:'/',
component: Layout,
children: [
{
path: "UserCenter",
name: 'UserCenter',
component:() => import("@/views/userCenter/UserCenter"),
meta: {title: '用户中心',icon: 'el-icon-user'}
}
]
},
{
path:'/',
component: Layout,
// hidden: true,
meta: {title: '采购相关',icon: 'el-icon-setting'},
children: [
{
path: "platformData",
name: 'PlatformData',
component:() => import("@/views/platformData/PlatformData"),
meta: {title: '平台信息记录板',icon: 'el-icon-setting'}
},{
path: "PurchasingManage",
name: 'PurchasingManage',
component:() => import("@/views/platformData/PurchasingManage"),
meta: {title: '采购管理',icon: 'el-icon-setting'}
}
]
},

View File

@ -62,4 +62,11 @@ div:focus {
// main-container global css
.app-container {
padding: 20px;
height: 100vh;
}
.app-table-container{
padding: 20px;
height: 100%;
}

View File

@ -150,6 +150,147 @@ export const updatePassword = data =>{
})
}
export const getAllPlatformData = () =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/plat/getAllPlatformData',
method: 'post'
})
}
export const getAllExpertInfo = () =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/expert/getAllExpertInfo',
method: 'post'
})
}
export const getExpertInfoByName = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/expert/getExpertInfoByName',
method: 'post',
data
})
}
export const getAllRankInfo = () =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/rank/getAllRankInfo',
method: 'post'
})
}
export const insertRankInfo = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/rank/insertRankInfo',
method: 'post',
data
})
}
export const insertExpertInfo = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/expert/insertExpertInfo',
method: 'post',
data
})
}
export const getFilesDirMeta = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/file/getFilesDirMeta',
method: 'post',
data
})
}
export const mkdir = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/file/mkdir',
method: 'post',
data
})
}
export const shareByCode = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/file/shareByCode',
method: 'post',
data
})
}
export const getByCode = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/file/getByCode',
method: 'post',
data
})
}
export const getAllMessage = () =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/message/getAll',
method: 'post',
})
}
export const insertMessage = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/message/insert',
method: 'post',
data
})
}
export const exportExpertInfoToExcel = data =>{
return axios({
headers:{
"Authorization": localStorage.getItem("systemToken")
},
url: '/expert/exportExpertInfoToExcel',
method: 'post',
data
})
}
// 默认全部倒出
// 根据需要进行
export default {
@ -166,5 +307,18 @@ export default {
getFilesInfoByName,
getAllUser,
getFileTypeById,
updatePassword
updatePassword,
getAllPlatformData,
getAllExpertInfo,
getExpertInfoByName,
getAllRankInfo,
insertRankInfo,
insertExpertInfo,
getFilesDirMeta,
mkdir,
shareByCode,
getByCode,
getAllMessage,
insertMessage,
exportExpertInfoToExcel
}

View File

@ -0,0 +1,157 @@
<template>
<div class="app-container">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>添加专家</span>
</div>
<el-col :span="24">
<el-form label-position="left" ref="form" :model="form" label-width="80px" >
<el-row>
<el-col :span="12">
<el-form-item label="专家姓名:" >
<el-input v-model="form.expertName" style="width: 300px"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="专家职称:" >
<el-select ref="optionRef" v-model="form.expertRankId" placeholder="请选择职称" style="width: 300px">
<el-option v-for="item in rankList"
:key="item.rankId"
:label="item.rankName"
:value="String(item.rankId)"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="专家单位:" >
<el-input v-model="form.expertUnit" style="width: 300px"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="银行卡号:" >
<el-input v-model="form.expertCardNum" style="width: 300px"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="开户行:" >
<el-input v-model="form.expertBankName" style="width: 300px"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证:" >
<el-input v-model="form.expertIdCard" style="width: 300px"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="开支标准">
<el-input v-model="form.expertStandard" placeholder="开支标注说明高级职称2400中级职称1600"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">立即添加</el-button>
<el-button>取消</el-button>
</el-form-item>
</el-form>
</el-col>
</el-card>
</div>
</template>
<script>
import { Message } from 'element-ui'
import { insertExpertInfo } from '@/utils/http/interface'
export default {
name: 'AddExpert',
data(){
return{
form: {
expertId:'',
expertName:'',
expertRankId:'',
expertRankName:'',
expertUnit:'',
expertCardNum:'',
expertBankName:'',
expertIdCard:'',
expertStandard:'',
},
//
rankList:null
}
},
methods: {
insertRankInfo(){
},
getAllRankInfo(){
this.$api.getAllRankInfo().then((res)=>{
if (res.status === 0) {
this.rankList = res.data
}else {
Message.warning("服务错误")
}
})
},
onSubmit() {
console.log(this.form);
console.log(this.$refs.optionRef.selected.label)
this.form.expertRankName = this.$refs.optionRef.selected.label
this.$api.insertExpertInfo(this.form).then((res)=>{
if (res.status === 0) {
Message.success("添加成功")
//
}else {
Message.warning("服务错误")
}
})
}
},
mounted() {
this.getAllRankInfo()
}
}
</script>
<style scoped>
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.box-card {
margin-bottom: 30px;
border-radius: 10px;
}
</style>

View File

@ -0,0 +1,341 @@
<template>
<div class="app-table-container">
<!--搜索框-->
<div class="manageList-header-input">
<!-- 输入框 双向绑定数据 自带清空 -->
<el-input v-model="searchInfo.keyWords" suffix-icon="el-icon-edit" clearable placeholder="请输入专家姓名">
<el-button slot="append" icon="el-icon-search" @click="nameSearch"></el-button>
</el-input>
<el-button type="primary" @click="dialogVisible = true" style="margin-left: 10px" plain>一键导入专家信息</el-button>
<el-button type="primary" style="margin-left: 10px" @click="exportFile" plain>生成专家咨询费发放表</el-button>
<el-button type="danger" @click="clearList" plain>清除导出列表</el-button>
</div>
<div style="display: flex; justify-content: space-between; width: 100%;">
<div style="width: 49%;">
<h2>专家列表</h2>
<el-table
:data="tableData"
@selection-change="handleSelectionChange"
ref="table"
:row-class-name="rowClassName"
stripe
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="expertId"
label="ID"
width="100">
</el-table-column>
<el-table-column
prop="expertName"
label="专家姓名"
width="100">
</el-table-column>
<el-table-column
prop="expertRankName"
label="专家职称"
width="130">
</el-table-column>
<el-table-column
prop="expertUnit"
label="专家单位">
</el-table-column>
<el-table-column
prop="expertCardNum"
label="银行卡号">
</el-table-column>
<el-table-column
prop="expertBankName"
label="开户行">
</el-table-column>
<el-table-column
prop="expertIdCard"
label="身份证">
</el-table-column>
<el-table-column
prop="expertStandard"
label="开支标准">
</el-table-column>
</el-table>
</div>
<div style="width: 49%;">
<h2>待导出列表</h2>
<el-table
:data="exportList"
ref="exportTable"
stripe
style="width: 100%">
<el-table-column
prop="expertId"
label="ID"
width="100">
</el-table-column>
<el-table-column
prop="expertName"
label="专家姓名"
width="100">
</el-table-column>
<el-table-column
prop="expertRankName"
label="专家职称"
width="130">
</el-table-column>
<el-table-column
prop="expertUnit"
label="专家单位">
</el-table-column>
<el-table-column
prop="expertCardNum"
label="银行卡号">
</el-table-column>
<el-table-column
prop="expertBankName"
label="开户行">
</el-table-column>
<el-table-column
prop="expertIdCard"
label="身份证">
</el-table-column>
<el-table-column
prop="expertStandard"
label="开支标准">
</el-table-column>
</el-table>
</div>
</div>
<el-dialog
title="专家导入"
:visible.sync="dialogVisible"
width="50%"
custom-class="mkdirDialog"
:before-close="handleClose">
<el-form label-position="top" label-width="80px" :model="filesInfo" :rules="rules" style="text-align: left">
<el-form-item label="请上传专家信息模板进行导入(模板请脱水印,否则导入失败)" prop="upload">
<p style="cursor: pointer" @click="downloadImportTemplate">点击下载导入模板</p>
<el-upload
class="upload-demo"
drag
ref="fileUpload"
:headers="headers"
action="/api/expert/importExpertInfo"
:on-success="uploadSuccess"
:limit="1">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
</el-upload>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { Message } from 'element-ui'
import { exportExpertInfoToExcel, getExpertInfoByName } from '@/utils/http/interface'
import { saveAs } from 'file-saver'
export default {
name: 'expertForm',
data() {
return {
//
searchInfo:{
keyWords: "",
division: "",
type:'',
kind: "",
},
tableData: [
],
//token
headers:{
"Authorization": localStorage.getItem("systemToken")
},
//
dialogVisible: false,
//id
highlightedExpertIds: [],
//
exportList : []
}
},
methods:{
//
clearList(){
this.exportList = []
//
this.$refs.table.clearSelection();
},
//
downloadImportTemplate(){
saveAs("http://"+ window.location.host +"/api/sys/专家信息导入模板.xls","专家信息导入模板.xls")
},
//
rowClassName({ row, rowIndex }){
if (this.highlightedExpertIds.includes(row.expertId)) {
return 'red-row';
}
return '';
},
//
uploadSuccess(response){
if (response.status == 1) {
Message.success(response.msg)
this.dialogVisible = false
this.$refs.fileUpload.clearFiles()
this.highlightedExpertIds = []
this.getAllExpertInfo()
}else if (response.status == 0){
//
Message.warning(response.msg)
this.dialogVisible = false
this.$refs.fileUpload.clearFiles()
//
//dataexpertIdhighlightedExpertIds
let data = response.data
this.highlightedExpertIds = data.map(item => item.expertId);
console.log(this.highlightedExpertIds)
}
},
//
handleSelectionChange(val) {
//
const maxSelect = 9
if (val.length > maxSelect) {
this.$message({
type: 'warning',
message: `您选择的专家数量超过 ${maxSelect} 个,将生成多个表格`
})
// selection Vue
// maxSelect
// const newSelections = val.slice(0, maxSelect)
//
// // 使 nextTick DOM
// this.$nextTick(() => {
// this.$refs.table.clearSelection()
// newSelections.forEach(row => {
// this.$refs.table.toggleRowSelection(row, true)
// })
// })
}
val.forEach(item => {
// exportList
if (!this.exportList.find(i => i.expertId === item.expertId)) {
this.exportList.push(item);
}
});
// this.exportList = val
},
exportFile(){
this.$api.exportExpertInfoToExcel(this.exportList).then((res) => {
if (res.status == 1){
Message.success(res.msg)
// console.log("http://"+ window.location.host +"/api/sys/"+ res.data)
saveAs("http://"+ window.location.host +"/api/sys/"+ res.data,res.data)
}
})
},
nameSearch(){
if (this.searchInfo.keyWords != null && this.searchInfo.keyWords != '' && this.searchInfo.keyWords != undefined){
//have search content
let expertInfo = {
expertName : this.searchInfo.keyWords
}
this.$api.getExpertInfoByName(expertInfo).then((res)=>{
if (res.status == 0) {
this.tableData = res.data
}else {
Message.warning("服务错误")
}
})
}else {
// no content
this.getAllExpertInfo()
}
},
//
getAllExpertInfo(){
this.$api.getAllExpertInfo().then((res)=>{
if (res.status == 0) {
this.tableData = res.data
}
})
}
},
mounted() {
this.getAllExpertInfo()
}
}
</script>
<style scoped>
.manageList-header-input {
float: left;
margin-bottom: 20px;
}
.manageList-header-input .el-input {
width: 17rem;
}
.manageList-header-input .el-select {
width: 8rem;
}
/deep/ .el-dialog.mkdirDialog{
background: rgba(255, 255, 255, 0.62);
border-radius: 5px;
backdrop-filter: saturate(50%) blur(8px);
}
/deep/ .red-row {
color: red;
}
</style>

View File

@ -424,6 +424,13 @@ export default {
if (res.status == 0) {
this.list = res.data
this.filesInfo.filesTypeId = this.$route.params.typeId
//
for (let i = 0; i < this.list.length; i++) {
//
this.list[i].uploadTime = this.$moment(this.list[i].uploadTime).format('YYYY年MM月DD日')
}
this.listLoading = false
}else {
Message.warning("分类显示失败,已显示全部数据")

View File

@ -0,0 +1,902 @@
<template>
<div v-loading="loading" @contextmenu.prevent="openMenu($event)" class="app-container">
<ul v-show="visible" :style="{left:left+'px',top:top+'px'}" class="contextmenu">
<li v-show="fileLevel!==0" @click="mkdirDialogVisible=true">新建目录</li>
<li v-show="fileLevel!==0 && fileLevel !==1" @click="dialogVisible = true">上传</li>
<li v-show="fileLevel!==0 && fileLevel !==1" @click="onlineView">浏览</li>
<li v-show="fileLevel!==0 && fileLevel !==1" @click="share">分享</li>
<!-- <li v-show="fileLevel!==0 && fileLevel !==1">下载</li>-->
<!-- <li v-show="fileLevel!==0 && fileLevel !==1">删除</li>-->
<li >属性</li>
</ul>
<marquee style="margin-bottom: 5px;font-size: 15px">
欢迎使用文件共享管理系统在线浏览文件请点击右键选择浏览双击左键下载文件系统尚未完善如遇问题欢迎<a @click="addMessage" style="font-weight: bold">留言反馈</a>,谢谢
</marquee>
<!--搜索框-->
<div class="manageList-header-input">
<!-- <div style="display: inline; ">-->
<!-- <img src="@/assets/back.svg" style="height: 15px; vertical-align:middle;" />-->
<!-- <p style="display: inline; vertical-align: middle; font-size: 12px; line-height: 15px;">上一层级</p>-->
<!-- </div>-->
<el-button icon="el-icon-arrow-up" @click="back2Up" style="margin-right: 10px" plain ></el-button>
<el-input :placeholder=path style="height: 40px;width: 600px" disabled></el-input>
<!-- 输入框 双向绑定数据 自带清空 -->
<el-button style="margin-left: 10px" key=1 type="primary" @click="dialogVisible = true" :disabled="!(fileLevel>1)">上传文件</el-button>
<!-- <el-button style="margin-left: 10px" type="primary" @click="typeDialogVisible = true" plain>添加分类</el-button>-->
<!-- <span style="margin-left: 10px">当前文件分类{{ activeFileType }}</span>-->
</div>
<el-alert
title="注意"
type="warning"
description="局域网支持在线浏览pdf和docx格式文档在线浏览文件请预先脱水印doc及其他文件请下载查看。一级二级目录暂不开放文件上传权限如有需要请联系管理员李维昊"
style="margin-bottom: 10px;font-size: 20px">
</el-alert>
<!--上传文件-->
<el-dialog
title="上传文件"
:visible.sync="dialogVisible"
width="50%"
custom-class="mkdirDialog"
:before-close="handleClose">
<el-form label-position="top" label-width="80px" :model="filesInfo" :rules="rules" style="text-align: left">
<el-form-item label="文件上传" prop="upload">
<el-upload
class="upload-demo"
drag
ref="fileUpload"
:headers="headers"
:data="data={
'path':path
}"
action="/api/file/uploadFileV2"
:on-success="uploadSuccess"
:limit="1">
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
</el-upload>
</el-form-item>
</el-form>
</el-dialog>
<!--新建文件夹-->
<el-dialog
title="新建文件夹"
:visible.sync="mkdirDialogVisible"
custom-class="mkdirDialog"
width="30%"
:before-close="typeHandleClose">
<el-form label-position="top" label-width="80px" :model="fileType" :rules="rules" style="text-align: left">
<el-form-item label="文件夹名称" prop="typeName">
<el-input placeholder="请输入文件夹名称" v-model="mkdirName"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="mkdir"> </el-button>
</span>
</el-dialog>
<!--阅览-->
<el-dialog
title="浏览"
:visible.sync="viewDialogVisible"
width="90%"
:before-close="viewHandleClose">
<el-alert
title="注意"
type="success"
description="如果出现文件内容乱码问题,请检查所上传的文档中西文字体是否匹配(中文文字对应中文字体)"
style="margin-bottom: 10px;font-size: 20px"/>
<!--render 对应渲染后的方法 src是文件的url链接-->
<vue-office-docx v-if="isWord" :src="viewUrl" @rendered="rendered"/>
<vue-office-pdf v-if="isPdf" :src="viewUrl" @rendered="rendered"/>
</el-dialog>
<!--小网盘-->
<div style="display:inline !important; -webkit-user-select: none; user-select: none; height: 100%">
<div v-show="!loading" class="file" v-for="file in fileList" :key="file.name" @dblclick="clickFileIcon(file)" @contextmenu.prevent="saveFileData(file)">
<div>
<img class="file-svg" :src="getFileTypeIcon(file.directory,file.file,file.name)"/>
</div>
<div style="display: inline-block">{{ file.name }}</div>
</div>
</div>
<div class="floating-div" >
<div class="box-card" style="width: 80px;height: 30px;border-radius: 10px 10px 0 0;display: flex; justify-content: center; align-items: center; cursor: pointer">关闭</div>
<el-card class="box-card" shadow="hover">
<div slot="header" class="clearfix">
<span>留言信息版</span>
<el-button style="float: right; padding: 3px 0" type="text" @click="addMessage()">发布留言</el-button>
</div>
<div ref="messageItem" class="message-item">
<div v-for="message in messageBoardList" :key="message.messageBoardId" class="text item">
<div>
<h5 :style="{color:message.level==='重要'?'#e54d4d':message.level==='一般'?'#d09a35':message.level==='不重要'?'#4cb95a':'black'}">{{message.message}}</h5>
{{message.time}}
</div>
</div>
</div>
</el-card>
</div>
<!--发布留言-->
<el-dialog
title="新建文件夹"
:visible.sync="messageVisible"
custom-class="mkdirDialog"
width="30%"
:before-close="messageClose">
<el-form label-position="top" label-width="80px" :model="messageBoard" :rules="rules" style="text-align: left">
<el-form-item label="发布留言" prop="message">
<el-input placeholder="请填写留言信息" v-model="messageBoard.message"></el-input>
</el-form-item>
<el-select v-model="messageBoard.level" placeholder="请选择">
<el-option
v-for="item in levelOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="insertMessage"> </el-button>
</span>
</el-dialog>
</div>
</template>
<!--<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/js-base64@3.6.0/base64.min.js"></script>-->
<script>
import { saveAs } from 'file-saver'
import { getList } from '@/api/table'
import pageUtils from '@/utils/pageUtils'
import { Message } from 'element-ui'
import { getFilesInfoByName, getFilesInfoByType, shareByCode } from '@/utils/http/interface'
import { toBase64 } from 'js-base64'
import VueOfficeDocx from '@vue-office/docx'
import VueOfficePdf from '@vue-office/pdf'
import swal from 'sweetalert'
export default {
name: 'FileList',
components:{
VueOfficeDocx,
VueOfficePdf
},
filters: {
statusFilter(status) {
const statusMap = {
'已更新': 'success',
'待更新': 'gray',
'已废弃': 'danger'
}
return statusMap[status]
},
typeFilter(type) {
const typeMap = {
'会议材料': 'success',
'管理办法': 'success',
'采购材料': 'success'
}
return typeMap[status]
}
},
data() {
return {
//
messageBoardList:null,
visible: false,
top: 0,
left: 0,
//loading
loading:true,
//
path:'/',
//
fileLevel:0,
//
fileList:[
],
//
mkdirName:'新建文件夹',
//showInfo
showInfoStatus:false,
//
activeFileType:null,
list: null,
listLoading: true,
//
searchInfo:{
keyWords: "",
division: "",
type:'',
kind: "",
},
//token
headers:{
"Authorization": localStorage.getItem("systemToken")
},
//dialog
rules: {
name: [
{ required: true, message: '请填写文件名', trigger: 'blur' },
],
fileTypeId: [
{ required: true, message: '请选择文件分类', trigger: 'blur' },
],
status: [
{ required: true, message: '请选择文件状态', trigger: 'blur' },
],
upload: [
{ required: true, message: '请上传文件', trigger: 'blur' },
],
typeName:[
{required: true, message: '请输入文件夹名称', trigger: 'blur' }
]
},
//messagedialog
messageRules: {
message: [
{ required: true, message: '请填写留言信息', trigger: 'blur' },
],
},
//
filesInfo:{
filesInfoId:null,
filesTypeId:null,
location:"",
name:"",
uploadUserId:"",
status:"已更新"
},
//
fileType:{
name:""
},
//
messageBoard:{
message:null,
level:null,
time:null
},
levelOptions: [{
value: '重要',
label: '重要'
}, {
value: '一般',
label: '一般'
}, {
value: '不重要',
label: '不重要'
}],
//
dialogVisible: false,
//
mkdirDialogVisible: false,
//
filesTypeList: null,
//
// filesData:{
//
// }
//
viewDialogVisible:false,
viewUrl:null,
//线
viewFileData:null,
//线
isWord:false,
isPdf:false,
//IP
ip:null,
messageVisible:false
}
},
created() {
this.fetchData()
},
computed:{
},
methods: {
//
addMessage(){
this.messageVisible = true
},
openMenu(e) {
e.preventDefault();
var x = e.pageX;
var y = e.pageY;
this.top = y -20;
this.left = x -200;
this.visible = true;//
},
//close
closeMenu() {
this.visible = false;
},
//
showInfo(){
if (this.showInfoStatus == false) {
this.$notify.warning({
title:"注意",
message:"在线浏览功能支持office办公文档、PDF文档、txt、java、md等纯文本、图片、mp3、mp4多媒体格式其他格式请点击下载进行浏览",
position: 'bottom-right'
})
this.showInfoStatus = true
}
},
getAllType(){
this.$api.getAllType().then((res)=>{
if (res.status === 0) {
this.filesTypeList =res.data
}
console.log(res)
})
},
getAllFiles(){
this.$api.getAllFilesInfo().then((res)=>{
console.log(res)
if (res.status === 0) {
this.list = res.data
console.log(this.list)
this.listLoading = false
}else {
Message.warning("加载失败")
}
}).catch(function (res) {
alert(res);
});
},
//
fetchData() {
this.listLoading = true
this.selectByType()
this.getAllType()
},
downloadFile(link) {
window.location.href = '/api/' + link
// console.log('/api' + link)
// pageUtils.openPage(this.$router, '/api' + link)
},
//线
viewHandleClose(){
this.viewDialogVisible = false
this.viewUrl = null
this.isPdf = false
this.isWord = false
},
//
handleClose() {
this.dialogVisible = false;
this.filesInfo.filesInfoId = null;
this.filesInfo.location = "";
this.filesInfo.name = "";
this.filesInfo.uploadUserId = "";
this.filesInfo.status = "已更新";
},
//
typeHandleClose(){
this.mkdirDialogVisible = false;
this.fileType.name = ""
},
//
messageClose(){
this.messageVisible = false;
// this.fileType.name = ""
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
//
uploadSuccess(response, file, fileList){
if (response.status == 0) {
Message.success("上传成功")
// this.filesInfo.location = response.url
// this.filesInfo.name = file.name
this.dialogVisible = false
this.$refs.fileUpload.clearFiles()
this.getFilesDirMeta()
}
},
//fileinfo
fileInfoSubmit(){
//url
if (this.filesInfo.location != null && this.filesInfo.location != '') {
//
console.log(localStorage.getItem("userId"))
this.filesInfo.uploadUserId = localStorage.getItem("userId")
this.$api.addFileInfo(this.filesInfo).then((res)=>{
console.log(res)
if (res.status == 0) {
Message.success("上传成功")
this.handleClose()
this.selectByType()
this.$refs.fileUpload.clearFiles()
}
})
}else{
Message.warning("请上传文件完善信息")
}
},
//
getFileTypeIcon(directory,file,name){
//
if (directory) {
return require('@/assets/file_icon/folder.svg')
}else if (file){
//
let nameN = name.split('.')
let fileType = nameN[1]
switch(fileType){
case 'doc':
case 'docx':
return require('@/assets/file_icon/word3.svg')
case 'ppt':
case 'pptx':
return require('@/assets/file_icon/ppt3.svg')
case 'xls':
case 'xlsx':
return require('@/assets/file_icon/excel3.svg')
case 'pdf':
return require('@/assets/file_icon/pdf3.svg')
case 'zip':
case 'rar':
return require('@/assets/file_icon/zip.svg')
case 'exe':
return require('@/assets/file_icon/exe.svg')
default:
return require("@/assets/file_icon/unu.svg")
}
}
},
//
getFilesDirMeta(){
this.loading = true
let path = {
path : this.path
}
this.$api.getFilesDirMeta(path).then((res)=>{
if (res.status == 0) {
this.fileList = res.data
this.loading = false
}
})
},
//
clickFileIcon(file){
//
if (file.directory){
//
//
var dep = localStorage.getItem('dep')
if (file.name === '一室') {
console.log(file.name)
if (dep ==='一室' || dep === '管理员'){
//访
this.path = this.path + file.name + "/"
this.getFilesDirMeta()
this.fileLevel = this.fileLevel + 1
}else{
//访 访
Message.warning("抱歉,您无权限访问,您的部门是:"+ dep)
}
}else if (file.name === '二室') {
if (dep === '二室'|| dep === '管理员'){
//访
this.path = this.path + file.name + "/"
this.getFilesDirMeta()
this.fileLevel = this.fileLevel + 1
}else {
//访 访
Message.warning("抱歉,您无权限访问,您的部门是:"+ dep)
}
}else if (file.name === '四室') {
if (dep === '四室'|| dep === '管理员'){
//访
this.path = this.path + file.name + "/"
this.getFilesDirMeta()
this.fileLevel = this.fileLevel + 1
}else {
//访 访
Message.warning("抱歉,您无权限访问,您的部门是:"+ dep)
}
}else if (file.name === '传达文件') {
if (dep === '管理员'){
//访
this.path = this.path + file.name + "/"
this.getFilesDirMeta()
this.fileLevel = this.fileLevel + 1
}else {
//访 访
Message.warning("抱歉,您无权限访问,您的部门是:"+ dep)
}
}else {
//
this.path = this.path + file.name + "/"
this.getFilesDirMeta()
this.fileLevel = this.fileLevel + 1
}
}else {
//
//BlobFileUrl URL
//
//object
saveAs("http://"+ window.location.host + "/api/files"+this.path + file.name,file.name)
}
console.log(file.name)
console.log(file.directory)
},
saveFileData(file){
//线 url
//
this.viewFileData = file
this.viewUrl ="http://"+ window.location.host + "/api/files"+this.path + file.name,file.name
},
//
back2Up(){
//
if (this.fileLevel == 0){
Message.success("已经是根目录啦")
}else {
//
let str = this.path;
let arr = str.split("/");
arr.pop();
arr.pop();
str = arr.join("/") + "/";
console.log(str);
this.path = str;
this.getFilesDirMeta()
this.fileLevel = this.fileLevel - 1
}
},
//
mkdir(){
let path = {
path : this.path + this.mkdirName
}
this.$api.mkdir(path).then((res) =>{
if (res.status == 0) {
//
this.getFilesDirMeta()
this.mkdirDialogVisible = false
}else {
//
Message.warning("添加文件夹失败,该文件夹可能已经存在~")
}
})
},
// 线
onlineView(){
if (this.viewFileData.directory){
//
Message.warning("您选择的是文件夹 无法在线浏览")
}else {
//
if (this.viewFileData.name.endsWith('.docx')) {
//word
this.isWord = true
this.viewDialogVisible = true
}else if (this.viewFileData.name.endsWith('.pdf')){
this.isPdf = true
this.viewDialogVisible = true
}else {
Message.warning("您的文件暂不支持在线浏览 请下载查看")
}
}
},
//
share(){
if (this.viewFileData.directory){
//
Message.warning("您选择的是文件夹 无法分享")
}else {
//
let code2Url ={
url : this.viewUrl
}
this.$api.shareByCode(code2Url).then((res)=>{
if (res.status == 0) {
//
swal("分享成功","分享码:" + res.code + " (区分大小写,24小时有效")
}else{
Message.warning("失败")
}
})
}
},
//
getMessage(){
this.$api.getAllMessage().then((res)=>{{
if (res.status == 0) {
this.messageBoardList = res.data
for(let i = 0; i < this.messageBoardList.length; i++){
this.messageBoardList[i].time = this.$moment(this.messageBoardList[i].time).format('YYYY-MM-DD HH:mm')
}
console.log(this.messageBoardList.toString())
}else {
Message.warning("留言板获取失败")
}
this.messageBoardList.reverse()
}})
},
insertMessage(){
this.messageBoard.time = this.$moment().format();
if (this.messageBoard.level != null && this.messageBoard.message != null){
this.$api.insertMessage(this.messageBoard).then((res)=>{
if (res.status == 0) {
Message.success("添加成功")
this.messageVisible = false
this.messageBoard.message = null
this.messageBoard.level = null
this.messageBoard.time = null
this.getMessage()
}else{
Message.warning("添加失败")
}
})
}
}
},
mounted() {
this.getMessage()
this.getFilesDirMeta()
},
watch: {
visible(value) {
if (value) {
document.body.addEventListener('click', this.closeMenu)
} else {
document.body.removeEventListener('click', this.closeMenu)
}
}
},
}
</script>
<style scoped>
.message-item{
overflow: auto;
height: 300px;
max-height: 300px; /* 设置最大高度,超过该高度将出现滚动条 */
}
.message-item:hover{
overflow-y: scroll; /* 鼠标悬停时启用纵向滚动条 */
}
/*留言板样式*/
.floating-div {
position: fixed;
bottom: 0;
right: 0;
margin: 20px;
}
.text {
font-size: 14px;
}
.item {
padding: 18px 0;
}
.box-card {
width: 480px;
background: rgba(240, 240, 240, 0.52);
border-radius: 0 10px 10px 10px;
backdrop-filter: saturate(50%) blur(8px);
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.manageList-header-input {
float: left;
margin-bottom: 20px;
}
.manageList-header-input .el-input {
width: 17rem;
}
.manageList-header-input .el-select {
width: 8rem;
}
/deep/ .el-dialog.mkdirDialog{
background: rgba(255, 255, 255, 0.62);
border-radius: 5px;
backdrop-filter: saturate(50%) blur(8px);
}
.contextmenu {
margin: 0;
background: rgba(255, 255, 255, 0.62);
z-index: 3000;
position: absolute;
list-style-type: none;
padding: 5px 0;
border-radius: 4px;
font-size: 16px;
font-weight: 400;
color: #333;
box-shadow: 2px 2px 3px 2px rgba(0, 0, 0, 0.3);
width: 200px;
backdrop-filter: saturate(50%) blur(8px);
}
.contextmenu li {
margin: 0;
padding: 7px 16px;
cursor: pointer;
}
.contextmenu li:hover {
background: #eee;
}
/*文件svg*/
.file-svg{
-webkit-user-drag: none;
user-drag: none;
-webkit-user-select: none;
user-select: none;
width: 100px;
text-align: center;
}
/*文件总体样式*/
.file{
width: 150px;
text-align: center;
float: left;
margin-top: 10px;
cursor: pointer;
}
</style>

View File

@ -0,0 +1,90 @@
<template>
<div class="app-table-container" style=" display: flex;
flex-direction: column;
align-items: center;">
<div class="input-bg">
<div style=" display: flex; flex-direction: column;align-items: center;">
<p>文件:{{name}}</p>
<el-input placeholder="请输入提取码" v-model="code"></el-input>
<el-button type="primary" style="margin-top: 10px" @click="getByCode">提取文件</el-button>
<p v-if="status">提取成功请选择</p>
<div v-if="status">
<el-button type="primary" @click="save">下载</el-button>
<el-button @click="onlineView">在线浏览</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import { getByCode } from '@/utils/http/interface'
import { Message } from 'element-ui'
import { saveAs } from 'file-saver'
export default {
name: 'GetFile',
data() {
return{
code: null,
url: null,
name: "*****",
status:false
}
},
methods:{
getByCode(){
let code2Url = {
code : this.code
}
this.$api.getByCode(code2Url).then((res)=>{
if (res.status == 0) {
//
this.url = res.url
this.status = true
this.name = this.url.split("/").pop()
}
})
},
//
save(){
console.log(this.url)
saveAs(this.url,this.url.split("/").pop())
},
// 线
onlineView(){
//
if (this.url.split("/").pop().endsWith('.docx')) {
//word
this.isWord = true
this.viewDialogVisible = true
}else if (this.url.split("/").pop().endsWith('.pdf')){
this.isPdf = true
this.viewDialogVisible = true
}else {
Message.warning("您的文件暂不支持在线浏览 请下载查看")
}
},
}
}
</script>
<style scoped>
.input-bg{
display: flex;
flex-direction: column;
align-items: center;
justify-content: center; /* 垂直居中 */
width: 800px;
height: 500px;
background: #FFF;
border: solid #c7c7c7 2px;
border-radius: 15px;
}
</style>

View File

@ -1,9 +1,12 @@
<template>
<div class="login-container">
<div class="login-container" :style="{backgroundImage:'url('+require('@/assets/background.png')+')'}" style="background-size: cover;">
<div class="login-card">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
<div class="title-container">
<h3 class="title">文件共享管理系统</h3>
<h3 class="title">综合协同办公系统</h3>
</div>
<el-form-item prop="phone">
@ -41,7 +44,7 @@
</span>
</el-form-item>
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="login">登录</el-button>
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px; background-color: #5f76ec" @click.native.prevent="login">登录</el-button>
<!-- <div class="tips">-->
<!-- <span style="margin-right:20px;">phone: admin</span>-->
@ -49,6 +52,8 @@
<!-- </div>-->
</el-form>
</div>
</div>
</template>
@ -146,7 +151,7 @@ export default {
localStorage.setItem("role", res.auth[0].authority);
this.loading = true
Message.success("登录成功")
pageUtils.openPage(this.$router,"/fileListV2/1"); //
pageUtils.openPage(this.$router,"/fileListV3"); //
}
// Cookies.set("token", res.data.token); // tokenCookie
@ -162,10 +167,10 @@ export default {
<style lang="scss">
/* 修复input 背景不协调 和光标变色 */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
$bg: rgba(218, 218, 218, 0.49);
$bg:#283443;
$light_gray:#fff;
$cursor: #fff;
$light_gray: #252525;
$cursor: #252525;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
.login-container .el-input input {
@ -195,10 +200,13 @@ $cursor: #fff;
-webkit-text-fill-color: $cursor !important;
}
}
input::placeholder{
color: #8a8a8a;
}
}
.el-form-item {
border: 1px solid rgba(255, 255, 255, 0.1);
border: 1px solid rgba(13, 106, 227, 0.1);
background: rgba(0, 0, 0, 0.1);
border-radius: 5px;
color: #454545;
@ -207,13 +215,40 @@ $cursor: #fff;
</style>
<style lang="scss" scoped>
$bg:#2d3a4b;
$dark_gray:#889aa4;
$light_gray:#eee;
$bg: #c5e0ff;
$dark_gray: #72828a;
$light_gray: #424242;
.login-card{
background-color: rgba(255, 255, 255, 0.7); //
border-radius: 10px; //
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); //
backdrop-filter: blur(10px); //
padding: 30px; //
width: 600px; //
max-width: 100%;
margin: 50px auto; //
position: relative;
z-index: 10; //
}
.login-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh; //
width: 100%;
//background-color: #f0f2f5; //
padding: 20px; //
min-height: 100%;
width: 100%;
//background-image: require('@/assets/file_icon/excel3.svg');
background-color: $bg;
overflow: hidden;
@ -228,7 +263,7 @@ $light_gray:#eee;
.tips {
font-size: 14px;
color: #fff;
color: #606060;
margin-bottom: 10px;
span {

View File

@ -0,0 +1,147 @@
<template>
<div class="app-container">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>添加会议</span>
</div>
<el-col :span="24">
<el-form label-position="left" ref="form" :model="form" label-width="80px" >
<el-row>
<el-col :span="12">
<el-form-item label="会议名称:" >
<el-input v-model="form.expertName" style="width: 300px"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题名称:" >
<el-input v-model="form.expertName" style="width: 300px"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="会议地点:" >
<el-input v-model="form.expertUnit" style="width: 300px"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="课题科目:" >
<el-input v-model="form.expertCardNum" style="width: 300px"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-col>
<h4 style="margin-bottom: 30px">请选择参会专家</h4>
<div class="transfer">
<el-transfer
filterable
:titles="['专家库', '已选专家']"
:filter-method="filterMethod"
filter-placeholder="请输入专家姓名"
v-model="value"
:data="data">
</el-transfer>
</div>
<h4 style=" margin-bottom: 30px">请选择项目组成员</h4>
<div class="transfer">
<el-transfer
filterable
:titles="['项目组成员', '已选名单']"
:filter-method="filterMethod"
filter-placeholder="请输入姓名"
v-model="value"
:data="data">
</el-transfer>
</div>
<el-button type="primary" @click="onSubmit">立即添加</el-button>
<el-button>取消</el-button>
</el-card>
</div>
</template>
<script>
export default {
name: 'AddMeeting',
data() {
const generateData = _ => {
const data = [];
const cities = ['李光杰', '李明军', '李维昊', '张启磊', '张丁介', '赵鸿儒', '林雪儿'];
const pinyin = ['李光杰', '李明军', '李维昊', '张启磊', '张丁介', '赵鸿儒', '林雪儿'];
cities.forEach((city, index) => {
data.push({
label: city,
key: index,
pinyin: pinyin[index]
});
});
return data;
};
return {
data: generateData(),
value: [],
filterMethod(query, item) {
return item.pinyin.indexOf(query) > -1;
},
form: {
expertId:'',
expertName:'',
expertRankId:'',
expertRankName:'',
expertUnit:'',
expertCardNum:'',
expertBankName:'',
expertIdCard:'',
expertStandard:'',
},
//
rankList:null
};
}
}
</script>
<style scoped>
.transfer{
display: flex;
flex-direction: column;
align-items: center; /* 水平居中 */
}
::v-deep .el-transfer-panel {
width: 500px !important;
}
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.box-card {
margin-bottom: 30px;
border-radius: 10px;
}
</style>

View File

@ -0,0 +1,13 @@
<template>
</template>
<script>
export default {
name: 'MeetingList'
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,122 @@
<template>
<div id='vabOnlyOffice'></div>
</template>
<script>
export default {
name: 'OnlyOfficeEditor',
props: {
option: {
type: Object,
default: () => {
return {}
},
},
},
data() {
return {
doctype: '',
docEditor: null,
}
},
beforeDestroy() {
if (this.docEditor !== null) {
this.docEditor.destroyEditor();
this.docEditor = null;
}
},
watch: {
option: {
handler: function(n) {
this.setEditor(n)
this.doctype = this.getFileType(n.fileType)
},
deep: true,
},
},
mounted() {
if (this.option.url) {
this.setEditor(this.option)
}
},
methods: {
async setEditor(option) {
if (this.docEditor !== null) {
this.docEditor.destroyEditor();
this.docEditor = null;
}
this.doctype = this.getFileType(option.fileType)
let config = {
document: {
//
fileType: option.fileType,
key: option.key ||'',
title: option.title,
permissions: {
edit: option.isEdit,//: false
print: option.isPrint,
download: false,
// "fillForms": true,//modeedit editreview
// "review": true //
},
url: option.url,
},
documentType: this.doctype,
editorConfig: {
callbackUrl: option.editUrl,//"wordapiapi
lang: option.lang,//
//
customization: {
autosave: true,//
chat: true,
comments: false,
help: false,
// "hideRightMenu": false,// false
//
plugins: true,
},
user:{
id:option.user.id,
name:option.user.name
},
mode:option.model?option.model:'edit',
},
width: '100%',
height: '100%',
token:option.token||''
}
// eslint-disable-next-line no-undef,no-unused-vars
this.docEditor = new DocsAPI.DocEditor('vabOnlyOffice', config)
},
getFileType(fileType) {
let docType = ''
let fileTypesDoc = [
'doc', 'docm', 'docx', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'htm', 'html', 'mht', 'odt', 'ott', 'pdf', 'rtf', 'txt', 'djvu', 'xps',
]
let fileTypesCsv = [
'csv', 'fods', 'ods', 'ots', 'xls', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx',
]
let fileTypesPPt = [
'fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx',
]
if (fileTypesDoc.includes(fileType)) {
docType = 'text'
}
if (fileTypesCsv.includes(fileType)) {
docType = 'spreadsheet'
}
if (fileTypesPPt.includes(fileType)) {
docType = 'presentation'
}
return docType
}
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,92 @@
<template>
<div id="app">
<div class='qualityManual-container'>
<div>
<button style='width: 120px;' type='primary' @click='getFile'>测试预览office文档</button>
<button style='width: 120px;' type='primary' @click='close'>关闭</button>
</div>
<div v-if='show' class='qualityManual-container-office'>
<only-office-editor :option='option' />
</div>
</div>
</div>
</template>
<script >
import OnlyOfficeEditor from './OnlyOfficeEditor'
export default{
name: 'OnlyOfficeTest',
components: {
OnlyOfficeEditor
},
data() {
return {
//vabOnlyOffice
option: {
url: '',
isEdit: '',
fileType: '',
title: '',
lang: '',
isPrint: '',
user: { id:null,name:''}
},
show: false,
config: {
document: {
fileType: "docx",
key: "Khirz6zTPdfd7",
title: "Example Document Title.docx",
url: "https://example.com/url-to-example-document.docx"
},
documentType: "word",
editorConfig: {
callbackUrl: "https://example.com/url-to-callback.ashx"
}
}
}
},
methods: {
getFile() {
this.show = true
// getAction('/file/selectById', { id: this.id }).then(res => {
this.option.isEdit = true
this.option.lang = 'zh-CN'
// this.option.url = 'http://114.116.228.69:8043/api/files/ZPABOZ-%E7%BA%A2%E5%B1%B1%E5%BC%80%E6%BA%90%E5%B9%B3%E5%8F%B0%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90%E5%88%86%E7%B1%BB%E7%BB%9F%E8%AE%A121.1.3.xlsx'
this.option.title = '123'
this.option.fileType = 'xlsx'
this.option.isPrint = false
this.option.user= { id:12,name:'张三'}
// })
},
close() {
this.show = false
},
},
};
</script>
<style scoped>
html,body{
height:100%;
}
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
height:100%;
}
.qualityManual-container {
padding: 0 !important;
height:100%;
}
.qualityManual-container-office {
width: 100%;
/*height: calc(100% - 55px);*/
height: 500px;
}
</style>

View File

@ -0,0 +1,162 @@
<template>
<div class="app-container">
<div class="begin">
<h2>开始</h2>
<div style="display:inline-block">
<div class="newBase" style="margin-right: 30px">
<p class="baseWord">新建文档</p>
</div>
<div class="newBase">
<p class="baseWord">新建知识库</p>
</div>
</div>
</div>
<div style="display:inline-block">
<h2>知识库</h2>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>我的知识库</span>
<el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
</div>
<div v-for="o in 4" :key="o" class="text item">
{{'列表内容 ' + o }}
</div>
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>我的知识库</span>
<el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
</div>
<div v-for="o in 4" :key="o" class="text item">
{{'列表内容 ' + o }}
</div>
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>我的知识库</span>
<el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
</div>
<div v-for="o in 4" :key="o" class="text item">
{{'列表内容 ' + o }}
</div>
</el-card>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>我的知识库</span>
<el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
</div>
<div v-for="o in 4" :key="o" class="text item">
{{'列表内容 ' + o }}
</div>
</el-card>
</div>
<div>
<h2>文档</h2>
<el-collapse v-model="activeNames" @change="handleChange" class="collapse" style=" margin-top: 40px;">
<el-collapse-item title="code.mil介绍文档" name="1">
<div>与现实生活一致与现实生活的流程逻辑保持一致遵循用户习惯的语言和概念</div>
<div>在界面中一致所有的元素和结构需保持一致比如设计样式图标和文本元素的位置等</div>
</el-collapse-item>
<el-collapse-item title="反馈 Feedback" name="2">
<div>控制反馈通过界面样式和交互动效让用户可以清晰的感知自己的操作</div>
<div>页面反馈操作后通过页面元素的变化清晰地展现当前状态</div>
</el-collapse-item>
<el-collapse-item title="效率 Efficiency" name="3">
<div>简化流程设计简洁直观的操作流程</div>
<div>清晰明确语言表达清晰且表意明确让用户快速理解进而作出决策</div>
<div>帮助用户识别界面简单直白让用户快速识别而非回忆减少用户记忆负担</div>
</el-collapse-item>
<el-collapse-item title="可控 Controllability" name="4">
<div>用户决策根据场景可给予用户操作建议或安全提示但不能代替用户进行决策</div>
<div>结果可控用户可以自由的进行操作包括撤销回退和终止当前操作等</div>
</el-collapse-item>
</el-collapse>
</div>
</div>
</template>
<script>
export default {
name: 'OSD',
data() {
return {
activeNames: ['1']
};
},
methods: {
handleChange(val) {
console.log(val);
}
}
}
</script>
<style scoped lang="scss">
::v-deep .el-collapse-item__header{
font-size: 16px!important;
height: 55px;
}
.begin{
margin-bottom: 40px;
}
.newBase{
margin-top: 20px;
width: 190px;
height: 55px;
border-radius: 10px;
background: #FFFFFF;
font-size: 16px;
box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.08);
float: left;
display: flex;
justify-content: center;
text-align: center;
align-items: center;
cursor: pointer;
}
.newBase:hover{
background: #fafafa;
}
.baseWord{
text-align: center;
user-select:none;
color: #3D3D3D;
}
//card
.text {
font-size: 14px;
}
.item {
margin-bottom: 18px;
}
.clearfix:before,
.clearfix:after {
display: table;
content: "";
}
.clearfix:after {
clear: both
}
.box-card {
width: 460px;
margin-right: 30px;
margin-bottom: 30px;
border-radius: 10px;
float: left;
}
</style>

View File

@ -3,73 +3,107 @@
<el-table
:data="tableData"
border
style="width: 100%">
style="width: 100%"
>
<el-table-column
prop="serviceName"
label="服务/工具名称"
width="180">
width="180"
>
</el-table-column>
<el-table-column
prop="peopleName"
label="负责人/经办人"
width="190">
width="190"
>
</el-table-column>
<el-table-column
prop="date"
label="购买时间/续费时间">
prop="renewDate"
label="购买时间/续费时间"
>
</el-table-column>
<el-table-column
prop="describe"
label="备注"
>
</el-table-column>
<el-table-column
prop="expireTime"
label="一年节点(到期/用量检查)"
>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getAllPlatformData } from '@/utils/http/interface'
import { Message } from 'element-ui'
export default {
name: 'PlatformData',
data() {
return {
tableData:[
{
serviceName: "敏感词敏感图过滤服务-百度云",
peopleName:"明军老师账号-启磊续费",
date:"2022年12月22日续费1年 图片,敏感词各五十万次调用)"
},
{
serviceName: "实名认证服务-网易易盾",
peopleName:"启磊",
date:"2022年7月底购买"
},
{
serviceName: "SSL证书",
peopleName:"明军老师",
date:"2022年6月29日颁发"
},
{
serviceName: "短信服务-云片网",
peopleName:"公共邮箱账号-明军老师续费",
date:"2022年09月续费1000元"
},
{
serviceName: "微信小程序认证",
peopleName:"维昊",
date:"2022年09月07日提交认证"
},
{
serviceName: "微信公众号",
peopleName:"苛萱账号-明军老师续费",
date:"2022年04月12日提交认证"
},
{
serviceName: "sca工具",
peopleName:"维昊",
date:"-"
},
{
serviceName: "华为云服务器",
peopleName:"明军老师",
date:"-"
},
]
tableData: []
}
},
methods: {
getData() {
this.$api.getAllPlatformData().then((res) => {
if (res.status == 0) {
this.tableData = res.data
for (let i = 0; i < this.tableData.length; i++) {
if (this.tableData[i].renewDate != null) {
this.tableData[i].renewDate = this.$moment(this.tableData[i].renewDate).format('YYYY-MM-DD')
//
var expireTime = this.$moment(this.tableData[i].renewDate).add(1, 'years')
this.tableData[i].expireTime = this.$moment(expireTime, 'YYYY-MM-DD').fromNow(true)
} else {
this.tableData[i].renewDate = '未设置时间'
}
}
} else {
Message.warning('系统错误')
}
})
}
},
mounted() {
this.getData()
//moment
this.$moment.defineLocale('zh-cn', {
relativeTime: {
future: '%s内',
past: '%s前',
s: '几秒',
m: '1 分钟',
mm: '%d 分钟',
h: '1 小时',
hh: '%d 小时',
d: '1 天',
dd: '%d 天',
M: '1 个月',
MM: '%d 个月',
y: '1 年',
yy: '%d 年'
}
})
}
}
</script>

View File

@ -0,0 +1,149 @@
<template>
<div class="app-container">
<el-table
:data="tableData"
stripe
border
style="width: 100%"
>
<el-table-column
prop="name"
label="采购/外协项目名称"
width="180"
>
</el-table-column>
<el-table-column
prop="type"
label="类型"
width="180"
>
</el-table-column>
<el-table-column
prop="year"
label="年份"
width="190"
>
</el-table-column>
<el-table-column
prop="unitName"
label="归属研究室"
>
</el-table-column>
<el-table-column
prop="levelName"
label="采购/外协级别"
>
</el-table-column>
<el-table-column
prop="modeName"
label="采购/外协方式"
>
</el-table-column>
<el-table-column
prop="status"
label="项目状态"
>
</el-table-column>
<el-table-column
prop="principal"
label="负责人"
>
</el-table-column>
<el-table-column
prop="applicationNum"
label="申请编号"
>
</el-table-column>
<el-table-column
prop="purchaseNum"
label="采购编号"
>
</el-table-column>
<el-table-column
prop="contractNum"
label="合同编号"
>
</el-table-column>
</el-table>
</div>
</template>
<script>
import { getAllPlatformData } from '@/utils/http/interface'
import { Message } from 'element-ui'
export default {
name: 'PlatformData',
data() {
return {
tableData: []
}
},
methods: {
getData() {
this.$api.getAllPlatformData().then((res) => {
if (res.status == 0) {
this.tableData = res.data
for (let i = 0; i < this.tableData.length; i++) {
if (this.tableData[i].renewDate != null) {
this.tableData[i].renewDate = this.$moment(this.tableData[i].renewDate).format('YYYY-MM-DD')
//
var expireTime = this.$moment(this.tableData[i].renewDate).add(1, 'years')
this.tableData[i].expireTime = this.$moment(expireTime, 'YYYY-MM-DD').fromNow(true)
} else {
this.tableData[i].renewDate = '未设置时间'
}
}
} else {
Message.warning('系统错误')
}
})
}
},
mounted() {
this.getData()
//moment
this.$moment.defineLocale('zh-cn', {
relativeTime: {
future: '%s内',
past: '%s前',
s: '几秒',
m: '1 分钟',
mm: '%d 分钟',
h: '1 小时',
hh: '%d 小时',
d: '1 天',
dd: '%d 天',
M: '1 个月',
MM: '%d 个月',
y: '1 年',
yy: '%d 年'
}
})
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,177 @@
<template>
<div class="user-center">
<el-card class="user-card">
<div class="user-avatar">
<img :src="user.avatar" alt="avatar" />
</div>
<div class="user-info">
<h2 class="user-name">{{ user.name }}</h2>
<p class="user-phone">手机号{{ user.phone }}</p>
<p class="user-phone">部门{{ user.dep }}</p>
<p class="user-phone">密码*********</p>
<el-button type="primary" @click="openPassword">重置密码</el-button>
<el-button type="primary" @click="manageSignature" disabled>电子签名管理</el-button>
</div>
</el-card>
<el-dialog
title="重置密码"
:visible.sync="updateDialogVisible"
width="30%"
:before-close="updatePasswordClose">
<el-form label-position="top" label-width="80px" style="text-align: left">
<el-form-item label="用户ID" prop="userId">
<el-input placeholder="请填写用户名" v-model="updatePasswordUser.userId" disabled></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input placeholder="请输入重置密码" v-model="updatePasswordUser.password"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="resetPassword">重置密码</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { Message } from 'element-ui'
export default {
name: 'UserCenter',
data(){
return {
user: {
avatar: "https://picsum.photos/200",
name: "张三",
phone: "13888888888",
dep: "二室"
},
//
updatePasswordUser:{
userId:null,
password: null
},
//
updateDialogVisible:false,
};
},
methods: {
openPassword(){
this.updateDialogVisible = true
this.updatePasswordUser.userId = localStorage.getItem("userId");
},
resetPassword() {
//
//this.updatePasswordUser
this.updatePasswordUser.password = this.$md5(this.updatePasswordUser.password)
this.updatePasswordUser.userId = localStorage.getItem("userId");
this.$api.updatePassword(this.updatePasswordUser).then((res)=>{
if (res.status == 0) {
Message.success("重置成功")
this.updatePasswordClose()
}else {
Message.warning("系统错误,重置失败")
this.updatePasswordClose()
}
})
},
manageSignature() {
//
},
//
getUserData(){
/**
* 1. 有信息 拿到token userId 去获取用户信息
*
*/
let token = localStorage.getItem("systemToken");
let userId = localStorage.getItem("userId");
//
var user = {
userId,
}
this.$api.getUserDataByUserId(user).then((res) =>{
console.log(res);
if (res.status == 0) {
//
this.user.avatar = res.data.userDetails.profilePhoto;
this.user.name = res.data.user.name;
this.user.dep = res.data.user.dep;
this.user.phone = res.data.user.phone
// localStorage.setItem("dep",res.data.user.dep)
}
}).catch(function (res){
console.log(res);
})
},
//
updatePasswordClose(){
this.updateDialogVisible = false
this.updatePasswordUser.userId = null
this.updatePasswordUser.password = null
},
},
mounted() {
this.getUserData()
}
}
</script>
<style scoped>
.user-center {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
.user-card {
width: 90%;
margin-top: 20px;
display: flex;
padding: 20px;
}
.user-avatar {
width: 150px;
height: 150px;
}
.user-avatar img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 50%;
}
.user-info {
padding-left: 20px;
}
.user-list {
list-style-type: none;
}
.user-phone{
margin-top: 40px;
margin-bottom: 40px;
}
.user-name{
margin-top: 40px;
margin-bottom: 40px;
}
</style>

View File

@ -1,5 +1,5 @@
<template>
<div class="app-container">
<div class="app-table-container">
<!--搜索框-->
<div class="manageList-header-input">
@ -12,7 +12,7 @@
</div>
<el-dialog
title="上传文件"
title="新增用户"
:visible.sync="userDialogVisible"
width="50%"
:before-close="handleClose">
@ -26,6 +26,9 @@
<el-form-item label="密码" prop="password">
<el-input placeholder="请输入密码" v-model="adminInfo.password"></el-input>
</el-form-item>
<el-form-item label="部门" prop="password">
<el-input placeholder="请输入部门(一室、二室、四室、管理员)" v-model="adminInfo.dep"></el-input>
</el-form-item>
<!-- <el-form-item label="竞赛名称" prop="compName">-->
<!-- <el-input placeholder="竞赛名称" v-model="compInfo.compName"></el-input>-->
<!-- </el-form-item>-->
@ -91,6 +94,11 @@
</template>
</el-table-column>
<el-table-column label="用户部门">
<template slot-scope="scope">
{{ scope.row.dep }}
</template>
</el-table-column>
<el-table-column align="center" prop="created_at" label="操作" width="150">
<template slot-scope="scope">
<i class="el-icon-files" style="cursor: pointer" @click="syncUpdatePasswordUser(scope.row.userId)">重置密码</i>
@ -124,7 +132,8 @@ export default {
adminInfo :{
name: null,
phone:null,
password: null
password: null,
dep:null
},
//
@ -164,6 +173,7 @@ export default {
this.adminInfo.name = "";
this.adminInfo.phone = null;
this.adminInfo.password = "";
this.adminInfo.dep = "";
},
//

106
yarn.lock
View File

@ -1203,6 +1203,11 @@
resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
"@onlyoffice/document-editor-vue@^1.1.1":
version "1.1.1"
resolved "https://registry.npmmirror.com/@onlyoffice/document-editor-vue/-/document-editor-vue-1.1.1.tgz"
integrity sha512-PCc56emC+UyKeyOAvLBeEkI2uqTpXMbN2b5Sumf1N+MDLzvyGTV6AFwxvvLRbUdHJFdNn7+7NwN2CE8wGt0gOQ==
"@soda/friendly-errors-webpack-plugin@^1.7.1":
version "1.8.1"
resolved "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz"
@ -1338,6 +1343,21 @@
dependencies:
"@types/yargs-parser" "*"
"@vue-office/docx@^1.0.0":
version "1.0.0"
resolved "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.0.0.tgz"
integrity sha512-VqCW3yDqnWamuaXEAmpRillh9lfmw4TC8kWElV0utgmOrUINj3bFI3Pbx+6lUeAqBe+EwyJfaEFvpOLe0gILzg==
"@vue-office/excel@^1.0.0":
version "1.0.0"
resolved "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.0.0.tgz"
integrity sha512-b9N8fTcxM/4WO8Zx/uzMLWt9zA3pQCKCX1Tr4i/15c0syABqfdzX0oGkr89/w5wmKcNqprorwFpZgtzqU6xXHQ==
"@vue-office/pdf@^1.0.0":
version "1.0.0"
resolved "https://registry.npmmirror.com/@vue-office/pdf/-/pdf-1.0.0.tgz"
integrity sha512-57w2ekjkg5NC3h40MJldjDe81mZi/TRy/Lee76O1gS6GYOkALk1zhwYx+yUrvVv3G5vfTsWuAYzflkV852UL2A==
"@vue/babel-helper-vue-jsx-merge-props@^1.4.0":
version "1.4.0"
resolved "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz"
@ -1615,6 +1635,11 @@
optionalDependencies:
prettier "^1.18.2 || ^2.0.0"
"@vue/composition-api@^1.7.1":
version "1.7.1"
resolved "https://registry.npmmirror.com/@vue/composition-api/-/composition-api-1.7.1.tgz"
integrity sha512-xDWoEtxGXhH9Ku3ROYX/rzhcpt4v31hpPU5zF3UeVC/qxA3dChmqU8zvTUYoKh3j7rzpNsoFOwqsWG7XPMlaFA==
"@vue/preload-webpack-plugin@^1.1.0":
version "1.1.2"
resolved "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz"
@ -2869,6 +2894,11 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000957, caniuse-lite@^1.0.30001109, can
resolved "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001431.tgz"
integrity sha512-zBUoFU0ZcxpvSt9IU66dXVT/3ctO1cy4y9cscs1szkPlcWb6pasYM144GqrUygUbT+k7cmUCW61cvskjcv0enQ==
canvas-tablet@^2.0.6:
version "2.0.6"
resolved "https://registry.npmmirror.com/canvas-tablet/-/canvas-tablet-2.0.6.tgz"
integrity sha512-rkQo1xLAwhBBxOSzseSZREzM4/voI/hrJxYsDFKTeR1TqBXF4iw4eC+PJqdADAojjkkhF5u6ShNqYCJ9cSRPVg==
capture-exit@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/capture-exit/-/capture-exit-2.0.0.tgz"
@ -3195,7 +3225,7 @@ commander@2.17.x:
resolved "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz"
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
commander@^2.18.0, commander@^2.19.0, commander@^2.20.0:
commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.20.3:
version "2.20.3"
resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
@ -3595,6 +3625,11 @@ cssesc@^3.0.0:
resolved "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
cssfilter@0.0.10:
version "0.0.10"
resolved "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz"
integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==
cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.8:
version "4.0.8"
resolved "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz"
@ -3970,7 +4005,7 @@ doctrine@^3.0.0:
docx-preview@^0.1.14:
version "0.1.14"
resolved "https://registry.npmmirror.com/docx-preview/-/docx-preview-0.1.14.tgz#1fd68b6bef8962fa5d01b4e9ba26dd3b2b7ee884"
resolved "https://registry.npmmirror.com/docx-preview/-/docx-preview-0.1.14.tgz"
integrity sha512-AoMAAEPG7JvI8g68Yti7v8QyzvfLBoQ9bcd/Hn0IkBqtj61kHWN983be5NGrw7m3LYNzW/NZbxv5KbVmyV018g==
dependencies:
jszip ">=3.0.0"
@ -4273,6 +4308,11 @@ es-to-primitive@^1.2.1:
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es6-object-assign@^1.1.0:
version "1.1.0"
resolved "https://registry.npmmirror.com/es6-object-assign/-/es6-object-assign-1.1.0.tgz"
integrity sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz"
@ -4735,6 +4775,11 @@ file-loader@^4.2.0:
loader-utils "^1.2.3"
schema-utils "^2.5.0"
file-saver@^2.0.5:
version "2.0.5"
resolved "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz"
integrity sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==
file-uri-to-path@1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
@ -5001,9 +5046,9 @@ fsevents@^1.2.7:
nan "^2.12.1"
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
version "2.3.3"
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
function-bind@^1.1.1:
version "1.1.1"
@ -5591,7 +5636,7 @@ image-size@^0.5.1:
immediate@~3.0.5:
version "3.0.6"
resolved "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b"
resolved "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz"
integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==
import-cwd@^2.0.0:
@ -6647,7 +6692,7 @@ js-base64@^2.1.9:
js-base64@^3.7.3:
version "3.7.3"
resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.3.tgz#2e784bb0851636bf1e99ef12e4f3a8a8c9b7639f"
resolved "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.3.tgz"
integrity sha512-PAr6Xg2jvd7MCR6Ld9Jg3BmTcjYsHEBx1VlwEwULb/qowPf5VD9kEMagj23Gm7JRnSvE/Da/57nChZjnvL8v6A==
js-beautify@^1.6.12, js-beautify@^1.6.14:
@ -6667,7 +6712,7 @@ js-cookie@2.2.0:
js-md5@^0.7.3:
version "0.7.3"
resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz#b4f2fbb0b327455f598d6727e38ec272cd09c3f2"
resolved "https://registry.npmmirror.com/js-md5/-/js-md5-0.7.3.tgz"
integrity sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==
js-message@1.0.7:
@ -6843,7 +6888,7 @@ jsprim@^1.2.2:
jszip@>=3.0.0:
version "3.10.1"
resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2"
resolved "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz"
integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==
dependencies:
lie "~3.3.0"
@ -6920,7 +6965,7 @@ levn@^0.3.0, levn@~0.3.0:
lie@~3.3.0:
version "3.3.0"
resolved "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a"
resolved "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz"
integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==
dependencies:
immediate "~3.0.5"
@ -7153,6 +7198,13 @@ math-random@^1.0.1:
resolved "https://registry.npmmirror.com/math-random/-/math-random-1.0.4.tgz"
integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==
mavon-editor@^2.10.4:
version "2.10.4"
resolved "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.10.4.tgz"
integrity sha512-CFsBLkgt/KZBDg+SJYe2fyYv4zClY149PiwpH0rDAiiP4ae1XNs0GC8nBsoTeipsHcebDLN1QMkt3bUsnMDjQw==
dependencies:
xss "^1.0.6"
md5.js@^1.3.4:
version "1.3.5"
resolved "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz"
@ -7459,7 +7511,7 @@ mockjs@1.0.1-beta3:
moment@^2.29.4:
version "2.29.4"
resolved "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
resolved "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz"
integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
move-concurrently@^1.0.1:
@ -7517,9 +7569,9 @@ mz@^2.4.0:
thenify-all "^1.0.0"
nan@^2.12.1:
version "2.17.0"
resolved "https://registry.npmmirror.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
version "2.18.0"
resolved "https://registry.npmmirror.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554"
integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==
nanomatch@^1.2.1, nanomatch@^1.2.9:
version "1.2.13"
@ -8773,6 +8825,11 @@ promise-inflight@^1.0.1:
resolved "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz"
integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
promise-polyfill@^6.0.2:
version "6.1.0"
resolved "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz"
integrity sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==
prompts@^2.0.1:
version "2.4.2"
resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz"
@ -10230,6 +10287,14 @@ svgo@^1.0.0:
unquote "~1.1.1"
util.promisify "~1.0.0"
sweetalert@^2.1.2:
version "2.1.2"
resolved "https://registry.npmmirror.com/sweetalert/-/sweetalert-2.1.2.tgz"
integrity sha512-iWx7X4anRBNDa/a+AdTmvAzQtkN1+s4j/JJRWlHpYE8Qimkohs8/XnFcWeYHH2lMA8LRCa5tj2d244If3S/hzA==
dependencies:
es6-object-assign "^1.1.0"
promise-polyfill "^6.0.2"
symbol-tree@^3.2.2:
version "3.2.4"
resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz"
@ -10849,6 +10914,11 @@ vm-browserify@^1.0.1:
resolved "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
vue-demi@^0.14.6:
version "0.14.6"
resolved "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
vue-eslint-parser@^7.0.0:
version "7.11.0"
resolved "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz"
@ -11283,6 +11353,14 @@ xmlchars@^2.1.1:
resolved "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz"
integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
xss@^1.0.6:
version "1.0.14"
resolved "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz"
integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==
dependencies:
commander "^2.20.3"
cssfilter "0.0.10"
xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz"