Browse Source

整理 - 路由/主题库

dev
xuhuajiao 3 years ago
parent
commit
cda13a4064
  1. 13
      README.md
  2. 1
      src/api/device/deviceList.js
  3. 129
      src/assets/styles/adminIndex.scss
  4. 2
      src/assets/styles/sidebar.scss
  5. 24
      src/router/routers.js
  6. 7
      src/views/components/MyAlbum.vue
  7. 6
      src/views/components/ThemeGalleryList.vue
  8. 392
      src/views/components/materialFolder.vue
  9. 56
      src/views/components/upload.vue
  10. 25
      src/views/content/material/materialList/index.vue
  11. 1
      src/views/content/publish/historyList/index.vue
  12. 17
      src/views/content/publish/urgentMessage/index.vue
  13. 9
      src/views/content/theme/index.vue
  14. 2
      src/views/dashboard/AgencyData.vue
  15. 4
      src/views/dashboard/DeviceData.vue
  16. 3
      src/views/dashboard/HomeThemeGallery.vue
  17. 2
      src/views/dashboard/PublishProcess.vue
  18. 7
      src/views/device/config/index.vue
  19. 2
      src/views/device/list/index.vue
  20. 3
      src/views/forgetPassword/index.vue
  21. 13
      src/views/immediateRelease/index.vue
  22. 2
      src/views/login.vue
  23. 36
      src/views/nested/menu1/menu1-1/index.vue
  24. 5
      src/views/nested/menu1/menu1-2/index.vue
  25. 5
      src/views/nested/menu2/index.vue
  26. 2
      src/views/system/user/index.vue

13
README.md

@ -31,15 +31,22 @@
│ ├── utils # 全局公用方法
│ ├── views # views 所有页面
│ │ ├── components # views内页面组件
│ │ ├── content # 内容管理
│ │ │ ├── material # 素材库
│ │ │ ├── publish # 上屏发布
│ │ │ ├── theme # 主题库
│ │ ├── dashboard # 首页面板内容
│ │ ├── device # 设备管理
│ │ │ ├── config # 开关机配置
│ │ │ ├── list # 设备列表
│ │ ├── features # 错误页面
│ │ ├── forgetPassword # 忘记密码
│ │ ├── immediateRelease # 即时发布/定时发布
│ │ ├── materialContent # 素材库
│ │ ├── publishContent # 上屏发布
│ │ ├── system # 权限管理
│ │ ├── ThemeGallery # 主题库
│ │ │ ├── dept # 机构管理
│ │ │ ├── menu # 权限管理
│ │ │ ├── role # 角色管理
│ │ │ ├── user # 用户管理
│ │ ├── home # 首页
│ │ ├── login # 登录
│ ├── App.vue # 入口页面

1
src/api/device/deviceList.js

@ -8,7 +8,6 @@ export function ReqDeviceList(parameter) {
params: parameter
})
}
// &device_id=${device_id}
// 编辑设备发起请求
export function ReqDeviceEdit(parameter) {

129
src/assets/styles/adminIndex.scss

@ -1,17 +1,19 @@
// start
/**修改全局的滚动条*/
/**滚动条的宽度*/
::-webkit-scrollbar {
width: 8px;
}
//滚动条的滑块
::-webkit-scrollbar-thumb {
background-color: #c1c1c1;
border-radius: 3px;
}
img[src=""],img:not([src]){opacity:0;}
img[src=""],
img:not([src]) {
opacity: 0;
}
.home_item {
height: 248px;
@ -37,6 +39,7 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
// 获取验证码
.auth_code {
position: relative;
@ -78,6 +81,7 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
// table新增按钮
.page_add {
text-align: right;
@ -110,6 +114,7 @@ img[src=""],img:not([src]){opacity:0;}
.col_flex {
display: flex;
}
// table内不同的btn
.el-table {
color: #333;
@ -144,6 +149,7 @@ img[src=""],img:not([src]){opacity:0;}
background-color: #a7acae !important;
}
}
// 弹框定位居中
.el-dialog {
margin-top: 0 !important;
@ -154,35 +160,43 @@ img[src=""],img:not([src]){opacity:0;}
-ms-transform: translateY(-50%);
-o-transform: translateY(-50%);
}
// 弹框内表单统一操作
.el-dialog__body {
max-height: 70vh !important;
overflow-y: auto;
.el-form-item {
margin-bottom: 24px;
}
.el-form-item__label {
line-height: 40px;
color: #333;
}
.el-input__inner {
// width: 336px;
height: 40px;
line-height: 40px;
}
.el-range-separator {
line-height: 34px;
}
.el-date-editor {
width: 336px;
}
}
// 弹框header样式
.el-dialog__header {
position: relative;
padding: 20px 0;
margin: 0 24px;
border-bottom: 1px solid #eee;
&::before {
content: "";
position: absolute;
@ -191,28 +205,26 @@ img[src=""],img:not([src]){opacity:0;}
width: 44px;
height: 47px;
margin-top: -24px;
background: url(../images/t-zs.png) no-repeat left center;
background: url(~@/assets/images/t-zs.png) no-repeat left center;
background-size: 100% 100%;
}
.el-dialog__title {
color: #000;
}
// .el-dialog__headerbtn {
// font-size: 20px;
// top: 50%;
// right: 0;
// transform: translateY(-50%);
// }
}
// 弹框底部-居中-btn样式
.el-dialog__footer {
padding: 10px 0 40px 0;
text-align: center;
.dialog-footer {
.el-button {
font-size: 14px;
padding: 10px 36px;
}
.el-button--default {
color: #3a8aeb;
border-color: #3a8aeb;
@ -220,6 +232,7 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
// 记录弹框
.record_layer {
.el-dialog__body {
@ -242,16 +255,19 @@ img[src=""],img:not([src]){opacity:0;}
border: 1px solid #f0f0f0;
border-radius: 6px;
margin: 0 10px 10px 0;
.img_box{
.img_box {
width: 100%;
height: 148px;
}
img {
display: block;
width: 164px;
height: 140px;
object-fit: cover;
}
.item_player {
position: absolute;
top: 50%;
@ -268,15 +284,15 @@ img[src=""],img:not([src]){opacity:0;}
.radio_img {
width: 164px;
height: 140px;
background: url(../../assets/images/t-yp.png) no-repeat #b3e8fa center;
background: url(~@/assets/images/t-yp.png) no-repeat #b3e8fa center;
background-size: 98px 98px;
}
.set_radio{
.set_radio {
.radio_img {
width: 140px;
height: 250px;
background: url(../../assets/images/t-yp.png) no-repeat #b3e8fa center;
background: url(~@/assets/images/t-yp.png) no-repeat #b3e8fa center;
background-size: 98px 98px;
}
}
@ -304,19 +320,23 @@ img[src=""],img:not([src]){opacity:0;}
height: 1px;
}
}
.el-range-editor--small {
.el-range-separator {
width: 24px;
}
}
// 选择设备
.step_form,
.publish_layer {
.el-radio-group {
display: block;
.el-radio {
position: relative;
line-height: 40px;
.radio_tip {
position: absolute;
right: -45px;
@ -333,6 +353,7 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
.select_all_tip {
width: 336px;
height: 32px;
@ -344,6 +365,7 @@ img[src=""],img:not([src]){opacity:0;}
background: #fff;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.14);
}
.select_other {
width: 600px;
margin: -20px 0 0 100px;
@ -352,23 +374,28 @@ img[src=""],img:not([src]){opacity:0;}
border: 1px solid #dcdde3;
border-radius: 4px;
font-size: 14px;
.other_tip {
line-height: 34px;
span {
display: inline-block;
margin-left: 20px;
}
}
.el-button {
padding: 5px 8px;
border: none !important;
}
.delt_btn {
color: #fff;
background-color: #ee5747 !important;
}
}
}
.step_form,
.publish_layer,
.add_device_layer {
@ -379,17 +406,19 @@ img[src=""],img:not([src]){opacity:0;}
margin: 18px 16px 0 0;
font-size: 14px;
cursor: pointer;
// color: #3a8aeb;
::v-deep .el-icon-close {
font-size: 16px;
}
}
}
.add_device_layer {
.el-dialog__body {
padding: 0 20px 30px 20px;
}
}
// 弹框右上角多按钮
.upload_layer {
.upload_list_right {
@ -401,15 +430,18 @@ img[src=""],img:not([src]){opacity:0;}
font-weight: bold;
color: #3a8aeb;
cursor: pointer;
.upload_return {
margin-left: 16px;
}
}
}
// 主题库list
.theme_img {
display: flex;
flex-wrap: wrap;
.theme_item {
position: relative;
width: 160px;
@ -418,17 +450,20 @@ img[src=""],img:not([src]){opacity:0;}
border-radius: 4px;
overflow: hidden;
margin: 0 24px 24px 0;
.img_box{
.img_box {
width: 100%;
height: 100%;
}
img {
position: relative;
display: block;
width: 100%;
height: 100%;
object-fit: cover;
&::after{
&::after {
content: "222222";
position: absolute;
left: 0;
@ -436,9 +471,10 @@ img[src=""],img:not([src]){opacity:0;}
z-index: 999;
}
}
}
}
.cont_upload {
display: flex;
flex-wrap: wrap;
@ -446,6 +482,7 @@ img[src=""],img:not([src]){opacity:0;}
align-content: center;
border: 1px dashed #dcdde3;
background: #f2f7ff;
.el-button {
display: block;
width: 114px;
@ -454,15 +491,19 @@ img[src=""],img:not([src]){opacity:0;}
font-size: 14px;
border: none;
}
.cont_upload_btn {
background: linear-gradient(to right, #fc8c6f, #fa544e) !important;
}
.mkdir_btn,
.return_btn {
margin-left: 0;
margin-top: 16px;
}
.return_btn {
span,
a {
display: block;
@ -471,8 +512,10 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
.folder {
border: 1px solid #dcdde3;
.icon_bg {
display: flex;
align-items: center;
@ -480,16 +523,19 @@ img[src=""],img:not([src]){opacity:0;}
height: 148px;
background: #fff5dd;
overflow: hidden;
.icon {
width: 104px;
height: 89px;
}
img {
width: 100%;
height: 148px;
}
}
}
// 素材库/主题库选中
.checked_btn {
position: absolute;
@ -502,18 +548,22 @@ img[src=""],img:not([src]){opacity:0;}
background-size: 24px 24px;
cursor: pointer;
}
.item_multi {
border-color: #3a8aeb !important;
.checked_btn {
background: url(~@/assets/images/selected.png) no-repeat;
}
}
// 主题-素材-资源格式样式
.item_format {
display: flex;
position: absolute;
left: 0;
bottom: 38px;
span {
display: block;
width: 47px;
@ -525,12 +575,14 @@ img[src=""],img:not([src]){opacity:0;}
font-size: 12px;
line-height: 18px;
border-radius: 9px;
&.item_time {
width: auto;
padding: 0 5px;
}
}
}
// 主题-素材-文件名样式
.file_name {
height: 32px;
@ -543,47 +595,59 @@ img[src=""],img:not([src]){opacity:0;}
-webkit-line-clamp: 1;
overflow: hidden;
text-overflow: ellipsis;
-moz-user-select: none; /*火狐*/
-webkit-user-select: none; /*webkit浏览器*/
-ms-user-select: none; /*IE10*/
-khtml-user-select: none; /*早期浏览器*/
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
// 首页-主题库-按钮
.home_publish_btn {
position: absolute;
top: 14px;
right: 26px;
z-index: 999;
.el-button {
padding: 8px 20px;
margin-left: 20px;
font-size: 14px;
color: #fff;
border: none;
&.el_button_red {
background: linear-gradient(to right, #fc8c6f, #fa544e);
}
&.el_button_green {
background: linear-gradient(to right, #43c7b8, #3dd3ae);
}
}
}
// 素材-主题库-list-上传历史/多选btn
.material_btn {
position: absolute;
right: 24px;
top: 13px;
.el-button {
padding: 0 20px;
height: 28px;
border-color: #3a8aeb;
&:last-child {
padding: 0 25px;
color: #3a8aeb;
}
}
}
// 素材-主题库-list- 多选之后操作
.multi_handle {
display: flex;
@ -595,6 +659,7 @@ img[src=""],img:not([src]){opacity:0;}
background: rgba(0, 0, 0, 0.5);
border-radius: 4px;
transform: translateX(-40%);
.mulit_btn {
padding: 0 24px;
height: 34px;
@ -604,19 +669,23 @@ img[src=""],img:not([src]){opacity:0;}
margin: 0 24px;
background-color: #fff;
}
.mulit_delt_btn {
background-color: #ec414d;
color: #fff;
}
}
// 移动至 - 文件夹弹框
.wjj_layer {
::v-deep .el-dialog__body {
padding: 30px 24px;
}
.wjj_list {
display: flex;
flex-wrap: wrap;
.wjj_item {
display: flex;
flex-wrap: wrap;
@ -625,14 +694,17 @@ img[src=""],img:not([src]){opacity:0;}
width: 96px;
height: 104px;
cursor: pointer;
&.wjj_item_active {
background: #e8f3ff;
border: 1px solid #428fec;
}
.font-icon {
width: 64px;
height: 55px;
}
.wjj_name {
width: 100%;
font-size: 14px;
@ -643,18 +715,17 @@ img[src=""],img:not([src]){opacity:0;}
}
}
}
.img_box{
.img_box {
background: url(~@/assets/images/menu_bg_02.png) no-repeat #fff;
background-size: cover;
}
// end
.el-table .el-button--danger.is-disabled,
.el-button--danger.is-disabled:active,
.el-button--danger.is-disabled:focus,
.el-table .el-button--danger.is-disabled,
.el-button--danger.is-disabled:active,
.el-button--danger.is-disabled:focus,
.el-button--danger.is-disabled:hover {
color: #fff;
background-color: #ffa4a4 !important;
border-color: #ffa4a4 !important;
}
}

2
src/assets/styles/sidebar.scss

@ -16,7 +16,7 @@
transition: width 0.28s;
width: $sideBarWidth !important;
background-color: $menuBg;
background: url(../images/menu_bg_02.png) no-repeat left bottom #fff;
background: url(~@/assets/images/menu_bg_02.png) no-repeat left bottom #fff;
height: 100%;
position: fixed;
font-size: 0;

24
src/router/routers.js

@ -57,22 +57,18 @@ export const constantRouterMap = [
noCache: true
}
}]
},
{
path: '/release',
component: Layout,
children: [
{
path: '/release',
component: () => import('@/views/immediateRelease/index')
}
]
}
// {
// path: '/user',
// component: Layout,
// hidden: true,
// redirect: 'noredirect',
// children: [
// {
// path: 'menu1',
// component: (resolve) => require(['@/views/user/menu1'], resolve),
// name: '',
// meta: { title: '' }
// }
// ]
// },
// {
// path: '/system',
// component: Layout,
// meta: {

7
src/views/components/MyAlbum.vue

@ -3,7 +3,7 @@
<!-- 我的画册-创建文件夹btn -->
<div v-if="isToFolder" class="material_crumbs">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item><a href="/theme">主题库</a></el-breadcrumb-item>
<el-breadcrumb-item><a href="/content/topic">主题库</a></el-breadcrumb-item>
<el-breadcrumb-item><a @click="breadcrumbToAlbum">我的画册</a></el-breadcrumb-item>
<el-breadcrumb-item>{{ currentFolder }}</el-breadcrumb-item>
</el-breadcrumb>
@ -81,7 +81,6 @@
<!-- 移动至layer -->
<div class="wjj_layer">
<!-- width="736px" -->
<el-dialog title="移动至" :close-on-click-modal="false" :show-close="false" :visible.sync="movingVisible" width="576px" height="384px">
<div class="wjj_list">
<div v-for="(item, index) in folderList" :key="index" :class="['wjj_item', { 'wjj_item_active': folderListChecked == index }]" @click="wjjSelected(item,index)">
@ -175,7 +174,7 @@ export default {
this.selectContVisible = true
},
breadcrumbToAlbum() {
this.$router.push('/theme')
this.$router.push('/content/topic')
this.getMyAlbum()
},
// list
@ -278,7 +277,7 @@ export default {
floderDbClick(item, index) {
this.$router.replace(
{
path: '/theme', query: { folderTag: 1 }
path: '/content/topic', query: { folderTag: 1 }
}
)
this.currentFolder = item.name

6
src/views/components/ThemeGalleryList.vue

@ -16,11 +16,9 @@
<div style="display:flex">
<!-- 主题库list -->
<div v-for="(item, index) in themeGalleryList" :key="index" :class="['theme_item', {'set_radio': !item.img_path && item.material_type == 2}, { 'item_multi': selectedListId.includes(item.material_id) }]">
<!-- :onerror="defaultImg" -->
<div class="img_box">
<img v-if="item.img_path || item.material_type == 1" :src="item.img_path" alt />
</div>
<!-- <div v-if="!item.img_path && item.material_type == 1 " class="error_img"></div> -->
<div v-if="!item.img_path && item.material_type == 2" class="radio_img"></div>
<div v-if="showItemInfo" class="item_format">
<span class="item_type">{{ item.deposit_url | getFileFormat }}</span>
@ -49,7 +47,6 @@
import { FetchThemeClassList, FetchThemeGallery, FetchAddToMyAlbum } from '@/api/theme/theme.js'
import { getSeconds, getFileFormat } from '@/utils/index.js'
// import MyAlbum from './MyAlbum'
// import List from './list2'
export default {
name: 'ThemeGalleryList',
components: { },
@ -153,7 +150,6 @@ export default {
this.themeItemActive = tab.index
if (this.themeItemActive == 2) {
this.selectedListId = []
this.$router.push('/theme')
this.$emit('pf')
// this.$root.bus.$emit('getMyAlbum')
// this.$nextTick(function() {
@ -286,7 +282,7 @@ export default {
display: block;
width: 140px;
height: 250px;
background: url("../../assets/images/menu_bg_02.png") no-repeat left top;
background: url("~@/assets/images/menu_bg_02.png") no-repeat left top;
background-size: cover;
}
}

392
src/views/components/materialFolder.vue

@ -1,392 +0,0 @@
<template>
<div v-if="themeItemActive==2" style="display:flex; flex-wrap: wrap">
<!-- 我的画册-创建文件夹btn -->
<div v-if="!isToFolder" class="theme_mkdir cont_upload" @click="handleMkdir(0)">
<svg class="font-icon icon" aria-hidden="true">
<use xlink:href="#icon-a-xinzeng" />
</svg>
<el-button class="mkdir_btn" round type="primary">创建文件夹</el-button>
</div>
<div v-else class="theme_mkdir cont_upload">
<el-button class="cont_upload_btn" round type="primary">添加</el-button>
<el-button class="return_btn" round type="primary" @click="breadcrumbToAlbum">返回</el-button>
</div>
<!-- 我的画册-某一文件夹 -->
<div v-for="(item,index) in childMaterialFolders" :key="item.id" :class="[,'theme_mkdir', 'folder', { 'item_multi': folderChecked == index }]" @click.stop="editFolder(item,index)" @dblclick="floderDbClick(item,index)">
<div class="icon_bg">
<svg v-if="!item.imgPath" class="font-icon icon" aria-hidden="true">
<use xlink:href="#icon-wenjianjia" />
</svg>
<img v-else :src="item.imgPath" />
</div>
<p class="file_name">{{ item.name }}</p>
<span v-if="folderChecked == index" class="checked_btn"></span>
</div>
<!-- 创建文件夹layer / 编辑 -->
<div class="publish_layer">
<el-dialog title="创建文件夹" :close-on-click-modal="false" :show-close="false" :visible.sync="mkdirVisible" width="616px" height="384px">
<el-form ref="folderForm" :inline="true" :model="folderForm" size="small" label-width="100px">
<el-form-item
label="文件夹名称"
prop="name"
:rules="[
{ required: true, message: '请输入名称', trigger: 'blur' }
]"
>
<el-input v-model="folderForm.name" style="width: 336px" />
</el-form-item>
<el-form-item label="封面" prop="file">
<UploadCover ref="childUpload" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" round @click="submitFolderForm('folderForm')"> </el-button>
<el-button round @click="mkdirVisible=false"> </el-button>
</div>
</el-dialog>
</div>
<!-- 移动至layer -->
<div class="wjj_layer">
<!-- width="736px" -->
<el-dialog title="移动至" :close-on-click-modal="false" :show-close="false" :visible.sync="movingVisible" width="576px" height="384px">
<div class="wjj_list">
<div v-for="(item, index) in folderList" :key="index" :class="['wjj_item', { 'wjj_item_active': folderListChecked == index }]" @click="wjjSelected(item,index)">
<svg class="font-icon icon" aria-hidden="true">
<use xlink:href="#icon-wenjianjia" />
</svg>
<p class="wjj_name">{{ item.name }}</p>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" round @click="moveFile">确定</el-button>
<el-button round @click="movingVisible=false">取消</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import { FetchSaveThemeFolder, FetchDeleteThemeFolder, FetchMoveMyThemeMaterial } from '@/api/theme/theme.js'
import UploadCover from './upload_cover'
export default {
name: 'MaterialFolder',
components: { UploadCover },
props: {
themeItemActive: {
type: String,
required: true
},
materialFolders: {
type: Array,
required: true
},
isToFolder: {
type: Boolean,
required: true
},
thisFoldId: {
type: String,
required: true
},
selectedListId: {
type: Array,
required: true
},
selectInFolderid: {
type: Array,
required: true
}
},
data() {
return {
orga_id: '133221333123111', // ID
movingVisible: false,
folderForm: { // form
fid: '',
id: '',
img_path: '',
name: '',
orga_id: ''
},
childMaterialFolders: [], // list
rootFolderId: null,
isEditFolder: false, //
mkdirVisible: false, // layer
folderChecked: -1, //
isEditMaterial: false, //
folderList: [], // list
folderListChecked: -1,
currentFolder: '', //
currentFolderId: null
}
},
computed: {
defaultImg() {
return 'this.src="' + require('@/assets/images/menu_bg_02.png') + '"'
}
},
watch: {
materialFolders(newName, oldName) {
this.childMaterialFolders = newName
},
thisFoldId(newName, oldName) {
this.thisChildFoldId = newName
},
selectedListId(newName, oldName) {
this.ChildSelectedListId = newName
},
selectInFolderid(newName, oldName) {
this.ChildSelectInFolderid = newName
}
},
mounted() {
console.log('444444444444')
console.log(this.childMaterialFolders)
console.log('555')
// this.$emit('getMyAlbum')
document.addEventListener('click', this.hiddenFolderActiveClick)
},
methods: {
breadcrumbToAlbum() {
this.$router.push('/theme')
this.$emit('getMyAlbum')
},
// /
handleMkdir(mkdirType) {
this.mkdirVisible = true
this.folderForm.fid = this.thisChildFoldId
this.folderForm.orga_id = this.orga_id
if (mkdirType === 0) {
this.$nextTick(() => {
this.$refs.childUpload.imageUrl = ''
this.folderForm.img_path = ''
this.folderForm.name = ''
})
delete this.folderForm.id
} else {
this.$nextTick(() => {
this.$refs.childUpload.imageUrl = this.folderForm.img_path
})
}
},
//
floderDbClick(item, index) {
this.isEditMaterial = false
this.$router.replace(
{
path: '/theme', query: { folderTag: 1 }
}
)
this.currentFolder = item.name
this.currentFolderId = item.id
localStorage.setItem('currentFolder', this.currentFolder)
localStorage.setItem('currentFolderId', this.currentFolderId)
this.$emit('getMyAlbum')
this.ChildSelectedListId = []
this.folderChecked = -1
this.isEditFolder = false
},
//
hiddenFolderActiveClick() {
this.folderChecked = -1
this.isEditFolder = false
},
//
editFolder(item, index) {
this.isEditMaterial = false
this.ChildSelectedListId = []
this.ChildSelectInFolderid = []
//
this.$emit('changedMultiSelected')
if (index != this.folderChecked) {
this.folderChecked = index
this.isEditFolder = true
this.folderForm = {
fid: item.fid,
id: item.id,
name: item.name,
img_path: item.imgPath,
orga_id: item.orgaId
}
} else {
this.folderChecked = -1
this.isEditFolder = false
}
},
//
deleteMaterialFolder() {
console.log(this.folderForm.id)
this.$confirm('此操作将永久删除该文件夹, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const ids = []
ids.push(this.folderForm.id)
const params = {
ids: ids
}
FetchDeleteThemeFolder(params).then(res => {
if (res.code === 200) {
this.$message({
message: '删除文件夹成功',
type: 'success'
})
// this.getMyAlbum()
this.$emit('getMyAlbum')
this.folderChecked = -1
this.isEditFolder = false
}
})
}).catch(() => {
this.$message({
message: '已取消删除',
type: 'info'
})
})
},
// - /
submitFolderForm(formName) {
this.folderForm.img_path = this.$refs.childUpload.imageUrl
console.log(this.folderForm)
this.$refs[formName].validate((valid) => {
if (valid) {
FetchSaveThemeFolder(this.folderForm).then(res => {
if (res.code === 200) {
this.$message({
message: '创建文件夹成功',
duration: 2000,
type: 'success'
})
this.mkdirVisible = false
// this.getMyAlbum()
this.$emit('getMyAlbum')
} else {
this.$message({
message: '创建文件夹失败',
duration: 2000,
type: 'warning'
})
}
})
} else {
console.log('error submit!!')
return false
}
})
},
// -btn
moveingTo(index) {
this.folderList = []
if (this.childMaterialFolders.length > 0) {
this.folderList = this.childMaterialFolders.slice(0, this.materialFolders.length)
}
this.rootFolderId = localStorage.getItem('rootFolderId')
const returnFolder = {
id: this.rootFolderId,
name: '返回上一级'
}
this.folderList.unshift(returnFolder)
this.movingVisible = true
},
// list -
wjjSelected(item, index) {
this.folderListChecked = index
this.thisChildFoldId = item.id
},
// -
moveFile() {
if (this.childMaterialFolders.length > 0) {
if (this.thisChildFoldId == this.rootFolderId) {
this.$message({
message: '不能讲文件移动到自身目录下哦~',
type: 'error'
})
return
}
} else {
this.thisChildFoldId = this.rootFolderId
}
const params = {
'folder_id': this.thisChildFoldId,
'ids': this.ChildSelectInFolderid,
'material_ids': this.ChildSelectedListId
}
FetchMoveMyThemeMaterial(params).then(res => {
if (res.code === 200) {
this.$message({
message: '移动成功',
type: 'success'
})
this.movingVisible = false
// this.getMyAlbum()
this.$emit('getMyAlbum')
this.ChildSelectedListId = []
}
})
}
}
}
</script>
<style lang="scss" scoped>
.el-tabs {
margin-bottom: 0;
}
::v-deep .el-tabs__item.is-active {
color: #3a8aeb;
}
.theme_mkdir {
position: relative;
width: 140px;
height: 250px;
margin: 0 24px 24px 0;
&.cont_upload .font-icon {
width: 45px;
height: 45px;
margin-bottom: 20px;
}
&.folder .font-icon {
width: 84px;
height: 69px;
}
.icon_bg{
img{
display: block;
width: 140px;
height: 250px;
object-fit: cover;
}
}
}
.theme_item {
width: 140px;
height: 250px;
}
.icon_bg {
height: 220px;
}
.theme_item {
.file_name {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 30px;
background: rgba(255, 255, 255, 0.6);
line-height: 30px;
}
}
.material_crumbs {
padding: 15px 24px 0 24px;
line-height: 30px;
background: #fff;
::v-deep .el-breadcrumb {
font-size: 12px;
color: #999999;
}
}
</style>

56
src/views/components/upload.vue

@ -8,11 +8,9 @@
<input v-if="!isTheme" id="upFile" type="file" name="upFile" @change="changeFile($event)" />
<!-- <input type="button" name="开始上传" value="开始上传" class="start_upload" @click="uploadFile()" /> -->
<!-- <img v-if="coverUrl" :src="coverUrl" alt="封面" /> -->
<!-- <el-progress v-if="filePercent" :percentage="filePercent" /> -->
<!-- {{ filePercent }} -->
<!-- 上传列表layer -->
<div v-if="!isTheme" class="upload_layer">
<!-- width="736px" -->
<el-dialog
title="上传列表"
:close-on-click-modal="false"
@ -55,9 +53,9 @@
</el-table-column>
</el-table>
<div class="upload_list_right">
<div>
<el-button class="cont_upload_btn" round type="primary">点击上传</el-button>
<input id="upFile" ref="inputfile" type="file" name="upFile" @change="changeFile($event)" />
<div class="upload_list_btn">
<el-button>点击上传</el-button>
<input id="upLoadFile" ref="inputfile" type="file" name="upFile" @change="changeFile($event)" />
</div>
<div class="upload_return" @click="uploadListVisible=false">返回</div>
</div>
@ -66,10 +64,9 @@
</div>
</template>
<script>
// import axios from 'axios'
import * as qiniu from 'qiniu-js'
import { getQiniuToken, FectchUploadTokenAndOps } from '@/api/upload/upload'
var observable
// var observable
export default {
name: 'Qiniu',
@ -108,7 +105,6 @@ export default {
//
this.file = e.target.files[0]
console.log(this.file)
console.log(this.isActiveType)
if (this.isActiveType == 0) {
this.$message.error('请上传图片文件!')
return
@ -141,7 +137,6 @@ export default {
this.$message.error('图片大小不能超过 4MB !')
}
}
// this.uploadListVisible = true
this.fileData.push({
fileNames: this.fileNames,
formatType: this.formatType,
@ -151,6 +146,7 @@ export default {
setTimeout(() => {
this.uploadFile()
}, 1000)
console.log(this.fileData)
// this.getOpsToken()
this.uploadListVisible = true
},
@ -182,7 +178,7 @@ export default {
retryCount: 3
}
const token = this.token
observable = qiniu.upload(
const observable = qiniu.upload(
this.file,
name,
token,
@ -192,9 +188,6 @@ export default {
_this.percentage = 10
})
},
// format(percentage) {
// return percentage === 100 ? '100%' : `${percentage}%`
// },
getVideoDuration(fileUrl) {
const _this = this
const audioElement = new Audio(fileUrl)
@ -226,10 +219,14 @@ export default {
next(res) {
//
_this.filePercent = parseInt(res.total.percent)
_this.filePercentTxt = '上传中'
if (_this.filePercent == 100) {
_this.filePercentTxt = '上传成功'
}
// _this.filePercentTxt = ''
// if (_this.filePercent == 100) {
// _this.filePercentTxt = ''
// }
_this.fileData.forEach(item => {
console.log(item)
item.filePercent = parseInt(res.total.percent)
})
_this.$set(_this.fileData, 0, _this.fileData[0])
},
//
@ -248,6 +245,7 @@ export default {
_this.$emit('saveMaterial')
}, 200)
document.getElementById('upFile').value = ''
document.getElementById('upLoadFile').value = ''
}
}
//
@ -264,7 +262,8 @@ export default {
position: relative;
// width: 100%;
}
#upFile{
#upFile,
#upLoadFile{
display: block;
width: 114px;
height: 34px;
@ -278,5 +277,24 @@ export default {
left: 0;
top: 0;
}
.upload_list_btn{
position: relative;
::v-deep .el-button {
position: absolute;
left: 0;
top: 0;
width: auto;
height: auto;
margin: 0;
padding: 0;
font-size: 14px;
font-weight: bold;
color: #3a8aeb;
}
#upLoadFile{
width: 60px;
}
}
</style>

25
src/views/content/material/materialList/index.vue

@ -2,7 +2,7 @@
<div>
<div v-if="isToFolder" class="material_crumbs">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item><a href="/content">素材库</a></el-breadcrumb-item>
<el-breadcrumb-item><a href="/content/material">素材库</a></el-breadcrumb-item>
<el-breadcrumb-item>{{ currentFolder }}</el-breadcrumb-item>
</el-breadcrumb>
</div>
@ -11,7 +11,7 @@
<div class="material_item cont_upload">
<Upload ref="uploadMaterial" :is-theme="isTheme" @saveMaterial="saveMaterial" />
<el-button v-if="!isToFolder && tabType == null" class="mkdir_btn" round type="primary" @click="handleMkdir(0)">创建文件夹</el-button>
<el-button v-if="isToFolder" class="return_btn" round type="primary"><a href="/content">返回</a></el-button>
<el-button v-if="isToFolder" class="return_btn" round type="primary"><a href="/content/material">返回</a></el-button>
</div>
<!-- 文件夹list -->
<div v-for="(item,index) in materialFolders" :key="item.id" :class="['material_item', 'folder', { 'item_multi': folderChecked == index }]" @click.stop="editFolder(item,index)" @dblclick="floderDbClick(item,index)">
@ -46,7 +46,7 @@
:visible.sync="previewVisible"
:show-close="false"
>
<img v-if="previewType==0" :src="previewSrc" :onerror="defaultImg" fit="contain" />
<el-image v-if="previewType==0" :src="previewSrc" :onerror="defaultImg" fit="contain" />
<video v-if="previewType==1" :src="previewSrc" controls width="100%"></video>
<audio v-if="previewType==2" :src="previewSrc" controls></audio>
</el-dialog>
@ -115,8 +115,8 @@
<script>
import { getMaterialList, saveMaterialFolder, deleteMaterialFolder, saveMaterial, deleteMyMaterial, moveMyMaterial } from '@/api/material/material'
import Upload from '../../../components/upload'
import UploadCover from '../../../components/upload_cover'
import Upload from '@/views/components/upload'
import UploadCover from '@/views/components/upload_cover'
import { getSeconds, getFileFormat } from '@/utils/index.js'
export default {
name: 'Material',
@ -141,7 +141,6 @@ export default {
},
data() {
return {
isTheme: false,
orga_id: '133221333123111', // ID
rootFolderId: null, // ID
@ -317,7 +316,7 @@ export default {
this.isEditMaterial = false
this.$router.replace(
{
path: '/content', query: { folderTag: 1 }
path: '/content/material', query: { folderTag: 1 }
}
)
this.currentFolder = item.name
@ -573,7 +572,7 @@ export default {
})
},
UploadList() {
this.uploadListVisible = true
this.$refs.uploadMaterial.uploadListVisible = true
},
// -btn
moveingTo(index) {
@ -638,16 +637,6 @@ export default {
}
}, 100)
})
},
//
end() {
this.loading_txt = '继续'
// const that = this
// that.percentage = 100
clearInterval(this.timeStart)
// setTimeout(() => {
// that.progressLoading = false
// }, 300)
}
}
}

1
src/views/content/publish/historyList/index.vue

@ -64,7 +64,6 @@ export default {
return parseTime(time, cFormat)
}
},
data() {
return {
orga_id: '133221333123111',

17
src/views/content/publish/urgentMessage/index.vue

@ -2,10 +2,8 @@
<div class="list_warp">
<el-row :gutter="15">
<el-col>
<!-- v-loading="crud.loading" -->
<el-table ref="table" :data="urgentMessage" :header-cell-style="{ background: '#3a8aeb', color: '#fff' }" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" />
<!-- prop="name" -->
<el-table-column label="序号" type="index" align="center" width="50" />
<el-table-column label="发布内容" align="center" prop="context" width="400">
<template slot-scope="{ row }">
@ -17,7 +15,6 @@
<div>{{ row.create_time | parseTime }}</div>
</template>
</el-table-column>
<el-table-column label="发布人" align="center" prop="creater_name" />
<el-table-column label="状态" align="center" prop="is_state">
<template slot-scope="{ row }">
@ -122,8 +119,6 @@
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<!-- :loading="crud.status.cu === 2"
@click="crud.submitCU"-->
<el-button type="primary" round @click="submit">保存</el-button>
<el-button round @click="closeDialog">关闭</el-button>
</div>
@ -143,12 +138,7 @@
<script>
import { parseTime } from '@/utils/index.js'
import { ReqDeviceList } from '@/api/device/deviceList.js'
import {
reqUrgentMessage,
reqQueryMessage,
reqEditMessage,
reqChangeMessage
} from '@/api/publish/urgentMessage'
import { reqUrgentMessage, reqQueryMessage, reqEditMessage, reqChangeMessage } from '@/api/publish/urgentMessage'
export default {
name: 'UrgentMessage',
filters: {
@ -368,11 +358,6 @@ export default {
//
handleSelectionChange(val) {
this.selectedList = val
// if (val.length > 0) {
// this.clearBtnDisabled = false;
// } else {
// this.clearBtnDisabled = true;
// }
},
//
headleChangeColor() {

9
src/views/content/theme/index.vue

@ -95,7 +95,6 @@
<img v-if="formatType==0" :src="uploadForm.deposit_url" alt="" width="150" />
<video v-if="formatType==1" :src="uploadForm.deposit_url" controls width="200"></video>
<audio v-if="formatType==2" :src="uploadForm.deposit_url" controls></audio>
<!-- <p>文件名{{ fileNames }}</p> -->
</div>
<Upload ref="uploadMaterial" :is-theme="isTheme" @saveMaterial="saveMaterial" />
</el-form-item>
@ -167,10 +166,10 @@
<script>
import { FetchAddOrEdit, FetchThemeHistoryList, FetchUpdateThemeState, FetchFindThemeClassDetails } from '@/api/theme/theme.js'
import { saveMaterial } from '@/api/material/material'
import ThemeGalleryList from '../../components/ThemeGalleryList'
import MyAlbum from '../../components/MyAlbum'
import Upload from '../../components/upload'
import UploadCover from '../../components/upload_cover'
import ThemeGalleryList from '@/views/components/ThemeGalleryList'
import MyAlbum from '@/views/components/MyAlbum'
import Upload from '@/views/components/upload'
import UploadCover from '@/views/components/upload_cover'
import { parseTime } from '@/utils/index.js'
export default {
name: 'ThemeGallery',

2
src/views/dashboard/AgencyData.vue

@ -54,7 +54,7 @@ export default {
</script>
<style lang="scss" scoped>
.home_item {
// width: 448px;
// width: 448px;
.icon1 {
width: 17px;
height: 17px;

4
src/views/dashboard/DeviceData.vue

@ -50,8 +50,8 @@ export default {
</script>
<style lang="scss" scoped>
.home_item {
// width: 536px;
// margin: 0 24px;
// width: 536px;
// margin: 0 24px;
.icon1 {
width: 16px;
height: 13px;

3
src/views/dashboard/HomeThemeGallery.vue

@ -6,7 +6,6 @@
<el-button round type="primary" @click="publishHandle(1)">定时发布</el-button>
<el-button round class="publish_muilt_btn" @click="multiSelectBtn">{{ mulitText }}</el-button>
</div>
<!-- tab-btn -->
<!-- 主题库list -->
<ThemeGalleryList
@ -20,7 +19,7 @@
</template>
<script>
import ThemeGalleryList from '../components/ThemeGalleryList.vue'
import ThemeGalleryList from '@/views/components/ThemeGalleryList.vue'
export default {
name: 'ThemeGallery',
components: { ThemeGalleryList },

2
src/views/dashboard/PublishProcess.vue

@ -49,7 +49,7 @@ export default {
</script>
<style lang="scss" scoped>
.home_item {
// width: 576px;
// width: 576px;
.icon1 {
width: 15px;
height: 16px;

7
src/views/device/config/index.vue

@ -176,7 +176,6 @@
</div>
<div class="setting_item">
<h4>启动画面</h4>
<!-- action="https://jsonplaceholder.typicode.com/posts/" -->
<div class="setting_cont upload_img">
<el-form-item prop="startup_screen">
<UploadCover ref="childUpload" />
@ -194,7 +193,7 @@
</template>
<script>
import UploadCover from '../../components/upload_cover.vue'
import UploadCover from '@/views/components/upload_cover.vue'
import { reqStartUpList, reqEditStartUp, reqClearStartUp } from '@/api/device/startUpList.js'
import { parseTime } from '@/utils/index.js'
export default {
@ -347,7 +346,6 @@ export default {
},
//
selectDirection(selVal) {
console.log(selVal)
this.form.device_direction = selVal.key
this.form.device_direction_name = selVal.name
},
@ -378,7 +376,6 @@ export default {
device_direction: this.form.device_direction,
startup_screen: this.form.startup_screen
}
console.log(params)
reqEditStartUp(params).then(res => {
if (res.code == 200) {
this.$message({
@ -411,7 +408,6 @@ export default {
rows.forEach(item => {
ids.push(item.device_id)
})
// console.log(ids)
this.$confirm('确定要清空选中的配置周期和启动画面吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@ -421,7 +417,6 @@ export default {
ids
}
reqClearStartUp(params).then(res => {
console.log(res)
if (res.code == 200) {
this.$message({
message: '清空成功',

2
src/views/device/list/index.vue

@ -157,7 +157,6 @@ export default {
size: 10
},
total: 0,
// device_id:'',
dialogTitle: '',
//
addFromVisible: false,
@ -193,7 +192,6 @@ export default {
methods: {
//
getDevice() {
// this.queryInfo.page = pager
const params = this.queryInfo
ReqDeviceList(params).then(res => {
if (res.code == 200) {

3
src/views/forgetPassword/index.vue

@ -70,9 +70,7 @@
<script>
import { encrypt } from '@/utils/rsaEncrypt'
import { isvalidPhone } from '@/utils/validate'
// import { getMsg } from '@/api/login'
import { FetchCodeMsg } from '@/api/login'
import Background from '@/assets/images/background.jpg'
export default {
name: 'ForgetPassword',
data() {
@ -105,7 +103,6 @@ export default {
}
}
return {
Background: Background,
disabledSendCode: false,
verification: '获取验证码',
countNum: 60,

13
src/views/immediateRelease/index.vue

@ -52,9 +52,6 @@
<el-checkbox v-for="item in weeklyList" :key="item.id" :label="item.id" :value="item.id" name="type">{{ item.name }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<!-- :rules="[
{ required: true, message: '请选择是否置顶', trigger: 'change' }
]" -->
<el-form-item label="是否置顶" prop="is_topping" label-width="100px">
<el-checkbox v-model="form.is_topping">置顶</el-checkbox>
</el-form-item>
@ -178,7 +175,6 @@
<span>{{ item.deposit_url | getFileFormat }}</span>
<span>{{ item.file_size | formatBytes }}</span>
</div>
<!-- <div v-if="item.material_type == 0" class="edit_cont_set"> -->
<el-form v-if="item.material_type == 0" :ref="setMaterialForm" :model="setMaterialForm.form" class="edit_cont_set" size="small">
<div class="set_time">
<span>展示时长</span>
@ -235,9 +231,6 @@
</div>
</div>
</div>
<!-- <div class="upload_list_right">
<div class="mulit_btn" @click="multiSelectBtn('audio')">{{ mulitText }}</div>
</div> -->
<div slot="footer" class="dialog-footer">
<el-button type="primary" round @click="audioCheckedSubmit"> </el-button>
<el-button round @click="cancelContSelect('audio')"> </el-button>
@ -257,8 +250,8 @@
<script>
import draggable from 'vuedraggable'
import ThemeGalleryList from '../components/ThemeGalleryList.vue'
import MaterialList from '../components/MaterialCompontentList.vue'
import ThemeGalleryList from '@/views/components/ThemeGalleryList.vue'
import MaterialList from '@/views/components/MaterialCompontentList.vue'
import { getMaterialByType, FetchFindMaterialById } from '@/api/material/material'
import { ReqDeviceList } from '@/api/device/deviceList.js'
import { FetchSaveRelease, FetchGetReleaseDetailsById } from '@/api/release/release.js'
@ -648,7 +641,7 @@ export default {
this.$message.success('发布成功!')
localStorage.removeItem('selectedMaterial')
localStorage.removeItem('releaseId')
this.$router.push({ path: '/publish' })
this.$router.push({ path: '/content/display' })
} else {
this.$message.error(res.msg)
}

2
src/views/login.vue

@ -67,7 +67,6 @@ import { isvalidPhone } from '@/utils/validate'
import Config from '@/settings'
import { getCodeImg } from '@/api/login'
import Cookies from 'js-cookie'
import Background from '@/assets/images/background.jpg'
export default {
name: 'Login',
data() {
@ -83,7 +82,6 @@ export default {
}
// 15902734788
return {
Background: Background,
codeUrl: '',
cookiePass: '',
loginForm: {

36
src/views/nested/menu1/menu1-1/index.vue

@ -1,36 +0,0 @@
<template>
<div class="app-container">
<el-alert :closable="false" title="三级菜单1" type="success" />
<el-form label-width="170px" style="margin-top: 20px">
<el-form-item label="三级菜单缓存功能测试区">
<el-input v-model="input" placeholder="请输入内容" style="width: 360px;" />
</el-form-item>
</el-form>
<div>
<blockquote class="my-blockquote"> 三级菜单缓存配置</blockquote>
<pre class="my-code">
1将前后端代码更新为最新版版本或对照提交记录修改,点击查看-> <a href="https://www.aiyxlib.com/XXXX" target="_blank">提交(1)</a><a href="https://www.aiyxlib.com" target="_blank">提交(2)</a><a href="https://www.aiyxlib.com" target="_blank">提交(3)</a>
2 二级菜单 菜单类型 设置为 目录 级别并且原有的 组件路径 需要清空
3 三级菜单 菜单缓存 设置为 最后将 组件名称 填写正确
4具体设置可参考 菜单管理 多级菜单 配置进行进行相应的修改
</pre>
<blockquote class="my-blockquote">更多帮助请联系管理员</blockquote>
<pre class="my-code">联系QQ421691338</pre>
</div>
</div>
</template>
<script>
export default {
name: 'Test',
data() {
return {
input: ''
}
}
}
</script>
<style scoped>
.my-code a{
color:#009688;
}
</style>

5
src/views/nested/menu1/menu1-2/index.vue

@ -1,5 +0,0 @@
<template>
<div style="padding:30px;">
<el-alert :closable="false" title="三级菜单2" type="success" />
</div>
</template>

5
src/views/nested/menu2/index.vue

@ -1,5 +0,0 @@
<template>
<div style="padding:30px;">
<el-alert :closable="false" title="二级菜单" />
</div>
</template>

2
src/views/system/user/index.vue

@ -162,7 +162,6 @@
<div>{{ row.createTime | parseTime }}</div>
</template>
</el-table-column>
<!-- v-if="checkPer(['admin','user:edit','user:del'])" -->
<el-table-column label="操作" width="120" align="center" fixed="right">
<template slot-scope="scope">
<el-button
@ -303,7 +302,6 @@ export default {
if (res.code == 200) {
this.userList = res.data.content
this.total = res.data.totalElements
// this.size = res.data.size
} else {
return this.$message.error('获取用户列表数据失败!')
}

Loading…
Cancel
Save