Browse Source

订阅消息联调

dev
jiangyy 5 years ago
parent
commit
86f5808fcc
  1. 4
      epmet-oper-web/.env.development
  2. 2
      epmet-oper-web/src/js/columns/customer/manage/customer.js
  3. 60
      epmet-oper-web/src/views/components/CTable.vue
  4. 12
      epmet-oper-web/src/views/components/CTableNoPage.vue
  5. 1
      epmet-oper-web/src/views/modules/customer/customize/ConfigItem.vue
  6. 2
      epmet-oper-web/src/views/modules/customer/manage/CustomerInfo.vue
  7. 6
      epmet-oper-web/src/views/modules/customer/miniProAgent/version/CommitForm.vue
  8. 54
      epmet-oper-web/src/views/modules/productConfig/subscribe/MyTemp.vue
  9. 35
      epmet-oper-web/src/views/modules/productConfig/subscribe/MyTempList.vue
  10. 128
      epmet-oper-web/src/views/modules/productConfig/subscribe/TempDetail.vue
  11. 35
      epmet-oper-web/src/views/modules/productConfig/subscribe/TempEdit.vue
  12. 40
      epmet-oper-web/src/views/modules/productConfig/subscribe/TempList.vue
  13. 2
      epmet-oper-web/src/views/pages/loginWork.vue

4
epmet-oper-web/.env.development

@ -1,5 +1,5 @@
NODE_ENV=development
VUE_APP_API_SERVER = http://192.168.1.130:8080/api
# VUE_APP_API_SERVER = http://10.10.10.207:8080/api
# VUE_APP_API_SERVER = http://192.168.1.130:8080/api
VUE_APP_API_SERVER = http://10.10.10.50:8080/api
# VUE_APP_API_SERVER = https://epmet-dev.elinkservice.cn/api
VUE_APP_NODE_ENV=dev

2
epmet-oper-web/src/js/columns/customer/manage/customer.js

@ -77,7 +77,7 @@ export default {
},
{
key: 'rootManageName',
title: '管理员',
title: '超级管理员',
display: ['table', 'model'],
type: 'input',
rule: [

60
epmet-oper-web/src/views/components/CTable.vue

@ -67,7 +67,8 @@
:fit=" col.fill?col.fill:'fill'">
<span v-else>--</span>
</template></el-table-column>
</template>
</el-table-column>
<!--普通列-->
<el-table-column v-if="!col.tableType||col.tableType===''"
@ -115,7 +116,7 @@
@next-click="handleNextClick"
:current-page="pageNo"
:page-sizes="tablePageSizes"
:page-size="table.params.pageSize"
:page-size="pageSize"
layout="jumper, prev, pager, next,sizes, total"
:total="total"></el-pagination>
</el-col>
@ -137,7 +138,7 @@ export default {
table: {
height: this.tableHeight,
params: {
pageSize: this.pageSize, //
pageSize: Number, //
pageNo: this.pageNo //
}
},
@ -150,7 +151,7 @@ export default {
watch: {
tableHeight (height) {
this.table.height = height
}
},
},
props: {
keyword: {
@ -188,10 +189,7 @@ export default {
type: Number,
default: 1
},
pageSize: {
type: Number,
default: 10
},
tableHeight: {
type: Number
},
@ -206,23 +204,30 @@ export default {
},
computed: {
//
// operationWidth: () => {
// return 120
// // if (this.operations.includes('add')) {
// // return (this.operations.length - 1) * 80 // add
// // } else if (this.operations.includes('analyze')) {
// // return (this.operations.length + 0.5) * 80 // analyze
// // } else {
// // return this.operations.length * 140
// // }
// },
tableSize () {
if (this.resolution === 'small') {
return 10
} else {
return 20
pageSize: {
//getter
get () {
if (this.resolution === 'small') {
this.table.params.pageSize = 10
return 10
} else {
this.table.params.pageSize = 20
return 20
}
},
//setter
set (newValue) {
console.log('computed setter...')
this.table.params.pageSize = newValue
// return newValue
}
},
tablePageSizes () {
if (this.resolution === 'small') {
@ -248,13 +253,14 @@ export default {
})
Object.assign(this.table.params, this.params)
console.log(this.table.params)
//
window.app.ajax.post(
this.url,
this.table.params,
(data, rspMsg) => {
if (data) {
// debugger
this.tableData = data.list
this.total = data.total
}
@ -307,8 +313,10 @@ export default {
scope._self.$refs[`popover-${scope.$index}`].doClose()
},
handleSizeChange (pageSize) {
this.table.params.pageSize = pageSize
this.table.params.pageNo = 0
this.table.params.pageNo = 1
this.$nextTick(() => {
this.loadData()
})

12
epmet-oper-web/src/views/components/CTableNoPage.vue

@ -66,7 +66,8 @@
class="function-icon"
:fit=" col.fill?col.fill:'fill'">
</template></el-table-column>
</template>
</el-table-column>
<!--普通列-->
<el-table-column v-if="!col.tableType||col.tableType===''"
@ -89,11 +90,6 @@
class="operate">
<template slot-scope="scope">
<!-- <el-button type="text"
style="width=100px;height=100px"
icon="el-icon-top"></el-button> -->
<el-button v-for="(item,index) in orderOperations"
:key="index"
:style=item.style
@ -182,13 +178,13 @@ export default {
operations: {
type: Array,
default () {
return [{}]
return []
}
},
orderOperations: {
type: Array,
default () {
return [{}]
return []
}
},
tableHeight: {

1
epmet-oper-web/src/views/modules/customer/customize/ConfigItem.vue

@ -677,6 +677,7 @@ export default {
if (code === 0) {
this.roleCheckedArray = []
data.forEach(item => {
this.roleCheckedArray.push(item.roleKey)
})

2
epmet-oper-web/src/views/modules/customer/manage/CustomerInfo.vue

@ -80,7 +80,7 @@
<el-tag type="info"
class="eltag"
size="medium"
style="width:100%;margin-top:10px">管理员信息
style="width:100%;margin-top:10px">超级管理员信息
</el-tag><br /><br />
<el-form :inline="false"
:model="dataForm.managers[0]"

6
epmet-oper-web/src/views/modules/customer/miniProAgent/version/CommitForm.vue

@ -21,6 +21,7 @@
:params="tableParams"
keyword="Temp"
:operations="operations"
:orderOperations="orderOperations"
@selectRadioRow="selectRadioRow">
</c-table>
@ -63,6 +64,7 @@ export default {
},
optionData: {},
//
selTempId: '',
tableUrl: 'https://epmet-cloud.elinkservice.cn/api/third/code/templatelist',
@ -73,8 +75,8 @@ export default {
}
},
//
operations: [
],
operations: [],
orderOperations: [],
//
diaVisible: false

54
epmet-oper-web/src/views/modules/productConfig/subscribe/MyTemp.vue

@ -3,18 +3,22 @@
<el-card shadow="never"
class="aui-card--fill">
<el-tabs v-model="activeName"
@tab-click="tabClick()"
class="el-tabs">
<el-tab-pane label="居民端"
name="resi">
<my-temp-list ref="ref_resi"></my-temp-list>
</el-tab-pane>
<el-tab-pane label="工作端"
name="gov">
<my-temp-list ref="ref_work"></my-temp-list>
</el-tab-pane>
</el-tabs>
<el-radio-group @change="radioChange"
v-model="activeName">
<el-radio-button label="resi">居民端</el-radio-button>
<el-radio-button label="gov">工作端</el-radio-button>
</el-radio-group>
<div style="margin-top:20px">
<my-temp-list v-if="activeName==='resi'"
ref="ref_resi"></my-temp-list>
<my-temp-list v-if="activeName==='gov'"
ref="ref_work"></my-temp-list>
</div>
</el-card>
</div>
@ -47,17 +51,14 @@ export default {
methods: {
init (workAppid, resiAppid, clientType) {
init (workAppid, resiAppid) {
this.workAppid = workAppid
this.resiAppid = resiAppid
if (clientType) {
this.activeName = clientType
}
this.tabClick()
this.radioChange('resi')
},
tabClick () {
radioChange (val) {
if (this.activeName === 'resi') {
this.$refs['ref_resi'].init(this.resiAppid)
@ -65,13 +66,16 @@ export default {
this.$refs['ref_work'].init(this.workAppid)
}
},
//
refresh () {
if (this.activeName === 'gov') {
this.loadWorkTableData() //
} else if (this.activeName === 'resi') {
this.loadResiTableData() //
}
refreshTable (clientType) {
this.activeName = clientType
this.$nextTick(() => {
if (clientType === 'resi') {
this.$refs['ref_resi'].refreshTable(this.resiAppid)
} else if (clientType === 'gov') {
this.$refs['ref_work'].refreshTable(this.workAppid)
}
})
},
doLayout () {
this.$nextTick(() => {

35
epmet-oper-web/src/views/modules/productConfig/subscribe/MyTempList.vue

@ -37,8 +37,7 @@
</template>
</el-table-column>
</el-table>
<temp-detail ref="ref_edit"
@editDiaOK="editDiaOK">
<temp-detail ref="ref_edit">
</temp-detail>
@ -92,14 +91,15 @@ export default {
init (appId) {
this.appId = appId
this.loadData()
},
//
async loadData () {
this.dataListLoading = true
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/gettemplate'
// const url = '/third/subscribe/gettemplate'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/gettemplate'
const url = '/third/subscribe/gettemplate'
const params = {
appId: this.appId
}
@ -115,12 +115,9 @@ export default {
},
//
refresh () {
if (this.activeName === 'gov') {
this.loadWorkTableData() //
} else if (this.activeName === 'resi') {
this.loadResiTableData() //
}
refreshTable (appId) {
this.appId = appId
this.loadData()
},
//
@ -143,8 +140,8 @@ export default {
async del (row) {
this.startLoading()
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/deltemplate'
// const url = '/third/subscribe/deltemplate'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/deltemplate'
const url = '/third/subscribe/deltemplate'
const params = {
appId: this.appId,
priTmplId: row.priTmplId
@ -153,26 +150,14 @@ export default {
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.$message.success('删除成功')
this.loadData()
} else {
this.$message.error(msg)
}
this.endLoading()
},
//
diaCancel () {
this.$emit('cancleBack')
},
editDiaOK () {
this.refresh()
},
editDiaCancel () {
},
async renderSelData () { // //
},
//
startLoading () {

128
epmet-oper-web/src/views/modules/productConfig/subscribe/TempDetail.vue

@ -17,20 +17,20 @@
<div class=" div_keywords_sel div_left">
<!-- <div class="div_left_item"
v-for="(item,index) in kidSelNameList"
:key="item">
<el-row :gutter="10">
<el-col style=" text-align: right"
:span="9">
<span>{{item}}:</span>
</el-col>
<el-col :span="15">
<span>{{kidSelExampleList[index]}}</span>
</el-col>
</el-row>
</div> -->
<div class="div_left_item"
v-for="(item,index) in exampleArray"
:key="index">
<el-row :gutter="10">
<el-col style=" text-align: left"
:span="9">
<span class="span_left_item_title padding_10">{{item.title}}</span>
</el-col>
<el-col :span="15">
<span class="span_left_item_content">{{item.content}}</span>
</el-col>
</el-row>
</div>
</div>
</div>
@ -39,58 +39,70 @@
<el-col :span="15">
<el-row :gutter="10">
<div class="div_left_item_total">
<div class="div_right_item_total">
<el-col style=" text-align: left"
:span="6">
<span class="span_left_item_title">模板ID</span>
<span class="span_right_item_title">模板ID</span>
</el-col>
<el-col :span="18">
<span class="span_left_item_content">{{dataForm.priTmplId}}</span>
<span class="span_right_item_content">{{dataForm.priTmplId}}</span>
</el-col>
</div>
</el-row>
<el-row :gutter="10">
<div class="div_left_item_total">
<div class="div_right_item_total">
<el-col style=" text-align: left"
:span="6">
<span class="span_left_item_title">标题</span>
<span class="span_right_item_title">标题</span>
</el-col>
<el-col :span="18">
<span class="span_left_item_content">{{dataForm.title}}</span>
<span class="span_right_item_content">{{dataForm.title}}</span>
</el-col>
</div>
</el-row>
<el-row :gutter="10">
<div class="div_left_item_total">
<div class="div_right_item_total">
<el-col style=" text-align: left"
:span="6">
<span class="span_left_item_title">类目</span>
<span class="span_right_item_title">类目</span>
</el-col>
<el-col :span="18">
<span class="span_left_item_content">{{'社区/论坛'}}</span>
<span class="span_right_item_content">{{'社区/论坛'}}</span>
</el-col>
</div>
</el-row>
<el-row :gutter="10">
<div class="div_left_item_total">
<div class="div_right_item_total">
<el-col style=" text-align: left"
:span="6">
<span class="span_left_item_title">详细内容</span>
<span class="span_right_item_title">详细内容</span>
</el-col>
<el-col :span="18">
<span class="span_left_item_content">{{dataForm.content}}</span>
<div v-for="(item,index) in contentArray"
:key="index">
<el-row :gutter="10">
<el-col style=" text-align: left"
:span="9">
<span class="span_left_item_title">{{item.title}}</span>
</el-col>
<el-col :span="15">
<span class="span_left_item_content">{{item.content}}</span>
</el-col>
</el-row>
</div>
</el-col>
</div>
</el-row>
<el-row :gutter="10">
<div class="div_left_item_total">
<div class="div_right_item_total">
<el-col style=" text-align: left"
:span="6">
<span class="span_left_item_title">场景说明</span>
<span class="span_right_item_title">场景说明</span>
</el-col>
<el-col :span="18">
<span class="span_left_item_content">{{dataForm.sceneDesc}}</span>
<span class="span_right_item_content">{{dataForm.sceneDesc}}</span>
</el-col>
</div>
</el-row>
@ -120,14 +132,15 @@ export default {
priTmplId: '',
title: '',
content: '',
contentShow: [],
example: '',
exampleArray: [],
type: '',
kidNames: '',
kidNamesArray: [],
sceneDesc: ''
}
},
exampleArray: [],
contentArray: [],
kidNamesArray: [],
}
},
created () {
@ -144,15 +157,28 @@ export default {
},
loadData () {
//
this.exampleArray = []
let array = this.dataForm.example.split('\\n')
array.forEach(element => {
let oneArray = element.split(':')
let obj = Object
for (let i = 0; i < array.length - 1; i++) {
let oneArray = array[i].split(':')
let obj = {}
obj.title = oneArray[0]
obj.content = oneArray[1]
})
this.dataForm.exampleArray =
console.log(this.dataForm.exampleArray)
this.exampleArray.push(obj)
}
//
this.contentArray = []
let arrayContent = this.dataForm.content.split('\\n')
for (let i = 0; i < arrayContent.length - 1; i++) {
let oneArray = arrayContent[i].split(':')
let obj = {}
obj.title = oneArray[0]
obj.content = oneArray[1]
this.contentArray.push(obj)
}
},
handleClose () {
@ -181,7 +207,7 @@ export default {
computed: {
diaWidth () {
return this.resolution === 'small' ? 80 : 70
return this.resolution === 'small' ? 70 : 60
},
diaTop () {
return this.resolution === 'small' ? '20px' : '100px'
@ -221,18 +247,18 @@ export default {
margin: 10px 10px;
font-size: 18px;
}
.padding_10 {
padding-left: 10px;
}
.div_left {
margin: 20px 20px 20px 20px;
margin: 40px 20px 20px 20px;
}
.div_left_item {
background-color: white;
margin: 0 0 10px 0;
padding: 0 0 0 10px;
}
.div_left_item_total {
margin: 10px 0 10px 20px;
.span_left_item_title {
color: rgb(121, 121, 121);
font-size: 15px;
}
@ -240,7 +266,17 @@ export default {
color: rgb(31, 31, 31);
font-size: 15px;
}
.span_left_item_title {
.div_right_item_total {
margin: 10px 0 10px 20px;
}
.span_right_item_content {
color: rgb(31, 31, 31);
font-size: 15px;
}
.span_right_item_title {
color: rgb(121, 121, 121);
font-size: 15px;
padding-left: 40px;
}
</style>

35
epmet-oper-web/src/views/modules/productConfig/subscribe/TempEdit.vue

@ -132,6 +132,8 @@ export default {
dataForm: {
appId: '',
tid: '',
title: '',
type: Number,
sceneDesc: '',
kidList: [],
nameList: []
@ -154,6 +156,8 @@ export default {
this.resiAppid = resiAppid
this.dataForm.appId = resiAppid
this.dataForm.tid = row.tid
this.dataForm.type = row.type
this.dataForm.title = row.title
this.visible = true
@ -162,12 +166,13 @@ export default {
},
async getkeywords () {
this.startLoading()
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/getkeywords'
// const url = '/third/subscribe/getkeywords'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/getkeywords'
const url = '/third/subscribe/getkeywords'
let _data = {
appId: this.appId
appId: this.resiAppid,
titleId: this.dataForm.tid
}
const { data, code, msg } = await requestPost(url, _data)
const { data, code, msg, internalMsg } = await requestPost(url, _data)
if (code === 0) {
this.kidAllList = data
this.kidAllList.forEach(item => {
@ -175,7 +180,7 @@ export default {
})
} else {
this.$message.error(msg)
this.$message.error(msg + ":" + internalMsg)
}
this.endLoading()
},
@ -183,9 +188,9 @@ export default {
this.kidSelNameList.splice(index - 1, 1, ...this.kidSelNameList.splice(index, 1, this.kidSelNameList[index - 1]))
this.kidSelIdList.splice(index - 1, 1, ...this.kidSelIdList.splice(index, 1, this.kidSelIdList[index - 1]))
this.kidSelExampleList.splice(index - 1, 1, ...this.kidSelExampleList.splice(index, 1, this.kidSelExampleList[index - 1]))
console.log(this.kidSelNameList)
console.log(this.kidSelIdList)
console.log(this.kidSelExampleList)
// console.log(this.kidSelNameList)
// console.log(this.kidSelIdList)
// console.log(this.kidSelExampleList)
},
checkboxChange (val, item, index) {
// debugger
@ -198,10 +203,10 @@ export default {
this.kidSelIdList = this.kidSelIdList.filter(idItem => idItem !== kid)
this.kidSelExampleList = this.kidSelExampleList.filter(exampleItem => exampleItem !== example)
}
console.log("kidSelIdList")
console.log(this.kidSelIdList)
console.log("kidSelExampleList")
console.log(this.kidSelExampleList)
// console.log("kidSelIdList")
// console.log(this.kidSelIdList)
// console.log("kidSelExampleList")
// console.log(this.kidSelExampleList)
},
async saveForm () {
@ -213,11 +218,11 @@ export default {
this.$message.warning('请填写场景描述')
return false
}
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/addtemplate'
// const url = '/third/subscribe/addtemplate'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/addtemplate'
const url = '/third/subscribe/addtemplate'
this.dataForm.kidList = this.kidSelIdList
this.dataForm.nameList = this.kidSelNameList
console.log(this.dataForm)
const { data, code, msg } = await requestPost(url, this.dataForm)
if (code === 0) {
let clientType = this.dataForm.appId === this.resiAppid ? 'resi' : 'gov'

40
epmet-oper-web/src/views/modules/productConfig/subscribe/TempList.vue

@ -86,12 +86,12 @@ export default {
resiAppid: '',
//
pageNo: 0,
pageNo: 1,
pageSize: 10,
total: 0,
tableParams: {
pageNo: 0,
pageNo: 1,
pageSize: 10
},
@ -146,10 +146,10 @@ export default {
//
async loadData () {
this.dataListLoading = true
const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/getpubtemplatetitles'
// const url = '/third/subscribe/getpubtemplatetitles'
// const url = 'https://nei.netease.com/api/apimock-v2/e3b1d0eb88e905f6c7ee559b2d6bb7ad/third/subscribe/getpubtemplatetitles'
const url = '/third/subscribe/getpubtemplatetitles'
this.tableParams.appId = this.workAppid
this.tableParams.appId = this.resiAppid
this.tableParams.ids = '794'
const { data, code, msg } = await requestPost(url, this.tableParams)
@ -166,13 +166,35 @@ export default {
this.dataListLoading = false
},
loadData2 () {
this.total = 10
this.dataList = [
{
"tid": 484,
"title": "新的评论提醒",
"type": 2,
"categoryId":
"794",
"keywords": ["文章标题", "评论内容", "评论时间", "取消提醒", "评论用户", "帖子内容", "评论类型", "评论人数", "备注"]
},
{ "tid": 523, "title": "评论成功提醒", "type": 2, "categoryId": "794", "keywords": ["时间", "评论人", "温馨提示"] }, { "tid": 529, "title": "便民信息审核结果通知", "type": 2, "categoryId": "794", "keywords": ["审核结果", "审核人员", "联系电话", "审核时间", "拒绝理由"] }, { "tid": 569, "title": "签到提醒", "type": 2, "categoryId": "794", "keywords": ["签到人", "签到时间", "活动名称", "温馨提示", "连续签到", "待领奖励", "累计签到"] }, { "tid": 572, "title": "活动成功通知", "type": 2, "categoryId": "794", "keywords": ["活动标题", "完成时间", "参与人数", "执行情况"] }, { "tid": 577, "title": "挑战开始提醒", "type": 2, "categoryId": "794", "keywords": ["挑战名称", "开始时间", "结束时间", "挑战目标", "奖金池"] }, { "tid": 579, "title": "动态点赞通知", "type": 2, "categoryId": "794", "keywords": ["点赞用户", "点赞时间", "帖子标题", "被赞次数", "温馨提示", "帖子内容", "动态标题", "动态内容"] }, { "tid": 688, "title": "挑战结果通知", "type": 2, "categoryId": "794", "keywords": ["挑战名称", "挑战结果", "当前排名", "挑战项目", "挑战时间", "奖励信息", "备注"] }, { "tid": 696, "title": "新的回复提醒", "type": 2, "categoryId": "794", "keywords": ["留言主题", "回复内容", "回复时间", "留言分区", "取消提醒", "用户"] }, { "tid": 726, "title": "审核通过提醒", "type": 2, "categoryId": "794", "keywords": ["审核结果", "帖子主题", "会员昵称", "通过时间", "备注", "活动名称", "活动时间", "组队发起人", "报名时间", "申请方"] }
]
this.dataList.forEach(element => {
element.typeShow = element.type === 2 ? '一次性订阅' : '长期订阅'
element.keywordsShow = element.keywords.join()
})
},
tabClick () {
if (this.activeName === 'mine') {
this.$refs['ref_mytemp'].init(this.workAppid, this.resiAppid)
}
if (this.activeName === 'public') {
this.loadData()
if (this.dataList.length === 0) {
this.loadData2()
}
}
},
@ -187,7 +209,7 @@ export default {
},
editDiaOK (clientType) {
this.activeName = 'mine'
this.$refs['ref_mytemp'].init(this.workAppid, this.resiAppid, clientType)
this.$refs['ref_mytemp'].refreshTable(clientType)
},
editDiaCancel () {
@ -196,14 +218,14 @@ export default {
handleSizeChange (pageSize) {
this.tableParams.pageSize = pageSize
this.tableParams.pageNo = 0
this.tableParams.pageNo = 1
this.$nextTick(() => {
this.loadData()
})
},
//
handleCurrentChange (pageNo) {
this.tableParams.pageNo = pageNo - 1
this.tableParams.pageNo = pageNo
this.$nextTick(() => {
this.loadData()
})

2
epmet-oper-web/src/views/pages/loginWork.vue

@ -318,7 +318,7 @@ export default {
float: left;
}
.span_name {
font-size: 20px;
font-size: 18px;
cursor: pointer;
/* color: rgb(37, 156, 235); */
float: left;

Loading…
Cancel
Save