hupeng
5 years ago
37 changed files with 1025 additions and 77 deletions
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request' |
||||
|
||||
export function getPage(query) { |
||||
return request({ |
||||
url: 'api/material/page', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
export function addObj(obj) { |
||||
return request({ |
||||
url: 'api/material', |
||||
method: 'post', |
||||
data: obj |
||||
}) |
||||
} |
||||
|
||||
export function getObj(id) { |
||||
return request({ |
||||
url: 'api/material/' + id, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
export function delObj(id) { |
||||
return request({ |
||||
url: 'api/material/' + id, |
||||
method: 'delete' |
||||
}) |
||||
} |
||||
|
||||
export function putObj(obj) { |
||||
return request({ |
||||
url: 'api/material', |
||||
method: 'put', |
||||
data: obj |
||||
}) |
||||
} |
@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request' |
||||
|
||||
export function getPage(query) { |
||||
return request({ |
||||
url: 'api/materialgroup/page', |
||||
method: 'get', |
||||
params: query |
||||
}) |
||||
} |
||||
|
||||
export function addObj(obj) { |
||||
return request({ |
||||
url: 'api/materialgroup', |
||||
method: 'post', |
||||
data: obj |
||||
}) |
||||
} |
||||
|
||||
export function getObj(id) { |
||||
return request({ |
||||
url: 'api/materialgroup/' + id, |
||||
method: 'get' |
||||
}) |
||||
} |
||||
|
||||
export function delObj(id) { |
||||
return request({ |
||||
url: 'api/materialgroup/' + id, |
||||
method: 'delete' |
||||
}) |
||||
} |
||||
|
||||
export function putObj(obj) { |
||||
return request({ |
||||
url: 'api/materialgroup', |
||||
method: 'put', |
||||
data: obj |
||||
}) |
||||
} |
@ -0,0 +1,66 @@
|
||||
<template> |
||||
<div> |
||||
<el-upload |
||||
:action="uploadApi" |
||||
:headers="headers" |
||||
:on-remove="handleRemove" |
||||
:on-success="handleUploadSuccess" |
||||
:before-remove="beforeRemove" |
||||
:file-list="fileList" |
||||
multiple |
||||
:limit="1" |
||||
> |
||||
<el-button size="small" type="primary">点击上传</el-button> |
||||
</el-upload> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { getToken } from '@/utils/auth' |
||||
import { mapGetters } from 'vuex' |
||||
export default { |
||||
data () { |
||||
return { |
||||
resourcesUrl: '', |
||||
headers: { |
||||
'Authorization': getToken() |
||||
} |
||||
} |
||||
}, |
||||
props: { |
||||
value: { |
||||
default: '', |
||||
type: String |
||||
} |
||||
}, |
||||
computed: { |
||||
...mapGetters([ |
||||
'uploadApi' |
||||
]), |
||||
fileList () { |
||||
let res = [] |
||||
if (this.value) { |
||||
res.push({name: this.value, url: this.resourcesUrl + this.value, response: this.value}) |
||||
} |
||||
this.$emit('input', this.value) |
||||
console.log("res"+res) |
||||
return res |
||||
} |
||||
}, |
||||
methods: { |
||||
// 图片上传 |
||||
handleUploadSuccess (response, file, fileList) { |
||||
this.$emit('input', file.response.link) |
||||
}, |
||||
handleRemove (file, fileList) { |
||||
this.$emit('change', file) |
||||
}, |
||||
beforeRemove (file, fileList) { |
||||
return this.$confirm(`确定移除 ${file.name}?`) |
||||
} |
||||
} |
||||
} |
||||
</script> |
||||
|
||||
<style lang="scss"> |
||||
</style> |
@ -0,0 +1,457 @@
|
||||
<template> |
||||
<div v-if="type == 'image'"> |
||||
<ul class="el-upload-list el-upload-list--picture-card" v-for="(item,index) in value" :key="index"> |
||||
<li tabindex="0" class="el-upload-list__item is-ready" :style="'width: '+width+'px;height: '+height+'px'"> |
||||
<div> |
||||
<img :src="item" alt="" class="el-upload-list__item-thumbnail"> |
||||
<span class="el-upload-list__item-actions"> |
||||
<span class="el-upload-list__item-preview" v-if="index != 0" @click="moveMaterial(index,'up')"> |
||||
<i class="el-icon-back"></i> |
||||
</span> |
||||
<span class="el-upload-list__item-preview" @click="zoomMaterial(index)"> |
||||
<i class="el-icon-view"></i> |
||||
</span> |
||||
<span class="el-upload-list__item-delete" @click="deleteMaterial(index)"> |
||||
<i class="el-icon-delete"></i> |
||||
</span> |
||||
<span class="el-upload-list__item-preview" v-if="index != value.length-1" @click="moveMaterial(index,'down')"> |
||||
<i class="el-icon-right"></i> |
||||
</span> |
||||
</span> |
||||
</div> |
||||
</li> |
||||
</ul> |
||||
<div tabindex="0" class="el-upload el-upload--picture-card" v-if="num > value.length" @click="toSeleteMaterial" :style="'width: '+width+'px;height: '+height+'px;'+'line-height:'+height+'px;'"> |
||||
<i class="el-icon-plus"></i> |
||||
</div> |
||||
|
||||
<el-dialog |
||||
append-to-body |
||||
:visible.sync="dialogVisible" |
||||
width="35%"> |
||||
<img :src="url" alt="" style="width: 100%"> |
||||
</el-dialog> |
||||
|
||||
<el-dialog |
||||
title="图片素材库" |
||||
append-to-body |
||||
:visible.sync="listDialogVisible" |
||||
width="70%"> |
||||
<el-container> |
||||
<el-aside width="unset"> |
||||
<div style="margin-bottom: 10px"> |
||||
<el-button |
||||
class="el-icon-plus" |
||||
size="small" |
||||
@click="materialgroupAdd()"> |
||||
添加分组 |
||||
</el-button> |
||||
</div> |
||||
<el-tabs tab-position="left" v-model="materialgroupObjId" v-loading="materialgroupLoading" @tab-click="tabClick"> |
||||
<el-tab-pane v-for="(item,index) in materialgroupList" |
||||
:key="index" |
||||
:name="item.id"> |
||||
<span slot="label"> {{item.name}}</span> |
||||
</el-tab-pane> |
||||
</el-tabs> |
||||
</el-aside> |
||||
<el-main> |
||||
<el-card> |
||||
<div slot="header"> |
||||
<el-row> |
||||
<el-col :span="12"> |
||||
<span>{{materialgroupObj.name}}</span> |
||||
<span v-if="materialgroupObj.id != '-1'"> |
||||
<el-button size="small" type="text" class="el-icon-edit" style="margin-left: 10px;" @click="materialgroupEdit(materialgroupObj)">重命名</el-button> |
||||
<el-button size="small" type="text" class="el-icon-delete" style="margin-left: 10px;color: red" @click="materialgroupDelete(materialgroupObj)">删除</el-button> |
||||
</span> |
||||
</el-col> |
||||
<el-col :span="12" style="text-align: right;"> |
||||
<el-upload |
||||
:action="uploadApi" |
||||
:headers="headers" |
||||
:file-list="[]" |
||||
:on-progress="handleProgress" |
||||
:before-upload="beforeUpload" |
||||
:on-success="handleSuccess"> |
||||
<el-button size="small" type="primary">点击上传</el-button> |
||||
</el-upload> |
||||
</el-col> |
||||
</el-row> |
||||
</div> |
||||
<div v-loading="tableLoading"> |
||||
<el-alert |
||||
v-if="tableData.length <= 0" |
||||
title="暂无数据" |
||||
type="info" |
||||
:closable="false" |
||||
center |
||||
show-icon> |
||||
</el-alert> |
||||
<el-row :gutter="5"> |
||||
<el-checkbox-group v-model="urls" :max="num - value.length"> |
||||
<el-col :span="4" v-for="(item,index) in tableData" :key="index"> |
||||
<el-card :body-style="{ padding: '5px' }"> |
||||
<el-image |
||||
style="width: 100%;height: 100px" |
||||
:src="item.url" |
||||
fit="contain" |
||||
:preview-src-list="[item.url]"></el-image> |
||||
<div> |
||||
<el-checkbox class="material-name" :label="item.url"> |
||||
选择 |
||||
</el-checkbox> |
||||
<el-row> |
||||
<el-col :span="24" class="col-do"> |
||||
<el-button type="text" size="medium" @click="materialDel(item)">删除</el-button> |
||||
</el-col> |
||||
</el-row> |
||||
|
||||
</div> |
||||
</el-card> |
||||
</el-col> |
||||
</el-checkbox-group> |
||||
</el-row> |
||||
<el-pagination |
||||
@size-change="sizeChange" |
||||
:current-page.sync="page.currentPage" |
||||
:page-sizes="[12, 24]" |
||||
:page-size="page.pageSize" |
||||
layout="total, sizes, prev, pager, next, jumper" |
||||
:total="page.total" |
||||
class="pagination"> |
||||
</el-pagination> |
||||
</div> |
||||
</el-card> |
||||
</el-main> |
||||
</el-container> |
||||
<span slot="footer" class="dialog-footer"> |
||||
<el-button @click="listDialogVisible = false">取 消</el-button> |
||||
<el-button type="primary" @click="sureUrls">确 定</el-button> |
||||
</span> |
||||
</el-dialog> |
||||
</div> |
||||
|
||||
</template> |
||||
|
||||
<script> |
||||
import { getPage as materialgroupPage, addObj as materialgroupAdd, delObj as materialgroupDel, putObj as materialgroupEdit} from '@/api/tools/materialgroup' |
||||
import { getPage , addObj, delObj, putObj} from '@/api/tools/material' |
||||
import { getToken } from '@/utils/auth' |
||||
import { mapGetters } from 'vuex' |
||||
|
||||
export default { |
||||
name: "materialList", |
||||
props: { |
||||
//素材数据 |
||||
value:{ |
||||
type: Array, |
||||
default() { |
||||
return [] |
||||
}, |
||||
}, |
||||
//素材类型 |
||||
type:{ |
||||
type: String, |
||||
}, |
||||
//素材限制数量,默认5个 |
||||
num:{ |
||||
type: Number, |
||||
default() { |
||||
return 5 |
||||
}, |
||||
}, |
||||
//宽度 |
||||
width: { |
||||
type: Number, |
||||
default() { |
||||
return 150 |
||||
} |
||||
}, |
||||
//宽度 |
||||
height: { |
||||
type: Number, |
||||
default() { |
||||
return 150 |
||||
} |
||||
} |
||||
}, |
||||
data() { |
||||
return { |
||||
headers:{ |
||||
Authorization: getToken() |
||||
}, |
||||
dialogVisible: false, |
||||
url: '', |
||||
listDialogVisible: false, |
||||
materialgroupList: [], |
||||
materialgroupObjId: '', |
||||
materialgroupObj: {}, |
||||
materialgroupLoading: false, |
||||
tableData: [], |
||||
page: { |
||||
total: 0, // 总页数 |
||||
currentPage: 1, // 当前页数 |
||||
pageSize: 12, // 每页显示多少条 |
||||
ascs: [],//升序字段 |
||||
descs: 'create_time'//降序字段 |
||||
}, |
||||
tableLoading: false, |
||||
groupId: null, |
||||
urls: [] |
||||
} |
||||
}, |
||||
computed: { |
||||
...mapGetters([ |
||||
'uploadApi' |
||||
]) |
||||
}, |
||||
methods:{ |
||||
moveMaterial(index,type){ |
||||
if(type == 'up'){ |
||||
let tempOption = this.value[index - 1] |
||||
this.$set(this.value, index - 1, this.value[index]) |
||||
this.$set(this.value, index, tempOption) |
||||
} |
||||
if(type == 'down'){ |
||||
let tempOption = this.value[index + 1] |
||||
this.$set(this.value, index + 1, this.value[index]) |
||||
this.$set(this.value, index, tempOption) |
||||
} |
||||
}, |
||||
zoomMaterial(index){ |
||||
this.dialogVisible = true |
||||
this.url = this.value[index] |
||||
}, |
||||
deleteMaterial(index){ |
||||
let that = this |
||||
this.$confirm('是否确认删除?', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
type: 'warning' |
||||
}).then(function() { |
||||
that.value.splice(index,1) |
||||
that.urls = [] |
||||
}) |
||||
}, |
||||
toSeleteMaterial(){ |
||||
this.listDialogVisible = true |
||||
if(this.tableData.length <= 0){ |
||||
this.materialgroupPage() |
||||
} |
||||
}, |
||||
materialgroupPage(){ |
||||
this.materialgroupLoading = true |
||||
materialgroupPage({ |
||||
total: 0, // 总页数 |
||||
currentPage: 1, // 当前页数 |
||||
pageSize: 100, // 每页显示多少条 |
||||
ascs: [],//升序字段 |
||||
descs: 'create_time'//降序字段 |
||||
}).then(response => { |
||||
this.materialgroupLoading = false |
||||
let materialgroupList = response.content |
||||
materialgroupList.unshift({ |
||||
id: '-1', |
||||
name: '全部分组' |
||||
}) |
||||
this.materialgroupList = materialgroupList |
||||
this.tabClick({ |
||||
index: 0 |
||||
}) |
||||
}) |
||||
}, |
||||
materialgroupDelete(materialgroupObj){ |
||||
let that = this |
||||
this.$confirm('是否确认删除该分组?', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
type: 'warning' |
||||
}).then(function() { |
||||
materialgroupDel(materialgroupObj.id) |
||||
.then(function() { |
||||
that.$delete(that.materialgroupList, materialgroupObj.index) |
||||
}) |
||||
}) |
||||
}, |
||||
materialgroupEdit(materialgroupObj){ |
||||
let that = this |
||||
this.$prompt('请输入分组名', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
inputValue: materialgroupObj.name, |
||||
}).then(({ value }) => { |
||||
materialgroupEdit({ |
||||
id: materialgroupObj.id, |
||||
name: value |
||||
}).then(function() { |
||||
materialgroupObj.name = value |
||||
that.$set(that.materialgroupList, materialgroupObj.index, materialgroupObj) |
||||
}) |
||||
}).catch(() => { |
||||
|
||||
}) |
||||
}, |
||||
materialgroupAdd(){ |
||||
let that = this |
||||
this.$prompt('请输入分组名', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
}).then(({ value }) => { |
||||
materialgroupAdd({ |
||||
name: value |
||||
}).then(function() { |
||||
that.materialgroupPage() |
||||
}) |
||||
}).catch(() => { |
||||
|
||||
}) |
||||
}, |
||||
tabClick(tab,event){ |
||||
this.urls = [] |
||||
let index = Number(tab.index) |
||||
let materialgroupObj = this.materialgroupList[index] |
||||
materialgroupObj.index = index |
||||
this.materialgroupObj = materialgroupObj |
||||
this.materialgroupObjId = materialgroupObj.id |
||||
this.page.currentPage = 1 |
||||
this.page.total = 0 |
||||
if(materialgroupObj.id != '-1'){ |
||||
this.groupId = materialgroupObj.id |
||||
}else{ |
||||
this.groupId = null |
||||
} |
||||
this.getPage(this.page) |
||||
}, |
||||
getPage(page, params) { |
||||
this.tableLoading = true |
||||
getPage(Object.assign({ |
||||
current: page.currentPage, |
||||
size: page.pageSize, |
||||
descs: this.page.descs, |
||||
ascs: this.page.ascs, |
||||
}, { |
||||
groupId: this.groupId |
||||
})).then(response => { |
||||
let tableData = response.content |
||||
this.page.total = response.totalElements |
||||
this.page.currentPage = page.currentPage |
||||
this.page.pageSize = page.pageSize |
||||
this.tableData = tableData |
||||
this.tableLoading = false |
||||
}).catch(() => { |
||||
this.tableLoading=false |
||||
}) |
||||
}, |
||||
sizeChange(val) { |
||||
this.page.currentPage = 1 |
||||
this.page.pageSize = val |
||||
this.getPage(this.page) |
||||
}, |
||||
materialRename(item){ |
||||
let that = this |
||||
this.$prompt('请输入素材名', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
inputValue: item.name, |
||||
}).then(({ value }) => { |
||||
putObj({ |
||||
id: item.id, |
||||
name: value |
||||
}).then(function() { |
||||
that.getPage(that.page) |
||||
}) |
||||
}).catch(() => { |
||||
|
||||
}) |
||||
}, |
||||
materialUrl(item){ |
||||
let that = this |
||||
this.$prompt('素材链接', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
inputValue: item.url, |
||||
}).then(({ value }) => { |
||||
|
||||
}).catch(() => { |
||||
|
||||
}) |
||||
}, |
||||
materialDel(item){ |
||||
let that = this |
||||
this.$confirm('是否确认删除该素材?', '提示', { |
||||
confirmButtonText: '确定', |
||||
cancelButtonText: '取消', |
||||
type: 'warning' |
||||
}).then(function() { |
||||
delObj(item.id) |
||||
.then(function() { |
||||
that.getPage(that.page) |
||||
}) |
||||
}) |
||||
}, |
||||
handleCommand(command) { |
||||
let that = this |
||||
let s = command.split('-') |
||||
putObj({ |
||||
id: s[0], |
||||
groupId: s[1] |
||||
}).then(function() { |
||||
that.getPage(that.page) |
||||
}) |
||||
}, |
||||
handleProgress(event, file, fileList){ |
||||
// let uploadProgress = file.percentage.toFixed(0) |
||||
// this.uploadProgress = uploadProgress |
||||
}, |
||||
handleSuccess(response, file, fileList){ |
||||
let that = this |
||||
this.uploadProgress = 0 |
||||
addObj({ |
||||
type: '1', |
||||
groupId: this.groupId != '-1' ? this.groupId : null, |
||||
name: file.name, |
||||
url: response.link |
||||
}).then(function() { |
||||
that.getPage(that.page) |
||||
}) |
||||
}, |
||||
beforeUpload(file){ |
||||
const isPic = |
||||
file.type === "image/jpeg" || |
||||
file.type === "image/png" || |
||||
file.type === "image/gif" || |
||||
file.type === "image/jpg" |
||||
const isLt2M = file.size / 1024 / 1024 < 2 |
||||
if (!isPic) { |
||||
this.$message.error("上传图片只能是 JPG、JPEG、PNG、GIF 格式!") |
||||
return false |
||||
} |
||||
if (!isLt2M) { |
||||
this.$message.error('上传头像图片大小不能超过 2MB!') |
||||
} |
||||
return isPic && isLt2M |
||||
}, |
||||
sureUrls(){ |
||||
this.urls.forEach(item => { |
||||
this.$set(this.value,this.value.length, item) |
||||
}) |
||||
this.listDialogVisible=false |
||||
} |
||||
} |
||||
}; |
||||
</script> |
||||
|
||||
<style lang="scss" scoped> |
||||
.material-name{ |
||||
padding: 8px 0px; |
||||
} |
||||
.col-do{ |
||||
text-align: center; |
||||
} |
||||
.button-do{ |
||||
padding: unset!important; |
||||
font-size: 12px; |
||||
} |
||||
</style> |
||||
|
@ -0,0 +1,171 @@
|
||||
<template> |
||||
<el-row :gutter="10" class="panel-group"> |
||||
<el-col :xs="16" :sm="16" :lg="8" class="card-panel-col"> |
||||
<div class="card-panel"> |
||||
<el-card class="box-card"> |
||||
<div slot="header" class="clearfix"> |
||||
<span style="font-weight: bolder">项目信息</span> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">yshop基于当前流行技术组合的前后端分离商城系统:</span> |
||||
SpringBoot2+Jpa+MybatisPlus+SpringSecurity |
||||
的前后端分离的商城系统, |
||||
包含商城、拼团、砍价、商户管理、 秒杀、优惠券、积分、分销、会员等功能。 |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">技术选型:</span> |
||||
SpringBoot2、mybatis、MyBatis-Plus |
||||
、SpringSecurity、JPA 、Druid 、Slf4j 、Fastjson |
||||
、JWT 、Redis 、Quartz 、Mysql 、swagger 、WxJava |
||||
、Lombok 、Hutool |
||||
、Mapstruct 、Redisson 、Rocketmq |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">QQ群:</span>964166879 |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">gitee:</span><a target="_blank" href="https://gitee.com/guchengwuyue/yshopmall">访问码云</a> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">github:</span><a target="_blank" href="https://github.com/guchengwuyue/yshopmall">访问github</a> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">公众号演示:</span><img width="100" height="100" src="https://image.dayouqiantu.cn/qrcode_for_gh_95df5a2881cc_258.jpg"> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">H5演示:</span><a target="_blank" href="https://h5.dayouqiantu.cn">https://h5.dayouqiantu.cn</a> <br /> |
||||
<span style="font-weight: bolder">H5测试号</span>:hupeng/123456,也可以自行注册 |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</el-col> |
||||
<el-col :xs="16" :sm="16" :lg="8" class="card-panel-col"> |
||||
<div class="card-panel"> |
||||
<el-card class="box-card"> |
||||
<div slot="header" class="clearfix"> |
||||
<span style="font-weight: bolder">开源+VIP说明</span> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">开源版:</span>是整个商城的管理后台(后台已经封装好了图片素材库、编辑器、配置等等组件), |
||||
它可以用于所有的Web应用程序,如网站商城管理后台,网站会员中心,CMS,CRM,OA等等, |
||||
当然,您也可以对它进行深度定制,以做出更强系统。 |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">VIP版:</span>包括了开源版,还包括了移动端(H5+公众号)、小程序(mpvue)即将发布、移动端API |
||||
</div> |
||||
<div class="text item"> |
||||
1、VIP为终身制、拥有全部源代码及其后续的代码(免费)升级及其技术支持。目前商城优惠券、会员、秒杀、分销、砍价等都已经完成!<br /> |
||||
2、价格:vip会员价218元,当然当前价格是整个价格,后续的系统升级vip价格会有相应的调整的,所以早上车更优惠哦!<br /> |
||||
3、VIP购买淘宝地址:https://item.taobao.com/item.htm?id=607532386325<br /> |
||||
4、加入vip群:931426444,请输入你的淘宝订单编号,即可入群<br /> |
||||
5、群里面获取私服git<br /> |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</el-col> |
||||
<el-col :xs="16" :sm="16" :lg="8" class="card-panel-col"> |
||||
<div class="card-panel"> |
||||
<el-card class="box-card"> |
||||
<div slot="header" class="clearfix"> |
||||
<span style="font-weight: bolder">更新日志</span> |
||||
</div> |
||||
<div class="text item"> |
||||
<span style="font-weight: bolder">(2020-01-10)yshop1.8版本 发布更新如下:</span> |
||||
</div> |
||||
<div class="text item"> |
||||
1.新增小程序支付与登录,后台新增小程序跳转页面, |
||||
</div> |
||||
<div class="text item"> |
||||
2.后台新增图片素材管理 |
||||
</div> |
||||
<div class="text item"> |
||||
3.本地上传与七牛云上传合并,修改一个yml即可两者随意切换 |
||||
</div> |
||||
<div class="text item"> |
||||
4.升级swagger-bootstrap,swaager统一配置迁移到common(防止注解冲突) |
||||
</div> |
||||
<div class="text item"> |
||||
5.后台优化操作显示 |
||||
</div> |
||||
</el-card> |
||||
</div> |
||||
</el-col> |
||||
</el-row> |
||||
</template> |
||||
<script> |
||||
|
||||
</script> |
||||
|
||||
<style rel="stylesheet/scss" lang="scss" scoped> |
||||
.text { |
||||
font-size: 12px; |
||||
} |
||||
|
||||
.item { |
||||
margin-bottom: 10px; |
||||
} |
||||
|
||||
.clearfix:before, |
||||
.clearfix:after { |
||||
display: table; |
||||
content: ""; |
||||
} |
||||
.clearfix:after { |
||||
clear: both |
||||
} |
||||
|
||||
.panel-group { |
||||
margin-top: 18px; |
||||
.card-panel-col{ |
||||
margin-bottom: 32px; |
||||
} |
||||
.card-panel { |
||||
height: auto; |
||||
font-size: 12px; |
||||
position: relative; |
||||
overflow: hidden; |
||||
color: #666; |
||||
background: #fff; |
||||
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05); |
||||
border-color: rgba(0, 0, 0, .05); |
||||
.icon-people { |
||||
color: #40c9c6; |
||||
} |
||||
.icon-message { |
||||
color: #36a3f7; |
||||
} |
||||
.icon-money { |
||||
color: #f4516c; |
||||
} |
||||
.icon-shopping { |
||||
color: #34bfa3 |
||||
} |
||||
.card-panel-icon-wrapper { |
||||
float: left; |
||||
margin: 14px 0 0 14px; |
||||
padding: 16px; |
||||
transition: all 0.38s ease-out; |
||||
border-radius: 6px; |
||||
} |
||||
.card-panel-icon { |
||||
float: left; |
||||
font-size: 48px; |
||||
} |
||||
.card-panel-description { |
||||
float: right; |
||||
font-weight: bold; |
||||
margin: 26px; |
||||
margin-left: 0px; |
||||
.card-panel-text { |
||||
line-height: 18px; |
||||
color: rgba(0, 0, 0, 0.45); |
||||
font-size: 16px; |
||||
margin-bottom: 12px; |
||||
} |
||||
.card-panel-num { |
||||
font-size: 20px; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
</style> |
Loading…
Reference in new issue