工作台及头部导航、主题色更改

dev_202412
yujialong 2 months ago
parent 801c4683a9
commit 36c1a45fe2
  1. 4
      src/App.vue
  2. 28
      src/assets/css/color-dark.css
  3. 7
      src/assets/css/default/index.scss
  4. 8
      src/assets/css/main.css
  5. 29
      src/assets/css/theme-green/color-green.css
  6. BIN
      src/assets/css/theme-green/fonts/element-icons.ttf
  7. BIN
      src/assets/css/theme-green/fonts/element-icons.woff
  8. 1
      src/assets/css/theme-green/index.css
  9. BIN
      src/assets/img/workbench/1.png
  10. BIN
      src/assets/img/workbench/10.png
  11. BIN
      src/assets/img/workbench/11.png
  12. BIN
      src/assets/img/workbench/12.png
  13. BIN
      src/assets/img/workbench/13.png
  14. BIN
      src/assets/img/workbench/14.png
  15. BIN
      src/assets/img/workbench/15.png
  16. BIN
      src/assets/img/workbench/2.png
  17. BIN
      src/assets/img/workbench/3.png
  18. BIN
      src/assets/img/workbench/4.png
  19. BIN
      src/assets/img/workbench/5.png
  20. BIN
      src/assets/img/workbench/6.png
  21. BIN
      src/assets/img/workbench/7.png
  22. BIN
      src/assets/img/workbench/8.png
  23. BIN
      src/assets/img/workbench/9.png
  24. 101
      src/components/Sidebar.vue
  25. 17
      src/main.js
  26. 12
      src/router/index.js
  27. 4
      src/setting.js
  28. 3
      src/utils/api.js
  29. 4
      src/views/customer/AddCustomer.vue
  30. 39
      src/views/information/contentManage/index.vue
  31. 51
      src/views/information/list/index.vue
  32. 251
      src/views/market/index.vue
  33. 2
      src/views/order/AddOrder.vue
  34. 592
      src/views/parnerOperation/learnMg.vue
  35. 433
      src/views/parnerOperation/schemeSet.vue
  36. 2470
      src/views/setting/Person.vue
  37. 99
      src/views/setting/index.vue
  38. 5
      src/views/shop/add.vue
  39. 199
      src/views/shop/list.vue
  40. 55
      src/views/shop/list/index.vue
  41. 314
      src/views/shop/list/market/index.vue
  42. 2
      src/views/theoryExam/list/system.vue
  43. 2
      src/views/user/AddUser.vue
  44. 217
      src/views/workbench/index.vue

@ -45,8 +45,4 @@ export default {
<style>
@import "./assets/css/main.css";
/* @import "./assets/css/color-dark.css"; */
/*深色主题*/
@import "./assets/css/theme-green/color-green.css";
/* 浅绿色主题 */
</style>

@ -1,28 +0,0 @@
.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);
}

@ -0,0 +1,7 @@
/* 改变主题色变量 */
$--color-primary: #062c87;
/* 改变 icon 字体路径变量,必需 */
$--font-path: '~element-ui/lib/theme-chalk/fonts';
@import "~element-ui/packages/theme-chalk/src/index";

@ -90,7 +90,7 @@ li {
line-height: 1;
font-size: 14px;
color: #585858;
border-left: 3px solid #9278ff;
border-left: 3px solid #062c87;
}
.el-upload-list {
width: 100%;
@ -154,7 +154,7 @@ li {
border-radius: 2px;
}
.tabs .item.active:after {
border-bottom-color: #9278ff;
border-bottom-color: #062c87;
}
.crumbs {
@ -329,7 +329,7 @@ li {
color: #fff;
}
#app .el-table th {
background-color: #9278ff !important;
background-color: #062c87 !important;
font-size: 16px;
font-weight: normal;
}
@ -378,7 +378,7 @@ li {
}
.hr_tag {
background-color: #9278ff;
background-color: #062c87;
width: 3px;
height: 15px;
margin-right: 5px;

@ -1,29 +0,0 @@
.header{
background-color: #fff;
}
.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 #9278FF;
background-color: #9278FF;
}
.collapse-btn:hover{
background: #00d1b2;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 583 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -1,12 +1,12 @@
<template>
<div>
<el-menu class="sidebar-el-menu" :default-active="onRoutes" background-color="#324157" text-color="#bfcbd9"
active-text-color="#9278FF" unique-opened mode="horizontal" router @select="handleSelect">
<div class="menus">
<el-menu class="sidebar" :default-active="onRoutes" background-color="#062c87" text-color="#fff"
active-text-color="#333" unique-opened mode="horizontal" router @select="handleSelect">
<template v-for="item in menus">
<template v-if="item.subs">
<el-submenu :index="item.index" :key="item.index">
<template slot="title">
<i :class="item.icon"></i>
<!-- <i :class="item.icon"></i> -->
<span slot="title">{{ item.title }}</span>
</template>
<template v-for="subItem in item.subs">
@ -22,7 +22,7 @@
</template>
<template v-else>
<el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i>
<!-- <i :class="item.icon"></i> -->
<span slot="title">{{ item.title }}</span>
</el-menu-item>
</template>
@ -40,79 +40,29 @@ export default {
menuList: [
{
icon: 'el-icon-school',
index: '/workbench',
title: '工作台'
},
{
icon: 'el-icon-user',
index: '/customer',
title: '客户管理'
},
{
icon: 'el-icon-user',
icon: 'el-icon-shopping-bag-2',
index: '/user',
title: '用户管理'
},
{
icon: 'el-icon-shopping-bag-2',
icon: 'el-icon-document-checked',
index: '/order',
title: '订单管理'
},
{
icon: 'el-icon-document-checked',
index: '/curriculum',
title: '课程管理'
},
{
icon: 'el-icon-notebook-2',
index: '/data',
title: '数据管理'
},
{
icon: 'el-icon-tickets',
index: '/match',
title: '大赛管理'
},
{
icon: 'el-icon-takeaway-box',
index: '/theoreticalCourse',
title: '理论课程'
},
{
icon: 'el-icon-box',
index: '/information',
title: '资讯管理'
},
{
icon: 'el-icon-receiving',
index: '/configure',
title: '服务配置'
},
{
icon: 'el-icon-office-building',
index: '/system',
title: '系统配置'
},
{
icon: 'el-icon-box',
index: '/parner',
title: '合伙管理'
},
{
icon: 'el-icon-data-line',
index: '/parnerOperation',
title: '合伙运营'
},
{
icon: 'el-icon-shopping-cart-2',
index: '/shop',
title: '商城管理'
},
{
icon: 'el-icon-data-board',
index: '/theoryExam',
title: '考试平台'
},
{
icon: 'el-icon-document-copy',
index: '/review',
title: '评阅平台'
},
],
menus: [],
onRoutes: this.$route.path
@ -171,16 +121,25 @@ export default {
};
</script>
<style scoped>
.sidebar::-webkit-scrollbar {
width: 0;
}
<style lang="scss" scoped>
.menus {
display: flex;
justify-content: center;
background-color: #062c87;
.sidebar-el-menu:not(.el-menu--collapse) {
width: 100%;
}
/deep/.sidebar {
border-bottom: 0;
&>.el-menu-item {
height: 36px;
line-height: 36px;
}
&>.el-menu-item.is-active {
background-color: #fff !important;
border-bottom: 0;
}
}
.sidebar>ul {
height: 100%;
}
</style>

@ -2,17 +2,18 @@ import Vue from 'vue';
import App from './App.vue';
import router from './router';
import ElementUI from 'element-ui';
// import 'element-ui/lib/theme-chalk/index.css'; // 默认主题
import './assets/css/theme-green/index.css'; // 浅绿色主题
import "@/assets/css/default/index.scss";
import './assets/css/icon.css';
import './assets/icon/iconfont.css';
import 'babel-polyfill';
import './utils/rem';
import {post,get,del,put} from './utils/http';
import { post, get, del, put } from './utils/http';
import api from './utils/api';
import store from './store'
import { systemStatus, systemTypeStatus, systemAttributionStatus, courseTypeStatus,
hoursStatus, roleStatus, orderTypeFn, orderStatusFn, orderNatureFn, Percentage, removeByValue, isIE, encodeString, formatDate, downloadFile, dateCompatible } from './utils/core';
import {
systemStatus, systemTypeStatus, systemAttributionStatus, courseTypeStatus,
hoursStatus, roleStatus, orderTypeFn, orderStatusFn, orderNatureFn, Percentage, removeByValue, isIE, encodeString, formatDate, downloadFile, dateCompatible
} from './utils/core';
import preventReClick from './utils/preventReClick' //防多次点击,重复提交
import plugins from '@/directive';
@ -44,7 +45,7 @@ Vue.use(ElementUI, { size: 'small' });
Vue.use(plugins);
new Vue({
router,
store,
render: h => h(App)
router,
store,
render: h => h(App)
}).$mount('#app');

@ -208,8 +208,12 @@ let router = new Router({
component: () => import('../views/shop/list'),
},
{
path: '/shop/addProduct',
component: () => import('../views/shop/addProduct'),
path: '/shop/add',
component: () => import('../views/shop/add'),
},
{
path: '/market',
component: () => import('../views/market'),
},
{
path: '/theoryExam/list',
@ -223,6 +227,10 @@ let router = new Router({
path: '/review',
component: () => import('../views/review'),
},
{
path: '/workbench',
component: () => import('../views/workbench'),
},
{
path: '/404',
component: () => import('../views/404.vue'),

@ -14,7 +14,7 @@ if (isDev) {
sandPath = `http://${location.hostname}:9520`
host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/'
const ips = ['http://192.168.31.217:9000/', 'http://192.168.31.51:9000/', 'http://118.31.167.228/']
const ips = ['http://192.168.31.217:9000/', 'http://192.168.31.51:9000/', 'https://occupationlab.com/']
host = ips[+localStorage.getItem('ip')]
} else if (isPro) {
sandPath = `https://izhixinyun.com/sandbox`
@ -51,7 +51,7 @@ const Setting = {
isDev,
isPro,
// 是否使用动态路由
dynamicRoute: true,
dynamicRoute: false,
/**
* @description 默认密码
*/

@ -1,7 +1,6 @@
import Setting from "@/setting";
const { uploadURL, apiBaseURL: host } = Setting
const jumpApi = Setting.isDev ? `http://121.37.12.51/` : Setting.isPro ? `https://judgment.huorantech.cn/` : `http://121.37.12.51/`
const { apiBaseURL: host } = Setting
export default {
logins: `users/users/user/login`, //登录

@ -1264,12 +1264,12 @@ export default {
.radio_icon {
font-size: 26px;
color: #9278ff;
color: #062c87;
}
/deep/.warning {
margin-left: 5px;
color: #9278ff;
color: #062c87;
}
.tags {

@ -2,19 +2,11 @@
<!-- 内容管理 -->
<div class="flex">
<div class="menu-con">
<el-tree ref="column"
:data="menuList"
:props="{ label: 'name' }"
highlight-current
:expand-on-click-node="false"
default-expand-all
node-key="id"
@node-click="handleSelect"></el-tree>
<el-tree ref="column" :data="menuList" :props="{ label: 'name' }" highlight-current :expand-on-click-node="false"
default-expand-all node-key="id" @node-click="handleSelect"></el-tree>
</div>
<div class="right">
<ContentList ref="content"
v-show="menuList.length"
:columnId="columnId" />
<ContentList ref="content" v-show="menuList.length" :columnId="columnId" />
</div>
</div>
</template>
@ -98,19 +90,22 @@ export default {
<style lang="scss" scoped>
.menu-con {
width: 210px;
height: calc(100vh - 250px);
border-right: solid 1px #e6e6e6;
background-color: #f2f6fc;
/deep/.el-tree-node__content {
height: 50px;
}
width: 210px;
height: calc(100vh - 250px);
border-right: solid 1px #e6e6e6;
background-color: #f2f6fc;
/deep/.el-tree-node__content {
height: 50px;
}
}
.right {
flex: 1;
flex: 1;
}
/deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
color: #fff;
background-color: #9278ff;
/deep/.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
color: #fff;
background-color: #062c87;
}
</style>

@ -2,17 +2,11 @@
<!-- 资讯管理 -->
<div class="page">
<ul class="column-tab">
<li :class="{active: tabsName == 1}"
@click="handleClick(1)"><i class="el-icon-collection-tag"></i> 栏目管理</li>
<li :class="{active: tabsName == 2}"
@click="handleClick(2)"><i class="el-icon-document"></i> 内容管理</li>
<li :class="{ active: tabsName == 1 }" @click="handleClick(1)"><i class="el-icon-collection-tag"></i> 栏目管理</li>
<li :class="{ active: tabsName == 2 }" @click="handleClick(2)"><i class="el-icon-document"></i> 内容管理</li>
</ul>
<columnManage class="flex-1"
ref="content1"
v-if="tabsName == 1" />
<ContentManage class="flex-1"
ref="content2"
v-if="tabsName == 2" />
<columnManage class="flex-1" ref="content1" v-if="tabsName == 1" />
<ContentManage class="flex-1" ref="content2" v-if="tabsName == 2" />
</div>
</template>
@ -73,26 +67,31 @@ export default {
<style lang="scss" scoped>
.flex-1 {
flex: 1;
flex: 1;
}
.page {
display: flex;
display: flex;
}
.column-tab {
width: 120px;
border-right: solid 1px #e6e6e6;
li {
display: flex;
align-items: center;
height: 60px;
cursor: pointer;
i {
margin-right: 5px;
}
&:hover,
&.active {
color: #9278ff;
}
width: 120px;
border-right: solid 1px #e6e6e6;
li {
display: flex;
align-items: center;
height: 60px;
cursor: pointer;
i {
margin-right: 5px;
}
&:hover,
&.active {
color: #062c87;
}
}
}
</style>

@ -0,0 +1,251 @@
<template>
<div class="page">
<div style="margin-bottom: 10px;text-align: right;">
<el-button v-auth="'/shop:营销推广管理:新增'" type="primary" round @click="add">新增</el-button>
</div>
<el-table :data="list" class="table" ref="table" stripe header-align="center" row-key="id">
<el-table-column type="index" width="100" label="序号" align="center"></el-table-column>
<el-table-column prop="courseName" label="图片" min-width="150" align="center">
<template slot-scope="scope">
<img width="100" :src="scope.row.banner" alt="">
</template>
</el-table-column>
<el-table-column prop="title" label="标题" min-width="150" align="center"></el-table-column>
<el-table-column prop="subheading" label="副标题" min-width="150" align="center"></el-table-column>
<el-table-column prop="url" label="链接" min-width="150" align="center"></el-table-column>
<el-table-column label="操作" align="center" width="250">
<template slot-scope="scope">
<el-switch v-model="scope.row.isOpen" :active-value="0" :inactive-value="1"
@change="switchOff($event, scope.row)" v-auth="'/shop:营销推广管理:禁用'">
</el-switch>
<el-button style="margin-left: 10px;" v-auth="'/shop:营销推广管理:编辑'" type="text"
@click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/shop:营销推广管理:删除'" type="text" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :title="(form.id ? '编辑' : '新增') + 'banner'" :visible.sync="bannerVisible" width="500px" class="dialog"
:close-on-click-modal="false">
<el-form ref="form" label-width="60px">
<el-form-item label="图片">
<el-upload class="avatar-uploader" accept=".jpg,.png,.jpeg,.gif" :on-change="changeFile"
:show-file-list="false" action="" :auto-upload="false">
<img v-if="form.banner" :src="form.banner" class="avatar">
<div class="uploader-default" v-else>
<i class="el-icon-plus"></i>
<p>上传图片</p>
</div>
</el-upload>
</el-form-item>
<el-form-item label="标题">
<el-input v-model="form.title" placeholder="请输入标题" maxlength="100"></el-input>
</el-form-item>
<el-form-item label="副标题">
<el-input v-model="form.subheading" placeholder="请输入副标题" maxlength="100"></el-input>
</el-form-item>
<el-form-item label="链接">
<el-input v-model="form.url" placeholder="请输入链接" maxlength="100"></el-input>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="bannerVisible = false">取消</el-button>
<el-button type="primary" @click="submitBanner">确定</el-button>
</span>
</el-dialog>
<!-- 剪裁组件弹窗 -->
<el-dialog title="图片裁剪" append-to-body :visible.sync="cropperModel" width="1100px" :close-on-click-modal="false">
<Cropper ref="cropper" :img-file.sync="file" :is-upload="isUpload" :fixed="true" :fixedNumber.sync="fixedNumber"
:autoCropWidth="500" :autoCropHeight="138.8" @upload="customUpload" />
</el-dialog>
</div>
</template>
<script>
import Util from "@/libs/util";
import Setting from '@/setting'
import Cropper from '@/components/img-upload/Cropper'
import Axios from 'axios'
import Oss from '@/components/upload/upload.js'
export default {
data () {
return {
headers: {
token: sessionStorage.getItem("token")
},
list: [],
bannerVisible: false,
form: {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
},
cropperModel: false,
isUpload: false,
fixedNumber: [5.4, 1],
file: ''
};
},
components: {
Cropper
},
mounted () {
this.getList()
},
methods: {
getList () {
this.$post(this.api.listMarketing, {
pageNum: 1,
pageSize: 1000
}).then(({ page }) => {
this.list = page.records;
this.total = page.total;
}).catch(res => {
});
},
//
customUpload (data) {
data.name = this.file.name
this.imgUpload(data)
},
//
imgUpload (formData) {
this.isUpload = true
Oss.upload(formData).then(res => {
this.form.banner && Oss.del(this.form.banner)
this.form.banner = res.url
})
this.$refs.cropper.isDisabled = false
this.isUpload = false
this.cropperModel = false
},
//
changeFile (file) {
const { size, name } = file
const ext = name.substring(name.lastIndexOf('.') + 1)
if (!Util.isImg(ext)) {
this.$message.error('请上传图片!')
return false
}
this.file = file
this.cropperModel = true
this.$nextTick(() => {
this.$refs.cropper.updateImg({
url: window.URL.createObjectURL(file.raw),
size: file.size
})
})
},
add () {
this.form = {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
}
this.bannerVisible = true
},
edit (row) {
this.form = JSON.parse(JSON.stringify(row))
this.bannerVisible = true
},
// banner
submitBanner () {
const { form } = this
if (!form.banner) return Util.errorMsg('请上传图片')
this.$post(this.api[form.id ? 'updateMarketing' : 'saveMarketing'], form).then(res => {
this.getList()
this.bannerVisible = false
}).catch(res => { })
},
handleDelete (row) {
this.$confirm("此删除操作不可逆,是否确认删除选中项?", "提示", {
type: "warning"
})
.then(() => {
this.$post(`${this.api.delMarketing}?ids=${row.id}`).then(res => {
Util.successMsg("删除成功");
this.getList();
}).catch(res => {
});
})
.catch(() => {
});
},
switchOff (val, row) {
this.$post(`${this.api.bannerEnableOrDisable}?id=${row.id}&isDisable=${row.isOpen}`).then(res => { }).catch(err => { })
}
}
};
</script>
<style lang="scss" scoped>
.m-l-10 {
margin-left: 10px;
}
$avatar-width: 104px;
/deep/ .avatar-uploader {
.el-upload {
position: relative;
width: $avatar-width;
height: $avatar-width;
border: 1px dashed #d9d9d9;
border-radius: 2px;
cursor: pointer;
overflow: hidden;
&:hover {
border-color: #409eff;
}
.uploader-default {
display: flex;
flex-direction: column;
justify-content: center;
width: $avatar-width !important;
height: $avatar-width;
text-align: center;
background: rgba(0, 0, 0, 0.04);
i {
font-size: 20px;
font-weight: bold;
color: #8c939d;
}
p {
margin-top: 10px;
font-size: 14px;
color: rgba(0, 0, 0, 0.65);
line-height: 1;
}
}
.avatar {
width: $avatar-width;
height: $avatar-width;
display: block;
}
}
.el-upload__tip {
margin-top: 0;
p {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
line-height: 1;
&:first-child {
margin-bottom: 5px;
}
}
}
}
</style>

@ -2701,7 +2701,7 @@ export default {
.radio_icon {
font-size: 26px;
color: #9278ff;
color: #062c87;
}
.ellipsis {

@ -1,227 +1,121 @@
<template>
<div>
<el-card shadow="hover"
class="mgb20">
<el-card shadow="hover" class="mgb20">
<div class="flex-between">
<div class="per_title"
v-preventReClick
@click="back">
<div class="per_title" v-preventReClick @click="back">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
<span class="per_school"
v-text="form.id ? '编辑文章' : '新建文章'"></span>
<span class="per_school" v-text="form.id ? '编辑文章' : '新建文章'"></span>
</div>
</div>
</el-card>
<div class="page">
<el-form :model="form"
:rules="rules"
class="input-form model"
label-width="140px">
<el-form-item prop="title"
label="标题">
<el-input id="focus-el"
style="width: 940px"
placeholder="请输入标题"
v-model="form.title"
clearable
maxlength="100"
@change="nameChange"></el-input>
<el-form :model="form" :rules="rules" class="input-form model" label-width="140px">
<el-form-item prop="title" label="标题">
<el-input id="focus-el" style="width: 940px" placeholder="请输入标题" v-model="form.title" clearable
maxlength="100" @change="nameChange"></el-input>
</el-form-item>
<div class="item-line">
<el-form-item prop="releaseTime"
label="发布日期">
<el-date-picker v-model="form.releaseTime"
type="date"
placeholder="选择日期"
format="yyyy-MM-dd"
:clearable="false"
value-format="yyyy-MM-dd">
<el-form-item prop="releaseTime" label="发布日期">
<el-date-picker v-model="form.releaseTime" type="date" placeholder="选择日期" format="yyyy-MM-dd"
:clearable="false" value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</div>
<div class="item-line">
<el-form-item prop="source"
label="来源">
<el-input placeholder="请输入来源"
v-model.trim="form.source"
clearable
maxlength="50"
class="inline-input"></el-input>
<el-form-item prop="source" label="来源">
<el-input placeholder="请输入来源" v-model.trim="form.source" clearable maxlength="50"
class="inline-input"></el-input>
</el-form-item>
<el-form-item prop="author"
label="作者">
<el-input v-model="form.author"
clearable
maxlength="50"
class="inline-input"></el-input>
<el-form-item prop="author" label="作者">
<el-input v-model="form.author" clearable maxlength="50" class="inline-input"></el-input>
</el-form-item>
</div>
<div class="item-line">
<el-form-item prop="edit"
label="编辑">
<el-input placeholder="请输入编辑"
v-model.trim="form.edit"
clearable
maxlength="50"
class="inline-input"></el-input>
<el-form-item prop="edit" label="编辑">
<el-input placeholder="请输入编辑" v-model.trim="form.edit" clearable maxlength="50"
class="inline-input"></el-input>
</el-form-item>
<el-form-item prop="audit"
label="审核">
<el-input placeholder="请输入审核"
v-model.trim="form.audit"
clearable
maxlength="50"
class="inline-input"></el-input>
<el-form-item prop="audit" label="审核">
<el-input placeholder="请输入审核" v-model.trim="form.audit" clearable maxlength="50"
class="inline-input"></el-input>
</el-form-item>
</div>
<div class="item-line">
<el-form-item prop="classificationId"
label="所属分类">
<el-select style="width: 234px;"
v-model="form.classificationId">
<el-form-item prop="classificationId" label="所属分类">
<el-select style="width: 234px;" v-model="form.classificationId">
<template v-for="item in classifications">
<el-option v-if="item.id"
:key="item.id"
:label="item.classificationName"
:value="item.id">
<el-option v-if="item.id" :key="item.id" :label="item.classificationName" :value="item.id">
</el-option>
</template>
</el-select>
<el-button class="set-btn"
type="primary"
@click="setClass">设置</el-button>
<el-button class="set-btn" type="primary" @click="setClass">设置</el-button>
</el-form-item>
<el-form-item prop="author"
label="主题标签">
<el-select style="width: 234px;"
v-model="form.lableId"
multiple>
<el-form-item prop="author" label="主题标签">
<el-select style="width: 234px;" v-model="form.lableId" multiple>
<template v-for="item in labels">
<el-option v-if="item.id"
:key="item.id"
:label="item.labelName"
:value="item.id">
<el-option v-if="item.id" :key="item.id" :label="item.labelName" :value="item.id">
</el-option>
</template>
</el-select>
<el-button class="set-btn"
type="primary"
@click="setLabel">设置</el-button>
<el-button class="set-btn" type="primary" @click="setLabel">设置</el-button>
</el-form-item>
</div>
<el-form-item prop="summary"
label="摘要">
<el-input style="width: 940px"
type="textarea"
v-model.trim="form.summary"
:rows="3"
clearable></el-input>
<el-form-item prop="summary" label="摘要">
<el-input style="width: 940px" type="textarea" v-model.trim="form.summary" :rows="3" clearable></el-input>
</el-form-item>
<el-form-item prop="bannerImg"
label="封面图">
<el-upload class="avatar-uploader"
accept=".jpg,.png,.jpeg,.gif"
:on-change="changeFile"
:show-file-list="false"
action=""
:auto-upload="false">
<img v-if="form.bannerImg"
:src="form.bannerImg"
class="avatar">
<div class="uploader-default"
v-else>
<img class="plus"
src="@/assets/img/plus.png"
alt="">
<el-form-item prop="bannerImg" label="封面图">
<el-upload class="avatar-uploader" accept=".jpg,.png,.jpeg,.gif" :on-change="changeFile"
:show-file-list="false" action="" :auto-upload="false">
<img v-if="form.bannerImg" :src="form.bannerImg" class="avatar">
<div class="uploader-default" v-else>
<img class="plus" src="@/assets/img/plus.png" alt="">
<p>点击上传</p>
</div>
</el-upload>
</el-form-item>
<el-form-item prop="mainBody"
label="正文">
<Editor api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda'
v-model="form.mainBody"
:init="editorConfig" />
<el-form-item prop="mainBody" label="正文">
<Editor api-key='rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda' v-model="form.mainBody"
:init="editorConfig" />
</el-form-item>
<el-form-item prop="file"
label="文件上传">
<Upload :limit="20"
:changeFileList="false"
:file-list.sync="form.fileList"
:on-remove="handleRemove"
@onSuccess="uploadSuccessFile" />
<el-form-item prop="file" label="文件上传">
<Upload :limit="20" :changeFileList="false" :file-list.sync="form.fileList" :on-remove="handleRemove"
@onSuccess="uploadSuccessFile" />
</el-form-item>
</el-form>
<div class="btns">
<el-button type="primary"
@click="submit(1)">发布</el-button>
<el-button type="primary" @click="submit(1)">发布</el-button>
<el-button @click="submit(0)">保存草稿</el-button>
<el-button @click="back">取消</el-button>
</div>
</div>
<!-- 剪裁组件弹窗 -->
<el-dialog title="图片裁剪"
append-to-body
:visible.sync="cropperModel"
width="1100px"
:close-on-click-modal="false">
<Cropper ref="cropper"
:img-file.sync="file"
:is-upload="isUpload"
:fixed="true"
:fixedNumber.sync="fixedNumber"
@upload="customUpload" />
<el-dialog title="图片裁剪" append-to-body :visible.sync="cropperModel" width="1100px" :close-on-click-modal="false">
<Cropper ref="cropper" :img-file.sync="file" :is-upload="isUpload" :fixed="true" :fixedNumber.sync="fixedNumber"
@upload="customUpload" />
</el-dialog>
<el-dialog title="所属分类设置"
:visible.sync="classVisible"
width="500px"
:close-on-click-modal="false"
class="manage-dia"
:before-close="closeClass">
<el-dialog title="所属分类设置" :visible.sync="classVisible" width="500px" :close-on-click-modal="false"
class="manage-dia" :before-close="closeClass">
<div class="plus">
<i class="el-icon-circle-plus-outline"
@click="addClass"></i>
<i class="el-icon-circle-plus-outline" @click="addClass"></i>
</div>
<el-table :data="classifications"
ref="table"
header-align="center"
row-key="id">
<el-table-column type="index"
width="60"
label="序号"
align="center"></el-table-column>
<el-table-column prop="classificationName"
label="分类名称"
align="center"
min-width="130">
<el-table :data="classifications" ref="table" header-align="center" row-key="id">
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column prop="classificationName" label="分类名称" align="center" min-width="130">
<template slot-scope="scope">
<el-input v-if="scope.row.edit"
placeholder="请输入分类名称"
v-model="scope.row.classificationName"
clearable
maxlength="30"></el-input>
<el-input v-if="scope.row.edit" placeholder="请输入分类名称" v-model="scope.row.classificationName" clearable
maxlength="30"></el-input>
<span v-else>{{ scope.row.classificationName }}</span>
</template>
</el-table-column>
<el-table-column prop="updateTime1"
label="是否引用"
align="center"
min-width="60"></el-table-column>
<el-table-column label="操作"
align="center"
min-width="60">
<el-table-column prop="updateTime1" label="是否引用" align="center" min-width="60"></el-table-column>
<el-table-column label="操作" align="center" min-width="60">
<template slot-scope="scope">
<i v-if="scope.row.edit"
class="el-icon-check edit"
@click="submitClass(scope.row)"></i>
<i v-else
class="el-icon-edit edit"
@click="editClass(scope.row)"></i>
<i class="el-icon-delete del"
@click="delClass(scope.row, scope.$index)"></i>
<i v-if="scope.row.edit" class="el-icon-check edit" @click="submitClass(scope.row)"></i>
<i v-else class="el-icon-edit edit" @click="editClass(scope.row)"></i>
<i class="el-icon-delete del" @click="delClass(scope.row, scope.$index)"></i>
</template>
</el-table-column>
</el-table>
@ -230,53 +124,26 @@
</span>
</el-dialog>
<el-dialog title="主题标签设置"
:visible.sync="labelVisible"
width="500px"
:close-on-click-modal="false"
class="manage-dia"
:before-close="closeLabel">
<el-dialog title="主题标签设置" :visible.sync="labelVisible" width="500px" :close-on-click-modal="false"
class="manage-dia" :before-close="closeLabel">
<div class="plus">
<i class="el-icon-circle-plus-outline"
@click="addLabel"></i>
<i class="el-icon-circle-plus-outline" @click="addLabel"></i>
</div>
<el-table :data="labels"
ref="table"
header-align="center"
row-key="id">
<el-table-column type="index"
width="60"
label="序号"
align="center"></el-table-column>
<el-table-column prop="labelName"
label="主题名称"
align="center"
min-width="130">
<el-table :data="labels" ref="table" header-align="center" row-key="id">
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column prop="labelName" label="主题名称" align="center" min-width="130">
<template slot-scope="scope">
<el-input v-if="scope.row.edit"
placeholder="请输入主题名称"
v-model="scope.row.labelName"
clearable
maxlength="30"></el-input>
<el-input v-if="scope.row.edit" placeholder="请输入主题名称" v-model="scope.row.labelName" clearable
maxlength="30"></el-input>
<span v-else>{{ scope.row.labelName }}</span>
</template>
</el-table-column>
<el-table-column prop="updateTime1"
label="是否引用"
align="center"
min-width="60"></el-table-column>
<el-table-column label="操作"
align="center"
min-width="60">
<el-table-column prop="updateTime1" label="是否引用" align="center" min-width="60"></el-table-column>
<el-table-column label="操作" align="center" min-width="60">
<template slot-scope="scope">
<i v-if="scope.row.edit"
class="el-icon-check edit"
@click="submitLabel(scope.row)"></i>
<i v-else
class="el-icon-edit edit"
@click="editLabel(scope.row)"></i>
<i class="el-icon-delete del"
@click="delLabel(scope.row, scope.$index)"></i>
<i v-if="scope.row.edit" class="el-icon-check edit" @click="submitLabel(scope.row)"></i>
<i v-else class="el-icon-edit edit" @click="editLabel(scope.row)"></i>
<i class="el-icon-delete del" @click="delLabel(scope.row, scope.$index)"></i>
</template>
</el-table-column>
</el-table>
@ -725,171 +592,206 @@ export default {
$upload-width: 220px;
$upload-height: 102px;
$upload-lg-height: 102px;
/deep/ .avatar-uploader {
.el-upload {
position: relative;
width: $upload-width;
height: $upload-height;
border: 1px solid #dcdee0;
border-radius: 2px;
cursor: pointer;
overflow: hidden;
.uploader-default {
display: flex;
height: $upload-height;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
background: #fafafa;
p {
margin-top: 10px;
font-size: 14px;
color: #333;
line-height: 20px;
}
}
}
&.avatar-uploader-lg {
.el-upload {
width: 100%;
max-width: 820px;
height: $upload-lg-height;
.uploader-default {
height: $upload-lg-height;
}
}
}
.avatar {
display: block;
width: $upload-width;
height: $upload-height;
.el-upload {
position: relative;
width: $upload-width;
height: $upload-height;
border: 1px solid #dcdee0;
border-radius: 2px;
cursor: pointer;
overflow: hidden;
.uploader-default {
display: flex;
height: $upload-height;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
background: #fafafa;
p {
margin-top: 10px;
font-size: 14px;
color: #333;
line-height: 20px;
}
}
.avatar-lg {
display: block;
width: 100%;
}
&.avatar-uploader-lg {
.el-upload {
width: 100%;
max-width: 820px;
height: $upload-lg-height;
.uploader-default {
height: $upload-lg-height;
}
}
.el-upload__tip {
margin-top: 0;
p {
font-size: 12px;
color: #333;
}
}
.avatar {
display: block;
width: $upload-width;
height: $upload-height;
}
.avatar-lg {
display: block;
width: 100%;
height: $upload-lg-height;
}
.el-upload__tip {
margin-top: 0;
p {
font-size: 12px;
color: #333;
}
}
}
.style-wrap {
display: flex;
margin-top: 10px;
.label {
margin-right: 30px;
}
display: flex;
margin-top: 10px;
.label {
margin-right: 30px;
}
}
.styles {
display: flex;
flex-wrap: wrap;
width: 955px;
// height: 320px;
margin-top: 20px;
overflow: auto;
li {
margin: 0 20px 10px 0;
text-align: center;
cursor: pointer;
&:hover .review {
border-color: #062c87;
}
}
.review {
display: flex;
flex-wrap: wrap;
width: 955px;
// height: 320px;
margin-top: 20px;
overflow: auto;
li {
margin: 0 20px 10px 0;
text-align: center;
cursor: pointer;
&:hover .review {
border-color: #9278ff;
}
justify-content: center;
align-items: center;
width: 170px;
height: 112px;
margin-bottom: 10px;
border: 1px solid #dcdee0;
border-radius: 2px;
img {
width: 80px;
}
.review {
display: flex;
justify-content: center;
align-items: center;
width: 170px;
height: 112px;
margin-bottom: 10px;
border: 1px solid #dcdee0;
border-radius: 2px;
img {
width: 80px;
}
.is-link {
width: 50px;
}
.is-link {
width: 50px;
}
}
}
.info {
position: absolute;
top: 8px;
left: -32px;
cursor: pointer;
position: absolute;
top: 8px;
left: -32px;
cursor: pointer;
}
.plus {
margin-bottom: 10px;
font-size: 18px;
color: #9278ff;
text-align: right;
cursor: pointer;
margin-bottom: 10px;
font-size: 18px;
color: #062c87;
text-align: right;
cursor: pointer;
}
.set-btn {
margin-left: 10px !important;
margin-left: 10px !important;
}
.manage-dia {
.edit,
.del {
font-size: 14px;
cursor: pointer;
}
.edit {
margin-right: 10px;
}
.edit,
.del {
font-size: 14px;
cursor: pointer;
}
.edit {
margin-right: 10px;
}
}
.input-form {
&.model {
height: calc(100vh - 340px);
padding-right: 20px;
overflow: auto;
.el-form-item__label {
padding-right: 20px;
}
.lg .el-form-item__label {
padding-right: 43px;
}
}
.item-line {
display: flex;
.el-form-item:not(:last-child) {
margin-right: 200px;
}
}
.line {
margin-bottom: 24px;
border-bottom: 1px dashed #c2c2c2;
}
.el-form-item--small.el-form-item {
margin-bottom: 24px;
}
.el-input,
.el-select {
width: 300px;
}
.el-select .el-input {
width: auto;
}
.el-textarea {
width: 550px;
&.model {
height: calc(100vh - 340px);
padding-right: 20px;
overflow: auto;
.el-form-item__label {
padding-right: 20px;
}
.auto,
.auto .el-input {
width: auto;
.lg .el-form-item__label {
padding-right: 43px;
}
.el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before {
font-size: 18px;
vertical-align: -4px;
color: #f5222d;
}
.item-line {
display: flex;
.el-form-item:not(:last-child) {
margin-right: 200px;
}
}
.line {
margin-bottom: 24px;
border-bottom: 1px dashed #c2c2c2;
}
.el-form-item--small.el-form-item {
margin-bottom: 24px;
}
.el-input,
.el-select {
width: 300px;
}
.el-select .el-input {
width: auto;
}
.el-textarea {
width: 550px;
}
.auto,
.auto .el-input {
width: auto;
}
.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before {
font-size: 18px;
vertical-align: -4px;
color: #f5222d;
}
}
.btns {
text-align: center;
text-align: center;
}
</style>

@ -1,143 +1,79 @@
<template>
<div>
<el-card shadow="hover"
class="mgb20">
<el-card shadow="hover" class="mgb20">
<div class="flex-between">
<div class="per_title"
v-preventReClick
@click="back">
<div class="per_title" v-preventReClick @click="back">
<i class="el-icon-arrow-left"></i>
<span class="per_back">返回</span>
<span class="per_school"
v-text="form.id ? '编辑方案' : '新建方案'"></span>
<span class="per_school" v-text="form.id ? '编辑方案' : '新建方案'"></span>
</div>
</div>
</el-card>
<div class="page">
<el-form :model="form"
:rules="rules"
class="input-form model"
label-width="140px">
<el-form :model="form" :rules="rules" class="input-form model" label-width="140px">
<div class="item-line">
<el-form-item prop="title"
label="标题">
<el-input placeholder="请输入标题"
v-model.trim="form.title"
clearable
maxlength="30"
class="inline-input"></el-input>
<el-form-item prop="title" label="标题">
<el-input placeholder="请输入标题" v-model.trim="form.title" clearable maxlength="30"
class="inline-input"></el-input>
</el-form-item>
<el-form-item prop="classificationId"
label="所属分类">
<el-select style="width: 234px;"
v-model="form.classificationId">
<el-form-item prop="classificationId" label="所属分类">
<el-select style="width: 234px;" v-model="form.classificationId">
<template v-for="item in classifications">
<el-option v-if="item.id"
:key="item.id"
:label="item.classificationName"
:value="item.id">
<el-option v-if="item.id" :key="item.id" :label="item.classificationName" :value="item.id">
</el-option>
</template>
</el-select>
<el-button class="set-btn"
type="primary"
@click="setClass">设置</el-button>
<el-button class="set-btn" type="primary" @click="setClass">设置</el-button>
</el-form-item>
</div>
<el-form-item prop="applicableMajor"
label="适用专业">
<el-input style="width: 940px"
type="textarea"
v-model.trim="form.applicableMajor"
:rows="3"
clearable></el-input>
<el-form-item prop="applicableMajor" label="适用专业">
<el-input style="width: 940px" type="textarea" v-model.trim="form.applicableMajor" :rows="3"
clearable></el-input>
</el-form-item>
<el-form-item prop="schemeIntroduction"
label="方案简介">
<el-input style="width: 940px"
type="textarea"
v-model.trim="form.schemeIntroduction"
:rows="3"
clearable></el-input>
<el-form-item prop="schemeIntroduction" label="方案简介">
<el-input style="width: 940px" type="textarea" v-model.trim="form.schemeIntroduction" :rows="3"
clearable></el-input>
</el-form-item>
<el-form-item prop="product"
label="产品">
<el-button style="margin-bottom: 5px"
type="primary"
@click="showProduct">请选择</el-button>
<el-form-item prop="product" label="产品">
<el-button style="margin-bottom: 5px" type="primary" @click="showProduct">请选择</el-button>
<div>
<el-tag v-for="(tag, i) in form.productList"
:key="i"
class="tag"
closable
@close="delCheckedProduct(i)">
{{tag.productName}}
<el-tag v-for="(tag, i) in form.productList" :key="i" class="tag" closable @close="delCheckedProduct(i)">
{{ tag.productName }}
</el-tag>
</div>
</el-form-item>
<el-form-item prop="schemeFile"
label="方案文件">
<Upload :max-size="100000"
:file-list.sync="fileList"
:on-remove="handleRemove"
@onSuccess="uploadSuccessFile" />
<el-form-item prop="schemeFile" label="方案文件">
<Upload :max-size="100000" :file-list.sync="fileList" :on-remove="handleRemove"
@onSuccess="uploadSuccessFile" />
</el-form-item>
</el-form>
<div class="btns">
<el-button type="primary"
@click="submit(1)">发布</el-button>
<el-button type="primary" @click="submit(1)">发布</el-button>
<el-button @click="submit(0)">保存草稿</el-button>
<el-button @click="back">取消</el-button>
</div>
</div>
<el-dialog title="所属分类设置"
:visible.sync="classVisible"
width="500px"
:close-on-click-modal="false"
class="manage-dia"
:before-close="closeClass">
<el-dialog title="所属分类设置" :visible.sync="classVisible" width="500px" :close-on-click-modal="false"
class="manage-dia" :before-close="closeClass">
<div class="plus">
<i class="el-icon-circle-plus-outline"
@click="addClass"></i>
<i class="el-icon-circle-plus-outline" @click="addClass"></i>
</div>
<el-table :data="classifications"
ref="table"
header-align="center"
row-key="id">
<el-table-column type="index"
width="60"
label="序号"
align="center"></el-table-column>
<el-table-column prop="classificationName"
label="分类名称"
align="center"
min-width="130">
<el-table :data="classifications" ref="table" header-align="center" row-key="id">
<el-table-column type="index" width="60" label="序号" align="center"></el-table-column>
<el-table-column prop="classificationName" label="分类名称" align="center" min-width="130">
<template slot-scope="scope">
<el-input v-if="scope.row.edit"
placeholder="请输入分类名称"
v-model="scope.row.classificationName"
clearable
maxlength="30"></el-input>
<el-input v-if="scope.row.edit" placeholder="请输入分类名称" v-model="scope.row.classificationName" clearable
maxlength="30"></el-input>
<span v-else>{{ scope.row.classificationName }}</span>
</template>
</el-table-column>
<el-table-column prop="updateTime1"
label="是否引用"
align="center"
min-width="60"></el-table-column>
<el-table-column label="操作"
align="center"
min-width="60">
<el-table-column prop="updateTime1" label="是否引用" align="center" min-width="60"></el-table-column>
<el-table-column label="操作" align="center" min-width="60">
<template slot-scope="scope">
<i v-if="scope.row.edit"
class="el-icon-check edit"
@click="submitClass(scope.row)"></i>
<i v-else
class="el-icon-edit edit"
@click="editClass(scope.row)"></i>
<i class="el-icon-delete del"
@click="delClass(scope.row, scope.$index)"></i>
<i v-if="scope.row.edit" class="el-icon-check edit" @click="submitClass(scope.row)"></i>
<i v-else class="el-icon-edit edit" @click="editClass(scope.row)"></i>
<i class="el-icon-delete del" @click="delClass(scope.row, scope.$index)"></i>
</template>
</el-table-column>
</el-table>
@ -146,10 +82,7 @@
</span>
</el-dialog>
<el-dialog :visible.sync="productVisible"
width="1200px"
center
custom-class="product-dia">
<el-dialog :visible.sync="productVisible" width="1200px" center custom-class="product-dia">
<div class="product-wrap">
<div class="item type">
<div class="title-wrap flex-center">
@ -157,10 +90,8 @@
<span>产品分类</span>
</div>
<ul class="types">
<li v-for="(item, i) in productCategories"
:key="i"
:class="{active: curType == item.classificationId}"
@click="typeClick(item)">
<li v-for="(item, i) in productCategories" :key="i" :class="{ active: curType == item.classificationId }"
@click="typeClick(item)">
{{ item.classificationName }}
</li>
</ul>
@ -171,40 +102,18 @@
<p class="addhr_tag"></p>
<span>产品列表</span>
</div>
<el-input class="mgb10"
placeholder="请输入产品名称"
prefix-icon="el-icon-search"
v-model.trim="keyword"
clearable></el-input>
<el-table :data="products"
class="table"
ref="table"
stripe
header-align="center"
max-height="470"
@selection-change="handleSelectionChange"
row-key="mallId">
<el-table-column type="selection"
width="55"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="55"
label="序号"
align="center"></el-table-column>
<el-table-column prop="productName"
label="产品名称"
align="center"></el-table-column>
<el-table-column prop="supplierName"
label="厂商"
align="center"></el-table-column>
<el-input class="mgb10" placeholder="请输入产品名称" prefix-icon="el-icon-search" v-model.trim="keyword"
clearable></el-input>
<el-table :data="products" class="table" ref="table" stripe header-align="center" max-height="470"
@selection-change="handleSelectionChange" row-key="mallId">
<el-table-column type="selection" width="55" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="55" label="序号" align="center"></el-table-column>
<el-table-column prop="productName" label="产品名称" align="center"></el-table-column>
<el-table-column prop="supplierName" label="厂商" align="center"></el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
<el-pagination background layout="total, prev, pager, next" :total="total"
@current-change="handleCurrentChange" :current-page="page">
</el-pagination>
</div>
</div>
@ -214,41 +123,24 @@
<p class="addhr_tag"></p>
<span>已选择产品{{ checkeds.length }}</span>
</div>
<el-table :data="checkeds"
class="table"
stripe
header-align="center"
max-height="470">
<el-table-column type="index"
width="55"
label="序号"
align="center"></el-table-column>
<el-table-column prop="productName"
label="产品名称"
align="center"></el-table-column>
<el-table-column prop="supplierName"
label="厂商"
align="center"></el-table-column>
<el-table-column prop="typeName"
label="产品类型"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="55">
<el-table :data="checkeds" class="table" stripe header-align="center" max-height="470">
<el-table-column type="index" width="55" label="序号" align="center"></el-table-column>
<el-table-column prop="productName" label="产品名称" align="center"></el-table-column>
<el-table-column prop="supplierName" label="厂商" align="center"></el-table-column>
<el-table-column prop="typeName" label="产品类型" align="center"></el-table-column>
<el-table-column label="操作" align="center" width="55">
<template slot-scope="scope">
<i :class="['el-icon-delete rm', {disabled: scope.row.disabled}]"
@click="delProduct(scope.$index, scope.row)"></i>
<i :class="['el-icon-delete rm', { disabled: scope.row.disabled }]"
@click="delProduct(scope.$index, scope.row)"></i>
</template>
</el-table-column>
</el-table>
</div>
</div>
<span slot="footer"
class="dialog-footer">
<span slot="footer" class="dialog-footer">
<el-button @click="productVisible = false"> </el-button>
<el-button type="primary"
@click="productSubmit"> </el-button>
<el-button type="primary" @click="productSubmit"> </el-button>
</span>
</el-dialog>
</div>
@ -644,110 +536,137 @@ export default {
<style lang="scss" scoped>
.plus {
margin-bottom: 10px;
font-size: 18px;
color: #9278ff;
text-align: right;
cursor: pointer;
margin-bottom: 10px;
font-size: 18px;
color: #062c87;
text-align: right;
cursor: pointer;
}
.set-btn {
margin-left: 10px !important;
margin-left: 10px !important;
}
.manage-dia {
.edit,
.del {
font-size: 14px;
cursor: pointer;
}
.edit {
margin-right: 10px;
}
.edit,
.del {
font-size: 14px;
cursor: pointer;
}
.edit {
margin-right: 10px;
}
}
.input-form {
&.model {
height: calc(100vh - 340px);
padding-right: 20px;
overflow: auto;
.el-form-item__label {
padding-right: 20px;
}
.lg .el-form-item__label {
padding-right: 43px;
}
}
.item-line {
display: flex;
.el-form-item:not(:last-child) {
margin-right: 200px;
}
}
.line {
margin-bottom: 24px;
border-bottom: 1px dashed #c2c2c2;
}
.el-form-item--small.el-form-item {
margin-bottom: 24px;
}
.el-input,
.el-select {
width: 300px;
}
.el-select .el-input {
width: auto;
}
.el-textarea {
width: 550px;
&.model {
height: calc(100vh - 340px);
padding-right: 20px;
overflow: auto;
.el-form-item__label {
padding-right: 20px;
}
.auto,
.auto .el-input {
width: auto;
.lg .el-form-item__label {
padding-right: 43px;
}
.el-form-item.is-required:not(.is-no-asterisk) > .el-form-item__label:before {
font-size: 18px;
vertical-align: -4px;
color: #f5222d;
}
.item-line {
display: flex;
.el-form-item:not(:last-child) {
margin-right: 200px;
}
}
.line {
margin-bottom: 24px;
border-bottom: 1px dashed #c2c2c2;
}
.el-form-item--small.el-form-item {
margin-bottom: 24px;
}
.el-input,
.el-select {
width: 300px;
}
.el-select .el-input {
width: auto;
}
.el-textarea {
width: 550px;
}
.auto,
.auto .el-input {
width: auto;
}
.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before {
font-size: 18px;
vertical-align: -4px;
color: #f5222d;
}
}
.btns {
text-align: center;
text-align: center;
}
.tag {
margin: 0 5px 5px 0;
margin: 0 5px 5px 0;
}
/deep/.product-dia {
.product-wrap {
display: flex;
}
.title-wrap {
margin-bottom: 15px;
}
.item {
width: 130px;
max-height: 600px;
margin-right: 20px;
overflow: hidden;
}
.types {
li {
margin: 10px 0;
cursor: pointer;
&.active {
color: #9278ff;
}
}
}
.products {
width: 400px;
}
.checked {
flex: 1;
.el-table .cell {
font-size: 12px;
}
.product-wrap {
display: flex;
}
.title-wrap {
margin-bottom: 15px;
}
.item {
width: 130px;
max-height: 600px;
margin-right: 20px;
overflow: hidden;
}
.types {
li {
margin: 10px 0;
cursor: pointer;
&.active {
color: #062c87;
}
}
.rm {
font-size: 16px;
cursor: pointer;
}
.products {
width: 400px;
}
.checked {
flex: 1;
.el-table .cell {
font-size: 12px;
}
}
.rm {
font-size: 16px;
cursor: pointer;
}
}
</style>

File diff suppressed because it is too large Load Diff

@ -3,31 +3,22 @@
<div class="left">
<div class="inner">
<div class="text-center">
<img :src="$store.state.avatar"
class="avatar" />
<el-upload :headers="{token}"
:action="this.api.updateUserAvatars"
name="file"
:limit="10"
:show-file-list="false"
:on-success="changeAvatar">
<el-button type="text"
size="small">点击更换头像</el-button>
<img :src="$store.state.avatar" class="avatar" />
<el-upload :headers="{ token }" :action="this.api.updateUserAvatars" name="file" :limit="10"
:show-file-list="false" :on-success="changeAvatar">
<el-button type="text" size="small">点击更换头像</el-button>
</el-upload>
</div>
<ul class="menu">
<li v-for="item in typeList"
:key="item.index"
:class="{active: item.index == active}">
<li v-for="item in typeList" :key="item.index" :class="{ active: item.index == active }">
{{ item.title }}
</li>
</ul>
</div>
</div>
<div class="right">
<info ref="info"
@updateStatus="updateStatus"></info>
<info ref="info" @updateStatus="updateStatus"></info>
</div>
</div>
</template>
@ -91,43 +82,51 @@ export default {
<style lang="scss" scoped>
.wrap {
display: flex;
width: 1280px;
margin: 0 auto;
background-color: #f3f6fa;
.text-center {
text-align: center;
display: flex;
width: 1280px;
margin: 0 auto;
background-color: #f3f6fa;
.text-center {
text-align: center;
}
.left {
margin-right: 12px;
background-color: #fff;
box-shadow: 2px 0px 6px 0px #eeeeee;
.inner {
width: 170px;
padding: 20px 0;
}
.left {
margin-right: 12px;
background-color: #fff;
box-shadow: 2px 0px 6px 0px #eeeeee;
.inner {
width: 170px;
padding: 20px 0;
}
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
}
.menu {
margin-top: 32px;
li {
padding: 0 20px;
color: #303133;
font-size: 14px;
line-height: 38px;
cursor: pointer;
&.active {
color: #fff;
background-color: #9278ff;
}
}
}
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
}
.right {
flex: 1;
.menu {
margin-top: 32px;
li {
padding: 0 20px;
color: #303133;
font-size: 14px;
line-height: 38px;
cursor: pointer;
&.active {
color: #fff;
background-color: #062c87;
}
}
}
}
.right {
flex: 1;
}
}
</style>

@ -438,14 +438,11 @@
<script>
import Util from "@/libs/util";
import Setting from "@/setting";
import quill from "@/components/quill";
import Editor from '@tinymce/tinymce-vue'
import editorConfig from '@/utils/editor'
import Cropper from '@/components/img-upload/Cropper'
import Upload from '@/components/upload';
import Oss from '@/components/upload/upload.js'
import Axios from 'axios'
export default {
data () {
return {
@ -1418,7 +1415,7 @@ $avatar-width: 104px;
.plus {
margin-bottom: 10px;
font-size: 18px;
color: #9278ff;
color: #062c87;
text-align: right;
cursor: pointer;
}

@ -1,179 +1,94 @@
<template>
<!-- 产品管理 -->
<div style="padding-top: 24px">
<div class="page">
<div class="tool">
<ul class="filter"
style="align-items: flex-start">
<ul class="filter" style="align-items: flex-start">
<li>
<label>学科类</label>
<el-select v-model="form.categoryId"
clearable
@change="getProfessionalClass()"
@clear="clearClass()">
<el-option v-for="(item,index) in subjectList"
:key="index"
:label="item.disciplineName"
:value="item.disciplineId"></el-option>
<el-select v-model="form.categoryId" clearable @change="getProfessionalClass()" @clear="clearClass()">
<el-option v-for="(item, index) in subjectList" :key="index" :label="item.disciplineName"
:value="item.disciplineId"></el-option>
</el-select>
</li>
<li>
<label>专业类</label>
<el-select v-model="form.professionalCategoryId"
clearable
:disabled="form.categoryId ? false : true"
@change="getProfessional"
@clear="clearProfess()">
<el-option v-for="(item,index) in professionalClassList"
:key="index"
:label="item.professionalClassName"
:value="item.professionalClassId"></el-option>
<el-select v-model="form.professionalCategoryId" clearable :disabled="form.categoryId ? false : true"
@change="getProfessional" @clear="clearProfess()">
<el-option v-for="(item, index) in professionalClassList" :key="index" :label="item.professionalClassName"
:value="item.professionalClassId"></el-option>
</el-select>
</li>
<li>
<label>专业</label>
<el-select v-model="form.professionalId"
clearable
:disabled="form.professionalCategoryId ? false : true"
@change="initData">
<el-option v-for="(item,index) in professionalList"
:key="index"
:label="item.professionalName"
:value="item.professionalId"></el-option>
<el-select v-model="form.professionalId" clearable :disabled="form.professionalCategoryId ? false : true"
@change="initData">
<el-option v-for="(item, index) in professionalList" :key="index" :label="item.professionalName"
:value="item.professionalId"></el-option>
</el-select>
</li>
<li>
<label>产品分类</label>
<el-select v-model="form.productClassification"
clearable
placeholder="请选择产品分类"
@change="initData">
<el-option v-for="(item, i) in productCategoryList"
:key="i"
:label="item.classificationName"
:value="item.classificationId"></el-option>
<el-select v-model="form.productClassification" clearable placeholder="请选择产品分类" @change="initData">
<el-option v-for="(item, i) in productCategoryList" :key="i" :label="item.classificationName"
:value="item.classificationId"></el-option>
</el-select>
</li>
<li>
<label>搜索</label>
<el-input placeholder="请输入"
suffix-icon="el-icon-search"
v-model="form.productName"
clearable
size="small"></el-input>
<el-input placeholder="请输入" suffix-icon="el-icon-search" v-model="form.productName" clearable
size="small"></el-input>
</li>
</ul>
<div>
<el-button v-auth="'/shop:产品管理:新增'"
type="primary"
round
@click="addCourse">新增</el-button>
<el-button v-auth="'/shop:产品管理:新增'" type="primary" round @click="addCourse">新增</el-button>
</div>
</div>
<el-table :data="list"
class="table"
ref="table"
stripe
header-align="center"
@selection-change="handleSelectionChange"
row-key="id"
@sort-change="sortChange">
<el-table-column type="selection"
width="80"
align="center"
:reserve-selection="true"></el-table-column>
<el-table-column type="index"
width="100"
label="序号"
align="center">
<el-table :data="list" class="table" ref="table" stripe header-align="center"
@selection-change="handleSelectionChange" row-key="id" @sort-change="sortChange">
<el-table-column type="selection" width="80" align="center" :reserve-selection="true"></el-table-column>
<el-table-column type="index" width="100" label="序号" align="center">
<template slot-scope="scope">
{{ scope.$index + (page - 1) * pageSize + 1 }}
</template>
</el-table-column>
<el-table-column prop="productName"
label="产品名称"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="supplierName"
label="厂商"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="classificationName"
label="产品分类"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="typeName"
label="产品类型"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="associatedProductName"
label="关联产品"
min-width="140"
align="center"></el-table-column>
<el-table-column prop="courseName"
label="状态"
min-width="140"
align="center">
<el-table-column prop="productName" label="产品名称" min-width="150" align="center"></el-table-column>
<el-table-column prop="supplierName" label="厂商" min-width="150" align="center"></el-table-column>
<el-table-column prop="classificationName" label="产品分类" min-width="150" align="center"></el-table-column>
<el-table-column prop="typeName" label="产品类型" min-width="150" align="center"></el-table-column>
<el-table-column prop="associatedProductName" label="关联产品" min-width="140" align="center"></el-table-column>
<el-table-column prop="courseName" label="状态" min-width="140" align="center">
<template slot-scope="scope">
{{ scope.row.isShelves ? '下架' : '上架' }}
</template>
</el-table-column>
<el-table-column prop="orderQuantity"
label="订单量"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="userName"
label="最近编辑人"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="selected"
label="精选"
min-width="150"
align="center"
sortable="custom">
<el-table-column prop="orderQuantity" label="订单量" min-width="150" align="center"></el-table-column>
<el-table-column prop="userName" label="最近编辑人" min-width="150" align="center"></el-table-column>
<el-table-column prop="selected" label="精选" min-width="150" align="center" sortable="custom">
<template slot-scope="scope">
<i v-auth="'/shop:产品管理:精选'"
:class="['icon', scope.row.selected ? 'el-icon-check' : 'el-icon-close']"
@click="selected(scope.row)"></i>
<i v-auth="'/shop:产品管理:精选'" :class="['icon', scope.row.selected ? 'el-icon-check' : 'el-icon-close']"
@click="selected(scope.row)"></i>
</template>
</el-table-column>
<el-table-column label="上架/下架"
align="center"
width="90">
<el-table-column label="上架/下架" align="center" width="90">
<template slot-scope="scope">
<el-switch v-model="scope.row.isShelves"
:active-value="0"
:inactive-value="1"
@change="changeSwitch($event, scope.row)"
v-auth="'/shop:产品管理:上下架'">
<el-switch v-model="scope.row.isShelves" :active-value="0" :inactive-value="1"
@change="changeSwitch($event, scope.row)" v-auth="'/shop:产品管理:上下架'">
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作"
align="center"
width="120">
<el-table-column label="操作" align="center" width="120">
<template slot-scope="scope">
<template v-if="scope.row.isShelves">
<el-button v-auth="'/shop:产品管理:编辑'"
type="text"
@click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/shop:产品管理:删除'"
type="text"
@click="handleDelete(scope.row)">删除</el-button>
<el-button v-auth="'/shop:产品管理:编辑'" type="text" @click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/shop:产品管理:删除'" type="text" @click="handleDelete(scope.row)">删除</el-button>
</template>
<el-button v-else
v-auth="'/shop:产品管理:查看'"
type="text"
@click="edit(scope.row, 1)">查看</el-button>
<el-button v-else v-auth="'/shop:产品管理:查看'" type="text" @click="edit(scope.row, 1)">查看</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination background
layout="total, prev, pager, next"
:total="total"
@current-change="handleCurrentChange"
:current-page="page">
<el-pagination background layout="total, prev, pager, next" :total="total" @current-change="handleCurrentChange"
:current-page="page">
</el-pagination>
</div>
</div>
@ -436,20 +351,24 @@ export default {
<style lang="scss" scoped>
/deep/ .tool {
margin-bottom: 14px;
.filter {
flex-wrap: wrap;
li {
margin-bottom: 10px;
}
.el-input {
min-width: 215px;
}
margin-bottom: 14px;
.filter {
flex-wrap: wrap;
li {
margin-bottom: 10px;
}
.el-input {
min-width: 215px;
}
}
}
.icon {
font-size: 16px;
color: #9076ff;
cursor: pointer;
font-size: 16px;
color: #9076ff;
cursor: pointer;
}
</style>

@ -1,55 +0,0 @@
<template>
<div class="page">
<div class="tabs">
<a class="item"
v-for="(item,index) in tabs"
:key="index"
:class="{active: index == active}"
@click="tabChange(index)">{{ item }}</a>
</div>
<div class="page-content">
<product v-if="active == 'first'" />
<market v-if="active == 'second'" />
</div>
</div>
</template>
<script>
import Setting from "@/setting";
import product from "./product";
import market from "./market";
export default {
components: {
product,
market,
},
data () {
return {
active: "first", //
tabs: {
first: "产品管理",
second: "营销推广管理",
},
showTabs: true
};
},
mounted () {
Setting.dynamicRoute && this.initTabs();
},
methods: {
tabChange (index) {
this.active = index;
},
initTabs () {
const { btns } = this.$store.state
const tab1 = btns.includes('/shop:产品管理')
const tab2 = btns.includes('/shop:营销推广管理')
tab1 || delete this.tabs.first
tab2 || delete this.tabs.second
}
}
};
</script>
<style lang="scss" scoped>
</style>

@ -1,314 +0,0 @@
<template>
<!-- 营销推广管理 -->
<div style="padding-top: 24px">
<div style="margin-bottom: 10px;text-align: right;">
<el-button v-auth="'/shop:营销推广管理:新增'"
type="primary"
round
@click="add">新增</el-button>
</div>
<el-table :data="list"
class="table"
ref="table"
stripe
header-align="center"
row-key="id">
<el-table-column type="index"
width="100"
label="序号"
align="center"></el-table-column>
<el-table-column prop="courseName"
label="图片"
min-width="150"
align="center">
<template slot-scope="scope">
<img width="100"
:src="scope.row.banner"
alt="">
</template>
</el-table-column>
<el-table-column prop="title"
label="标题"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="subheading"
label="副标题"
min-width="150"
align="center"></el-table-column>
<el-table-column prop="url"
label="链接"
min-width="150"
align="center"></el-table-column>
<el-table-column label="操作"
align="center"
width="250">
<template slot-scope="scope">
<el-switch v-model="scope.row.isOpen"
:active-value="0"
:inactive-value="1"
@change="switchOff($event, scope.row)"
v-auth="'/shop:营销推广管理:禁用'">
</el-switch>
<el-button style="margin-left: 10px;"
v-auth="'/shop:营销推广管理:编辑'"
type="text"
@click="edit(scope.row)">编辑</el-button>
<el-button v-auth="'/shop:营销推广管理:删除'"
type="text"
@click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog :title="(form.id ? '编辑' : '新增') + 'banner'"
:visible.sync="bannerVisible"
width="500px"
class="dialog"
:close-on-click-modal="false">
<el-form ref="form"
label-width="60px">
<el-form-item label="图片">
<el-upload class="avatar-uploader"
accept=".jpg,.png,.jpeg,.gif"
:on-change="changeFile"
:show-file-list="false"
action=""
:auto-upload="false">
<img v-if="form.banner"
:src="form.banner"
class="avatar">
<div class="uploader-default"
v-else>
<i class="el-icon-plus"></i>
<p>上传图片</p>
</div>
</el-upload>
</el-form-item>
<el-form-item label="标题">
<el-input v-model="form.title"
placeholder="请输入标题"
maxlength="100"></el-input>
</el-form-item>
<el-form-item label="副标题">
<el-input v-model="form.subheading"
placeholder="请输入副标题"
maxlength="100"></el-input>
</el-form-item>
<el-form-item label="链接">
<el-input v-model="form.url"
placeholder="请输入链接"
maxlength="100"></el-input>
</el-form-item>
</el-form>
<span slot="footer"
class="dialog-footer">
<el-button @click="bannerVisible = false">取消</el-button>
<el-button type="primary"
@click="submitBanner">确定</el-button>
</span>
</el-dialog>
<!-- 剪裁组件弹窗 -->
<el-dialog title="图片裁剪"
append-to-body
:visible.sync="cropperModel"
width="1100px"
:close-on-click-modal="false">
<Cropper ref="cropper"
:img-file.sync="file"
:is-upload="isUpload"
:fixed="true"
:fixedNumber.sync="fixedNumber"
:autoCropWidth="500"
:autoCropHeight="138.8"
@upload="customUpload" />
</el-dialog>
</div>
</template>
<script>
import Util from "@/libs/util";
import Setting from '@/setting'
import Cropper from '@/components/img-upload/Cropper'
import Axios from 'axios'
import Oss from '@/components/upload/upload.js'
export default {
data () {
return {
headers: {
token: sessionStorage.getItem("token")
},
list: [],
bannerVisible: false,
form: {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
},
cropperModel: false,
isUpload: false,
fixedNumber: [5.4, 1],
file: ''
};
},
components: {
Cropper
},
mounted () {
this.getList()
},
methods: {
getList () {
this.$post(this.api.listMarketing, {
pageNum: 1,
pageSize: 1000
}).then(({ page }) => {
this.list = page.records;
this.total = page.total;
}).catch(res => {
});
},
//
customUpload (data) {
data.name = this.file.name
this.imgUpload(data)
},
//
imgUpload (formData) {
this.isUpload = true
Oss.upload(formData).then(res => {
this.form.banner && Oss.del(this.form.banner)
this.form.banner = res.url
})
this.$refs.cropper.isDisabled = false
this.isUpload = false
this.cropperModel = false
},
//
changeFile (file) {
const { size, name } = file
const ext = name.substring(name.lastIndexOf('.') + 1)
if (!Util.isImg(ext)) {
this.$message.error('请上传图片!')
return false
}
this.file = file
this.cropperModel = true
this.$nextTick(() => {
this.$refs.cropper.updateImg({
url: window.URL.createObjectURL(file.raw),
size: file.size
})
})
},
add () {
this.form = {
id: '',
banner: '',
title: '',
subheading: '',
url: '',
}
this.bannerVisible = true
},
edit (row) {
this.form = JSON.parse(JSON.stringify(row))
this.bannerVisible = true
},
// banner
submitBanner () {
const { form } = this
if (!form.banner) return Util.errorMsg('请上传图片')
this.$post(this.api[form.id ? 'updateMarketing' : 'saveMarketing'], form).then(res => {
this.getList()
this.bannerVisible = false
}).catch(res => { })
},
handleDelete (row) {
this.$confirm("此删除操作不可逆,是否确认删除选中项?", "提示", {
type: "warning"
})
.then(() => {
this.$post(`${this.api.delMarketing}?ids=${row.id}`).then(res => {
Util.successMsg("删除成功");
this.getList();
}).catch(res => {
});
})
.catch(() => {
});
},
switchOff (val, row) {
this.$post(`${this.api.bannerEnableOrDisable}?id=${row.id}&isDisable=${row.isOpen}`).then(res => { }).catch(err => { })
}
}
};
</script>
<style lang="scss" scoped>
.m-l-10 {
margin-left: 10px;
}
$avatar-width: 104px;
/deep/ .avatar-uploader {
.el-upload {
position: relative;
width: $avatar-width;
height: $avatar-width;
border: 1px dashed #d9d9d9;
border-radius: 2px;
cursor: pointer;
overflow: hidden;
&:hover {
border-color: #409eff;
}
.uploader-default {
display: flex;
flex-direction: column;
justify-content: center;
width: $avatar-width !important;
height: $avatar-width;
text-align: center;
background: rgba(0, 0, 0, 0.04);
i {
font-size: 20px;
font-weight: bold;
color: #8c939d;
}
p {
margin-top: 10px;
font-size: 14px;
color: rgba(0, 0, 0, 0.65);
line-height: 1;
}
}
.avatar {
width: $avatar-width;
height: $avatar-width;
display: block;
}
}
.el-upload__tip {
margin-top: 0;
p {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
line-height: 1;
&:first-child {
margin-bottom: 5px;
}
}
}
}
</style>

@ -310,7 +310,7 @@ export default {
.plus {
margin-bottom: 10px;
font-size: 18px;
color: #9278ff;
color: #062c87;
text-align: right;
cursor: pointer;
}

@ -356,7 +356,7 @@ export default {
//
.scrollbar ::-webkit-scrollbar-thumb {
background-color: #9278ff;
background-color: #062c87;
border-radius: 3px;
box-shadow: inset 0 0 5px #dddddd;
}

@ -0,0 +1,217 @@
<template>
<div class="wrap">
<div class="block block1">
<div class="title">系统后台</div>
<div class="apps">
<div class="app">
<img src="@/assets/img/workbench/1.png" alt="">
<p class="name">Python系统</p>
</div>
<div class="app">
<img src="@/assets/img/workbench/2.png" alt="">
<p class="name">理论考试系统</p>
</div>
<div class="app">
<img src="@/assets/img/workbench/3.png" alt="">
<p class="name">金融产品设计及数字化营销沙盘系统</p>
</div>
<div class="app">
<img src="@/assets/img/workbench/4.png" alt="">
<p class="name">银行综合系统</p>
</div>
<div class="app">
<img src="@/assets/img/workbench/5.png" alt="">
<p class="name">众筹系统</p>
</div>
</div>
</div>
<div class="block block2">
<div class="title">职站教学后台</div>
<div class="apps">
<div class="app" @click="to('/curriculum')">
<img src="@/assets/img/workbench/6.png" alt="">
<p class="name">教学课程管理</p>
</div>
<div class="app" @click="to('/theoreticalCourse')">
<img src="@/assets/img/workbench/7.png" alt="">
<p class="name">精品课程管理</p>
</div>
<div class="app" @click="to('/information')">
<img src="@/assets/img/workbench/8.png" alt="">
<p class="name">资讯管理</p>
</div>
<div class="app" @click="to('/curriculum')">
<img src="@/assets/img/workbench/9.png" alt="">
<p class="name">资源库</p>
</div>
</div>
</div>
<div class="block middle" @click="to('/shop')">
<img src="@/assets/img/workbench/10.png" alt="">
<p class="name">产品管理</p>
</div>
<div class="block middle" @click="to('/market')">
<img src="@/assets/img/workbench/11.png" alt="">
<p class="name">营销管理</p>
</div>
<div class="block middle" @click="to('/parnerOperation')">
<img src="@/assets/img/workbench/12.png" alt="">
<p class="name">小程序内容管理</p>
</div>
<div class="block middle" @click="to('/parner')">
<img src="@/assets/img/workbench/13.png" alt="">
<p class="name">销售代理人管理</p>
</div>
<div class="block block3">
<div class="title">运营后台</div>
<div class="apps">
<div class="app" @click="to('/match')">
<img src="@/assets/img/workbench/14.png" alt="">
<p class="name">大赛管理</p>
</div>
<div class="app" @click="to('/data')">
<img src="@/assets/img/workbench/15.png" alt="">
<p class="name">数据管理</p>
</div>
</div>
</div>
</div>
</template>
<script>
import Setting from '@/setting'
export default {
data () {
return {
};
},
mounted () {
},
methods: {
getData () {
this.loading = true
this.$post(this.api.userManagementList, {
countries: this.form.countries,
provinceId: this.form.provinces,
cityId: this.form.city,
platformId: this.form.platformId,
schoolId: this.form.schoolId,
month: this.form.month,
creationTime: this.form.startTime,
endTime: this.form.endTime,
roleId: this.form.accountRole,
searchContent: this.form.keyword,
pageNum: this.page,
pageSize: this.pageSize
}).then(({ page }) => {
const { records, total } = page
records.map(e => {
e.enable = e.displayState
if (e.enable === 2) {
e.enable = 1
}
})
this.userData = records
this.totals = total
this.loading = false
}).catch(res => {
this.loading = false
})
},
to (path) {
this.$router.push(path)
},
}
};
</script>
<style lang="scss" scoped>
.wrap {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
width: 1000px;
margin: 0 auto;
.block {
padding: 20px 20px 0;
background-color: #fff;
border-radius: 20px;
box-sizing: border-box;
}
.block1 {
width: 55%;
.app {
width: 30%;
}
img {
margin-bottom: 10px;
}
}
.block2 {
width: 40%;
.app {
width: 48%;
}
}
.block3 {
width: 100%;
margin-top: 30px;
.app {
display: inline-flex;
align-items: center;
margin-right: 100px;
}
img {
margin-right: 20px;
}
}
.middle {
display: inline-flex;
align-items: center;
width: 200px;
padding: 20px;
margin-top: 30px;
cursor: pointer;
img {
margin-right: 20px;
}
}
.title {
margin-bottom: 30px;
font-size: 18px;
}
.apps {
display: flex;
flex-wrap: wrap;
}
.app {
margin-bottom: 30px;
text-align: center;
cursor: pointer;
}
.name {
font-size: 14px;
color: #333;
}
}
</style>
Loading…
Cancel
Save