Compare commits
23 Commits
v0.2.0-alp
...
master
Author | SHA1 | Date |
---|---|---|
Sky_ID | 2aa3ba9dd5 | |
p71924506 | ed68db3b42 | |
p71924506 | 5a3a661034 | |
unknown | 51f7799d3b | |
unknown | e04c5a6440 | |
unknown | 3ab246e20e | |
unknown | fd0bab1801 | |
unknown | 614405bb6f | |
p71924506 | 0a0bf30deb | |
p71924506 | 946a229f8c | |
p71924506 | f216fd8bdd | |
p71924506 | d0abd44fe9 | |
p71924506 | 28f1cfc226 | |
p71924506 | 74c55a05d9 | |
p71924506 | b9323bc1ad | |
p71924506 | 401d5ef394 | |
p71924506 | 9b77466bfe | |
p71924506 | 28f9b06b3d | |
p71924506 | 813bc0d2e4 | |
p71924506 | 6dfbfb127b | |
p71924506 | 43fc4de386 | |
p71924506 | 956b4c4351 | |
p71924506 | cf60266832 |
111
README-zh.md
|
@ -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
|
29
README.md
|
@ -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
|
||||
|
|
|
@ -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-----
|
|
@ -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
|
10
package.json
|
@ -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"
|
||||
},
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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 |
After Width: | Height: | Size: 595 KiB |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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 |
|
@ -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()
|
||||
|
|
|
@ -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>-->
|
||||
<!--<!– <item title="文件管理2.0"/>–>-->
|
||||
<!-- <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>
|
||||
|
|
|
@ -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,按如下方式声明
|
||||
|
|
|
@ -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'}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -62,4 +62,11 @@ div:focus {
|
|||
// main-container global css
|
||||
.app-container {
|
||||
padding: 20px;
|
||||
height: 100vh;
|
||||
|
||||
}
|
||||
|
||||
.app-table-container{
|
||||
padding: 20px;
|
||||
height: 100%;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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>
|
|
@ -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()
|
||||
//重复专家标红
|
||||
|
||||
//取出data中的expertId并添加到highlightedExpertIds数组
|
||||
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>
|
|
@ -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("分类显示失败,已显示全部数据")
|
||||
|
|
|
@ -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 {
|
||||
//不是 直接下载
|
||||
|
||||
//第一个是:Blob、File、Url 可以是二进制流、文件、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>
|
|
@ -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>
|
|
@ -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,14 +44,16 @@
|
|||
</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>-->
|
||||
<!-- <span> password: any</span>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="tips">-->
|
||||
<!-- <span style="margin-right:20px;">phone: admin</span>-->
|
||||
<!-- <span> password: any</span>-->
|
||||
<!-- </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); // 放置token到Cookie
|
||||
|
||||
|
@ -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 {
|
||||
|
|
|
@ -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>
|
|
@ -0,0 +1,13 @@
|
|||
<template>
|
||||
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'MeetingList'
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
|
@ -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,//是否可以填写表格,如果将mode参数设置为edit,则填写表单仅对文档编辑器可用。 默认值与edit或review参数的值一致。
|
||||
// "review": true //跟踪变化
|
||||
},
|
||||
url: option.url,
|
||||
},
|
||||
documentType: this.doctype,
|
||||
editorConfig: {
|
||||
callbackUrl: option.editUrl,//"编辑word后保存时回调的地址,这个api需要自己写了,将编辑后的文件通过这个api保存到自己想要的位置
|
||||
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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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:"-"
|
||||
},
|
||||
]
|
||||
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>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
@ -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"
|
||||
|
|