Browse Source

小鑫初始化提交

master
torsenli 4 years ago
commit
172a2176b3
  1. 3
      .browserslistrc
  2. 22
      .gitignore
  3. 6
      .prettierrc
  4. 21
      LICENSE
  5. 197
      README.md
  6. 196
      README_EN.md
  7. 5
      babel.config.js
  8. 11144
      package-lock.json
  9. 29
      package.json
  10. 5
      postcss.config.js
  11. 17
      public/index.html
  12. 40
      public/table.json
  13. BIN
      screenshots/wms1.png
  14. BIN
      screenshots/wms2.png
  15. BIN
      screenshots/wms3.png
  16. 10
      src/App.vue
  17. 491
      src/api/index.js
  18. 28
      src/assets/css/color-dark.css
  19. 4
      src/assets/css/icon.css
  20. 178
      src/assets/css/main.css
  21. 129
      src/assets/css/sidebar.css
  22. 29
      src/assets/css/theme-green/color-green.css
  23. BIN
      src/assets/css/theme-green/fonts/element-icons.ttf
  24. BIN
      src/assets/css/theme-green/fonts/element-icons.woff
  25. 1
      src/assets/css/theme-green/index.css
  26. BIN
      src/assets/img/accountList.png
  27. BIN
      src/assets/img/creatAccount.png
  28. BIN
      src/assets/img/img.jpg
  29. BIN
      src/assets/img/index_banner.png
  30. BIN
      src/assets/img/index_banner1.png
  31. BIN
      src/assets/img/index_banner2.png
  32. BIN
      src/assets/img/index_banner3.png
  33. BIN
      src/assets/img/index_banner4.png
  34. BIN
      src/assets/img/index_banner5.png
  35. BIN
      src/assets/img/index_banner6.png
  36. BIN
      src/assets/img/index_banner7.png
  37. BIN
      src/assets/img/login-bg.jpg
  38. BIN
      src/assets/img/operationalRole.png
  39. BIN
      src/assets/img/photo.png
  40. BIN
      src/assets/img/preview.png
  41. BIN
      src/assets/img/roleSet.png
  42. BIN
      src/assets/logo.png
  43. 191
      src/components/common/Header.vue
  44. 51
      src/components/common/Home.vue
  45. 354
      src/components/common/Sidebar.vue
  46. 194
      src/components/common/Tags.vue
  47. 6
      src/components/common/bus.js
  48. 143
      src/components/common/dialog/DataReview/IDCard.vue
  49. 104
      src/components/common/dialog/DataReview/application.vue
  50. 29
      src/components/common/dialog/DataReview/assessment.vue
  51. 98
      src/components/common/dialog/DataReview/assetValuation.vue
  52. 108
      src/components/common/dialog/DataReview/assets.vue
  53. 106
      src/components/common/dialog/DataReview/assetsInfo.vue
  54. 101
      src/components/common/dialog/DataReview/bankProve.vue
  55. 124
      src/components/common/dialog/DataReview/basics.vue
  56. 87
      src/components/common/dialog/DataReview/businessInfo.vue
  57. 101
      src/components/common/dialog/DataReview/certificate.vue
  58. 50
      src/components/common/dialog/DataReview/dataNumber.vue
  59. 135
      src/components/common/dialog/DataReview/elseFile.vue
  60. 101
      src/components/common/dialog/DataReview/entrust.vue
  61. 101
      src/components/common/dialog/DataReview/license.vue
  62. 129
      src/components/common/dialog/DataReview/operatorIDCard.vue
  63. 101
      src/components/common/dialog/DataReview/promise.vue
  64. 70
      src/components/common/dialog/content.vue
  65. 397
      src/components/common/dialog/insex.vue
  66. 0
      src/components/common/dialog/sidebar.vue
  67. 80
      src/components/common/directives.js
  68. 30
      src/components/common/i18n.js
  69. 256
      src/components/common/orderDialog/index.vue
  70. 56
      src/components/page/403.vue
  71. 56
      src/components/page/404.vue
  72. 333
      src/components/page/AccountManagement/blacklistManagement.vue
  73. 246
      src/components/page/AccountManagement/businessAudit.vue
  74. 248
      src/components/page/AccountManagement/buyerReview.vue
  75. 369
      src/components/page/AccountManagement/platformSelect.vue
  76. 246
      src/components/page/AccountManagement/thirdAudit.vue
  77. 319
      src/components/page/AssetManagement/assessmentOreder.vue
  78. 355
      src/components/page/AssetManagement/assetQuery.vue
  79. 268
      src/components/page/AssetManagement/delistingAudit.vue
  80. 269
      src/components/page/AssetManagement/groundingAudit.vue
  81. 314
      src/components/page/AssetManagement/payReview.vue
  82. 259
      src/components/page/AssetManagement/releaseAudit.vue
  83. 149
      src/components/page/BaseCharts.vue
  84. 152
      src/components/page/BaseForm.vue
  85. 219
      src/components/page/BaseTable.vue
  86. 507
      src/components/page/Dashboard.vue
  87. 24
      src/components/page/Donate.vue
  88. 36
      src/components/page/DragDialog.vue
  89. 174
      src/components/page/DragList.vue
  90. 46
      src/components/page/I18n.vue
  91. 225
      src/components/page/Icon.vue
  92. 114
      src/components/page/Login.vue
  93. 67
      src/components/page/Markdown.vue
  94. 290
      src/components/page/OperationManagement/announcementConfiguration.vue
  95. 194
      src/components/page/OperationManagement/assetsConfigure.vue
  96. 235
      src/components/page/OperationManagement/bannerConfigure.vue
  97. 228
      src/components/page/OperationManagement/customerOpinion.vue
  98. 236
      src/components/page/OperationManagement/feedConfigure.vue
  99. 38
      src/components/page/Permission.vue
  100. 129
      src/components/page/Tabs.vue

3
.browserslistrc

@ -0,0 +1,3 @@
> 1%
last 2 versions
not ie <= 8

22
.gitignore

@ -0,0 +1,22 @@
.DS_Store
node_modules
/dist
example.html
favicon.ico
# local env files
.env.local
.env.*.local
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw*

6
.prettierrc

@ -0,0 +1,6 @@
{
"tabWidth": 4,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 140
}

21
LICENSE

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016-2019 vue-manage-system
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

197
README.md

@ -0,0 +1,197 @@
# vue-manage-system
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
</a>
<a href="https://github.com/ElemeFE/element">
<img src="https://img.shields.io/badge/element--ui-2.8.2-brightgreen.svg" alt="element-ui">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/releases">
<img src="https://img.shields.io/github/release/lin-xin/vue-manage-system.svg" alt="GitHub release">
</a>
<a href="https://lin-xin.gitee.io/example/work/#/donate">
<img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
</a>
基于 Vue + Element UI 的后台管理系统解决方案。[线上地址](https://lin-xin.gitee.io/example/work/)
> React + Ant Design 的版本正在开发中,仓库地址:[react-manage-system](https://github.com/lin-xin/react-manage-system)
[English document](https://github.com/lin-xin/manage-system/blob/master/README_EN.md)
## 项目截图
### 登录
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms3.png)
### 默认皮肤
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms1.png)
### 浅绿色皮肤
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms2.png)
## 赞赏
请作者喝杯咖啡吧!(微信号:linxin_20)
![微信扫一扫](https://lin-xin.gitee.io/images/weixin.jpg)
## 特别鸣谢
- [实验楼](https://www.shiyanlou.com?source=vue-manage-system)
## 前言
该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(Web Management System)开发。基于 vue.js,使用 vue-cli3 脚手架,引用 Element UI 组件库,方便开发快速简洁好看的组件。分离颜色样式,支持手动切换主题色,而且很方便使用自定义主题色。
## 功能
- [x] Element UI
- [x] 登录/注销
- [x] Dashboard
- [x] 表格
- [x] Tab 选项卡
- [x] 表单
- [x] 图表 :bar_chart:
- [x] 富文本编辑器
- [x] markdown 编辑器
- [x] 图片拖拽/裁剪上传
- [x] 支持切换主题色 :sparkles:
- [x] 列表拖拽排序
- [x] 权限测试
- [x] 404 / 403
- [x] 三级菜单
- [x] 自定义图标
- [x] 可拖拽弹窗
- [x] 国际化
## 安装步骤
```
git clone https://github.com/lin-xin/vue-manage-system.git // 把模板下载到本地
cd vue-manage-system // 进入模板目录
npm install // 安装项目依赖,等待安装完成之后,安装失败可用 cnpm 或 yarn
// 开启服务器,浏览器访问 http://localhost:8080
npm run serve
// 执行构建命令,生成的dist文件夹放在服务器下即可访问
npm run build
```
## 组件使用说明与演示
### vue-schart
vue.js 封装 sChart.js 的图表组件。访问地址:[vue-schart](https://github.com/linxin/vue-schart)
<p><a href="https://www.npmjs.com/package/vue-schart"><img src="https://img.shields.io/npm/dm/vue-schart.svg" alt="Downloads"></a></p>
```html
<template>
<div>
<schart class="wrapper" canvasId="myCanvas" :options="options"></schart>
</div>
</template>
<script>
import Schart from 'vue-schart'; // 导入Schart组件
export default {
data() {
return {
options: {
type: 'bar',
title: {
text: '最近一周各品类销售图'
},
labels: ['周一', '周二', '周三', '周四', '周五'],
datasets: [
{
label: '家电',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 190, 135, 160]
},
{
label: '食品',
data: [144, 198, 150, 235, 120]
}
]
}
};
},
components: {
Schart
}
};
</script>
<style>
.wrapper {
width: 7rem;
height: 5rem;
}
</style>
```
## 其他注意事项
### 一、如果我不想用到上面的某些组件呢,那我怎么在模板中删除掉不影响到其他功能呢?
举个栗子,我不想用 Vue-Quill-Editor 这个组件,那我需要分四步走。
第一步:删除该组件的路由,在目录 src/router/index.js 中,找到引入改组件的路由,删除下面这段代码。
```JavaScript
{
// 富文本编辑器组件
path: '/editor',
component: resolve => require(['../components/page/VueEditor.vue'], resolve)
},
```
第二步:删除引入该组件的文件。在目录 src/components/page/ 删除 VueEditor.vue 文件。
第三步:删除该页面的入口。在目录 src/components/common/Sidebar.vue 中,找到该入口,删除下面这段代码。
```js
{
index: 'editor',
title: '富文本编辑器'
},
```
第四步:卸载该组件。执行以下命令:
npm un vue-quill-editor -S
完成。
### 二、如何切换主题色呢?
第一步:打开 src/main.js 文件,找到引入 element 样式的地方,换成浅绿色主题。
```javascript
import 'element-ui/lib/theme-default/index.css'; // 默认主题
// import './assets/css/theme-green/index.css'; // 浅绿色主题
```
第二步:打开 src/App.vue 文件,找到 style 标签引入样式的地方,切换成浅绿色主题。
```javascript
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css"; /*深色主题*/
/*@import "./assets/css/theme-green/color-green.css"; !*浅绿色主题*!*/
```
第三步:打开 src/components/common/Sidebar.vue 文件,找到 el-menu 标签,把 background-color/text-color/active-text-color 属性去掉即可。
## License
[MIT](https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE)

196
README_EN.md

@ -0,0 +1,196 @@
# vue-manage-system
<a href="https://github.com/vuejs/vue">
<img src="https://img.shields.io/badge/vue-2.6.10-brightgreen.svg" alt="vue">
</a>
<a href="https://github.com/ElemeFE/element">
<img src="https://img.shields.io/badge/element--ui-2.8.2-brightgreen.svg" alt="element-ui">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE">
<img src="https://img.shields.io/github/license/mashape/apistatus.svg" alt="license">
</a>
<a href="https://github.com/lin-xin/vue-manage-system/releases">
<img src="https://img.shields.io/github/release/lin-xin/vue-manage-system.svg" alt="GitHub release">
</a>
<a href="https://lin-xin.gitee.io/example/work/#/donate">
<img src="https://img.shields.io/badge/%24-donate-ff69b4.svg" alt="donate">
</a>
The web management system solution based on Vue2 and Element-UI。[live demo](https://lin-xin.gitee.io/example/work/)
## Donation
![WeChat](https://lin-xin.gitee.io/images/weixin.jpg)
## Preface
The scheme as a set of multi-function background frame templates, suitable for most of the WEB management system development. Convenient development fast simple good components based on Vue2 and Element-UI. Color separation of color style, support manual switch themes, and it is convenient to use a custom theme color.
## Function
- [x] Element-UI
- [x] Login/Logout
- [x] Dashboard
- [x] Table
- [x] Tabs
- [x] From
- [x] Chart :bar_chart:
- [x] Editor
- [x] Markdown
- [x] Upload pictures by clipping or dragging
- [x] Support manual switch themes :sparkles:
- [x] List drag sort
- [x] Permission
- [x] 404 / 403
- [x] Three level menu
- [x] Custom icon
## Installation steps
git clone https://github.com/lin-xin/vue-manage-system.git // Clone templates
cd vue-manage-system // Enter template directory
npm install // Installation dependency
## Local development
// Open server and access http://localhost:8080 in browser
npm run serve
## Constructing production
// Constructing project
npm run build
## Component description and presentation
### vue-schart
Vue.js wrapper for sChart.js. Github : [vue-schart](https://github.com/linxin/vue-schart)
```html
<template>
<div>
<schart class="wrapper" canvasId="myCanvas" :options="options"></schart>
</div>
</template>
<script>
import Schart from 'vue-schart'; // 导入Schart组件
export default {
data() {
return {
options: {
type: 'bar',
title: {
text: '最近一周各品类销售图'
},
labels: ['周一', '周二', '周三', '周四', '周五'],
datasets: [
{
label: '家电',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 190, 135, 160]
},
{
label: '食品',
data: [144, 198, 150, 235, 120]
}
]
}
};
},
components: {
Schart
}
};
</script>
<style>
.wrapper {
width: 7rem;
height: 5rem;
}
</style>
```
### element-ui
A desktop component library based on vue.js2.0 . Github : [element](http://element.eleme.io/#/zh-CN/component/layout)
### Vue-Quill-Editor
Quill editor component for Vue2. Github : [vue-quill-editor](https://github.com/surmon-china/vue-quill-editor)
### mavonEditor
A markdown editor based on Vue that supports a variety of personalized features. Github: [mavonEditor](https://github.com/hinesboy/mavonEditor)
### vue-cropperjs
A Vue wrapper component for cropperjs. Github: [vue-cropperjs](https://github.com/Agontuk/vue-cropperjs)
## Notice
### 一、If I don't want to use some components, how can I delete it?
For example, I don't want to use the Vue-Quill-Editor component, I need to take four steps.
The first step to remove the component of the routing. Enter 'src/router/index.js' and delete the code below.
```JavaScript
{
path: '/editor',
component: resolve => require(['../components/page/VueEditor.vue'], resolve)
},
```
Second,delete the component files. Enter 'src/components/page/' and delete 'VueEditor.vue' file.
The third step is to delete the entry. Enter 'src/components/common/Sidebar.vue' and delete the code below.
```js
{
index: 'editor',
title: '富文本编辑器'
},
```
Finally, uninstall this component.
npm un vue-quill-editor -S
Complete!
### 二、How to switch themes?
The first step to enter 'src/main.js' and change into green theme.
```javascript
import 'element-ui/lib/theme-default/index.css'; // default theme
// import '../static/css/theme-green/index.css'; // green theme
```
The second step to enter 'src/App.vue' and change into green theme.
```javascript
@import "../static/css/main.css";
@import "../static/css/color-dark.css"; /*深色主题*/
/*@import "../static/css/theme-green/color-green.css"; !*浅绿色主题*!*/
```
Finally,enter 'src/components/common/Sidebar.vue' and find el-menu Tags,delete 'background-color/text-color/active-text-color'。
## Screenshot
### Default theme
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms1.png)
### Green theme
![Image text](https://github.com/lin-xin/manage-system/raw/master/screenshots/wms2.png)
## License
[MIT](https://github.com/lin-xin/vue-manage-system/blob/master/LICENSE)

5
babel.config.js

@ -0,0 +1,5 @@
module.exports = {
presets: [
'@vue/app'
]
}

11144
package-lock.json

File diff suppressed because it is too large

29
package.json

@ -0,0 +1,29 @@
{
"name": "vue-manage-system",
"version": "4.2.0",
"private": true,
"scripts": {
"dev": "npm run serve",
"serve": "vue-cli-service serve",
"build": "vue-cli-service build"
},
"dependencies": {
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"element-ui": "^2.11.0",
"mavon-editor": "^2.6.17",
"moment": "^2.29.1",
"vue": "^2.6.10",
"vue-cropperjs": "^3.0.0",
"vue-i18n": "^8.10.0",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.0.3",
"vue-schart": "^2.0.0",
"vuedraggable": "^2.17.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^3.9.0",
"@vue/cli-service": "^3.9.0",
"vue-template-compiler": "^2.6.10"
}
}

5
postcss.config.js

@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

17
public/index.html

@ -0,0 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
<link rel="stylesheet" href="//at.alicdn.com/t/font_830376_qzecyukz0s.css">
<title>vue-manage-system</title>
</head>
<body>
<noscript>
<strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

40
public/table.json

@ -0,0 +1,40 @@
{
"list": [{
"id": 1,
"name": "张三",
"money": 123,
"address": "广东省东莞市长安镇",
"state": "成功",
"date": "2019-11-1",
"thumb": "https://lin-xin.gitee.io/images/post/wms.png"
},
{
"id": 2,
"name": "李四",
"money": 456,
"address": "广东省广州市白云区",
"state": "成功",
"date": "2019-10-11",
"thumb": "https://lin-xin.gitee.io/images/post/node3.png"
},
{
"id": 3,
"name": "王五",
"money": 789,
"address": "湖南省长沙市",
"state": "失败",
"date": "2019-11-11",
"thumb": "https://lin-xin.gitee.io/images/post/parcel.png"
},
{
"id": 4,
"name": "赵六",
"money": 1011,
"address": "福建省厦门市鼓浪屿",
"state": "成功",
"date": "2019-10-20",
"thumb": "https://lin-xin.gitee.io/images/post/notice.png"
}
],
"pageTotal": 4
}

BIN
screenshots/wms1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
screenshots/wms2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

BIN
screenshots/wms3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

10
src/App.vue

@ -0,0 +1,10 @@
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<style>
@import "./assets/css/main.css";
@import "./assets/css/color-dark.css"; /*深色主题*/
/*@import "./assets/css/theme-green/color-green.css"; 浅绿色主题*/
</style>

491
src/api/index.js

@ -0,0 +1,491 @@
import request from '../utils/request';
// 登录
export const login = query => {
return request({
url: 'api/Passport/login',
method: 'get',
params: query
});
};
// 账户管理--交易平台账户查询
// 平台账号列表查询
export const platformAccountList = query => {
return request({
url: 'api/admin.Account/platform_account_list',
method: 'get',
params: query
});
};
// 平台账号列表查询
export const operationRecord = query => {
return request({
url: 'api/admin.Account/get_user_operation_log',
method: 'get',
params: query
});
};
// 查询账号黑名单
export const getBlack = query => {
return request({
url: 'api/admin.Account/getBlack',
method: 'get',
params: query
});
};
// 审核人员下拉数据
export const auditList = query => {
return request({
url: 'api/admin.Config/auditList',
method: 'get',
params: query
});
};
// 资料审核(改)(可看平台的资料查询)
export const getAccountData = query => {
return request({
url: 'api/admin.Account/getAccountData',
method: 'get',
params: query
});
};
// 修改黑名单
export const updateBlackList = query => {
return request({
url: 'api/admin.Account/updateBlackList',
method: 'post',
data: query
});
};
// 审核(改)
export const accountCheck = query => {
return request({
url: 'api/admin.Account/accountCheck',
method: 'post',
data: query
});
};
// 账户管理--买方开户审核
// 审核列表
export const applyList = query => {
return request({
url: 'api/admin.Account/applyList',
method: 'get',
params: query
});
};
// 账户管理--黑名单管理
// 黑名单列表
export const blackList = query => {
return request({
url: 'api/admin.Account/blackList',
method: 'get',
params: query
});
};
/* 资产管理 */
//查看资料
export const getAssetInfo = query => {
return request({
url: 'api/admin.Asset/getAssetInfo',
method: 'get',
params: query
});
};
/* 资产管理 --资产信息查询*/
//资产信息查询列表
export const getAccountList = query => {
return request({
url: 'api/admin.Asset/assetList',
method: 'get',
params: query
});
};
//资产上架
export const addedAsset = query => {
return request({
url: 'api/admin.Asset/addedAsset',
method: 'post',
data: query
});
};
//资产下架
export const coerceRemove = query => {
return request({
url: 'api/admin.Asset/coerceRemove',
method: 'post',
data: query
});
};
//上传资产评估报告
export const assetAssessReport = query => {
return request({
url: 'api/admin.Asset/assetAssessReport',
method: 'post',
data: query
});
};
//资产生成编号
export const createAssetNumber = query => {
return request({
url: 'api/admin.Asset/create_asset_number',
method: 'post',
data: query
});
};
/* 资产管理 --资产挂牌审核*/
//资产审核列表 废弃
export const accountApplyList = query => {
return request({
url: 'api/admin.Asset/cartellinoList',
method: 'get',
params: query
});
};
/* 资产管理 --资产挂牌审核*/
//资产审核列表
export const assetCheckList = query => {
return request({
url: 'api/admin.Asset/assetCheckList',
method: 'get',
params: query
});
};
//支付列表
export const payList = query => {
return request({
url: 'api/admin.Asset/payList',
method: 'get',
params: query
});
};
// 支付审核
export const payCheck = query => {
return request({
url: 'api/admin.Asset/payCheck',
method: 'post',
data: query
});
};
// 资产挂牌审核 废弃
export const cartellinoCheck = query => {
return request({
url: 'api/admin.Asset/cartellinoCheck',
method: 'post',
data: query
});
};
// 资产审核
export const assertCheck = query => {
return request({
url: 'api/admin.Asset/assertCheck',
method: 'post',
data: query
});
};
/* 资产管理 --资产发布审核*/
//资产审核列表
export const sendList = query => {
return request({
url: 'api/admin.Asset/sendList',
method: 'get',
params: query
});
};
// 资产发布审核
export const sendCheck = query => {
return request({
url: 'api/admin.Asset/sendCheck',
method: 'post',
data: query
});
};
// 摘牌申请审核
export const checkAssetOut = query => {
return request({
url: 'api/admin.Asset/checkAssetOut',
method: 'post',
data: query
});
};
//摘牌申请审核列表
export const outCheckList = query => {
return request({
url: 'api/admin.Asset/outCheckList',
method: 'get',
params: query
});
};
/* 交易管理 */
/* 交易管理 --交易订单查询*/
//交易订单查询列表
export const orderList = query => {
return request({
url: 'api/admin.Order/list',
method: 'get',
params: query
});
};
//订单详情
export const orderInfo = query => {
return request({
url: 'api/admin.Order/orderInfo',
method: 'get',
params: query
});
};
// 订单审核付款
export const orderCheckPay = query => {
return request({
url: 'api/admin.Order/orderCheckPay',
method: 'post',
data: query
});
};
// 确认签约合同
export const orderConfirmContract = query => {
return request({
url: 'api/admin.Order/orderConfirmContract',
method: 'post',
data: query
});
};
// 结算订单
export const settlement = query => {
return request({
url: 'api/admin.Order/settlement',
method: 'post',
data: query
});
};
// 关闭订单
export const close = query => {
return request({
url: 'api/admin.Order/close',
method: 'post',
data: query
});
};
/* 交易管理 --待支付订单*/
//订单列表
/* 运营管理 */
/* 运营管理 --通知公告配置*/
//获取通知公告配置
export const getNoticeList = query => {
return request({
url: 'api/admin.Operation/getNoticeList',
method: 'get',
params: query
});
};
//获取单个通知公告
export const getNoticeFind = query => {
return request({
url: 'api/admin.Operation/getNoticeFind',
method: 'get',
params: query
});
};
//设置通知公告配置
export const setNotice = query => {
return request({
url: 'api/admin.Operation/setNotice',
method: 'post',
data: query
});
};
//修改通知公告配置
export const updateNotice = query => {
return request({
url: 'api/admin.Operation/updateNotice',
method: 'post',
data: query
});
};
//删除通知公告
export const deleteNotice = query => {
return request({
url: 'api/admin.Operation/deleteNotice',
method: 'post',
data: query
});
};
/* 运营管理 --banner配置*/
//获取banner配置
export const getBanner = query => {
return request({
url: 'api/admin.Operation/getBanner',
method: 'get',
params: query
});
};
//banner配置
export const setBanner = query => {
return request({
url: 'api/admin.Operation/setBanner',
method: 'post',
data: query
});
};
/* 运营管理 --feed配置*/
//获取feed配置
export const getFeed = query => {
return request({
url: 'api/admin.Operation/getFeed',
method: 'get',
params: query
});
};
//feed配置
export const setFeed = query => {
return request({
url: 'api/admin.Operation/setFeed',
method: 'post',
data: query
});
};
/* 运营管理 --资产推荐配置*/
//获取资产推荐配置
export const getRecommend = query => {
return request({
url: 'api/admin.Operation/getRecommend',
method: 'get',
params: query
});
};
/* 运营管理 --客户意见处理*/
//客户意见列表
export const opinionList = query => {
return request({
url: 'api/admin.Operation/opinionList',
method: 'get',
params: query
});
};
/* 平台管理 */
/* 平台管理 --运营账号管理*/
/* 平台管理 --运营账号管理--账号列表*/
//账号列表
export const getAdminlist = query => {
return request({
url: 'api/admin.User/getAdminlist',
method: 'get',
params: query
});
};
/* 平台管理 --运营账号管理--运营角色*/
//部门名称列表
export const departmentList = query => {
return request({
url: 'api/admin.User/departmentList',
method: 'get',
params: query
});
};
//部门职位列表
export const positionList = query => {
return request({
url: 'api/admin.User/positionList',
method: 'get',
params: query
});
};
//获取部门以及职位
export const getDepartment = query => {
return request({
url: 'api/admin.User/getDepartment',
method: 'get',
params: query
});
};
//获取角色
export const grouplist = query => {
return request({
url: 'api/admin.User/grouplist',
method: 'get',
params: query
});
};
//修改部门
export const updateDepartment = query => {
return request({
url: 'api/admin.User/updateDepartment',
method: 'post',
data: query
});
};
//添加管理员
export const addAdmin = query => {
return request({
url: 'api/admin.User/addAdmin',
method: 'post',
data: query
});
};
//修改管理员
export const editAdmin = query => {
return request({
url: 'api/admin.User/editAdmin',
method: 'post',
data: query
});
};
//修改管理员密码
export const editAdminPass = query => {
return request({
url: 'api/admin.User/editAdminPass',
method: 'post',
data: query
});
};
//获取角色
export const editAdminChange = query => {
return request({
url: 'api/admin.User/editAdminChange',
method: 'get',
params: query
});
};
// 获取文件类型
export const getFileType = query => {
return request({
url: '/api/Index/getFileType',
method: 'get',
params: query
});
};

28
src/assets/css/color-dark.css

@ -0,0 +1,28 @@
.header{
background-color: #242f42;
}
.login-wrap{
background: #324157;
}
.plugins-tips{
background: #eef1f6;
}
.plugins-tips a{
color: #20a0ff;
}
.el-upload--text em {
color: #20a0ff;
}
.pure-button{
background: #20a0ff;
}
.tags-li.active {
border: 1px solid #409EFF;
background-color: #409EFF;
}
.message-title{
color: #20a0ff;
}
.collapse-btn:hover{
background: rgb(40,52,70);
}

4
src/assets/css/icon.css

@ -0,0 +1,4 @@
[class*=" el-icon-lx"], [class^=el-icon-lx] {
font-family: lx-iconfont!important;
}

178
src/assets/css/main.css

@ -0,0 +1,178 @@
* {
margin: 0;
padding: 0;
}
html,
body,
#app,
.wrapper {
width: 100%;
height: 100%;
overflow: hidden;
}
body {
font-family: 'PingFang SC', "Helvetica Neue", Helvetica, "microsoft yahei", arial, STHeiTi, sans-serif;
}
a {
text-decoration: none
}
.content-box {
position: absolute;
left: 250px;
right: 0;
top: 70px;
bottom: 0;
padding-bottom: 30px;
-webkit-transition: left .3s ease-in-out;
transition: left .3s ease-in-out;
background: #f0f0f0;
}
.content {
width: auto;
height: 100%;
padding: 10px;
overflow-y: scroll;
box-sizing: border-box;
}
.content-collapse {
left: 65px;
}
.container {
padding: 30px;
background: #fff;
border: 1px solid #ddd;
border-radius: 5px;
}
.crumbs {
margin: 10px 0;
}
.el-table th {
background-color: #f5f7fa !important;
}
.pagination {
margin: 20px 0;
text-align: right;
}
.plugins-tips {
padding: 20px 10px;
margin-bottom: 20px;
}
.el-button+.el-tooltip {
margin-left: 10px;
}
.el-table tr:hover {
background: #f6faff;
}
.mgb20 {
margin-bottom: 20px;
}
.move-enter-active,
.move-leave-active {
transition: opacity .5s;
}
.move-enter,
.move-leave {
opacity: 0;
}
/*BaseForm*/
.form-box {
width: 600px;
}
.form-box .line {
text-align: center;
}
.el-time-panel__content::after,
.el-time-panel__content::before {
margin-top: -7px;
}
.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default) {
padding-bottom: 0;
}
/*Upload*/
.pure-button {
width: 150px;
height: 40px;
line-height: 40px;
text-align: center;
color: #fff;
border-radius: 3px;
}
.g-core-image-corp-container .info-aside {
height: 45px;
}
.el-upload--text {
background-color: #fff;
border: 1px dashed #d9d9d9;
border-radius: 6px;
box-sizing: border-box;
width: 360px;
height: 180px;
text-align: center;
cursor: pointer;
position: relative;
overflow: hidden;
}
.el-upload--text .el-icon-upload {
font-size: 67px;
color: #97a8be;
margin: 40px 0 16px;
line-height: 50px;
}
.el-upload--text {
color: #97a8be;
font-size: 14px;
text-align: center;
}
.el-upload--text em {
font-style: normal;
}
/*VueEditor*/
.ql-container {
min-height: 400px;
}
.ql-snow .ql-tooltip {
transform: translateX(117.5px) translateY(10px) !important;
}
.editor-btn {
margin-top: 20px;
}
/*markdown*/
.v-note-wrapper .v-note-panel {
min-height: 500px;
}

129
src/assets/css/sidebar.css

@ -0,0 +1,129 @@
.body1{
margin-left: 20px;
width: 1050px;
height: 500px;
}
.body2{
display: flex;
width: 1050px;
justify-content: space-between;
}
.title{
font-size: 16px;
margin-bottom: 15px;
}
.img_span{
margin-top: 15px;
font-size: 14px;
color: #4E73E4;
text-decoration: underline;
width: 130px;
display: flex;
justify-content: space-between;
cursor: pointer;
}
.img_span1{
font-size: 14px;
color: #4E73E4;
cursor: pointer;
width: 100%;
}
.img_span1>span{
display: inline-block;
margin-right: 15px;
margin-bottom: 15px;
text-decoration: underline;
}
.span_blue{
font-size: 14px;
color: #4E73E4;
cursor: pointer;
text-decoration: underline;
}
.span_left{
display: inline-block;
margin-left: 15px;
}
.upload_span{
color: #4E73E4;
text-decoration: underline;
}
.download{
font-size: 14px;
color: #4E73E4;
text-decoration: underline;
margin-bottom: 10px;
}
.file_img{
width: 600px;
height: 340px;
}
.file_img1{
width: 500px;
height: 283px;
}
.input_item{
font-size: 14px;
color: #555555;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.input_item>span{
display: inline-block;
width: 130px;
}
.input_item >.el-input{
width: 300px;
margin-left: 10px;
}
.p_info{
font-size: 14px;
color: #555555;
margin-top: 10px;
}
.else_file{
display: flex;
}
.else_file_right{
margin-left: 50px;
height: 400px;
width: 350px;
overflow-x: hidden;
overflow-y: scroll;
}
.else_files{
display: flex;
width: 300px;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
}
.else_files .img_span{
margin-top: 0;
}
.dataNumber{
display: flex;
align-items: center;
}
.dataNumber_input{
width: 160px;
margin-left: 15px;
}
.dataNumber_input1{
width: 30px;
margin-left: 15px;
}
.dataNumber_input1 .el-input__inner{
padding-left: 10px;
}
.margin_right{
margin-right: 15px;
}
.el-image-viewer__wrapper{
z-index: 2018;
}

29
src/assets/css/theme-green/color-green.css

@ -0,0 +1,29 @@
.header{
background-color: #07c4a8;
}
.login-wrap{
background: rgba(56, 157, 170, 0.82);;
}
.plugins-tips{
background: #f2f2f2;
}
.plugins-tips a{
color: #00d1b2;
}
.el-upload--text em {
color: #00d1b2;
}
.pure-button{
background: #00d1b2;
}
.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
background-color: #00d1b2 !important;
border-color: #00d1b2 !important;
}
.tags-li.active {
border: 1px solid #00d1b2;
background-color: #00d1b2;
}
.collapse-btn:hover{
background: #00d1b2;
}

BIN
src/assets/css/theme-green/fonts/element-icons.ttf

Binary file not shown.

BIN
src/assets/css/theme-green/fonts/element-icons.woff

Binary file not shown.

1
src/assets/css/theme-green/index.css

File diff suppressed because one or more lines are too long

BIN
src/assets/img/accountList.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/assets/img/creatAccount.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
src/assets/img/img.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
src/assets/img/index_banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
src/assets/img/index_banner1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
src/assets/img/index_banner2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
src/assets/img/index_banner3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
src/assets/img/index_banner4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
src/assets/img/index_banner5.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
src/assets/img/index_banner6.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

BIN
src/assets/img/index_banner7.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/assets/img/login-bg.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
src/assets/img/operationalRole.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
src/assets/img/photo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
src/assets/img/preview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

BIN
src/assets/img/roleSet.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
src/assets/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

191
src/components/common/Header.vue

@ -0,0 +1,191 @@
<template>
<div class="header">
<!-- 折叠按钮 -->
<div class="collapse-btn" @click="collapseChage">
<i v-if="!collapse" class="el-icon-s-fold"></i>
<i v-else class="el-icon-s-unfold"></i>
</div>
<div class="logo">后台管理系统</div>
<div class="header-right">
<div class="header-user-con">
<!-- 全屏显示 -->
<div class="btn-fullscreen" @click="handleFullScreen">
<el-tooltip effect="dark" :content="fullscreen?`取消全屏`:`全屏`" placement="bottom">
<i class="el-icon-rank"></i>
</el-tooltip>
</div>
<!-- 消息中心 -->
<!-- <div class="btn-bell">
<el-tooltip
effect="dark"
:content="message?`有${message}条未读消息`:`消息中心`"
placement="bottom"
>
<router-link to="/tabs">
<i class="el-icon-bell"></i>
</router-link>
</el-tooltip>
<span class="btn-bell-badge" v-if="message"></span>
</div> -->
<!-- 用户头像 -->
<div class="user-avator">
<img src="../../assets/img/img.jpg" />
</div>
<!-- 用户名下拉菜单 -->
<el-dropdown class="user-name" trigger="click" @command="handleCommand">
<span class="el-dropdown-link">
{{username}}
<i class="el-icon-caret-bottom"></i>
</span>
<el-dropdown-menu slot="dropdown">
<!-- <a href="https://github.com/lin-xin/vue-manage-system" target="_blank">
<el-dropdown-item>项目仓库</el-dropdown-item>
</a> -->
<el-dropdown-item divided command="loginout">退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</div>
</template>
<script>
import bus from '../common/bus';
export default {
data() {
return {
collapse: false,
fullscreen: false,
name: 'linxin',
message: 2
};
},
computed: {
username() {
let username = localStorage.getItem('ms_username');
return username ? username : this.name;
}
},
methods: {
//
handleCommand(command) {
if (command == 'loginout') {
localStorage.removeItem('ms_username');
this.$router.push('/login');
}
},
//
collapseChage() {
this.collapse = !this.collapse;
bus.$emit('collapse', this.collapse);
},
//
handleFullScreen() {
let element = document.documentElement;
if (this.fullscreen) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
// IE11
element.msRequestFullscreen();
}
}
this.fullscreen = !this.fullscreen;
}
},
mounted() {
if (document.body.clientWidth < 1500) {
this.collapseChage();
}
}
};
</script>
<style scoped>
.header {
position: relative;
box-sizing: border-box;
width: 100%;
height: 70px;
font-size: 22px;
color: #fff;
}
.collapse-btn {
float: left;
padding: 0 21px;
cursor: pointer;
line-height: 70px;
}
.header .logo {
float: left;
width: 250px;
line-height: 70px;
}
.header-right {
float: right;
padding-right: 50px;
}
.header-user-con {
display: flex;
height: 70px;
align-items: center;
}
.btn-fullscreen {
transform: rotate(45deg);
margin-right: 5px;
font-size: 24px;
}
.btn-bell,
.btn-fullscreen {
position: relative;
width: 30px;
height: 30px;
text-align: center;
border-radius: 15px;
cursor: pointer;
}
.btn-bell-badge {
position: absolute;
right: 0;
top: -2px;
width: 8px;
height: 8px;
border-radius: 4px;
background: #f56c6c;
color: #fff;
}
.btn-bell .el-icon-bell {
color: #fff;
}
.user-name {
margin-left: 10px;
}
.user-avator {
margin-left: 20px;
}
.user-avator img {
display: block;
width: 40px;
height: 40px;
border-radius: 50%;
}
.el-dropdown-link {
color: #fff;
cursor: pointer;
}
.el-dropdown-menu__item {
text-align: center;
}
</style>

51
src/components/common/Home.vue

@ -0,0 +1,51 @@
<template>
<div class="wrapper">
<v-head></v-head>
<v-sidebar></v-sidebar>
<div class="content-box" :class="{'content-collapse':collapse}">
<v-tags></v-tags>
<div class="content">
<transition name="move" mode="out-in">
<keep-alive :include="tagsList">
<router-view></router-view>
</keep-alive>
</transition>
<el-backtop target=".content"></el-backtop>
</div>
</div>
</div>
</template>
<script>
import vHead from './Header.vue';
import vSidebar from './Sidebar.vue';
import vTags from './Tags.vue';
import bus from './bus';
export default {
data() {
return {
tagsList: [],
collapse: false
};
},
components: {
vHead,
vSidebar,
vTags
},
created() {
bus.$on('collapse-content', msg => {
this.collapse = msg;
});
// 使keep-alive
bus.$on('tags', msg => {
let arr = [];
for (let i = 0, len = msg.length; i < len; i++) {
msg[i].name && arr.push(msg[i].name);
}
this.tagsList = arr;
});
}
};
</script>

354
src/components/common/Sidebar.vue

@ -0,0 +1,354 @@
<template>
<div class="sidebar">
<el-menu
class="sidebar-el-menu"
:default-active="onRoutes"
:collapse="collapse"
background-color="#324157"
text-color="#bfcbd9"
active-text-color="#20a0ff"
unique-opened
router
>
<template v-for="item in items">
<template v-if="item.subs">
<el-submenu :index="item.index" :key="item.index">
<template slot="title">
<i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</template>
<template v-for="subItem in item.subs">
<el-submenu
v-if="subItem.subs"
:index="subItem.index"
:key="subItem.index"
>
<template slot="title">{{ subItem.title }}</template>
<el-menu-item
v-for="(threeItem,i) in subItem.subs"
:key="i"
:index="threeItem.index"
>{{ threeItem.title }}</el-menu-item>
</el-submenu>
<el-menu-item
v-else
:index="subItem.index"
:key="subItem.index"
>{{ subItem.title }}</el-menu-item>
</template>
</el-submenu>
</template>
<template v-else>
<el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</el-menu-item>
</template>
</template>
</el-menu>
</div>
</template>
<script>
import bus from '../common/bus';
export default {
data() {
return {
collapse: false,
items: [
{
icon: 'el-icon-lx-home',
index: '/dashboard',
title: '系统首页'
},
{
icon: 'el-icon-lx-cascades',
index: '1',
title: '账户管理',
subs:[
{
index: '/platformSelect',
title: '交易平台账户查询'
},
{
index: '/buyerReview',
title: '摘牌方开户审核'
},
{
index: '/businessAudit',
title: '挂牌方入驻审核'
},
{
index: '/thirdAudit',
title: '第三方服务机构审核'
},
{
index: '/blacklistManagement',
title: '黑名单管理'
},
]
},
{
icon: 'el-icon-lx-copy',
index: '2',
title: '资产管理',
subs:[
{
index: '/assetQuery',
title: '资产信息查询'
},
{
index: '/groundingAudit',
title: '资产审核'
},
{
index: '/assessmentOreder',
title: '资产评估订单'
},
{
index: '/delistingAudit',
title: '摘牌申请审核'
},
{
index: '/payReview',
title: '挂牌费支付审核'
},
// {
// index: '/releaseAudit',
// title: ''
// },
]
},
// {
// icon: 'el-icon-lx-copy',
// index: 'tabs',
// title: 'tab'
// },
{
icon: 'el-icon-lx-calendar',
index: '3',
title: '交易管理',
subs:[
{
index: '/transactionQuery',
title: '交易订单查询'
},
{
index: '/TobepaidOrder',
title: '待付款订单'
},
{
index: '/publicityOrder',
title: '待审核付款订单'
},
{
index: '/settlementOrder',
title: '待上传签约合同订单'
},
{
index: '/refundOrderExamine',
title: '待确认签约合同订单'
},
{
index: '/toBeDelivered',
title: '待交付订单'
},
{
index: '/toBeConfirmDelivered',
title: '待确认交付订单'
},
{
index: '/toBeSettled',
title: '待结算订单'
},
{
index: '/completed',
title: '已完成订单'
},
{
index: '/closed',
title: '已关闭订单'
},
]
},
{
icon: 'el-icon-lx-calendar',
index: '4',
title: '运营管理',
subs:[
{
index: '/customerOpinion',
title: '客户意见处理'
},
{
index: '/bannerConfigure',
title: 'banner配置'
},
{
index: '/feedConfigure',
title: 'feed配置'
},
{
index: '/announcementConfiguration',
title: '通知公告配置'
},
{
index: '/assetsConfigure',
title: '资产推荐配置'
}
]
},
{
icon: 'el-icon-lx-calendar',
index: '5',
title: '数据管理',
subs:[
{
index: '/transactionCheck',
title: '交易账单核对'
},
{
index: '/transactionAnalysis',
title: '账户交易分析'
},
// {
// index: '/revenueStatistics',
// title: ''
// }
]
},
{
icon: 'el-icon-lx-calendar',
index: '/platform ',
title: '平台管理',
subs:[
{
index: '/platform/operationAccountManagement',
title: '运营账号管理'
},
{
index: '/platformNotification',
title: '平台通知管理'
},
// {
// index: '/revenueStatistics',
// title: ''
// }
]
},
// {
// icon: 'el-icon-lx-calendar',
// index: '3',
// title: '',
// subs: [
// {
// index: 'form',
// title: ''
// },
// {
// index: '3-2',
// title: '',
// subs: [
// {
// index: 'editor',
// title: ''
// },
// {
// index: 'markdown',
// title: 'markdown'
// }
// ]
// },
// {
// index: 'upload',
// title: ''
// }
// ]
// },
// {
// icon: 'el-icon-lx-emoji',
// index: 'icon',
// title: ''
// },
// {
// icon: 'el-icon-pie-chart',
// index: 'charts',
// title: 'schart'
// },
// {
// icon: 'el-icon-rank',
// index: '6',
// title: '',
// subs: [
// {
// index: 'drag',
// title: ''
// },
// {
// index: 'dialog',
// title: ''
// }
// ]
// },
// {
// icon: 'el-icon-lx-global',
// index: 'i18n',
// title: ''
// },
// {
// icon: 'el-icon-lx-warn',
// index: '7',
// title: '',
// subs: [
// {
// index: 'permission',
// title: ''
// },
// {
// index: '404',
// title: '404'
// }
// ]
// },
// {
// icon: 'el-icon-lx-redpacket_fill',
// index: '/donate',
// title: ''
// }
]
};
},
computed: {
onRoutes() {
return this.$route.path.replace('/', '');
}
},
created() {
// Event Bus
bus.$on('collapse', msg => {
this.collapse = msg;
bus.$emit('collapse-content', msg);
});
},
};
</script>
<style scoped>
.sidebar {
display: block;
position: absolute;
left: 0;
top: 70px;
bottom: 0;
overflow-y: scroll;
}
.sidebar::-webkit-scrollbar {
width: 0;
}
.sidebar-el-menu:not(.el-menu--collapse) {
width: 250px;
}
.sidebar > ul {
height: 100%;
}
</style>

194
src/components/common/Tags.vue

@ -0,0 +1,194 @@
<template>
<div class="tags" v-if="showTags">
<ul>
<li class="tags-li" v-for="(item,index) in tagsList" :class="{'active': isActive(item.path)}" :key="index">
<router-link :to="item.path" class="tags-li-title">
{{item.title}}
</router-link>
<span class="tags-li-icon" @click="closeTags(index)"><i class="el-icon-close"></i></span>
</li>
</ul>
<div class="tags-close-box">
<el-dropdown @command="handleTags">
<el-button size="mini" type="primary">
标签选项<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu size="small" slot="dropdown">
<el-dropdown-item command="other">关闭其他</el-dropdown-item>
<el-dropdown-item command="all">关闭所有</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</div>
</template>
<script>
import bus from './bus';
export default {
data() {
return {
tagsList: []
}
},
methods: {
isActive(path) {
let path1=(path.split("/"))[1]
let path2=(this.$route.fullPath.split("/"))[1]
return path1 === path2;
},
//
closeTags(index) {
const delItem = this.tagsList.splice(index, 1)[0];
const item = this.tagsList[index] ? this.tagsList[index] : this.tagsList[index - 1];
if (item) {
delItem.path === this.$route.fullPath && this.$router.push(item.path);
}else{
this.$router.push('/');
}
},
//
closeAll(){
this.tagsList = [];
this.$router.push('/');
},
//
closeOther(){
const curItem = this.tagsList.filter(item => {
return item.path === this.$route.fullPath;
})
this.tagsList = curItem;
},
//
setTags(route){
const isExist = this.tagsList.some(item => {
return item.path === route.fullPath;
})
let type=true;
if(!isExist){
if(this.tagsList.length >= 8){
this.tagsList.shift();
}
this.tagsList.map(res=>{
if(res.title==route.meta.title)type= false
})
if(type){
this.tagsList.push({
title: route.meta.title,
path: route.fullPath,
name: route.matched[1].components.default.name
})
}
}
bus.$emit('tags', this.tagsList);
},
handleTags(command){
command === 'other' ? this.closeOther() : this.closeAll();
}
},
computed: {
showTags() {
return this.tagsList.length > 0;
}
},
watch:{
$route(newValue, oldValue){
this.setTags(newValue);
}
},
created(){
this.setTags(this.$route);
//
bus.$on('close_current_tags', () => {
for (let i = 0, len = this.tagsList.length; i < len; i++) {
const item = this.tagsList[i];
if(item.path === this.$route.fullPath){
if(i < len - 1){
this.$router.push(this.tagsList[i+1].path);
}else if(i > 0){
this.$router.push(this.tagsList[i-1].path);
}else{
this.$router.push('/');
}
this.tagsList.splice(i, 1);
break;
}
}
})
}
}
</script>
<style>
.tags {
position: relative;
height: 30px;
overflow: hidden;
background: #fff;
padding-right: 120px;
box-shadow: 0 5px 10px #ddd;
}
.tags ul {
box-sizing: border-box;
width: 100%;
height: 100%;
}
.tags-li {
float: left;
margin: 3px 5px 2px 3px;
border-radius: 3px;
font-size: 12px;
overflow: hidden;
cursor: pointer;
height: 23px;
line-height: 23px;
border: 1px solid #e9eaec;
background: #fff;
padding: 0 5px 0 12px;
vertical-align: middle;
color: #666;
-webkit-transition: all .3s ease-in;
-moz-transition: all .3s ease-in;
transition: all .3s ease-in;
}
.tags-li:not(.active):hover {
background: #f8f8f8;
}
.tags-li.active {
color: #fff;
}
.tags-li-title {
float: left;
max-width: 80px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin-right: 5px;
color: #666;
}
.tags-li.active .tags-li-title {
color: #fff;
}
.tags-close-box {
position: absolute;
right: 0;
top: 0;
box-sizing: border-box;
padding-top: 1px;
text-align: center;
width: 110px;
height: 30px;
background: #fff;
box-shadow: -3px 0 15px 3px rgba(0, 0, 0, .1);
z-index: 10;
}
</style>

6
src/components/common/bus.js

@ -0,0 +1,6 @@
import Vue from 'vue';
// 使用 Event Bus
const bus = new Vue();
export default bus;

143
src/components/common/dialog/DataReview/IDCard.vue

@ -0,0 +1,143 @@
<template>
<div class="body1 body2">
<div class="idcard">
<p class="title">{{contentDatas.account_type==1?'法人身份证正面(照片面)' :'身份证正面(照片面)'}}</p>
<img v-if="contentDatas.account_type==2 ? contentDatas.user_card_front.type==0 :contentDatas.legal_card_front.type==0" :src="contentDatas.account_type==2 ? contentDatas.user_card_front.url :contentDatas.legal_card_front.url" class="file_img1">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.account_type==2 ? contentDatas.user_card_front.url :contentDatas.legal_card_front.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span
v-if="contentDatas.account_type==2 ? contentDatas.user_card_front.type==0 :contentDatas.legal_card_front.type==0"
@click="onPreview(contentDatas.account_type==2 ? [contentDatas.user_card_backfacade.url] :[contentDatas.legal_card_front.url])">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
</div>
<div class="idcard">
<p class="title">{{contentDatas.account_type==1?'法人身份证反面(发证机构面)' :'身份证反面(发证机构面)'}}</p>
<img
v-if="contentDatas.account_type==2 ? contentDatas.user_card_backfacade.type==0 :contentDatas.legal_certificate.type==0"
:src="contentDatas.account_type==2 ? contentDatas.user_card_backfacade.url :contentDatas.legal_certificate.url" class="file_img1">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.account_type==2 ? contentDatas.user_card_backfacade.url :contentDatas.legal_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span
v-if="contentDatas.account_type==2 ? contentDatas.user_card_backfacade.type==0 :contentDatas.legal_certificate.type==0"
@click="onPreview(contentDatas.account_type==2 ? [contentDatas.user_card_backfacade.url] :[contentDatas.legal_certificate.url])">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,1)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer : false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:{url:this.host+res.data.img_url,type:file_type},type:file_type},
key:''
}
if (type==0 ) {
if (this.contentDatas.account_type==2) {
upDate.key='user_card_front'
}else{
upDate.key='legal_card_front'
}
}else{
if (this.contentDatas.account_type==2) {
upDate.key='user_card_backfacade'
}else{
upDate.key='legal_certificate'
}
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

104
src/components/common/dialog/DataReview/application.vue

@ -0,0 +1,104 @@
<template>
<div class="body1">
<p class="title">数字证书申请表</p>
<img v-if="contentDatas.number_certificate.type==0" :src="contentDatas.number_certificate.url" class="file_img">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.number_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.number_certificate.url])" v-if="contentDatas.number_certificate.type==0">查看原图</span>
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.number_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:{url:this.host+res.data.img_url,type:file_type},type:file_type},
key:'number_certificate'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

29
src/components/common/dialog/DataReview/assessment.vue

@ -0,0 +1,29 @@
<template>
<div class="body1">
<p class="title">{{contentDatas.account_type==2?'个人风险评估':'企业风险评估'}}</p>
<a class="download" :href="contentDatas.risk_doc">下载报告</a>
<!-- <img src="" alt="" class="file_img"> -->
<iframe :src="contentDatas.risk_url" frameborder="0" class="file_img" style="width: 100%;" ref="helpNestedFrame" id="helpNestedFrame"></iframe>
</div>
</template>
<script>
export default {
props:{
contentDatas:{
require: true
}
},
data() {
return{
}
},
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
.file_img{
height: 440px;
}
</style>

98
src/components/common/dialog/DataReview/assetValuation.vue

@ -0,0 +1,98 @@
<template>
<div class="body1">
<p class="title">资产评估/资产评价报告</p>
<img :src="host+'/'+contentDatas.asset_data.asset_report_img" class="file_img" v-if="contentDatas.asset_data.asset_report_img">
<div class="img_span">
<span @click="onPreview([host+'/'+contentDatas.asset_data.asset_report_img])" v-if="contentDatas.asset_data.asset_report_img">在线预览</span>
<el-upload
class="upload-demo"
:action="action"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res)=>{handleAvatarSuccess(res)}"
>
<span class="upload_span">{{contentDatas.asset_data.asset_report==null?'上传文件':'重新上传'}}</span>
</el-upload>
<a :href="contentDatas.asset_data.asset_report" v-if="contentDatas.asset_data.asset_report">下载文件</a>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
import {assetAssessReport} from '../../../../api/index'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[],
}
},
methods:{
//
assetAssessReport(url){
let data={
id:this.contentDatas.asset_data.id,
report:url
}
assetAssessReport(data).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success('提交成功~');
bus.$emit('getDate');
}else{
this.$message.error(res.msg);
}
});
},
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
let contract=this.host+res.data.img_url;
// bus.$emit('file', contract);
this.assetAssessReport(contract)
}else{
this.$message.error(res.msg);
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
.img_span{
width: 200px;
}
.img_span a{
font-size: 14px;
color: #4E73E4;
}
</style>

108
src/components/common/dialog/DataReview/assets.vue

@ -0,0 +1,108 @@
<template>
<div class="body1">
<p class="title">资产证明文件</p>
<img v-if="contentDatas.asset_certificate.type==0" :src="contentDatas.asset_certificate.url" class="file_img" >
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.number_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<!-- <img :src="contentDatas.asset_certificate" class="file_img" v-if="contentDatas.account_type==1">
<img :src="contentDatas.asset_trusteeship" class="file_img" v-else-if="contentDatas.account_type==2"> -->
<div class="img_span">
<span v-if="contentDatas.asset_certificate.type==0" @click="onPreview([contentDatas.asset_certificate.url])" >查看原图</span>
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.number_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<!-- <span @click="onPreview([contentDatas.asset_certificate])" v-if="contentDatas.account_type==1">查看原图</span>
<span @click="onPreview([contentDatas.asset_trusteeship])" v-else-if="contentDatas.account_type==2">查看原图</span> -->
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'asset_certificate'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

106
src/components/common/dialog/DataReview/assetsInfo.vue

@ -0,0 +1,106 @@
<template>
<div class="body1">
<p class="title">资产概况</p>
<div class="img_span1">
<span v-for="(item,index) in img_data " :key="index" @click="onPreview(img_data.url)">{{item.name}}{{img_url.length }}</span>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
<p class="p_info">资产名称{{contentDatas.asset_data.serial_name}}</p>
<p class="p_info">资产类型{{contentDatas.asset_data.serial_type_name}}</p>
<p class="p_info" v-if="contentDatas.asset_data.serial_type==8">标的其他类型说明{{contentDatas.asset_data.serial_else_type}}</p>
<p class="p_info">转让价格{{contentDatas.asset_data.price}}/{{contentDatas.asset_data.asset_unit}}</p>
<p class="p_info">涉及数量{{contentDatas.asset_data.count}}</p>
<p class="p_info">标的描述{{contentDatas.asset_data.serial_describe}}</p>
<p class="p_info" v-if="contentDatas.asset_data.serial_guaranty">标的抵押情况{{contentDatas.asset_data.serial_guaranty}}</p>
<p class="p_info">信息公告期限{{contentDatas.asset_data.info_notice_start_time}}-{{contentDatas.asset_data.info_notice_end_time}}</p>
<p class="p_info">支付方式{{contentDatas.asset_data.payment_way==1?'一次性付款':'分期付款'}}</p>
<p class="p_info">成交价款支付期限{{contentDatas.asset_data.payment_day}}</p>
<p class="p_info">摘牌方资格条件{{contentDatas.asset_data.buy_condition }}</p>
<!-- <p class="p_info">是否要保证金{{contentDatas.asset_data.is_earnest_money==0?'否':'是' }}</p>
<template v-if="contentDatas.asset_data.is_earnest_money==1">
<p class="p_info">保证金{{contentDatas.asset_data.earnest_money }}</p>
<p class="p_info">交保证金方式{{contentDatas.asset_data.submit_earnestmoney_type==1?'意向摘牌方在提交摘牌申请时交纳保证金':'意向摘牌方经资格确认后'+contentDatas.asset_data.submit_earnestmoney_day+'个工作日内交纳' }}</p>
<p class="p_info">交纳方式{{contentDatas.asset_data.submit_earnestmoney_way==1?'支票':contentDatas.asset_data.submit_earnestmoney_way==2?'电汇':'网上转账' }}</p>
<p class="p_info">退回方式{{contentDatas.asset_data.earnestmoney_dispose ==1?'直接退回':'成功摘牌后转为成交价款的一部分'}}</p>
</template> -->
<p class="p_info" v-if="contentDatas.asset_data.announcements">其他披露事项{{contentDatas.asset_data.announcements }}</p>
<p class="p_info" v-if="contentDatas.asset_data.hotline">咨询电话{{contentDatas.asset_data.hotline }}</p>
<p class="p_info" v-if="contentDatas.asset_data.delist_file_doc!=null && contentDatas.asset_data.delist_file_doc!=''">
摘牌申请详情
<a :href="contentDatas.asset_data.delist_file_doc" class="p_info_a" target="view_window">点击下载</a>
</p>
<p class="p_info" v-if="contentDatas.asset_data.asset_file!=null && contentDatas.asset_data.asset_file!=''">
资产挂牌申请详情
<a :href="contentDatas.asset_data.asset_file" class="p_info_a" target="view_window">点击下载</a>
</p>
<p class="p_info" v-if="contentDatas.asset_data.promise_file!=null && contentDatas.asset_data.promise_file!=''">
申请承诺文件
<a :href="contentDatas.asset_data.promise_file" class="p_info_a" target="view_window">点击下载</a>
</p>
<p class="p_info" v-if="contentDatas.asset_data.accessory!=null && contentDatas.asset_data.accessory!=''">
附件
<a :href="contentDatas.asset_data.accessory" class="p_info_a" target="view_window">点击下载</a>
</p>
<template v-if="contentDatas.asset_data.else_serial_file.length!=0 ">
<p class="p_info" v-for="(item,index) in contentDatas.asset_data.else_serial_file" :key="index">
其他资产材料详情{{index+1}}
<a :href="item" class="p_info_a" target="view_window">点击下载</a>
</p>
</template>
</div>
</template>
<script>
export default {
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
props:{
contentDatas:{
require: true
},
},
data() {
return{
img_data:[],
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
// this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
},
created(){
this.img_url = this.contentDatas.asset_data.serial_img
this.img_data=[{name:'资产图片',url:[this.contentDatas.asset_data.serial_img]}
]
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
.p_info_a{
text-decoration: underline;
}
.body1{
overflow-y: scroll;
}
</style>

101
src/components/common/dialog/DataReview/bankProve.vue

@ -0,0 +1,101 @@
<template>
<div class="body1">
<p class="title">银行开户证明</p>
<img v-if="contentDatas.bank_account_certificate.type==0" :src="contentDatas.bank_account_certificate.url" class="file_img">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.bank_account_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.bank_account_certificate.url])" v-if="contentDatas.bank_account_certificate.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'bank_account_certificate'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

124
src/components/common/dialog/DataReview/basics.vue

@ -0,0 +1,124 @@
<template>
<div class="body1">
<p class="title">基础信息</p>
<template v-if="oldDates.account_type==1">
<div class="input_item">
<span>机构名称</span>
<el-input v-model="oldDates.firm_name" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>统一社会信用代码</span>
<el-input v-model="oldDates.credit_code" placeholder="请输入内容"></el-input>
</div>
<!-- <div class="input_item">
<span>主体类型</span>
<el-input v-model="oldDates.main_type" placeholder="请输入内容"></el-input>
</div> -->
<div class="input_item">
<span>注册资本</span>
<el-input v-model="oldDates.reg_money" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>法定代表人</span>
<el-input v-model="oldDates.legal_name" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>住所</span>
<el-input v-model="oldDates.domicile" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>成立日期</span>
<el-date-picker
v-model="oldDates.establish_time"
type="date"
value-format="timestamp"
placeholder="选择成立日期">
</el-date-picker>
</div>
<div class="input_item">
<span>收货地址</span>
<el-input v-model="oldDates.address" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>收货联系人</span>
<el-input v-model="oldDates.uname" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>收货联系电话</span>
<el-input v-model="oldDates.phone" placeholder="请输入内容"></el-input>
</div>
</template>
<template v-else>
<div class="input_item">
<span>姓名</span>
<el-input v-model="oldDates.username" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>身份证号码</span>
<el-input v-model="oldDates.id_card" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>手机号码</span>
<el-input v-model="oldDates.userphone" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>开户行名称</span>
<el-input v-model="oldDates.bank_name" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>银行卡号</span>
<el-input v-model="oldDates.id_bank" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>收货地址</span>
<el-input v-model="oldDates.address" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>收货联系人</span>
<el-input v-model="oldDates.uname" placeholder="请输入内容"></el-input>
</div>
<div class="input_item">
<span>收货联系电话</span>
<el-input v-model="oldDates.phone" placeholder="请输入内容"></el-input>
</div>
</template>
<div class="input_button">
<el-button type="primary" plain @click="preservation">保存</el-button>
<el-button plain @click="Reset">重置</el-button>
</div>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas1:{
require: true
}
},
data() {
return{
oldDates:{},
}
},
created(){
this.oldDates=JSON.parse(JSON.stringify(this.contentDatas1))
},
methods:{
preservation(){
bus.$emit('basics', this.oldDates);
},
Reset(){
this.oldDates=JSON.parse(JSON.stringify(this.contentDatas1))
}
},
watch:{
contentDatas1(val,oldVal){
this.oldDates=JSON.parse(JSON.stringify(val))
}
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

87
src/components/common/dialog/DataReview/businessInfo.vue

@ -0,0 +1,87 @@
<template>
<div class="body1">
<p class="title">挂牌方概况</p>
<div class="img_span1">
<span v-for="(item,index) in img_data " :key="index" >
<template v-if="item.url.length!=0 ">
<span v-for="(item1,index1) in item.url " :key="index1">
<span v-if="item1.type==0" @click="onPreview(item1.url)">{{item.name}}{{item.url.length}}</span>
</span>
</template>
</span>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
<p class="p_info">挂牌方类型机构托管</p>
<p class="p_info">机构名称{{contentDatas.shop_data.firm_name}}</p>
<p class="p_info">统一社会信用代码{{contentDatas.shop_data.credit_code}}</p>
<!-- <p class="p_info">主体类型{{contentDatas.shop_data.main_type}}</p> -->
<p class="p_info">注册资本{{contentDatas.shop_data.reg_money}}</p>
<p class="p_info">法定代表人{{contentDatas.shop_data.legal_name}}</p>
<p class="p_info">住所{{contentDatas.shop_data.domicile}}</p>
<p class="p_info">成立日期{{contentDatas.shop_data.establish_time | formatDate}}</p>
<!-- <p class="p_info">
内部决策情况
<el-radio v-model="contentDatas.asset_data.decision" :label="1">个人同意</el-radio>
<el-radio v-model="contentDatas.asset_data.decision" :label="2">股东会决议</el-radio>
<el-radio v-model="contentDatas.asset_data.decision" :label="3">董事会决议</el-radio>
<el-radio v-model="contentDatas.asset_data.decision" :label="4">总经理办公会决议</el-radio>
<el-radio v-model="contentDatas.asset_data.decision" :label="5">其他</el-radio>
<el-input v-model="contentDatas.asset_data.decision_case" v-if="contentDatas.shop_data.decision==5" placeholder="请输入其他情况" class="listing_input"></el-input>
</p> -->
</div>
</template>
<script>
export default {
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
props:{
contentDatas:{
require: true
}
},
data() {
return{
img_data:[],
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
//
formatDate(row,colnum){
return moment(row[colnum.create_time]).format('YYYY-MM-DD HH:mm:ss')
},
},
created(){
console.info(this.contentDatas)
// this.img_data=[{name:'',url:[this.contentDatas.shop_data.business_license]},{name:'',url:[this.contentDatas.shop_data.legal_certificate]},
// {name:'',url:[this.contentDatas.shop_data.legal_card_front,this.contentDatas.shop_data.legal_card_backfacade]},
// {name:'',url:[this.contentDatas.shop_data.legal_authorization]},
// {name:'',url:[this.contentDatas.shop_data.operator_card]},{name:'',url:[this.contentDatas.shop_data.bank_account_certificate]},
// {name:'',url:[this.contentDatas.shop_data.asset_trusteeship]},{name:'',url:[this.contentDatas.shop_data.else_file]},
// ]
},
watch:{
contentDatas(newVale,old){
console.info(newVale)
}
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

101
src/components/common/dialog/DataReview/certificate.vue

@ -0,0 +1,101 @@
<template>
<div class="body1">
<p class="title">法人代表证明书</p>
<img v-if="contentDatas.legal_certificate.type==0" :src="contentDatas.legal_certificate.url" class="file_img">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.legal_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.legal_certificate.url])" v-if="contentDatas.legal_certificate.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'legal_certificate'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

50
src/components/common/dialog/DataReview/dataNumber.vue

@ -0,0 +1,50 @@
<template>
<div class="body1">
<p class="title">文化资产要素交易平台标的代码</p>
<p class="p_info dataNumber">
<span v-if="dataNumber!=''">资产编号{{dataNumber}} </span>
<!-- <el-input v-model="input" placeholder="字标准体系代码缩写" class="dataNumber_input"></el-input>
<el-input v-model="input" placeholder="标准分配序号" class="dataNumber_input"></el-input>
<el-input v-model="input" placeholder="." class="dataNumber_input1"></el-input>
<el-input v-model="input" placeholder="部分编号" class="dataNumber_input margin_right"></el-input>
<span>建议编号T/CPRA3100.01</span> -->
<span class="span_blue span_left" @click="createAssetNumber" v-if="dataNumber==''">生成资产编号</span>
</p>
</div>
</template>
<script>
import {createAssetNumber} from '../../../../api/index'
export default {
props:{
contentDatas:{
require: true
}
},
data() {
return{
input:'',
dataNumber:''
}
},
methods:{
createAssetNumber(){
let data={
id:this.contentDatas.asset_data.id,
}
createAssetNumber(data).then(res=>{
console.info(res);
if (res.code==100) {
this.dataNumber=res.data
this.$message.success('生成资产编号成功~');
}
})
}
},
created(){
this.dataNumber=this.contentDatas.asset_data.serial_number
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

135
src/components/common/dialog/DataReview/elseFile.vue

@ -0,0 +1,135 @@
<template>
<div class="body1">
<p class="title">其他要求文件</p>
<div class="else_file" v-if="contentDatas.else_file!=null">
<div>
<img :src="contentDatas.else_file[0].url" class="file_img" v-if="contentDatas.else_file[0].type==0">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.else_file[0].url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.else_file[0].url])" v-if="contentDatas.else_file[0].type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
</div>
<div class="else_file_right" v-if="contentDatas.else_file.length>1">
<!-- <div class="else_file_right" v-if="contentDatas.else_file!=null"> -->
<div class="img_span else_files" v-for="(item,index) in contentDatas.else_file" :key="index">
<template v-if="index!=0">
<span>资质证明文件{{index}}</span>
<div class="img_span">
<span @click="onPreview([item.url])" v-if="item.type==0">查看原图</span>
<a class="upload_span" v-else :href="item.url" target="_blank" rel="nofollow">点击下载</a>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0,index)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
</template>
</div>
<div class="img_span">
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,1)}"
>
<span class="upload_span">+上传更多文件</span>
</el-upload>
</div>
</div>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true,
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type,index){
console.info(res)
if(res.code==1){
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'else_file',
index:index,
type:type
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

101
src/components/common/dialog/DataReview/entrust.vue

@ -0,0 +1,101 @@
<template>
<div class="body1">
<p class="title">法人授权委托书</p>
<img v-if="contentDatas.legal_authorization.type==0" :src="contentDatas.legal_authorization.url" class="file_img">
<p class="upload_span" v-else-if="contentDatas.legal_authorization">
<a class="table_right_item_a" :href="contentDatas.legal_authorization.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.legal_authorization.url])" v-if="contentDatas.legal_authorization.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">{{contentDatas.legal_authorization?'重新上传':'上传文件'}}</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'legal_authorization'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

101
src/components/common/dialog/DataReview/license.vue

@ -0,0 +1,101 @@
<template>
<div class="body1">
<p class="title">营业执照复印件</p>
<img v-if="contentDatas.business_license.type==0" :src="contentDatas.business_license.url" class="file_img">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.business_license.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.business_license.url])" v-if="contentDatas.business_license.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'business_license'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

129
src/components/common/dialog/DataReview/operatorIDCard.vue

@ -0,0 +1,129 @@
<template>
<div class="body1 body2">
<div class="idcard">
<p class="title">经办人身份证正面(照片面)</p>
<img v-if="contentDatas.operator_card_front.type==0" :src="contentDatas.operator_card_front.url" class="file_img1">
<p class="upload_span" v-else-if="contentDatas.operator_card_front">
<a class="table_right_item_a" :href="contentDatas.operator_card_front.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.operator_card_front.url] )" v-if="contentDatas.operator_card_front.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">{{contentDatas.operator_card_front?'重新上传':'上传图片'}}</span>
</el-upload>
</div>
</div>
<div class="idcard">
<p class="title">经办人身份证反面(发证机构面)</p>
<img :src=" contentDatas.operator_card_backfacade.url " v-if="contentDatas.operator_card_backfacade.type==0" class="file_img1">
<p class="upload_span" v-else-if="contentDatas.operator_card_backfacade">
<a class="table_right_item_a" :href="contentDatas.operator_card_backfacade.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.operator_card_backfacade.url] )" v-if="contentDatas.operator_card_backfacade.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,1)}"
>
<span class="upload_span">{{contentDatas.operator_card_backfacade?'重新上传':'上传图片'}}</span>
</el-upload>
</div>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer : false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:''
}
if (type==0) {
upDate.key='operator_card_front'
}else{
upDate.key='operator_card_backfacade'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

101
src/components/common/dialog/DataReview/promise.vue

@ -0,0 +1,101 @@
<template>
<div class="body1">
<p class="title">开户申请书与承诺书</p>
<img v-if="contentDatas.asset_certificate.type==0" :src="contentDatas.asset_certificate.url" class="file_img">
<p class="upload_span" v-else>
<a class="table_right_item_a" :href="contentDatas.asset_certificate.url" target="_blank" rel="nofollow">点击下载</a>
</p>
<div class="img_span">
<span @click="onPreview([contentDatas.asset_certificate.url])" v-if="contentDatas.asset_certificate.type==0">查看原图</span>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,0)}"
>
<span class="upload_span">重新上传</span>
</el-upload>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="img_url"
:z-index="9999"
/>
</div>
</template>
<script>
import bus from '../../bus'
export default {
props:{
contentDatas:{
require: true
}
},
components: {
ElImageViewer: () => import('element-ui/packages/image/src/image-viewer')
},
data() {
return{
host:'http://wenhua.xingtongworld.com',
action:'http://wenhua.xingtongworld.com/api/Index/uploadFile',
showViewer:false,
img_url:[]
}
},
methods:{
onPreview(img) {
this.img_url = img
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
handleAvatarSuccess(res,file,type){
console.info(res)
if(res.code==1){
const typeArr1 = ['application/pdf'];
const isJPG1 = typeArr1.indexOf(file.raw.type) !== -1;
let file_type;
if (isJPG1) {
file_type=1
}else{
file_type=0
}
let upDate={
url:{url:this.host+res.data.img_url,type:file_type},
key:'asset_certificate'
}
bus.$emit('img', upDate);
this.$message.success('文件上传成功!');
}
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg','application/pdf'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 10;
if (!isJPG) {
this.$message.error('只能上传图片和PDF文件!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 10MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
}
</script>
<style scoped>
@import url('../../../../assets/css/sidebar.css');
</style>

70
src/components/common/dialog/content.vue

@ -0,0 +1,70 @@
<template>
<div>
<template v-if="dialogType==1">
<assessment v-if="sidebarId== 'assessment'" :contentDatas="contentDatas"></assessment>
<basics v-if="sidebarId== 'basics'" :contentDatas1="contentDatas1"></basics>
<license v-if="sidebarId== 'license'" :contentDatas="contentDatas"></license>
<IDCard v-if="sidebarId== 'IDCard'" :contentDatas="contentDatas"></IDCard>
<application v-if="sidebarId== 'application'" :contentDatas="contentDatas"></application>
<assets v-if="sidebarId== 'assets'" :contentDatas="contentDatas"></assets>
<certificate v-if="sidebarId== 'certificate'" :contentDatas="contentDatas"></certificate>
<bankProve v-if="sidebarId== 'bankProve'" :contentDatas="contentDatas"></bankProve>
<entrust v-if="sidebarId== 'entrust'" :contentDatas="contentDatas"></entrust>
<promise v-if="sidebarId== 'promise'" :contentDatas="contentDatas"></promise>
<operatorIDCard v-if="sidebarId== 'operatorIDCard'" :contentDatas="contentDatas"></operatorIDCard>
<elseFile v-if="sidebarId== 'elseFile'" :contentDatas="contentDatas"></elseFile>
</template>
<template v-else-if="dialogType==2 ||dialogType==3">
<assessment v-if="sidebarId== 'assessment'" :contentDatas="contentDatas"></assessment>
<businessInfo v-if="sidebarId== 'businessInfo'" :contentDatas="contentDatas"></businessInfo>
<assetsInfo v-if="sidebarId== 'assetsInfo'" :contentDatas="contentDatas"></assetsInfo>
<dataNumber v-if="sidebarId== 'dataNumber'" :contentDatas="contentDatas"></dataNumber>
<assetValuation v-if="sidebarId== 'assetValuation'" :contentDatas="contentDatas"></assetValuation>
</template>
</div>
</template>
<script>
import assets from '../dialog/DataReview/assets.vue'
import assetValuation from '../dialog/DataReview/assetValuation.vue'
import certificate from '../dialog/DataReview/certificate.vue'
import bankProve from '../dialog/DataReview/bankProve.vue'
import entrust from '../dialog/DataReview/entrust.vue'
import promise from '../dialog/DataReview/promise.vue'
import operatorIDCard from '../dialog/DataReview/operatorIDCard.vue'
import elseFile from '../dialog/DataReview/elseFile.vue'
import dataNumber from '../dialog/DataReview/dataNumber.vue'
import assetsInfo from '../dialog/DataReview/assetsInfo.vue'
import businessInfo from '../dialog/DataReview/businessInfo.vue'
import assessment from '../dialog/DataReview/assessment.vue'
import application from '../dialog/DataReview/application.vue'
import IDCard from '../dialog/DataReview/IDCard.vue'
import license from '../dialog/DataReview/license.vue'
import basics from '../dialog/DataReview/basics.vue'
export default ({
props:{
sidebarId:{
require: true
},
dialogType:{
require: true
},
contentDatas:{
require: true
},
contentDatas1:{
require: true
}
},
data() {
return{
}
},
created(){
},
components:{
assessment,basics,license,IDCard,application,assets,
businessInfo,assetsInfo,dataNumber,elseFile,certificate,
bankProve,entrust,promise,operatorIDCard,assetValuation
},
})
</script>

397
src/components/common/dialog/insex.vue

@ -0,0 +1,397 @@
<template>
<div>
<el-dialog :title="dialogData.title" :visible.sync="isshow" width="70%" :before-close="MisShow">
<div class="select" v-if="!isexamine &&dialogType==1">
<el-radio v-model="query.account_type" label="buyer" border @change="getAccountData" v-if="listDate.buyer_data==1">摘牌方</el-radio>
<el-radio v-model="query.account_type" label="enter_shop" border @change="getAccountData" v-if="listDate.enter_shop_data==1">挂牌方</el-radio>
<el-radio v-model="query.account_type" label="third_party" border @change="getAccountData" v-if="listDate.third_party_data==1">第三方</el-radio>
</div>
<p class="tips">
{{dialogData.tips}}
<span style="color:red">{{dialogData.tips1}}</span>
</p>
<div class="body">
<el-tabs tab-position="left" v-model="tabID">
<el-tab-pane v-for="(item) in dialogData.sidebar" :key="item.id" @tab-click="handleClick" :name="item.id">
<span slot="label">
<i class="el-icon-question" v-if="item.type==2" style="color:#4E73E4"></i>
<span v-else-if="item.type==1" style="color:red">*</span>
{{item.title}}
</span>
<sidebarContent :sidebarId="item.id" :dialogType="dialogType" :contentDatas="contentDatas" :contentDatas1="contentDatas1" />
</el-tab-pane>
</el-tabs>
</div>
<div class="feedback feedback1" v-if="isexamine ">
<el-radio v-model="query.status" :label="1" border>审核通过</el-radio>
<el-radio v-model="query.status" :label="2" border>审核不通过</el-radio>
</div>
<div class="feedback" >
<span>{{isexamine==true?'审核反馈:':'账户备注:'}}</span>
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="query.message">
</el-input>
</div>
<span slot="footer" class="dialog-footer">
<template v-if="dialogType==1 || dialogType==2">
<el-button @click="MisShow"> </el-button>
<el-button type="primary" @click="saveEdit"> </el-button>
</template>
<template v-else-if="dialogType==3">
<el-button @click="MisShow"> </el-button>
</template>
</span>
</el-dialog>
</div>
</template>
<script>
// import {whySidebar} from './sidebar.vue'
import sidebarContent from '../dialog/content.vue'
import {getAccountData,getAssetInfo,accountCheck,assertCheck,sendCheck,checkAssetOut,getFileType} from '../../../api/index'
import bus from '../bus'
export default {
name:'whyDialog',
props:{
//12,3
dialogType:{
type:Number,
require: true
},
dialogID:{
type:Number,
require: true
},
isshow:{
type:Boolean,
default:false,
require: true
},
// 12
account_type:{
type:String,
default:'buyer',
},
//
isexamine:{
type:Boolean,
default:false,
},
//dialogType2使1234
assets_type:{
type:Number
},
listDate:{
}
},
data(){
return {
dialogData:{
title:'',
tips:'',
tips1:'',
sidebar:[]
},
query:{
message:'',
status:'',
account_type:'',
uid:'',
account_data:'',
id:'',
serial:'',
report:''
},
tabID:'',
contentDatas:'',
contentDatas1:''
}
},
components:{
// whySidebar,
sidebarContent
},
created(){
if (this.dialogType==1) {
this.query.uid=this.dialogID;
this.query.account_type=this.account_type;
this.getAccountData()
}else if(this.dialogType==2 ||this.dialogType==3){
this.query.id=this.dialogID;
console.info(this.query.id)
this.getAssetInfo()
}
bus.$on('getDate', () => {
this.getAssetInfo()
})
bus.$on('basics', (e) => {
console.log(e)
this.contentDatas1=e;
// this.$message.success('')
this.$message.success('保存成功!')
})
bus.$on('file', (e) => {
console.log(e)
this.query.report=e;
// this.$message.success('')
this.$message.success('保存成功!')
})
bus.$on('img',(e)=>{
console.info(e)
if (e.key=='else_file') {
if (e.type==1) {
this.contentDatas.else_file.push(e.url)
this.contentDatas1.else_file.push(e.url.url)
}else{
this.contentDatas.else_file[e.index]=e.url
this.contentDatas1.else_file[e.index]=e.url.url
}
}else{
this.contentDatas[e.key]=e.url;
this.contentDatas1[e.key]=e.url.url
}
})
},
methods:{
//
getFileType(type){
let data,
t=this;
if (type==0) {
data={file_info:this.contentDatas}
}else{
data={file_info:this.contentDatas.shop_data}
}
getFileType(data).then(res=>{
console.info(res)
if (res.code==100 && res.file_info.length!=0) {
if (type==0) {
for(let v in t.contentDatas){
for(let key in res.file_info){
if(key==v &&res.file_info[key]!=''){
if (key=='else_file' && res.file_info['else_file'] ==null) {
t.contentDatas[v] =[]
}else{
t.contentDatas[v] =res.file_info[key]
}
}
}
}
}else{
for(let v in t.contentDatas.shop_data){
for(let key in res.file_info){
if(key==v &&res.file_info[key]!=''){
if (key=='else_file' && res.file_info['else_file'] ==null) {
t.$set(t.contentDatas,v,[])
}else{
// t.contentDatas.shop_data[v] =res.file_info[key]
t.$set(t.contentDatas.shop_data,v,res.file_info[key])
}
}
}
}
}
console.info(t.contentDatas)
}
})
},
//
getAssetInfo(){
getAssetInfo(this.query).then(res => {
console.log(res);
if (res.code==100) {
if (res.data.is_status==0) {
this.$message.error('暂无数据~');
}else{
res.data.establish_time=res.data.establish_time*1000
this.contentDatas=res.data
this.contentDatas1=JSON.parse( JSON.stringify(res.data))
console.info(this.contentDatas1)
this.init()
this.getFileType(1)
}
}
});
},
//
getAccountData(){
getAccountData(this.query).then(res => {
console.log(res);
if (res.code==100) {
if (res.data.is_status==0) {
this.$message.error('暂无数据~');
this.query.account_type=this.account_type
}else{
res.data.establish_time=res.data.establish_time*1000
if (isNaN(res.data.establish_time)) {
res.data.establish_time=0
}
this.contentDatas=res.data
this.contentDatas1=JSON.parse( JSON.stringify(res.data))
console.info(this.contentDatas1)
this.init()
this.getFileType(0)
}
}
});
},
init(){
if (this.dialogType==1) {
this.dialogData.title='资料查看';
if (this.isexamine) {
this.dialogData.tips1='(*注:以下文件需加盖公章)';
}
this.dialogData.tips='以下为交易平台账户申请账户时提交的相关资料:';
if (this.contentDatas.account_type==2) {
this.dialogData.sidebar=[
{title:'个人风险评估',type:0,id:'assessment'},{title:'基础信息',type:1,id:'basics'},{title:'身份证(复印件)',type:1,id:'IDCard'},
// {title:'',type:1,id:'application'}{title:'',type:2,id:'assets'},
{title:'其他要求文件',type:0,id:'elseFile'}
]
}else{
this.dialogData.sidebar=[
{title:'企业风险评估',type:0,id:'assessment'},{title:'基础信息',type:1,id:'basics'},{title:'营业执照(复印件)',type:1,id:'license'},
{title:'法人代表证明书',type:1,id:'certificate'},{title:'法人身份证(复印件)',type:1,id:'IDCard'},
// {title:'',type:1,id:'application'},
{title:'银行开户证明',type:1,id:'bankProve'},
// {title:'',type:1,id:'promise'},
{title:'法人授权委托书',type:0,id:'entrust'},
{title:'经办人身份证(复印件)',type:0,id:'operatorIDCard'},
// {title:'',type:2,id:'assets'},
{title:'其他要求文件',type:0,id:'elseFile'}
]
}
}else if(this.dialogType==2 ||this.dialogType==3){
this.dialogData.sidebar=[
{title:'企业风险评估',type:0,id:'assessment'},{title:'挂牌方概况',type:1,id:'businessInfo'},{title:'资产概况',type:1,id:'assetsInfo'},{title:'资产评估/资产评价报告',type:1,id:'assetValuation'},
{title:'文化大数据标准编号',type:1,id:'dataNumber'}
]
// if (this.contentDatas.asset_data.else_serial_file!=null) {
// this.dialogData.sidebar.splice(2, 0, {title:'/',type:1,id:'assetValuation'});
// }
if (this.assets_type==1) {
this.dialogData.title='资产信息';
this.dialogData.tips='以下为挂牌资产的相关信息';
}else if(this.assets_type==2){
this.dialogData.title='资产挂牌申请';
this.dialogData.tips='以下为挂牌资产的相关信息:';
}
else if(this.assets_type==4){
this.dialogData.title='摘牌申请审核';
}else{
this.dialogData.title='资产发布审核';
}
}
this.tabID=this.dialogData.sidebar[0].id
},
handleClick(tab){
this.tabID=tab.id
},
saveEdit(){
if (this.dialogType==1) {
this.saveAccountCheck()
}else if (this.dialogType==2) {
if (this.assets_type==2) {
this.saveCartellinoCheck()
}else if (this.assets_type==3) {
this.saveSendCheck()
}else if (this.assets_type==4) {
this.checkAssetOut()
}else{
this.MisShow()
}
}
},
//
checkAssetOut(){
checkAssetOut(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.MisShow()
this.$message.success('提交成功~');
this.$emit('getData')
}else{
this.$message.error(res.msg);
}
});
},
//
saveSendCheck(){
sendCheck(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.MisShow()
this.$message.success('提交成功~');
this.$emit('getData')
}else{
this.$message.error(res.msg);
}
});
},
//
saveCartellinoCheck(){
assertCheck(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.MisShow()
this.$message.success('提交成功~');
this.$emit('getData')
}else{
this.$message.error(res.msg);
}
});
},
// /
saveAccountCheck(){
console.info(this.contentDatas1)
this.query.account_data=this.contentDatas1
this.query.account_data.establish_time=this.contentDatas.establish_time/1000;
delete this.query.account_data['is_status'];
// delete this.query.account_data['id'];
accountCheck(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.MisShow()
this.$message.success('提交成功~');
this.$emit('getData')
}else{
this.$message.error(res.msg);
}
});
},
MisShow(){
this.$emit('MisShow')
}
}
}
</script>
<style scoped>
.tips{
font-size: 16px;
}
.body{
display: flex;
margin-top: 30px;
}
.feedback{
display: flex;
align-items: center;
font-size: 16px;
color: #333333;
width: 90%;
margin: 0 auto;
margin-top: 20px;
}
.feedback>>>.el-textarea{
width: 90%;
margin-left: 10px;
}
.select{
margin-bottom: 15px;
}
</style>

0
src/components/common/dialog/sidebar.vue

80
src/components/common/directives.js

@ -0,0 +1,80 @@
import Vue from 'vue';
// v-dialogDrag: 弹窗拖拽属性
Vue.directive('dialogDrag', {
bind(el, binding, vnode, oldVnode) {
const dialogHeaderEl = el.querySelector('.el-dialog__header');
const dragDom = el.querySelector('.el-dialog');
dialogHeaderEl.style.cssText += ';cursor:move;'
dragDom.style.cssText += ';top:0px;'
// 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
const sty = (() => {
if (window.document.currentStyle) {
return (dom, attr) => dom.currentStyle[attr];
} else {
return (dom, attr) => getComputedStyle(dom, false)[attr];
}
})()
dialogHeaderEl.onmousedown = (e) => {
// 鼠标按下,计算当前元素距离可视区的距离
const disX = e.clientX - dialogHeaderEl.offsetLeft;
const disY = e.clientY - dialogHeaderEl.offsetTop;
const screenWidth = document.body.clientWidth; // body当前宽度
const screenHeight = document.documentElement.clientHeight; // 可见区域高度(应为body高度,可某些环境下无法获取)
const dragDomWidth = dragDom.offsetWidth; // 对话框宽度
const dragDomheight = dragDom.offsetHeight; // 对话框高度
const minDragDomLeft = dragDom.offsetLeft;
const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
const minDragDomTop = dragDom.offsetTop;
const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight;
// 获取到的值带px 正则匹配替换
let styL = sty(dragDom, 'left');
let styT = sty(dragDom, 'top');
// 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
if (styL.includes('%')) {
styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100);
styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100);
} else {
styL = +styL.replace(/\px/g, '');
styT = +styT.replace(/\px/g, '');
};
document.onmousemove = function (e) {
// 通过事件委托,计算移动的距离
let left = e.clientX - disX;
let top = e.clientY - disY;
// 边界处理
if (-(left) > minDragDomLeft) {
left = -(minDragDomLeft);
} else if (left > maxDragDomLeft) {
left = maxDragDomLeft;
}
if (-(top) > minDragDomTop) {
top = -(minDragDomTop);
} else if (top > maxDragDomTop) {
top = maxDragDomTop;
}
// 移动当前元素
dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
};
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
}
})

30
src/components/common/i18n.js

@ -0,0 +1,30 @@
export const messages = {
'zh': {
i18n: {
breadcrumb: '国际化产品',
tips: '通过切换语言按钮,来改变当前内容的语言。',
btn: '切换英文',
title1: '常用用法',
p1: '要是你把你的秘密告诉了风,那就别怪风把它带给树。',
p2: '没有什么比信念更能支撑我们度过艰难的时光了。',
p3: '只要能把自己的事做好,并让自己快乐,你就领先于大多数人了。',
title2: '组件插值',
info: 'Element组件需要国际化,请参考 {action}。',
value: '文档'
}
},
'en': {
i18n: {
breadcrumb: 'International Products',
tips: 'Click on the button to change the current language. ',
btn: 'Switch Chinese',
title1: 'Common usage',
p1: "If you reveal your secrets to the wind you should not blame the wind for revealing them to the trees.",
p2: "Nothing can help us endure dark times better than our faith. ",
p3: "If you can do what you do best and be happy, you're further along in life than most people.",
title2: 'Component interpolation',
info: 'The default language of Element is Chinese. If you wish to use another language, please refer to the {action}.',
value: 'documentation'
}
}
}

256
src/components/common/orderDialog/index.vue

@ -0,0 +1,256 @@
<template>
<div>
<el-dialog title="订单详情" :visible.sync="isshow" width="70%" :before-close="MisShow">
<p class="tips">
<!-- <span v-if="orderInfos.order.status==0">请在 {{orderInfos.order.pay_overdue_time | formatDate }}前完成订单支付</span> -->
<span v-if="orderInfos.order.status==1 || orderInfos.order.status==0">等待摘牌方付款</span>
<span v-else-if="orderInfos.order.status==2">等待双方上传签约合同</span>
<span v-else-if="orderInfos.order.status==3">请审核签约合同</span>
<span v-else-if="orderInfos.order.status==4 || orderInfos.order.status==5">等待双方确认交付</span>
<span v-else-if="orderInfos.order.status==6">请结算订单</span>
<span v-else-if="orderInfos.order.status==7">订单完成</span>
</p>
<div class="steps">
<el-steps :active="orderInfos.order.status " align-center>
<template v-if="orderInfos.order.type==0">
<el-step title="待付款" description=""></el-step>
<el-step title="待审核付款" description=""></el-step>
<el-step title="待上传签约合同" description=""></el-step>
<el-step title="待确认签约合同" description=""></el-step>
<el-step title="待交付" description=""></el-step>
<el-step title="待确认交付" description=""></el-step>
<el-step title="待结算" description=""></el-step>
<el-step title="已完成" description=""></el-step>
</template>
<template v-else>
<el-step title="下单成功" description=""></el-step>
<el-step title="等待付款" description=""></el-step>
<el-step title="订单完成" description=""></el-step>
</template>
</el-steps>
</div>
<div class="order_title">
<el-tabs v-model="activeName" @tab-click="handleClick" class="order_tabs">
<el-tab-pane label="订单信息" name="first">
<p class="order_info_p">订单编号{{orderInfos.batchcode}} </p>
<p class="order_info_p">标准编号{{orderInfos.asset.serial}} </p>
<p class="order_info_p">流水编号{{orderInfos.order.money_id}} </p>
<p class="order_info_p">快递单号{{orderInfos.order.express_id}} </p>
<br/>
<p class="order_info_p">资产名称{{orderInfos.asset.serial_name}} </p>
<p class="order_info_p">资产类型{{orderInfos.asset.asset_type_name}} </p>
<p class="order_info_p">转让单价{{orderInfos.asset.price}} </p>
<p class="order_info_p">交易数量{{orderInfos.order.count}} </p>
<p class="order_info_p">交易金额{{orderInfos.order.price}} </p>
<br/>
<p class="order_info_p">摘牌方名称{{orderInfos.username}} </p>
<p class="order_info_p">收货地址{{orderInfos.order.express_address}} </p>
<p class="order_info_p">收货人名称{{orderInfos.order.express_user}} </p>
<p class="order_info_p">收货人电话{{orderInfos.order.express_userphone}} </p>
<p class="order_info_p">邮政编码{{orderInfos.order.postal_code}} </p>
</el-tab-pane>
<el-tab-pane label="订单合同" name="second" :disabled="orderInfos.order.status<4" v-if="orderInfos.order.type==0">
<p class="order_info_p1">
摘牌方签约合同详情
<a :href="orderInfos.order.buy_contract" download class="upload_span">点击下载</a>
</p>
<p class="order_info_p1">
挂牌方签约合同详情
<a :href="orderInfos.order.sell_contract" download class="upload_span">点击下载</a>
</p>
</el-tab-pane>
<el-tab-pane label="交易凭证" name="third" :disabled="orderInfos.order.status<6">
<p class="order_info_p1">
交易凭证详情
<a :href="orderInfos.order.transaction_doc" download class="upload_span">点击下载</a>
</p>
</el-tab-pane>
<el-tab-pane label="交易账单" name="fourth" :disabled="orderInfos.order.status<7">
<p class="order_info_p">订单金额{{orderInfos.order.total_price}} </p>
<p class="order_info_p">结算金额{{orderInfos.order.settlement_price}} </p>
</el-tab-pane>
</el-tabs>
<div class="order_switch">
<span>订单状态</span>
<el-switch v-model="value1" @change="closeOrerd" :disabled="orderInfos.order.status==8"></el-switch>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="settlement" v-if="orderInfos.order.status==6"> </el-button>
<el-button @click="MisShow"> </el-button>
</span>
</el-dialog>
<el-dialog title="提示" :visible.sync="editVisible2" width="30%">
<p class="recordTips">请输入关闭订单原因</p>
<div class="msg">
<el-input
type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="query.message">
</el-input>
</div>
<div class="msg1">
<span>操作员</span>
<el-input placeholder="请输入内容" v-model="query.operator_name" class="msg1_input"></el-input>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible2 = false"> </el-button>
<el-button type="primary" @click="close"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { orderInfo ,close,settlement} from '../../../api/index'
export default ({
name:'orderDialog',
props:{
batchcode:{
// type:Number,
require: true
},
isshow:{
type:Boolean,
default:false,
require: true
},
},
data() {
return{
activeName: 'first',
value1:true,
orderInfos:{
asset:{},
order:{}
},
query:{
message:'',
batchcode:'',
operator_name:''
},
editVisible2:false
}
},
created(){
this.getData()
this.query.batchcode=this.batchcode
},
methods:{
settlement(){
let data={batchcode:this.batchcode}
settlement(data).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('结算订单成功!');
this.getData()
}else{
this.$message.error(res.msg)
}
})
},
close(){
if (this.query.message=='') {
this.$message.error('请输入关闭订单的原因!')
}else if(this.query.operator_name==''){
this.$message.error('请输入操作员的名字!')
}else{
close(this.query).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('关闭订单成功!')
this.MisShow();
}else{
this.$message.error(res.msg)
}
})
}
},
closeOrerd(res){
console.info(res)
if (!res) {
this.editVisible2=true
}
},
handleClick(tab, event) {
console.log(tab, event);
},
getData(){
let data={batchcode:this.batchcode}
orderInfo(data).then(res=>{
console.info(res);
if (res.code==100) {
this.orderInfos=res.data
if (res.data.order.status==8) {
this.value1=false
}
}
})
},
MisShow(){
this.$emit('orderShow')
}
}
})
</script>
<style scoped>
.tips{
font-size: 16px;
}
.msg1{
/* display: flex;
align-items: center; */
margin-top: 15px;
}
.msg1>.msg1_input{
/* width: 80%; */
margin-top: 10px;
}
.steps{
margin-top: 30px;
margin-bottom: 15px;
}
.order_title{
width: 100%;
position: relative;
}
.order_tabs{
width: 100%;
}
.order_switch{
position: absolute;
top: 10px;
right: 0;
}
.order_switch >span{
color: #4E73E4;
display: inline-block;
margin-right: 10px;
}
.order_tabs>>>.el-tab-pane{
min-height: 480px;
border: 2px #AAAAAA dashed;
padding: 10px;
}
.order_info_p{
font-size: 16px;
color: #555555;
}
.order_info_p1{
margin-top: 15px;
font-size: 16px;
color: #555555;
}
.upload_span{
color: #294CC6;
text-decoration: underline;
cursor: pointer;
margin-left: 15px;
}
.textarea{
margin-top: 10px;
}
.msg{
margin-top: 15px;
}
</style>

56
src/components/page/403.vue

@ -0,0 +1,56 @@
<template>
<div class="error-page">
<div class="error-code">4<span>0</span>3</div>
<div class="error-desc">啊哦~ 你没有权限访问该页面哦</div>
<div class="error-handle">
<router-link to="/">
<el-button type="primary" size="large">返回首页</el-button>
</router-link>
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button>
</div>
</div>
</template>
<script>
export default {
methods: {
goBack(){
this.$router.go(-1);
}
}
}
</script>
<style scoped>
.error-page{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
background: #f3f3f3;
box-sizing: border-box;
}
.error-code{
line-height: 1;
font-size: 250px;
font-weight: bolder;
color: #f02d2d;
}
.error-code span{
color: #00a854;
}
.error-desc{
font-size: 30px;
color: #777;
}
.error-handle{
margin-top: 30px;
padding-bottom: 200px;
}
.error-btn{
margin-left: 100px;
}
</style>

56
src/components/page/404.vue

@ -0,0 +1,56 @@
<template>
<div class="error-page">
<div class="error-code">4<span>0</span>4</div>
<div class="error-desc">啊哦~ 你所访问的页面不存在</div>
<div class="error-handle">
<router-link to="/">
<el-button type="primary" size="large">返回首页</el-button>
</router-link>
<el-button class="error-btn" type="primary" size="large" @click="goBack">返回上一页</el-button>
</div>
</div>
</template>
<script>
export default {
methods: {
goBack(){
this.$router.go(-1);
}
}
}
</script>
<style scoped>
.error-page{
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
background: #f3f3f3;
box-sizing: border-box;
}
.error-code{
line-height: 1;
font-size: 250px;
font-weight: bolder;
color: #2d8cf0;
}
.error-code span{
color: #00a854;
}
.error-desc{
font-size: 30px;
color: #777;
}
.error-handle{
margin-top: 30px;
padding-bottom: 200px;
}
.error-btn{
margin-left: 100px;
}
</style>

333
src/components/page/AccountManagement/blacklistManagement.vue

@ -0,0 +1,333 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 账户管理
</el-breadcrumb-item>
<el-breadcrumb-item>黑名单管理</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.phone" placeholder="账户号码" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="申请人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.black_type" placeholder="黑名单类型" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="1" label="摘牌方" :value="1"></el-option>
<el-option key="2" label="挂牌方" :value="2"></el-option>
<el-option key="3" label="第三方" :value="3"></el-option>
<el-option key="5" label="购买方和挂牌方" :value="5"></el-option>
<el-option key="6" label="购买方和第三方" :value="6"></el-option>
<el-option key="7" label="挂牌方和第三方" :value="7"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="create_time" label="开户时间" :formatter="formatDate"></el-table-column>
<el-table-column label="机构名称" prop="firm_name"></el-table-column>
<el-table-column label="账户号码" prop="phone"></el-table-column>
<el-table-column prop="apply_name" label="申请人名称"></el-table-column>
<!-- <el-table-column prop="audit_status" label="审核状态">
<template slot-scope="scope">
<span >{{scope.row | blackType}}</span>
</template>
</el-table-column> -->
<el-table-column prop="black_time" label="禁用时间" :formatter="formatDate"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
<el-button
type="text"
@click="operationRecord(scope.row)"
>操作记录</el-button>
<el-button
type="text"
@click="blacklist( scope.row)"
>解除黑名单</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<!-- 操作记录 -->
<el-dialog title="操作记录" :visible.sync="editVisible1" width="30%">
<p class="recordTips">以下为该账户历史操作记录</p>
<p class="record_content" v-for="(item,index) in recordList" :key="index">
<span>{{index + 1}}.</span>
<span>{{item.create_time | formatDate}}</span>
<span>{{item.operation_content}}</span>
</p>
</el-dialog>
<!-- 添加黑名单 -->
<el-dialog title="提示" :visible.sync="editVisible2" width="30%">
<p class="recordTips">是否解除黑名单</p>
<div class="record_select">
<el-checkbox v-model="query1.buyer_account_type" :true-label="1" :false-label="0">摘牌方</el-checkbox>
<el-checkbox v-model="query1.enter_shop_type" :true-label="1" :false-label="0">挂牌方</el-checkbox>
<el-checkbox v-model="query1.third_party_type" :true-label="1" :false-label="0">第三方服务机构</el-checkbox>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible2 = false"> </el-button>
<el-button type="primary" @click="addBlacklist"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { blackList ,operationRecord,updateBlackList,getBlack} from '../../../api/index';
import moment from 'moment'
export default {
data() {
return {
query: {
firm_name: '',
phone: '',
username: '',
black_type:4,
time: '',
page: 1,
limit: 10
},
query1:{
uid:'',
buyer_account_type:0,
enter_shop_type:0,
third_party_type:0
},
tableData: [],
recordList:[],
multipleSelection: [],
delList: [],
editVisible: false,
editVisible1: false,
editVisible2: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
created() {
this.getData();
},
methods: {
//
addBlacklist(){
// this.$confirm('').then(_ => {
updateBlackList(this.query1).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success(res.msg);
this.getData();
}else{
this.$message.error(res.msg);
}
this.editVisible2=false
});
// }).catch(_ => {});
},
//
blacklist(row){
let data={uid:row.id}
getBlack(data).then(res => {
console.log(res);
if (res.code==100) {
this.query1.uid=row.id
this.query1.buyer_account_type=res.data.buyer_black
this.query1.enter_shop_type=res.data.enter_shop_black
this.query1.third_party_type=res.data.third_party_black
this.editVisible2=true;
}
});
},
//
operationRecord(row){
let data={uid:row.id}
operationRecord(data).then(res => {
console.log(res);
if(res.code==100){
this.recordList=res.data.list
}
this.editVisible1=true
});
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
formatDate(row,colnum){
console.info(colnum)
return moment(row[colnum.property]*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
blackList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.idx = index;
this.form = row;
this.editVisible = true;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
},
filters:{
blackType(res){
console.info(res)
let text='';
if (res.is_buyer_black==1) {
text+='购买方,'
}
if (res.is_enter_shop_black==1) {
text+='挂牌方,'
}
if (res.is_third_party_black==1) {
text+='第三方,'
}
if (res.is_third_party_black==1 && res.is_buyer_black==1 &&res.is_enter_shop_black==1) {
text='全部'
}
var reg=/,$/gi;
text=text.replace(reg,"");
return text;
}
}
};
</script>
<style scoped>
.record_select{
display: flex;
flex-direction: column;
}
.record_select >>> .el-checkbox{
margin-bottom: 10px;
}
.record_content{
font-size: 16px;
margin-bottom: 10px;
}
.recordTips{
font-size: 16px;
margin-bottom: 15px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

246
src/components/page/AccountManagement/businessAudit.vue

@ -0,0 +1,246 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 账户管理
</el-breadcrumb-item>
<el-breadcrumb-item>挂牌方入驻审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.phone" placeholder="账户号码" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="申请人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.buyer_account_type" placeholder="摘牌方" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.third_party_type" placeholder="第三方服务机构" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.audit_status" placeholder="审核状态" class="handle-select mr10" clearable>
<el-option key="1" label="已通过" :value="1"></el-option>
<el-option key="2" label="待审核" :value="0"></el-option>
<el-option key="3" label="未通过" :value="2"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="create_time" label="申请时间" :formatter="formatDate"></el-table-column>
<el-table-column label="机构名称" prop="firm_name"></el-table-column>
<el-table-column label="账户号码" prop="phone"></el-table-column>
<el-table-column prop="apply_name" label="申请人名称"></el-table-column>
<el-table-column label="摘牌方开户/第三方服务机构开户" align="center" width="250">
<template slot-scope="scope">
<span>{{scope.row.is_buyer==1 ? '是':'否'}}</span>
<span> / {{scope.row.is_third_party==1 ? '是':'否'}}</span>
</template>
</el-table-column>
<!-- <el-table-column label="是否第三方服务机构">
<template slot-scope="scope">
</template>
</el-table-column> -->
<el-table-column prop="audit_status" label="审核状态">
<template slot-scope="scope">
<span v-if="scope.row.audit_status==1">已通过</span>
<span v-else-if="scope.row.audit_status==0">待审核</span>
<span v-else>未通过</span>
</template>
</el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料审核</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" @getData="getData" :isexamine="true" :account_type="query.type">
</whyDialog>
</div>
</template>
<script>
import { applyList } from '../../../api/index';
import moment from 'moment'
export default {
data() {
return {
query: {
firm_name: '',
phone: '',
username: '',
buyer_account_type: '',
enter_shop_type: '',
third_party_type: '',
audit_status: '',
time: '',
page: 1,
limit: 10,
type:'enter_shop'
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
dialogType:1,
dialogID:'',
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
},
methods: {
MisShow(){
this.editVisible=false
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
applyList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
this.dialogType=1
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

248
src/components/page/AccountManagement/buyerReview.vue

@ -0,0 +1,248 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 账户管理
</el-breadcrumb-item>
<el-breadcrumb-item>摘牌方开户审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.phone" placeholder="账户号码" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="申请人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.enter_shop_type" placeholder="挂牌方" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.third_party_type" placeholder="第三方服务机构" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.audit_status" placeholder="审核状态" class="handle-select mr10" clearable>
<el-option key="1" label="已通过" :value="1"></el-option>
<el-option key="2" label="待审核" :value="0"></el-option>
<el-option key="3" label="未通过" :value="2"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column :formatter="formatDate" prop="create_time" label="申请时间"></el-table-column>
<el-table-column label="机构名称" prop="firm_name"></el-table-column>
<el-table-column label="账户号码" prop="phone"></el-table-column>
<el-table-column prop="apply_name" label="申请人名称"></el-table-column>
<el-table-column prop="is_enter_shop" label="挂牌方开户/第三方服务机构开户" align="center" width="250">
<template slot-scope="scope">
<span>{{scope.row.is_enter_shop==1 ? '是':'否'}}</span>
<span> /{{scope.row.is_third_party==1 ? '是':'否'}}</span>
</template>
</el-table-column>
<!-- <el-table-column prop="is_third_party" label="是否第三方服务机构">
<template slot-scope="scope">
</template>
</el-table-column> -->
<el-table-column prop="audit_status" label="审核状态">
<template slot-scope="scope">
<span v-if="scope.row.audit_status==1">已通过</span>
<span v-else-if="scope.row.audit_status==0">待审核</span>
<span v-else>未通过</span>
</template>
</el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料审核</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID" :dialogType="dialogType" @MisShow="MisShow" @getData="getData" :isexamine="true" :account_type="query.type"></whyDialog>
</div>
</template>
<script>
import { applyList } from '../../../api/index';
import moment from 'moment'
export default {
// name: 'basetable',
data() {
return {
query: {
firm_name: '',
phone: '',
username: '',
buyer_account_type: '',
enter_shop_type: '',
third_party_type: '',
audit_status: '',
time: '',
page: 1,
limit: 10,
type:'buyer'
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
dialogType:1,
dialogID:'',
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
},
methods: {
MisShow(){
this.editVisible=false
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
applyList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
this.dialogType=1
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

369
src/components/page/AccountManagement/platformSelect.vue

@ -0,0 +1,369 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 账户管理
</el-breadcrumb-item>
<el-breadcrumb-item>交易平台账户查询</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.phone" placeholder="账户号码" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="申请人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.buyer_account_type" placeholder="摘牌方开户" clearable class="handle-select mr10">
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.enter_shop_type" placeholder="挂牌方开户" clearable class="handle-select mr10">
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.third_party_type" placeholder="第三方服务机构" clearable class="handle-select mr10">
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10" clearable >
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column :formatter="formatDate" prop="create_time" label="申请时间"></el-table-column>
<el-table-column label="类型" >
<template slot-scope="scope">
<span>{{scope.row.account_type==1 ? "机构": "个人"}}</span>
</template>
</el-table-column>
<el-table-column label="机构名称" prop="firm_name"></el-table-column>
<el-table-column label="账户号码" prop="phone"></el-table-column>
<el-table-column prop="apply_name" label="申请人名称"></el-table-column>
<el-table-column prop="is_buyer" label="摘牌方开户/挂牌方开户/第三方服务机构开户" width="320" align="center">
<template slot-scope="scope">
<span>{{scope.row.is_buyer==1 ? '是':'否'}}</span>
<span> / {{scope.row.is_enter_shop==1 ? '是':'否'}}</span>
<span > / {{scope.row.is_third_party==1 ? '是':'否'}}</span>
</template>
</el-table-column>
<!-- <el-table-column prop="is_enter_shop" label="是否入驻商家">
<template slot-scope="scope">
</template>
</el-table-column>
<el-table-column prop="is_third_party" label="是否第三方服务机构">
<template slot-scope="scope">
</template>
</el-table-column> -->
<el-table-column prop="check_name" label="审核人员"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
<el-button
type="text"
@click="operationRecord(scope.row)"
>操作记录</el-button>
<el-button
type="text"
@click="blacklist( scope.row)"
>添加黑名单</el-button>
<!-- <el-button
type="text"
@click="handleDelete(scope.$index, scope.row)"
>商家配置</el-button> -->
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<!-- 操作记录 -->
<el-dialog title="操作记录" :visible.sync="editVisible1" width="40%">
<p class="recordTips">以下为该账户历史操作记录</p>
<p class="record_content" v-for="(item,index) in recordList" :key="index">
<span>{{index + 1}}.</span>
<span>{{item.create_time | formatDate}}</span>
<span>{{item.operation_content}}</span>
</p>
</el-dialog>
<!-- 添加黑名单 -->
<el-dialog title="提示" :visible.sync="editVisible2" width="30%">
<p class="recordTips">请确认是否需要添加黑名单</p>
<div class="record_select">
<el-checkbox v-model="query1.buyer_account_type" :true-label=1 :false-label=0 >摘牌方</el-checkbox>
<el-checkbox v-model="query1.enter_shop_type" :true-label=1 :false-label=0 >挂牌方</el-checkbox>
<el-checkbox v-model="query1.third_party_type" :true-label=1 :false-label=0 >第三方服务机构</el-checkbox>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible2 = false"> </el-button>
<el-button type="primary" @click="addBlacklist"> </el-button>
</span>
</el-dialog>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :isexamine="false" :account_type="account_type" :listDate="listDate">
</whyDialog>
</div>
</template>
<script>
import { platformAccountList, operationRecord,updateBlackList,getBlack,auditList} from '../../../api/index';
import moment from 'moment'
export default {
// name: 'platformSelect',
data() {
return {
query: {
firm_name: '',
phone: '',
username: '',
buyer_account_type: '',
enter_shop_type: '',
third_party_type: '',
auditID: '',
time: '',
page: 1,
limit: 10
},
listDate:{},
query1:{
uid:'',
buyer_account_type:0,
enter_shop_type:0,
third_party_type:0
},
account_type:'buyer',
dialogID:'',
dialogType:'',
tableData: [],
recordList:[],
auditList:[],
multipleSelection: [],
delList: [],
editVisible: false,
editVisible1: false,
editVisible2:false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
this.getAuditList();
// console.info(this.query1)
},
methods: {
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
getAuditList(){
auditList().then(res => {
console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
//
addBlacklist(){
console.info(this.query1)
updateBlackList(this.query1).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success(res.msg);
}else{
this.$message.error(res.msg);
}
this.editVisible2=false
});
},
//
blacklist(row){
let data={uid:row.id}
getBlack(data).then(res => {
console.log(res);
if (res.code==100) {
this.query1.uid=row.id
this.query1.buyer_account_type=res.data.buyer_black
this.query1.enter_shop_type=res.data.enter_shop_black
this.query1.third_party_type=res.data.third_party_black
this.editVisible2=true;
}
});
},
//
operationRecord(row){
let data={uid:row.id}
operationRecord(data).then(res => {
console.log(res);
if(res.code==100){
this.recordList=res.data.list
}
this.editVisible1=true
});
},
// easy-mock
getData() {
platformAccountList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
console.info(this.query)
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
this.dialogType=1
if (row.buyer_data==1) {
this.account_type='buyer'
}else if (row.enter_shop_data==1) {
this.account_type='enter_shop'
}else if (row.third_party_data==1) {
this.account_type='third_party'
}
this.listDate=row
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
MisShow(){
this.editVisible=false
}
}
};
</script>
<style scoped>
.record_select{
display: flex;
flex-direction: column;
}
.record_select >>> .el-checkbox{
margin-bottom: 10px;
}
.record_content{
font-size: 16px;
margin-bottom: 10px;
}
.recordTips{
font-size: 16px;
margin-bottom: 15px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.el-dialog__wrapper >>> .el-dialog__body{
padding: 10px 20px;
}
</style>

246
src/components/page/AccountManagement/thirdAudit.vue

@ -0,0 +1,246 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 账户管理
</el-breadcrumb-item>
<el-breadcrumb-item>第三方服务机构审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.phone" placeholder="账户号码" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="申请人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.buyer_account_type" placeholder="摘牌方开户" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.enter_shop_type" placeholder="挂牌方" class="handle-select mr10" clearable>
<el-option key="1" label="是" :value="1"></el-option>
<el-option key="2" label="否" :value="0"></el-option>
</el-select>
<el-select v-model="query.audit_status" placeholder="审核状态" class="handle-select mr10" clearable>
<el-option key="1" label="已通过" :value="1"></el-option>
<el-option key="2" label="待审核" :value="0"></el-option>
<el-option key="3" label="未通过" :value="2"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="create_time" label="申请时间" :formatter="formatDate"></el-table-column>
<el-table-column label="机构名称" prop="firm_name"></el-table-column>
<el-table-column label="账户号码" prop="phone"></el-table-column>
<el-table-column prop="apply_name" label="申请人名称"></el-table-column>
<el-table-column prop="address" label="摘牌方开户/挂牌方开户" align="center" width="250">
<template slot-scope="scope">
<span>{{scope.row.is_buyer==1 ? '是':'否'}}</span>
<span> / {{scope.row.is_enter_shop==1 ? '是':'否'}}</span>
</template>
</el-table-column>
<!-- <el-table-column prop="address" label="是否为挂牌方">
<template slot-scope="scope">
</template>
</el-table-column> -->
<el-table-column prop="audit_status" label="审核状态">
<template slot-scope="scope">
<span v-if="scope.row.audit_status==1">已通过</span>
<span v-else-if="scope.row.audit_status==0">待审核</span>
<span v-else>未通过</span>
</template>
</el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料审核</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" @getData="getData" :isexamine="true" :account_type="query.type">
</whyDialog>
</div>
</template>
<script>
import { applyList } from '../../../api/index';
import moment from 'moment'
export default {
data() {
return {
dialogType:1,
dialogID:'',
query: {
firm_name: '',
phone: '',
username: '',
buyer_account_type: '',
enter_shop_type: '',
third_party_type: '',
audit_status: '',
time: '',
page: 1,
limit: 10,
type:'third_party'
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
},
methods: {
MisShow(){
this.editVisible=false
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
applyList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
this.dialogType=1
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

319
src/components/page/AssetManagement/assessmentOreder.vue

@ -0,0 +1,319 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>资产评估订单</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input placeholder="订单编号" v-model="query.batchcode" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="商家名称" class="handle-input mr10"></el-input>
<el-input placeholder="摘牌方名称" v-model="query.pay_username" class="handle-input mr10"></el-input>
<el-input placeholder="资产名称" v-model="query.account_name" class="handle-input mr10"></el-input>
<el-select placeholder="交易方式" v-model="query.trade_type" class="handle-select mr10">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd h:m:s"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number" ></el-table-column>
<el-table-column prop="create_time" label="创建时间" :formatter="formatDate"></el-table-column>
<el-table-column label="订单编号" prop="batchcode"></el-table-column>
<el-table-column prop="sell_firm_name" label="商家名称"></el-table-column>
<el-table-column label="资产名称" prop="serial_name"></el-table-column>
<el-table-column label="摘牌方名称" prop="firm_name"></el-table-column>
<el-table-column label="交易方式">
<template slot-scope="scope">
<span>{{scope.row.order_pay_mode==1? '线下':'网银'}}</span>
</template>
</el-table-column>
<el-table-column prop="count" label="交易数量"></el-table-column>
<el-table-column prop="price" label="交易金额"></el-table-column>
<el-table-column label="交易状态" align="center">
<template slot-scope="scope">
<span v-if="scope.row.status==0">待付款</span>
<span v-else-if="scope.row.status==1">待审核付款</span>
<span v-else-if="scope.row.status==2">待上传签约合同</span>
<span v-else-if="scope.row.status==3">待确认签约合同</span>
<span v-else-if="scope.row.status==4">待交付</span>
<span v-else-if="scope.row.status==5">待确认交付</span>
<span v-else-if="scope.row.status==6">待结算</span>
<span v-else-if="scope.row.status==7">已完成</span>
<span v-else-if="scope.row.status==8">已关闭</span>
</template>
</el-table-column>
<el-table-column label="交易凭证" align="center">
<template slot-scope="scope" >
<img :src="scope.row.pay_record" width="40" height="40" @click="onPreview([scope.row.pay_record])" v-if="scope.row.pay_record!=null">
</template>
</el-table-column>
<el-table-column prop="auditID_name" label="审核人员"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资产查看</el-button>
<el-button
type="text"
@click="orderDetails(scope.$index, scope.row)"
>订单详情</el-button>
<el-button
type="text"
v-if="scope.row.status==1"
@click="examine(scope.$index, scope.row)"
>付款审核</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :assets_type="1" >
</whyDialog>
<orderDialog v-if="orderShowVisible" :isshow="orderShowVisible" :batchcode="order_batchcode"
@orderShow="orderShow" >
</orderDialog>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="showBigImgList"
/>
<el-dialog
title="付款审核"
:visible.sync="centerDialogVisible"
width="30%"
center>
<span>该订单的付款审核是否通过</span>
<div class="selectExamine">
<el-radio v-model="query1.check_pay_status" :label="1">审核通过</el-radio>
<el-radio v-model="query1.check_pay_status" :label="2">审核不通过</el-radio>
</div>
<div class="messege" v-if="query1.check_pay_status==2">
<span>审核不通过原因</span>
<el-input placeholder="请输入" v-model="query1.content" class="handle-input mr10"></el-input>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="centerDialogVisible = false"> </el-button>
<el-button type="primary" @click="selectExamine()"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { orderList ,orderCheckPay} from '../../../api/index';
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
import moment from 'moment'
export default {
data() {
return {
showViewer:false,
centerDialogVisible:false,
showBigImgList:[],
orderShowVisible:false,
order_batchcode:'',
query: {
page: 1,
limit: 10,
batchcode:'',
firm_name:'',
pay_username:'',
account_name:'',
trade_type:'',
auditID:'',
time:'',
order_type:0,
type:1
},
query1:{
batchcode:'',
check_pay_status:1,
content:''
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
dialogID:'',
dialogType:3,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue'),
orderDialog: () => import('../../common/orderDialog/index.vue'),
ElImageViewer
},
created() {
this.getData();
},
methods: {
selectExamine(){
orderCheckPay(this.query1).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('订单审核成功!');
}else{
this.$message.error(res.msg);
}
this.centerDialogVisible=false
this.getData();
})
},
examine(index,row){
this.query1.batchcode=row.batchcode
this.centerDialogVisible=true
},
onPreview(url) {
this.showBigImgList=url;
this.showViewer = true
},
//
closeViewer() {
this.showViewer = false
},
MisShow(){
this.editVisible=false
},
orderShow(){
this.orderShowVisible=false
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
orderList(this.query).then(res => {
console.log(res);
this.tableData = res.data.list;
this.pageTotal = res.data.count ;
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleEdit(index, row) {
this.dialogID=row.asset_id;
this.editVisible = true;
},
orderDetails(index, row) {
this.order_batchcode=row.batchcode;
this.orderShowVisible = true;
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.selectExamine{
margin: 10px 0;
}
</style>

355
src/components/page/AssetManagement/assetQuery.vue

@ -0,0 +1,355 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>资产信息查询</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.serial_number" placeholder="标准编号" class="handle-input mr10"></el-input>
<el-input v-model="query.account_name" placeholder="资产名称" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-select v-model="query.account_status" placeholder="资产状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="1" label="待托管" :value="1"></el-option>
<el-option key="2" label="已托管" :value="2"></el-option>
<el-option key="3" label="待发布" :value="3"></el-option>
<el-option key="5" label="已发布" :value="5"></el-option>
<el-option key="6" label="已下架" :value="6"></el-option>
</el-select>
<el-select v-model="query.account_apply" placeholder="审核状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="1" label="待托管审核" :value="1"></el-option>
<el-option key="2" label="托管审核不通过" :value="2"></el-option>
<el-option key="3" label="托管审核通过" :value="3"></el-option>
<el-option key="5" label="待发布审核" :value="5"></el-option>
<el-option key="6" label="发布审核不通过" :value="6"></el-option>
<el-option key="7" label="发布审核通过" :value="7"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="create_time" label="创建时间" :formatter="formatDate" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number" align="center"></el-table-column>
<el-table-column label="资产名称" prop="serial_name" align="center"></el-table-column>
<el-table-column prop="firm_name" label="机构名称" align="center"></el-table-column>
<el-table-column prop="count" label="托管数量" width="80" align="center"></el-table-column>
<el-table-column prop="surplus_count" label="剩余数量" width="80" align="center"></el-table-column>
<el-table-column prop="asset_status" label="资产状态" align="center">
<template slot-scope="scope">
<span v-if="scope.row.asset_status==1">待复核</span>
<span v-else-if="scope.row.asset_status==0">待审核</span>
<span v-else-if="scope.row.asset_status==2">发布中</span>
<span v-else-if="scope.row.asset_status==3">已下架</span>
<span v-else-if="scope.row.asset_status==4">已转让</span>
<span v-else-if="scope.row.asset_status==5">待支付挂牌费</span>
</template>
</el-table-column>
<el-table-column prop="username" label="审核人员" align="center"></el-table-column>
<el-table-column label="操作" width="250" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
<el-button
type="text"
v-if="scope.row.asset_status==2"
@click="operationRecord(scope.row)">
<!-- {{scope.row | operationStatus}} -->
强制摘牌
</el-button>
<el-button
type="text"
@click="blacklist( scope.row)"
>交易查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :assets_type="1" @getData="getData">
</whyDialog>
</div>
</template>
<script>
import { getAccountList ,coerceRemove,addedAsset,updateBlackList,auditList} from '../../../api/index';
import moment from 'moment'
export default {
data() {
return {
dialogID:'',
dialogType:2,
query: {
serial_number: '',
account_name: '',
firm_name: '',
account_status: '',
account_apply: '',
auditID:'',
time: '',
count:'',
surplus_count:'',
page: 1,
limit: 10
},
query1:{
uid:'',
buyer_account_type:0,
enter_shop_type:0,
third_party_type:0
},
tableData: [],
recordList:[],
auditList:[],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
this.getAuditList()
},
methods: {
MisShow(){
this.editVisible=false
},
//
getAuditList(){
auditList().then(res => {
// console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
//
addBlacklist(){
updateBlackList(this.query1).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success(res.msg);
}else{
this.$message.error(res.msg);
}
this.editVisible2=false
});
},
//
operationRecord(row){
if (row.asset_status==3) {
this.addedAsset(row.id)
}else if(row.asset_status==2){
this.coerceRemove(row.id)
}
},
//
addedAsset(id){
let data={id:id}
addedAsset(data).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success('操作成功~');
this.getData()
}else{
this.$message.error(res.msg);
}
});
},
//
coerceRemove(id){
let data={id:id}
const loading = this.$loading({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
coerceRemove(data).then(res => {
console.log(res);
if (res.code==100) {
this.$message.success('操作成功~');
this.getData()
loading.close();
}else{
this.$message.error(res.msg);
}
});
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
formatDate(row,colnum){
return moment(row.create_time *1000 ).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
getAccountList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count;
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleEdit(index, row) {
this.dialogID=row.id;
this.editVisible = true;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
},
filters:{
operationStatus(res){
let text='';
if(res.asset_status==2){
text='下架资产'
}
return text
}
}
};
</script>
<style scoped>
.record_select{
display: flex;
flex-direction: column;
}
.record_select >>> .el-checkbox{
margin-bottom: 10px;
}
.record_content{
font-size: 16px;
margin-bottom: 10px;
}
.recordTips{
font-size: 16px;
margin-bottom: 15px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

268
src/components/page/AssetManagement/delistingAudit.vue

@ -0,0 +1,268 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>摘牌申请审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.serial_name" placeholder="资产名称" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.apply_name" placeholder="法人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.account_apply" placeholder="审核状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
@selection-change="handleSelectionChange"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number" ></el-table-column>
<el-table-column prop="update_time" :formatter="formatDate" label="申请时间"></el-table-column>
<el-table-column label="资产名称" prop="serial_name"></el-table-column>
<el-table-column prop="firm_name" label="机构名称"></el-table-column>
<el-table-column prop="apply_name" label="法人名称"></el-table-column>
<el-table-column label="审核状态">
<template slot-scope="scope">
<span v-if="scope.row.asset_check_status==0">待审核</span>
<span v-else-if="scope.row.asset_check_status==1">审核通过</span>
</template>
</el-table-column>
<el-table-column label="审核图片" align="center">
<template slot-scope="scope" v-if="scope.row.delist_file_img!=null">
<img :src="scope.row.delist_file_img" width="40" height="40" @click="onPreview([scope.row.delist_file_img])">
</template>
</el-table-column>
<el-table-column prop="audit_staff_name" label="审核人员"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
</template>
</el-table-column>
</el-table>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :isexamine="true" :assets_type="4" @getData="getData">
</whyDialog>
</div>
<el-image-viewer
v-if="showViewer"
:on-close="closeViewer"
:url-list="showBigImgList"
/>
</div>
</template>
<script>
import { outCheckList,auditList } from '../../../api/index';
import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
import moment from 'moment'
export default {
// name: 'basetable',
data() {
return {
query: {
account_name: '',
firm_name: '',
account_status: '',
audit_staff_name:'',
account_apply: '',
auditID: '',
time: '',
page: 1,
limit: 10
},
showViewer:false,
showBigImgList:[],
tableData: [],
multipleSelection: [],
delList: [],
auditList:[],
editVisible: false,
pageTotal: 0,
dialogID:'',
dialogType:2,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue'),
ElImageViewer
},
created() {
this.getData();
this.getAuditList();
},
methods: {
//
closeViewer() {
this.showViewer = false
},
onPreview(url) {
this.showBigImgList=url;
this.showViewer = true
},
MisShow(){
this.editVisible=false
},
//
formatDate(row,colnum){
return moment(row.create_time *1000).format('YYYY-MM-DD HH:mm:ss')
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
getAuditList(){
auditList().then(res => {
// console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
// easy-mock
getData() {
outCheckList(this.query).then(res => {
console.log(res);
this.tableData = res.data.list;
this.pageTotal = res.pageTotal || 50;
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

269
src/components/page/AssetManagement/groundingAudit.vue

@ -0,0 +1,269 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>资产审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.serial_name" placeholder="资产名称" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.apply_name" placeholder="法人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.account_apply" placeholder="审核状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
@selection-change="handleSelectionChange"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number"></el-table-column>
<el-table-column prop="update_time" :formatter="formatDate" label="申请时间" align="center"></el-table-column>
<el-table-column label="资产名称" prop="serial_name" align="center"></el-table-column>
<el-table-column prop="firm_name" label="机构名称" align="center"></el-table-column>
<el-table-column prop="apply_name" label="法人名称" align="center"></el-table-column>
<el-table-column label="审核状态" align="center">
<template slot-scope="scope">
<span v-if="scope.row.asset_status==1">待复核</span>
<span v-else-if="scope.row.asset_status==0">待审核</span>
<span v-else-if="scope.row.asset_status==2">发布中</span>
<span v-else-if="scope.row.asset_status==3">已下架</span>
<span v-else-if="scope.row.asset_status==4">已转让</span>
</template>
</el-table-column>
<el-table-column label="支付凭证" align="center">
<template slot-scope="scope" v-if="scope.row.payment_document!=''">
<a :href="scope.row.payment_document" target="_blank" rel="nofollow" class="upload_span">点击查看</a>
</template>
</el-table-column>
<el-table-column prop="audit_staff_name" label="审核人员" align="center"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :isexamine="true" :assets_type="2" @getData="getData">
</whyDialog>
</div>
</div>
</template>
<script>
import { assetCheckList,auditList } from '../../../api/index';
import moment from 'moment'
export default {
// name: 'basetable',
data() {
return {
query: {
account_name: '',
firm_name: '',
account_status: '',
audit_staff_name:'',
account_apply: '',
auditID: '',
time: '',
page: 1,
limit: 10
},
tableData: [],
multipleSelection: [],
delList: [],
auditList:[],
editVisible: false,
pageTotal: 0,
dialogID:'',
dialogType:2,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
this.getAuditList();
},
methods: {
MisShow(){
this.editVisible=false
},
//
formatDate(row,colnum){
return moment(row.create_time *1000).format('YYYY-MM-DD HH:mm:ss')
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
getAuditList(){
auditList().then(res => {
// console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
// easy-mock
getData() {
assetCheckList(this.query).then(res => {
console.log(res);
this.tableData = res.data.list;
this.pageTotal = res.data.count
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.upload_span{
color: #294CC6;
text-decoration: underline;
cursor: pointer;
}
</style>

314
src/components/page/AssetManagement/payReview.vue

@ -0,0 +1,314 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>挂牌费支付审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.serial_name" placeholder="资产名称" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.apply_name" placeholder="法人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.account_apply" placeholder="审核状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
@selection-change="handleSelectionChange"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number" ></el-table-column>
<el-table-column prop="update_time" :formatter="formatDate" label="申请时间" align="center"></el-table-column>
<el-table-column label="资产名称" prop="serial_name" align="center"></el-table-column>
<el-table-column prop="firm_name" label="机构名称" align="center"></el-table-column>
<el-table-column prop="apply_name" label="法人名称" align="center"></el-table-column>
<el-table-column label="审核状态" align="center">
<template slot-scope="scope">
<span v-if="scope.row.asset_check_status==0">待审核</span>
<span v-else-if="scope.row.asset_check_status==2">待复核</span>
</template>
</el-table-column>
<el-table-column label="支付凭证" align="center">
<template slot-scope="scope" v-if="scope.row.payment_document!=''">
<a :href="scope.row.payment_document" target="_blank" rel="nofollow" class="upload_span">点击查看</a>
</template>
</el-table-column>
<el-table-column prop="audit_staff_name" label="审核人员" align="center"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
<el-button
type="text"
@click="examine(scope.$index, scope.row)"
>挂牌费付款审核</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :assets_type="1" @getData="getData">
</whyDialog>
<el-dialog
title="挂牌费付款审核"
:visible.sync="centerDialogVisible"
width="30%"
center>
<span>该订单的付款审核是否通过</span>
<div class="selectExamine">
<el-radio v-model="query1.status" :label="1">审核通过</el-radio>
<el-radio v-model="query1.status" :label="2">审核不通过</el-radio>
</div>
<div class="messege" v-if="query1.status==2">
<span>审核不通过原因</span>
<el-input placeholder="请输入" v-model="query1.message" class="handle-input mr10"></el-input>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="centerDialogVisible = false"> </el-button>
<el-button type="primary" @click="selectExamine()"> </el-button>
</span>
</el-dialog>
</div>
</div>
</template>
<script>
import { payList,auditList ,payCheck} from '../../../api/index';
import moment from 'moment'
export default {
// name: 'basetable',
data() {
return {
centerDialogVisible:false,
query: {
account_name: '',
firm_name: '',
account_status: '',
audit_staff_name:'',
account_apply: '',
auditID: '',
time: '',
page: 1,
limit: 10
},
query1:{
id:'',
status:'',
message:''
},
tableData: [],
multipleSelection: [],
delList: [],
auditList:[],
editVisible: false,
pageTotal: 0,
dialogID:'',
dialogType:2,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
this.getAuditList();
},
methods: {
selectExamine(){
payCheck(this.query1).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('审核成功!');
this.getData();
}else{
this.$message.error(res.msg);
}
this.centerDialogVisible=false
this.getData();
})
},
examine(index,row){
this.query1.id=row.id
this.centerDialogVisible=true
},
MisShow(){
this.editVisible=false
},
//
formatDate(row,colnum){
return moment(row.create_time *1000).format('YYYY-MM-DD HH:mm:ss')
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
getAuditList(){
auditList().then(res => {
// console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
// easy-mock
getData() {
payList(this.query).then(res => {
console.log(res);
this.tableData = res.data.list;
this.pageTotal = res.data.count
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.selectExamine{
margin: 10px 0;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.upload_span{
color: #294CC6;
text-decoration: underline;
cursor: pointer;
}
</style>

259
src/components/page/AssetManagement/releaseAudit.vue

@ -0,0 +1,259 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 资产管理
</el-breadcrumb-item>
<el-breadcrumb-item>资产发布审核</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input v-model="query.account_name" placeholder="资产名称" class="handle-input mr10"></el-input>
<el-input v-model="query.firm_name" placeholder="机构名称" class="handle-input mr10"></el-input>
<el-input v-model="query.username" placeholder="法人名称" class="handle-input mr10"></el-input>
<el-select v-model="query.account_apply" placeholder="审核状态" class="handle-select mr10">
<el-option key="4" label="全部" :value="4"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-select v-model="query.auditID" placeholder="审核人员" class="handle-select mr10">
<el-option v-for="item in auditList" :key="item.uid" :label="item.username" :value="item.uid"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="timestamp"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
<el-button type="primary" plain @click="reset">重置</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
@selection-change="handleSelectionChange"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column label="业务编码" prop="serial_number" ></el-table-column>
<el-table-column prop="update_time" :formatter="formatDate" label="申请时间"></el-table-column>
<el-table-column label="资产名称" prop="serial_name"></el-table-column>
<el-table-column prop="firm_name" label="机构名称"></el-table-column>
<el-table-column prop="apply_name" label="法人名称"></el-table-column>
<el-table-column label="审核状态">
<template slot-scope="scope">
<span v-if="scope.row.apply_status==1">发布审核通过</span>
<span v-else-if="scope.row.apply_status==0">待发布审核</span>
<span v-else-if="scope.row.apply_status==2">待上架审核</span>
<span v-else-if="scope.row.apply_status==3">上架审核通过</span>
<span v-else-if="scope.row.apply_status==4">上架审核不通过</span>
<span v-else-if="scope.row.apply_status==5">发布审核不通过</span>
</template>
</el-table-column>
<el-table-column prop="username" label="审核人员"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<whyDialog v-if="editVisible" :isshow="editVisible" :dialogID="dialogID"
:dialogType="dialogType" @MisShow="MisShow" :isexamine="true" :assets_type="3" @getData="getData">
</whyDialog>
</div>
</template>
<script>
import { sendList,auditList } from '../../../api/index';
import moment from 'moment'
export default {
// name: 'basetable',
data() {
return {
query: {
account_name: '',
firm_name: '',
username: '',
account_status: '',
account_apply: '',
auditID: '',
time: '',
page: 1,
limit: 10
},
dialogID:'',
dialogType:2,
tableData: [],
multipleSelection: [],
delList: [],
auditList:[],
editVisible: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
components:{
whyDialog: () => import('../../common/dialog/insex.vue')
},
created() {
this.getData();
this.getAuditList();
},
methods: {
MisShow(){
this.editVisible=false
},
//
formatDate(row,colnum){
return moment(row[colnum.create_time]).format('YYYY-MM-DD HH:mm:ss')
},
//
reset(){
Object.keys(this.query).forEach(key => {
console.info(key)
if (key!='page' && key!='limit') {
this.query[key] = ''
}
});
},
//
getAuditList(){
auditList().then(res => {
// console.log(res);
if (res.code==100) {
this.auditList=res.data.list
}
});
},
// easy-mock
getData() {
sendList(this.query).then(res => {
// console.log(res);
this.tableData = res.data.list;
this.pageTotal = res.pageTotal || 50;
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
//
handleEdit(index, row) {
this.editVisible = true;
this.dialogID=row.id;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

149
src/components/page/BaseCharts.vue

@ -0,0 +1,149 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-pie-chart"></i> schart图表
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="plugins-tips">
vue-schartvue.js封装sChart.js的图表组件
访问地址
<a
href="https://github.com/lin-xin/vue-schart"
target="_blank"
>vue-schart</a>
</div>
<div class="schart-box">
<div class="content-title">柱状图</div>
<schart class="schart" canvasId="bar" :options="options1"></schart>
</div>
<div class="schart-box">
<div class="content-title">折线图</div>
<schart class="schart" canvasId="line" :options="options2"></schart>
</div>
<div class="schart-box">
<div class="content-title">饼状图</div>
<schart class="schart" canvasId="pie" :options="options3"></schart>
</div>
<div class="schart-box">
<div class="content-title">环形图</div>
<schart class="schart" canvasId="ring" :options="options4"></schart>
</div>
</div>
</div>
</template>
<script>
import Schart from 'vue-schart';
export default {
name: 'basecharts',
components: {
Schart
},
data() {
return {
options1: {
type: 'bar',
title: {
text: '最近一周各品类销售图'
},
bgColor: '#fbfbfb',
labels: ['周一', '周二', '周三', '周四', '周五'],
datasets: [
{
label: '家电',
fillColor: 'rgba(241, 49, 74, 0.5)',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 190, 135, 160]
},
{
label: '食品',
data: [144, 198, 150, 235, 120]
}
]
},
options2: {
type: 'line',
title: {
text: '最近几个月各品类销售趋势图'
},
bgColor: '#fbfbfb',
labels: ['6月', '7月', '8月', '9月', '10月'],
datasets: [
{
label: '家电',
data: [234, 278, 270, 190, 230]
},
{
label: '百货',
data: [164, 178, 150, 135, 160]
},
{
label: '食品',
data: [114, 138, 200, 235, 190]
}
]
},
options3: {
type: 'pie',
title: {
text: '服装品类销售饼状图'
},
legend: {
position: 'left'
},
bgColor: '#fbfbfb',
labels: ['T恤', '牛仔裤', '连衣裙', '毛衣', '七分裤', '短裙', '羽绒服'],
datasets: [
{
data: [334, 278, 190, 235, 260, 200, 141]
}
]
},
options4: {
type: 'ring',
title: {
text: '环形三等分'
},
showValue: false,
legend: {
position: 'bottom',
bottom: 40
},
bgColor: '#fbfbfb',
labels: ['vue', 'react', 'angular'],
datasets: [
{
data: [500, 500, 500]
}
]
}
};
}
};
</script>
<style scoped>
.schart-box {
display: inline-block;
margin: 20px;
}
.schart {
width: 600px;
height: 400px;
}
.content-title {
clear: both;
font-weight: 400;
line-height: 50px;
margin: 10px 0;
font-size: 22px;
color: #1f2f3d;
}
</style>

152
src/components/page/BaseForm.vue

@ -0,0 +1,152 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-calendar"></i> 表单
</el-breadcrumb-item>
<el-breadcrumb-item>基本表单</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="form-box">
<el-form ref="form" :model="form" label-width="80px">
<el-form-item label="表单名称">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="选择器">
<el-select v-model="form.region" placeholder="请选择">
<el-option key="bbk" label="步步高" value="bbk"></el-option>
<el-option key="xtc" label="小天才" value="xtc"></el-option>
<el-option key="imoo" label="imoo" value="imoo"></el-option>
</el-select>
</el-form-item>
<el-form-item label="日期时间">
<el-col :span="11">
<el-date-picker
type="date"
placeholder="选择日期"
v-model="form.date1"
value-format="yyyy-MM-dd"
style="width: 100%;"
></el-date-picker>
</el-col>
<el-col class="line" :span="2">-</el-col>
<el-col :span="11">
<el-time-picker
placeholder="选择时间"
v-model="form.date2"
style="width: 100%;"
></el-time-picker>
</el-col>
</el-form-item>
<el-form-item label="城市级联">
<el-cascader :options="options" v-model="form.options"></el-cascader>
</el-form-item>
<el-form-item label="选择开关">
<el-switch v-model="form.delivery"></el-switch>
</el-form-item>
<el-form-item label="多选框">
<el-checkbox-group v-model="form.type">
<el-checkbox label="步步高" name="type"></el-checkbox>
<el-checkbox label="小天才" name="type"></el-checkbox>
<el-checkbox label="imoo" name="type"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="单选框">
<el-radio-group v-model="form.resource">
<el-radio label="步步高"></el-radio>
<el-radio label="小天才"></el-radio>
<el-radio label="imoo"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="文本框">
<el-input type="textarea" rows="5" v-model="form.desc"></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>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'baseform',
data() {
return {
options: [
{
value: 'guangdong',
label: '广东省',
children: [
{
value: 'guangzhou',
label: '广州市',
children: [
{
value: 'tianhe',
label: '天河区'
},
{
value: 'haizhu',
label: '海珠区'
}
]
},
{
value: 'dongguan',
label: '东莞市',
children: [
{
value: 'changan',
label: '长安镇'
},
{
value: 'humen',
label: '虎门镇'
}
]
}
]
},
{
value: 'hunan',
label: '湖南省',
children: [
{
value: 'changsha',
label: '长沙市',
children: [
{
value: 'yuelu',
label: '岳麓区'
}
]
}
]
}
],
form: {
name: '',
region: '',
date1: '',
date2: '',
delivery: true,
type: ['步步高'],
resource: '小天才',
desc: '',
options: []
}
};
},
methods: {
onSubmit() {
this.$message.success('提交成功!');
}
}
};
</script>

219
src/components/page/BaseTable.vue

@ -0,0 +1,219 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 基础表格
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-button
type="primary"
icon="el-icon-delete"
class="handle-del mr10"
@click="delAllSelection"
>批量删除</el-button>
<el-select v-model="query.address" placeholder="地址" class="handle-select mr10">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-input v-model="query.name" placeholder="用户名" class="handle-input mr10"></el-input>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center"></el-table-column>
<el-table-column prop="id" label="ID" width="55" align="center"></el-table-column>
<el-table-column prop="name" label="用户名"></el-table-column>
<el-table-column label="账户余额">
<template slot-scope="scope">{{scope.row.money}}</template>
</el-table-column>
<el-table-column label="头像(查看大图)" align="center">
<template slot-scope="scope">
<el-image
class="table-td-thumb"
:src="scope.row.thumb"
:preview-src-list="[scope.row.thumb]"
></el-image>
</template>
</el-table-column>
<el-table-column prop="address" label="地址"></el-table-column>
<el-table-column label="状态" align="center">
<template slot-scope="scope">
<el-tag
:type="scope.row.state==='成功'?'success':(scope.row.state==='失败'?'danger':'')"
>{{scope.row.state}}</el-tag>
</template>
</el-table-column>
<el-table-column prop="date" label="注册时间"></el-table-column>
<el-table-column label="操作" width="180" align="center">
<template slot-scope="scope">
<el-button
type="text"
icon="el-icon-edit"
@click="handleEdit(scope.$index, scope.row)"
>编辑</el-button>
<el-button
type="text"
icon="el-icon-delete"
class="red"
@click="handleDelete(scope.$index, scope.row)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.pageIndex"
:page-size="query.pageSize"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<!-- 编辑弹出框 -->
<el-dialog title="编辑" :visible.sync="editVisible" width="30%">
<el-form ref="form" :model="form" label-width="70px">
<el-form-item label="用户名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="地址">
<el-input v-model="form.address"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false"> </el-button>
<el-button type="primary" @click="saveEdit"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { } from '../../api/index';
export default {
name: 'basetable',
data() {
return {
query: {
address: '',
name: '',
pageIndex: 1,
pageSize: 10
},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
form: {},
idx: -1,
id: -1
};
},
created() {
// this.getData();
},
methods: {
// easy-mock
getData() {
fetchData(this.query).then(res => {
console.log(res);
this.tableData = res.list;
this.pageTotal = res.pageTotal || 50;
});
},
//
handleSearch() {
this.$set(this.query, 'pageIndex', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleSelectionChange(val) {
this.multipleSelection = val;
},
delAllSelection() {
const length = this.multipleSelection.length;
let str = '';
this.delList = this.delList.concat(this.multipleSelection);
for (let i = 0; i < length; i++) {
str += this.multipleSelection[i].name + ' ';
}
this.$message.error(`删除了${str}`);
this.multipleSelection = [];
},
//
handleEdit(index, row) {
this.idx = index;
this.form = row;
this.editVisible = true;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'pageIndex', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 300px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

507
src/components/page/Dashboard.vue

@ -0,0 +1,507 @@
<template>
<div>
<el-row :gutter="20">
<el-col :span="18">
<el-card shadow="hover" class="mgb20" style="height:215px;">
<p class="work_title">日常工作事项</p>
<div class="work_content">
<div class="work_item" @click="goPage('/buyerReview')">
<img src="../../assets/img/index_banner.png" alt="">
<p>开户信息审核(36)</p>
</div>
<div class="work_item" @click="goPage('/businessAudit')">
<img src="../../assets/img/index_banner1.png" alt="">
<p>商家入驻审核(13)</p>
</div>
<div class="work_item" @click="goPage('/thirdAudit')">
<img src="../../assets/img/index_banner2.png" alt="">
<p>第三方服务机构审核(36)</p>
</div>
<div class="work_item" @click="goPage('/groundingAudit')">
<img src="../../assets/img/index_banner3.png" alt="">
<p>资产审核(36)</p>
</div>
<!-- <div class="work_item" @click="goPage('/businessAudit')">
<img src="../../assets/img/index_banner4.png" alt="">
<p>资产发布审核(36)</p>
</div> -->
<div class="work_item" @click="goPage('/businessAudit')">
<img src="../../assets/img/index_banner5.png" alt="">
<p>待公示订单(36)</p>
</div>
<div class="work_item" @click="goPage('/businessAudit')">
<img src="../../assets/img/index_banner6.png" alt="">
<p>待结算订单(36)</p>
</div>
<div class="work_item" @click="goPage('/businessAudit')">
<img src="../../assets/img/index_banner7.png" alt="">
<p>退款订单审核(36)</p>
</div>
</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card shadow="hover" style="height:215px;">
<div slot="header" class="sanjiao_title">
<span>运营平台通知</span>
<div class="sanjiao">
<div class="sanjiao_left"></div>
<div class="sanjiao_right"></div>
</div>
</div>
<div>
<div class="notice_item">
<span class="notice_item_time">[2021-06-16]</span>
<span>个人绩效评分规则更新5</span>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-card shadow="hover" class="mgb20" style="height:200px;">
<p class="work_title">昨日工作汇总</p>
<div class="summary">
<div class="summary_item" >
<div class="summary_item_left">昨日成交金额</div>
<div>¥845,256,996.30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日结算金额</div>
<div>¥845,256,996.30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日开户审核</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日入驻审核</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日机构审核</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日挂牌审核</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日发布审核</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日公示处理</div>
<div>0</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日结算处理</div>
<div>30</div>
</div>
<div class="summary_item" >
<div class="summary_item_left">昨日退款处理</div>
<div>30</div>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="18">
<el-card shadow="hover" style="height:460px;">
<schart ref="line" class="schart" canvasId="line" :options="options2"></schart>
</el-card>
</el-col>
<el-col :span="6">
<el-card shadow="hover" style="height:460px;">
<p class="work_title">本月绩效达标情况</p>
<div class="achievements">
<span>开户信息审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#FACD91"></el-progress>
</div>
<div class="achievements">
<span>商家入驻审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#CAF982"></el-progress>
</div>
<div class="achievements">
<span>第三方服务机构审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#02A7F0"></el-progress>
</div>
<div class="achievements">
<span>资产挂牌审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#EC808D"></el-progress>
</div>
<div class="achievements">
<span>资产发布审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#C280FF"></el-progress>
</div>
<div class="achievements">
<span>待公示订单</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#4E73E4"></el-progress>
</div>
<div class="achievements">
<span>待结算订单</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#849AE8"></el-progress>
</div>
<div class="achievements">
<span>退款订单审核</span>
<el-progress :text-inside="true" :stroke-width="26" :percentage="70" color="#F7AB08"></el-progress>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import Schart from 'vue-schart';
import bus from '../common/bus';
export default {
name: 'dashboard',
data() {
return {
name: localStorage.getItem('ms_username'),
todoList: [
{
title: '今天要修复100个bug',
status: false
},
{
title: '今天要修复100个bug',
status: false
},
{
title: '今天要写100行代码加几个bug吧',
status: false
},
{
title: '今天要修复100个bug',
status: false
},
{
title: '今天要修复100个bug',
status: true
},
{
title: '今天要写100行代码加几个bug吧',
status: true
}
],
data: [
{
name: '2018/09/04',
value: 1083
},
{
name: '2018/09/05',
value: 941
},
{
name: '2018/09/06',
value: 1139
},
{
name: '2018/09/07',
value: 816
},
{
name: '2018/09/08',
value: 327
},
{
name: '2018/09/09',
value: 228
},
{
name: '2018/09/10',
value: 1065
}
],
options2: {
type: 'line',
title: {
text: '本月金额汇总'
},
labels: [2,4,6,8,10,12,14,16,18,20,22,24,26,28,30],
datasets: [
{
label: '成交金额',
data: [234, 278, 270, 590, 950]
},
{
label: '结算金额',
fillColor: "rgba(132, 154, 232, 1)",
data: [164, 178, 150, 135, 160]
},
]
}
};
},
components: {
Schart
},
computed: {
role() {
return this.name === 'admin' ? '超级管理员' : '普通用户';
}
},
// created() {
// this.handleListener();
// this.changeDate();
// },
// activated() {
// this.handleListener();
// },
// deactivated() {
// window.removeEventListener('resize', this.renderChart);
// bus.$off('collapse', this.handleBus);
// },
methods: {
changeDate() {
const now = new Date().getTime();
this.data.forEach((item, index) => {
const date = new Date(now - (6 - index) * 86400000);
item.name = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
});
}
// handleListener() {
// bus.$on('collapse', this.handleBus);
// // renderChart
// window.addEventListener('resize', this.renderChart);
// },
// handleBus(msg) {
// setTimeout(() => {
// this.renderChart();
// }, 200);
// },
// renderChart() {
// this.$refs.bar.renderChart();
// this.$refs.line.renderChart();
// }
}
};
</script>
<style scoped>
.achievements{
display: flex;
align-items: center;
font-size: 16px;
margin-top: 15px;
}
.achievements>>>.el-progress{
width: 340px;
}
.achievements>span{
display: inline-block;
width: 175px;
margin-right: 20px;
}
.summary{
display: flex;
flex-wrap: wrap;
}
.summary_item{
width:300px ;
height: 50px;
display: flex;
border: 1px solid #D7D7D7;
font-size: 16px;
color: #849AE8;
align-items: center;
margin-top: 15px;
margin-right: 20px;
}
.summary_item:nth-child(5n+5){
margin-right: 0px;
}
.summary_item >div{
display: flex;
align-items: center;
height: 100%;
width: 50%;
justify-content: center;
}
.summary_item_left{
background-color: #4E73E4;
color: white;
text-align: center;
font-size: 16px;
}
.notice{
margin-top: 10px;
}
.notice_item{
font-weight: 400;
font-size: 16px;
}
.notice_item:hover{
color: rgb(41, 76, 198);
}
.notice_item_time{
display: inline-block;
color: rgb(170, 170, 170);
margin-right: 10px;
}
.sanjiao{
display: flex;
align-items: center;
}
.sanjiao>div{
cursor: pointer;
}
.sanjiao_left{
width:0;
height:0;
border-top:10px solid transparent;
border-bottom:10px solid transparent;
border-right:10px solid #D7D7D7;
margin-right: 15px;
}
.sanjiao_right{
width:0;
height:0;
border-top:10px solid transparent;
border-bottom:10px solid transparent;
border-left:10px solid #D7D7D7;
}
.sanjiao_title{
font-weight: 500;
font-size: 18px;
display: flex;
align-items: center;
justify-content: space-between;
}
.work_title{
font-weight: 500;
font-size: 18px;
}
.work_content{
display: flex;
justify-content: space-between;
}
.work_item{
font-weight: 400;
font-size: 16px;
text-align: center;
margin-top: 40px;
cursor: pointer;
}
.work_item img{
width: 60px;
height: 60px;
margin-bottom: 5px;
}
.el-row {
margin-bottom: 20px;
}
.grid-content {
display: flex;
align-items: center;
height: 100px;
}
.grid-cont-right {
flex: 1;
text-align: center;
font-size: 14px;
color: #999;
}
.grid-num {
font-size: 30px;
font-weight: bold;
}
.grid-con-icon {
font-size: 50px;
width: 100px;
height: 100px;
text-align: center;
line-height: 100px;
color: #fff;
}
.grid-con-1 .grid-con-icon {
background: rgb(45, 140, 240);
}
.grid-con-1 .grid-num {
color: rgb(45, 140, 240);
}
.grid-con-2 .grid-con-icon {
background: rgb(100, 213, 114);
}
.grid-con-2 .grid-num {
color: rgb(45, 140, 240);
}
.grid-con-3 .grid-con-icon {
background: rgb(242, 94, 67);
}
.grid-con-3 .grid-num {
color: rgb(242, 94, 67);
}
.user-info {
display: flex;
align-items: center;
padding-bottom: 20px;
border-bottom: 2px solid #ccc;
margin-bottom: 20px;
}
.user-avator {
width: 120px;
height: 120px;
border-radius: 50%;
}
.user-info-cont {
padding-left: 50px;
flex: 1;
font-size: 14px;
color: #999;
}
.user-info-cont div:first-child {
font-size: 30px;
color: #222;
}
.user-info-list {
font-size: 14px;
color: #999;
line-height: 25px;
}
.user-info-list span {
margin-left: 70px;
}
.mgb20 {
margin-bottom: 20px;
}
.todo-item {
font-size: 14px;
}
.todo-item-del {
text-decoration: line-through;
color: #999;
}
.schart {
width: 100%;
height: 400px;
}
</style>

24
src/components/page/Donate.vue

@ -0,0 +1,24 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-redpacket_fill"></i> 支持作者
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="plugins-tips">如果该框架对你有帮助那就请作者喝杯饮料吧加微信号linxin_20探讨问题</div>
<div>
<img src="https://lin-xin.gitee.io/images/weixin.jpg" />
</div>
</div>
</div>
</template>
<script>
export default {};
</script>
<style>
</style>

36
src/components/page/DragDialog.vue

@ -0,0 +1,36 @@
<template>
<section class="main">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-rank"></i> 拖拽组件</el-breadcrumb-item>
<el-breadcrumb-item>拖拽弹框</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<p>通过指令 v-dialogDrag 使 Dialog 对话框具有可拖拽的功能</p>
<br>
<el-button type="primary" @click="visible = true;">点我弹框</el-button>
</div>
<el-dialog v-dialogDrag title="拖拽弹框" center :visible.sync="visible" width="30%">
我是一个可以拖拽的对话框
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="visible = false"> </el-button>
</span>
</el-dialog>
</section>
</template>
<script>
export default {
data(){
return {
visible: false
}
}
}
</script>
<style>
</style>

174
src/components/page/DragList.vue

@ -0,0 +1,174 @@
<template>
<section class="main">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-rank"></i> 拖拽组件</el-breadcrumb-item>
<el-breadcrumb-item>拖拽排序</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="plugins-tips">
Vue.Draggable基于 Sortable.js Vue 拖拽组件
访问地址<a href="https://github.com/SortableJS/Vue.Draggable" target="_blank">Vue.Draggable</a>
</div>
<div class="drag-box">
<div class="drag-box-item">
<div class="item-title">todo</div>
<draggable v-model="todo" @remove="removeHandle" :options="dragOptions">
<transition-group tag="div" id="todo" class="item-ul">
<div v-for="item in todo" class="drag-list" :key="item.id">
{{item.content}}
</div>
</transition-group>
</draggable>
</div>
<div class="drag-box-item">
<div class="item-title">doing</div>
<draggable v-model="doing" @remove="removeHandle" :options="dragOptions">
<transition-group tag="div" id="doing" class="item-ul">
<div v-for="item in doing" class="drag-list" :key="item.id">
{{item.content}}
</div>
</transition-group>
</draggable>
</div>
<div class="drag-box-item">
<div class="item-title">done</div>
<draggable v-model="done" @remove="removeHandle" :options="dragOptions">
<transition-group tag="div" id="done" class="item-ul">
<div v-for="item in done" class="drag-list" :key="item.id">
{{item.content}}
</div>
</transition-group>
</draggable>
</div>
</div>
</div>
</section>
</template>
<script>
import draggable from 'vuedraggable'
export default {
name: 'draglist',
data() {
return {
dragOptions:{
animation: 120,
scroll: true,
group: 'sortlist',
ghostClass: 'ghost-style'
},
todo: [
{
id: 1,
content: '开发图表组件'
},
{
id: 2,
content: '开发拖拽组件'
},
{
id: 3,
content: '开发权限测试组件'
}
],
doing: [
{
id: 1,
content: '开发登录注册页面'
},
{
id: 2,
content: '开发头部组件'
},
{
id: 3,
content: '开发表格相关组件'
},
{
id: 4,
content: '开发表单相关组件'
}
],
done:[
{
id: 1,
content: '初始化项目,生成工程目录,完成相关配置'
},
{
id: 2,
content: '开发项目整体框架'
}
]
}
},
components:{
draggable
},
methods: {
removeHandle(event){
console.log(event);
this.$message.success(`${event.from.id} 移动到 ${event.to.id} `);
}
}
}
</script>
<style scoped>
.drag-box{
display: flex;
user-select: none;
}
.drag-box-item {
flex: 1;
max-width: 330px;
min-width: 300px;
background-color: #eff1f5;
margin-right: 16px;
border-radius: 6px;
border: 1px #e1e4e8 solid;
}
.item-title{
padding: 8px 8px 8px 12px;
font-size: 14px;
line-height: 1.5;
color: #24292e;
font-weight: 600;
}
.item-ul{
padding: 0 8px 8px;
height: 500px;
overflow-y: scroll;
}
.item-ul::-webkit-scrollbar{
width: 0;
}
.drag-list {
border: 1px #e1e4e8 solid;
padding: 10px;
margin: 5px 0 10px;
list-style: none;
background-color: #fff;
border-radius: 6px;
cursor: pointer;
-webkit-transition: border .3s ease-in;
transition: border .3s ease-in;
}
.drag-list:hover {
border: 1px solid #20a0ff;
}
.drag-title {
font-weight: 400;
line-height: 25px;
margin: 10px 0;
font-size: 22px;
color: #1f2f3d;
}
.ghost-style{
display: block;
color: transparent;
border-style: dashed
}
</style>

46
src/components/page/I18n.vue

@ -0,0 +1,46 @@
<template>
<section class="main">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-lx-global"></i> {{$t('i18n.breadcrumb')}}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<span>{{$t('i18n.tips')}}</span>
<el-button type="primary" @click="$i18n.locale = $i18n.locale === 'zh'?'en':'zh';">{{$t('i18n.btn')}}</el-button>
<div class="list">
<h2>{{$t('i18n.title1')}}</h2>
<p>{{$t('i18n.p1')}}</p>
<p>{{$t('i18n.p2')}}</p>
<p>{{$t('i18n.p3')}}</p>
</div>
<h2>{{$t('i18n.title2')}}</h2>
<div>
<i18n path="i18n.info" tag="p">
<a place="action" href="https://element.eleme.cn/2.0/#/zh-CN/component/i18n">{{ $t('i18n.value') }}</a>
</i18n>
</div>
</div>
</section>
</template>
<script>
export default {
data(){
return {
}
}
}
</script>
<style scoped>
.list{
padding: 30px 0;
}
.list p{
margin-bottom: 20px;
}
a{
color: #409eff;
}
</style>

225
src/components/page/Icon.vue

@ -0,0 +1,225 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-lx-emoji"></i> 自定义图标</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<h2>使用方法</h2>
<p style="line-height: 50px;">
直接通过设置类名为 el-icon-lx-iconName 来使用即可例如{{iconList.length}}个图标
</p>
<p class="example-p">
<i class="el-icon-lx-redpacket_fill" style="font-size: 30px;color: #ff5900"></i>
<span>&lt;i class=&quot;el-icon-lx-redpacket_fill&quot;&gt;&lt;/i&gt;</span>
</p>
<p class="example-p">
<i class="el-icon-lx-weibo" style="font-size: 30px;color:#fd5656"></i>
<span>&lt;i class=&quot;el-icon-lx-weibo&quot;&gt;&lt;/i&gt;</span>
</p>
<p class="example-p">
<i class="el-icon-lx-emojifill" style="font-size: 30px;color: #ffc300"></i>
<span>&lt;i class=&quot;el-icon-lx-emojifill&quot;&gt;&lt;/i&gt;</span>
</p>
<br>
<h2>图标</h2>
<div class="search-box">
<el-input class="search" size="large" v-model="keyword" clearable placeholder="请输入图标名称"></el-input>
</div>
<ul>
<li class="icon-li" v-for="(item,index) in list" :key="index">
<div class="icon-li-content">
<i :class="`el-icon-lx-${item}`"></i>
<span>{{item}}</span>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
export default {
data: function(){
return {
keyword: '',
iconList: [
'attentionforbid',
'attentionforbidfill',
'attention',
'attentionfill',
'tag',
'tagfill',
'people',
'peoplefill',
'notice',
'noticefill',
'mobile',
'mobilefill',
'voice',
'voicefill',
'unlock',
'lock',
'home',
'homefill',
'delete',
'deletefill',
'notification',
'notificationfill',
'notificationforbidfill',
'like',
'likefill',
'comment',
'commentfill',
'camera',
'camerafill',
'warn',
'warnfill',
'time',
'timefill',
'location',
'locationfill',
'favor',
'favorfill',
'skin',
'skinfill',
'news',
'newsfill',
'record',
'recordfill',
'emoji',
'emojifill',
'message',
'messagefill',
'goods',
'goodsfill',
'crown',
'crownfill',
'move',
'add',
'hot',
'hotfill',
'service',
'servicefill',
'present',
'presentfill',
'pic',
'picfill',
'rank',
'rankfill',
'male',
'female',
'down',
'top',
'recharge',
'rechargefill',
'forward',
'forwardfill',
'info',
'infofill',
'redpacket',
'redpacket_fill',
'roundadd',
'roundaddfill',
'friendadd',
'friendaddfill',
'cart',
'cartfill',
'more',
'moreandroid',
'back',
'right',
'shop',
'shopfill',
'question',
'questionfill',
'roundclose',
'roundclosefill',
'roundcheck',
'roundcheckfill',
'global',
'mail',
'punch',
'exit',
'upload',
'read',
'file',
'link',
'full',
'group',
'friend',
'profile',
'addressbook',
'calendar',
'text',
'copy',
'share',
'wifi',
'vipcard',
'weibo',
'remind',
'refresh',
'filter',
'settings',
'scan',
'qrcode',
'cascades',
'apps',
'sort',
'searchlist',
'search',
'edit'
]
}
},
computed: {
list(){
return this.iconList.filter((item) => {
return item.indexOf(this.keyword) !== -1;
})
}
}
}
</script>
<style scoped>
.example-p{
height: 45px;
display: flex;
align-items: center;
}
.search-box{
text-align: center;
margin-top: 10px;
}
.search{
width: 300px;
}
ul,li{
list-style: none;
}
.icon-li{
display: inline-block;
padding: 10px;
width: 120px;
height: 120px;
}
.icon-li-content{
display: flex;
height: 100%;
flex-direction: column;
align-items: center;
justify-content: center;
cursor: pointer;
}
.icon-li-content i{
font-size: 36px;
color: #606266;
}
.icon-li-content span{
margin-top: 10px;
color: #787878;
}
</style>

114
src/components/page/Login.vue

@ -0,0 +1,114 @@
<template>
<div class="login-wrap">
<div class="ms-login">
<div class="ms-title">后台管理系统</div>
<el-form :model="param" :rules="rules" ref="login" label-width="0px" class="ms-content">
<el-form-item prop="username">
<el-input v-model="param.uname" placeholder="username">
<el-button slot="prepend" icon="el-icon-lx-people"></el-button>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
type="password"
placeholder="password"
v-model="param.upass"
@keyup.enter.native="submitForm()"
>
<el-button slot="prepend" icon="el-icon-lx-lock"></el-button>
</el-input>
</el-form-item>
<div class="login-btn">
<el-button type="primary" @click="submitForm()">登录</el-button>
</div>
<p class="login-tips">Tips : 用户名和密码随便填</p>
</el-form>
</div>
</div>
</template>
<script>
import {login} from '../../api/index'
export default {
data: function() {
return {
param: {
uname: '',
upass: '',
},
rules: {
uname: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
upass: [{ required: true, message: '请输入密码', trigger: 'blur' }],
},
};
},
methods: {
submitForm() {
this.$refs.login.validate(valid => {
if (valid) {
login(this.param).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('登录成功');
localStorage.setItem('ms_username', res.username);
localStorage.setItem('ms_id', res.uid);
localStorage.setItem('token', res.token);
this.$router.push('/');
}else{
this.$message.error(res.msg);
}
})
} else {
this.$message.error('请输入账号和密码');
console.log('error submit!!');
return false;
}
});
},
},
};
</script>
<style scoped>
.login-wrap {
position: relative;
width: 100%;
height: 100%;
background-image: url(../../assets/img/login-bg.jpg);
background-size: 100%;
}
.ms-title {
width: 100%;
line-height: 50px;
text-align: center;
font-size: 20px;
color: #fff;
border-bottom: 1px solid #ddd;
}
.ms-login {
position: absolute;
left: 50%;
top: 50%;
width: 350px;
margin: -190px 0 0 -175px;
border-radius: 5px;
background: rgba(255, 255, 255, 0.3);
overflow: hidden;
}
.ms-content {
padding: 30px 30px;
}
.login-btn {
text-align: center;
}
.login-btn button {
width: 100%;
height: 36px;
margin-bottom: 10px;
}
.login-tips {
font-size: 12px;
line-height: 30px;
color: #fff;
}
</style>

67
src/components/page/Markdown.vue

@ -0,0 +1,67 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-lx-calendar"></i> 表单</el-breadcrumb-item>
<el-breadcrumb-item>markdown编辑器</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="plugins-tips">
mavonEditor基于Vue的markdown编辑器
访问地址<a href="https://github.com/hinesboy/mavonEditor" target="_blank">mavonEditor</a>
</div>
<mavon-editor v-model="content" ref="md" @imgAdd="$imgAdd" @change="change" style="min-height: 600px"/>
<el-button class="editor-btn" type="primary" @click="submit">提交</el-button>
</div>
</div>
</template>
<script>
import { mavonEditor } from 'mavon-editor'
import 'mavon-editor/dist/css/index.css'
export default {
name: 'markdown',
data: function(){
return {
content:'',
html:'',
configs: {
}
}
},
components: {
mavonEditor
},
methods: {
// md
$imgAdd(pos, $file){
var formdata = new FormData();
formdata.append('file', $file);
//
this.$axios({
url: '/common/upload',
method: 'post',
data: formdata,
headers: { 'Content-Type': 'multipart/form-data' },
}).then((url) => {
this.$refs.md.$img2Url(pos, url);
})
},
change(value, render){
// render markdown
this.html = render;
},
submit(){
console.log(this.content);
console.log(this.html);
this.$message.success('提交成功!');
}
}
}
</script>
<style scoped>
.editor-btn{
margin-top: 20px;
}
</style>

290
src/components/page/OperationManagement/announcementConfiguration.vue

@ -0,0 +1,290 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 运营管理
</el-breadcrumb-item>
<el-breadcrumb-item>通知公告配置</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input placeholder="公告标题" class="handle-input mr10" v-model="query.title"></el-input>
<el-input placeholder="发布人员ID" class="handle-input mr10" v-model="query.auditID"></el-input>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd HH:mm:ss"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="search">搜索</el-button>
<el-button type="primary" @click="handleEdit(0)">新增通知公告</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="create_time" label="发布日期" :formatter="formatDate"></el-table-column>
<el-table-column label="公告标题" prop="title"></el-table-column>
<el-table-column label="发布人员" prop="username"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(1, scope.row.id)"
>公告内容</el-button>
<el-button
type="text"
@click="handleDelete( scope.row.id)"
>删除公告</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<!-- 编辑弹出框 -->
<el-dialog title="通知公告配置" :visible.sync="editVisible" width="40%" @close="closedialog">
<el-form ref="form" :model="form" :rules="rules">
<el-form-item label="公告标题" prop="title" class="form_item">
<el-input v-model="form.title" placeholder="请输入公告标题"></el-input>
</el-form-item>
<el-form-item label="公告内容" prop="content" class="form_item">
<el-input v-model="form.content" type="textarea" :rows="2" placeholder="请输入公告内容"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false"> </el-button>
<el-button type="primary" @click="setNotice"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getNoticeList ,setNotice,getNoticeFind,updateNotice,deleteNotice} from '../../../api/index';
import moment from 'moment'
export default {
data() {
return {
query: {
auditID: '',
title: '',
page: 1,
limit: 10,
time:''
},
noticeType:0,
form:{
id:'',
title:'',
content:''
},
rules:{
title: [
{ required: true, message: '请输入公告标题', trigger: 'blur' },
],
content: [
{ required: true, message: '请输入公告内容', trigger: 'blur' },
],
},
tableData: [],
editVisible: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
created() {
this.getData();
},
methods: {
search(){
this.query.page=1
this.getData();
},
closedialog(){
for(var p in this.form){//jsonkey/value,pkey
this.form[p]=''
}
},
getNoticeFind(){
getNoticeFind(this.form).then(res=>{
console.info(res)
if (res.code==100) {
this.form.title=res.data.title
this.form.content=res.data.content
}
})
},
//
setNotice(){
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.noticeType==0) {
setNotice(this.form).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('新增成功~')
this.editVisible=false
this.getData();
}else{
this.$message.error(res.msg)
}
})
}else{
updateNotice(this.form).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('修改成功~')
this.editVisible=false
this.getData();
}else{
this.$message.error(res.msg)
}
})
}
}
})
},
//
formatDate(row,colnum){
return moment(row.create_time*1000).format('YYYY-MM-DD HH:mm:ss')
},
// easy-mock
getData() {
getNoticeList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count ;
}else{
this.$message.error(res.msg)
}
});
},
//
handleDelete(id) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
}).then(() => {
let data={id:id}
deleteNotice(data).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('删除成功~')
this.getData();
}
})
}).catch(() => {});
},
//
handleEdit(type,id) {
if (type==1) {
this.form.id=id
this.getNoticeFind()
}
this.noticeType=type
this.editVisible = true;
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
.form_item{
margin-bottom: 25px;
}
.form_item >>>.el-input {
width: 80%;
}
.form_item >>>.el-textarea{
width: 80%;
}
.form_item >>>.el-form-item__error{
left: 75px;
}
</style>

194
src/components/page/OperationManagement/assetsConfigure.vue

@ -0,0 +1,194 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 运营管理
</el-breadcrumb-item>
<el-breadcrumb-item>资产推荐配置</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container banner_title">
<div class="banner_title_item">
<img src="../../../assets/img/photo.png" alt="" class="photo">
<p>图片库</p>
</div>
<div class="banner_title_item">
<img src="../../../assets/img/preview.png" alt="" class="preview">
<p>效果预览</p>
</div>
</div>
<div class="container banner_content">
<div class="banner_num">
<span class="banner_num_span">图片数量</span>
<el-select placeholder="请选择图片数量" class="handle-select mr10">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
</div>
<div class="feed_item">
<div class="banner_num">
<span class="banner_num_span">图片1</span>
<el-input placeholder="请输入图片名称"></el-input>
<el-input placeholder="请选择图片路径" class="banner_num_input"></el-input>
<span class="banner_num_span1">上传图片</span>
<span class="banner_num_span1">打开图片库</span>
<span class="banner_num_span1">上移</span>
<span class="banner_num_span1">下移</span>
</div>
<el-input
type="textarea"
:rows="4"
placeholder="请输入文案"
v-model="textarea">
</el-input>
</div>
<div class="feed_item">
<div class="banner_num">
<span class="banner_num_span">图片2</span>
<el-input placeholder="请输入图片名称"></el-input>
<el-input placeholder="请选择图片路径" class="banner_num_input"></el-input>
<span class="banner_num_span1">上传图片</span>
<span class="banner_num_span1">打开图片库</span>
<span class="banner_num_span1">上移</span>
<span class="banner_num_span1">下移</span>
</div>
<el-input
type="textarea"
:rows="4"
placeholder="请输入文案"
v-model="textarea">
</el-input>
</div>
<div class="feed_item">
<div class="banner_num">
<span class="banner_num_span">图片3</span>
<el-input placeholder="请输入图片名称"></el-input>
<el-input placeholder="请选择图片路径" class="banner_num_input"></el-input>
<span class="banner_num_span1">上传图片</span>
<span class="banner_num_span1">打开图片库</span>
<span class="banner_num_span1">上移</span>
<span class="banner_num_span1">下移</span>
</div>
<el-input
type="textarea"
:rows="4"
placeholder="请输入文案"
v-model="textarea">
</el-input>
</div>
</div>
</div>
</template>
<script>
import { getRecommend } from '../../../api/index';
export default {
data() {
return {
query: {
address: '',
name: '',
pageIndex: 1,
pageSize: 10
},
textarea:''
};
},
created() {
this.getData();
},
methods: {
// easy-mock
getData() {
getRecommend().then(res => {
console.log(res);
if (res.code==100) {
}else{
this.$message.error(res.msg)
}
});
},
}
};
</script>
<style scoped>
.feed_item{
margin-bottom: 30px;
}
.banner_num{
display: flex;
align-items: center;
margin-bottom: 10px;
}
.banner_num_span{
display: inline-block;
width: 80px;
}
.banner_num_span1{
color:#4E73E4 ;
text-decoration: underline;
display: inline-block;
margin-right: 20px;
}
.banner_num_input{
width: 300px !important;
margin-right: 40px;
}
.banner_num .handle-select{
width: 200px;
margin-left: 20px;
}
.banner_num .el-input{
width: auto;
margin-left: 20px;
}
.banner_content{
margin-top: 20px;
}
.banner_title{
display: flex;
padding-left: 80px;
}
.banner_title_item {
text-align: center;
margin-right: 100px;
}
.photo{
width: 60px;
height: 55px;
}
.preview{
width: 60px;
height: 60px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

235
src/components/page/OperationManagement/bannerConfigure.vue

@ -0,0 +1,235 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 运营管理
</el-breadcrumb-item>
<el-breadcrumb-item>banner配置</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container banner_title">
<div class="banner_title_item">
<img src="../../../assets/img/photo.png" alt="" class="photo">
<p>图片库</p>
</div>
<div class="banner_title_item">
<img src="../../../assets/img/preview.png" alt="" class="preview">
<p>效果预览</p>
</div>
</div>
<div class="container banner_content">
<div class="banner_num">
<span class="banner_num_span">图片数量</span>
<el-input placeholder="请输入图片数量" v-model.number="banner_num" @input="changeNum()"></el-input>
<!-- <el-select placeholder="请选择图片数量" class="handle-select mr10">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select> -->
</div>
<template v-if="banner.length !=0">
<div class="banner_num" v-for="(item,index) in banner.slice(0,banner_num)" :key="index">
<span class="banner_num_span">图片{{index+1}}</span>
<el-input placeholder="图片名称" v-model="item.name" readonly></el-input>
<el-input placeholder="图片路径" class="banner_num_input" v-model="item.img" readonly></el-input>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,index)}"
>
<span class="banner_num_span1">上传图片</span>
</el-upload>
<span class="banner_num_span1">打开图片库</span>
<span class="banner_num_span1" @click="moveUp(index)">上移</span>
<span class="banner_num_span1" @click="moveDown(index)">下移</span>
</div>
</template>
<div v-if="banner_num!='' || banner_num!=0">
<el-button type="primary" @click="setBanner">保存</el-button>
</div>
</div>
</div>
</template>
<script>
import { getBanner,setBanner } from '../../../api/index';
export default {
data() {
return {
query: {
address: '',
name: '',
pageIndex: 1,
pageSize: 10
},
host:'http://rccqapi.szcaee.cn',
action:'http://rccqapi.szcaee.cn/api/Index/uploadimg',
banner_num:'',
banner:[]
};
},
created() {
this.getData();
},
methods: {
moveDown(index){
let length=this.banner.length
if (length!=1) {
let list= this.banner[index + 1];
this.$set(this.banner, index + 1, this.banner[index]);
this.$set(this.banner, index, list)
}
},
moveUp(index){
let length=this.banner.length
if (length!=1) {
let list= this.banner[index - 1];
this.$set(this.banner, index - 1, this.banner[index]);
this.$set(this.banner, index, list)
}
},
changeNum(){
if (this.banner_num>this.banner.length) {
let index=this.banner_num-this.banner.length
for (let i=0;i<index;i++){
this.banner.push({name:'',img:''})
}
}
},
setBanner(){
setBanner(this.banner).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('文件上传成功!');
}else{
this.$message.error(res.msg)
}
})
},
// easy-mock
getData() {
getBanner().then(res => {
console.log(res);
if (res.code==100) {
this.banner =res.data.list
if (this.banner.length!=0) {
this.banner_num=this.banner.length
}
}else{
this.$message.error(res.msg)
}
});
},
handleAvatarSuccess(res, file, index,key){
console.info(res)
console.info(file)
if(res.code==1){
let data={name:file.name,img:this.host+res.data.img_url}
this.$set(this.banner, index , data);
// this.banner.push()
}
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 3;
if (!isJPG) {
this.$message.error('只能是图片!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 3MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
};
</script>
<style scoped>
.banner_num{
display: flex;
align-items: center;
margin-bottom: 30px;
}
.banner_num_span{
display: inline-block;
width: 80px;
}
.banner_num_span1{
color:#4E73E4 ;
text-decoration: underline;
display: inline-block;
margin-right: 20px;
cursor: pointer;
}
.banner_num_input{
width: 300px !important;
margin-right: 40px;
}
.banner_num .handle-select{
width: 200px;
margin-left: 20px;
}
.banner_num .el-input{
width: auto;
margin-left: 20px;
}
.banner_content{
margin-top: 20px;
}
.banner_title{
display: flex;
padding-left: 80px;
}
.banner_title_item {
text-align: center;
margin-right: 100px;
}
.photo{
width: 60px;
height: 55px;
}
.preview{
width: 60px;
height: 60px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

228
src/components/page/OperationManagement/customerOpinion.vue

@ -0,0 +1,228 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 运营管理
</el-breadcrumb-item>
<el-breadcrumb-item>客户意见处理</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<div class="handle-box">
<el-input placeholder="机构名称" class="handle-input mr10" v-model="query.firm_name"></el-input>
<el-input v-model="query.username" placeholder="法人名称" class="handle-input mr10"></el-input>
<el-input placeholder="意见内容" class="handle-input mr10" v-model="query.message"></el-input>
<el-select placeholder="回复人员" class="handle-select mr10" v-model="query.message">
<el-option key="1" label="广东省" value="广东省"></el-option>
<el-option key="2" label="湖南省" value="湖南省"></el-option>
</el-select>
<el-date-picker
class="mr10"
v-model="query.time"
type="datetimerange"
:picker-options="pickerOptions"
range-separator="至"
value-format="yyyy-MM-dd h:m:s"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
<el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
</div>
<el-table
:data="tableData"
border
class="table"
ref="multipleTable"
header-cell-class-name="table-header"
>
<el-table-column prop="id" label="序号" width="55" align="center"></el-table-column>
<el-table-column prop="name" label="提交日期"></el-table-column>
<el-table-column label="机构名称" prop="name"></el-table-column>
<el-table-column prop="address" label="法人名称"></el-table-column>
<el-table-column label="意见内容" prop="name"></el-table-column>
<el-table-column label="回复人员" prop="name"></el-table-column>
<el-table-column label="操作" width="280" align="center">
<template slot-scope="scope">
<el-button
type="text"
@click="handleEdit(scope.$index, scope.row)"
>资料查看</el-button>
<el-button
type="text"
@click="handleDelete(scope.$index, scope.row)"
>查看附件</el-button>
<el-button
type="text"
@click="handleDelete(scope.$index, scope.row)"
>回复内容</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
layout="total, prev, pager, next"
:current-page="query.page"
:page-size="query.limit"
:total="pageTotal"
@current-change="handlePageChange"
></el-pagination>
</div>
</div>
<!-- 编辑弹出框 -->
<el-dialog title="编辑" :visible.sync="editVisible" width="30%">
<el-form ref="form" :model="form" label-width="70px">
<el-form-item label="用户名">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="地址">
<el-input v-model="form.address"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editVisible = false"> </el-button>
<el-button type="primary" @click="saveEdit"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { opinionList } from '../../../api/index';
export default {
data() {
return {
query: {
firm_name: '',
username: '',
auditID: '',
time: '',
message: '',
page: 1,
limit: 10
},
form:{},
tableData: [],
multipleSelection: [],
delList: [],
editVisible: false,
pageTotal: 0,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
created() {
this.getData();
},
methods: {
// easy-mock
getData() {
opinionList(this.query).then(res => {
console.log(res);
if (res.code==100) {
this.tableData = res.data.list;
this.pageTotal = res.data.count ;
}else{
this.$message.error(res.msg)
}
});
},
//
handleSearch() {
this.$set(this.query, 'page', 1);
this.getData();
},
//
handleDelete(index, row) {
//
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
//
handleEdit(index, row) {
this.editVisible = true;
},
//
saveEdit() {
this.editVisible = false;
this.$message.success(`修改第 ${this.idx + 1} 行成功`);
this.$set(this.tableData, this.idx, this.form);
},
//
handlePageChange(val) {
this.$set(this.query, 'page', val);
this.getData();
}
}
};
</script>
<style scoped>
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

236
src/components/page/OperationManagement/feedConfigure.vue

@ -0,0 +1,236 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item>
<i class="el-icon-lx-cascades"></i> 运营管理
</el-breadcrumb-item>
<el-breadcrumb-item>feed配置</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container banner_title">
<div class="banner_title_item">
<img src="../../../assets/img/photo.png" alt="" class="photo">
<p>图片库</p>
</div>
<div class="banner_title_item">
<img src="../../../assets/img/preview.png" alt="" class="preview">
<p>效果预览</p>
</div>
</div>
<div class="container banner_content">
<div class="banner_num">
<span class="banner_num_span">图片数量</span>
<el-input placeholder="请输入图片数量" v-model.number="banner_num" @input="changeNum()"></el-input>
</div>
<template v-if="banner.length !=0">
<div class="feed_item" v-for="(item,index) in banner.slice(0,banner_num)" :key="index">
<div class="banner_num" >
<span class="banner_num_span">图片{{index+1}}</span>
<el-input placeholder="请输入图片名称" v-model="item.name" readonly></el-input>
<el-input placeholder="请选择图片路径" class="banner_num_input" v-model="item.img" readonly></el-input>
<el-upload
class="upload-demo"
:action="action"
:on-change="fileChange"
:show-file-list="false"
:on-error="handleAvatarError"
list-type="picture"
:on-success="(res,file)=>{handleAvatarSuccess(res,file,index)}"
>
<span class="banner_num_span1">上传图片</span>
</el-upload>
<span class="banner_num_span1">打开图片库</span>
<span class="banner_num_span1" @click="moveUp(index)">上移</span>
<span class="banner_num_span1" @click="moveDown(index)">下移</span>
</div>
<el-input
type="textarea"
:rows="4"
placeholder="请输入文案"
v-model="item.content">
</el-input>
</div>
</template>
<div v-if="banner_num!='' || banner_num!=0">
<el-button type="primary" @click="setBanner">保存</el-button>
</div>
</div>
</div>
</template>
<script>
import { getFeed,setFeed } from '../../../api/index';
export default {
data() {
return {
host:'http://rccqapi.szcaee.cn',
action:'http://rccqapi.szcaee.cn/api/Index/uploadimg',
banner_num:'',
banner:[]
};
},
created() {
this.getData();
},
methods: {
moveDown(index){
let length=this.banner.length
if (length!=1) {
let list= this.banner[index + 1];
this.$set(this.banner, index + 1, this.banner[index]);
this.$set(this.banner, index, list)
}
},
moveUp(index){
let length=this.banner.length
if (length!=1) {
let list= this.banner[index - 1];
this.$set(this.banner, index - 1, this.banner[index]);
this.$set(this.banner, index, list)
}
},
changeNum(){
if (this.banner_num>this.banner.length) {
let index=this.banner_num-this.banner.length
for (let i=0;i<index;i++){
this.banner.push({name:'',img:''})
}
}
},
setBanner(){
setFeed(this.banner).then(res=>{
console.info(res)
if (res.code==100) {
this.$message.success('文件上传成功!');
}else{
this.$message.error(res.msg)
}
})
},
// easy-mock
getData() {
getFeed().then(res => {
console.log(res);
if (res.code==100) {
this.banner =res.data.list
if (this.banner.length!=0) {
this.banner_num=this.banner.length
}
}else{
this.$message.error(res.msg)
}
});
},
handleAvatarSuccess(res, file, index,key){
console.info(res)
console.info(file)
if(res.code==1){
let data={name:file.name,img:this.host+res.data.img_url}
this.$set(this.banner, index , data);
// this.banner.push()
}
},
handleAvatarError(){
this.$message.error('文件上传失败!');
},
fileChange(file){
const typeArr = ['image/png', 'image/gif', 'image/jpeg', 'image/jpg'];
const isJPG = typeArr.indexOf(file.raw.type) !== -1;
const isLt3M = file.size / 1024 / 1024 < 3;
if (!isJPG) {
this.$message.error('只能是图片!');
this.$refs.upload.clearFiles();
return;
}
if (!isLt3M) {
this.$message.error('上传图片大小不能超过 3MB!');
this.$refs.upload.clearFiles();
// this.$set(this.query, 'goods_img', '');
return;
}
},
}
};
</script>
<style scoped>
.feed_item{
margin-bottom: 30px;
}
.banner_num{
display: flex;
align-items: center;
margin-bottom: 10px;
}
.banner_num_span{
display: inline-block;
width: 80px;
}
.banner_num_span1{
color:#4E73E4 ;
text-decoration: underline;
display: inline-block;
margin-right: 20px;
}
.banner_num_input{
width: 300px !important;
margin-right: 40px;
}
.banner_num .handle-select{
width: 200px;
margin-left: 20px;
}
.banner_num .el-input{
width: auto;
margin-left: 20px;
}
.banner_content{
margin-top: 20px;
}
.banner_title{
display: flex;
padding-left: 80px;
}
.banner_title_item {
text-align: center;
margin-right: 100px;
}
.photo{
width: 60px;
height: 55px;
}
.preview{
width: 60px;
height: 60px;
}
.handle-box {
margin-bottom: 20px;
}
.handle-select {
width: 120px;
}
.handle-input {
width: 150px;
display: inline-block;
}
.table {
width: 100%;
font-size: 14px;
}
.red {
color: #ff0000;
}
.mr10 {
margin-right: 10px;
}
.table-td-thumb {
display: block;
margin: auto;
width: 40px;
height: 40px;
}
</style>

38
src/components/page/Permission.vue

@ -0,0 +1,38 @@
<template>
<div>
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-lx-warn"></i> 权限测试</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<h1>管理员权限页面</h1>
<p>只有用 admin 账号登录的才拥有管理员权限才能进到这个页面其他账号想进来都会跳到403页面重新用管理员账号登录才有权限</p>
<p>想尝试一下<router-link to="/login" class="logout">退出登录</router-link>便</p>
</div>
</div>
</template>
<script>
export default {
data: function(){
return {}
}
}
</script>
<style scoped>
h1{
text-align: center;
margin: 30px 0;
}
p{
line-height: 30px;
margin-bottom: 10px;
text-indent: 2em;
}
.logout{
color: #409EFF;
}
</style>

129
src/components/page/Tabs.vue

@ -0,0 +1,129 @@
<template>
<div class="">
<div class="crumbs">
<el-breadcrumb separator="/">
<el-breadcrumb-item><i class="el-icon-lx-copy"></i> tab选项卡</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="container">
<el-tabs v-model="message">
<el-tab-pane :label="`未读消息(${unread.length})`" name="first">
<el-table :data="unread" :show-header="false" style="width: 100%">
<el-table-column>
<template slot-scope="scope">
<span class="message-title">{{scope.row.title}}</span>
</template>
</el-table-column>
<el-table-column prop="date" width="180"></el-table-column>
<el-table-column width="120">
<template slot-scope="scope">
<el-button size="small" @click="handleRead(scope.$index)">标为已读</el-button>
</template>
</el-table-column>
</el-table>
<div class="handle-row">
<el-button type="primary">全部标为已读</el-button>
</div>
</el-tab-pane>
<el-tab-pane :label="`已读消息(${read.length})`" name="second">
<template v-if="message === 'second'">
<el-table :data="read" :show-header="false" style="width: 100%">
<el-table-column>
<template slot-scope="scope">
<span class="message-title">{{scope.row.title}}</span>
</template>
</el-table-column>
<el-table-column prop="date" width="150"></el-table-column>
<el-table-column width="120">
<template slot-scope="scope">
<el-button type="danger" @click="handleDel(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="handle-row">
<el-button type="danger">删除全部</el-button>
</div>
</template>
</el-tab-pane>
<el-tab-pane :label="`回收站(${recycle.length})`" name="third">
<template v-if="message === 'third'">
<el-table :data="recycle" :show-header="false" style="width: 100%">
<el-table-column>
<template slot-scope="scope">
<span class="message-title">{{scope.row.title}}</span>
</template>
</el-table-column>
<el-table-column prop="date" width="150"></el-table-column>
<el-table-column width="120">
<template slot-scope="scope">
<el-button @click="handleRestore(scope.$index)">还原</el-button>
</template>
</el-table-column>
</el-table>
<div class="handle-row">
<el-button type="danger">清空回收站</el-button>
</div>
</template>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
export default {
name: 'tabs',
data() {
return {
message: 'first',
showHeader: false,
unread: [{
date: '2018-04-19 20:00:00',
title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护',
},{
date: '2018-04-19 21:00:00',
title: '今晚12点整发大红包,先到先得',
}],
read: [{
date: '2018-04-19 20:00:00',
title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护'
}],
recycle: [{
date: '2018-04-19 20:00:00',
title: '【系统通知】该系统将于今晚凌晨2点到5点进行升级维护'
}]
}
},
methods: {
handleRead(index) {
const item = this.unread.splice(index, 1);
console.log(item);
this.read = item.concat(this.read);
},
handleDel(index) {
const item = this.read.splice(index, 1);
this.recycle = item.concat(this.recycle);
},
handleRestore(index) {
const item = this.recycle.splice(index, 1);
this.read = item.concat(this.read);
}
},
computed: {
unreadNum(){
return this.unread.length;
}
}
}
</script>
<style>
.message-title{
cursor: pointer;
}
.handle-row{
margin-top: 30px;
}
</style>

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save