提交 6bded6bf 编写于 作者: X xinlaa

素材接口调试与页面布局,添加全局配置token,修改全局配置变量,等

上级 6e37a70e
import request from '@/utils/request'
const service = config.services.wecom + '/user'
const service = window.CONFIG.services.wecom + '/user'
/**
* 获取离职已分配员工列表
......@@ -15,7 +15,7 @@ userName:
export function getList(params) {
return request({
url: service + '/leaveUserAllocateList',
params
params,
})
}
......@@ -33,7 +33,7 @@ userName:
export function getListNo(params) {
return request({
url: service + '/leaveUserNoAllocateList',
params
params,
})
}
......@@ -49,7 +49,7 @@ export function allocate(data) {
return request({
url: service + '/allocateLeaveUserAboutData',
method: 'put',
data
data,
})
}
......@@ -67,6 +67,6 @@ export function allocate(data) {
export function getAllocateCustomers(params) {
return request({
url: service + '/getAllocateCustomers',
params
params,
})
}
import request from '@/utils/request'
const service = config.services.wecom + '/group'
const service = window.CONFIG.services.wecom + '/group'
/**
* 客户群列表
......@@ -15,7 +15,7 @@ export function getList(params) {
return request({
url: service + '/chat/list',
method: 'get',
params
params,
})
}
......@@ -32,11 +32,10 @@ export function getList(params) {
export function getMembers(params) {
return request({
url: service + '/chat/members',
params
params,
})
}
/**
* 客户群同步接口
*/
......
import request from '@/utils/request'
const service = config.services.wecom + '/customer'
const service = window.CONFIG.services.wecom + '/customer'
/**
* 客户列表
......@@ -18,7 +18,7 @@ export function getList(params) {
return request({
url: service + '/list',
method: 'get',
params
params,
})
}
......@@ -47,7 +47,7 @@ export function makeLabel(data) {
return request({
url: service + '/makeLabel',
method: 'post',
data
data,
})
}
......@@ -67,7 +67,7 @@ export function removeLabel(data) {
return request({
url: service + '/removeLabel',
method: 'DELETE',
data
data,
})
}
......@@ -83,7 +83,7 @@ export function updateBirthday(data) {
return request({
url: service,
method: 'PUT',
data
data,
})
}
......@@ -92,6 +92,6 @@ export function exportCustomer(query) {
return request({
url: service + '/export',
method: 'get',
params: query
params: query,
})
}
\ No newline at end of file
}
import request from '@/utils/request'
const service = config.services.wecom + '/group'
const service = window.CONFIG.CONFIG.services.wecom + '/group'
// 客户标签
......@@ -14,7 +14,7 @@ const service = config.services.wecom + '/group'
export function getList(params) {
return request({
url: service + '/list',
params
params,
})
}
......@@ -54,13 +54,13 @@ export function update(data) {
return request({
url: service,
method: 'put',
data
data,
})
}
/**
* 标签批量删除接口
* @param {*} ids
* @param {*} ids
*/
export function remove(ids) {
return request({
......
import request from '@/utils/request'
const service = config.services.wecom + '/user'
const service = window.CONFIG.services.wecom + '/user'
/**
* 获取离职未分配员工列表
......@@ -13,7 +13,7 @@ beginTime:}
export function getList(params) {
return request({
url: service + '/leaveUserNoAllocateList',
params
params,
})
}
......@@ -29,6 +29,6 @@ export function allocate(data) {
return request({
url: service + '/allocateLeaveUserAboutData',
method: 'put',
data
data,
})
}
import request from '@/utils/request'
const service = config.services.wecom + '/tlp'
const service = window.CONFIG.services.wecom + '/tlp'
/**
* 获取欢迎语列表
......@@ -14,13 +14,13 @@ const service = config.services.wecom + '/tlp'
export function getList(params) {
return request({
url: service + '/list',
params
params,
})
}
/**
* 根据欢迎语模板id获取模板使用范围
* @param {*} id
* @param {*} id
*/
export function getScop(id) {
return request({
......@@ -46,7 +46,7 @@ export function edit(data) {
return request({
url: service,
method: 'put',
data
data,
})
}
......@@ -66,13 +66,13 @@ export function add(data) {
return request({
url: service,
method: 'POST',
data
data,
})
}
/**
* 删除欢迎语
* @param {*} ids
* @param {*} ids
*/
export function remove(ids) {
return request({
......
import request from '@/utils/request'
const service = config.services.wecom + '/corp'
const service = window.CONFIG.services.wecom + '/corp'
// 企业id
/**
......@@ -8,13 +8,13 @@ const service = config.services.wecom + '/corp'
export function getList(params) {
return request({
url: service + '/list',
params
params,
})
}
/**
* 获取企业id相关详情
* @param {String} id
* @param {String} id
*/
export function getDetail(id) {
return request({
......@@ -24,7 +24,7 @@ export function getDetail(id) {
/**
* 新增企业id
* @param {Object} data
* @param {Object} data
*/
export function add(data) {
return request({
......@@ -56,17 +56,17 @@ export function update(data) {
return request({
url: service,
method: 'put',
data
data,
})
}
/**
* 启用有效企业微信账号
* @param {*} corpId
* @param {*} corpId
*/
export function start(corpId) {
return request({
url: service + '/startVailWeCorpAccount/' + corpId,
method: 'put',
})
}
\ No newline at end of file
}
import request from '@/utils/request'
const service = config.services.wecom + '/material'
const serviceCategory = config.services.wecom + '/category'
const service = window.CONFIG.services.wecom + '/material'
const serviceCategory = window.CONFIG.services.wecom + '/category'
/**
* 查询素材列表
* @param {*} params
* { categoryId:类目id
search:搜索的值
mediaType: '' 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file), 4 文本
}
*/
export function getList(params) {
......@@ -66,12 +67,12 @@ export function remove(id) {
* @param {*} data
* {
* file:文件
type:0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file), 4 文本
type:0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file)
}
*/
export function upload(data) {
return request({
url: config.services.wecom + '/upload',
url: window.CONFIG.services.wecom + '/upload',
method: 'post',
data,
})
......@@ -88,7 +89,7 @@ export function upload(data) {
export function moveGroup(categoryId, materials) {
return request({
url: service + '/resetCategory',
method: 'post',
method: 'put',
data: {
categoryId,
materials,
......
import request from '@/utils/request'
const service = config.services.wecom + '/department'
const serviceUser = config.services.wecom + '/user'
const service = window.CONFIG.services.wecom + '/department'
const serviceUser = window.CONFIG.services.wecom + '/user'
/**
* 获取所有部门
......@@ -14,7 +14,7 @@ const serviceUser = config.services.wecom + '/user'
export function getTree(params) {
return request({
url: service + '/list',
params
params,
})
}
......@@ -31,7 +31,7 @@ export function updateDepart(data) {
return request({
url: service,
method: 'put',
data
data,
})
}
......@@ -76,13 +76,13 @@ export function removeDepart(ids) {
export function getList(params) {
return request({
url: serviceUser + '/list',
params
params,
})
}
/**
* 根据ID获取通讯录人员详情
* @param {String} id
* @param {String} id
*/
export function getUserDetail(id) {
return request({
......@@ -92,7 +92,7 @@ export function getUserDetail(id) {
/**
* 新增用户
* @param {Object} data
* @param {Object} data
*/
export function addUser(data) {
return request({
......@@ -132,7 +132,7 @@ export function updateUser(data) {
return request({
url: serviceUser,
method: 'put',
data
data,
})
}
......@@ -148,7 +148,7 @@ export function startOrStop(data) {
return request({
url: serviceUser + '/startOrStop',
method: 'put',
data
data,
})
}
......
<script>
import { upload } from '@/api/material'
export default {
components: {},
props: {
fileUrl: {
type: String,
default: '',
},
// 0 图片(image)、1 语音(voice)、2 视频(video),3 普通文件(file)
type: {
type: String,
default: '0',
},
beforeUpload: {
type: Function,
default: () => () => {},
},
},
data() {
return {
action:
process.env.VUE_APP_BASE_API + window.CONFIG.services.wecom + '/upload',
headers: window.CONFIG.headers,
}
},
watch: {},
computed: {
accept() {
return ['image/*', 'audio/*', 'video/*', '*'][this.type]
},
},
created() {
upload()
},
mounted() {},
methods: {
handleBeforeUpload(file) {
if (this.type === '0') {
// 图片
const isFormat = file.type === 'image/jpeg'
const isSize = file.size / 1024 / 1024 < 2
if (!isFormat) {
this.$message.error('上传文件只能是 JPG 格式!')
}
if (!isSize) {
this.$message.error('上传文件大小不能超过 2MB!')
}
return isFormat && isSize
} else if (this.type === '1') {
// 语音
const isFormat = file.type === 'audio/amr'
const isSize = file.size / 1024 / 1024 < 2
if (!isFormat) {
this.$message.error('上传文件只能是 amr 格式!')
}
if (!isSize) {
this.$message.error('上传文件大小不能超过 2MB!')
}
return isFormat && isSize
} else if (this.type === '2') {
// 视频
const isFormat = file.type === 'video/mp4'
const isSize = file.size / 1024 / 1024 < 10
if (!isFormat) {
this.$message.error('上传文件只能是 mp4 格式!')
}
if (!isSize) {
this.$message.error('上传文件大小不能超过 10MB!')
}
return isFormat && isSize
} else if (this.type === '3') {
// 普通文件
const isSize = file.size / 1024 / 1024 < 20
if (!isSize) {
this.$message.error('上传文件大小不能超过 20MB!')
}
return isSize
}
return beforeUpload(file)
},
onSuccess(res, file) {
this.fileUrl = URL.createObjectURL(file.raw)
},
},
}
</script>
<template>
<div>
<el-upload
class="uploader"
:accept="accept"
:action="action"
:headers="headers"
:data="{ type: type }"
:show-file-list="false"
:on-success="onSuccess"
:before-upload="handleBeforeUpload"
>
<img v-if="fileUrl" :src="fileUrl" class="upload-img" />
<i v-else class="el-icon-plus uploader-icon"></i>
</el-upload>
<div class="tip">
<slot name="tip"></slot>
</div>
</div>
</template>
<style lang="scss" scoped>
/deep/.uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
/deep/.uploader .el-upload:hover {
border-color: #409eff;
}
.uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
line-height: 178px;
text-align: center;
}
.upload-img {
width: 178px;
height: 178px;
display: block;
}
.tip {
color: #aaa;
font-size: 12px;
}
</style>
<template>
<section class="tree-container">
<el-row v-if='isfilter' class="search_header">
<el-col :span="20">
<el-input placeholder="输入关键字进行过滤" size="small" v-model="filterText"></el-input>
</el-col>
<el-col :span="4" class="plus">
<i class="el-icon-plus" @click="treeEvent.addParent"></i>
</el-col>
</el-row>
<el-tree
class="filter-tree"
:data="treeData"
:props="treeDefaultProps"
default-expand-all
:filter-node-method="filterNode"
ref="tree">
<!-- style="display:flex;justify-content:space-between;" -->
<span class="custom-tree-node" slot-scope="{ node, data }" >
<span>{{ node.label }}</span>
<el-tooltip placement="bottom" popper-class="atooltip" effect="light">
<i class="el-icon-setting"></i>
<div slot="content" class='tipContent'>
<span>
<el-button type="text" size="mini" >
<i class="el-icon-edit" @click="treeEvent.edit(node,data)"></i>
</el-button>
<el-button type="text" size="mini" >
<i class="el-icon-plus" @click="treeEvent.append(node,data)"></i>
</el-button>
<el-button type="text" size="mini" >
<i class="el-icon-delete" @click="treeEvent.remove(node,data)"></i>
</el-button>
</span>
</div>
</el-tooltip>
</span>
</el-tree>
</section>
</template>
<script>
export default {
props:{
isfilter:{type:Boolean,default:false}, //是否显示过滤
treeEvent:{type:Object,default:()=>{}},//tree组件的所有函数事件
treeData:{type:Array,default:()=>[]}, //tree数据
treeDefaultProps:{type:Object,default:()=>({children:'children',label:'label'}) },//tree的父子节点变量定义
},
data(){
return {
filterText: '',
}
},
watch:{
filterText(val) {
this.$refs.tree.filter(val);
}
},
methods:{
filterNode(value, data) {
if (!value) return true;
return data.label.indexOf(value) !== -1;
}
},
created(){
}
}
</script>
<style scoped lang="scss">
.tree-container{
.search_header{
padding: 10px 0;
/deep/.el-input__inner{
height: 35px;
line-height: 35px;
}
}
}
.plus{
color: #606266;
text-align: center;
font-size: 25px;
height: 35px;
line-height: 35px;
}
.filter-tree{
font-size:20px;
}
/deep/.el-tree-node__content{
position: relative;
}
/deep/ .el-tooltip{
position: absolute;
top: 0;
right: 30px;
}
/deep/.el-tree-node__content{
height: 36px;
line-height:36px;
}
.atooltip {
background: #fff !important;
border: none!important;
}
.tipContent{
width:100%;
height: 100%;
background: #fff !important;
}
</style>
\ No newline at end of file
<!-- 搜索表单 -->
<template>
<div class="ces-search">
<el-dialog :title="title" :visible.sync="dialogFormVisible" :close-on-click-modal="false" :show-close="false" :width="dialogWidth">
<el-form :size="size" inline :model='dialogData' :label-width="dialogLabelWidth" :rules="rules" :ref="dialogRef" style="">
<el-form-item v-for='item in dialogForm' :label="item.label" :key='item.prop' :prop="item.prop" :style="{width:(item.width?item.width:'40%')}">
<!-- 输入框 -->
<el-input v-if="item.type==='Input'" :placeholder='item.placeholder' :type="item.inputType || 'text'" v-model="dialogData[item.prop]" size="mini" :disabled="item.disabled || false"></el-input>
<!-- 输入框 -->
<el-input v-if="item.type==='TextArea'" :placeholder='item.placeholder' type='textarea' :rows="2" v-model="dialogData[item.prop]" size="mini" :disabled="item.disabled || false"></el-input>
<!-- 下拉框 -->
<el-select v-if="item.type==='Select'" :placeholder='item.placeholder' v-model="dialogData[item.prop]" size="mini" @change="item.change(dialogData[item.prop])" :multiple="item.multiple || false" :disabled="item.disabled || false">
<el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group v-if="item.type==='Radio'" v-model="dialogData[item.prop]" :disabled="item.disabled || false">
<el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
</el-radio-group>
<!-- 单选按钮 -->
<el-radio-group v-if="item.type==='RadioButton'" v-model="dialogData[item.prop]" @change="item.change && item.change(dialogData[item.prop])" :disabled="item.disabled || false">
<el-radio-button v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio-button>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group v-if="item.type==='Checkbox'" v-model="dialogData[item.prop]" :disabled="item.disabled || false">
<el-checkbox v-for="ch in item.options" :label="ch.value" :key="ch.value" @change="item.change(dialogData[item.prop])" >{{ch.label}}</el-checkbox>
</el-checkbox-group>
<!-- 日期 -->
<el-date-picker v-if="item.type==='Date'" v-model="dialogData[item.prop]" format="yyyy-MM-dd" value-format="yyyy-MM-dd" :disabled="item.disabled || false"></el-date-picker>
<!-- 时间 -->
<el-time-select v-if="item.type==='Time'" arrow-control value-format='HH:mm' :picker-options="{ start: '05:00', step: '00:05', end: '23:30'}"
v-model="dialogData[item.prop]" :disabled="item.disabled || false"></el-time-select>
<!-- 日期时间 -->
<el-date-picker v-if="item.type==='DateTime'" type='datetime' format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" v-model="dialogData[item.prop]" :disabled="item.disable && item.disable(dialogData[item.prop])"></el-date-picker>
<!-- 滑块 -->
<!-- <el-slider v-if="item.type==='Slider'" v-model="dialogData[item.prop]"></el-slider> -->
<!-- 开关 -->
<el-switch v-if="item.type==='Switch'" v-model="dialogData[item.prop]" :disabled="item.disabled || false"></el-switch>
<!-- 文件 -->
<el-upload v-if="item.type==='UploadFile'"
class="upload-demo"
:action="item.action"
:on-preview="handlePreview"
:on-success="item.onSuccess"
:on-remove="handleRemove"
:before-remove="beforeRemove"
multiple
:limit="1"
:on-exceed="handleExceed"
:file-list="item.fileList">
<el-button size="small" type="primary">点击上传</el-button>
<span v-if="dialogData[item.prop]">{{dialogData[item.prop].slice(dialogData[item.prop].indexOf('/uploads/')+18)|| ''}}</span>
</el-upload>
<!-- 图片展示上传 -->
<el-upload v-if="item.type==='UploadImg'"
class="avatar-uploader"
:action="item.action"
:show-file-list="false"
:on-success="item.onSuccess"
:before-upload="beforeAvatarUpload"
>
<img v-if="dialogData[item.prop]" :src="dialogData[item.prop]" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<el-button v-if="item.type==='Button'" type="text" @click="item.change(dialogData)"> <i :class="item.class">{{item.text}}</i></el-button>
</el-form-item>
<slot name="content"></slot>
<el-form-item class="dialog-footer">
<el-button v-for="btnItem in dialogBtns" :key="btnItem.label"
:type="btnItem.type || 'primary'"
style="border-color:#fff"
:size="btnItem.size || 'medium'"
@click="btnItem.handle(dialogData)">{{btnItem.label}}
</el-button>
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
export default {
props:{
dialogFormVisible:{
type:Boolean,
default:true
},
dialogLabelWidth:{
type:String,
default:'100px'
},
dialogRef:{
type:String,
default:'ruleForm'
},
dialogWidth:{
type:String,
default:'60%'
},
size:{
type:String,
default:'medium'
},
rules:{
type:Object,
default:{}
},
dialogForm:{ //表单框类型数组
type:Array,
default:[]
},
dialogData:{ //表单数据
type:Object,
default:{}
},
title:{ //表单数据
type:String,
default:'操作'
},
dialogBtns:{
type:Array,
default:[]
}
},
data () {
return {
};
},
methods:{
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file,111);
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 1 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }?`);
},
// 图片上传限制
beforeAvatarUpload(file) {
// const isJPG = file.type === 'image/jpeg';
// const isLt2M = file.size / 1024 / 1024 < 2;
// if (!isJPG) {
// this.$message.error('上传头像图片只能是 JPG 格式!');
// }
// if (!isLt2M) {
// this.$message.error('上传头像图片大小不能超过 2MB!');
// }
// return isJPG && isLt2M;
}
}
}
</script>
<style scoped lang='scss'>
.dialog-footer{
padding: 40px 0 0 0;
width: 100%;
text-align: center;
}
/deep/.el-form-item__content{
width:70%!important;
}
/deep/.el-date-editor.el-input, .el-date-editor.el-input__inner{
width: 100%!important;
}
/deep/.el-dialog__header{
// background-color: #2EA39D;
text-align: center;
}
/deep/.el-dialog__title{
color:#000;
// font-weight: 550;
font-size: 22px;
}
/deep/.el-select{
width: 100%!important;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409EFF;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
}
.avatar {
width: 100px;
height: 100px;
display: block;
}
</style>
<template>
<section class="ces-table-page">
<section class="ces-search">
<!-- 搜索内容 -->
<el-form :size="size" inline label-width="80px" ref="form" v-if='isSearch'>
<el-form-item v-for='item in searchForm' :key='item.prop' :prop="item.prop">
<el-input v-if="item.type==='Input'" :disabled="item.disabled || false" v-model="searchData[item.prop]" :placeholder='item.label' size="mini" ></el-input>
<!-- 下拉框 -->
<el-select v-if="item.type==='Select'" :disabled="item.disabled || false" :placeholder='item.label' v-model="searchData[item.prop]" size="mini" @change="item.change(searchData[item.prop])">
<el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group v-if="item.type==='Radio'" v-model="searchData[item.prop]">
<el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
</el-radio-group>
<!-- 单选按钮 -->
<el-radio-group v-if="item.type==='RadioButton'" v-model="searchData[item.prop]" @change="item.change && item.change(searchData[item.prop])">
<el-radio-button v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio-button>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group v-if="item.type==='Checkbox'" v-model="searchData[item.prop]" >
<el-checkbox v-for="ch in item.checkboxs" :label="ch.value" :key="ch.value">{{ch.label}}</el-checkbox>
</el-checkbox-group>
<!-- 日期valueFormat对于周 不能用 -->
<el-date-picker v-if="item.type==='Date'" :type="item.dateType || 'date'" :placeholder='item.label' :format="item.format|| 'yyyy-MM-dd'" :value-format="item.valueFormat|| 'yyyy-MM-dd'" v-model="searchData[item.prop]" ></el-date-picker>
<!-- 时间 -->
<el-time-select v-if="item.type==='Time'" v-model="searchData[item.prop]"
:picker-options="{ start: '08:30', step: '00:15', end: '18:30' }"></el-time-select>
<!-- 日期时间 -->
<el-date-picker v-if="item.type==='DateTime'" type='datetime' v-model="searchData[item.prop]" :disabled="item.disable && item.disable(searchData[item.prop])"></el-date-picker>
<!-- 滑块 -->
<el-slider v-if="item.type==='Slider'" v-model="searchData[item.prop]"></el-slider>
<!-- 开关 -->
<el-switch v-if="item.type==='Switch'" v-model="searchData[item.prop]" ></el-switch>
<!-- 搜索按钮 -->
<el-button v-if="item.type==='search'" :size="size || item.size" type="danger" @click="item.handle(that)">查询
</el-button>
</el-form-item>
</el-form>
<!-- 表格操作按钮 -->
<div class="ces-handle" v-if='isButton'>
<el-button v-for='item in searchBtns' :key='item.label'
:size="size || item.size"
:type="item.type"
:icon='item.icon'
@click="item.handle(that)">{{item.label}}
</el-button>
<!-- 导入 -->
<el-upload v-if='isImport'
class="improt"
ref="upload"
:on-success="importSuccess"
:action="importUrl"
:show-file-list="false"
:auto-upload="true"
:data='importData'
>
<el-button type="warning" slot="trigger">导入</el-button>
</el-upload>
</div>
</section>
<!-- 数据表格 -->
<section class="ces-table" v-if='isTable'>
<el-table
:header-cell-style="{height: '60px',padding: '0','font-size': '12px',color: '#8590a6'}"
:row-style="{'font-size': '12px',color: '#212121'}"
align='center'
stripe fit
:data='tableData'
:size='size'
height="100%"
style="width: 100%"
:border='isBorder'
@select='select'
@select-all='selectAll'
v-loading='loading'
:defaultSelections='defaultSelections'
ref="cesTable">
<el-table-column v-if="isSelection" type="selection" align="center" ></el-table-column>
<el-table-column v-if="isIndex" type="index" :label="indexLabel" align="center" width="80"></el-table-column>
<!-- 数据栏 -->
<el-table-column
v-for="(item) in tableCols"
:key="item.id"
:prop="item.prop"
:label="item.label"
:width="item.width"
:align="'center'||item.align"
:render-header="item.require?renderHeader:null"
>
<template slot-scope="scope" >
<!-- 按钮-->
<template v-if="item.type === 'Button'">
<el-button v-for="btnItem in item.btnList" :key="btnItem.label"
type="text" @click="btnItem.handle(that,scope.row)">
<i :class="btnItem.class">{{btnItem.label || btnItem.textEvent(that,scope.row)}}</i>
</el-button>
<!-- <el-switch v-if="isSwitch" v-model="scope.row.switch" @change='item.switchHandle'> </el-switch> -->
</template>
<el-input v-if="item.type==='input'" v-model="scope.row[item.prop]" :type="item.inputType||'text'" @blur='($event)=> item.submit($event,scope.row)' @input='($event)=> item.handle($event,scope.row)'></el-input>
<!-- html -->
<span v-if="item.type==='html'" v-html="item.html(scope.row)"></span>
<!-- 下拉框 -->
<el-select v-if="item.type==='select'" v-model="scope.row[item.prop]" :size="size || btn.size" :props="item.props"
:disabled="item.isDisabled && item.isDisabled(scope.row)"
@change='item.change && item.change(that,scope.row)'>
<el-option v-for="op in item.options" :label="op.label" :value="op.value" :key="op.value"></el-option>
</el-select>
<!-- 单选 -->
<el-radio-group v-if="item.type==='radio'" v-model="scope.row[item.prop]"
:disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
@change='item.change && item.change(that,scope.row)'>
<el-radio v-for="ra in item.radios" :label="ra.value" :key="ra.value">{{ra.label}}</el-radio>
</el-radio-group>
<!-- 复选框 -->
<el-checkbox-group v-if="item.type==='checkbox'" v-model="scope.row[item.prop]"
:disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
@change='item.change && item.change(that,scope.row)'>
<el-checkbox v-for="ra in item.checkboxs" :label="ra.value" :key='ra.value'>{{ra.label}}</el-checkbox>
</el-checkbox-group>
<!-- 评价 -->
<el-rate v-if="item.type==='rate'" v-model="scope.row[item.prop]"
:disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
@change='item.change && item.change(scope.row)'></el-rate>
<!-- 开关 -->
<el-switch v-if="item.type==='switch'" v-model="scope.row[item.prop]" :size="size || btn.size"
:active-value='item.values&&item.values[0]'
:inactive-value='item.values&&item.values[1]'
:disabled="item.isDisabled && item.isDisabled(scope.row)"
@change='item.change && item.change(scope.row)'></el-switch>
<!-- 图像 -->
<img v-if="item.type==='image'" :src="scope.row[item.prop]" @click="item.handle && item.handle(scope.row)"/>
<!-- 滑块 -->
<el-slider v-if="item.type==='slider'" v-model="scope.row[item.prop]"
:disabled="item.isDisabled && item.isDisabled(scope.row)" :size="size || btn.size"
@change='item.change && item.change(scope.row)'></el-slider>
<!-- <el-input v-if="item.type='input'" v-model="scope.row[item.prop]" :type="item.inputType||'text'" @blur='item.blurEvent(row)'></el-input> -->
<!-- 默认 -->
<span v-if="!item.type" @click="item.handle(scope.row)"
:style="item.itemStyle && item.itemStyle(scope.row)" :size="size || btn.size"
:class="item.itemClass && item.item.itemClass(scope.row)">{{(item.formatter && item.formatter(scope.row)) || scope.row[item.prop]}}</span>
<a v-if="item.type == 'a'" style="color:blue" :href='scope.row[item.prop]' target="_blank">{{scope.row[item.prop] ==null ?'未上传附件':'附件下载'}}</a>
</template>
</el-table-column>
</el-table>
</section>
<!-- 分页 -->
<slot name="mid"></slot>
<section class="ces-pagination" v-if='isPagination'>
<el-pagination style='display: flex;justify-content: center;height: 100%;align-items: center;padding: 20px 0 20px 0;'
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
background
layout="total,sizes ,prev, pager, next, jumper"
:page-size="tablePage.offset"
:current-page.sync="tablePage.page"
:total="tablePage.total"
></el-pagination>
</section>
<!--弹窗 -->
</section>
</template>
<script>
export default {
props:{
that: { type: Object, default: this },
// 表格型号:mini,medium,small
size:{type:String,default:'medium'},
isBorder:{type:Boolean,default:true},
loading:{type:Boolean,default:false},
// 表格操作
isButton:{type:Boolean,default:false},
isImport:{type:Boolean,default:false},
importUrl:{type:String,default:''},
importData:{type:Object,default:()=>({})},
isSearch:{type:Boolean,default:false},
searchBtns:{type:Array,default:()=>[]},
// 表格数据
tableData:{ type:Array,default:()=>[]},
// 表格列配置
tableCols:{ type:Array,default:()=>[]},
// 是否显示表格复选框
isSelection:{type:Boolean,default:false},
defaultSelections:{ type:[Array,Object], default:()=>null},
// 是否显示表格索引
isIndex:{type:Boolean,default:false},
indexLabel: {type:String,default:'序号'},
// 是否显示分页
isPagination:{type:Boolean,default:true},
// 分页数据
tablePage:{ type:Object,default:()=>({offset:10,page:1,total:0})},
searchForm:{ type:Array, default:()=>[]},
// searchHandle:{ type:Array, default:()=>[] },
searchData:{type:Object,default:()=>{}},
labelWidth:{type:String,default:'100px'},
isTable:{type:Boolean,default:true},
},
data(){
return {
options:{nianciOption:[]}
}
},
watch:{
'defaultSelections'(val) {
this.$nextTick(function(){
if(Array.isArray(val)){
val.forEach(row=>{
this.$refs.cesTable.toggleRowSelection(row)
})
}else{
this.$refs.cesTable.toggleRowSelection(val)
}
})
}
},
methods:{
niancichange(value){
console.log(this.searchData)
},
// 表格勾选
select(rows,row){
this.$emit('select',rows,row);
},
// 全选
selectAll(rows){
this.$emit('select-all',rows)
},
//
handleCurrentChange(val){
console.log(val)
this.tablePage.page = val;
this.$emit('currentchange',val);
},
handleSizeChange(val) {
console.log(val)
this.tablePage.offset = val;
this.$emit('sizechange',val);
},
importSuccess(res, listData) {
console.log(res,listData, "打印上传后的结果");
const h = this.$createElement;
const newDatas = []
if(res.code==1){
res.data.forEach(el=>{
newDatas.push(h('p', null, el.name +' - '+ el.msg))
})
}
return res.code == 1
? this.$notify(
{
title: res.msg,
dangerouslyUseHTMLString: true,
message: h('div', null, newDatas),
duration:5000
},
setTimeout(()=>{
location.reload()
},2000)
)
: this.$message.error('上传失败,原因:' + res.msg );
},
renderHeader(h,obj) {
return h('span',{class:'ces-table-require'},obj.column.label)
},
},
created(){
}
}
</script>
<style scoped lang="scss">
.ces-search{
padding: 10px 0 20px 0;
display: flex;
justify-content: space-between;
button{
// margin:2px 0;
color: #FFFFFF;
background-color: #1890ff;
border-color: #1890ff;
border:none;
}
.ces-handle{
display: flex;
justify-content: flex-end;
button{
margin:0 10px 0 0;
background-color: #1890ff;
border-color: #1890ff;
border:none;
}
}
/deep/.el-input__inner{
height: 35px;
}
}
.ces-table-require::before{
content:'*';
color:F4483E;
}
.el-table__row td {
text-align: center!important;
}
.has-gutter tr th {
text-align: center!important;
}
.el-table__body-wrapper {
height: 500px !important;
}
/deep/.el-table__body, .el-table__footer, .el-table__header{
table-layout: unset!important;
}
/deep/.el-table__header{
table-layout: unset!important;
}
/deep/.el-form-item{
margin: 0 10px 0 0;
width: 120px!important;
}
/deep/.el-date-editor.el-input{
width: 120px!important;
}
/deep/.el-input--suffix .el-input__inner{
padding-left: 10px;
}
/deep/.el-input__prefix{
display: none;
}
/deep/.el-table__body-wrapper{
height: auto!important;
}
.improt{button{padding: 9px 15px!important;}}
</style>
\ No newline at end of file
module.exports = {
import { getToken } from '@/utils/auth'
window.CONFIG = {
/**
* 是否系统布局配置
*/
......@@ -28,10 +30,12 @@ module.exports = {
errorLog: 'production',
services: {
wecom: "wecom",
wecom: "wecom",
wecom: "wecom",
wecom: "wecom",
wecom: "wecom",
}
wecom: '/wecom',
},
get headers() {
return { Authorization: 'Bearer ' + getToken() }
},
}
module.exports = window.CONFIG
......@@ -9,11 +9,13 @@ import Element from 'element-ui'
import './styles/element-variables.scss'
Vue.use(Element, {
size: Cookies.get('size') || 'small' // set element-ui default size
size: Cookies.get('size') || 'small', // set element-ui default size
})
import '@/styles/common.scss' // common css
import '@/styles/index.scss' // global css
import config from '@/config'
import App from './App'
import store from './store'
import router from './router'
......@@ -21,16 +23,24 @@ import permission from './directive/permission'
import './assets/icons' // icon
import './permission' // permission control
import { getDicts } from "@/api/system/dict/data";
import { getConfigKey } from "@/api/system/config";
import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/common";
import Pagination from "@/components/Pagination";
import { getDicts } from '@/api/system/dict/data'
import { getConfigKey } from '@/api/system/config'
import {
parseTime,
resetForm,
addDateRange,
selectDictLabel,
selectDictLabels,
download,
handleTree,
} from '@/utils/common'
import Pagination from '@/components/Pagination'
//自定义表格工具扩展
import RightToolbar from "@/components/RightToolbar"
import config from '@/config'
import RightToolbar from '@/components/RightToolbar'
import Upload from '@/components/Upload'
// 全局方法挂载
window.config = config
Vue.prototype.getDicts = getDicts
Vue.prototype.getConfigKey = getConfigKey
Vue.prototype.parseTime = parseTime
......@@ -41,21 +51,22 @@ Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download
Vue.prototype.handleTree = handleTree
Vue.prototype.msgSuccess = function (msg) {
this.$message({ showClose: true, message: msg, type: "success" });
Vue.prototype.msgSuccess = function(msg) {
this.$message({ showClose: true, message: msg, type: 'success' })
}
Vue.prototype.msgError = function (msg) {
this.$message({ showClose: true, message: msg, type: "error" });
Vue.prototype.msgError = function(msg) {
this.$message({ showClose: true, message: msg, type: 'error' })
}
Vue.prototype.msgInfo = function (msg) {
this.$message.info(msg);
Vue.prototype.msgInfo = function(msg) {
this.$message.info(msg)
}
// 全局组件挂载
Vue.component('Pagination', Pagination)
Vue.component('RightToolbar', RightToolbar)
Vue.component('Upload', Upload)
Vue.use(permission)
......@@ -74,5 +85,5 @@ new Vue({
el: '#app',
router,
store,
render: h => h(App)
render: (h) => h(App),
})
......@@ -10,69 +10,71 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API,
// 超时
timeout: 10000
timeout: 10000,
})
// request拦截器
service.interceptors.request.use(config => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
service.interceptors.request.use(
(config) => {
// 是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers = window.CONFIG.headers // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
},
(error) => {
console.log(error)
Promise.reject(error)
}
return config
}, error => {
console.log(error)
Promise.reject(error)
})
)
// 响应拦截器
service.interceptors.response.use(res => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200;
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 200) {
return res.data
} else if (code === 401) {
// MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
// confirmButtonText: '重新登录',
// cancelButtonText: '取消',
// type: 'warning'
// }
// ).then(() => {
// store.dispatch('LogOut').then(() => {
// location.href = '/index';
// })
// })
} else if (code === 500) {
Message({
message: msg,
type: 'error'
})
return Promise.reject(new Error(msg))
} else {
Notification.error({
title: msg
})
return Promise.reject('error')
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态
const code = res.data.code || 200
// 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default']
if (code === 200) {
return res.data
} else if (code === 401) {
// MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
// confirmButtonText: '重新登录',
// cancelButtonText: '取消',
// type: 'warning'
// }
// ).then(() => {
// store.dispatch('LogOut').then(() => {
// location.href = '/index';
// })
// })
} else if (code === 500) {
Message({
message: msg,
type: 'error',
})
return Promise.reject(new Error(msg))
} else {
Notification.error({
title: msg,
})
return Promise.reject('error')
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
},
(error) => {
console.log('err' + error)
let { message } = error
if (message == 'Network Error') {
message = '后端接口连接异常'
} else if (message.includes('timeout')) {
message = '系统接口请求超时'
} else if (message.includes('Request failed with status code')) {
message = '系统接口' + message.substr(message.length - 3) + '异常'
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
duration: 5 * 1000,
})
return Promise.reject(error)
}
......
......@@ -17,9 +17,7 @@ export default {
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.userId)
this.single = selection.length != 1
this.multiple = !selection.length
this.ids = selection.map((item) => item.id) + ''
},
},
}
......@@ -27,13 +25,9 @@ export default {
<template>
<MaPage ref="page" type="1" @listChange="listChange">
<el-table
v-loading="loading"
:data="userList"
@selection-change="handleSelectionChange"
>
<el-table :data="list" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="语音" align="center" prop="userName" />
<el-table-column label="语音" align="center" prop="materialUrl" />
<el-table-column
label="时长"
align="center"
......@@ -61,7 +55,7 @@ export default {
size="mini"
type="text"
icon="el-icon-key"
@click="handleResetPwd(scope.row)"
@click="$refs.page.download(scope.row)"
v-hasPermi="['system:user:resetPwd']"
>下载</el-button
>
......@@ -69,7 +63,7 @@ export default {
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
@click="$refs.page.edit(scope.row)"
v-hasPermi="['system:user:edit']"
>修改</el-button
>
......@@ -78,7 +72,7 @@ export default {
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
@click="$refs.page.remove(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button
>
......
......@@ -12,6 +12,7 @@ import {
remove,
moveGroup,
} from '@/api/material'
export default {
name: 'MaPage',
components: {},
......@@ -36,6 +37,7 @@ export default {
pageSize: 10,
categoryId: '',
search: '',
mediaType: '4',
},
list: [], // 列表
total: 0, // 总条数
......@@ -62,6 +64,7 @@ export default {
typeTitle: ['图片', '语音', '视频', '普通文件', '文本'],
form: {}, // 素材表单
fileUrl: '',
dialogVisible: false, // 素材表格对话框显隐
// 表单校验
rules: Object.freeze({
......@@ -78,6 +81,7 @@ export default {
watch: {},
computed: {},
created() {
this.query.mediaType = this.type
this.getTree()
this.getList()
},
......@@ -260,7 +264,7 @@ export default {
style="width: 300px;"
/>
<el-button class="ml10" @click="getList(1)">搜索</el-button>
<el-button @click="remove" :disabled="selected.length"
<el-button @click="remove" :disabled="selected.length === 0"
>删除</el-button
>
<el-popover placement="top" width="260" v-model="groupDialogVisible">
......@@ -280,7 +284,10 @@ export default {
>确定</el-button
>
</div>
<el-button slot="reference" class="ml10" :disabled="selected.length"
<el-button
slot="reference"
class="ml10"
:disabled="selected.length === 0"
>移动分组</el-button
>
</el-popover>
......@@ -292,7 +299,7 @@ export default {
</div>
</div>
<div v-loading="loading">
<div v-loading="loading" class="mt20">
<slot></slot>
</div>
......@@ -319,6 +326,7 @@ export default {
maxlength="20"
show-word-limit
placeholder="分类名称"
@keyup.enter.native="treeSubmit"
></el-input>
</el-form-item>
<!-- <el-form-item label="所属分类" v-if="treeForm.pName">
......@@ -346,6 +354,7 @@ export default {
:props="groupProps"
></el-cascader>
</el-form-item>
<el-form-item label="文本内容" prop="content" v-if="type === '4'">
<el-input
v-model="form.content"
......@@ -356,63 +365,39 @@ export default {
</el-form-item>
<el-form-item label="图片" prop="materialUrl" v-else-if="type === '0'">
<el-upload
action
:show-file-list="false"
:on-success="d"
:before-upload="d"
>
<img v-if="imageUrl" :src="imageUrl" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div>支持JPG,PNG格式,图片大小不超过2M,建议上传宽高1:1的图片</div>
<upload :fileUrl.sync="form.fileUrl" :mediaType="type">
<div slot="tip">
支持JPG,PNG格式,图片大小不超过2M,建议上传宽高1:1的图片
</div>
</upload>
</el-form-item>
<el-form-item label="语音" prop="materialUrl" v-else-if="type === '1'">
<el-upload
action=""
:on-remove="d"
:before-remove="d"
multiple
:limit="3"
:on-exceed="d"
:file-list="[{ name: 'name', url: 'url' }]"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">
<upload :fileUrl.sync="form.fileUrl" :mediaType="type">
<div slot="tip">
只能上传amr格式的语音文件。单个文件大小不超过2M,时长不超过1分钟
</div>
</el-upload>
</upload>
</el-form-item>
<template v-else-if="type === '2'">
<el-form-item label="视频" prop="materialUrl">
<el-upload
action
:show-file-list="false"
:on-success="d"
:before-upload="d"
>
<img v-if="imageUrl" :src="imageUrl" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div>不超过10M, 文件格式: mp4</div>
<upload :fileUrl.sync="form.fileUrl" :mediaType="type">
<div slot="tip">
不超过10M, 文件格式: mp4
</div>
</upload>
</el-form-item>
<el-form-item label="封面">
<el-upload
action
:show-file-list="false"
:on-success="d"
:before-upload="d"
>
<img v-if="imageUrl" :src="imageUrl" />
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
<div>建议尺寸:1068*455</div>
<upload :fileUrl.sync="form.coverUrl" mediaType="0">
<div slot="tip">
建议尺寸:1068*455
</div>
</upload>
</el-form-item>
<el-form-item label="摘要">
<el-input
v-model="form.remark"
v-model="form.digest"
type="textarea"
placeholder="非必填,限120字,如不填会自动抓取正文前54个字"
></el-input>
......@@ -420,18 +405,11 @@ export default {
</template>
<el-form-item label="文件" prop="materialUrl" v-else-if="type === '3'">
<el-upload
action=""
:on-remove="d"
:before-remove="d"
multiple
:limit="3"
:on-exceed="d"
:file-list="[{ name: 'name', url: 'url' }]"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">单个文件大小不超过20M</div>
</el-upload>
<upload :fileUrl.sync="form.coverUrl" :mediaType="type">
<div slot="tip">
单个文件大小不超过20M
</div>
</upload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......
......@@ -31,7 +31,7 @@ export default {
<el-table-column
label="文件名"
align="center"
prop="userName"
prop="materialUrl"
:show-overflow-tooltip="true"
/>
<el-table-column label="大小" align="center" prop="userName" />
......@@ -57,7 +57,7 @@ export default {
size="mini"
type="text"
icon="el-icon-key"
@click="handleResetPwd(scope.row)"
@click="$refs.page.download(scope.row)"
v-hasPermi="['system:user:resetPwd']"
>下载</el-button
>
......@@ -65,7 +65,7 @@ export default {
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
@click="$refs.page.edit(scope.row)"
v-hasPermi="['system:user:edit']"
>修改</el-button
>
......@@ -74,7 +74,7 @@ export default {
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
@click="$refs.page.remove(scope.row)"
v-hasPermi="['system:user:remove']"
>删除</el-button
>
......
......@@ -22,8 +22,6 @@ export default {
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.userId)
this.single = selection.length != 1
this.multiple = !selection.length
},
},
}
......@@ -34,8 +32,8 @@ export default {
<el-row :gutter="20">
<el-col
:span="6"
style="margin-top: 24px;"
v-for="(item, index) in 10"
style="margin-bottom: 24px;"
v-for="(item, index) in list"
:key="index"
>
<el-card shadow="hover" body-style="padding: 0px;">
......@@ -45,16 +43,22 @@ export default {
:preview-src-list="srcList"
></el-image>
<div class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="edit(file)">
<span
class="el-upload-list__item-preview"
@click="$refs.page.edit(item)"
>
<i class="el-icon-edit"></i>
</span>
<span class="el-upload-list__item-" @click="handleRemove(file)">
<span
class="el-upload-list__item-"
@click="$refs.page.remove(item)"
>
<i class="el-icon-delete"></i>
</span>
</div>
</div>
<div style="padding: 14px;">
<el-checkbox v-model="kl">16545awfe.jpg</el-checkbox>
<el-checkbox v-model="ids">{{ item.name }}</el-checkbox>
</div>
</el-card>
</el-col>
......
......@@ -26,11 +26,7 @@ export default {
<template>
<MaPage ref="page" type="4" @listChange="listChange" :selected="ids">
<el-table
class="mt20"
:data="list"
@selection-change="handleSelectionChange"
>
<el-table :data="list" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column
label="文本内容"
......
......@@ -31,31 +31,40 @@ export default {
<el-col
:span="6"
style="margin-top: 24px;"
v-for="(item, index) in 10"
v-for="(item, index) in list"
:key="index"
>
<el-card shadow="hover" body-style="padding: 0px;">
<div class="img-wrap">
<el-image
:src="require('@/assets/image/profile.jpg')"
:src="item.coverUrl"
:preview-src-list="srcList"
></el-image>
<div class="el-upload-list__item-actions">
<span class="el-upload-list__item-preview" @click="edit(file)">
<span
class="el-upload-list__item-preview"
@click="$refs.page.download(item)"
>
<i class="el-icon-download"></i>
</span>
<span class="el-upload-list__item-preview" @click="edit(file)">
<span
class="el-upload-list__item-preview"
@click="$refs.page.edit(item)"
>
<i class="el-icon-edit"></i>
</span>
<span class="el-upload-list__item-" @click="handleRemove(file)">
<span
class="el-upload-list__item-"
@click="$refs.page.remove(item)"
>
<i class="el-icon-delete"></i>
</span>
</div>
</div>
<div style="padding: 14px;">
<el-checkbox v-model="kl">2020-02-02</el-checkbox>
<div>sdghwery阿瑟他五色土</div>
<div>sdghwery阿瑟他五色土</div>
<el-checkbox v-model="kl">{{ item.createTime }}</el-checkbox>
<div>{{ item.digest }}</div>
<div>{{ item.digest }}</div>
</div>
</el-card>
</el-col>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册